mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-16 12:54:40 +00:00
Bg_Hidan_Fwbig (#450)
* Darkmeiro decompilation Bg_Gnd_Darkmeiro decompiled, matched, and documented. * give this a shot * fix conflict * one more try * could be useful * whoops * long firewall is long * Fwbig documented, some cleanup on Zl1 * format * merge and cleanup * last things
This commit is contained in:
parent
daf624fe48
commit
3ba022128c
20 changed files with 273 additions and 953 deletions
|
@ -4,12 +4,30 @@
|
|||
|
||||
#define THIS ((BgHidanFwbig*)thisx)
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ FWBIG_MOVE,
|
||||
/* 1 */ FWBIG_RESET,
|
||||
/* 2 */ FWBIG_KILL
|
||||
} HidanFwbigMoveState;
|
||||
|
||||
void BgHidanFwbig_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
/*
|
||||
void BgHidanFwbig_UpdatePosition(BgHidanFwbig* this);
|
||||
|
||||
void BgHidanFwbig_WaitForSwitch(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_WaitForCs(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_Lower(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_WaitForTimer(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_WaitForPlayer(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
void BgHidanFwbig_Move(BgHidanFwbig* this, GlobalContext* globalCtx);
|
||||
|
||||
extern Gfx D_0600DB20[];
|
||||
extern Gfx D_040173D0[];
|
||||
extern Gfx D_04017BD0[];
|
||||
|
||||
const ActorInit Bg_Hidan_Fwbig_InitVars = {
|
||||
ACTOR_BG_HIDAN_FWBIG,
|
||||
ACTORTYPE_PROP,
|
||||
|
@ -21,29 +39,223 @@ const ActorInit Bg_Hidan_Fwbig_InitVars = {
|
|||
(ActorFunc)BgHidanFwbig_Update,
|
||||
(ActorFunc)BgHidanFwbig_Draw,
|
||||
};
|
||||
*/
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/BgHidanFwbig_Init.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/BgHidanFwbig_Destroy.s")
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{ COLTYPE_UNK10, 0x11, 0x00, 0x09, 0x20, COLSHAPE_CYLINDER },
|
||||
{ 0x00, { 0x20000000, 0x01, 0x04 }, { 0xFFCFFFFF, 0x00, 0x00 }, 0x19, 0x00, 0x01 },
|
||||
{ 30, 130, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_808874B0.s")
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887534.s")
|
||||
void BgHidanFwbig_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
BgHidanFwbig* this = THIS;
|
||||
Player* player = PLAYER;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887598.s")
|
||||
Actor_ProcessInitChain(&this->actor, sInitChain);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
this->actor.colChkInfo.mass = 0xFF;
|
||||
this->direction = (u16)(thisx->params >> 8);
|
||||
thisx->params &= 0xFF;
|
||||
if (this->direction != 0) {
|
||||
this->actor.initPosRot.pos.x = 1560.0f;
|
||||
this->actor.initPosRot.pos.z = 0.0f;
|
||||
if (player->actor.posRot.pos.z > 300.0f) {
|
||||
this->direction = -1;
|
||||
this->actor.initPosRot.rot.y = this->actor.shape.rot.y = -0x4E38;
|
||||
} else if (player->actor.posRot.pos.z < -300.0f) {
|
||||
this->direction = 1;
|
||||
this->actor.initPosRot.rot.y = this->actor.shape.rot.y = -0x31C8;
|
||||
} else {
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
BgHidanFwbig_UpdatePosition(this);
|
||||
Actor_SetScale(&this->actor, 0.15f);
|
||||
this->collider.dim.height = 230;
|
||||
this->actor.flags |= 0x10;
|
||||
this->moveState = FWBIG_MOVE;
|
||||
this->actionFunc = BgHidanFwbig_WaitForPlayer;
|
||||
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y - (2400.0f * this->actor.scale.y);
|
||||
} else {
|
||||
Actor_SetScale(&this->actor, 0.1f);
|
||||
this->actionFunc = BgHidanFwbig_WaitForSwitch;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_808875C4.s")
|
||||
void BgHidanFwbig_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
BgHidanFwbig* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887638.s")
|
||||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887718.s")
|
||||
void BgHidanFwbig_UpdatePosition(BgHidanFwbig* this) {
|
||||
s16 startAngle = this->actor.shape.rot.y + this->direction * -0x4000;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887768.s")
|
||||
this->actor.posRot.pos.x = (Math_Sins(startAngle) * 885.4f) + this->actor.initPosRot.pos.x;
|
||||
this->actor.posRot.pos.z = (Math_Coss(startAngle) * 885.4f) + this->actor.initPosRot.pos.z;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_808877C4.s")
|
||||
void BgHidanFwbig_WaitForSwitch(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if (Flags_GetSwitch(globalCtx, this->actor.params)) {
|
||||
this->actionFunc = BgHidanFwbig_WaitForCs;
|
||||
func_800800F8(globalCtx, 0xD0C, -0x63, &this->actor, 0);
|
||||
this->timer = 35;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/func_80887864.s")
|
||||
void BgHidanFwbig_WaitForCs(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if (this->timer-- == 0) {
|
||||
this->actionFunc = BgHidanFwbig_Lower;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/BgHidanFwbig_Update.s")
|
||||
void BgHidanFwbig_Rise(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if (Math_ApproxF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y, 10.0f)) {
|
||||
if (this->direction == 0) {
|
||||
Flags_UnsetSwitch(globalCtx, this->actor.params);
|
||||
this->actionFunc = BgHidanFwbig_WaitForSwitch;
|
||||
} else {
|
||||
this->actionFunc = BgHidanFwbig_Move;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Fwbig/BgHidanFwbig_Draw.s")
|
||||
void BgHidanFwbig_Lower(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if (Math_ApproxF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y - (2400.0f * this->actor.scale.y),
|
||||
10.0f)) {
|
||||
if (this->direction == 0) {
|
||||
this->actionFunc = BgHidanFwbig_WaitForTimer;
|
||||
this->timer = 150;
|
||||
} else if (this->moveState == FWBIG_KILL) {
|
||||
Actor_Kill(&this->actor);
|
||||
} else {
|
||||
if (this->moveState == FWBIG_MOVE) {
|
||||
this->actor.shape.rot.y -= (this->direction * 0x1800);
|
||||
} else {
|
||||
this->moveState = FWBIG_MOVE;
|
||||
this->actor.shape.rot.y = this->actor.initPosRot.rot.y;
|
||||
}
|
||||
BgHidanFwbig_UpdatePosition(this);
|
||||
this->actionFunc = BgHidanFwbig_Rise;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BgHidanFwbig_WaitForTimer(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if(this->timer != 0) {
|
||||
this->timer--;
|
||||
}
|
||||
if (this->timer == 0) {
|
||||
this->actionFunc = BgHidanFwbig_Rise;
|
||||
}
|
||||
func_8002F994(&this->actor, this->timer);
|
||||
}
|
||||
|
||||
void BgHidanFwbig_WaitForPlayer(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
|
||||
if (player->actor.posRot.pos.x < 1150.0f) {
|
||||
this->actionFunc = BgHidanFwbig_Rise;
|
||||
func_800800F8(globalCtx, 0xCDA, -0x63, &this->actor, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void BgHidanFwbig_Move(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
if (!Player_InCsMode(globalCtx)) {
|
||||
if (Math_ApproxUpdateScaledS(&this->actor.shape.rot.y,
|
||||
this->actor.initPosRot.rot.y + (this->direction * 0x6390), 0x20)) {
|
||||
this->moveState = FWBIG_RESET;
|
||||
this->actionFunc = BgHidanFwbig_Lower;
|
||||
} else {
|
||||
BgHidanFwbig_UpdatePosition(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BgHidanFwbig_MoveCollider(BgHidanFwbig* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
Vec3f projPos;
|
||||
f32 cs;
|
||||
f32 sn;
|
||||
|
||||
func_8002DBD0(&this->actor, &projPos, &player->actor.posRot.pos);
|
||||
projPos.z = ((projPos.z >= 0.0f) ? 1.0f : -1.0f) * 25.0f * -1.0f;
|
||||
if (this->direction == 0) {
|
||||
projPos.x = CLAMP(projPos.x, -360.0f, 360.0f);
|
||||
} else {
|
||||
projPos.x = CLAMP(projPos.x, -500.0f, 500.0f);
|
||||
}
|
||||
|
||||
sn = Math_Sins(this->actor.shape.rot.y);
|
||||
cs = Math_Coss(this->actor.shape.rot.y);
|
||||
this->collider.dim.pos.x = this->actor.posRot.pos.x + (projPos.x * cs) + (projPos.z * sn);
|
||||
this->collider.dim.pos.z = this->actor.posRot.pos.z - (projPos.x * sn) + (projPos.z * cs);
|
||||
this->collider.dim.pos.y = this->actor.posRot.pos.y;
|
||||
|
||||
this->actor.posRot.rot.y = (projPos.z < 0.0f) ? this->actor.shape.rot.y : this->actor.shape.rot.y + 0x8000;
|
||||
}
|
||||
|
||||
void BgHidanFwbig_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
BgHidanFwbig* this = THIS;
|
||||
|
||||
if (this->collider.base.atFlags & 2) {
|
||||
this->collider.base.atFlags &= ~2;
|
||||
func_8002F71C(globalCtx, &this->actor, 5.0f, this->actor.posRot.rot.y, 1.0f);
|
||||
if (this->direction != 0) {
|
||||
this->actionFunc = BgHidanFwbig_Lower;
|
||||
}
|
||||
}
|
||||
if ((this->direction != 0) && (globalCtx->roomCtx.prevRoom.num == this->actor.room)) {
|
||||
this->moveState = FWBIG_KILL;
|
||||
this->actionFunc = BgHidanFwbig_Lower;
|
||||
}
|
||||
|
||||
this->actionFunc(this, globalCtx);
|
||||
|
||||
if ((this->actor.initPosRot.pos.y - 200.0f) < this->actor.posRot.pos.y) {
|
||||
if (gSaveContext.sceneSetupIndex < 4) {
|
||||
func_8002F974(&this->actor, NA_SE_EV_BURNING - SFX_FLAG);
|
||||
} else if ((s16)this->actor.posRot.pos.x == -513) {
|
||||
func_8002F974(&this->actor, NA_SE_EV_FLAME_OF_FIRE - SFX_FLAG);
|
||||
}
|
||||
BgHidanFwbig_MoveCollider(this, globalCtx);
|
||||
CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
}
|
||||
|
||||
void BgHidanFwbig_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
f32 height;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_bg_hidan_fwbig.c", 630);
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPSegment(oGfxCtx->polyXlu.p++, 0x09, SEGMENTED_TO_VIRTUAL(D_040173D0));
|
||||
|
||||
gSPSegment(oGfxCtx->polyXlu.p++, 0x0A, SEGMENTED_TO_VIRTUAL(D_04017BD0));
|
||||
|
||||
height = thisx->scale.y * 2400.0f;
|
||||
gDPSetPrimColor(oGfxCtx->polyXlu.p++, 0x80, 0x80, 255, 220, 0,
|
||||
((height - (thisx->initPosRot.pos.y - thisx->posRot.pos.y)) * 255.0f) / height);
|
||||
|
||||
gDPSetEnvColor(oGfxCtx->polyXlu.p++, 255, 0, 0, 0);
|
||||
|
||||
gSPSegment(oGfxCtx->polyXlu.p++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, globalCtx->gameplayFrames % 0x80, 0, 0x20, 0x40, 1, 0,
|
||||
(u8)(globalCtx->gameplayFrames * -15), 0x20, 0x40));
|
||||
|
||||
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_hidan_fwbig.c", 660),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(oGfxCtx->polyXlu.p++, D_0600DB20);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_bg_hidan_fwbig.c", 664);
|
||||
}
|
||||
|
|
|
@ -6,9 +6,15 @@
|
|||
|
||||
struct BgHidanFwbig;
|
||||
|
||||
typedef void (*BgHidanFwbigActionFunc)(struct BgHidanFwbig*, GlobalContext*);
|
||||
|
||||
typedef struct BgHidanFwbig {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ char unk_14C[0x54];
|
||||
/* 0x014C */ BgHidanFwbigActionFunc actionFunc;
|
||||
/* 0x0150 */ s8 direction;
|
||||
/* 0x0151 */ u8 moveState;
|
||||
/* 0x0152 */ s16 timer;
|
||||
/* 0x0154 */ ColliderCylinder collider;
|
||||
} BgHidanFwbig; // size = 0x01A0
|
||||
|
||||
extern const ActorInit Bg_Hidan_Fwbig_InitVars;
|
||||
|
|
|
@ -121,12 +121,7 @@ void func_80B4AE18(EnZl1* this) {
|
|||
if (DECR(this->unk_1FC) == 0) {
|
||||
this->unk_1FC = Math_Rand_S16Offset(0x1E, 0xA);
|
||||
}
|
||||
|
||||
if (this->unk_1FC < 4) {
|
||||
this->unk_1FE = this->unk_1FC;
|
||||
} else {
|
||||
this->unk_1FE = 0;
|
||||
}
|
||||
this->unk_1FE = (this->unk_1FC < 4) ? this->unk_1FC : 0;
|
||||
|
||||
this->unk_1F4 = D_80B4E61C[this->unk_1FE];
|
||||
this->unk_1F8 = D_80B4E61C[this->unk_1FE];
|
||||
|
@ -141,17 +136,13 @@ void func_80B4AF18(EnZl1* this, GlobalContext* globalCtx) {
|
|||
func_80038290(globalCtx, &this->actor, &this->unk_200, &this->unk_206, this->actor.posRot2.pos);
|
||||
|
||||
if (this->unk_1E6 != 0) {
|
||||
if (func_8002F334(this, globalCtx) != 0) {
|
||||
if (func_8002F334(&this->actor, globalCtx)) {
|
||||
this->unk_1E6 = 0;
|
||||
}
|
||||
} else {
|
||||
if (func_8002F194(this, globalCtx)) {
|
||||
this->unk_1E6 = 1;
|
||||
} else {
|
||||
if (this->actor.posRot.pos.y <= player->actor.posRot.pos.y) {
|
||||
func_8002F2F4(this, globalCtx);
|
||||
}
|
||||
}
|
||||
} else if (func_8002F194(&this->actor, globalCtx)) {
|
||||
this->unk_1E6 = 1;
|
||||
} else if (this->actor.posRot.pos.y <= player->actor.posRot.pos.y) {
|
||||
func_8002F2F4(&this->actor, globalCtx);
|
||||
}
|
||||
|
||||
Collider_CylinderUpdate(&this->actor, &this->collider);
|
||||
|
@ -193,10 +184,8 @@ void func_80B4B010(EnZl1* this, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
if (1) {}; // necessary to match
|
||||
rotDiff = ABS(this->actor.yawTowardsLink - this->actor.shape.rot.y);
|
||||
if (rotDiff < 0x238E) {
|
||||
if (!(player->actor.posRot.pos.y < this->actor.posRot.pos.y)) {
|
||||
func_8002F2F4(this, globalCtx);
|
||||
}
|
||||
if ((rotDiff < 0x238E) && !(player->actor.posRot.pos.y < this->actor.posRot.pos.y)) {
|
||||
func_8002F2F4(&this->actor, globalCtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -230,7 +219,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
sp3C = 1;
|
||||
this->actor.textId = 0x702E;
|
||||
func_8010B680(globalCtx, this->actor.textId, NULL);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -242,7 +231,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
player->actor.posRot.pos = sp58;
|
||||
this->actor.textId = 0x702F;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
|
@ -250,7 +239,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
if (msgCtx->choiceIndex == 0) {
|
||||
animationHeader = &D_06013F10;
|
||||
sp3C = 2;
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
} else {
|
||||
animationHeader = &D_060116E4;
|
||||
sp3C = 2;
|
||||
|
@ -265,7 +254,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
sp3C = 1;
|
||||
this->actor.textId = 0x7032;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
|
@ -277,7 +266,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
this->actor.textId = 0x7034;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -285,7 +274,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
if ((func_8010BDBC(msgCtx) == 5) && (func_80106BC8(globalCtx) != 0)) {
|
||||
this->actor.textId = 0x7033;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 -= 1;
|
||||
this->unk_1E2--;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
|
@ -295,14 +284,14 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
sp3C = 1;
|
||||
this->actor.textId = 0x7031;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if ((func_8010BDBC(msgCtx) == 5) && (func_80106BC8(globalCtx) != 0)) {
|
||||
this->actor.textId = 0x7030;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
|
@ -314,7 +303,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
this->actor.textId = 0x7031;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 -= 1;
|
||||
this->unk_1E2--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -326,7 +315,7 @@ void func_80B4B240(EnZl1* this, GlobalContext* globalCtx) {
|
|||
globalCtx->csCtx.segment = D_80B4C5D0;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
this->actionFunc = func_80B4B8B4;
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -443,13 +432,10 @@ void func_80B4BC78(EnZl1* this, GlobalContext* globalCtx) {
|
|||
CsCmdActorAction* npcAction;
|
||||
s32 pad;
|
||||
f32 frameCount;
|
||||
Vec3f sp40;
|
||||
|
||||
if (SkelAnime_FrameUpdateMatrix(&this->skelAnime) != 0) {
|
||||
if (this->skelAnime.animCurrentSeg == &D_06010B38) {
|
||||
frameCount = SkelAnime_GetFrameCount(&D_06011348.genericHeader);
|
||||
SkelAnime_ChangeAnim(&this->skelAnime, &D_06011348, 1.0f, 0.0f, frameCount, 0, -10.0f);
|
||||
}
|
||||
if (SkelAnime_FrameUpdateMatrix(&this->skelAnime) && (this->skelAnime.animCurrentSeg == &D_06010B38)) {
|
||||
frameCount = SkelAnime_GetFrameCount(&D_06011348.genericHeader);
|
||||
SkelAnime_ChangeAnim(&this->skelAnime, &D_06011348, 1.0f, 0.0f, frameCount, 0, -10.0f);
|
||||
}
|
||||
func_80B4B874(this, globalCtx);
|
||||
npcAction = globalCtx->csCtx.npcActions[0];
|
||||
|
@ -457,9 +443,7 @@ void func_80B4BC78(EnZl1* this, GlobalContext* globalCtx) {
|
|||
func_80B4B7F4(npcAction, &sp70);
|
||||
func_80B4B834(npcAction, &sp64);
|
||||
if (this->unk_1E6 == 0) {
|
||||
sp40 = sp70;
|
||||
this->actor.initPosRot.pos = sp40;
|
||||
this->actor.posRot.pos = sp40;
|
||||
this->actor.posRot.pos = this->actor.initPosRot.pos = sp70;
|
||||
}
|
||||
|
||||
if (this->unk_1E6 != npcAction->action) {
|
||||
|
@ -493,7 +477,7 @@ void func_80B4BF2C(EnZl1* this, GlobalContext* globalCtx) {
|
|||
if (msgCtx->choiceIndex == 0) {
|
||||
this->actor.textId = 0x703B;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
} else {
|
||||
this->actor.textId = 0x703A;
|
||||
func_8010B720(globalCtx, this->actor.textId);
|
||||
|
@ -508,19 +492,19 @@ void func_80B4BF2C(EnZl1* this, GlobalContext* globalCtx) {
|
|||
func_8002F434(&this->actor, globalCtx, GI_LETTER_ZELDA, 120.0f, 10.0f);
|
||||
globalCtx->msgCtx.msgMode = 0x36;
|
||||
globalCtx->msgCtx.unk_E3E7 = 4;
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
if (Actor_HasParent(this, globalCtx)) {
|
||||
if (Actor_HasParent(&this->actor, globalCtx)) {
|
||||
func_800C078C(globalCtx, 0, this->unk_1E8);
|
||||
Gameplay_ChangeCameraStatus(globalCtx, 0, 7);
|
||||
Gameplay_ClearCamera(globalCtx, this->unk_1E8);
|
||||
this->actor.parent = NULL;
|
||||
this->unk_1E2 += 1;
|
||||
this->unk_1E2++;
|
||||
} else {
|
||||
func_8002F434(this, globalCtx, GI_LETTER_ZELDA, 120.0f, 10.0f);
|
||||
func_8002F434(&this->actor, globalCtx, GI_LETTER_ZELDA, 120.0f, 10.0f);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
@ -535,20 +519,20 @@ void func_80B4BF2C(EnZl1* this, GlobalContext* globalCtx) {
|
|||
if (player->actor.posRot.pos.y < this->actor.posRot.pos.y) {
|
||||
break;
|
||||
} else {
|
||||
if (func_8002F194(this, globalCtx) != 0) {
|
||||
this->unk_1E2 += 1;
|
||||
if (func_8002F194(&this->actor, globalCtx)) {
|
||||
this->unk_1E2++;
|
||||
} else {
|
||||
func_8002F2F4(this, globalCtx);
|
||||
func_8002F2F4(&this->actor, globalCtx);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (func_8002F334(this, globalCtx) != 0) {
|
||||
this->unk_1E2 -= 1;
|
||||
if (func_8002F334(&this->actor, globalCtx)) {
|
||||
this->unk_1E2--;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (func_8002F334(this, globalCtx) != 0) {
|
||||
if (func_8002F334(&this->actor, globalCtx)) {
|
||||
func_8002DF54(globalCtx, &this->actor, 7);
|
||||
Interface_ChangeAlpha(50);
|
||||
this->actor.flags &= ~0x100;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue