1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-06 14:20:11 +00:00

Merge remote-tracking branch 'upstream/master' into elemental-arrows

This commit is contained in:
fig02 2020-03-30 05:52:27 -04:00
commit dd0541751c
164 changed files with 2022 additions and 5057 deletions

View file

@ -1,14 +1,22 @@
/*
* File: z_bg_gjyo_bridge.c
* Overlay: ovl_Bg_Gjyo_Bridge
* Description: Rainbow Bridge outside Ganon's Castle
*/
#include "z_bg_gjyo_bridge.h"
#define ROOM 0x00
#define FLAGS 0x00000000
void BgGjyoBridge_Init(BgGjyoBridge* this, GlobalContext* globalCtx);
void BgGjyoBridge_Destroy(BgGjyoBridge* this, GlobalContext* globalCtx);
void BgGjyoBridge_Update(BgGjyoBridge* this, GlobalContext* globalCtx);
void BgGjyoBridge_Draw(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_Init(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_Destroy(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_Update(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_Draw(BgGjyoBridge* this, GlobalContext* globalCtx);
static void func_808787A4(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_TriggerCutscene(BgGjyoBridge* this, GlobalContext* globalCtx);
static void BgGjyoBridge_SpawnBridge(BgGjyoBridge* this, GlobalContext* globalCtx);
/*
const ActorInit Bg_Gjyo_Bridge_InitVars = {
ACTOR_BG_GJYO_BRIDGE,
ACTORTYPE_PROP,
@ -21,17 +29,96 @@ const ActorInit Bg_Gjyo_Bridge_InitVars = {
(ActorFunc)BgGjyoBridge_Update,
(ActorFunc)BgGjyoBridge_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/BgGjyoBridge_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/BgGjyoBridge_Destroy.s")
InitChainEntry initChain[] = {
ICHAIN_F32(unk_F8, 800, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/func_808787A4.s")
extern UNK_TYPE D_06000600;
extern UNK_TYPE D_06000DB8;
extern UNK_TYPE D_02002640;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/func_808787B0.s")
void BgGjyoBridge_Init(BgGjyoBridge* this, GlobalContext* globalCtx) {
s32 pad;
DynaCollisionContext* dynaCollisionContext;
s32 local_c;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/func_80878904.s")
local_c = 0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/BgGjyoBridge_Update.s")
Actor_ProcessInitChain(&this->dyna, &initChain);
DynaPolyInfo_SetActorMove(this, 0);
DynaPolyInfo_Alloc(&D_06000DB8, &local_c);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Gjyo_Bridge/BgGjyoBridge_Draw.s")
dynaCollisionContext = &globalCtx->colCtx.dyna;
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, dynaCollisionContext, this, local_c);
if (gSaveContext.event_chk_inf[4] & 0x2000) {
this->actionFunc = func_808787A4;
} else {
this->dyna.actor.draw = NULL;
func_8003EBF8(globalCtx, dynaCollisionContext, this->dyna.dynaPolyId);
this->actionFunc = BgGjyoBridge_TriggerCutscene;
}
}
void BgGjyoBridge_Destroy(BgGjyoBridge* this, GlobalContext* globalCtx) {
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
void func_808787A4(BgGjyoBridge* this, GlobalContext* globalCtx) {
}
void BgGjyoBridge_TriggerCutscene(BgGjyoBridge* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
if ((gBitFlags[3] & gSaveContext.quest_items) && (gBitFlags[4] & gSaveContext.quest_items) &&
(INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT) && (player->actor.posRot.pos.x > -70.0f) &&
(player->actor.posRot.pos.x < 300.0f) && (player->actor.posRot.pos.y > 1340.0f) &&
(player->actor.posRot.pos.z > 1340.0f) && (player->actor.posRot.pos.z < 1662.0f) &&
(func_800BFC84(globalCtx) == 0)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(&D_02002640);
gSaveContext.cutscene_trigger = 1;
this->actionFunc = BgGjyoBridge_SpawnBridge;
}
}
void BgGjyoBridge_SpawnBridge(BgGjyoBridge* this, GlobalContext* globalCtx) {
if ((globalCtx->csCtx.state != 0) && (globalCtx->csCtx.actorActions[2] != NULL) &&
(globalCtx->csCtx.actorActions[2]->action == 2)) {
this->dyna.actor.draw = &BgGjyoBridge_Draw;
func_8003EC50(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
gSaveContext.event_chk_inf[4] |= 0x2000;
}
}
void BgGjyoBridge_Update(BgGjyoBridge* this, GlobalContext* globalCtx) {
this->actionFunc(&this->dyna.actor, globalCtx);
}
void BgGjyoBridge_Draw(BgGjyoBridge* this, GlobalContext* globalCtx) {
s32 pad;
GraphicsContext* gfxCtx;
Gfx* gfxArr[4];
gfxCtx = globalCtx->state.gfxCtx;
func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_bg_gjyo_bridge.c", 260);
func_80093D84(globalCtx->state.gfxCtx);
gSPSegment(gfxCtx->polyXlu.p++, 8,
Draw_TexScroll(globalCtx->state.gfxCtx, globalCtx->gameplayFrames & 127,
globalCtx->gameplayFrames * -3 & 127, 32, 32));
gSPSegment(gfxCtx->polyXlu.p++, 9,
Draw_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, -globalCtx->gameplayFrames & 127, 32, 32, 1, 0,
globalCtx->gameplayFrames & 127, 32, 32));
gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_gjyo_bridge.c", 281),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyXlu.p++, &D_06000600);
func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_bg_gjyo_bridge.c", 285);
}

View file

@ -5,8 +5,8 @@
#include <global.h>
typedef struct {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x1C];
/* 0x0000 */ DynaPolyActor dyna;
/* 0x0164 */ ActorFunc actionFunc;
} BgGjyoBridge; // size = 0x0168
extern const ActorInit Bg_Gjyo_Bridge_InitVars;

View file

@ -111,10 +111,10 @@ static void func_80899950(BgJyaKanaami* this, GlobalContext* globalCtx) {
if (Math_ApproxUpdateScaledS(&this->actor.posRot.rot.x, 0x4000, this->unk_168)) {
func_80899A08(this);
Audio_PlayActorSound2(&this->actor, NA_SE_EV_TRAP_BOUND);
var = func_80092F88(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0], 3);
func_80092DAC(var, 25000);
func_80092E70(var, 2, 0, 0, 0);
func_80092DF0(var, 0x10);
var = Quake_Add(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0], 3);
Quake_SetSpeed(var, 25000);
Quake_SetQuakeValues(var, 2, 0, 0, 0);
Quake_SetCountdown(var, 0x10);
}
}

View file

@ -115,10 +115,10 @@ static void func_808B318C(BgSpot12Gate* this, GlobalContext* globalCtx) {
Math_ApproxF(&thisx->velocity.y, 1.6f, 0.03f);
if (Math_ApproxF(&thisx->posRot.pos.y, thisx->initPosRot.pos.y + 200.0f, thisx->velocity.y)) {
func_808B3274(this);
var = func_80092F88(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0], 3);
func_80092DAC(var, -0x3CB0);
func_80092E70(var, 3, 0, 0, 0);
func_80092DF0(var, 0xC);
var = Quake_Add(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0], 3);
Quake_SetSpeed(var, -0x3CB0);
Quake_SetQuakeValues(var, 3, 0, 0, 0);
Quake_SetCountdown(var, 0xC);
Audio_PlayActorSound2(thisx, NA_SE_EV_BRIDGE_OPEN_STOP);
} else {
func_8002F974(thisx, 0x2067);

View file

@ -1,3 +1,9 @@
/*
* File: z_en_ds.c
* Overlay: ovl_En_Ds
* Description: Potion Shop Granny
*/
#include "z_en_ds.h"
#define ROOM 0x00
@ -8,7 +14,24 @@ void EnDs_Destroy(EnDs* this, GlobalContext* globalCtx);
void EnDs_Update(EnDs* this, GlobalContext* globalCtx);
void EnDs_Draw(EnDs* this, GlobalContext* globalCtx);
/*
void EnDs_Talk(EnDs* this, GlobalContext* globalCtx);
void EnDs_TalkNoEmptyBottle(EnDs* this, GlobalContext* globalCtx);
void EnDs_TalkAfterGiveOddPotion(EnDs* this, GlobalContext* globalCtx);
void EnDs_DisplayOddPotionText(EnDs* this, GlobalContext* globalCtx);
void EnDs_GiveOddPotion(EnDs* this, GlobalContext* globalCtx);
void EnDs_TalkAfterBrewOddPotion(EnDs* this, GlobalContext* globalCtx);
void EnDs_BrewOddPotion3(EnDs* this, GlobalContext* globalCtx);
void EnDs_BrewOddPotion2(EnDs* this, GlobalContext* globalCtx);
void EnDs_BrewOddPotion1(EnDs* this, GlobalContext* globalCtx);
void EnDs_OfferOddPotion(EnDs* this, GlobalContext* globalCtx);
int EnDs_CheckRupeesAndBottle();
void EnDs_GiveBluePotion(EnDs* this, GlobalContext* globalCtx);
void EnDs_OfferBluePotion(EnDs* this, GlobalContext* globalCtx);
void EnDs_Wait(EnDs* this, GlobalContext* globalCtx);
UNK_TYPE func_809FDA38(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, EnDs* this);
void func_809FDA7C(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* this);
const ActorInit En_Ds_InitVars = {
ACTOR_EN_DS,
ACTORTYPE_NPC,
@ -21,43 +44,250 @@ const ActorInit En_Ds_InitVars = {
(ActorFunc)EnDs_Update,
(ActorFunc)EnDs_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/EnDs_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/EnDs_Destroy.s")
extern SkeletonHeader D_06004768;
extern AnimationHeader D_0600039C;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD10C.s")
Vec3f mtxSrc = { 1100.0f, 500.0f, 0.0f };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD160.s")
void EnDs_Init(EnDs* this, GlobalContext* globalCtx) {
SkelAnime* skelAnime = &this->skelAnime;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD1CC.s")
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFunc_Circle, 36.0f);
SkelAnime_InitSV(globalCtx, skelAnime, &D_06004768, &D_0600039C, &this->actorDrawTable, &this->unk_1B4, 6);
func_800A51E8(&this->skelAnime, &D_0600039C);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD224.s")
this->actor.sub_98.mass = 0xFF;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD284.s")
Actor_SetScale(this, 0.013f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD2EC.s")
this->actionFunc = EnDs_Wait;
this->actor.unk_1F = 1;
this->unk_1E8 = 0;
this->actor.flags &= ~0x1;
this->unk_1E4 = 0.0f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD368.s")
void EnDs_Destroy(EnDs* this, GlobalContext* globalCtx) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD40C.s")
void EnDs_Talk(EnDs* this, GlobalContext* globalCtx) {
if (func_8002F334(&this->actor, globalCtx) != 0) {
this->actionFunc = EnDs_Wait;
this->actor.flags &= ~0x10000;
}
this->unk_1E8 |= 1;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD460.s")
void EnDs_TalkNoEmptyBottle(EnDs* this, GlobalContext* globalCtx) {
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && (func_80106BC8(globalCtx) != 0)) {
func_80106CCC(globalCtx);
this->actionFunc = EnDs_Wait;
}
this->unk_1E8 |= 1;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD500.s")
void EnDs_TalkAfterGiveOddPotion(EnDs* this, GlobalContext* globalCtx) {
if (func_8002F194(&this->actor, globalCtx) != 0) {
this->actionFunc = EnDs_Talk;
} else {
this->actor.flags |= 0x10000;
func_8002F2CC(&this->actor, globalCtx, 1000.0f);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD5CC.s")
void EnDs_DisplayOddPotionText(EnDs* this, GlobalContext* globalCtx) {
if (func_8002F334(&this->actor, globalCtx) != 0) {
this->actor.textId = 0x504F;
this->actionFunc = EnDs_TalkAfterGiveOddPotion;
this->actor.flags &= ~0x100;
gSaveContext.item_get_inf[3] |= 1;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD61C.s")
void EnDs_GiveOddPotion(EnDs* this, GlobalContext* globalCtx) {
if (func_8002F410(&this->actor, globalCtx) != 0) {
this->actor.attachedA = NULL;
this->actionFunc = EnDs_DisplayOddPotionText;
gSaveContext.timer_2_state = 0;
} else {
func_8002F434(&this->actor, globalCtx, GI_ODD_POTION, 10000.0f, 50.0f);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD67C.s")
void EnDs_TalkAfterBrewOddPotion(EnDs* this, GlobalContext* globalCtx) {
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && (func_80106BC8(globalCtx) != 0)) {
func_80106CCC(globalCtx);
this->actionFunc = EnDs_GiveOddPotion;
func_8002F434(&this->actor, globalCtx, GI_ODD_POTION, 10000.0f, 50.0f);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FD7B4.s")
void EnDs_BrewOddPotion3(EnDs* this, GlobalContext* globalCtx) {
if (this->brewTimer > 0) {
this->brewTimer -= 1;
} else {
this->actionFunc = EnDs_TalkAfterBrewOddPotion;
func_8010B720(globalCtx, 0x504D);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/EnDs_Update.s")
Math_ApproxF(&this->unk_1E4, 0, 0.03f);
func_800773A8(globalCtx, this->unk_1E4 * (2.0f - this->unk_1E4), 0.0f, 0.1f, 1.0f);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FDA38.s")
void EnDs_BrewOddPotion2(EnDs* this, GlobalContext* globalCtx) {
if (this->brewTimer > 0) {
this->brewTimer -= 1;
} else {
this->actionFunc = EnDs_BrewOddPotion3;
this->brewTimer = 60;
Flags_UnsetSwitch(globalCtx, 0x3F);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/func_809FDA7C.s")
void EnDs_BrewOddPotion1(EnDs* this, GlobalContext* globalCtx) {
if (this->brewTimer > 0) {
this->brewTimer -= 1;
} else {
this->actionFunc = EnDs_BrewOddPotion2;
this->brewTimer = 20;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ds/EnDs_Draw.s")
Math_ApproxF(&this->unk_1E4, 1.0f, 0.01f);
func_800773A8(globalCtx, this->unk_1E4 * (2.0f - this->unk_1E4), 0.0f, 0.1f, 1.0f);
}
void EnDs_OfferOddPotion(EnDs* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
if ((func_8010BDBC(&globalCtx->msgCtx) == 4) && (func_80106BC8(globalCtx) != 0)) {
switch (globalCtx->msgCtx.choiceIndex) {
case 0: // yes
this->actionFunc = EnDs_BrewOddPotion1;
this->brewTimer = 60;
Flags_SetSwitch(globalCtx, 0x3F);
globalCtx->msgCtx.msgMode = 0x37;
player->exchangeItemId = 0;
break;
case 1: // no
func_8010B720(globalCtx, 0x504C);
this->actionFunc = EnDs_Talk;
}
}
}
int EnDs_CheckRupeesAndBottle() {
if (gSaveContext.rupees < 100) {
return 0;
} else if (Inventory_HasEmptyBottle() == 0) {
return 1;
} else {
return 2;
}
}
void EnDs_GiveBluePotion(EnDs* this, GlobalContext* globalCtx) {
if (func_8002F410(&this->actor, globalCtx) != 0) {
this->actor.attachedA = NULL;
this->actionFunc = EnDs_Talk;
} else {
func_8002F434(&this->actor, globalCtx, GI_POTION_BLUE, 10000.0f, 50.0f);
}
}
void EnDs_OfferBluePotion(EnDs* this, GlobalContext* globalCtx) {
if ((func_8010BDBC(&globalCtx->msgCtx) == 4) && (func_80106BC8(globalCtx) != 0)) {
switch (globalCtx->msgCtx.choiceIndex) {
case 0: // yes
switch (EnDs_CheckRupeesAndBottle()) {
case 0: // have less than 100 rupees
func_8010B720(globalCtx, 0x500E);
break;
case 1: // have 100 rupees but no empty bottle
func_8010B720(globalCtx, 0x96);
this->actionFunc = EnDs_TalkNoEmptyBottle;
return;
case 2: // have 100 rupees and empty bottle
Rupees_ChangeBy(-100);
this->actor.flags &= ~0x10000;
func_8002F434(this, globalCtx, GI_POTION_BLUE, 10000.0f, 50.0f);
this->actionFunc = EnDs_GiveBluePotion;
return;
}
break;
case 1: // no
func_8010B720(globalCtx, 0x500D);
}
this->actionFunc = EnDs_Talk;
}
}
void EnDs_Wait(EnDs* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
s16 unkAngle;
if (func_8002F194(&this->actor, globalCtx) != 0) {
if (func_8002F368(globalCtx) == 8) {
Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
player->actor.textId = 0x504A;
this->actionFunc = EnDs_OfferOddPotion;
} else if (gSaveContext.item_get_inf[3] & 1) {
player->actor.textId = 0x500C;
this->actionFunc = EnDs_OfferBluePotion;
} else {
if (INV_CONTENT(ITEM_ODD_MUSHROOM) == ITEM_ODD_MUSHROOM) {
player->actor.textId = 0x5049;
} else {
player->actor.textId = 0x5048;
}
this->actionFunc = EnDs_Talk;
}
} else {
unkAngle = this->actor.rotTowardsLinkY - this->actor.shape.rot.y;
this->actor.textId = 0x5048;
if ((ABS(unkAngle) < 0x2151) && (this->actor.xzDistanceFromLink < 200.0f)) {
func_8002F298(this, globalCtx, 100.0f, 8);
this->unk_1E8 |= 1;
}
}
}
void EnDs_Update(EnDs* this, GlobalContext* globalCtx) {
if (SkelAnime_FrameUpdateMatrix(&this->skelAnime) != 0) {
this->skelAnime.animCurrentFrame = 0.0f;
}
this->actionFunc(this, globalCtx);
if (this->unk_1E8 & 1) {
func_80038290(globalCtx, this, &this->unk_1D8, &this->unk_1DE, this->actor.posRot2.pos);
} else {
Math_SmoothScaleMaxMinS(&this->unk_1D8.x, 0, 6, 0x1838, 100);
Math_SmoothScaleMaxMinS(&this->unk_1D8.y, 0, 6, 0x1838, 100);
Math_SmoothScaleMaxMinS(&this->unk_1DE.x, 0, 6, 0x1838, 100);
Math_SmoothScaleMaxMinS(&this->unk_1DE.y, 0, 6, 0x1838, 100);
}
}
UNK_TYPE func_809FDA38(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, EnDs* this) {
EnDs* enDs = this;
if (limbIndex == 5) {
rot->x += this->unk_1D8.y;
rot->z += this->unk_1D8.x;
}
return 0;
}
void func_809FDA7C(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor) {
if (limbIndex == 5) {
Matrix_MultVec3f(&mtxSrc, &actor->posRot2.pos);
}
}
void EnDs_Draw(EnDs* this, GlobalContext* globalCtx) {
func_800943C8(globalCtx->state.gfxCtx);
SkelAnime_DrawSV(globalCtx, this->skelAnime.skeleton, this->skelAnime.actorDrawTbl, this->skelAnime.dListCount,
&func_809FDA38, &func_809FDA7C, this);
}

View file

@ -6,7 +6,17 @@
typedef struct {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0xA4];
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ Vec3s actorDrawTable;
/* 0x0196 */ char unk_194[0x1E];
/* 0x01B4 */ Vec3s unk_1B4;
/* 0x01BA */ char unk_1B8[0x1E];
/* 0x01D8 */ Vec3s unk_1D8;
/* 0x01DE */ Vec3s unk_1DE;
/* 0x01E4 */ float unk_1E4;
/* 0x01E8 */ u16 unk_1E8;
/* 0x01EA */ u16 brewTimer;
/* 0x01EC */ ActorFunc actionFunc;
} EnDs; // size = 0x01F0
extern const ActorInit En_Ds_InitVars;

View file

@ -1,14 +1,78 @@
/*
* File: z_en_ru2.c
* Overlay: En_Ru2
* Description:
*/
#include "z_en_ru2.h"
#include <vt.h>
#define ROOM 0x00
#define FLAGS 0x00000010
void EnRu2_Init(EnRu2* this, GlobalContext* globalCtx);
void EnRu2_Destroy(EnRu2* this, GlobalContext* globalCtx);
void EnRu2_Update(EnRu2* this, GlobalContext* globalCtx);
void EnRu2_Draw(EnRu2* this, GlobalContext* globalCtx);
static void EnRu2_Init(EnRu2* this, GlobalContext* globalCtx);
static void EnRu2_Destroy(EnRu2* this, GlobalContext* globalCtx);
static void EnRu2_Update(EnRu2* this, GlobalContext* globalCtx);
static void EnRu2_Draw(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2CB4(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2CD4(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2CF4(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2D2C(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2D6C(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2DAC(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2DEC(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3144(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3174(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF31C8(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3604(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3624(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF366C(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF36AC(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3BC8(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3C04(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3C64(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3CB8(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3D0C(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3D60(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3F14(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF3F20(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF321C(EnRu2* this, GlobalContext* globalCtx);
static void func_80AF2AB4(EnRu2* this, GlobalContext* globalCtx);
static ColliderCylinderInit D_80AF40E0 = {
0x0A, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00000000, 0x00, 0x00, 0x00, 0x00, 0x00000080, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x001E, 0x0064, 0x0000, 0x0000, 0x0000, 0x0000,
};
static u32 D_80AF410C[] = {
0x06000F20,
0x060022E0,
0x06002AE0,
};
static u32 D_80AF4118 = 0;
#include "z_en_ru2_cutscene_data.c"
static ActorFunc D_80AF50BC[] = {
(ActorFunc)func_80AF2CB4, (ActorFunc)func_80AF2CD4, (ActorFunc)func_80AF2CF4, (ActorFunc)func_80AF2D2C,
(ActorFunc)func_80AF2D6C, (ActorFunc)func_80AF2DAC, (ActorFunc)func_80AF2DEC, (ActorFunc)func_80AF3144,
(ActorFunc)func_80AF3174, (ActorFunc)func_80AF31C8, (ActorFunc)func_80AF3604, (ActorFunc)func_80AF3624,
(ActorFunc)func_80AF366C, (ActorFunc)func_80AF36AC, (ActorFunc)func_80AF3BC8, (ActorFunc)func_80AF3C04,
(ActorFunc)func_80AF3C64, (ActorFunc)func_80AF3CB8, (ActorFunc)func_80AF3D0C, (ActorFunc)func_80AF3D60,
};
static ActorFunc D_80AF510C[] = {
(ActorFunc)func_80AF3F14,
(ActorFunc)func_80AF3F20,
(ActorFunc)func_80AF321C,
};
/*
const ActorInit En_Ru2_InitVars = {
ACTOR_EN_RU2,
ACTORTYPE_NPC,
@ -21,155 +85,729 @@ const ActorInit En_Ru2_InitVars = {
(ActorFunc)EnRu2_Update,
(ActorFunc)EnRu2_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2550.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF259C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/EnRu2_Destroy.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2608.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2690.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF26A0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF26AC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF26D0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2744.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF278C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF27AC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF27D0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF281C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2868.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF28E8.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2978.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2994.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF29DC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2A38.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2AB4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2B44.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2B94.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2BC0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2C54.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2C68.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2CB4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2CD4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2CF4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2D2C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2D6C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2DAC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2DEC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2E1C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2E64.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2E84.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2F04.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF2F58.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF30AC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3144.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3174.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF31C8.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF321C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3394.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF33E0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF346C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF34A4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF34F0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3530.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3564.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3604.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3624.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF366C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF36AC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF36EC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3718.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3744.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF37AC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF37CC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF383C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3878.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF38D0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF390C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF39DC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3ADC.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3B74.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3BC8.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3C04.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3C64.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3CB8.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3D0C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3D60.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/EnRu2_Update.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/EnRu2_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3F14.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/func_80AF3F20.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ru2/EnRu2_Draw.s")
extern AnimationHeader* D_060004CC;
extern SkeletonHeader* D_0600C700;
extern AnimationHeader* D_0600D3DC;
extern AnimationHeader* D_0600DCAC;
extern AnimationHeader* D_06000DE8;
extern AnimationHeader* D_0600E630;
extern AnimationHeader* D_0600F03C;
extern AnimationHeader* D_0600F8B8;
static void func_80AF2550(EnRu2* this, GlobalContext* globalCtx) {
EnRu2* thisLocal = this;
ActorCollider_AllocCylinder(globalCtx, &thisLocal->collider);
func_8005C450(globalCtx, &thisLocal->collider, &this->actor, &D_80AF40E0);
}
static void func_80AF259C(EnRu2* this, GlobalContext* globalCtx) {
s32 pad;
ColliderCylinderMain* collider = &this->collider;
Actor* thisx = &this->actor;
s32 pad2[2];
ActorCollider_Cylinder_Update(thisx, collider);
Actor_CollisionCheck_SetAC(globalCtx, &globalCtx->sub_11E60, collider);
}
static void EnRu2_Destroy(EnRu2* this, GlobalContext* globalCtx) {
ColliderCylinderMain* collider = &this->collider;
ActorCollider_FreeCylinder(globalCtx, collider);
}
static void func_80AF2608(EnRu2* this) {
s32 pad[3];
s16* unk_2A6 = &this->unk_2A6;
s16* unk_2A4 = &this->unk_2A4;
if (!DECR(*unk_2A6)) {
*unk_2A6 = Math_Rand_S16Offset(0x3C, 0x3C);
}
*unk_2A4 = *unk_2A6;
if (*unk_2A4 >= 3) {
*unk_2A4 = 0;
}
}
s32 func_80AF2690(EnRu2* this) {
s32 params_shift = this->actor.params >> 8;
return params_shift & 0xFF;
}
s32 func_80AF26A0(EnRu2* this) {
s16 params = this->actor.params;
return params & 0xFF;
}
static void func_80AF26AC(EnRu2* this) {
this->action = 7;
this->drawConfig = 0;
this->unk_2B4 = 0;
this->unk_2B8 = 0;
this->actor.shape.unk_14 = 0;
this->unk_2B0 = 0.0f;
}
static void func_80AF26D0(EnRu2* this, GlobalContext* globalCtx) {
s32 one; // Needed to match
if (globalCtx->csCtx.state == 0) {
if (D_80AF4118 != 0) {
if (this->actor.params == 2) {
func_80AF26AC(this);
}
D_80AF4118 = 0;
return;
}
} else {
one = 1;
if (D_80AF4118 == 0) {
D_80AF4118 = one;
}
}
}
static void func_80AF2744(EnRu2* this, GlobalContext* globalCtx) {
func_8002E4B4(globalCtx, &this->actor, 75.0f, 30.0f, 30.0f, 4);
}
s32 EnRu2_FrameUpdateMatrix(EnRu2* this) {
return SkelAnime_FrameUpdateMatrix(&this->skelAnime);
}
CsCmdActorAction* func_80AF27AC(GlobalContext* globalCtx, s32 actorActionIdx) {
if (globalCtx->csCtx.state != 0) {
return globalCtx->csCtx.actorActions[actorActionIdx];
}
return NULL;
}
s32 func_80AF27D0(EnRu2* this, GlobalContext* globalCtx, u16 arg2, s32 actorActionIdx) {
CsCmdActorAction* csCmdActorAction = func_80AF27AC(globalCtx, actorActionIdx);
if (csCmdActorAction != NULL && csCmdActorAction->action == arg2) {
return 1;
}
return 0;
}
s32 func_80AF281C(EnRu2* this, GlobalContext* globalCtx, u16 arg2, s32 actorActionIdx) {
CsCmdActorAction* csCmdActorAction = func_80AF27AC(globalCtx, actorActionIdx);
if (csCmdActorAction != NULL && csCmdActorAction->action != arg2) {
return 1;
}
return 0;
}
static void func_80AF2868(EnRu2* this, GlobalContext* globalCtx, u32 actorActionIdx) {
CsCmdActorAction* csCmdActorAction = func_80AF27AC(globalCtx, actorActionIdx);
s16 newRotY;
Actor* thisx = &this->actor;
if (csCmdActorAction != NULL) {
thisx->posRot.pos.x = csCmdActorAction->startPos.x;
thisx->posRot.pos.y = csCmdActorAction->startPos.y;
thisx->posRot.pos.z = csCmdActorAction->startPos.z;
newRotY = csCmdActorAction->rot.y;
thisx->shape.rot.y = newRotY;
thisx->posRot.rot.y = newRotY;
}
}
static void func_80AF28E8(EnRu2* this, AnimationHeader* animation, u8 arg2, f32 transitionRate, s32 arg4) {
f32 frameCount = SkelAnime_GetFrameCount(&animation->genericHeader);
f32 playbackSpeed;
f32 unk0;
f32 fc;
if (arg4 == 0) {
unk0 = 0.0f;
fc = frameCount;
playbackSpeed = 1.0f;
} else {
unk0 = frameCount;
fc = 0.0f;
playbackSpeed = -1.0f;
}
SkelAnime_ChangeAnimation(&this->skelAnime, animation, playbackSpeed, unk0, fc, arg2, transitionRate);
}
static void func_80AF2978(EnRu2* this, GlobalContext* globalCtx) {
this->actor.shape.unk_08 += 83.333336f;
}
static void func_80AF2994(EnRu2* this, GlobalContext* globalCtx) {
func_80AF28E8(this, &D_06000DE8, 0, 0.0f, 0);
this->actor.shape.unk_08 = -10000.0f;
}
static void func_80AF29DC(EnRu2* this, GlobalContext* globalCtx) {
Actor* thisx = &this->actor;
f32 posX = thisx->posRot.pos.x;
f32 posY = thisx->posRot.pos.y;
f32 posZ = thisx->posRot.pos.z;
Actor_SpawnAttached(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_DOOR_WARP1, posX, posY, posZ, 0, 0, 0, 2);
}
static void func_80AF2A38(EnRu2* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
f32 posX = player->actor.posRot.pos.x;
f32 posY = player->actor.posRot.pos.y + 50.0f;
f32 posZ = player->actor.posRot.pos.z;
Actor_SpawnAttached(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_DEMO_EFFECT, posX, posY, posZ, 0, 0, 0,
10);
Item_Give(globalCtx, ITEM_MEDALLION_WATER);
}
static void func_80AF2AB4(EnRu2* this, GlobalContext* globalCtx) {
s32 pad[2];
Player* player;
s16 temp;
if (gSaveContext.chamber_cutscene_num == 2 && gSaveContext.scene_setup_index < 4) {
player = PLAYER;
this->action = 1;
globalCtx->csCtx.segment = &D_80AF411C;
gSaveContext.cutscene_trigger = 2;
Item_Give(globalCtx, ITEM_MEDALLION_WATER);
temp = this->actor.posRot.rot.y + 0x8000;
player->actor.shape.rot.y = temp;
player->actor.posRot.rot.y = temp;
}
}
static void func_80AF2B44(EnRu2* this, GlobalContext* globalCtx) {
CutsceneContext* csCtx = &globalCtx->csCtx;
CsCmdActorAction* csCmdActorAction;
if (csCtx->state != 0) {
csCmdActorAction = csCtx->actorActions[3];
if (csCmdActorAction != NULL && csCmdActorAction->action == 2) {
this->action = 2;
this->drawConfig = 1;
func_80AF29DC(this, globalCtx);
}
}
}
static void func_80AF2B94(EnRu2* this) {
if (this->actor.shape.unk_08 >= 0.0f) {
this->action = 3;
this->actor.shape.unk_08 = 0.0f;
}
}
static void func_80AF2BC0(EnRu2* this, GlobalContext* globalCtx) {
AnimationHeader* animation = &D_0600D3DC;
CsCmdActorAction* csCmdActorAction;
if (globalCtx->csCtx.state != 0) {
csCmdActorAction = globalCtx->csCtx.actorActions[3];
if (csCmdActorAction != NULL && csCmdActorAction->action == 3) {
SkelAnime_ChangeAnimation(&this->skelAnime, animation, 1.0f, 0.0f, SkelAnime_GetFrameCount(animation), 2,
0.0f);
this->action = 4;
}
}
}
static void func_80AF2C54(EnRu2* this, UNK_TYPE arg1) {
if (arg1 != 0) {
this->action = 5;
}
}
static void func_80AF2C68(EnRu2* this, GlobalContext* globalCtx) {
CsCmdActorAction* csCmdActorAction;
if (globalCtx->csCtx.state != 0) {
csCmdActorAction = globalCtx->csCtx.actorActions[6];
if (csCmdActorAction != NULL && csCmdActorAction->action == 2) {
this->action = 6;
func_80AF2A38(this, globalCtx);
}
}
}
static void func_80AF2CB4(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2AB4(this, globalCtx);
}
static void func_80AF2CD4(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2B44(this, globalCtx);
}
static void func_80AF2CF4(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2978(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF2B94(this);
}
static void func_80AF2D2C(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF2BC0(this, globalCtx);
}
static void func_80AF2D6C(EnRu2* this, GlobalContext* globalCtx) {
UNK_TYPE something;
func_80AF2744(this, globalCtx);
something = EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF2C54(this, something);
}
static void func_80AF2DAC(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF2C68(this, globalCtx);
}
static void func_80AF2DEC(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
}
static void func_80AF2E1C(EnRu2* this, GlobalContext* globalCtx) {
func_80AF28E8(this, &D_060004CC, 2, 0.0f, 0);
this->action = 7;
this->actor.shape.unk_14 = 0;
}
static void func_80AF2E64() {
func_800788CC(NA_SE_SY_WHITE_OUT_T);
}
static void func_80AF2E84(EnRu2* this, GlobalContext* globalCtx) {
Actor_SpawnAttached(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_DEMO_6K, this->actor.posRot.pos.x,
kREG(19) + 24.0f + this->actor.posRot.pos.y, this->actor.posRot.pos.z, 0, 0, 0, 8);
}
static void func_80AF2F04(EnRu2* this, GlobalContext* globalCtx) {
if (func_80AF27D0(this, globalCtx, 4, 3)) {
this->action = 8;
this->drawConfig = 2;
this->unk_2B4 = 0;
this->actor.shape.unk_14 = 0;
this->unk_2B0 = 0.0f;
func_80AF2E64();
}
}
static void func_80AF2F58(EnRu2* this, GlobalContext* globalCtx) {
f32* unk_2B0 = &this->unk_2B0;
s32 something;
if (func_80AF27D0(this, globalCtx, 4, 3)) {
*unk_2B0 += 1.0f;
if (*unk_2B0 >= kREG(5) + 10.0f) {
this->action = 9;
this->drawConfig = 1;
*unk_2B0 = kREG(5) + 10.0f;
this->unk_2B4 = 0xFF;
this->actor.shape.unk_14 = 0xFF;
return;
}
} else {
*unk_2B0 -= 1.0f;
if (*unk_2B0 <= 0.0f) {
this->action = 7;
this->drawConfig = 0;
*unk_2B0 = 0.0f;
this->unk_2B4 = 0;
this->actor.shape.unk_14 = 0;
return;
}
}
something = (*unk_2B0 / (kREG(5) + 10.0f)) * 255.0f;
this->unk_2B4 = something;
this->actor.shape.unk_14 = something;
}
static void func_80AF30AC(EnRu2* this, GlobalContext* globalCtx) {
if (func_80AF281C(this, globalCtx, 4, 3)) {
this->action = 8;
this->drawConfig = 2;
this->unk_2B0 = kREG(5) + 10.0f;
this->unk_2B4 = 0xFF;
if (this->unk_2B8 == 0) {
func_80AF2E84(this, globalCtx);
this->unk_2B8 = 1;
}
this->actor.shape.unk_14 = 0xFF;
}
}
static void func_80AF3144(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2F04(this, globalCtx);
func_80AF26D0(this, globalCtx);
}
static void func_80AF3174(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF2F58(this, globalCtx);
func_80AF26D0(this, globalCtx);
}
static void func_80AF31C8(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF30AC(this, globalCtx);
func_80AF26D0(this, globalCtx);
}
static void func_80AF321C(EnRu2* this, GlobalContext* globalCtx) {
s32 pad[2];
s16 temp = this->unk_2A4;
UNK_PTR addr = D_80AF410C[temp];
SkelAnime* skelAnime = &this->skelAnime;
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
Gfx* gfxArr[4];
func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_en_ru2_inKenjyanomaDemo02.c", 264);
func_80093D84(globalCtx->state.gfxCtx);
gSPSegment(gfxCtx->polyXlu.p++, 0x08, SEGMENTED_TO_VIRTUAL(addr));
gSPSegment(gfxCtx->polyXlu.p++, 0x09, SEGMENTED_TO_VIRTUAL(addr));
gDPSetEnvColor(gfxCtx->polyXlu.p++, 0x00, 0x00, 0x00, this->unk_2B4);
gSPSegment(gfxCtx->polyXlu.p++, 0x0C, &D_80116280[0]);
gfxCtx->polyXlu.p = SkelAnime_DrawSV2(globalCtx, skelAnime->skeleton, skelAnime->actorDrawTbl,
skelAnime->dListCount, NULL, NULL, NULL, gfxCtx->polyXlu.p);
func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_en_ru2_inKenjyanomaDemo02.c", 291);
}
static void func_80AF3394(EnRu2* this, GlobalContext* globalCtx) {
func_80AF28E8(this, &D_0600E630, 0, 0.0f, 0);
this->action = 10;
this->drawConfig = 0;
this->actor.shape.unk_14 = 0;
}
static void func_80AF33E0(EnRu2* this) {
f32* unk_2B0 = &this->unk_2B0;
f32 temp_f0;
s32 temp_f18;
*unk_2B0 += 1.0f;
temp_f0 = kREG(17) + 10.0f;
if (temp_f0 <= *unk_2B0) {
this->unk_2B4 = 0xFF;
this->actor.shape.unk_14 = 0xFF;
} else {
temp_f18 = (*unk_2B0 / temp_f0) * 255.0f;
this->unk_2B4 = temp_f18;
this->actor.shape.unk_14 = temp_f18;
}
}
static void func_80AF346C(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2868(this, globalCtx, 3);
this->action = 11;
this->drawConfig = 2;
}
static void func_80AF34A4(EnRu2* this) {
if (this->unk_2B0 >= kREG(17) + 10.0f) {
this->action = 12;
this->drawConfig = 1;
}
}
static void func_80AF34F0(EnRu2* this) {
func_80AF28E8(this, &D_0600DCAC, 2, 0.0f, 0);
this->action = 13;
}
static void func_80AF3530(EnRu2* this, UNK_TYPE arg1) {
if (arg1 != 0) {
func_80AF28E8(this, &D_0600F03C, 0, 0.0f, 0);
}
}
static void func_80AF3564(EnRu2* this, GlobalContext* globalCtx) {
CsCmdActorAction* csCmdActorAction = func_80AF27AC(globalCtx, 3);
s32 action;
s32 unk_2BC;
if (csCmdActorAction != NULL) {
action = csCmdActorAction->action;
unk_2BC = this->unk_2BC;
if (action != unk_2BC) {
switch (action) {
case 7:
func_80AF346C(this, globalCtx);
break;
case 8:
func_80AF34F0(this);
break;
default:
osSyncPrintf("En_Ru2_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
break;
}
this->unk_2BC = action;
}
}
}
static void func_80AF3604(EnRu2* this, GlobalContext* globalCtx) {
func_80AF3564(this, globalCtx);
}
static void func_80AF3624(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF33E0(this);
func_80AF34A4(this);
}
static void func_80AF366C(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF3564(this, globalCtx);
}
static void func_80AF36AC(EnRu2* this, GlobalContext* globalCtx) {
UNK_TYPE something;
func_80AF2744(this, globalCtx);
something = EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
func_80AF3530(this, something);
}
static void func_80AF36EC(EnRu2* this, GlobalContext* globalCtx) {
Flags_SetSwitch(globalCtx, func_80AF2690(this));
}
s32 func_80AF3718(EnRu2* this, GlobalContext* globalCtx) {
return Flags_GetSwitch(globalCtx, func_80AF2690(this));
}
static void func_80AF3744(EnRu2* this, GlobalContext* globalCtx) {
if (func_80AF3718(this, globalCtx)) {
Actor_Kill(&this->actor);
} else {
func_80AF28E8(this, &D_06000DE8, 0, 0.0f, 0);
this->action = 14;
this->drawConfig = 1;
}
}
static void func_80AF37AC() {
func_800F5C64(0x51);
}
static void func_80AF37CC(EnRu2* this) {
f32 funcFloat;
this->unk_2C0 += 1;
funcFloat = func_8006F9BC((kREG(2) + 0x96) & 0xFFFF, 0, this->unk_2C0, 8, 0);
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y + (300.0f * funcFloat);
}
s32 func_80AF383C(EnRu2* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
f32 thisPosX = this->actor.posRot.pos.x;
f32 playerPosX = player->actor.posRot.pos.x;
if (playerPosX - thisPosX >= -202.0f) {
return 1;
}
return 0;
}
static void func_80AF3878(EnRu2* this, GlobalContext* globalCtx) {
if (func_80AF383C(this, globalCtx) && !func_800BFC84(globalCtx)) {
this->action = 16;
func_800800F8(globalCtx, 0xC3A, -0x63, &this->actor, 0);
}
}
static void func_80AF38D0(EnRu2* this, GlobalContext* globalCtx) {
this->action = 16;
func_800800F8(globalCtx, 0xC3A, -0x63, &this->actor, 0);
}
static void func_80AF390C(EnRu2* this, GlobalContext* globalCtx) {
f32* unk_2C4 = &this->unk_2C4;
*unk_2C4 += 1.0f;
if (*unk_2C4 == kREG(6) + 40.0f) {
func_80AF37AC();
} else if (*unk_2C4 > kREG(4) + 50.0f) {
this->actor.textId = 0x403E;
func_8010B680(globalCtx, this->actor.textId, 0);
this->action = 17;
}
}
static void func_80AF39DC(EnRu2* this, GlobalContext* globalCtx) {
s32 pad;
MessageContext* msgCtx;
s32 pad2;
u8 dialogState;
Player* player;
s32 pad3;
msgCtx = &globalCtx->msgCtx;
dialogState = func_8010BDBC(msgCtx);
if (dialogState == 3) {
if (this->unk_2C3 != 3) {
osSyncPrintf("おれが小松だ! \n");
this->unk_2C2++;
if (this->unk_2C2 % 6 == 3) {
player = PLAYER;
osSyncPrintf("うおりゃー! \n");
func_8005B1A4(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0]);
player->actor.posRot.pos.x = 820.0f;
player->actor.posRot.pos.y = 0.0f;
player->actor.posRot.pos.z = 180.0f;
}
}
}
this->unk_2C3 = dialogState;
if (func_8010BDBC(msgCtx) == 2) {
this->action = 18;
func_8005B1A4(globalCtx->cameraCtx.activeCameraPtrs[globalCtx->cameraCtx.unk_5C0]);
}
}
static void func_80AF3ADC(EnRu2* this, GlobalContext* globalCtx) {
this->unk_2C4 += 1.0f;
if (this->unk_2C4 > kREG(5) + 100.0f) {
func_80AF28E8(this, &D_0600F8B8, 0, -12.0f, 0);
this->action = 0x13;
func_80AF36EC(this, globalCtx);
}
}
static void func_80AF3B74(EnRu2* this, GlobalContext* globalCtx) {
if (this->unk_2C0 > (((u16)(kREG(3) + 0x28)) + ((u16)(kREG(2) + 0x96)) & 0xFFFF)) {
Actor_Kill(&this->actor);
}
}
static void func_80AF3BC8(EnRu2* this, GlobalContext* globalCtx) {
func_80AF3878(this, globalCtx);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF259C(this, globalCtx);
}
static void func_80AF3C04(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
func_80AF259C(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF38D0(this, globalCtx);
}
static void func_80AF3C64(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF390C(this, globalCtx);
}
static void func_80AF3CB8(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF39DC(this, globalCtx);
}
static void func_80AF3D0C(EnRu2* this, GlobalContext* globalCtx) {
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF3ADC(this, globalCtx);
}
static void func_80AF3D60(EnRu2* this, GlobalContext* globalCtx) {
func_80AF37CC(this);
func_80AF2744(this, globalCtx);
EnRu2_FrameUpdateMatrix(this);
func_80AF2608(this);
Actor_SetHeight(&this->actor, 50.0f);
func_80AF3B74(this, globalCtx);
}
static void EnRu2_Update(EnRu2* this, GlobalContext* globalCtx) {
if (this->action < 0 || this->action >= 20 || D_80AF50BC[this->action] == 0) {
osSyncPrintf(VT_FGCOL(RED) "メインモードがおかしい!!!!!!!!!!!!!!!!!!!!!!!!!\n" VT_RST);
return;
}
D_80AF50BC[this->action](this, globalCtx);
}
static void EnRu2_Init(EnRu2* this, GlobalContext* globalCtx) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFunc_Circle, 30.0f);
func_80AF2550(this, globalCtx);
SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_0600C700, NULL, &this->unk_190, &this->unk_21A, 0x17);
switch (func_80AF26A0(this)) {
case 2:
func_80AF2E1C(this, globalCtx);
break;
case 3:
func_80AF3394(this, globalCtx);
break;
case 4:
func_80AF3744(this, globalCtx);
break;
default:
func_80AF2994(this, globalCtx);
break;
}
this->unk_2C2 = 0;
this->unk_2C3 = 3;
}
static void func_80AF3F14(EnRu2* this, GlobalContext* globalCtx) {
}
static void func_80AF3F20(EnRu2* this, GlobalContext* globalCtx) {
s32 pad[2];
s16 temp = this->unk_2A4;
UNK_PTR addr = D_80AF410C[temp];
SkelAnime* skelAnime = &this->skelAnime;
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
Gfx* gfxArr[4];
func_800C6AC4(gfxArr, globalCtx->state.gfxCtx, "../z_en_ru2.c", 642);
func_80093D18(globalCtx->state.gfxCtx);
gSPSegment(gfxCtx->polyOpa.p++, 0x08, SEGMENTED_TO_VIRTUAL(addr));
gSPSegment(gfxCtx->polyOpa.p++, 0x09, SEGMENTED_TO_VIRTUAL(addr));
gDPSetEnvColor(gfxCtx->polyOpa.p++, 0x00, 0x00, 0x00, 0xFF);
gSPSegment(gfxCtx->polyOpa.p++, 0x0C, &D_80116280[2]);
SkelAnime_DrawSV(globalCtx, skelAnime->skeleton, skelAnime->actorDrawTbl, skelAnime->dListCount, NULL, NULL,
&this->actor);
func_800C6B54(gfxArr, globalCtx->state.gfxCtx, "../z_en_ru2.c", 663);
}
static void EnRu2_Draw(EnRu2* this, GlobalContext* globalCtx) {
if (this->drawConfig < 0 || this->drawConfig >= 3 || D_80AF510C[this->drawConfig] == 0) {
osSyncPrintf(VT_FGCOL(RED) "描画モードがおかしい!!!!!!!!!!!!!!!!!!!!!!!!!\n" VT_RST);
return;
}
D_80AF510C[this->drawConfig](this, globalCtx);
}

View file

@ -6,7 +6,24 @@
typedef struct {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x1C8];
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ s8 unk_190; // likely a struct
/* 0x0191 */ char unk_191[0x89];
/* 0x021A */ s8 unk_21A; // another of the same struct
/* 0x021B */ char unk_21B[0x89];
/* 0x02A4 */ s16 unk_2A4;
/* 0x02A6 */ s16 unk_2A6;
/* 0x02A8 */ s32 action;
/* 0x02AC */ s32 drawConfig;
/* 0x02B0 */ f32 unk_2B0;
/* 0x02B4 */ u32 unk_2B4;
/* 0x02B8 */ s32 unk_2B8;
/* 0x02BC */ s32 unk_2BC;
/* 0x02C0 */ u16 unk_2C0;
/* 0x02C2 */ u8 unk_2C2;
/* 0x02C3 */ u8 unk_2C3;
/* 0x02C4 */ f32 unk_2C4;
/* 0x02C8 */ ColliderCylinderMain collider;
} EnRu2; // size = 0x0314
extern const ActorInit En_Ru2_InitVars;

View file

@ -0,0 +1,116 @@
#include "z_en_ru2.h"
static u32 D_80AF411C[] = {
0x00000023, 0x00000D0A, 0x00000020, 0x00000001, 0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC,
0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0x00000005,
0x00010000, 0x033D0000, 0x00000000, 0x00000000, 0x000000D8, 0x00000000, 0x00000000, 0x000000D8, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x0002033D, 0x033E0000, 0x00000000, 0x00000000, 0x000000D8, 0x00000000,
0x00000000, 0x000000D8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0004033E, 0x03820000, 0x00000000,
0x00000000, 0x000000D8, 0x00000000, 0x00000000, 0x000000D8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00020382, 0x03B40000, 0x00000000, 0x00000000, 0x000000D8, 0x00000000, 0x00000000, 0x00000052, 0x00000000,
0x00000000, 0xC02B851F, 0x00000000, 0x000303B4, 0x0D0A0000, 0x00000000, 0x00000000, 0x00000052, 0x00000000,
0x00000000, 0x00000052, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000A, 0x00000005, 0x000D0000,
0x00F00000, 0x00000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x000500F0, 0x02080000, 0x40000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000,
0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030208, 0x02260000, 0x40000000, 0x00000000,
0x00000006, 0x00000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050226,
0x03210000, 0x40000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00130321, 0x07A40000, 0xC0000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000,
0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000001, 0x00010000, 0x0BB80000,
0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFF87, 0x00000000, 0xFFFFFFF0, 0xFFFFFF87, 0x00000000, 0x00000000,
0x00000000, 0x00000004, 0x00000005, 0x00050000, 0x01800000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058,
0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000, 0x00060180, 0x01C60000, 0x00000000,
0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000,
0x000501C6, 0x022A0000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058,
0x00000000, 0x00000000, 0x00000000, 0x0006022A, 0x02700000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058,
0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000, 0x00050270, 0x0BB90000, 0x00000000,
0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000,
0x00000027, 0x00000001, 0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x00000000,
0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x0000002A, 0x00000003, 0x00010000, 0x00920000,
0x00000000, 0x000000C3, 0x00000006, 0x00000000, 0x000000C3, 0x00000006, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00020092, 0x02F20000, 0x00000000, 0x000000C3, 0x00000006, 0x00000000, 0x000000C3, 0x00000006,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000302F2, 0x0A440000, 0x00000000, 0x000000C3, 0x00000006,
0x00000000, 0x000000C3, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000002D, 0x00000001,
0x0001032A, 0x03370337, 0x0000002D, 0x00000001, 0x00050339, 0x03570357, 0x0000002D, 0x00000001, 0x00010442,
0x04610461, 0x00000001, 0x00010000, 0x012D0000, 0x00000000, 0x432F65F8, 0xFD97001E, 0x00470000, 0x00000000,
0x432F65F8, 0xFD97001E, 0x00471FBC, 0x00000000, 0x432F65F8, 0xFD97001E, 0x0047D5E0, 0x00000000, 0x432F65F8,
0xFD97001E, 0x00470000, 0x00000000, 0x432F65F8, 0xFD97001E, 0x00471F98, 0x00000000, 0x432F65F8, 0xFD97001E,
0x00470000, 0x00000000, 0x4311CC7C, 0xFE38006B, 0x00380000, 0x00000000, 0x42726667, 0xFFB40036, 0x00470164,
0x00000000, 0x42726667, 0x00740036, 0x00602100, 0x00000000, 0x42726667, 0x00EC000B, 0x00400049, 0x00000000,
0x42726667, 0x00EC000B, 0x0040204C, 0x00000000, 0x42726667, 0x00EC000B, 0x0040E990, 0xFF000000, 0x42726667,
0x00EC000B, 0x00400000, 0x00000001, 0x00010107, 0x05CC0000, 0x00000000, 0x4228E87B, 0x00A10035, 0x001A0000,
0x00000000, 0x4228E87B, 0x00A10035, 0x001A1FBC, 0x00000000, 0x4228E87B, 0x00A10035, 0x001AD5E0, 0x00000000,
0x4228E87B, 0x00820009, 0x00600000, 0x00000000, 0x4228E87B, 0x00820009, 0x00601F98, 0x00000000, 0x4228E87B,
0x00820009, 0x00600000, 0x00000000, 0x4228E87B, 0x00820009, 0x00600000, 0xFF000000, 0x4228E87B, 0x00820009,
0x00600164, 0x00000001, 0x0001017F, 0x05C20000, 0x00000000, 0x428C743C, 0x00CF002D, 0x00220000, 0x00000000,
0x428C743C, 0x00CF002D, 0x00221FBC, 0x00000000, 0x428C743C, 0x00CF002D, 0x0022D5E0, 0x00000000, 0x428C743C,
0x00CF002D, 0x00220000, 0xFF000000, 0x428C743C, 0x00CF002D, 0x00221F98, 0x00000001, 0x000101C5, 0x06080000,
0x00000000, 0x42341BB1, 0xFFC6005A, 0x00460000, 0x00000000, 0x42341BB1, 0xFFC6005A, 0x00461FBC, 0x00000000,
0x42341BB1, 0xFFC6005A, 0x0046D5E0, 0x00000000, 0x42341BB1, 0xFFC6005A, 0x00460000, 0xFF000000, 0x42341BB1,
0xFFC6005A, 0x00461F98, 0x00000001, 0x00010229, 0x066C0000, 0x00000000, 0x428C743C, 0x00CF002D, 0x00220000,
0x00000000, 0x428C743C, 0x00CF002D, 0x00221FBC, 0x00000000, 0x428C743C, 0x00CF002D, 0x0022D5E0, 0x00000000,
0x428C743C, 0x00CF002D, 0x00220000, 0xFF000000, 0x428C743C, 0x00CF002D, 0x00221F98, 0x00000001, 0x0001026F,
0x06B20000, 0x00000000, 0x4271B55A, 0x00A1003B, 0x00000000, 0x00000000, 0x4271B55A, 0x00A1003B, 0x00001FBC,
0x00000000, 0x4271B55A, 0x00A1003B, 0x0000D5E0, 0x00000000, 0x4271B55A, 0x00A1003B, 0x00000000, 0xFF000000,
0x4271B55A, 0x00A1003B, 0x00001F98, 0x00000001, 0x000102B5, 0x06F80000, 0x00000000, 0x4271B55A, 0x00970052,
0x00230000, 0x00000000, 0x4271B55A, 0x00970052, 0x00231FBC, 0x00000000, 0x4271B55A, 0x00970052, 0x0023D5E0,
0x00000000, 0x4271B55A, 0x00970052, 0x00230000, 0xFF000000, 0x4271B55A, 0x00970052, 0x00231F98, 0x00000001,
0x000102FB, 0x03B00000, 0x00000000, 0x4271B55A, 0x00E60007, 0x00180000, 0x00000000, 0x4271B55A, 0x00E60007,
0x00181FBC, 0x00000000, 0x4271B55A, 0x00E60007, 0x0018D5E0, 0x00000000, 0x4271B55A, 0x00CF003E, 0x000F0000,
0x00000000, 0x428CDAA2, 0x00E600F0, 0x00181F98, 0x00000000, 0x428CDAA2, 0x00E600F0, 0x00180000, 0x00000000,
0x428CDAA2, 0x00E600F0, 0x00180000, 0xFF000000, 0x428CDAA2, 0x00E600F0, 0x00180164, 0x00000001, 0x00010337,
0x048D0000, 0x00000000, 0x42700000, 0x000D0356, 0x00020000, 0x00000000, 0x42700000, 0x00090355, 0x00051FBC,
0x00000000, 0x42700000, 0xFFFD0355, 0x0005D5E0, 0x00000000, 0x42700000, 0xFFF70355, 0xFFFA0000, 0x00000000,
0x42700000, 0xFFFE0354, 0xFFEF1F98, 0x00000000, 0x42700000, 0x00090354, 0xFFEF0000, 0x00000000, 0x42700000,
0x00100354, 0xFFFA0000, 0x00000000, 0x42700000, 0x00090354, 0x00050164, 0xFF000000, 0x42700000, 0xFFFD0353,
0x00052100, 0x00000005, 0x00010383, 0x08200000, 0x00000000, 0x4289332C, 0x00000021, 0xFFE50000, 0x00000000,
0x4289332C, 0x00000021, 0xFFE51FBC, 0x00000000, 0x4289332C, 0x00000044, 0xFFE6D5E0, 0x00000000, 0x4289332C,
0x00000067, 0xFFE60000, 0x00000000, 0x4289332C, 0x00000067, 0xFFE61F98, 0x00000000, 0x4289332C, 0x00000067,
0xFFE60000, 0x00000000, 0x4289332C, 0x00000067, 0xFFE60000, 0xFF000000, 0x4289332C, 0x00000067, 0xFFE60164,
0x00000002, 0x00010000, 0x014A0000, 0x001E0014, 0x432F65F8, 0xFD77FFB5, 0x00650000, 0x00E20014, 0x432F65F8,
0xFD74FFB5, 0x00621FBC, 0x001E0014, 0x432F65F8, 0xFD6EFFB5, 0x0057D5E0, 0x00E20014, 0x432F65F8, 0xFD5A007F,
0x00470000, 0x00000014, 0x432F65F8, 0xFD290000, 0x00471F98, 0x00000014, 0x4311CC7C, 0xFDFF0000, 0x002B0000,
0x0000001E, 0x42726667, 0xFEA30059, 0x002F0000, 0x0000001E, 0x42726667, 0x0006003D, 0x00010164, 0x0000001E,
0x42726667, 0x00210042, 0x001C2100, 0x0000001E, 0x42726667, 0x009E002A, 0x00010049, 0x0000001E, 0x42726667,
0x009E002A, 0x0001204C, 0x0000001E, 0x42726667, 0x009E002A, 0x0001E990, 0xFF00001E, 0x42726667, 0x009E002A,
0x00010000, 0x00000002, 0x00010107, 0x05E90000, 0x0000001E, 0x4228E87B, 0x0142003E, 0xFF860000, 0x0000001E,
0x4228E87B, 0x0142003E, 0xFF861FBC, 0x00000032, 0x4228E87B, 0x0142003E, 0xFF86D5E0, 0x00000032, 0x4228E87B,
0x00E8003F, 0xFFAD0000, 0x0000001E, 0x4228E87B, 0x00E8003F, 0xFFAD1F98, 0x000003E8, 0x4228E87B, 0x00E8003F,
0xFFAD0000, 0x0000001E, 0x4228E87B, 0x00E8003F, 0xFFAD0000, 0xFF00001E, 0x4228E87B, 0x00E8003F, 0xFFAD0164,
0x00000002, 0x0001017F, 0x05DF0000, 0x0000001E, 0x428C743C, 0x0033003E, 0xFF970000, 0x0000001E, 0x428C743C,
0x0033003E, 0xFF971FBC, 0x000003E8, 0x428C743C, 0x0033003E, 0xFF97D5E0, 0x0000001E, 0x428C743C, 0x0033003E,
0xFF970000, 0xFF00001E, 0x428C743C, 0x0033003E, 0xFF971F98, 0x00000002, 0x000101C5, 0x06250000, 0x0000001E,
0x42341BB1, 0x00660016, 0xFFE10000, 0x0000001E, 0x42341BB1, 0x00660016, 0xFFE11FBC, 0x000003E8, 0x42341BB1,
0x00660016, 0xFFE1D5E0, 0x0000001E, 0x42341BB1, 0x00660016, 0xFFE10000, 0xFF00001E, 0x42341BB1, 0x00660016,
0xFFE11F98, 0x00000002, 0x00010229, 0x06890000, 0x0000001E, 0x428C743C, 0x0033003E, 0xFF970000, 0x0000001E,
0x428C743C, 0x0033003E, 0xFF971FBC, 0x000003E8, 0x428C743C, 0x0033003E, 0xFF97D5E0, 0x0000001E, 0x428C743C,
0x0033003E, 0xFF970000, 0xFF00001E, 0x428C743C, 0x0033003E, 0xFF971F98, 0x00000002, 0x0001026F, 0x06CF0000,
0x0000001E, 0x4271B55A, 0x015B0016, 0x00000000, 0x0000001E, 0x4271B55A, 0x015B0016, 0x00001FBC, 0x000003E8,
0x4271B55A, 0x015B0016, 0x0000D5E0, 0x0000001E, 0x4271B55A, 0x015B0016, 0x00000000, 0xFF00001E, 0x4271B55A,
0x015B0016, 0x00001F98, 0x00000002, 0x000102B5, 0x07150000, 0x0000001E, 0x4271B55A, 0x0102FFE2, 0xFFCA0000,
0x0000001E, 0x4271B55A, 0x0102FFE2, 0xFFCA1FBC, 0x000003E8, 0x4271B55A, 0x0102FFE2, 0xFFCAD5E0, 0x0000001E,
0x4271B55A, 0x0102FFE2, 0xFFCA0000, 0xFF00001E, 0x4271B55A, 0x0102FFE2, 0xFFCA1F98, 0x00000002, 0x000102FB,
0x03CD0000, 0x0000001E, 0x4271B55A, 0x00600069, 0xFFE30000, 0x00000028, 0x4271B55A, 0x00600069, 0xFFE31FBC,
0x0000000F, 0x4271B55A, 0x00600069, 0xFFE3D5E0, 0x0000000F, 0x42701BC0, 0x006E00C4, 0xFFE60000, 0x00000014,
0x428CDAA2, 0x00B9018F, 0x00061F98, 0x0000001E, 0x428CDAA2, 0x00B9018F, 0x00060000, 0x0000001E, 0x428CDAA2,
0x00B9018F, 0x00060000, 0xFF00001E, 0x428CDAA2, 0x00B9018F, 0x00060164, 0x00000002, 0x00010337, 0x04BE0000,
0x00000032, 0x42700000, 0x00030006, 0xFFFA0000, 0x00000028, 0x42700000, 0x00030006, 0xFFFA1FBC, 0x0000001E,
0x424BFFF7, 0x00030006, 0xFFFAD5E0, 0x00000014, 0x41A4CC7E, 0x00030006, 0xFFFA0000, 0x00000033, 0x412CCC23,
0x00030006, 0xFFFA1F98, 0x00000032, 0x412665BD, 0x00030006, 0xFFFA0000, 0x00000032, 0x412665BD, 0x00030006,
0xFFFA0000, 0x00000032, 0x4123328A, 0x00030006, 0xFFFA0164, 0xFF000032, 0x412FFF56, 0x00030006, 0xFFFA2100,
0x00000006, 0x00010383, 0x083D0000, 0x0000001E, 0x4289332C, 0x00000064, 0x00050000, 0x0000001E, 0x4289332C,
0x00000065, 0x00061FBC, 0x0000001E, 0x4289332C, 0x00010063, 0x0029D5E0, 0x0000001E, 0x4289332C, 0x0000002A,
0x00100000, 0x0000001E, 0x4289332C, 0x0000002A, 0x00101F98, 0x000003E8, 0x4289332C, 0x0000002A, 0x00100000,
0x0000001E, 0x4289332C, 0x0000002A, 0x00100000, 0xFF00001E, 0x4289332C, 0x0000002A, 0x00100164, 0x0000003E,
0x00000001, 0x00040000, 0x0BB8C10F, 0x00000000, 0x0000004D, 0x00000050, 0xFFFFFFFE, 0x00000000, 0x00000050,
0x00000000, 0xBCD242E7, 0x00000000, 0x3CD242E7, 0x00000013, 0x0000000E, 0xFFFF0000, 0x018AFFFF, 0xFFFFFFFF,
0x4041018A, 0x01BC0000, 0x00000000, 0xFFFF01BC, 0x01D0FFFF, 0xFFFFFFFF, 0x404601D0, 0x021F0000, 0x00000000,
0xFFFF021F, 0x0234FFFF, 0xFFFFFFFF, 0x40490234, 0x02650000, 0x00000000, 0xFFFF0265, 0x027AFFFF, 0xFFFFFFFF,
0x4047027A, 0x02AC0000, 0x00000000, 0xFFFF02AC, 0x02C0FFFF, 0xFFFFFFFF, 0x404A02C0, 0x02EE0000, 0x00000000,
0xFFFF02EE, 0x043DFFFF, 0xFFFFFFFF, 0x003D043D, 0x04420000, 0x00000000, 0xFFFF0442, 0x047EFFFF, 0xFFFFFFFF,
0x4042047E, 0x04880000, 0x00000000, 0x000003E8, 0x00000001, 0x001504A6, 0x04BD04BD, 0x00000056, 0x00000001,
0x00440384, 0x03850000, 0x00000000, 0x00000000, 0xFFFFFFC7, 0x00000034, 0x00000000, 0xFFFFFFC7, 0x00000034,
0x00000000, 0x00000000, 0x00000000, 0x0000007C, 0x00000001, 0x00040320, 0x03520000, 0x00000000, 0x00000000,
0xFFFFFFC6, 0x00000030, 0x00000000, 0xFFFFFFC6, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF,
0x00000000,
};