hgdoor documented (#1110)

* documented hgdoor

* PR comments

* comments from anon

* Elliptics comment
This commit is contained in:
Parker Burnett
2022-10-08 04:57:45 -07:00
committed by GitHub
parent d364b80da3
commit 4c0011659e
3 changed files with 57 additions and 51 deletions
@@ -16,15 +16,15 @@ void ObjHgdoor_Destroy(Actor* thisx, PlayState* play);
void ObjHgdoor_Update(Actor* thisx, PlayState* play);
void ObjHgdoor_Draw(Actor* thisx, PlayState* play);
void ObjHgdoor_SetupCheckShouldOpen(ObjHgdoor* this);
void ObjHgdoor_CheckShouldOpen(ObjHgdoor* this, PlayState* play);
void func_80BD42AC(ObjHgdoor* this);
void func_80BD42C0(ObjHgdoor* this, PlayState* play);
void func_80BD433C(ObjHgdoor* this);
void func_80BD4358(ObjHgdoor* this, PlayState* play);
void func_80BD4460(ObjHgdoor* this);
void func_80BD4478(ObjHgdoor* this, PlayState* play);
s32 func_80BD44D0(ObjHgdoor* this, PlayState* play);
void ObjHgdoor_SetupIdle(ObjHgdoor* this);
void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play);
void ObjHgdoor_SetupCutscene(ObjHgdoor* this);
void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play);
void ObjHgdoor_SetupCsAction(ObjHgdoor* this);
void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play);
void ObjHgdoor_SetupStopCs(ObjHgdoor* this);
void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play);
s32 ObjHgdoor_Rotate(ObjHgdoor* this, PlayState* play);
const ActorInit Obj_Hgdoor_InitVars = {
ACTOR_OBJ_HGDOOR,
@@ -38,9 +38,7 @@ const ActorInit Obj_Hgdoor_InitVars = {
(ActorFunc)ObjHgdoor_Draw,
};
static s16 D_80BD4690 = 0;
static s32 unused = 0;
static s32 unused2 = 0;
static s16 sOpenFlag = 0;
void ObjHgdoor_SetChild(ObjHgdoor* this, PlayState* play) {
Actor* actorIterator = play->actorCtx.actorLists[ACTORCAT_PROP].first;
@@ -82,7 +80,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) {
this->rotation = 0;
this->timer = 0;
this->cutscene = this->dyna.actor.cutscene;
ObjHgdoor_SetupCheckShouldOpen(this);
ObjHgdoor_SetupIdle(this);
}
void ObjHgdoor_Destroy(Actor* thisx, PlayState* play) {
@@ -91,29 +89,29 @@ void ObjHgdoor_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
void ObjHgdoor_SetupCheckShouldOpen(ObjHgdoor* this) {
this->actionFunc = ObjHgdoor_CheckShouldOpen;
void ObjHgdoor_SetupIdle(ObjHgdoor* this) {
this->actionFunc = ObjHgdoor_Idle;
}
void ObjHgdoor_CheckShouldOpen(ObjHgdoor* this, PlayState* play) {
void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play) {
if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20) &&
(this->dyna.actor.xzDistToPlayer < 100.0f) && (this->dyna.actor.playerHeightRel < 40.0f) &&
OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
ObjHgdoor_SetChild(this, play);
ObjHgdoor_SetParent(this, play);
func_80BD42AC(this);
ObjHgdoor_SetupCutscene(this);
}
}
void func_80BD42AC(ObjHgdoor* this) {
this->actionFunc = func_80BD42C0;
void ObjHgdoor_SetupCutscene(ObjHgdoor* this) {
this->actionFunc = ObjHgdoor_PlayCutscene;
}
void func_80BD42C0(ObjHgdoor* this, PlayState* play) {
void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &this->dyna.actor);
func_80BD433C(this);
func_80BD433C((ObjHgdoor*)this->dyna.actor.child);
ObjHgdoor_SetupCsAction(this);
ObjHgdoor_SetupCsAction((ObjHgdoor*)this->dyna.actor.child);
} else {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
@@ -122,50 +120,58 @@ void func_80BD42C0(ObjHgdoor* this, PlayState* play) {
}
}
void func_80BD433C(ObjHgdoor* this) {
this->unk166 = 0x63;
this->actionFunc = func_80BD4358;
void ObjHgdoor_SetupCsAction(ObjHgdoor* this) {
this->csAction = 0x63;
this->actionFunc = ObjHgdoor_HandleCsAction;
}
void func_80BD4358(ObjHgdoor* this, PlayState* play) {
void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) {
s32 actionIndex;
if (Cutscene_CheckActorAction(play, 483)) {
actionIndex = Cutscene_GetActorActionIndex(play, 483);
if (this->unk166 != play->csCtx.actorActions[actionIndex]->action) {
this->unk166 = play->csCtx.actorActions[actionIndex]->action;
if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
this->csAction = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
case 1:
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOOD_DOOR_OPEN_SPEEDY);
if ((this->dyna.actor.parent != NULL) && (this->dyna.actor.parent->id == ACTOR_EN_HG)) {
this->dyna.actor.parent->colChkInfo.health = 1;
}
D_80BD4690 = 1;
sOpenFlag = 1;
break;
case 2:
break;
}
}
if ((D_80BD4690 == 1) && (func_80BD44D0(this, play))) {
func_80BD4460(this);
if ((sOpenFlag == 1) && ObjHgdoor_Rotate(this, play)) {
ObjHgdoor_SetupStopCs(this);
}
} else {
this->unk166 = 0x63;
this->csAction = 0x63;
}
}
void func_80BD4460(ObjHgdoor* this) {
void ObjHgdoor_SetupStopCs(ObjHgdoor* this) {
this->timer = 0;
this->actionFunc = func_80BD4478;
this->actionFunc = ObjHgdoor_StopCs;
}
void func_80BD4478(ObjHgdoor* this, PlayState* play) {
if (this->timer++ > 80 && !ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Stop(this->cutscene);
void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play) {
if (this->timer++ > 80) {
if (!ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Stop(this->cutscene);
}
}
}
s32 func_80BD44D0(ObjHgdoor* this, PlayState* play) {
/**
* @brief Function to increment the rotation angle of the door
*
* @return true when door is fully open, false otherwise
*/
s32 ObjHgdoor_Rotate(ObjHgdoor* this, PlayState* play) {
if (this->rotation < 0x5555) {
this->rotation += 0x1388;
} else {
@@ -175,7 +181,7 @@ s32 func_80BD44D0(ObjHgdoor* this, PlayState* play) {
return false;
}
void func_80BD4500(ObjHgdoor* this) {
void ObjHgdoor_Open(ObjHgdoor* this) {
this->dyna.actor.shape.rot.y = this->dyna.actor.home.rot.y;
if (OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
this->dyna.actor.shape.rot.y += this->rotation;
@@ -188,7 +194,7 @@ void ObjHgdoor_Update(Actor* thisx, PlayState* play) {
ObjHgdoor* this = THIS;
this->actionFunc(this, play);
func_80BD4500(this);
ObjHgdoor_Open(this);
}
void ObjHgdoor_Draw(Actor* thisx, PlayState* play) {
@@ -16,7 +16,7 @@ typedef struct ObjHgdoor {
/* 0x160 */ s16 cutscene;
/* 0x162 */ s16 rotation;
/* 0x164 */ s16 timer;
/* 0x166 */ u16 unk166;
/* 0x166 */ u16 csAction;
} ObjHgdoor; // size = 0x168
extern const ActorInit Obj_Hgdoor_InitVars;