ovl_En_Go OK and documented (Decomp was mostly done already) (#1080)

* Match remaining functions in z_en_go:

- Changed some already matching functions for uniformity with the tricky match (early continue from loop). In some cases, this eliminated some strange constructs, in others, it didn't leave much difference.
- Comments/Notes to start understanding/naming process.

* WIP renaming

* More WIP renaming.

* More renaming, Effects (See oot for continuation) and some flags)

* MessageScript documenting.

* Util for dumping message data by textId value.

* Identify some messages.

* Formatting, figuring out event flags.

* More WIP naming

* WIP renaming.

* WIP renaming

* WIP naming and organizing

* WIP more renaming.

* WIP renaming/organizing.

* Near-Final Cleanup before review.

* Rename Taisou and Hakugin animations and associated functions/variables.

* Misc Cleanup.

* Undo changes to variables.txt

* Removed msgtableparser.py (Split to another branch)

* Removal of uncompiled Message Script details.

* Fixup spec file

* First part of hensldm's suggested changes from review. Awaiting discussion.

* Second part of hensldm's suggested changes.

* Fixup missed 'Animation' suffix and functions.txt

* Update .xml files and related source per tom-overton's comments

* Align w/ engineer124's Quake Cleanup #1102

* fixup

* Run format.sh after merge.

* Add brackets around one-line conditional blocks

* Remainder of hensldm's comments from review.

* First pass at Elliptic's comments.

* Rename functions UpdateToX -> ChangeToX

* Header cleanup.

* Run Format, remove accidental commit of .orig file.

* Fixup ActorInit

* Review comments addressed, plus a few unsolicited changes.
- Location of function declarations moved above static data, below types: References in the codebase were mixed, but this just made more sense.
- Function name changes: It didn't fit into subsystems based on Goron Type, so I quit trying to name functions that way. Loss of a bit of "which function applies to which type", but it looks a bit cleaner, sooo...
- Took a stab at making effectTable usage a bit clearer. Just using a EnGoEffect* everywhere and not inherently knowing if it was for one element, or an array really bugged me.
- "GraveBro" names changed. They're all "brothers".

* Changes from engineer124's review.
- "Stretcher" replaced with "Athletic" as a descriptor of goron type.
- Misc formatting and naming changes

* Restructure switch-case statment for early break, and added missing default cases. Removed #define for 0 for actionFlags bitmask.

* Relocate WEEKEVENTREG comments, remove SCENE comments.

* Updated WEEKEVENTREG define names

* Update WEEKEVENTREG names in Goron Shrine Door.

* ELDER -> ELDERS, and revert formatting on z64save.h

* Fixed re-applying changes over wrong defines.

* Adjust Weekeventreg names and comments.

* Update comment as well.
This commit is contained in:
StickyThwomp 2023-06-01 22:30:48 -05:00 committed by GitHub
parent e0ae4e24f7
commit 95c5796e41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1887 additions and 1245 deletions

View File

@ -1,8 +1,9 @@
<Root>
<!-- Animations for Gorons during the arrival of spring cutscene -->
<File Name="object_hakugin_demo" Segment="6">
<Animation Name="object_hakugin_demo_Anim_001420" Offset="0x1420" />
<Animation Name="object_hakugin_demo_Anim_001A4C" Offset="0x1A4C" />
<Animation Name="object_hakugin_demo_Anim_002704" Offset="0x2704" />
<Animation Name="object_hakugin_demo_Anim_003378" Offset="0x3378" />
<Animation Name="gGoronSpringShowAnim" Offset="0x1420" />
<Animation Name="gGoronSpringShowLoopAnim" Offset="0x1A4C" />
<Animation Name="gGoronSpringLookAroundAnim" Offset="0x2704" />
<Animation Name="gGoronSpringLookAroundLoopAnim" Offset="0x3378" />
</File>
</Root>

View File

