mirror of
https://github.com/zeldaret/mm.git
synced 2026-09-09 19:51:14 -04:00
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:
@@ -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;
|
||||
|
||||
@@ -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 },
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1626
-1035
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user