En_Wallmas (Wallmaster) OK and documented. object_wallmaster documented (#731)

* EnWallmas_Init and EnWallmas_Destroy OK

* func_80874B88 OK

* func_80874BE4 OK

* func_80874D1C OK

* func_80874DE8 OK

* func_80874F14 OK

* A bunch of small functions OK

* A bunch of smaller functions OK again

* func_808752CC OK

* func_808758C8 OK

* func_80875910 and func_8087596C OK

* func_808756AC and func_8087571C OK

* EnWallmas_Update OK

* func_80875A74 OK

* func_80874A88 and func_80874B04 OK

* A bunch of functions OK

* func_808759B8 and func_80875A0C

* EnWallmas_Draw OK

* func_808760A4 and func_80876118 OK

* func_80875F04 OK

* Use object symbols

* Import data to C

* Use generated reloc

* Document object_wallmaster

* Misc cleanup

* Name the DrawDamageEffects variables

* Name draw functions

* Enum for damage values

* Port function names from OoT

* Last cleanup before PR

* Respond to Elliptic's review

* Respond to Elliptic's second review

* gWallmasterWaitAnim -> gWallmasterIdleAnim

* Change all EnWallmas to Wallmaster (except the actor's name itself)

* Respond to hensldm's review

* Fix merge conflicts
This commit is contained in:
Tom Overton
2022-03-29 22:33:32 +01:00
committed by GitHub
parent b4842eb16c
commit 6faf186a95
10 changed files with 862 additions and 263 deletions
+71 -59
View File
@@ -1,63 +1,75 @@
<Root>
<!-- Assets for both Wallmasters and Floormasters. -->
<File Name="object_wallmaster" Segment="6">
<Animation Name="object_wallmaster_Anim_000590" Offset="0x590" />
<Animation Name="object_wallmaster_Anim_000EA4" Offset="0xEA4" />
<Animation Name="object_wallmaster_Anim_0019CC" Offset="0x19CC" />
<Animation Name="object_wallmaster_Anim_002158" Offset="0x2158" />
<Animation Name="object_wallmaster_Anim_00299C" Offset="0x299C" />
<Animation Name="object_wallmaster_Anim_003120" Offset="0x3120" />
<Animation Name="object_wallmaster_Anim_0039B0" Offset="0x39B0" />
<Animation Name="object_wallmaster_Anim_0041F4" Offset="0x41F4" />
<DList Name="object_wallmaster_DL_006660" Offset="0x6660" />
<DList Name="object_wallmaster_DL_006800" Offset="0x6800" />
<DList Name="object_wallmaster_DL_006A20" Offset="0x6A20" />
<DList Name="object_wallmaster_DL_006C58" Offset="0x6C58" />
<DList Name="object_wallmaster_DL_006E98" Offset="0x6E98" />
<DList Name="object_wallmaster_DL_007038" Offset="0x7038" />
<DList Name="object_wallmaster_DL_007258" Offset="0x7258" />
<DList Name="object_wallmaster_DL_007408" Offset="0x7408" />
<DList Name="object_wallmaster_DL_0075A8" Offset="0x75A8" />
<DList Name="object_wallmaster_DL_0077C8" Offset="0x77C8" />
<DList Name="object_wallmaster_DL_007978" Offset="0x7978" />
<DList Name="object_wallmaster_DL_007B18" Offset="0x7B18" />
<DList Name="object_wallmaster_DL_007CE8" Offset="0x7CE8" />
<DList Name="object_wallmaster_DL_007E98" Offset="0x7E98" />
<DList Name="object_wallmaster_DL_008688" Offset="0x8688" />
<Texture Name="object_wallmaster_Tex_0088F0" OutName="tex_0088F0" Format="rgba16" Width="8" Height="16" Offset="0x88F0" />
<Texture Name="object_wallmaster_Tex_0089F0" OutName="tex_0089F0" Format="rgba16" Width="8" Height="16" Offset="0x89F0" />
<Texture Name="object_wallmaster_Tex_008AF0" OutName="tex_008AF0" Format="rgba16" Width="8" Height="8" Offset="0x8AF0" />
<Texture Name="object_wallmaster_Tex_008B70" OutName="tex_008B70" Format="rgba16" Width="4" Height="16" Offset="0x8B70" />
<Texture Name="object_wallmaster_Tex_008BF0" OutName="tex_008BF0" Format="rgba16" Width="4" Height="8" Offset="0x8BF0" />
<Texture Name="object_wallmaster_Tex_008C30" OutName="tex_008C30" Format="rgba16" Width="8" Height="16" Offset="0x8C30" />
<Texture Name="object_wallmaster_Tex_008D30" OutName="tex_008D30" Format="rgba16" Width="8" Height="16" Offset="0x8D30" />
<Limb Name="object_wallmaster_Standardlimb_008E30" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_01" Offset="0x8E30" />
<Limb Name="object_wallmaster_Standardlimb_008E3C" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_02" Offset="0x8E3C" />
<Limb Name="object_wallmaster_Standardlimb_008E48" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_03" Offset="0x8E48" />
<Limb Name="object_wallmaster_Standardlimb_008E54" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_04" Offset="0x8E54" />
<Limb Name="object_wallmaster_Standardlimb_008E60" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_05" Offset="0x8E60" />
<Limb Name="object_wallmaster_Standardlimb_008E6C" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_06" Offset="0x8E6C" />
<Limb Name="object_wallmaster_Standardlimb_008E78" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_07" Offset="0x8E78" />
<Limb Name="object_wallmaster_Standardlimb_008E84" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_08" Offset="0x8E84" />
<Limb Name="object_wallmaster_Standardlimb_008E90" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_09" Offset="0x8E90" />
<Limb Name="object_wallmaster_Standardlimb_008E9C" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0A" Offset="0x8E9C" />
<Limb Name="object_wallmaster_Standardlimb_008EA8" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0B" Offset="0x8EA8" />
<Limb Name="object_wallmaster_Standardlimb_008EB4" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0C" Offset="0x8EB4" />
<Limb Name="object_wallmaster_Standardlimb_008EC0" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0D" Offset="0x8EC0" />
<Limb Name="object_wallmaster_Standardlimb_008ECC" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0E" Offset="0x8ECC" />
<Limb Name="object_wallmaster_Standardlimb_008ED8" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_0F" Offset="0x8ED8" />
<Limb Name="object_wallmaster_Standardlimb_008EE4" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_10" Offset="0x8EE4" />
<Limb Name="object_wallmaster_Standardlimb_008EF0" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_11" Offset="0x8EF0" />
<Limb Name="object_wallmaster_Standardlimb_008EFC" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_12" Offset="0x8EFC" />
<Limb Name="object_wallmaster_Standardlimb_008F08" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_13" Offset="0x8F08" />
<Limb Name="object_wallmaster_Standardlimb_008F14" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_14" Offset="0x8F14" />
<Limb Name="object_wallmaster_Standardlimb_008F20" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_15" Offset="0x8F20" />
<Limb Name="object_wallmaster_Standardlimb_008F2C" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_16" Offset="0x8F2C" />
<Limb Name="object_wallmaster_Standardlimb_008F38" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_17" Offset="0x8F38" />
<Limb Name="object_wallmaster_Standardlimb_008F44" Type="Standard" EnumName="OBJECT_WALLMASTER_LIMB_18" Offset="0x8F44" />
<Skeleton Name="object_wallmaster_Skel_008FB0" Type="Flex" LimbType="Standard" LimbNone="OBJECT_WALLMASTER_LIMB_NONE" LimbMax="OBJECT_WALLMASTER_LIMB_MAX" EnumName="object_wallmaster_Limbs" Offset="0x8FB0" />
<Animation Name="object_wallmaster_Anim_009244" Offset="0x9244" />
<Animation Name="object_wallmaster_Anim_009520" Offset="0x9520" />
<Animation Name="object_wallmaster_Anim_009DB0" Offset="0x9DB0" />
<Animation Name="object_wallmaster_Anim_00A054" Offset="0xA054" />
<Animation Name="gWallmasterDamageAnim" Offset="0x590" /> <!-- Original name is "wm_damage" -->
<Animation Name="gWallmasterRecoverFromDamageAnim" Offset="0xEA4" /> <!-- Original name is "wm_damage_wait" -->
<Animation Name="gWallmasterJumpAnim" Offset="0x19CC" /> <!-- Original name is "wm_f_jump" -->
<Animation Name="gFloormasterTurnAnim" Offset="0x2158" /> <!-- Original name is "wm_l_turn" -->
<Animation Name="gWallmasterLungeAnim" Offset="0x299C" /> <!-- Original name is "wm_link_hangup" -->
<Animation Name="gWallmasterMissAnim" Offset="0x3120" /> <!-- Unused. Original name is "wm_miss" -->
<Animation Name="gFloormasterTapFingerAnim" Offset="0x39B0" /> <!-- Original name is "wm_motionA" -->
<Animation Name="gWallmasterWalkAnim" Offset="0x41F4" /> <!-- Original name is "wm_move" -->
<!-- Wallmaster/Floormaster Limb DisplayLists -->
<DList Name="gWallmasterThumbDistalDL" Offset="0x6660" />
<DList Name="gWallmasterThumbMiddleDL" Offset="0x6800" />
<DList Name="gWallmasterThumbProximalDL" Offset="0x6A20" />
<DList Name="gWallmasterWristDL" Offset="0x6C58" />
<DList Name="gWallmasterMiddleFingerDistalDL" Offset="0x6E98" />
<DList Name="gWallmasterMiddleFingerMiddleDL" Offset="0x7038" />
<DList Name="gWallmasterMiddleFingerProximalDL" Offset="0x7258" />
<DList Name="gWallmasterRingFingerDistalDL" Offset="0x7408" />
<DList Name="gWallmasterRingFingerMiddleDL" Offset="0x75A8" />
<DList Name="gWallmasterRingFingerProximalDL" Offset="0x77C8" />
<DList Name="gWallmasterIndexFingerDistalDL" Offset="0x7978" />
<DList Name="gWallmasterIndexFingerMiddleDL" Offset="0x7B18" />
<DList Name="gWallmasterIndexFingerProximalDL" Offset="0x7CE8" />
<DList Name="gWallmasterHandDL" Offset="0x7E98" />
<!-- Wallmaster/Floormaster Little Finger DisplayList. Not part of the skeleton, unlike the other fingers. -->
<DList Name="gWallmasterLittleFingerDL" Offset="0x8688" />
<!-- Wallmaster/Floormaster Textures -->
<Texture Name="gWallmasterWristTopTex" OutName="wallmaster_wrist_top" Format="rgba16" Width="8" Height="16" Offset="0x88F0" />
<Texture Name="gWallmasterWristSidesTex" OutName="wallmaster_wrist_sides" Format="rgba16" Width="8" Height="16" Offset="0x89F0" />
<Texture Name="gWallmasterHandBackTex" OutName="wallmaster_hand_back" Format="rgba16" Width="8" Height="8" Offset="0x8AF0" />
<Texture Name="gWallmasterFingerTipTex" OutName="wallmaster_finger_tip" Format="rgba16" Width="4" Height="16" Offset="0x8B70" />
<Texture Name="gWallmasterJointsAndSidesTex" OutName="wallmaster_joints_and_sides" Format="rgba16" Width="4" Height="8" Offset="0x8BF0" />
<Texture Name="gWallmasterPalmAndFingerPadTex" OutName="wallmaster_palm_and_finger_pad" Format="rgba16" Width="8" Height="16" Offset="0x8C30" />
<Texture Name="gWallmasterKnuckleAndFingerTopTex" OutName="wallmaster_knuckle_and_finger_top" Format="rgba16" Width="8" Height="16" Offset="0x8D30" />
<!-- Wallmaster/Floormaster Limbs -->
<Limb Name="gWallmasterRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_ROOT" Offset="0x8E30" />
<Limb Name="gWallmasterHandLimb" Type="Standard" EnumName="WALLMASTER_LIMB_HAND" Offset="0x8E3C" />
<Limb Name="gWallmasterIndexFingerRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_INDEX_FINGER_ROOT" Offset="0x8E48" />
<Limb Name="gWallmasterIndexFingerProximalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_INDEX_FINGER_PROXIMAL" Offset="0x8E54" />
<Limb Name="gWallmasterIndexFingerDistalRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_INDEX_FINGER_DISTAL_ROOT" Offset="0x8E60" />
<Limb Name="gWallmasterIndexFingerMiddleLimb" Type="Standard" EnumName="WALLMASTER_LIMB_INDEX_FINGER_MIDDLE" Offset="0x8E6C" />
<Limb Name="gWallmasterIndexFingerDistalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_INDEX_FINGER_DISTAL" Offset="0x8E78" />
<Limb Name="gWallmasterRingFingerRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_RING_FINGER_ROOT" Offset="0x8E84" />
<Limb Name="gWallmasterRingFingerProximalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_RING_FINGER_PROXIMAL" Offset="0x8E90" />
<Limb Name="gWallmasterRingFingerDistalRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_RING_FINGER_DISTAL_ROOT" Offset="0x8E9C" />
<Limb Name="gWallmasterRingFingerMiddleLimb" Type="Standard" EnumName="WALLMASTER_LIMB_RING_FINGER_MIDDLE" Offset="0x8EA8" />
<Limb Name="gWallmasterRingFingerDistalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_RING_FINGER_DISTAL" Offset="0x8EB4" />
<Limb Name="gWallmasterMiddleFingerRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_MIDDLE_FINGER_ROOT" Offset="0x8EC0" />
<Limb Name="gWallmasterMiddleFingerProximalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_MIDDLE_FINGER_PROXIMAL" Offset="0x8ECC" />
<Limb Name="gWallmasterMiddleFingerDistalRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL_ROOT" Offset="0x8ED8" />
<Limb Name="gWallmasterMiddleFingerMiddleLimb" Type="Standard" EnumName="WALLMASTER_LIMB_MIDDLE_FINGER_MIDDLE" Offset="0x8EE4" />
<Limb Name="gWallmasterMiddleFingerDistalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL" Offset="0x8EF0" />
<Limb Name="gWallmasterWristRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_WRIST_ROOT" Offset="0x8EFC" />
<Limb Name="gWallmasterWristLimb" Type="Standard" EnumName="WALLMASTER_LIMB_WRIST" Offset="0x8F08" />
<Limb Name="gWallmasterThumbRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_THUMB_ROOT" Offset="0x8F14" />
<Limb Name="gWallmasterThumbProximalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_THUMB_PROXIMAL" Offset="0x8F20" />
<Limb Name="gWallmasterThumbDistalRootLimb" Type="Standard" EnumName="WALLMASTER_LIMB_THUMB_DISTAL_ROOT" Offset="0x8F2C" />
<Limb Name="gWallmasterThumbMiddleLimb" Type="Standard" EnumName="WALLMASTER_LIMB_THUMB_MIDDLE" Offset="0x8F38" />
<Limb Name="gWallmasterThumbDistalLimb" Type="Standard" EnumName="WALLMASTER_LIMB_THUMB_DISTAL" Offset="0x8F44" />
<!-- Wallmaster/Floormaster Skeleton-->
<Skeleton Name="gWallmasterSkel" Type="Flex" LimbType="Standard" LimbNone="WALLMASTER_LIMB_NONE" LimbMax="WALLMASTER_LIMB_MAX" EnumName="WallmasterLimbs" Offset="0x8FB0" />
<Animation Name="gWallmasterStopWalkAnim" Offset="0x9244" /> <!-- Original name is "wm_move_wait" -->
<Animation Name="gWallmasterHoverAnim" Offset="0x9520" /> <!-- Original name is "wm_success" -->
<Animation Name="gWallmasterIdleAnim" Offset="0x9DB0" /> <!-- Original name is "wm_wait" -->
<Animation Name="gWallmasterStandUpAnim" Offset="0xA054" /> <!-- Original name is "wm_wait_move" -->
</File>
</Root>
+1 -2
View File
@@ -800,8 +800,7 @@ beginseg
name "ovl_En_Wallmas"
compress
include "build/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.o"
include "build/data/ovl_En_Wallmas/ovl_En_Wallmas.data.o"
include "build/data/ovl_En_Wallmas/ovl_En_Wallmas.reloc.o"
include "build/src/overlays/actors/ovl_En_Wallmas/ovl_En_Wallmas_reloc.o"
endseg
beginseg
@@ -5,7 +5,6 @@
*/
#include "z_en_floormas.h"
#include "objects/object_wallmaster/object_wallmaster.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400)
@@ -154,8 +153,8 @@ void EnFloormas_Init(Actor* thisx, GlobalContext* globalCtx2) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 50.0f);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_wallmaster_Skel_008FB0, &object_wallmaster_Anim_009DB0,
this->jointTable, this->morphTable, 25);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gWallmasterSkel, &gWallmasterIdleAnim, this->jointTable,
this->morphTable, WALLMASTER_LIMB_MAX);
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
@@ -259,7 +258,7 @@ void func_808D0A48(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D0B08(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_009DB0);
Animation_PlayOnce(&this->skelAnime, &gWallmasterIdleAnim);
this->actor.speedXZ = 0.0f;
this->actionFunc = func_808D0B50;
}
@@ -278,7 +277,7 @@ void func_808D0B50(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D0C14(EnFloormas* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_wallmaster_Anim_00A054, -3.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gWallmasterStandUpAnim, -3.0f);
this->actionFunc = func_808D0C58;
}
@@ -296,7 +295,7 @@ void func_808D0C58(EnFloormas* this, GlobalContext* globalCtx) {
void func_808D0CE4(EnFloormas* this) {
if (this->actionFunc != func_808D0F80) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &object_wallmaster_Anim_0041F4, 1.5f);
Animation_PlayLoopSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 1.5f);
} else {
this->skelAnime.playSpeed = 1.5f;
}
@@ -334,7 +333,7 @@ void func_808D0D70(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D0ECC(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_009244);
Animation_PlayOnce(&this->skelAnime, &gWallmasterStopWalkAnim);
this->actor.speedXZ = 0.0f;
this->actionFunc = func_808D0F14;
}
@@ -373,10 +372,10 @@ void func_808D108C(EnFloormas* this) {
this->actor.speedXZ = 0.0f;
if (sp36 > 0) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_wallmaster_Anim_002158, -3.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gFloormasterTurnAnim, -3.0f);
} else {
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_002158, -1.0f,
Animation_GetLastFrame(&object_wallmaster_Anim_002158.common), 0.0f, 2, -3.0f);
Animation_Change(&this->skelAnime, &gFloormasterTurnAnim, -1.0f, Animation_GetLastFrame(&gFloormasterTurnAnim),
0.0f, ANIMMODE_ONCE, -3.0f);
}
if (this->actor.scale.x > 0.009f) {
@@ -418,8 +417,8 @@ void func_808D11BC(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D1380(EnFloormas* this, GlobalContext* globalCtx) {
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_009520, 3.0f, 0.0f,
Animation_GetLastFrame(&object_wallmaster_Anim_009520.common), 2, -3.0f);
Animation_Change(&this->skelAnime, &gWallmasterHoverAnim, 3.0f, 0.0f, Animation_GetLastFrame(&gWallmasterHoverAnim),
ANIMMODE_ONCE, -3.0f);
this->actor.speedXZ = 0.0f;
this->actor.gravity = 0.0f;
func_808D08D0(this);
@@ -492,7 +491,7 @@ void func_808D1650(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D1740(EnFloormas* this) {
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_0019CC, 1.0f, 41.0f, 42.0f, 2, 5.0f);
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 41.0f, 42.0f, ANIMMODE_ONCE, 5.0f);
if ((this->actor.speedXZ < 0.0f) || (this->actionFunc != func_808D1650)) {
this->unk_18E = 30;
} else {
@@ -538,7 +537,7 @@ void func_808D17EC(EnFloormas* this, GlobalContext* globalCtx) {
if ((this->unk_18E == 0) && (sp24 != 0)) {
if (this->skelAnime.endFrame < 45.0f) {
this->skelAnime.endFrame = Animation_GetLastFrame(&object_wallmaster_Anim_0019CC.common);
this->skelAnime.endFrame = Animation_GetLastFrame(&gWallmasterJumpAnim);
} else if (this->actor.params == ENFLOORMAS_GET_7FFF_40) {
func_808D2700(this);
} else {
@@ -569,8 +568,8 @@ void func_808D19D4(EnFloormas* this) {
this->actor.shape.rot.y = parent->shape.rot.y + 0x5555;
this->actor.world.pos = parent->world.pos;
this->actor.params = ENFLOORMAS_GET_7FFF_10;
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_0019CC, 1.0f, 41.0f,
Animation_GetLastFrame(&object_wallmaster_Anim_0019CC.common), 2, 0.0f);
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 41.0f, Animation_GetLastFrame(&gWallmasterJumpAnim),
ANIMMODE_ONCE, 0.0f);
this->collider.dim.radius = sCylinderInit.dim.radius * 0.6f;
this->collider.dim.height = sCylinderInit.dim.height * 0.6f;
this->actor.flags &= ~ACTOR_FLAG_400;
@@ -596,7 +595,7 @@ void func_808D1B44(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D1BCC(EnFloormas* this) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &object_wallmaster_Anim_0041F4, 4.5f);
Animation_PlayLoopSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 4.5f);
this->actor.speedXZ = 5.0f;
this->actionFunc = func_808D1C1C;
}
@@ -623,7 +622,7 @@ void func_808D1C1C(EnFloormas* this, GlobalContext* globalCtx) {
void func_808D1D0C(EnFloormas* this) {
if (this->actionFunc != func_808D1C1C) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &object_wallmaster_Anim_0041F4, 4.5f);
Animation_PlayLoopSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 4.5f);
}
this->actor.speedXZ = 5.0f;
this->actionFunc = func_808D1D6C;
@@ -686,7 +685,7 @@ void func_808D1F7C(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D1FD4(EnFloormas* this) {
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_0019CC, 2.0f, 0.0f, 41.0f, 2, 0.0f);
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 2.0f, 0.0f, 41.0f, ANIMMODE_ONCE, 0.0f);
this->actor.speedXZ = 0.0f;
this->actionFunc = func_808D2040;
}
@@ -716,7 +715,7 @@ void func_808D217C(EnFloormas* this, Player* player) {
Vec3f* ptr;
u8 playerForm;
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_0019CC, 1.0f, 36.0f, 45.0f, 2, -3.0f);
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 36.0f, 45.0f, ANIMMODE_ONCE, -3.0f);
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.speedXZ = 0.0f;
this->actor.velocity.y = 0.0f;
@@ -772,7 +771,7 @@ void func_808D22C8(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D2484(EnFloormas* this) {
Animation_Change(&this->skelAnime, &object_wallmaster_Anim_0019CC, 2.0f, 0.0f, 41.0f, 2, 0.0f);
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 2.0f, 0.0f, 41.0f, ANIMMODE_ONCE, 0.0f);
this->actor.speedXZ = 0.0f;
this->actionFunc = func_808D24F0;
}
@@ -816,7 +815,7 @@ void func_808D24F0(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D2700(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_009DB0);
Animation_PlayOnce(&this->skelAnime, &gWallmasterIdleAnim);
this->unk_18E = 0;
this->unk_194 = 1500;
this->actor.params = ENFLOORMAS_GET_7FFF_40;
@@ -881,10 +880,10 @@ void func_808D2764(EnFloormas* this, GlobalContext* globalCtx) {
this->actor.colChkInfo.health = sColChkInfoInit.health;
func_808D0C14(this);
} else if (this->unk_18E == 0) {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_0039B0);
Animation_PlayOnce(&this->skelAnime, &gFloormasterTapFingerAnim);
this->unk_18E = 1;
} else {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_009DB0);
Animation_PlayOnce(&this->skelAnime, &gWallmasterIdleAnim);
this->unk_18E = 0;
}
}
@@ -924,7 +923,7 @@ void func_808D2AF4(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D2B18(EnFloormas* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_wallmaster_Anim_000590, -3.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gWallmasterDamageAnim, -3.0f);
func_800BE504(&this->actor, &this->collider);
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
this->actor.speedXZ = 5.0f;
@@ -967,7 +966,7 @@ void func_808D2C08(EnFloormas* this, GlobalContext* globalCtx) {
}
void func_808D2CDC(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &object_wallmaster_Anim_000EA4);
Animation_PlayOnce(&this->skelAnime, &gWallmasterRecoverFromDamageAnim);
this->actor.speedXZ = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -1151,9 +1150,10 @@ s32 EnFloormas_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** d
Actor* thisx, Gfx** gfx) {
EnFloormas* this = THIS;
if (limbIndex == 1) {
if (limbIndex == WALLMASTER_LIMB_ROOT) {
pos->z += this->unk_192;
}
return false;
}
@@ -1165,13 +1165,10 @@ void EnFloormas_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLis
Matrix_GetStateTranslation(&this->limbPos[D_808D393C[limbIndex]]);
}
if (limbIndex == 19) {
if (limbIndex == WALLMASTER_LIMB_WRIST) {
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->limbPos[9]);
Matrix_GetStateTranslationAndScaledX(-1000.0f, &this->limbPos[10]);
return;
}
if (limbIndex == 2) {
} else if (limbIndex == WALLMASTER_LIMB_HAND) {
Matrix_StatePush();
Matrix_InsertTranslation(1600.0f, -700.0f, -1700.0f, MTXMODE_APPLY);
Matrix_InsertYRotation_f(M_PI / 3, MTXMODE_APPLY);
@@ -1179,7 +1176,7 @@ void EnFloormas_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLis
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
gSPMatrix((*gfx)++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList((*gfx)++, object_wallmaster_DL_008688);
gSPDisplayList((*gfx)++, gWallmasterLittleFingerDL);
Matrix_StatePop();
}
@@ -2,6 +2,7 @@
#define Z_EN_FLOORMAS_H
#include "global.h"
#include "objects/object_wallmaster/object_wallmaster.h"
struct EnFloormas;
@@ -26,8 +27,8 @@ typedef struct EnFloormas {
/* 0x0190 */ s16 unk_190;
/* 0x0192 */ s16 unk_192;
/* 0x0194 */ s16 unk_194;
/* 0x0196 */ Vec3s jointTable[25];
/* 0x022C */ Vec3s morphTable[25];
/* 0x0196 */ Vec3s jointTable[WALLMASTER_LIMB_MAX];
/* 0x022C */ Vec3s morphTable[WALLMASTER_LIMB_MAX];
/* 0x02C4 */ f32 drawDmgEffAlpha;
/* 0x02C8 */ f32 drawDmgEffScale;
/* 0x02CC */ f32 drawDmgEffFrozenSteamScale;
+3 -3
View File
@@ -186,10 +186,10 @@ void EnPr2_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
if (this->actor.parent != NULL) {
Actor* parent = this->actor.parent;
EnEncount1* encount1 = (EnEncount1*)this->actor.parent;
if ((parent->update != NULL) && (((EnEncount1*)parent)->unk_14E > 0)) {
((EnEncount1*)parent)->unk_14E--;
if ((encount1->actor.update != NULL) && (encount1->unk_14E > 0)) {
encount1->unk_14E--;
}
}
}
File diff suppressed because it is too large Load Diff
@@ -2,16 +2,54 @@
#define Z_EN_WALLMAS_H
#include "global.h"
#include "objects/object_wallmaster/object_wallmaster.h"
#define WALLMASTER_GET_TYPE(thisx) ((thisx)->params)
#define WALLMASTER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF)
#define WALLMASTER_IS_FROZEN(thisx) ((thisx)->params & 0x80)
/**
* This type determines under what conditions the Wallmaster will drop from the ceiling.
* - WALLMASTER_TYPE_TIMER_ONLY: These Wallmasters don't check for anything to determine
* whether or not to drop; they just set a 130-frame timer and drop once it reaches 0.
* - WALLMASTER_TYPE_PROXIMITY: These Wallmasters ensure that the player in within a certain
* distance of their current position (as dictated by detectionRadius); once the player
* enters that range, they set a 130-frame timer and drop once it reaches 0.
* - WALLMASTER_TYPE_FLAG: These Wallmasters wait for a certain switch flag to be activated,
* as specified in their params. Once this switch is activated, they set an 81-frame timer
* and drop once it reaches 0.
*
* While in the "waiting to drop" state, all Wallmaster variations can be forced to reset the
* timer to 130 frames if the player enters certain states (e.g., if the player is no longer
* touching the ground). Additionally, WALLMASTER_TYPE_PROXIMITY-type Wallmasters will reset
* the timer to 130 frames if the player strays too far from the Wallmaster's current position.
*/
typedef enum {
/* 0x00 */ WALLMASTER_TYPE_TIMER_ONLY,
/* 0x01 */ WALLMASTER_TYPE_PROXIMITY,
/* 0x02 */ WALLMASTER_TYPE_FLAG
} WallmasterType;
struct EnWallmas;
typedef void (*EnWallmasActionFunc)(struct EnWallmas*, GlobalContext*);
typedef struct EnWallmas {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x44];
/* 0x0188 */ EnWallmasActionFunc actionFunc;
/* 0x018C */ char unk_18C[0x218];
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnWallmasActionFunc actionFunc;
/* 0x18C */ u8 drawDmgEffType;
/* 0x18E */ s16 timer;
/* 0x190 */ s16 switchFlag;
/* 0x192 */ Vec3s jointTable[WALLMASTER_LIMB_MAX];
/* 0x228 */ Vec3s morphTable[WALLMASTER_LIMB_MAX];
/* 0x2C0 */ f32 yTarget;
/* 0x2C4 */ f32 detectionRadius;
/* 0x2C8 */ f32 drawDmgEffAlpha;
/* 0x2CC */ f32 drawDmgEffScale;
/* 0x2D0 */ f32 drawDmgEffFrozenSteamScale;
/* 0x2D4 */ Vec3f limbPos[11];
/* 0x358 */ ColliderCylinder collider;
} EnWallmas; // size = 0x3A4
extern const ActorInit En_Wallmas_InitVars;
+33 -33
View File
@@ -5108,40 +5108,40 @@
0x80872BC0:("func_80872BC0",),
0x80874810:("EnWallmas_Init",),
0x80874A28:("EnWallmas_Destroy",),
0x80874A88:("func_80874A88",),
0x80874B04:("func_80874B04",),
0x80874B88:("func_80874B88",),
0x80874BE4:("func_80874BE4",),
0x80874D1C:("func_80874D1C",),
0x80874DE8:("func_80874DE8",),
0x80874F14:("func_80874F14",),
0x80874FD8:("func_80874FD8",),
0x80875014:("func_80875014",),
0x80875054:("func_80875054",),
0x808750B8:("func_808750B8",),
0x80875108:("func_80875108",),
0x808751C4:("func_808751C4",),
0x8087520C:("func_8087520C",),
0x80875248:("func_80875248",),
0x808752CC:("func_808752CC",),
0x808753F0:("func_808753F0",),
0x80875484:("func_80875484",),
0x80875518:("func_80875518",),
0x8087556C:("func_8087556C",),
0x808755A8:("func_808755A8",),
0x80875638:("func_80875638",),
0x808756AC:("func_808756AC",),
0x8087571C:("func_8087571C",),
0x808758C8:("func_808758C8",),
0x80875910:("func_80875910",),
0x8087596C:("func_8087596C",),
0x808759B8:("func_808759B8",),
0x80875A0C:("func_80875A0C",),
0x80875A74:("func_80875A74",),
0x80874A88:("EnWallmas_Freeze",),
0x80874B04:("EnWallmas_ThawIfFrozen",),
0x80874B88:("EnWallmas_TimerInit",),
0x80874BE4:("EnWallmas_WaitToDrop",),
0x80874D1C:("EnWallmas_SetupDrop",),
0x80874DE8:("EnWallmas_Drop",),
0x80874F14:("EnWallmas_SetupLand",),
0x80874FD8:("EnWallmas_Land",),
0x80875014:("EnWallmas_SetupStand",),
0x80875054:("EnWallmas_Stand",),
0x808750B8:("EnWallmas_SetupWalk",),
0x80875108:("EnWallmas_Walk",),
0x808751C4:("EnWallmas_SetupJumpToCeiling",),
0x8087520C:("EnWallmas_JumpToCeiling",),
0x80875248:("EnWallmas_SetupReturnToCeiling",),
0x808752CC:("EnWallmas_ReturnToCeiling",),
0x808753F0:("EnWallmas_SetupDamage",),
0x80875484:("EnWallmas_Damage",),
0x80875518:("EnWallmas_SetupCooldown",),
0x8087556C:("EnWallmas_Cooldown",),
0x808755A8:("EnWallmas_SetupDie",),
0x80875638:("EnWallmas_Die",),
0x808756AC:("EnWallmas_SetupTakePlayer",),
0x8087571C:("EnWallmas_TakePlayer",),
0x808758C8:("EnWallmas_ProximityOrSwitchInit",),
0x80875910:("EnWallmas_WaitForProximity",),
0x8087596C:("EnWallmas_WaitForSwitchFlag",),
0x808759B8:("EnWallmas_SetupStun",),
0x80875A0C:("EnWallmas_Stun",),
0x80875A74:("EnWallmas_Update",),
0x80875CF4:("EnWallmas_Update",),
0x80875F04:("func_80875F04",),
0x808760A4:("func_808760A4",),
0x80876118:("func_80876118",),
0x80875F04:("EnWallmas_DrawShadow",),
0x808760A4:("EnWallmas_OverrideLimbDraw",),
0x80876118:("EnWallmas_PostLimbDraw",),
0x80876268:("EnWallmas_Draw",),
0x80876670:("EnDodongo_Init",),
0x808768D0:("EnDodongo_Destroy",),
+1 -4
View File
@@ -5801,10 +5801,7 @@
0x808763AC:("D_808763AC","UNK_TYPE1","",0x1),
0x808763B4:("D_808763B4","UNK_TYPE1","",0x1),
0x808763C0:("D_808763C0","UNK_TYPE1","",0x1),
0x808763D4:("D_808763D4","UNK_TYPE1","",0x1),
0x808763D6:("D_808763D6","UNK_TYPE1","",0x1),
0x808763E6:("D_808763E6","UNK_TYPE1","",0x1),
0x808763E7:("D_808763E7","UNK_TYPE1","",0x1),
0x808763D4:("D_808763D4","s8","[25]",0x25),
0x808763F0:("D_808763F0","f32","",0x4),
0x808763F4:("D_808763F4","f32","",0x4),
0x808763F8:("D_808763F8","f32","",0x4),
-14
View File
@@ -1591,20 +1591,6 @@ D_0601A830 = 0x0601A830;
D_060014C8 = 0x060014C8;
D_06001C38 = 0x06001C38;
// ovl_En_Wallmas
D_06000590 = 0x06000590;
D_06000EA4 = 0x06000EA4;
D_060019CC = 0x060019CC;
D_0600299C = 0x0600299C;
D_060041F4 = 0x060041F4;
D_06008688 = 0x06008688;
D_06008FB0 = 0x06008FB0;
D_06009244 = 0x06009244;
D_06009520 = 0x06009520;
D_06009DB0 = 0x06009DB0;
D_0600A054 = 0x0600A054;
// ovl_En_Wdhand
D_060000F4 = 0x060000F4;