En_Snowman (Eeno and snowballs) OK and documented. object_snowman documented (#818)

* EnSnowman_Init OK

* EnSnowman_Destroy OK

* func_80B173D0 OK and better match for EnSnowman_Init

* EnSnowman_Draw OK

* func_80B19948 OK

* func_80B19998 OK

* func_80B19718 OK

* func_80B1746C and func_80B177EC OK

* Match a ton of functions

* func_80B18B30 OK

* func_80B180A4 OK

* func_80B18C7C OK

* func_80B18124 OK

* EnSnowman_Update OK

* func_80B17144 OK

* func_80B19474 OK

* func_80B18F50 OK

* All functions OK

* Import data to C

* Use object symbols

* Misc cleanup

* Fully document object_snowman

* Low hanging fruit

* Document snowman types

* Some more minor stuff

* Some more minor cleanup and naming

* Name some more functions

* More names

* Even more names

* Turns out, they're called Eeno!

* limbPos -> bodyPartsPos as per Fig's suggestion

* Update some more names

* Committing so I can push up stuff for the snowballPos naming

* More names + use generated reloc

* First pass name on every function

* First pass names on all struct vars

* Document the mega eeno glitch

* Get rid of garbage "split dead" naming

* First pass documentation on combine state

* Better names and some documentation

* Last doc pass before PR

* Respond to Elliptic's review

* / 100.0f -> * 0.01f
This commit is contained in:
Tom Overton 2022-05-25 16:59:36 -07:00 committed by GitHub
parent e67fb5cf16
commit 8ba8780bb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 1268 additions and 215 deletions

View File

@ -1,49 +1,77 @@
<Root>
<!-- Assets for Eeno -->
<File Name="object_snowman" Segment="6">
<Animation Name="object_snowman_Anim_000404" Offset="0x404" />
<Animation Name="object_snowman_Anim_0007B4" Offset="0x7B4" />
<DList Name="object_snowman_DL_0010B0" Offset="0x10B0" />
<DList Name="object_snowman_DL_002428" Offset="0x2428" />
<DList Name="object_snowman_DL_002640" Offset="0x2640" />
<DList Name="object_snowman_DL_0028F0" Offset="0x28F0" />
<DList Name="object_snowman_DL_0029B0" Offset="0x29B0" />
<DList Name="object_snowman_DL_002A50" Offset="0x2A50" />
<DList Name="object_snowman_DL_002B20" Offset="0x2B20" />
<DList Name="object_snowman_DL_002C70" Offset="0x2C70" />
<DList Name="object_snowman_DL_002D10" Offset="0x2D10" />
<DList Name="object_snowman_DL_002DE0" Offset="0x2DE0" />
<DList Name="object_snowman_DL_002E70" Offset="0x2E70" />
<Texture Name="object_snowman_Tex_002F00" OutName="tex_002F00" Format="rgba16" Width="32" Height="64" Offset="0x2F00" />
<Texture Name="object_snowman_Tex_003F00" OutName="tex_003F00" Format="i4" Width="16" Height="16" Offset="0x3F00" />
<Texture Name="object_snowman_Tex_003F80" OutName="tex_003F80" Format="i8" Width="16" Height="16" Offset="0x3F80" />
<Texture Name="object_snowman_Tex_004080" OutName="tex_004080" Format="rgba16" Width="16" Height="16" Offset="0x4080" />
<DList Name="object_snowman_DL_004400" Offset="0x4400" />
<Limb Name="object_snowman_Standardlimb_0044F0" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_01" Offset="0x44F0" />
<Limb Name="object_snowman_Standardlimb_0044FC" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_02" Offset="0x44FC" />
<Limb Name="object_snowman_Standardlimb_004508" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_03" Offset="0x4508" />
<Limb Name="object_snowman_Standardlimb_004514" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_04" Offset="0x4514" />
<Limb Name="object_snowman_Standardlimb_004520" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_05" Offset="0x4520" />
<Limb Name="object_snowman_Standardlimb_00452C" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_06" Offset="0x452C" />
<Limb Name="object_snowman_Standardlimb_004538" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_07" Offset="0x4538" />
<Limb Name="object_snowman_Standardlimb_004544" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_08" Offset="0x4544" />
<Limb Name="object_snowman_Standardlimb_004550" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_09" Offset="0x4550" />
<Limb Name="object_snowman_Standardlimb_00455C" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_0A" Offset="0x455C" />
<Limb Name="object_snowman_Standardlimb_004568" Type="Standard" EnumName="OBJECT_SNOWMAN_1_LIMB_0B" Offset="0x4568" />
<Skeleton Name="object_snowman_Skel_0045A0" Type="Flex" LimbType="Standard" LimbNone="OBJECT_SNOWMAN_1_LIMB_NONE" LimbMax="OBJECT_SNOWMAN_1_LIMB_MAX" EnumName="object_snowman_1_Limbs" Offset="0x45A0" />
<Animation Name="object_snowman_Anim_004628" Offset="0x4628" />
<Animation Name="object_snowman_Anim_0046D8" Offset="0x46D8" />
<DList Name="object_snowman_DL_004960" Offset="0x4960" />
<DList Name="object_snowman_DL_0049E0" Offset="0x49E0" />
<Limb Name="object_snowman_Standardlimb_004A70" Type="Standard" EnumName="OBJECT_SNOWMAN_2_LIMB_01" Offset="0x4A70" />
<Limb Name="object_snowman_Standardlimb_004A7C" Type="Standard" EnumName="OBJECT_SNOWMAN_2_LIMB_02" Offset="0x4A7C" />
<Skeleton Name="object_snowman_Skel_004A90" Type="Flex" LimbType="Standard" LimbNone="OBJECT_SNOWMAN_2_LIMB_NONE" LimbMax="OBJECT_SNOWMAN_2_LIMB_MAX" EnumName="object_snowman_2_Limbs" Offset="0x4A90" />
<Animation Name="object_snowman_Anim_004F14" Offset="0x4F14" />
<Animation Name="object_snowman_Anim_00544C" Offset="0x544C" />
<Animation Name="object_snowman_Anim_00554C" Offset="0x554C" />
<Animation Name="object_snowman_Anim_0058CC" Offset="0x58CC" />
<DList Name="object_snowman_DL_005CB0" Offset="0x5CB0" />
<DList Name="object_snowman_DL_006190" Offset="0x6190" />
<DList Name="object_snowman_DL_006620" Offset="0x6620" />
<Texture Name="object_snowman_Tex_006730" OutName="tex_006730" Format="rgba16" Width="32" Height="64" Offset="0x6730" />
<!-- Eeno Animations -->
<Animation Name="gEenoLargeSnowballCreateAnim" Offset="0x404" /> <!-- Original name is "sm_ageA" ("go up/raise A") -->
<Animation Name="gEenoSmallSnowballCreateAnim" Offset="0x7B4" /> <!-- Original name is "sm_ageB" ("go up/raise B") -->
<!-- Eeno Large Snowball DisplayList -->
<DList Name="gEenoLargeSnowballDL" Offset="0x10B0" />
<!-- Eeno Limb DisplayLists -->
<DList Name="gEenoBodyBottomDL" Offset="0x2428" />
<DList Name="gEenoBodyTopDL" Offset="0x2640" />
<DList Name="gEenoRightUpperArmDL" Offset="0x28F0" />
<DList Name="gEenoRightForearmDL" Offset="0x29B0" />
<DList Name="gEenoRightHandDL" Offset="0x2A50" />
<DList Name="gEenoLeftUpperArmDL" Offset="0x2B20" />
<DList Name="gEenoLeftForearmDL" Offset="0x2C70" />
<DList Name="gEenoLeftHandDL" Offset="0x2D10" />
<DList Name="gEenoRightEyeDL" Offset="0x2DE0" />
<DList Name="gEenoLeftEyeDL" Offset="0x2E70" />
<!-- Eeno Textures -->
<Texture Name="gEenoFaceTex" OutName="eeno_face" Format="rgba16" Width="32" Height="64" Offset="0x2F00" />
<Texture Name="gEenoUpperCheekTex" OutName="eeno_upper_cheek" Format="i4" Width="16" Height="16" Offset="0x3F00" />
<Texture Name="gEenoBodyTex" OutName="eeno_body" Format="i8" Width="16" Height="16" Offset="0x3F80" />
<Texture Name="gEenoEyeTex" OutName="eeno_eye" Format="rgba16" Width="16" Height="16" Offset="0x4080" />
<!-- Eeno Small Snowball DisplayList -->
<DList Name="gEenoSmallSnowballDL" Offset="0x4400" />
<!-- Eeno Limbs -->
<Limb Name="gEenoRootLimb" Type="Standard" EnumName="EENO_LIMB_ROOT" Offset="0x44F0" />
<Limb Name="gEenoBodyTopLimb" Type="Standard" EnumName="EENO_LIMB_BODY_TOP" Offset="0x44FC" />
<Limb Name="gEenoLeftEyeLimb" Type="Standard" EnumName="EENO_LIMB_LEFT_EYE" Offset="0x4508" />
<Limb Name="gEenoRightEyeLimb" Type="Standard" EnumName="EENO_LIMB_RIGHT_EYE" Offset="0x4514" />
<Limb Name="gEenoLeftUpperArmLimb" Type="Standard" EnumName="EENO_LIMB_LEFT_UPPER_ARM" Offset="0x4520" />
<Limb Name="gEenoLeftForearmLimb" Type="Standard" EnumName="EENO_LIMB_LEFT_FOREARM" Offset="0x452C" />
<Limb Name="gEenoLeftHandLimb" Type="Standard" EnumName="EENO_LIMB_LEFT_HAND" Offset="0x4538" />
<Limb Name="gEenoRightUpperArmLimb" Type="Standard" EnumName="EENO_LIMB_RIGHT_UPPER_ARM" Offset="0x4544" />
<Limb Name="gEenoRightForearmLimb" Type="Standard" EnumName="EENO_LIMB_RIGHT_FOREARM" Offset="0x4550" />
<Limb Name="gEenoRightHandLimb" Type="Standard" EnumName="EENO_LIMB_RIGHT_HAND" Offset="0x455C" />
<Limb Name="gEenoBodyBottomLimb" Type="Standard" EnumName="EENO_LIMB_BODY_BOTTOM" Offset="0x4568" />
<!-- Eeno Skeleton -->
<Skeleton Name="gEenoSkel" Type="Flex" LimbType="Standard" LimbNone="EENO_LIMB_NONE" LimbMax="EENO_LIMB_MAX" EnumName="EenoLimbs" Offset="0x45A0" />
<!-- Eeno Animations -->
<Animation Name="gEenoDamageAnim" Offset="0x4628" /> <!-- Original name is "sm_damege" -->
<Animation Name="gEenoSnowPileMoveAnim" Offset="0x46D8" /> <!-- Original name is "sm_fukurami" ("to swell") -->
<!-- Eeno Snow Pile Limb DisplayLists -->
<DList Name="gEenoSnowPileBottomDL" Offset="0x4960" />
<DList Name="gEenoSnowPileTopDL" Offset="0x49E0" />
<!-- Eeno Snow Pile Limbs -->
<Limb Name="gEenoSnowPileBottomLimb" Type="Standard" EnumName="EENO_SNOW_PILE_LIMB_BOTTOM" Offset="0x4A70" />
<Limb Name="gEenoSnowPileTopLimb" Type="Standard" EnumName="EENO_SNOW_PILE_LIMB_TOP" Offset="0x4A7C" />
<!-- Eeno Snow Pile Skeleton -->
<Skeleton Name="gEenoSnowPileSkel" Type="Flex" LimbType="Standard" LimbNone="EENO_SNOW_PILE_LIMB_NONE" LimbMax="EENO_SNOW_PILE_LIMB_MAX" EnumName="EenoSnowPileLimbs" Offset="0x4A90" />
<!-- Eeno Animations -->
<Animation Name="gEenoLargeSnowballThrowAnim" Offset="0x4F14" /> <!-- Original name is "sm_nageA" ("throw A") -->
<Animation Name="gEenoSmallSnowballThrowAnim" Offset="0x544C" /> <!-- Original name is "sm_nageB" ("throw B") -->
<Animation Name="gEenoEmergeAnim" Offset="0x554C" /> <!-- Original name is "sm_tojo" ("appearance") -->
<Animation Name="gEenoIdleAnim" Offset="0x58CC" /> <!-- Original name is "sm_wait" -->
<!-- Eeno Snowball Fragment DisplayLists -->
<DList Name="gEenoSnowballFragment1DL" Offset="0x5CB0" />
<DList Name="gEenoSnowballFragment2DL" Offset="0x6190" />
<DList Name="gEenoSnowballFragment3DL" Offset="0x6620" />
<!-- Eeno Snowball Fragment Texture -->
<Texture Name="gEenoSnowballFragmentTex" OutName="eeno_snowball_fragment" Format="rgba16" Width="32" Height="64" Offset="0x6730" />
</File>
</Root>

3
spec
View File

@ -3820,8 +3820,7 @@ beginseg
name "ovl_En_Snowman"
compress
include "build/src/overlays/actors/ovl_En_Snowman/z_en_snowman.o"
include "build/data/ovl_En_Snowman/ovl_En_Snowman.data.o"
include "build/data/ovl_En_Snowman/ovl_En_Snowman.reloc.o"
include "build/src/overlays/actors/ovl_En_Snowman/ovl_En_Snowman_reloc.o"
endseg
beginseg

File diff suppressed because it is too large Load Diff

View File

@ -2,16 +2,56 @@
#define Z_EN_SNOWMAN_H
#include "global.h"
#include "objects/object_snowman/object_snowman.h"
#define EN_SNOWMAN_GET_TYPE(thisx) ((thisx)->params)
#define EN_SNOWMAN_GET_ATTACK_RANGE(thisx) (((thisx)->params >> 8) & 0xFF)
typedef enum {
/* 0 */ EN_SNOWMAN_TYPE_SMALL,
/* 1 */ EN_SNOWMAN_TYPE_LARGE,
/* 2 */ EN_SNOWMAN_TYPE_SPLIT,
/* 3 */ EN_SNOWMAN_TYPE_SMALL_SNOWBALL,
/* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL,
} EnSnowmanType;
struct EnSnowman;
typedef void (*EnSnowmanActionFunc)(struct EnSnowman*, GlobalContext*);
typedef struct EnSnowman {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x13C];
/* 0x0280 */ EnSnowmanActionFunc actionFunc;
/* 0x0284 */ char unk_284[0xF4];
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ SkelAnime snowPileSkelAnime;
/* 0x1CC */ Vec3s jointTable[EENO_LIMB_MAX];
/* 0x214 */ Vec3s morphTable[EENO_LIMB_MAX];
/* 0x25C */ Vec3s snowPileJointTable[EENO_SNOW_PILE_LIMB_MAX];
/* 0x26E */ Vec3s snowPileMorphTable[EENO_SNOW_PILE_LIMB_MAX];
/* 0x280 */ EnSnowmanActionFunc actionFunc;
/* 0x284 */ EnSnowmanActionFunc prevActionFunc;
/* 0x288 */ u8 isHoldingSnowball;
/* 0x289 */ u8 combineState;
/* 0x28A */ u8 turningOnSteepSlope;
/* 0x28B */ u8 drawDmgEffType;
/* 0x28C */ union {
s16 timer;
s16 snowballsToThrowBeforeIdling;
} work;
/* 0x28E */ s16 snowPileTargetRotY;
/* 0x290 */ s16 combineTimer;
/* 0x294 */ f32 eenoScale;
/* 0x298 */ union {
f32 frameToStartHoldingSnowball;
f32 frameToThrowSnowball;
f32 targetScaleDuringCombine;
} fwork;
/* 0x29C */ f32 attackRange;
/* 0x2A0 */ f32 drawDmgEffAlpha;
/* 0x2A4 */ f32 drawDmgEffScale;
/* 0x2A8 */ Vec3f combinePos;
/* 0x2B4 */ Vec3f snowballPos;
/* 0x2C0 */ Vec3f bodyPartsPos[9];
/* 0x32C */ ColliderCylinder collider;
} EnSnowman; // size = 0x378
extern const ActorInit En_Snowman_InitVars;

View File

@ -13112,43 +13112,43 @@
0x80B16808:("BgHakuginSwitch_Draw",),
0x80B16B00:("EnSnowman_Init",),
0x80B16F94:("EnSnowman_Destroy",),
0x80B16FC0:("func_80B16FC0",),
0x80B17144:("func_80B17144",),
0x80B173D0:("func_80B173D0",),
0x80B1746C:("func_80B1746C",),
0x80B177EC:("func_80B177EC",),
0x80B178B8:("func_80B178B8",),
0x80B179D0:("func_80B179D0",),
0x80B17A58:("func_80B17A58",),
0x80B17CE8:("func_80B17CE8",),
0x80B17D78:("func_80B17D78",),
0x80B17EB4:("func_80B17EB4",),
0x80B17EFC:("func_80B17EFC",),
0x80B17F4C:("func_80B17F4C",),
0x80B17FE0:("func_80B17FE0",),
0x80B180A4:("func_80B180A4",),
0x80B18124:("func_80B18124",),
0x80B18380:("func_80B18380",),
0x80B183A4:("func_80B183A4",),
0x80B183C4:("func_80B183C4",),
0x80B1848C:("func_80B1848C",),
0x80B18600:("func_80B18600",),
0x80B1861C:("func_80B1861C",),
0x80B18908:("func_80B18908",),
0x80B189C4:("func_80B189C4",),
0x80B189D4:("func_80B189D4",),
0x80B18A04:("func_80B18A04",),
0x80B18A28:("func_80B18A28",),
0x80B18B30:("func_80B18B30",),
0x80B18BB4:("func_80B18BB4",),
0x80B18C7C:("func_80B18C7C",),
0x80B18F50:("func_80B18F50",),
0x80B16FC0:("EnSnowman_SpawnCircularDustEffect",),
0x80B17144:("EnSnowman_SpawnBigSnowballFragmentEffects",),
0x80B173D0:("EnSnowman_SetupMoveSnowPile",),
0x80B1746C:("EnSnowman_MoveSnowPile",),
0x80B177EC:("EnSnowman_SetupEmerge",),
0x80B178B8:("EnSnowman_Emerge",),
0x80B179D0:("EnSnowman_SetupReadySnowball",),
0x80B17A58:("EnSnowman_ReadySnowball",),
0x80B17CE8:("EnSnowman_SetupThrowSnowball",),
0x80B17D78:("EnSnowman_ThrowSnowball",),
0x80B17EB4:("EnSnowman_SetupIdle",),
0x80B17EFC:("EnSnowman_Idle",),
0x80B17F4C:("EnSnowman_SetupSubmerge",),
0x80B17FE0:("EnSnowman_Submerge",),
0x80B180A4:("EnSnowman_SetupMelt",),
0x80B18124:("EnSnowman_Melt",),
0x80B18380:("EnSnowman_SetupStun",),
0x80B183A4:("EnSnowman_Stun",),
0x80B183C4:("EnSnowman_SetupDamaged",),
0x80B1848C:("EnSnowman_Damaged",),
0x80B18600:("EnSnowman_SetupDead",),
0x80B1861C:("EnSnowman_Dead",),
0x80B18908:("EnSnowman_SetupSplitDoNothing",),
0x80B189C4:("EnSnowman_SplitDoNothing",),
0x80B189D4:("EnSnowman_SetupMarkForDeath",),
0x80B18A04:("EnSnowman_MarkForDeath",),
0x80B18A28:("EnSnowman_CreateSplitEeno",),
0x80B18B30:("EnSnowman_AbsorbEeno",),
0x80B18BB4:("EnSnowman_SetupCombine",),
0x80B18C7C:("EnSnowman_Combine",),
0x80B18F50:("EnSnowman_UpdateDamage",),
0x80B1918C:("EnSnowman_Update",),
0x80B19474:("func_80B19474",),
0x80B19718:("func_80B19718",),
0x80B19474:("EnSnowman_UpdateSnowball",),
0x80B19718:("EnSnowman_PostLimbDraw",),
0x80B198B0:("EnSnowman_Draw",),
0x80B19948:("func_80B19948",),
0x80B19998:("func_80B19998",),
0x80B19948:("EnSnowman_DrawSnowPile",),
0x80B19998:("EnSnowman_DrawSnowball",),
0x80B19F60:("TGSw_ActionDecider",),
0x80B1A008:("TGSw_ActionExecuteOneShot",),
0x80B1A15C:("TGSw_Init",),

View File

@ -13908,10 +13908,8 @@
0x80B19AAC:("D_80B19AAC","UNK_TYPE1","",0x1),
0x80B19AB8:("D_80B19AB8","UNK_TYPE1","",0x1),
0x80B19AC4:("D_80B19AC4","UNK_TYPE1","",0x1),
0x80B19AD0:("D_80B19AD0","UNK_TYPE1","",0x1),
0x80B19ADA:("D_80B19ADA","UNK_TYPE1","",0x1),
0x80B19ADC:("D_80B19ADC","UNK_TYPE1","",0x1),
0x80B19B18:("D_80B19B18","UNK_TYPE1","",0x1),
0x80B19AD0:("D_80B19AD0","s8","[12]",0xC),
0x80B19ADC:("D_80B19ADC","Vec3f","[5]",0x3C),
0x80B19B20:("D_80B19B20","f32","",0x4),
0x80B19B24:("D_80B19B24","f32","",0x4),
0x80B19B28:("D_80B19B28","f32","",0x4),

View File

@ -1458,19 +1458,6 @@ D_06000650 = 0x06000650;
D_06000828 = 0x06000828;
D_06000A10 = 0x06000A10;
// ovl_En_Snowman
D_06000404 = 0x06000404;
D_060007B4 = 0x060007B4;
D_060045A0 = 0x060045A0;
D_06004628 = 0x06004628;
D_060046D8 = 0x060046D8;
D_06004A90 = 0x06004A90;
D_06004F14 = 0x06004F14;
D_0600544C = 0x0600544C;
D_0600554C = 0x0600554C;
D_060058CC = 0x060058CC;
// ovl_En_Snowwd
D_06000198 = 0x06000198;