mirror of https://github.com/zeldaret/mm.git
Obj_Warpstone (Owl Statue) OK and mostly documented. (#243)
* EnBji01_Init OK and Partially Documented. * EnBji01_Destroy OK and Fully Documented. * func_809CCE98 OK and partially documented. * Removed goto in func_809CCE98(). * func_809CD6C0 matching and partly documented. * Pasted raw mips_to_c into EnBji01_Update(). * EnBji01_Update() matching and partially documented. * EnBji01_Update() matching and partially documented. * func_809CDA4C() matching and partially documented. * func_809CDA4C actually matching this time, and partially documented. * func_809CDB04() matching and partially documented. * func_809CD028() matching and mostly documented. * func_809CD6B0() matching. * func_809CD328() matching and partially documented. * func_809CCDE0() matching and partially documented, func_8013E950() prototyped. * func_809CD634() and func_809CD70C() matching and partially documented. func_801A5BD0() prototyped. * func_809CD77C() matching and mostly documented. All functions now matching. * Imported data from ovl_En_Bji_01_data.asm to z_en_bji_01.c. Updated object_script.txt and code_script.txt. Ran format.sh. Builds OK. * Documented all of the unks in Shikashi's struct. Build still OK. * Fixed new warning in Bg_Haka_Tomb resulting from my new prototype of func_8013E3B8(). * Renamed remaining instances of unk160 to cutscenes. * Update src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h Remove unnecessary comment about compiler padding. Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> * Update src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c Correct stack declaration spacing. Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> * Update src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h Remove unnecessary comment about compiler alignment padding. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c Remove unnecessary padding comment. Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> * Apply suggestions from code review Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * Batch commit for comments during code review. * Apply suggestions from code review (trailing Us) Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Deleted exteraneous space at the bottom of En_Bji_01 struct in the header file. * Used params enum for switch cases. * Update src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h Co-authored-by: Parker Burnett <burnettparker@gmail.com> * Apply suggestions from code review replacing magic numbers with limb enums Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> * Renamed func_809CD328 to EnBji01_DialogueHandler per code review. * ObjWarpstone_Init() matching and mostly documented. * ObjWarpstone_Destroy() matching and fully documented. * ObjWarpstone_Update() matching and partially documented. * ObjWarpstone_Draw() matching and partially documented. * func_80B92B10() matching and partially documented. * func_80B92C00() matching and mostly documented. * func_80B92C48() matching and mostly documented. * func_80B92CD0() matching and partially documented. * func_80B92DC4() matching and fully documented. * Obj_Warpstone OK. * Obj_Warpstone OK and mostly documented. * Changed "actionFunc" return values from 0/1 to false/true. * Apply suggestions from code review Change colors to decimal, and use matrix defines/enums instead of magic numbers. Co-authored-by: kyleburnette <kyle@kyleburnette.com> * Convert more colors to decimal and replace more magic nums with mtx defines/enums. * Ran format.sh after adding (wordy) mtx defines. * Ran format.sh which updated ginko_man. * Update src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c Switch to line comments. Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Changed floating point constants in ObjWarpstone_Draw to hex per code review. * Rename timer and timer enums. Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> Co-authored-by: Parker Burnett <burnettparker@gmail.com> Co-authored-by: kyleburnette <kyle@kyleburnette.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
This commit is contained in:
parent
ee2344bc8a
commit
161da0c881
|
@ -2817,7 +2817,7 @@ void func_801434E4(GameState* gamestate, SkyboxContext* skyboxCtx, s16 skyType);
|
||||||
// void func_80143624(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7);
|
// void func_80143624(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7);
|
||||||
// void func_80143668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
|
// void func_80143668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
|
||||||
// void func_80143A04(void);
|
// void func_80143A04(void);
|
||||||
// void func_80143A10(void);
|
void func_80143A10(u8 owlId);
|
||||||
// void func_80143A54(void);
|
// void func_80143A54(void);
|
||||||
// void func_80143AC4(void);
|
// void func_80143AC4(void);
|
||||||
void func_80143B0C(GlobalContext* globalCtx);
|
void func_80143B0C(GlobalContext* globalCtx);
|
||||||
|
|
|
@ -956,7 +956,10 @@ typedef struct {
|
||||||
/* 0x1207C */ s32 bankRupees;
|
/* 0x1207C */ s32 bankRupees;
|
||||||
/* 0x12080 */ UNK_TYPE1 pad12080[0x31];
|
/* 0x12080 */ UNK_TYPE1 pad12080[0x31];
|
||||||
/* 0x120B1 */ u8 unk120B1;
|
/* 0x120B1 */ u8 unk120B1;
|
||||||
/* 0x120B2 */ UNK_TYPE1 pad120B2[0x2E];
|
/* 0x120B2 */ UNK_TYPE1 pad120B2[0x22];
|
||||||
|
/* 0x120D4 */ UNK_TYPE2 unk120D4;
|
||||||
|
/* 0x120D6 */ UNK_TYPE2 unk120D6;
|
||||||
|
/* 0x120D8 */ UNK_TYPE1 pad120D8[0x8];
|
||||||
} MessageContext; // size = 0x120E0
|
} MessageContext; // size = 0x120E0
|
||||||
|
|
||||||
typedef struct ActorBgMbarChair ActorBgMbarChair;
|
typedef struct ActorBgMbarChair ActorBgMbarChair;
|
||||||
|
|
|
@ -73,7 +73,7 @@ typedef struct {
|
||||||
/* 0x0042 */ u8 doubleDefense; // "life_ability"
|
/* 0x0042 */ u8 doubleDefense; // "life_ability"
|
||||||
/* 0x0043 */ u8 unk_43; // "ocarina_round"
|
/* 0x0043 */ u8 unk_43; // "ocarina_round"
|
||||||
/* 0x0044 */ u8 unk_44; // "first_memory"
|
/* 0x0044 */ u8 unk_44; // "first_memory"
|
||||||
/* 0x0046 */ u16 unk_46; // "memory_warp_point"
|
/* 0x0046 */ u16 owlsHit; // "memory_warp_point"
|
||||||
/* 0x0048 */ u8 unk_48; // "last_warp_pt"
|
/* 0x0048 */ u8 unk_48; // "last_warp_pt"
|
||||||
/* 0x004A */ s16 savedSceneNum; // "scene_data_ID"
|
/* 0x004A */ s16 savedSceneNum; // "scene_data_ID"
|
||||||
/* 0x004C */ ItemEquips equips;
|
/* 0x004C */ ItemEquips equips;
|
||||||
|
|
1
spec
1
spec
|
@ -4490,7 +4490,6 @@ beginseg
|
||||||
name "ovl_Obj_Warpstone"
|
name "ovl_Obj_Warpstone"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.o"
|
include "build/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.o"
|
||||||
include "build/data/ovl_Obj_Warpstone/ovl_Obj_Warpstone.data.o"
|
|
||||||
include "build/data/ovl_Obj_Warpstone/ovl_Obj_Warpstone.reloc.o"
|
include "build/data/ovl_Obj_Warpstone/ovl_Obj_Warpstone.reloc.o"
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
|
|
|
@ -8,14 +8,16 @@ void ObjWarpstone_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void ObjWarpstone_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
void ObjWarpstone_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void ObjWarpstone_Update(Actor* thisx, GlobalContext* globalCtx);
|
void ObjWarpstone_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void ObjWarpstone_Draw(Actor* thisx, GlobalContext* globalCtx);
|
void ObjWarpstone_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||||
|
|
||||||
void func_80B92C00(ObjWarpstone* this, GlobalContext* globalCtx);
|
|
||||||
void func_80B92CD0(ObjWarpstone* this, GlobalContext* globalCtx);
|
|
||||||
void func_80B92DC4(ObjWarpstone* this, GlobalContext* globalCtx);
|
|
||||||
|
|
||||||
void ObjWarpstone_SetupAction(ObjWarpstone* this, ObjWarpstoneActionFunc actionFunc);
|
void ObjWarpstone_SetupAction(ObjWarpstone* this, ObjWarpstoneActionFunc actionFunc);
|
||||||
|
s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, GlobalContext* globalCtx);
|
||||||
|
s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, GlobalContext* globalCtx);
|
||||||
|
s32 ObjWarpstone_PlayOpeningCutscene(ObjWarpstone* this, GlobalContext* globalCtx);
|
||||||
|
s32 ObjWarpstone_OpenedIdle(ObjWarpstone* this, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
extern Gfx D_04023210[]; // gOwlStatueWhiteFlashDL
|
||||||
|
extern Gfx D_060001D0[]; // gOwlStatueClosedDL
|
||||||
|
extern Gfx D_06003770[]; // gOwlStatueOpenedDL
|
||||||
|
|
||||||
#if 0
|
|
||||||
const ActorInit Obj_Warpstone_InitVars = {
|
const ActorInit Obj_Warpstone_InitVars = {
|
||||||
ACTOR_OBJ_WARPSTONE,
|
ACTOR_OBJ_WARPSTONE,
|
||||||
ACTORCAT_ITEMACTION,
|
ACTORCAT_ITEMACTION,
|
||||||
|
@ -28,37 +30,157 @@ const ActorInit Obj_Warpstone_InitVars = {
|
||||||
(ActorFunc)ObjWarpstone_Draw,
|
(ActorFunc)ObjWarpstone_Draw,
|
||||||
};
|
};
|
||||||
|
|
||||||
// static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
static ColliderCylinderInit D_80B93220 = {
|
{
|
||||||
{ COLTYPE_METAL, AT_NONE, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
|
COLTYPE_METAL,
|
||||||
{ ELEMTYPE_UNK2, { 0x00100000, 0x00, 0x00 }, { 0x01000202, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, },
|
AT_NONE,
|
||||||
|
AC_ON | AC_HARD | AC_TYPE_PLAYER,
|
||||||
|
OC1_ON | OC1_TYPE_ALL,
|
||||||
|
OC2_TYPE_2,
|
||||||
|
COLSHAPE_CYLINDER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ELEMTYPE_UNK2,
|
||||||
|
{ 0x00100000, 0x00, 0x00 },
|
||||||
|
{ 0x01000202, 0x00, 0x00 },
|
||||||
|
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||||
|
BUMP_ON | BUMP_HOOKABLE,
|
||||||
|
OCELEM_ON,
|
||||||
|
},
|
||||||
{ 20, 60, 0, { 0, 0, 0 } },
|
{ 20, 60, 0, { 0, 0, 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
// static InitChainEntry sInitChain[] = {
|
static InitChainEntry sInitChain[] = {
|
||||||
static InitChainEntry D_80B9324C[] = {
|
|
||||||
ICHAIN_U8(targetMode, 1, ICHAIN_STOP),
|
ICHAIN_U8(targetMode, 1, ICHAIN_STOP),
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
static Gfx* sOwlStatueDLs[] = { D_060001D0, D_06003770 };
|
||||||
|
|
||||||
extern ColliderCylinderInit D_80B93220;
|
void ObjWarpstone_SetupAction(ObjWarpstone* this, ObjWarpstoneActionFunc actionFunc) {
|
||||||
extern InitChainEntry D_80B9324C[];
|
this->actionFunc = actionFunc;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/ObjWarpstone_SetupAction.s")
|
void ObjWarpstone_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjWarpstone* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/ObjWarpstone_Init.s")
|
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||||
|
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->dyna.actor, &sCylinderInit);
|
||||||
|
Actor_SetHeight(&this->dyna.actor, 40.0f);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/ObjWarpstone_Destroy.s")
|
if (!IS_OWL_HIT(GET_OWL_ID(this))) {
|
||||||
|
ObjWarpstone_SetupAction(this, ObjWarpstone_ClosedIdle);
|
||||||
|
} else {
|
||||||
|
ObjWarpstone_SetupAction(this, ObjWarpstone_OpenedIdle);
|
||||||
|
this->modelIndex = SEK_MODEL_OPENED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/func_80B92C00.s")
|
void ObjWarpstone_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjWarpstone* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/func_80B92C48.s")
|
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/func_80B92CD0.s")
|
s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, GlobalContext* globalCtx) {
|
||||||
|
if (this->collider.base.acFlags & AC_HIT) {
|
||||||
|
ObjWarpstone_SetupAction(this, ObjWarpstone_BeginOpeningCutscene);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
/*Ye who hold the sacred sword, leave proof of our encounter.*/
|
||||||
|
this->dyna.actor.textId = 0xC00;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/func_80B92DC4.s")
|
s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, GlobalContext* globalCtx) {
|
||||||
|
if (this->dyna.actor.cutscene < 0 || ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
|
||||||
|
ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
|
||||||
|
ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene);
|
||||||
|
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON);
|
||||||
|
} else {
|
||||||
|
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/ObjWarpstone_Update.s")
|
s32 ObjWarpstone_PlayOpeningCutscene(ObjWarpstone* this, GlobalContext* globalCtx) {
|
||||||
|
if (this->openingCSTimer++ >= OBJ_WARPSTONE_TIMER_ACTIVATE_THRESHOLD) {
|
||||||
|
ActorCutscene_Stop(this->dyna.actor.cutscene);
|
||||||
|
func_80143A10(GET_OWL_ID(this));
|
||||||
|
ObjWarpstone_SetupAction(this, ObjWarpstone_OpenedIdle);
|
||||||
|
} else if (this->openingCSTimer < OBJ_WARPSTONE_TIMER_OPEN_THRESHOLD) {
|
||||||
|
Math_StepToF(&this->dyna.actor.velocity.x, 0.01f, 0.001f);
|
||||||
|
Math_StepToS(&this->dyna.actor.home.rot.x, 0xFF, 0x12);
|
||||||
|
} else {
|
||||||
|
Math_StepToF(&this->dyna.actor.velocity.x, 20.0f, 0.01f);
|
||||||
|
if (this->dyna.actor.velocity.x > 0.2f) {
|
||||||
|
this->modelIndex = SEK_MODEL_OPENED;
|
||||||
|
Math_StepToS(&this->dyna.actor.home.rot.x, 0, 0x14);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Warpstone/ObjWarpstone_Draw.s")
|
s32 ObjWarpstone_OpenedIdle(ObjWarpstone* this, GlobalContext* globalCtx) {
|
||||||
|
/*You can save your progress and quit here.*/
|
||||||
|
this->dyna.actor.textId = 0xC01;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjWarpstone_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjWarpstone* this = THIS;
|
||||||
|
s32 pad;
|
||||||
|
|
||||||
|
if (this->isTalking) {
|
||||||
|
if (func_800B867C(&this->dyna.actor, globalCtx) != 0) {
|
||||||
|
this->isTalking = false;
|
||||||
|
} else if ((func_80152498(&globalCtx->msgCtx) == 4) && (func_80147624(globalCtx))) {
|
||||||
|
if (globalCtx->msgCtx.choiceIndex != 0) {
|
||||||
|
func_8019F208();
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x4D;
|
||||||
|
globalCtx->msgCtx.unk120D6 = 0;
|
||||||
|
globalCtx->msgCtx.unk120D4 = 0;
|
||||||
|
gSaveContext.owlSaveLocation = GET_OWL_ID(this);
|
||||||
|
} else {
|
||||||
|
func_801477B4(globalCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (func_800B84D0(&this->dyna.actor, globalCtx)) {
|
||||||
|
this->isTalking = true;
|
||||||
|
} else if (!this->actionFunc(this, globalCtx)) {
|
||||||
|
func_800B863C(&this->dyna.actor, globalCtx);
|
||||||
|
}
|
||||||
|
Collider_ResetCylinderAC(globalCtx, &this->collider.base);
|
||||||
|
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
|
||||||
|
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||||
|
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjWarpstone_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||||
|
ObjWarpstone* this = THIS;
|
||||||
|
GlobalContext* globalCtx = globalCtx2;
|
||||||
|
|
||||||
|
func_800BDFC0(globalCtx, sOwlStatueDLs[this->modelIndex]);
|
||||||
|
if (this->dyna.actor.home.rot.x != 0) {
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
func_8012C2DC(globalCtx->state.gfxCtx);
|
||||||
|
SysMatrix_InsertTranslation(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 34.0f,
|
||||||
|
this->dyna.actor.world.pos.z, MTXMODE_NEW);
|
||||||
|
SysMatrix_InsertMatrix(&globalCtx->mf_187FC, MTXMODE_APPLY);
|
||||||
|
SysMatrix_InsertTranslation(0.0f, 0.0f, 30.0f, MTXMODE_APPLY);
|
||||||
|
Matrix_Scale(this->dyna.actor.velocity.x, this->dyna.actor.velocity.x, this->dyna.actor.velocity.x,
|
||||||
|
MTXMODE_APPLY);
|
||||||
|
SysMatrix_StatePush();
|
||||||
|
gDPPipeSync(POLY_XLU_DISP++);
|
||||||
|
gDPSetPrimColor(POLY_XLU_DISP++, 128, 128, 255, 255, 200, this->dyna.actor.home.rot.x);
|
||||||
|
gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 255);
|
||||||
|
SysMatrix_InsertZRotation_f((((globalCtx->gameplayFrames * 1500) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY);
|
||||||
|
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||||
|
gSPDisplayList(POLY_XLU_DISP++, D_04023210);
|
||||||
|
SysMatrix_StatePop();
|
||||||
|
SysMatrix_InsertZRotation_f((~((globalCtx->gameplayFrames * 1200) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY);
|
||||||
|
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||||
|
gSPDisplayList(POLY_XLU_DISP++, D_04023210);
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,14 +5,30 @@
|
||||||
|
|
||||||
struct ObjWarpstone;
|
struct ObjWarpstone;
|
||||||
|
|
||||||
typedef void (*ObjWarpstoneActionFunc)(struct ObjWarpstone* this, GlobalContext* globalCtx);
|
typedef s32 (*ObjWarpstoneActionFunc)(struct ObjWarpstone* this, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0 */ SEK_MODEL_CLOSED,
|
||||||
|
/* 1 */ SEK_MODEL_OPENED
|
||||||
|
} ObjectSekModels;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 25 */ OBJ_WARPSTONE_TIMER_OPEN_THRESHOLD = 25,
|
||||||
|
/* 66 */ OBJ_WARPSTONE_TIMER_ACTIVATE_THRESHOLD = 66
|
||||||
|
} ObjWarpstoneTimerCutoffs;
|
||||||
|
|
||||||
typedef struct ObjWarpstone {
|
typedef struct ObjWarpstone {
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x000 */ DynaPolyActor dyna;
|
||||||
/* 0x0144 */ char unk_144[0x68];
|
/* 0x15C */ ColliderCylinder collider;
|
||||||
/* 0x01AC */ ObjWarpstoneActionFunc actionFunc;
|
/* 0x1A8 */ u8 isTalking;
|
||||||
|
/* 0x1A9 */ u8 openingCSTimer;
|
||||||
|
/* 0x1AA */ u8 modelIndex;
|
||||||
|
/* 0x1AC */ ObjWarpstoneActionFunc actionFunc;
|
||||||
} ObjWarpstone; // size = 0x1B0
|
} ObjWarpstone; // size = 0x1B0
|
||||||
|
|
||||||
extern const ActorInit Obj_Warpstone_InitVars;
|
extern const ActorInit Obj_Warpstone_InitVars;
|
||||||
|
|
||||||
|
#define GET_OWL_ID(this) ((u16)(this->dyna.actor.params & 0xF))
|
||||||
|
#define IS_OWL_HIT(owlId) (((void)0,gSaveContext.owlsHit) & (u16)gBitFlags[owlId])
|
||||||
|
|
||||||
#endif // Z_OBJ_WARPSTONE_H
|
#endif // Z_OBJ_WARPSTONE_H
|
||||||
|
|
|
@ -14840,10 +14840,10 @@
|
||||||
0x80B92B10:("ObjWarpstone_SetupAction",),
|
0x80B92B10:("ObjWarpstone_SetupAction",),
|
||||||
0x80B92B1C:("ObjWarpstone_Init",),
|
0x80B92B1C:("ObjWarpstone_Init",),
|
||||||
0x80B92BD4:("ObjWarpstone_Destroy",),
|
0x80B92BD4:("ObjWarpstone_Destroy",),
|
||||||
0x80B92C00:("func_80B92C00",),
|
0x80B92C00:("ObjWarpstone_ClosedIdle",),
|
||||||
0x80B92C48:("func_80B92C48",),
|
0x80B92C48:("ObjWarpstone_BeginOpeningCutscene",),
|
||||||
0x80B92CD0:("func_80B92CD0",),
|
0x80B92CD0:("ObjWarpstone_PlayOpeningCutscene",),
|
||||||
0x80B92DC4:("func_80B92DC4",),
|
0x80B92DC4:("ObjWarpstone_OpenedIdle",),
|
||||||
0x80B92DDC:("ObjWarpstone_Update",),
|
0x80B92DDC:("ObjWarpstone_Update",),
|
||||||
0x80B92F40:("ObjWarpstone_Draw",),
|
0x80B92F40:("ObjWarpstone_Draw",),
|
||||||
0x80B93310:("func_80B93310",),
|
0x80B93310:("func_80B93310",),
|
||||||
|
|
Loading…
Reference in New Issue