mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
En_Giant OK and mostly documented (#346)
* Migrate data to C * EnGiant_Destroy OK * EnGiant_Init OK * func_80B01A74 OK * Comment what each of the quest items are * Put a little comment for myself on func_80B01A74 because it was confusing me lol * Very early names (they're all bad) * func_80B01990 OK * EnGiant_Update OK * func_80B024AC OK * func_80B023D0 OK * func_80B024D8 OK * func_80B02354 OK (this function is bad!) * func_80B020A0 OK * func_80B01EE8 OK * func_80B01E84 OK * func_80B0211C OK * func_80B02234 OK * unk_250 -> sfxId and label SFX * func_80B02688 OK * func_80B026C4 OK * EnGiant_Draw OK * Update spec * Fix up the static data * unk_24E -> alpha * Document some of the animation stuff * Name EnGiant_IsNotFreed * Document the giant types better * Minor cleanup * Add explanatory comment * Rename the functions in functions.txt too, whoops * Document sFaceTextures and blink routine * Document all the various animations * Name EnGiant_PlaySound * Document some functions and change an unknown to action * Add an SFX id I missed * Name all the action funcs * Name last two functions * Mark one case as unused * Change func_800F5A8C to use arg0, arg1, arg2, etc. * Move sFaceTextures to EnGiant_Draw and comment what they are * EnGiant_IsNotFreed -> EnGiant_IsImprisoned * Use booleans in EnGiant_IsImprisoned * **/ -> */ * action -> csAction * Make macros for all type conditional checks * Add warning about inconsistency * Document the cs actions * Add some documentation to animation-changing functions * Update the function name in functions.txt too * Improve GIANT_TYPE macros * Remove an unncessary early return * Incorporate animation changes
This commit is contained in:
+1
-1
@@ -1736,7 +1736,7 @@ void Font_LoadOrderedFont(Font* font);
|
||||
// void func_800F50D4(void);
|
||||
void Kankyo_Init(GlobalContext* globalCtx, EnvironmentContext* envCtx);
|
||||
u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5);
|
||||
// void func_800F5A8C(void);
|
||||
f32 func_800F5A8C(u16 arg0, u16 arg1, u16 arg2, GlobalContext* globalContext);
|
||||
// void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
|
||||
// void func_800F5CD0(void);
|
||||
// void func_800F6834(void);
|
||||
|
||||
@@ -29,7 +29,11 @@ typedef struct {
|
||||
/* 0x00 */ u16 unk0; // action; // "dousa"
|
||||
/* 0x02 */ u16 startFrame;
|
||||
/* 0x04 */ u16 endFrame;
|
||||
/* 0x06 */ UNK_TYPE1 pad6[0x2A];
|
||||
/* 0x06 */ UNK_TYPE1 pad6[0xA];
|
||||
/* 0x10 */ s32 unk10;
|
||||
/* 0x14 */ UNK_TYPE1 pad14[0x8];
|
||||
/* 0x1C */ s32 unk1C;
|
||||
/* 0x20 */ UNK_TYPE1 pad20[0x10];
|
||||
} CsCmdActorAction; // size = 0x30
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -3889,8 +3889,7 @@ beginseg
|
||||
name "ovl_En_Giant"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Giant/z_en_giant.o"
|
||||
include "build/data/ovl_En_Giant/ovl_En_Giant.data.o"
|
||||
include "build/data/ovl_En_Giant/ovl_En_Giant.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Giant/ovl_En_Giant_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,14 +3,107 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define GIANT_TYPE(thisx) ((thisx)->params & 0xF)
|
||||
#define GIANT_TYPE_IS_NOT_TERMINA_FIELD(type) (type > GIANT_TYPE_OCEAN_TERMINA_FIELD)
|
||||
#define GIANT_TYPE_IS_TERMINA_FIELD(type) (type <= GIANT_TYPE_OCEAN_TERMINA_FIELD)
|
||||
#define GIANT_TYPE_IS_CLOCK_TOWER_SUCCESS(type) (type >= GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_SUCCESS && type <= GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS)
|
||||
#define GIANT_TYPE_IS_CHAMBER_OR_ENDING(type) (type >= GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING && type <= GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING)
|
||||
#define GIANT_TYPE_IS_CLOCK_TOWER_FAILURE(type) (type >= GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE && type <= GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE)
|
||||
|
||||
/**
|
||||
* The giants are divided into types based on where in the game they appear.
|
||||
* - TERMINA_FIELD: These appear in all non-ending cutscenes that take place in Termina Field.
|
||||
* - CLOCK_TOWER_SUCCESS: These appear in the Clock Tower when the Oath to Order is played and all giants are freed.
|
||||
* - GIANTS_CHAMBER_AND_ENDING: These giants appear in the Giant's Chamber or in all cutscenes that play after defeating Majora.
|
||||
* - CLOCK_TOWER_FAILURE: These appear in the Clock Tower when the Oath to Order is played and all giants are NOT freed.
|
||||
*
|
||||
* The SWAMP, MOUNTAIN, OCEAN, and CANYON signifiers are used to identify which of the four giants it is,
|
||||
* but the devs were not always consistent about this. For example, the giants in the Giant's Chamber are
|
||||
* always GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING, regardless of which boss was just defeated. These
|
||||
* are named such that EnGiant_IsImprisoned has the expected behavior; the devs were only inconsistent in
|
||||
* the cases where they weren't calling this function.
|
||||
*/
|
||||
typedef enum {
|
||||
/* 0 */ GIANT_TYPE_MOUNTAIN_TERMINA_FIELD,
|
||||
/* 1 */ GIANT_TYPE_CANYON_TERMINA_FIELD,
|
||||
/* 2 */ GIANT_TYPE_SWAMP_TERMINA_FIELD,
|
||||
/* 3 */ GIANT_TYPE_OCEAN_TERMINA_FIELD,
|
||||
/* 4 */ GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_SUCCESS,
|
||||
/* 5 */ GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS,
|
||||
/* 6 */ GIANT_TYPE_SWAMP_CLOCK_TOWER_SUCCESS,
|
||||
/* 7 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS,
|
||||
/* 8 */ GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING,
|
||||
/* 9 */ GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING,
|
||||
/* 10 */ GIANT_TYPE_SWAMP_GIANTS_CHAMBER_AND_ENDING,
|
||||
/* 11 */ GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING,
|
||||
/* 12 */ GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE,
|
||||
/* 13 */ GIANT_TYPE_CANYON_CLOCK_TOWER_FAILURE,
|
||||
/* 14 */ GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE,
|
||||
/* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE,
|
||||
} GiantType;
|
||||
|
||||
/**
|
||||
* These values are used to index into sAnimationTable to pick the appropriate animation.
|
||||
*/
|
||||
typedef enum {
|
||||
/* 0 */ GIANT_ANIMATION_LOOK_UP_START,
|
||||
/* 1 */ GIANT_ANIMATION_LOOK_UP_LOOP,
|
||||
/* 2 */ GIANT_ANIMATION_FALLING_OVER,
|
||||
/* 3 */ GIANT_ANIMATION_RAISED_ARMS_START,
|
||||
/* 4 */ GIANT_ANIMATION_RAISED_ARMS_LOOP,
|
||||
/* 5 */ GIANT_ANIMATION_STRUGGLE_START,
|
||||
/* 6 */ GIANT_ANIMATION_STRUGGLE_LOOP,
|
||||
/* 7 */ GIANT_ANIMATION_IDLE_LOOP,
|
||||
/* 8 */ GIANT_ANIMATION_WALKING_LOOP,
|
||||
/* 9 */ GIANT_ANIMATION_BIG_CALL_START,
|
||||
/* 10 */ GIANT_ANIMATION_BIG_CALL_LOOP,
|
||||
/* 11 */ GIANT_ANIMATION_BIG_CALL_END,
|
||||
/* 12 */ GIANT_ANIMATION_SMALL_CALL_START,
|
||||
/* 13 */ GIANT_ANIMATION_SMALL_CALL_LOOP,
|
||||
/* 14 */ GIANT_ANIMATION_SMALL_CALL_END,
|
||||
/* 15 */ GIANT_ANIMATION_MAX
|
||||
} GiantAnimationIndex;
|
||||
|
||||
/**
|
||||
* Used as values for csAction. The UNKNOWN ones are never used in-game.
|
||||
*/
|
||||
typedef enum {
|
||||
/* 0 */ GIANT_CS_ACTION_NONE,
|
||||
/* 1 */ GIANT_CS_ACTION_IDLE,
|
||||
/* 2 */ GIANT_CS_ACTION_WALKING,
|
||||
/* 3 */ GIANT_CS_ACTION_LOOKING_UP,
|
||||
/* 4 */ GIANT_CS_ACTION_RAISING_ARMS,
|
||||
/* 5 */ GIANT_CS_ACTION_STRUGGLING,
|
||||
/* 6 */ GIANT_CS_ACTION_FALLING_OVER,
|
||||
/* 7 */ GIANT_CS_ACTION_IDLE_FADE_IN,
|
||||
/* 8 */ GIANT_CS_ACTION_TALKING,
|
||||
/* 9 */ GIANT_CS_ACTION_DONE_TALKING,
|
||||
/* 10 */ GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER,
|
||||
/* 11 */ GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER,
|
||||
/* 12 */ GIANT_CS_ACTION_UNKNOWN_12,
|
||||
/* 13 */ GIANT_CS_ACTION_UNKNOWN_13,
|
||||
/* 14 */ GIANT_CS_ACTION_UNKNOWN_14,
|
||||
/* 15 */ GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER
|
||||
} GiantCsActionIndex;
|
||||
|
||||
struct EnGiant;
|
||||
|
||||
typedef void (*EnGiantActionFunc)(struct EnGiant*, GlobalContext*);
|
||||
|
||||
typedef struct EnGiant {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0x154];
|
||||
/* 0x0298 */ EnGiantActionFunc actionFunc;
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ Vec3s jointTable[16];
|
||||
/* 0x1E8 */ Vec3s morphTable[16];
|
||||
/* 0x248 */ s16 animationId;
|
||||
/* 0x24A */ u16 unk_24A;
|
||||
/* 0x24C */ u16 csAction;
|
||||
/* 0x24E */ s16 alpha;
|
||||
/* 0x250 */ u16 sfxId;
|
||||
/* 0x254 */ MtxF unk_254;
|
||||
/* 0x294 */ s16 faceIndex;
|
||||
/* 0x296 */ s16 blinkTimer;
|
||||
/* 0x298 */ EnGiantActionFunc actionFunc;
|
||||
} EnGiant; // size = 0x29C
|
||||
|
||||
extern const ActorInit En_Giant_InitVars;
|
||||
|
||||
+13
-13
@@ -12869,22 +12869,22 @@
|
||||
0x80B00F08:("func_80B00F08",),
|
||||
0x80B00F64:("func_80B00F64",),
|
||||
0x80B01040:("EnTalkGibud_Draw",),
|
||||
0x80B01990:("func_80B01990",),
|
||||
0x80B01A74:("func_80B01A74",),
|
||||
0x80B01990:("EnGiant_ChangeAnimation",),
|
||||
0x80B01A74:("EnGiant_IsImprisoned",),
|
||||
0x80B01B30:("EnGiant_Init",),
|
||||
0x80B01E74:("EnGiant_Destroy",),
|
||||
0x80B01E84:("func_80B01E84",),
|
||||
0x80B01EE8:("func_80B01EE8",),
|
||||
0x80B020A0:("func_80B020A0",),
|
||||
0x80B0211C:("func_80B0211C",),
|
||||
0x80B02234:("func_80B02234",),
|
||||
0x80B02354:("func_80B02354",),
|
||||
0x80B023D0:("func_80B023D0",),
|
||||
0x80B024AC:("func_80B024AC",),
|
||||
0x80B024D8:("func_80B024D8",),
|
||||
0x80B01E84:("EnGiant_ChangeToStartOrLoopAnimation",),
|
||||
0x80B01EE8:("EnGiant_ChangeAnimationBasedOnCsAction",),
|
||||
0x80B020A0:("EnGiant_UpdateAlpha",),
|
||||
0x80B0211C:("EnGiant_PlayAndUpdateAnimation",),
|
||||
0x80B02234:("EnGiant_PlaySound",),
|
||||
0x80B02354:("EnGiant_UpdatePosition",),
|
||||
0x80B023D0:("EnGiant_PerformClockTowerSuccessActions",),
|
||||
0x80B024AC:("EnGiant_PlayClockTowerFailureAnimation",),
|
||||
0x80B024D8:("EnGiant_PerformCutsceneActions",),
|
||||
0x80B025CC:("EnGiant_Update",),
|
||||
0x80B02688:("func_80B02688",),
|
||||
0x80B026C4:("func_80B026C4",),
|
||||
0x80B02688:("EnGiant_PostLimbDrawOpa",),
|
||||
0x80B026C4:("EnGiant_PostLimbDrawXlu",),
|
||||
0x80B026FC:("EnGiant_Draw",),
|
||||
0x80B02CD0:("func_80B02CD0",),
|
||||
0x80B02D58:("func_80B02D58",),
|
||||
|
||||
@@ -2321,11 +2321,26 @@ D_0600F6C0 = 0x0600F6C0;
|
||||
// ovl_En_Giant
|
||||
|
||||
D_06002168 = 0x06002168;
|
||||
D_06005A80 = 0x06005A80;
|
||||
D_06006280 = 0x06006280;
|
||||
D_06006A80 = 0x06006A80;
|
||||
D_06007610 = 0x06007610;
|
||||
D_060079B0 = 0x060079B0;
|
||||
D_06008394 = 0x06008394;
|
||||
D_060096E4 = 0x060096E4;
|
||||
D_0600A1C4 = 0x0600A1C4;
|
||||
D_0600ACA4 = 0x0600ACA4;
|
||||
D_0600B784 = 0x0600B784;
|
||||
D_0600C5D4 = 0x0600C5D4;
|
||||
D_0600D040 = 0x0600D040;
|
||||
D_0600DE84 = 0x0600DE84;
|
||||
D_060102A4 = 0x060102A4;
|
||||
D_060116E4 = 0x060116E4;
|
||||
D_06012A38 = 0x06012A38;
|
||||
D_06013004 = 0x06013004;
|
||||
D_06013FE8 = 0x06013FE8;
|
||||
D_06015334 = 0x06015334;
|
||||
D_06017944 = 0x06017944;
|
||||
|
||||
// ovl_En_Ginko_Man
|
||||
|
||||
|
||||
Reference in New Issue
Block a user