@ -1,12 +1,13 @@
<Root>
<!-- Animations for Gorons at the Racetrack -->
<File Name="object_taisou" Segment="6">
<Animation Name="object_taisou_Anim_0016C8" Offset="0x16C8" />
<Animation Name="object_taisou_Anim_00283C" Offset="0x283C" />
<Animation Name="object_taisou_Anim_002C48" Offset="0x2C48" />
<Animation Name="object_taisou_Anim_0031D8" Offset="0x31D8" />
<Animation Name="object_taisou_Anim_004DD4" Offset="0x4DD4" />
<Animation Name="object_taisou_Anim_005790" Offset="0x5790" />
<Animation Name="object_taisou_Anim_005EE0" Offset="0x5EE0" />
<Animation Name="object_taisou_Anim_007764" Offset="0x7764" />
<Animation Name="gGoronAthleticsSquatSideToSideAnim" Offset="0x16C8" />
<Animation Name="gGoronAthleticsShakeLimbsAnim" Offset="0x283C" />
<Animation Name="gGoronAthleticsCheerAnim" Offset="0x2C48" />
<Animation Name="gGoronAthleticsShoutAnim" Offset="0x31D8" />
<Animation Name="gGoronAthleticsDoubleArmSideBendAnim" Offset="0x4DD4" />
<Animation Name="gGoronAthleticsHamstringStretchStandingAnim" Offset="0x5790" />
<Animation Name="gGoronAthleticsHamstringStretchSittingAnim" Offset="0x5EE0" />
<Animation Name="gGoronAthleticsSingleArmSideBendAnim" Offset="0x7764" />
</File>
</Root>

View File

@ -695,7 +695,9 @@ typedef enum {
#define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10)
#define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20)
#define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40)
#define WEEKEVENTREG_18_80 PACK_WEEKEVENTREG_FLAG(18, 0x80)
// Player has Powder Keg purchasing privileges.
#define WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES PACK_WEEKEVENTREG_FLAG(18, 0x80)
#define WEEKEVENTREG_19_01 PACK_WEEKEVENTREG_FLAG(19, 0x01)
#define WEEKEVENTREG_19_02 PACK_WEEKEVENTREG_FLAG(19, 0x02)
#define WEEKEVENTREG_19_04 PACK_WEEKEVENTREG_FLAG(19, 0x04)
@ -717,8 +719,12 @@ typedef enum {
#define WEEKEVENTREG_20_80 PACK_WEEKEVENTREG_FLAG(20, 0x80)
#define WEEKEVENTREG_21_01 PACK_WEEKEVENTREG_FLAG(21, 0x01)
#define WEEKEVENTREG_21_02 PACK_WEEKEVENTREG_FLAG(21, 0x02)
#define WEEKEVENTREG_21_04 PACK_WEEKEVENTREG_FLAG(21, 0x04)
#define WEEKEVENTREG_21_08 PACK_WEEKEVENTREG_FLAG(21, 0x08)
// Player has spoken to Goron Graveyard's gravemaker while in Goron form.
#define WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON PACK_WEEKEVENTREG_FLAG(21, 0x04)
// Player has spoken to formerly frozen Goron outside Goron Graveyard.
#define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08)
#define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10)
#define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20)
#define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40)
@ -729,7 +735,10 @@ typedef enum {
#define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01)
#define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02)
#define WEEKEVENTREG_22_04 PACK_WEEKEVENTREG_FLAG(22, 0x04)
// Goron Elder's son has been calmed from Goron's Lullaby.
#define WEEKEVENTREG_CALMED_GORON_ELDERS_SON PACK_WEEKEVENTREG_FLAG(22, 0x04)
#define WEEKEVENTREG_22_08 PACK_WEEKEVENTREG_FLAG(22, 0x08)
#define WEEKEVENTREG_22_10 PACK_WEEKEVENTREG_FLAG(22, 0x10)
#define WEEKEVENTREG_22_20 PACK_WEEKEVENTREG_FLAG(22, 0x20)
@ -1293,11 +1302,17 @@ typedef enum {
#define WEEKEVENTREG_88_08 PACK_WEEKEVENTREG_FLAG(88, 0x08)
#define WEEKEVENTREG_88_10 PACK_WEEKEVENTREG_FLAG(88, 0x10)
#define WEEKEVENTREG_88_20 PACK_WEEKEVENTREG_FLAG(88, 0x20)
#define WEEKEVENTREG_88_40 PACK_WEEKEVENTREG_FLAG(88, 0x40)
#define WEEKEVENTREG_88_80 PACK_WEEKEVENTREG_FLAG(88, 0x80)
#define WEEKEVENTREG_89_01 PACK_WEEKEVENTREG_FLAG(89, 0x01)
#define WEEKEVENTREG_89_02 PACK_WEEKEVENTREG_FLAG(89, 0x02)
#define WEEKEVENTREG_89_04 PACK_WEEKEVENTREG_FLAG(89, 0x04)
// Goron shrine Gatekeeper has opened shrine.
#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(88, 0x40)
// Goron shrine Gatekeeper has opened shrine for player in Human form.
#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN PACK_WEEKEVENTREG_FLAG(88, 0x80)
// Goron shrine Gatekeeper has opened shrine for player in Deku form.
#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU PACK_WEEKEVENTREG_FLAG(89, 0x01)
// Goron shrine Gatekeeper has opened shrine for player in Zora form.
#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA PACK_WEEKEVENTREG_FLAG(89, 0x02)
// Goron shrine Gatekeeper has opened shrine for player in Goron form.
#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON PACK_WEEKEVENTREG_FLAG(89, 0x04)
// Unconfirmed: "Postman has delivered priority mail"
#define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08)

4
spec
View File

@ -2402,11 +2402,7 @@ beginseg
name "ovl_En_Go"
compress
include "build/src/overlays/actors/ovl_En_Go/z_en_go.o"
#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_En_Go/ovl_En_Go_reloc.o"
#else
include "build/data/ovl_En_Go/ovl_En_Go.reloc.o"
#endif
endseg
beginseg

View File

@ -38,12 +38,12 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
} else if (CutsceneManager_IsNext(csId)) {
CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor);
SET_WEEKEVENTREG(WEEKEVENTREG_88_40);
SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
this->cutsceneRequested = false;
} else {
CutsceneManager_Queue(csId);
}
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->posYTick == 0) &&
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (this->posYTick == 0) &&
(play->actorCtx.playerImpact.timer != 0) &&
(play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) &&
(SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) {
@ -52,7 +52,7 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) {
}
prevPosYTick = this->posYTick;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE)) {
this->posYTick++;
} else {
this->posYTick--;
@ -65,9 +65,9 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) {
this->timer = 180;
}
if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) &&
if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) &&
(DECR(this->timer) == 0)) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
}
}
@ -76,7 +76,7 @@ void BgTobira01_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
Actor_SetScale(&this->dyna.actor, 1.0f);
this->timer = gSaveContext.save.isNight;
this->posYTick = 0;

View File

@ -135,17 +135,17 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
};

View File

@ -830,7 +830,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) {
}
void func_80B51FD0(EnGk* this, PlayState* play) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (this->unk_1E4 & 2) {
func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
} else {
@ -897,7 +897,7 @@ void func_80B5227C(EnGk* this, PlayState* play) {
func_800B14D4(play, 20.0f, &this->actor.home.pos);
this->unk_350 = 60;
if (!(this->unk_1E4 & 0x80)) {
SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON);
}
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
this->unk_350 = 0x4000;
@ -987,7 +987,7 @@ void func_80B525E0(EnGk* this, PlayState* play) {
void func_80B52654(EnGk* this, PlayState* play) {
this->unk_350 += 0x400;
if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) {
SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON);
}
this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f;
@ -1044,7 +1044,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
} else if (ENGK_GET_F(&this->actor) == ENGK_F_2) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFunc = func_80B51FD0;
this->actor.draw = NULL;
this->actor.flags |= ACTOR_FLAG_10;
@ -1052,7 +1052,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
} else {
Actor_Kill(&this->actor);
}
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->unk_2E4 = 0;
this->csId = this->actor.csId;
this->actor.flags |= ACTOR_FLAG_10;
@ -1076,7 +1076,7 @@ void EnGk_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((ENGK_GET_F(&this->actor) == ENGK_F_1) ||
((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) {
func_80B507A0(this, play);
SkelAnime_Update(&this->skelAnime);
Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos);
@ -1235,7 +1235,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
Matrix_RotateXS(-0x4000, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);

File diff suppressed because it is too large Load Diff

View File

@ -2,103 +2,141 @@
#define Z_EN_GO_H
#include "global.h"
#include "objects/object_oF1d_map/object_oF1d_map.h"
struct EnGo;
typedef void (*EnGoActionFunc)(struct EnGo*, PlayState*);
typedef s32 (*MsgEventFunc)(Actor*, PlayState*);
#define ENGO_GET_F(thisx) (((thisx)->params & 0xF) & 0xFF)
#define ENGO_GET_70(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF)
#define ENGO_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
#define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF)
#define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF)
enum {
#define ENGO_GET_PATH(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
#define ENGO_SNOW_EFFECT_COUNT 16
#define ENGO_OTHER_EFFECT_COUNT 16
#define ENGO_EFFECT_COUNT (ENGO_SNOW_EFFECT_COUNT + ENGO_OTHER_EFFECT_COUNT)
/**
* Struct to track the state of various visual effects.
*
* A Goron's 'effectTable' is comprised of a number of these effects, which depending on the context in which they are
* used, take on the form of snow, dust, or steam. The functions using these objects have an expectation that they are
* iterating through the full effectTable, or half of the effectTable. See individual functions containing 'EnGoEffect*'
* parameters for more details.
*/
typedef struct EnGoEffect {
/* 0x00 */ u8 type;
/* 0x01 */ u8 alphaDenom;
/* 0x02 */ u8 alphaNumer;
/* 0x04 */ Vec3s rotVelocity;
/* 0x0A */ Vec3s rotAngle;
/* 0x10 */ Vec3f pos;
/* 0x1C */ Vec3f accel;
/* 0x28 */ Vec3f velocity;
/* 0x34 */ f32 scaleXY;
/* 0x38 */ f32 scaleXYDelta;
} EnGoEffect; // size = 0x3C;
/**
* Goron Type, identified by bits [3..0] of the actor's params
*
* - The ENGO_ATHLETIC and ENGO_SPECTATOR types share the same subtype domain (EnGoRacetrackSubtype: [0,7])
* - ENGO_GRAVEYARD types have their own subtype domain (EnGoGraveyardSubtype: [0,1])
* - Others have no subtypes.
*/
typedef enum EnGoType {
/* 0 */ ENGO_F_0,
/* 1 */ ENGO_F_1,
/* 2 */ ENGO_F_2,
/* 3 */ ENGO_F_3,
/* 4 */ ENGO_F_4,
/* 5 */ ENGO_F_5,
/* 6 */ ENGO_F_6,
/* 7 */ ENGO_F_7,
/* 8 */ ENGO_F_8,
};
/* 1 */ ENGO_ATHLETIC, // Racers stretching before the race
/* 2 */ ENGO_SPECTATOR, // Spectators to the race
/* 3 */ ENGO_GATEKEEPER, // Gatekeeper to the Goron Shrine
/* 4 */ ENGO_GRAVEYARD, // Gravemaker and other
/* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store
/* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room
/* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son
/* 8 */ ENGO_MEDIGORON, // Medigoron selling Powder Kegs
} EnGoType;
enum {
/* 0 */ ENGO_70_0,
/* 1 */ ENGO_70_1,
/* 2 */ ENGO_70_2,
/* 3 */ ENGO_70_3,
/* 4 */ ENGO_70_4,
/* 5 */ ENGO_70_5,
};
/**
* Subtype for Gorons at the racetrack (ENGO_ATHLETIC and ENGO_SPECTATOR)
*/
typedef enum EnGoRacetrackSubtype {
/* 0 */ ENGO_ATHLETIC_A,
/* 1 */ ENGO_ATHLETIC_B,
/* 2 */ ENGO_ATHLETIC_C,
/* 3 */ ENGO_ATHLETIC_D,
/* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT,
/* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND,
/* 6 */ ENGO_SPECTATOR_CHEER,
/* 7 */ ENGO_SPECTATOR_SHOUTING,
} EnGoRacetrackSubtype;
typedef struct {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ u8 unk_02;
/* 0x04 */ Vec3s unk_04;
/* 0x0A */ Vec3s unk_0A;
/* 0x10 */ Vec3f unk_10;
/* 0x1C */ Vec3f unk_1C;
/* 0x28 */ Vec3f unk_28;
/* 0x34 */ f32 unk_34;
/* 0x38 */ f32 unk_38;
} EnGoStruct; // size = 0x3C;
/**
* Subtype for Gorons outside the Goron Graveyard (ENGO_GRAVEYARD)
*/
typedef enum EnGoGraveyardSubtype {
/* 0 */ ENGO_GRAVEYARD_GRAVEMAKER,
/* 1 */ ENGO_GRAVEYARD_FROZEN,
} EnGoGraveyardSubtype;
typedef struct EnGo {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnGoActionFunc actionFunc;
/* 0x18C */ EnGoActionFunc unk_18C;
/* 0x190 */ EnGoActionFunc unk_190;
/* 0x18C */ EnGoActionFunc interruptedActionFunc;
/* 0x190 */ EnGoActionFunc graveyardDialogActionFunc;
/* 0x194 */ ColliderCylinder colliderCylinder;
/* 0x1E0 */ UNK_TYPE1 unk1E0[0x4C];
/* 0x1E0 */ ColliderCylinder unusedCylinder;
/* 0x22C */ ColliderSphere colliderSphere;
/* 0x284 */ Path* unk_284;
/* 0x288 */ s8 unk_288;
/* 0x289 */ s8 unk_289;
/* 0x28C */ s32 unk_28C;
/* 0x290 */ Vec3f unk_290;
/* 0x29C */ Vec3f unk_29C;
/* 0x2A8 */ Vec3s unk_2A8;
/* 0x2AE */ Vec3s unk_2AE;
/* 0x2B4 */ Vec3s jointTable[18];
/* 0x320 */ Vec3s morphTable[18];
/* 0x38C */ Actor* unk_38C;
/* 0x390 */ u16 unk_390;
/* 0x392 */ u16 unk_392;
/* 0x394 */ u8 cueId;
/* 0x398 */ f32 unk_398;
/* 0x39C */ f32 unk_39C;
/* 0x3A0 */ f32 unk_3A0;
/* 0x3A4 */ f32 unk_3A4;
/* 0x3A8 */ f32 unk_3A8;
/* 0x284 */ Path* gatekeeperPath;
/* 0x288 */ s8 taisouObjIndex;
/* 0x289 */ s8 hakuginDemoObjIndex;
/* 0x28C */ s32 msgScriptResumePos;
/* 0x290 */ Vec3f headPos;
/* 0x29C */ Vec3f bodyPos;
/* 0x2A8 */ Vec3s headRot;
/* 0x2AE */ Vec3s bodyRot;
/* 0x2B4 */ Vec3s jointTable[GORON_LIMB_MAX];
/* 0x320 */ Vec3s morphTable[GORON_LIMB_MAX];
/* 0x38C */ Actor* attentionTarget;
/* 0x390 */ u16 actionFlags;
/* 0x392 */ u16 lastTextId;
/* 0x394 */ u8 springArrivalCueId;
/* 0x398 */ f32 curAnimPlaySpeed;
/* 0x39C */ f32 iceBlockScale;
/* 0x3A0 */ f32 iceBlockAlpha;
/* 0x3A4 */ f32 scaleFactor;
/* 0x3A8 */ f32 scaleFactorPoundDistortion;
/* 0x3AC */ UNK_TYPE1 unk3AC[0x2];
/* 0x3AE */ s16 unk_3AE;
/* 0x3B0 */ s16 unk_3B0;
/* 0x3B2 */ s16 unk_3B2;
/* 0x3B4 */ s16 unk_3B4;
/* 0x3B6 */ s16 unk_3B6;
/* 0x3AE */ union {
s16 snorePhase; // Used whilst a Goron is sleeping, +0x400 at a time
s16 elapsedHangtime; // Hangtime at the top of a pound.
};
/* 0x3B0 */ s16 headRotZ;
/* 0x3B2 */ s16 headRotY;
/* 0x3B4 */ s16 bodyRotZ;
/* 0x3B6 */ s16 bodyRotY;
/* 0x3B8 */ s16 csId;
/* 0x3BA */ s16 unk_3BA;
/* 0x3BC */ s16 unk_3BC;
/* 0x3BE */ s16 unk_3BE;
/* 0x3C0 */ s16 unk_3C0;
/* 0x3C2 */ s16 unk_3C2;
/* 0x3C4 */ s16 unk_3C4;
/* 0x3C6 */ s16 unk_3C6;
/* 0x3C8 */ s16 unk_3C8[3];
/* 0x3CE */ s16 unk_3CE[3];
/* 0x3D4 */ s16 unk_3D4;
/* 0x3D8 */ void* unk_3D8;
/* 0x3DC */ s32 unk_3DC;
/* 0x3BA */ s16 loseAttentionTimer;
/* 0x3BC */ s16 blinkTimer;
/* 0x3BE */ s16 eyeTexIndex;
/* 0x3C0 */ s16 cutsceneState;
/* 0x3C2 */ s16 cutsceneDelayTimer;
/* 0x3C4 */ s16 gatekeeperAnimState;
/* 0x3C6 */ s16 harmlessTimer;
/* 0x3C8 */ s16 limbRotTableZ[3];
/* 0x3CE */ s16 limbRotTableY[3];
/* 0x3D4 */ s16 surprisePhase;
/* 0x3D8 */ MsgEventFunc msgEventFunc;
/* 0x3DC */ s32 curAnimIndex;
/* 0x3E0 */ UNK_TYPE1 unk3E0[0x4];
/* 0x3E4 */ s32 unk_3E4;
/* 0x3E8 */ s32 unk_3E8;
/* 0x3EC */ s32 unk_3EC;
/* 0x3F0 */ s32 unk_3F0;
/* 0x3F4 */ s32 unk_3F4;
/* 0x3F8 */ EnGoStruct unk_3F8[32];
/* 0x3E4 */ s32 indexPathPoint;
/* 0x3E8 */ s32 indexEffect;
/* 0x3EC */ s32 sleepState;
/* 0x3F0 */ s32 springArrivalCutsceneActive;
/* 0x3F4 */ s32 changedText;
/* 0x3F8 */ EnGoEffect effectTable[ENGO_EFFECT_COUNT];
} EnGo; // size = 0xB78
#endif // Z_EN_GO_H

View File

@ -171,12 +171,12 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronStandingHandTappingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronSleepyAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
@ -235,7 +235,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) {
case EN_S_GORO_TYPE_SHRINE_WINTER_A:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) {
switch (this->textId) {
@ -302,7 +302,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_B:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) {
switch (this->textId) {
@ -367,7 +367,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_C:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) {
switch (this->textId) {
@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1);
}
}
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SUPPRESS_SNORE;
}
@ -842,7 +842,7 @@ s32 EnSGoro_CheckGKBehavior(EnSGoro* this, PlayState* play) {
return false;
}
if ((!(this->actionFlags & EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED)) &&
((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP;
@ -1026,7 +1026,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) {
this->actionFlags = 0;
if (EN_S_GORO_OFTYPE_WSHRINE) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN;
this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A;

View File

@ -9675,76 +9675,76 @@
0x80A10368:("EnSob1_ZoraShopkeeper_Draw",),
0x80A104E4:("EnSob1_GoronShopkeeper_Draw",),
0x80A10608:("EnSob1_BombShopkeeper_Draw",),
0x80A10FD0:("func_80A10FD0",),
0x80A11144:("func_80A11144",),
0x80A1143C:("func_80A1143C",),
0x80A115B4:("func_80A115B4",),
0x80A118F8:("func_80A118F8",),
0x80A11BF8:("func_80A11BF8",),
0x80A11EC0:("func_80A11EC0",),
0x80A1203C:("func_80A1203C",),
0x80A1213C:("func_80A1213C",),
0x80A121F4:("func_80A121F4",),
0x80A1222C:("func_80A1222C",),
0x80A122EC:("func_80A122EC",),
0x80A123A0:("func_80A123A0",),
0x80A124A0:("func_80A124A0",),
0x80A124FC:("func_80A124FC",),
0x80A125BC:("func_80A125BC",),
0x80A12660:("func_80A12660",),
0x80A126BC:("func_80A126BC",),
0x80A12774:("func_80A12774",),
0x80A12868:("func_80A12868",),
0x80A12954:("func_80A12954",),
0x80A12A64:("func_80A12A64",),
0x80A12B78:("func_80A12B78",),
0x80A12C48:("func_80A12C48",),
0x80A12D6C:("func_80A12D6C",),
0x80A12DF4:("func_80A12DF4",),
0x80A12E80:("func_80A12E80",),
0x80A12FE8:("func_80A12FE8",),
0x80A131F8:("func_80A131F8",),
0x80A132C8:("func_80A132C8",),
0x80A133A8:("func_80A133A8",),
0x80A13400:("func_80A13400",),
0x80A134B0:("func_80A134B0",),
0x80A134F4:("func_80A134F4",),
0x80A13564:("func_80A13564",),
0x80A10FD0:("EnGo_InitSteam",),
0x80A11144:("EnGo_DrawSteam",),
0x80A1143C:("EnGo_InitDust",),
0x80A115B4:("EnGo_DrawDust",),
0x80A118F8:("EnGo_InitSnow",),
0x80A11BF8:("EnGo_UpdateSnow",),
0x80A11EC0:("EnGo_DrawSnow",),
0x80A1203C:("EnGo_UpdateEffects",),
0x80A1213C:("EnGo_DrawEffects",),
0x80A121F4:("EnGo_CanSnowballHurtPlayer",),
0x80A1222C:("EnGo_IsFallingAsleep",),
0x80A122EC:("EnGo_UpdateFocus",),
0x80A123A0:("EnGo_UpdateSnowballCollider",),
0x80A124A0:("EnGo_UpdateMedigoronCollider",),
0x80A124FC:("EnGo_UpdateRolledUpCollider",),
0x80A125BC:("EnGo_UpdateFrozenCollider",),
0x80A12660:("EnGo_UpdateStandingCollider",),
0x80A126BC:("EnGo_UpdateCollider",),
0x80A12774:("EnGo_UpdateTalking",),
0x80A12868:("EnGo_DetectCollisions",),
0x80A12954:("EnGo_UpdateSpringArrivalCutscene",),
0x80A12A64:("EnGo_UpdateAnimationToCurrent",),
0x80A12B78:("EnGo_UpdateSfx",),
0x80A12C48:("EnGo_ChangeAnim",),
0x80A12D6C:("EnGo_UpdateEyes",),
0x80A12DF4:("EnGo_UpdateShiverSurprisedAnimation",),
0x80A12E80:("EnGo_UpdateGraveyardAttentionTargetAndReactions",),
0x80A12FE8:("EnGo_UpdateRotationToTarget",),
0x80A131F8:("EnGo_UpdateAttentionTargetAndReactions",),
0x80A132C8:("EnGo_GravemakerIdle",),
0x80A133A8:("EnGo_FrozenIdle",),
0x80A13400:("EnGo_FindGravemaker",),
0x80A134B0:("EnGo_UpdateMedigoronColliderRadius",),
0x80A134F4:("EnGo_ChangeCutscene",),
0x80A13564:("EnGo_HandleGatekeeperPoundCutscene",),
0x80A136B8:("EnGo_RequestQuake",),
0x80A13728:("func_80A13728",),
0x80A137C0:("func_80A137C0",),
0x80A139E4:("func_80A139E4",),
0x80A13B1C:("func_80A13B1C",),
0x80A13E80:("func_80A13E80",),
0x80A14018:("func_80A14018",),
0x80A14104:("func_80A14104",),
0x80A141D4:("func_80A141D4",),
0x80A1428C:("func_80A1428C",),
0x80A14324:("func_80A14324",),
0x80A143A8:("func_80A143A8",),
0x80A14430:("func_80A14430",),
0x80A1449C:("func_80A1449C",),
0x80A144F4:("func_80A144F4",),
0x80A145AC:("func_80A145AC",),
0x80A14668:("func_80A14668",),
0x80A146CC:("func_80A146CC",),
0x80A14798:("func_80A14798",),
0x80A149B0:("func_80A149B0",),
0x80A14B30:("func_80A14B30",),
0x80A14E14:("func_80A14E14",),
0x80A14E74:("func_80A14E74",),
0x80A14EB0:("func_80A14EB0",),
0x80A14FC8:("func_80A14FC8",),
0x80A153FC:("func_80A153FC",),
0x80A15684:("func_80A15684",),
0x80A157C4:("func_80A157C4",),
0x80A13728:("EnGo_CreateGatekeeperPoundEffects",),
0x80A137C0:("EnGo_DrawIceBlockWhenFrozen",),
0x80A139E4:("EnGo_MakeSteam",),
0x80A13B1C:("EnGo_HandleOpenShrineCutscene",),
0x80A13E80:("EnGo_HandleGivePowderKegCutscene",),
0x80A14018:("EnGo_ChangeToStretchingAnimation",),
0x80A14104:("EnGo_ChangeToSpectatingAnimation",),
0x80A141D4:("EnGo_ChangeToFrozenAnimation",),
0x80A1428C:("EnGo_ChangeToSnowballAnimation",),
0x80A14324:("EnGo_ChangeToCoveringEarsAnimation",),
0x80A143A8:("EnGo_ChangeToShiveringAnimation",),
0x80A14430:("EnGo_SetupAthletic",),
0x80A1449C:("EnGo_SetupSpectator",),
0x80A144F4:("EnGo_SetupGatekeeper",),
0x80A145AC:("EnGo_SetupGraveyardGoron",),
0x80A14668:("EnGo_SetupShrineGoron",),
0x80A146CC:("EnGo_SetupMedigoron",),
0x80A14798:("EnGo_SetupInitialAction",),
0x80A149B0:("EnGo_Idle",),
0x80A14B30:("EnGo_Sleep",),
0x80A14E14:("EnGo_Frozen",),
0x80A14E74:("EnGo_AwaitThaw",),
0x80A14EB0:("EnGo_Thaw",),
0x80A14FC8:("EnGo_HandleSpringArrivalCutscene",),
0x80A153FC:("EnGo_Snowball",),
0x80A15684:("EnGo_GetMsgEventScript",),
0x80A157C4:("EnGo_Talk",),
0x80A1590C:("EnGo_Init",),
0x80A15960:("EnGo_Destroy",),
0x80A159B0:("EnGo_Update",),
0x80A15B80:("func_80A15B80",),
0x80A15B80:("EnGo_Draw_NoSkeleton",),
0x80A15D04:("EnGo_OverrideLimbDraw",),
0x80A15E38:("EnGo_TransfromLimbDraw",),
0x80A15FEC:("func_80A15FEC",),
0x80A15FEC:("EnGo_Draw",),
0x80A16D40:("EnRaf_ClearPixelTeeth",),
0x80A16D6C:("EnRaf_ClearPixelPetal",),
0x80A16D90:("EnRaf_Init",),

View File

@ -155,7 +155,7 @@ weekEventReg = {
(18 << 8) | 0x10: "WEEKEVENTREG_18_10",
(18 << 8) | 0x20: "WEEKEVENTREG_18_20",
(18 << 8) | 0x40: "WEEKEVENTREG_18_40",
(18 << 8) | 0x80: "WEEKEVENTREG_18_80",
(18 << 8) | 0x80: "WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES",
(19 << 8) | 0x01: "WEEKEVENTREG_19_01",
(19 << 8) | 0x02: "WEEKEVENTREG_19_02",
(19 << 8) | 0x04: "WEEKEVENTREG_19_04",
@ -174,15 +174,15 @@ weekEventReg = {
(20 << 8) | 0x80: "WEEKEVENTREG_20_80",
(21 << 8) | 0x01: "WEEKEVENTREG_21_01",
(21 << 8) | 0x02: "WEEKEVENTREG_21_02",
(21 << 8) | 0x04: "WEEKEVENTREG_21_04",
(21 << 8) | 0x08: "WEEKEVENTREG_21_08",
(21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON",
(21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON",
(21 << 8) | 0x10: "WEEKEVENTREG_21_10",
(21 << 8) | 0x20: "WEEKEVENTREG_21_20",
(21 << 8) | 0x40: "WEEKEVENTREG_21_40",
(21 << 8) | 0x80: "WEEKEVENTREG_21_80",
(22 << 8) | 0x01: "WEEKEVENTREG_22_01",
(22 << 8) | 0x02: "WEEKEVENTREG_22_02",
(22 << 8) | 0x04: "WEEKEVENTREG_22_04",
(22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON",
(22 << 8) | 0x08: "WEEKEVENTREG_22_08",
(22 << 8) | 0x10: "WEEKEVENTREG_22_10",
(22 << 8) | 0x20: "WEEKEVENTREG_22_20",
@ -714,11 +714,11 @@ weekEventReg = {
(88 << 8) | 0x08: "WEEKEVENTREG_88_08",
(88 << 8) | 0x10: "WEEKEVENTREG_88_10",
(88 << 8) | 0x20: "WEEKEVENTREG_88_20",
(88 << 8) | 0x40: "WEEKEVENTREG_88_40",
(88 << 8) | 0x80: "WEEKEVENTREG_88_80",
(89 << 8) | 0x01: "WEEKEVENTREG_89_01",
(89 << 8) | 0x02: "WEEKEVENTREG_89_02",
(89 << 8) | 0x04: "WEEKEVENTREG_89_04",
(88 << 8) | 0x40: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE",
(88 << 8) | 0x80: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN",
(89 << 8) | 0x01: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU",
(89 << 8) | 0x02: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA",
(89 << 8) | 0x04: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON",
(89 << 8) | 0x08: "WEEKEVENTREG_89_08",
(89 << 8) | 0x10: "WEEKEVENTREG_89_10",
(89 << 8) | 0x20: "WEEKEVENTREG_89_20",