mirror of https://github.com/zeldaret/mm.git
Ovl_En_Cne_01 Ok and Documented (#641)
* Decomp and document Cne01 * Document object_cne * split enhy header from z64 * Cleanup * Actually include new z_en_hy header * Actor flags * Add header to object_cne * screen defines * Useage of ENHY_LIMB_MAX
This commit is contained in:
parent
7ba82882b2
commit
0625803c17
|
@ -1,47 +1,54 @@
|
||||||
<Root>
|
<Root>
|
||||||
|
<!-- Object for Unusued Hyrule Market NPC -->
|
||||||
<File Name="object_cne" Segment="6">
|
<File Name="object_cne" Segment="6">
|
||||||
<!-- This file has unaligned textures -->
|
<!-- The textures used by these limbs aren't 64-bit aligned -->
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000000" Type="Standard" Offset="0x0" /> -->
|
<Limb Name="gCnePelvisLimb" LimbType="Standard" EnumName="CNE_LIMB_PELVIS" Offset="0x0"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_00000C" Type="Standard" Offset="0xC" /> -->
|
<Limb Name="gCneLeftThighLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_THIGH" Offset="0xC"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000018" Type="Standard" Offset="0x18" /> -->
|
<Limb Name="gCneLeftShinLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_SHIN" Offset="0x18"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000024" Type="Standard" Offset="0x24" /> -->
|
<Limb Name="gCneLeftFootLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_FOOT" Offset="0x24"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000030" Type="Standard" Offset="0x30" /> -->
|
<Limb Name="gCneRightThighLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_THIGH" Offset="0x30"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_00003C" Type="Standard" Offset="0x3C" /> -->
|
<Limb Name="gCneRightShinLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_SHIN" Offset="0x3C"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000048" Type="Standard" Offset="0x48" /> -->
|
<Limb Name="gCneRightFootLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_FOOT" Offset="0x48"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000054" Type="Standard" Offset="0x54" /> -->
|
<Limb Name="gCneTorsoLimb" LimbType="Standard" EnumName="CNE_LIMB_TORSO" Offset="0x54"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000060" Type="Standard" Offset="0x60" /> -->
|
<Limb Name="gCneLeftUpperArmLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_UPPER_ARM" Offset="0x60"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_00006C" Type="Standard" Offset="0x6C" /> -->
|
<Limb Name="gCneLeftForearmLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_FOREARM" Offset="0x6C"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000078" Type="Standard" Offset="0x78" /> -->
|
<Limb Name="gCneLeftHandLimb" LimbType="Standard" EnumName="CNE_LIMB_LEFT_HAND" Offset="0x78"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000084" Type="Standard" Offset="0x84" /> -->
|
<Limb Name="gCneRightUpperArmLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_UPPER_ARM" Offset="0x84"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_000090" Type="Standard" Offset="0x90" /> -->
|
<Limb Name="gCneRightForearmLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_FOREARM" Offset="0x90"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_00009C" Type="Standard" Offset="0x9C" /> -->
|
<Limb Name="gCneRightHandLimb" LimbType="Standard" EnumName="CNE_LIMB_RIGHT_HAND" Offset="0x9C"/>
|
||||||
<!-- <Limb Name="object_cne_Standardlimb_0000A8" Type="Standard" Offset="0xA8" /> -->
|
<Limb Name="gCneHeadLimb" LimbType="Standard" EnumName="CNE_LIMB_HEAD" Offset="0xA8"/>
|
||||||
<!-- <Skeleton Name="object_cne_Skel_0000F0" Type="Flex" LimbType="Standard" Offset="0xF0" /> -->
|
|
||||||
<!-- <Texture Name="object_cne_TLUT_0000FC" OutName="tlut_0000FC" Format="rgba16" Width="16" Height="16" Offset="0xFC" /> -->
|
<Skeleton Name="gCneSkel" Type="Flex" LimbType="Standard" LimbNone="CNE_LIMB_NONE" LimbMax="CNE_LIMB_MAX" EnumName="CneLimbs" Offset="0xF0"/>
|
||||||
<!-- <Texture Name="object_cne_Tex_0002FC" OutName="tex_0002FC" Format="ci8" Width="8" Height="8" Offset="0x2FC" /> -->
|
|
||||||
<!-- <Texture Name="object_cne_Tex_00033C" OutName="tex_00033C" Format="ci8" Width="8" Height="8" Offset="0x33C" /> -->
|
<!-- 32-bit aligned textures. -->
|
||||||
<!-- <Texture Name="object_cne_Tex_00037C" OutName="tex_00037C" Format="ci8" Width="8" Height="8" Offset="0x37C" /> -->
|
<Texture Name="gCneTLUT" OutName="cne_tlut" Format="rgba16" Width="16" Height="16" Offset="0xFC"/>
|
||||||
<!-- <Texture Name="object_cne_Tex_0003BC" OutName="tex_0003BC" Format="ci8" Width="8" Height="8" Offset="0x3BC" /> -->
|
<Texture Name="gCneSkinTex" OutName="cne_skin" Format="ci8" Width="8" Height="8" Offset="0x2FC"/>
|
||||||
<!-- <Texture Name="object_cne_Tex_0003FC" OutName="tex_0003FC" Format="ci8" Width="8" Height="16" Offset="0x3FC" /> -->
|
<Texture Name="gCneBrownHairTex" OutName="cne_brown_hair" Format="ci8" Width="8" Height="8" Offset="0x33C"/>
|
||||||
<!-- <Texture Name="object_cne_Tex_00047C" OutName="tex_00047C" Format="i8" Width="8" Height="8" Offset="0x47C" /> -->
|
<Texture Name="gCneHandTex" OutName="cne_hand_tex" Format="ci8" Width="8" Height="8" Offset="0x37C"/>
|
||||||
<!-- <Texture Name="object_cne_Tex_0004BC" OutName="tex_0004BC" Format="ci8" Width="8" Height="8" Offset="0x4BC" /> -->
|
<Texture Name="gCneBrownHairSkinTex" OutName="cne_brown_hair_skin" Format="ci8" Width="8" Height="8" Offset="0x3BC"/>
|
||||||
<!-- <DList Name="object_cne_DL_001300" Offset="0x1300" /> -->
|
<Texture Name="gCneBrownHairFaceTex" OutName="cne_brown_hair_face" Format="ci8" Width="8" Height="16" Offset="0x3FC"/>
|
||||||
<!-- <DList Name="object_cne_DL_001608" Offset="0x1608" /> -->
|
<Texture Name="gCneDressTex" OutName="cne_dress" Format="i8" Width="8" Height="8" Offset="0x47C"/>
|
||||||
<!-- <DList Name="object_cne_DL_0016E8" Offset="0x16E8" /> -->
|
<Texture Name="gCneDressNeckTex" OutName="cne_dress_neck" Format="ci8" Width="8" Height="8" Offset="0x4BC"/>
|
||||||
<!-- <DList Name="object_cne_DL_001808" Offset="0x1808" /> -->
|
|
||||||
<!-- <DList Name="object_cne_DL_0018C8" Offset="0x18C8" /> -->
|
<DList Name="gCneHeadBrownHairDL" Offset="0x1300"/>
|
||||||
<!-- <DList Name="object_cne_DL_0019A8" Offset="0x19A8" /> -->
|
<DList Name="gCneRightHandDL" Offset="0x1608"/>
|
||||||
<!-- <DList Name="object_cne_DL_001AC8" Offset="0x1AC8" /> -->
|
<DList Name="gCneRightForearmDL" Offset="0x16E8"/>
|
||||||
<!-- <DList Name="object_cne_DL_001B88" Offset="0x1B88" /> -->
|
<DList Name="gCneRightUpperArmDL" Offset="0x1808"/>
|
||||||
<!-- <DList Name="object_cne_DL_001E50" Offset="0x1E50" /> -->
|
<DList Name="gCneLeftHandDL" Offset="0x18C8"/>
|
||||||
<!-- <DList Name="object_cne_DL_001F18" Offset="0x1F18" /> -->
|
<DList Name="gCneLeftForearmDL" Offset="0x19A8"/>
|
||||||
<!-- <DList Name="object_cne_DL_001FE0" Offset="0x1FE0" /> -->
|
<DList Name="gCneLeftUpperArmDL" Offset="0x1AC8"/>
|
||||||
<!-- <DList Name="object_cne_DL_0020A8" Offset="0x20A8" /> -->
|
<DList Name="gCneTorsoDL" Offset="0x1B88"/>
|
||||||
<!-- <DList Name="object_cne_DL_002170" Offset="0x2170" /> -->
|
<DList Name="gCneRightFootDL" Offset="0x1E50"/>
|
||||||
<!-- <DList Name="object_cne_DL_002238" Offset="0x2238" /> -->
|
<DList Name="gCneRightShinDL" Offset="0x1F18"/>
|
||||||
<!-- <DList Name="object_cne_DL_002300" Offset="0x2300" /> -->
|
<DList Name="gCneRightThighDL" Offset="0x1FE0"/>
|
||||||
<Texture Name="object_cne_Tex_0023D0" OutName="tex_0023D0" Format="rgba16" Width="8" Height="16" Offset="0x23D0" />
|
<DList Name="gCneLeftFootDL" Offset="0x20A8"/>
|
||||||
<Texture Name="object_cne_Tex_0024D0" OutName="tex_0024D0" Format="rgba16" Width="8" Height="8" Offset="0x24D0" />
|
<DList Name="gCneLeftShinDL" Offset="0x2170"/>
|
||||||
<DList Name="object_cne_DL_002860" Offset="0x2860" />
|
<DList Name="gCneLeftThighDL" Offset="0x2238"/>
|
||||||
|
<DList Name="gCnePelvisDL" Offset="0x2300"/>
|
||||||
|
|
||||||
|
<Texture Name="gCneOrangeHairFaceTex" OutName="cne_orange_hair_face" Format="rgba16" Width="8" Height="16" Offset="0x23D0"/>
|
||||||
|
<Texture Name="gCneOrangeHairSkinTex" OutName="cne_orange_hair_skin" Format="rgba16" Width="8" Height="8" Offset="0x24D0"/>
|
||||||
|
|
||||||
|
<DList Name="gCneHeadOrangeHairDL" Offset="0x2860"/>
|
||||||
</File>
|
</File>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -1478,21 +1478,7 @@ void SoundSource_UpdateAll(GlobalContext* globalCtx);
|
||||||
void SoundSource_PlaySfxAtFixedWorldPos(GlobalContext* globalCtx, Vec3f* worldPos, u32 duration, u16 sfxId);
|
void SoundSource_PlaySfxAtFixedWorldPos(GlobalContext* globalCtx, Vec3f* worldPos, u32 duration, u16 sfxId);
|
||||||
void SoundSource_PlaySfxEachFrameAtFixedWorldPos(GlobalContext* globalCtx, Vec3f* worldPos, u32 duration, u16 sfxId);
|
void SoundSource_PlaySfxEachFrameAtFixedWorldPos(GlobalContext* globalCtx, Vec3f* worldPos, u32 duration, u16 sfxId);
|
||||||
u16 ElfMessage_GetFirstCycleHint(GlobalContext* globalCtx);
|
u16 ElfMessage_GetFirstCycleHint(GlobalContext* globalCtx);
|
||||||
s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex);
|
|
||||||
Actor* EnHy_FindNearestDoor(Actor* actor, GlobalContext* globalCtx);
|
|
||||||
void EnHy_ChangeObjectAndAnim(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex);
|
|
||||||
s32 EnHy_UpdateSkelAnime(EnHy* enHy, GlobalContext* globalCtx);
|
|
||||||
void EnHy_Blink(EnHy* enHy, s32 arg1);
|
|
||||||
s32 EnHy_Init(EnHy* enHy, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex);
|
|
||||||
void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, Actor* arg2, s16 arg3, s16 arg4);
|
|
||||||
s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5);
|
|
||||||
s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3);
|
|
||||||
s32 EnHy_SetPointFowards(EnHy* enHy, GlobalContext* globalCtx, f32 gravity, s16 animIndex);
|
|
||||||
s32 EnHy_SetPointBackwards(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex);
|
|
||||||
s32 EnHy_MoveForwards(EnHy* enHy, f32 arg1);
|
|
||||||
s32 EnHy_MoveBackwards(EnHy* enHy, f32 arg1);
|
|
||||||
void EnHy_UpdateCollider(EnHy* enHy, GlobalContext* globalCtx);
|
|
||||||
s32 EnHy_PlayWalkingSound(EnHy* enHy, GlobalContext* globalCtx, f32 arg2);
|
|
||||||
u16 Text_GetFaceReaction(GlobalContext* globalCtx, u32 reactionSet);
|
u16 Text_GetFaceReaction(GlobalContext* globalCtx, u32 reactionSet);
|
||||||
void EnvFlags_UnsetAll(GlobalContext* globalCtx);
|
void EnvFlags_UnsetAll(GlobalContext* globalCtx);
|
||||||
void EnvFlags_Set(GlobalContext* globalCtx, s16 flag);
|
void EnvFlags_Set(GlobalContext* globalCtx, s16 flag);
|
||||||
|
|
|
@ -881,9 +881,6 @@ extern s801BB170 D_801BB170[118];
|
||||||
// extern UNK_TYPE1 D_801BC210;
|
// extern UNK_TYPE1 D_801BC210;
|
||||||
extern Gfx D_801BC240[9];
|
extern Gfx D_801BC240[9];
|
||||||
extern Gfx D_801BC288[3];
|
extern Gfx D_801BC288[3];
|
||||||
// extern UNK_TYPE1 D_801BC3F0;
|
|
||||||
// extern UNK_TYPE1 D_801BC400;
|
|
||||||
// extern UNK_TYPE1 D_801BC410;
|
|
||||||
// extern UNK_TYPE1 D_801BC41E;
|
// extern UNK_TYPE1 D_801BC41E;
|
||||||
extern ActorCutscene actorCutscenesGlobalCutscenes[8];
|
extern ActorCutscene actorCutscenesGlobalCutscenes[8];
|
||||||
extern s16 actorCutsceneCurrent;
|
extern s16 actorCutsceneCurrent;
|
||||||
|
|
|
@ -1373,30 +1373,6 @@ typedef struct {
|
||||||
/* 0x24 */ s16 unk_24;
|
/* 0x24 */ s16 unk_24;
|
||||||
} struct_800BD888_arg1; // size = 0x28
|
} struct_800BD888_arg1; // size = 0x28
|
||||||
|
|
||||||
typedef struct EnHy {
|
|
||||||
/* 0x000 */ Actor actor;
|
|
||||||
/* 0x144 */ UNK_TYPE1 unk_144[0x8];
|
|
||||||
/* 0x14C */ SkelAnime skelAnime;
|
|
||||||
/* 0x190 */ s8 unk190;
|
|
||||||
/* 0x191 */ s8 unk191;
|
|
||||||
/* 0x192 */ s8 unk192;
|
|
||||||
/* 0x193 */ s8 animObjIndex;
|
|
||||||
/* 0x194 */ ColliderCylinder collider;
|
|
||||||
/* 0x1E0 */ UNK_TYPE1 unk_1E0[0x4];
|
|
||||||
/* 0x1E4 */ Path* path;
|
|
||||||
/* 0x1E8 */ s16 curPoint;
|
|
||||||
/* 0x1EA */ UNK_TYPE1 unk_1EA[0x2];
|
|
||||||
/* 0x1EC */ Vec3f leftFootPos;
|
|
||||||
/* 0x1F8 */ Vec3f rightFootPos;
|
|
||||||
/* 0x204 */ u8 isLeftFootOnGround;
|
|
||||||
/* 0x205 */ u8 isRightFootOnGround;
|
|
||||||
/* 0x206 */ Vec3s jointTable[16];
|
|
||||||
/* 0x266 */ Vec3s morphTable[16];
|
|
||||||
/* 0x2C6 */ UNK_TYPE1 unk_2C6[0x120];
|
|
||||||
/* 0x3E6 */ s16 eyeTexIndex;
|
|
||||||
/* 0x3E8 */ s16 blinkTimer;
|
|
||||||
} EnHy;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* 0x0 */ u8 unk0;
|
/* 0x0 */ u8 unk0;
|
||||||
/* 0x4 */ s32 unk4;
|
/* 0x4 */ s32 unk4;
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
#ifndef Z_EN_HY_H
|
||||||
|
#define Z_EN_HY_H
|
||||||
|
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
struct EnHy;
|
||||||
|
|
||||||
|
#define ENHY_LIMB_MAX 16
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0 */ ENHY_ANIMATION_AOB_0,
|
||||||
|
/* 1 */ ENHY_ANIMATION_BOJ_1,
|
||||||
|
/* 2 */ ENHY_ANIMATION_BOJ_2,
|
||||||
|
/* 3 */ ENHY_ANIMATION_BOJ_3,
|
||||||
|
/* 4 */ ENHY_ANIMATION_BOJ_4,
|
||||||
|
/* 5 */ ENHY_ANIMATION_BOJ_5,
|
||||||
|
/* 6 */ ENHY_ANIMATION_BBA_6,
|
||||||
|
/* 7 */ ENHY_ANIMATION_BJI_7,
|
||||||
|
/* 8 */ ENHY_ANIMATION_BJI_8,
|
||||||
|
/* 9 */ ENHY_ANIMATION_BJI_9,
|
||||||
|
/* 10 */ ENHY_ANIMATION_BOJ_10,
|
||||||
|
/* 11 */ ENHY_ANIMATION_OS_ANIME_11,
|
||||||
|
/* 12 */ ENHY_ANIMATION_BOJ_12,
|
||||||
|
/* 13 */ ENHY_ANIMATION_BOJ_13,
|
||||||
|
/* 14 */ ENHY_ANIMATION_BOJ_14,
|
||||||
|
/* 15 */ ENHY_ANIMATION_BOJ_15,
|
||||||
|
/* 16 */ ENHY_ANIMATION_BOJ_16,
|
||||||
|
/* 17 */ ENHY_ANIMATION_BOJ_17,
|
||||||
|
/* 18 */ ENHY_ANIMATION_BOJ_18,
|
||||||
|
/* 19 */ ENHY_ANIMATION_BOJ_19,
|
||||||
|
/* 20 */ ENHY_ANIMATION_BOJ_20,
|
||||||
|
/* 21 */ ENHY_ANIMATION_MAX
|
||||||
|
} EnHyAnimation;
|
||||||
|
|
||||||
|
typedef void (*EnHyActionFunc)(struct EnHy*, GlobalContext*);
|
||||||
|
|
||||||
|
typedef struct EnHy {
|
||||||
|
/* 0x000 */ Actor actor;
|
||||||
|
/* 0x144 */ EnHyActionFunc actionFunc;
|
||||||
|
/* 0x148 */ EnHyActionFunc tmpActionFunc;
|
||||||
|
/* 0x14C */ SkelAnime skelAnime;
|
||||||
|
/* 0x190 */ s8 headObjIndex; // Limb 15
|
||||||
|
/* 0x191 */ s8 skelUpperObjIndex; // Limbs 8-14
|
||||||
|
/* 0x192 */ s8 skelLowerObjIndex; // Limbs 1-7
|
||||||
|
/* 0x193 */ s8 animObjIndex;
|
||||||
|
/* 0x194 */ ColliderCylinder collider;
|
||||||
|
/* 0x1E0 */ u16 textId;
|
||||||
|
/* 0x1E2 */ u8 waitingOnInit;
|
||||||
|
/* 0x1E3 */ u8 inMsgState3;
|
||||||
|
/* 0x1E4 */ Path* path;
|
||||||
|
/* 0x1E8 */ s16 curPoint;
|
||||||
|
/* 0x1EC */ Vec3f leftFootPos;
|
||||||
|
/* 0x1F8 */ Vec3f rightFootPos;
|
||||||
|
/* 0x204 */ u8 isLeftFootOnGround;
|
||||||
|
/* 0x205 */ u8 isRightFootOnGround;
|
||||||
|
/* 0x206 */ Vec3s jointTable[ENHY_LIMB_MAX];
|
||||||
|
/* 0x266 */ Vec3s morphTable[ENHY_LIMB_MAX];
|
||||||
|
/* 0x2C6 */ Vec3s focusTarget;
|
||||||
|
/* 0x2CC */ Vec3s headRot;
|
||||||
|
/* 0x2D2 */ Vec3s torsoRot;
|
||||||
|
/* 0x2D8 */ Vec3s tmpFocusTarget;
|
||||||
|
/* 0x2DE */ Vec3s tmpHeadRot;
|
||||||
|
/* 0x2E4 */ Vec3s tmpTorsoRot;
|
||||||
|
/* 0x2EA */ s16 limbRotTableY[16];
|
||||||
|
/* 0x30A */ s16 limbRotTableZ[16];
|
||||||
|
/* 0x32C */ Vec3f bodyPartsPos[15];
|
||||||
|
/* 0x3E0 */ UNK_TYPE1 unk_3E0[0x6];
|
||||||
|
/* 0x3E6 */ s16 eyeTexIndex;
|
||||||
|
/* 0x3E8 */ s16 blinkTimer;
|
||||||
|
} EnHy; // size = 0x3EC
|
||||||
|
|
||||||
|
extern s8 gEnHyBodyParts[];
|
||||||
|
extern s8 gEnHyBodyPartsIndex[];
|
||||||
|
extern u8 gEnHyShadowSize[];
|
||||||
|
|
||||||
|
s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex);
|
||||||
|
struct EnDoor* EnHy_FindNearestDoor(Actor* actor, GlobalContext* globalCtx);
|
||||||
|
void EnHy_ChangeObjectAndAnim(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex);
|
||||||
|
s32 EnHy_UpdateSkelAnime(EnHy* enHy, GlobalContext* globalCtx);
|
||||||
|
void EnHy_Blink(EnHy* enHy, s32 arg1);
|
||||||
|
s32 EnHy_Init(EnHy* enHy, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex);
|
||||||
|
void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, struct EnDoor* door, s16 arg3, s16 arg4);
|
||||||
|
s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5);
|
||||||
|
s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3);
|
||||||
|
s32 EnHy_SetPointFowards(EnHy* enHy, GlobalContext* globalCtx, f32 gravity, s16 animIndex);
|
||||||
|
s32 EnHy_SetPointBackwards(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex);
|
||||||
|
s32 EnHy_MoveForwards(EnHy* enHy, f32 speedTarget);
|
||||||
|
s32 EnHy_MoveBackwards(EnHy* enHy, f32 speedTarget);
|
||||||
|
void EnHy_UpdateCollider(EnHy* enHy, GlobalContext* globalCtx);
|
||||||
|
s32 EnHy_PlayWalkingSound(EnHy* enHy, GlobalContext* globalCtx, f32 distAboveThreshold);
|
||||||
|
|
||||||
|
#endif // Z_EN_HY_H
|
3
spec
3
spec
|
@ -2477,8 +2477,7 @@ beginseg
|
||||||
name "ovl_En_Cne_01"
|
name "ovl_En_Cne_01"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.o"
|
include "build/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.o"
|
||||||
include "build/data/ovl_En_Cne_01/ovl_En_Cne_01.data.o"
|
include "build/src/overlays/actors/ovl_En_Cne_01/ovl_En_Cne_01_reloc.o"
|
||||||
include "build/data/ovl_En_Cne_01/ovl_En_Cne_01.reloc.o"
|
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
beginseg
|
beginseg
|
||||||
|
|
|
@ -3,78 +3,79 @@
|
||||||
* Description: Unused System for NPCs (includes animation, door interaction, blinking, pathing, and collider helpers)
|
* Description: Unused System for NPCs (includes animation, door interaction, blinking, pathing, and collider helpers)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "global.h"
|
#include "z_en_hy.h"
|
||||||
#include "overlays/actors/ovl_En_Door/z_en_door.h"
|
#include "overlays/actors/ovl_En_Door/z_en_door.h"
|
||||||
|
#include "objects/object_aob/object_aob.h"
|
||||||
|
#include "objects/object_bba/object_bba.h"
|
||||||
|
#include "objects/object_bji/object_bji.h"
|
||||||
|
#include "objects/object_boj/object_boj.h"
|
||||||
|
#include "objects/object_os_anime/object_os_anime.h"
|
||||||
|
|
||||||
extern AnimationHeader D_0600007C;
|
ActorAnimationEntryS sAnimations[] = {
|
||||||
extern AnimationHeader D_0600066C;
|
{ &object_aob_Anim_00007C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_0600071C;
|
{ &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_060008C0;
|
{ &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
extern AnimationHeader D_06000AB0;
|
{ &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_06000FDC;
|
{ &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
extern AnimationHeader D_06001494;
|
{ &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_06001908;
|
{ &object_bba_Anim_005DC4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_06001EE0;
|
{ &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_06005DC4;
|
{ &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
extern AnimationHeader D_06005D9C;
|
{ &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_0600DED8;
|
{ &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_0600F920;
|
{ &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
extern AnimationHeader D_0600FC1C;
|
{ &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||||
extern AnimationHeader D_0600FEE4;
|
{ &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||||
extern AnimationHeader D_06010330;
|
{ &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
|
{ &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
static ActorAnimationEntryS animations[] = {
|
{ &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||||
{ &D_0600007C, 1.0f, 0, -1, 0, 0 }, { &D_06001494, 1.0f, 0, -1, 0, 0 }, { &D_06001494, 1.0f, 0, -1, 0, -8 },
|
{ &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
{ &D_06001908, 1.0f, 0, -1, 0, 0 }, { &D_06001908, 1.0f, 0, -1, 0, -8 }, { &D_060008C0, 1.0f, 0, -1, 0, 0 },
|
{ &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
{ &D_06005DC4, 1.0f, 0, -1, 0, 0 }, { &D_06000FDC, 1.0f, 0, -1, 0, 0 }, { &D_06000AB0, 1.0f, 0, -1, 0, -8 },
|
{ &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
{ &D_0600066C, 1.0f, 0, -1, 0, 0 }, { &D_0600071C, 1.0f, 0, -1, 0, 0 }, { &D_06001EE0, 1.0f, 0, -1, 0, 0 },
|
{ &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
|
||||||
{ &D_0600DED8, 1.5f, 0, -1, 2, 0 }, { &D_0600F920, 1.5f, 0, -1, 2, 0 }, { &D_0600FC1C, 1.0f, 0, -1, 0, 0 },
|
|
||||||
{ &D_0600FEE4, 1.0f, 0, -1, 0, 0 }, { &D_06010330, 1.0f, 0, -1, 0, 0 }, { &D_0600FC1C, 1.0f, 0, -1, 0, -8 },
|
|
||||||
{ &D_0600FEE4, 1.0f, 0, -1, 0, -8 }, { &D_06010330, 1.0f, 0, -1, 0, -8 }, { &D_06005D9C, 1.0f, 0, -1, 0, -8 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
s8 D_801BC3F0[] = { -1, 1, 12, 13, 14, 9, 10, 11, 0, 6, 7, 8, 3, 4, 5, 2 };
|
s8 gEnHyBodyParts[] = { -1, 1, 12, 13, 14, 9, 10, 11, 0, 6, 7, 8, 3, 4, 5, 2 };
|
||||||
|
|
||||||
s8 D_801BC400[] = { 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13, 0 };
|
s8 gEnHyBodyPartsIndex[] = { 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13 };
|
||||||
|
|
||||||
u8 D_801BC410[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
u8 gEnHyShadowSize[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
|
s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
|
||||||
s16 frameCount;
|
s16 frameCount;
|
||||||
s32 isChanged = false;
|
s32 isChanged = false;
|
||||||
|
|
||||||
if (animIndex >= 0 && animIndex <= 20) {
|
if (animIndex >= ENHY_ANIMATION_AOB_0 && animIndex < ENHY_ANIMATION_MAX) {
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
frameCount = animations[animIndex].frameCount;
|
frameCount = sAnimations[animIndex].frameCount;
|
||||||
if (frameCount < 0) {
|
if (frameCount < 0) {
|
||||||
frameCount = Animation_GetLastFrame(&animations[animIndex].animationSeg->common);
|
frameCount = Animation_GetLastFrame(&sAnimations[animIndex].animationSeg->common);
|
||||||
}
|
}
|
||||||
Animation_Change(skelAnime, animations[animIndex].animationSeg, animations[animIndex].playbackSpeed,
|
Animation_Change(skelAnime, sAnimations[animIndex].animationSeg, sAnimations[animIndex].playbackSpeed,
|
||||||
animations[animIndex].frame, frameCount, animations[animIndex].mode,
|
sAnimations[animIndex].frame, frameCount, sAnimations[animIndex].mode,
|
||||||
animations[animIndex].transitionRate);
|
sAnimations[animIndex].transitionRate);
|
||||||
}
|
}
|
||||||
return isChanged;
|
return isChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! @TODO: Return Door instance when c and h files are split
|
EnDoor* EnHy_FindNearestDoor(Actor* actor, GlobalContext* globalCtx) {
|
||||||
Actor* EnHy_FindNearestDoor(Actor* actor, GlobalContext* globalCtx) {
|
EnDoor* nearestDoor = NULL;
|
||||||
Actor* nearestDoor = NULL;
|
|
||||||
Actor* doorIter = NULL;
|
Actor* doorIter = NULL;
|
||||||
Actor* door;
|
EnDoor* door;
|
||||||
f32 dist;
|
f32 dist;
|
||||||
s32 isSetup = false;
|
s32 isSetup = false;
|
||||||
f32 minDist = 0.0f;
|
f32 minDist = 0.0f;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
doorIter = SubS_FindActor(globalCtx, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
|
doorIter = SubS_FindActor(globalCtx, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
|
||||||
door = doorIter;
|
door = (EnDoor*)doorIter;
|
||||||
dist = Actor_DistanceBetweenActors(actor, door);
|
dist = Actor_DistanceBetweenActors(actor, &door->actor);
|
||||||
if (!isSetup || (dist < minDist)) {
|
if (!isSetup || (dist < minDist)) {
|
||||||
nearestDoor = door;
|
nearestDoor = door;
|
||||||
minDist = dist;
|
minDist = dist;
|
||||||
isSetup = true;
|
isSetup = true;
|
||||||
}
|
}
|
||||||
doorIter = door->next;
|
doorIter = door->actor.next;
|
||||||
} while (doorIter != NULL);
|
} while (doorIter != NULL);
|
||||||
|
|
||||||
if (1) {}
|
if (1) {}
|
||||||
|
@ -111,27 +112,29 @@ void EnHy_Blink(EnHy* enHy, s32 eyeTexMaxIndex) {
|
||||||
s32 EnHy_Init(EnHy* enHy, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex) {
|
s32 EnHy_Init(EnHy* enHy, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex) {
|
||||||
s32 isInitialized = false;
|
s32 isInitialized = false;
|
||||||
|
|
||||||
if ((func_8013D8DC(enHy->animObjIndex, globalCtx) == 1) && (func_8013D8DC(enHy->unk190, globalCtx) == 1) &&
|
if ((func_8013D8DC(enHy->animObjIndex, globalCtx) == true) &&
|
||||||
(func_8013D8DC(enHy->unk191, globalCtx) == 1) && (func_8013D8DC(enHy->unk192, globalCtx) == 1)) {
|
(func_8013D8DC(enHy->headObjIndex, globalCtx) == true) &&
|
||||||
enHy->actor.objBankIndex = enHy->unk192;
|
(func_8013D8DC(enHy->skelUpperObjIndex, globalCtx) == true) &&
|
||||||
|
(func_8013D8DC(enHy->skelLowerObjIndex, globalCtx) == true)) {
|
||||||
|
enHy->actor.objBankIndex = enHy->skelLowerObjIndex;
|
||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f);
|
ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f);
|
||||||
gSegments[6] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[enHy->actor.objBankIndex].segment);
|
gSegments[6] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[enHy->actor.objBankIndex].segment);
|
||||||
SkelAnime_InitFlex(globalCtx, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable,
|
SkelAnime_InitFlex(globalCtx, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable,
|
||||||
16);
|
ENHY_LIMB_MAX);
|
||||||
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return isInitialized;
|
return isInitialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! @TODO: Should just take EnDoor instead of actor when c and h are split
|
void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, EnDoor* door, s16 arg3, s16 arg4) {
|
||||||
void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, Actor* door, s16 arg3, s16 arg4) {
|
|
||||||
s32 pad;
|
s32 pad;
|
||||||
s8 sp3B;
|
s8 sp3B;
|
||||||
Vec3f offset;
|
Vec3f offset;
|
||||||
f32 phi_f0;
|
f32 phi_f0;
|
||||||
|
|
||||||
Actor_OffsetOfPointInActorCoords(door, &offset, &enHy->actor.world.pos);
|
Actor_OffsetOfPointInActorCoords(&door->actor, &offset, &enHy->actor.world.pos);
|
||||||
phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f;
|
phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f;
|
||||||
sp3B = ((s8)phi_f0 < 0) ? 0 : 2;
|
sp3B = ((s8)phi_f0 < 0) ? 0 : 2;
|
||||||
EnHy_ChangeObjectAndAnim(enHy, globalCtx, (sp3B == 0) ? arg3 : arg4);
|
EnHy_ChangeObjectAndAnim(enHy, globalCtx, (sp3B == 0) ? arg3 : arg4);
|
||||||
|
@ -139,14 +142,14 @@ void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, Actor* door, s16 arg3,
|
||||||
enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable;
|
enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable;
|
||||||
enHy->skelAnime.moveFlags |= 3;
|
enHy->skelAnime.moveFlags |= 3;
|
||||||
AnimationContext_SetMoveActor(globalCtx, &enHy->actor, &enHy->skelAnime, 1.0f);
|
AnimationContext_SetMoveActor(globalCtx, &enHy->actor, &enHy->skelAnime, 1.0f);
|
||||||
((EnDoor*)door)->unk_1A1 = 1;
|
door->unk_1A1 = 1;
|
||||||
((EnDoor*)door)->unk_1A0 = sp3B;
|
door->unk_1A0 = sp3B;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) {
|
s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) {
|
||||||
s32 ret = false;
|
s32 ret = false;
|
||||||
s16 yaw;
|
s16 yaw;
|
||||||
Actor* door;
|
EnDoor* door;
|
||||||
s32 pad;
|
s32 pad;
|
||||||
|
|
||||||
if (func_8013D68C(enHy->path, enHy->curPoint, &enHy->actor.world.pos)) {
|
if (func_8013D68C(enHy->path, enHy->curPoint, &enHy->actor.world.pos)) {
|
||||||
|
@ -154,7 +157,7 @@ s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3
|
||||||
if (door != NULL) {
|
if (door != NULL) {
|
||||||
ret = true;
|
ret = true;
|
||||||
func_800F0BB4(enHy, globalCtx, door, arg3, arg4);
|
func_800F0BB4(enHy, globalCtx, door, arg3, arg4);
|
||||||
yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->world.pos);
|
yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->actor.world.pos);
|
||||||
enHy->actor.world.pos.x += arg5 * Math_SinS(yaw);
|
enHy->actor.world.pos.x += arg5 * Math_SinS(yaw);
|
||||||
enHy->actor.world.pos.z += arg5 * Math_CosS(yaw);
|
enHy->actor.world.pos.z += arg5 * Math_CosS(yaw);
|
||||||
enHy->actor.world.rot.y = -yaw;
|
enHy->actor.world.rot.y = -yaw;
|
||||||
|
@ -168,7 +171,7 @@ s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3
|
||||||
s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3) {
|
s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3) {
|
||||||
s32 ret = false;
|
s32 ret = false;
|
||||||
s32 pad;
|
s32 pad;
|
||||||
Actor* door;
|
EnDoor* door;
|
||||||
|
|
||||||
enHy->curPoint = 0;
|
enHy->curPoint = 0;
|
||||||
if (func_8013D68C(enHy->path, enHy->curPoint, &enHy->actor.world.pos)) {
|
if (func_8013D68C(enHy->path, enHy->curPoint, &enHy->actor.world.pos)) {
|
||||||
|
@ -176,10 +179,10 @@ s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3) {
|
||||||
if (door != NULL) {
|
if (door != NULL) {
|
||||||
ret = true;
|
ret = true;
|
||||||
func_800F0BB4(enHy, globalCtx, door, arg2, arg3);
|
func_800F0BB4(enHy, globalCtx, door, arg2, arg3);
|
||||||
enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->world.pos);
|
enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->actor.world.pos);
|
||||||
enHy->actor.world.rot.y = enHy->actor.shape.rot.y;
|
enHy->actor.world.rot.y = enHy->actor.shape.rot.y;
|
||||||
enHy->actor.gravity = 0.0f;
|
enHy->actor.gravity = 0.0f;
|
||||||
enHy->actor.flags &= ~1;
|
enHy->actor.flags &= ~ACTOR_FLAG_1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -187,16 +190,16 @@ s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3) {
|
||||||
|
|
||||||
s32 EnHy_SetPointFowards(EnHy* enHy, GlobalContext* globalCtx, f32 gravity, s16 animIndex) {
|
s32 EnHy_SetPointFowards(EnHy* enHy, GlobalContext* globalCtx, f32 gravity, s16 animIndex) {
|
||||||
enHy->actor.gravity = gravity;
|
enHy->actor.gravity = gravity;
|
||||||
enHy->actor.flags |= 1;
|
enHy->actor.flags |= ACTOR_FLAG_1;
|
||||||
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
||||||
enHy->curPoint++;
|
enHy->curPoint++;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 EnHy_SetPointBackwards(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex) {
|
s32 EnHy_SetPointBackwards(EnHy* enHy, GlobalContext* globalCtx, s16 animIndex) {
|
||||||
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
EnHy_ChangeObjectAndAnim(enHy, globalCtx, animIndex);
|
||||||
enHy->curPoint--;
|
enHy->curPoint--;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 EnHy_MoveForwards(EnHy* enHy, f32 speedTarget) {
|
s32 EnHy_MoveForwards(EnHy* enHy, f32 speedTarget) {
|
||||||
|
@ -212,6 +215,7 @@ s32 EnHy_MoveForwards(EnHy* enHy, f32 speedTarget) {
|
||||||
reachedEnd = true;
|
reachedEnd = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return reachedEnd;
|
return reachedEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,6 +232,7 @@ s32 EnHy_MoveBackwards(EnHy* enHy, f32 speedTarget) {
|
||||||
reachedEnd = true;
|
reachedEnd = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return reachedEnd;
|
return reachedEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,5 +272,6 @@ s32 EnHy_PlayWalkingSound(EnHy* enHy, GlobalContext* globalCtx, f32 distAboveThr
|
||||||
if (enHy->isRightFootOnGround && !wasRightFootOnGround && isFootOnGround) {
|
if (enHy->isRightFootOnGround && !wasRightFootOnGround && isFootOnGround) {
|
||||||
Actor_PlaySfxAtPos(&enHy->actor, sfxId);
|
Actor_PlaySfxAtPos(&enHy->actor, sfxId);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "z_en_cne_01.h"
|
#include "z_en_cne_01.h"
|
||||||
|
#include "objects/object_cne/object_cne.h"
|
||||||
|
|
||||||
#define FLAGS 0x00000019
|
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_8 | ACTOR_FLAG_1)
|
||||||
|
|
||||||
#define THIS ((EnCne01*)thisx)
|
#define THIS ((EnCne01*)thisx)
|
||||||
|
|
||||||
|
@ -15,12 +16,12 @@ void EnCne01_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void EnCne01_Update(Actor* thisx, GlobalContext* globalCtx);
|
void EnCne01_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void EnCne01_Draw(Actor* thisx, GlobalContext* globalCtx);
|
void EnCne01_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||||
|
|
||||||
void func_809CB520(EnCne01* this, GlobalContext* globalCtx);
|
void EnCne01_Walk(EnHy* this, GlobalContext* globalCtx);
|
||||||
void func_809CB5A0(EnCne01* this, GlobalContext* globalCtx);
|
void EnCne01_FaceForward(EnHy* this, GlobalContext* globalCtx);
|
||||||
void func_809CB5D8(EnCne01* this, GlobalContext* globalCtx);
|
void EnCne01_Talk(EnHy* this, GlobalContext* globalCtx);
|
||||||
void func_809CB5FC(EnCne01* this, GlobalContext* globalCtx);
|
|
||||||
|
typedef enum { CNE01_DMG_EFF_NONE } EnCne01DamageEffect;
|
||||||
|
|
||||||
#if 0
|
|
||||||
const ActorInit En_Cne_01_InitVars = {
|
const ActorInit En_Cne_01_InitVars = {
|
||||||
ACTOR_EN_CNE_01,
|
ACTOR_EN_CNE_01,
|
||||||
ACTORCAT_NPC,
|
ACTORCAT_NPC,
|
||||||
|
@ -33,85 +34,295 @@ const ActorInit En_Cne_01_InitVars = {
|
||||||
(ActorFunc)EnCne01_Draw,
|
(ActorFunc)EnCne01_Draw,
|
||||||
};
|
};
|
||||||
|
|
||||||
// static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
static ColliderCylinderInit D_809CBF00 = {
|
{
|
||||||
{ COLTYPE_HIT0, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
COLTYPE_HIT0,
|
||||||
{ ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
|
AT_NONE,
|
||||||
|
AC_ON | AC_TYPE_PLAYER,
|
||||||
|
OC1_ON | OC1_TYPE_ALL,
|
||||||
|
OC2_TYPE_1,
|
||||||
|
COLSHAPE_CYLINDER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ELEMTYPE_UNK1,
|
||||||
|
{ 0x00000000, 0x00, 0x00 },
|
||||||
|
{ 0xF7CFFFFF, 0x00, 0x00 },
|
||||||
|
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||||
|
BUMP_ON,
|
||||||
|
OCELEM_ON,
|
||||||
|
},
|
||||||
{ 18, 64, 0, { 0, 0, 0 } },
|
{ 18, 64, 0, { 0, 0, 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
// sColChkInfoInit
|
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||||
static CollisionCheckInfoInit2 D_809CBF2C = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
|
||||||
|
|
||||||
// static DamageTable sDamageTable = {
|
static DamageTable sDamageTable = {
|
||||||
static DamageTable D_809CBF38 = {
|
/* Deku Nut */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Deku Nut */ DMG_ENTRY(0, 0x0),
|
/* Deku Stick */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Deku Stick */ DMG_ENTRY(0, 0x0),
|
/* Horse trample */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Horse trample */ DMG_ENTRY(0, 0x0),
|
/* Explosives */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Explosives */ DMG_ENTRY(0, 0x0),
|
/* Zora boomerang */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Zora boomerang */ DMG_ENTRY(0, 0x0),
|
/* Normal arrow */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Normal arrow */ DMG_ENTRY(0, 0x0),
|
/* UNK_DMG_0x06 */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
|
/* Hookshot */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Hookshot */ DMG_ENTRY(0, 0x0),
|
/* Goron punch */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Goron punch */ DMG_ENTRY(0, 0x0),
|
/* Sword */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Sword */ DMG_ENTRY(0, 0x0),
|
/* Goron pound */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Goron pound */ DMG_ENTRY(0, 0x0),
|
/* Fire arrow */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Fire arrow */ DMG_ENTRY(0, 0x0),
|
/* Ice arrow */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Ice arrow */ DMG_ENTRY(0, 0x0),
|
/* Light arrow */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Light arrow */ DMG_ENTRY(0, 0x0),
|
/* Goron spikes */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Goron spikes */ DMG_ENTRY(0, 0x0),
|
/* Deku spin */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Deku spin */ DMG_ENTRY(0, 0x0),
|
/* Deku bubble */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Deku bubble */ DMG_ENTRY(0, 0x0),
|
/* Deku launch */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Deku launch */ DMG_ENTRY(0, 0x0),
|
/* UNK_DMG_0x12 */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x0),
|
/* Zora barrier */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Zora barrier */ DMG_ENTRY(0, 0x0),
|
/* Normal shield */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Normal shield */ DMG_ENTRY(0, 0x0),
|
/* Light ray */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Light ray */ DMG_ENTRY(0, 0x0),
|
/* Thrown object */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Thrown object */ DMG_ENTRY(0, 0x0),
|
/* Zora punch */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Zora punch */ DMG_ENTRY(0, 0x0),
|
/* Spin attack */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Spin attack */ DMG_ENTRY(0, 0x0),
|
/* Sword beam */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Sword beam */ DMG_ENTRY(0, 0x0),
|
/* Normal Roll */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Normal Roll */ DMG_ENTRY(0, 0x0),
|
/* UNK_DMG_0x1B */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
|
/* UNK_DMG_0x1C */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
|
/* Unblockable */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Unblockable */ DMG_ENTRY(0, 0x0),
|
/* UNK_DMG_0x1E */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
|
/* Powder Keg */ DMG_ENTRY(0, CNE01_DMG_EFF_NONE),
|
||||||
/* Powder Keg */ DMG_ENTRY(0, 0x0),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
static u16 D_809CBF58[] = { 4000, 4, 1, 3, 6000, 4, 1, 6, 4000, 4, 1, 3, 6000, 4, 1, 6 };
|
||||||
|
|
||||||
extern ColliderCylinderInit D_809CBF00;
|
void EnCne01_UpdateModel(EnCne01* this, GlobalContext* globalCtx) {
|
||||||
extern CollisionCheckInfoInit2 D_809CBF2C;
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
extern DamageTable D_809CBF38;
|
Vec3f focus;
|
||||||
|
|
||||||
extern UNK_TYPE D_060000F0;
|
EnHy_UpdateSkelAnime(&this->enHy, globalCtx);
|
||||||
extern UNK_TYPE D_06001300;
|
if (func_8013D5E8(this->enHy.actor.shape.rot.y, 0x36B0, this->enHy.actor.yawTowardsPlayer)) {
|
||||||
|
focus.x = player->actor.world.pos.x;
|
||||||
|
focus.y = player->bodyPartsPos[7].y + 3.0f;
|
||||||
|
focus.z = player->actor.world.pos.z;
|
||||||
|
func_8013D2E0(&focus, &this->enHy.actor.focus.pos, &this->enHy.actor.shape.rot, &this->enHy.focusTarget,
|
||||||
|
&this->enHy.headRot, &this->enHy.torsoRot, D_809CBF58);
|
||||||
|
} else {
|
||||||
|
Math_SmoothStepToS(&this->enHy.focusTarget.x, 0, 4, 0x3E8, 1);
|
||||||
|
Math_SmoothStepToS(&this->enHy.focusTarget.y, 0, 4, 0x3E8, 1);
|
||||||
|
Math_SmoothStepToS(&this->enHy.headRot.x, 0, 4, 0x3E8, 1);
|
||||||
|
Math_SmoothStepToS(&this->enHy.headRot.y, 0, 4, 0x3E8, 1);
|
||||||
|
Math_SmoothStepToS(&this->enHy.torsoRot.x, 0, 4, 0x3E8, 1);
|
||||||
|
Math_SmoothStepToS(&this->enHy.torsoRot.y, 0, 4, 0x3E8, 1);
|
||||||
|
}
|
||||||
|
func_8013D9C8(globalCtx, this->enHy.limbRotTableY, this->enHy.limbRotTableZ, ARRAY_COUNT(this->enHy.limbRotTableY));
|
||||||
|
EnHy_UpdateCollider(&this->enHy, globalCtx);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB290.s")
|
s32 EnCne01_TestIsTalking(EnCne01* this, GlobalContext* globalCtx) {
|
||||||
|
s32 isTalking = false;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB404.s")
|
if (Actor_ProcessTalkRequest(&this->enHy.actor, &globalCtx->state)) {
|
||||||
|
isTalking = true;
|
||||||
|
this->enHy.textId = 0x10B9;
|
||||||
|
this->enHy.tmpFocusTarget = this->enHy.focusTarget;
|
||||||
|
this->enHy.tmpHeadRot = this->enHy.headRot;
|
||||||
|
this->enHy.tmpTorsoRot = this->enHy.torsoRot;
|
||||||
|
this->enHy.tmpActionFunc = this->enHy.actionFunc;
|
||||||
|
this->enHy.actionFunc = EnCne01_Talk;
|
||||||
|
}
|
||||||
|
return isTalking;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB4A0.s")
|
s32 func_809CB4A0(EnCne01* this, GlobalContext* globalCtx) {
|
||||||
|
s16 x;
|
||||||
|
s16 y;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB520.s")
|
Actor_GetScreenPos(globalCtx, &this->enHy.actor, &x, &y);
|
||||||
|
//! @bug: Both x and y conditionals are always true, || should be an &&
|
||||||
|
if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) {
|
||||||
|
func_800B85E0(&this->enHy.actor, globalCtx, 30.0f, EXCH_ITEM_2E);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB5A0.s")
|
void EnCne01_FinishInit(EnHy* this, GlobalContext* globalCtx) {
|
||||||
|
if (EnHy_Init(this, globalCtx, &gCneSkel, ENHY_ANIMATION_OS_ANIME_11)) {
|
||||||
|
this->actor.flags |= ACTOR_FLAG_1;
|
||||||
|
this->actor.draw = EnCne01_Draw;
|
||||||
|
this->waitingOnInit = false;
|
||||||
|
if (ENCNE01_GET_PATH(&this->actor) == ENCNE01_NO_PATH) {
|
||||||
|
this->actionFunc = EnCne01_FaceForward;
|
||||||
|
} else {
|
||||||
|
this->actionFunc = EnCne01_Walk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB5D8.s")
|
void EnCne01_Walk(EnHy* this, GlobalContext* globalCtx) {
|
||||||
|
if (EnHy_MoveForwards(this, 1.0f)) {
|
||||||
|
this->curPoint = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB5FC.s")
|
void EnCne01_FaceForward(EnHy* this, GlobalContext* globalCtx) {
|
||||||
|
this->actor.shape.rot = this->actor.world.rot;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/EnCne01_Init.s")
|
void EnCne01_Talk(EnHy* this, GlobalContext* globalCtx) {
|
||||||
|
s16 yaw;
|
||||||
|
u8 talkstate;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/EnCne01_Destroy.s")
|
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0xFA0, 1);
|
||||||
|
talkstate = Message_GetState(&globalCtx->msgCtx);
|
||||||
|
this->inMsgState3 = (talkstate == 3) ? true : false;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/EnCne01_Update.s")
|
switch (talkstate) {
|
||||||
|
case 0:
|
||||||
|
yaw = ABS_ALT(this->actor.shape.rot.y - this->actor.yawTowardsPlayer);
|
||||||
|
if (yaw < 0x64) {
|
||||||
|
func_801518B0(globalCtx, this->textId, NULL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
this->actor.textId = 0;
|
||||||
|
this->focusTarget = this->tmpFocusTarget;
|
||||||
|
this->headRot = this->tmpHeadRot;
|
||||||
|
this->torsoRot = this->tmpTorsoRot;
|
||||||
|
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||||
|
this->actionFunc = this->tmpActionFunc;
|
||||||
|
this->tmpActionFunc = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CB920.s")
|
void EnCne01_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
s32 pad;
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CBBC8.s")
|
this->enHy.animObjIndex = func_8013D924(OBJECT_OS_ANIME, globalCtx);
|
||||||
|
this->enHy.headObjIndex = func_8013D924(OBJECT_CNE, globalCtx);
|
||||||
|
this->enHy.skelUpperObjIndex = func_8013D924(OBJECT_CNE, globalCtx);
|
||||||
|
this->enHy.skelLowerObjIndex = func_8013D924(OBJECT_CNE, globalCtx);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/func_809CBCA0.s")
|
if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) ||
|
||||||
|
(this->enHy.skelLowerObjIndex < 0)) {
|
||||||
|
Actor_MarkForDeath(&this->enHy.actor);
|
||||||
|
}
|
||||||
|
this->enHy.actor.draw = NULL;
|
||||||
|
Collider_InitCylinder(globalCtx, &this->enHy.collider);
|
||||||
|
Collider_SetCylinder(globalCtx, &this->enHy.collider, &this->enHy.actor, &sCylinderInit);
|
||||||
|
CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
|
||||||
|
this->enHy.actor.flags &= ~ACTOR_FLAG_1;
|
||||||
|
this->enHy.path = func_8013D648(globalCtx, ENCNE01_GET_PATH(&this->enHy.actor), ENCNE01_NO_PATH);
|
||||||
|
this->enHy.waitingOnInit = true;
|
||||||
|
Actor_SetScale(&this->enHy.actor, 0.01f);
|
||||||
|
this->enHy.actionFunc = EnCne01_FinishInit;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Cne_01/EnCne01_Draw.s")
|
void EnCne01_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
|
||||||
|
Collider_DestroyCylinder(globalCtx, &this->enHy.collider);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnCne01_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
|
||||||
|
EnCne01_TestIsTalking(this, globalCtx);
|
||||||
|
this->enHy.actionFunc(&this->enHy, globalCtx);
|
||||||
|
Actor_UpdateBgCheckInfo(globalCtx, &this->enHy.actor, 0.0f, 0.0f, 0.0f, 4);
|
||||||
|
EnCne01_UpdateModel(this, globalCtx);
|
||||||
|
func_809CB4A0(this, globalCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 EnCne01_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
|
||||||
|
Actor* thisx) {
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
s8 bodyPart;
|
||||||
|
Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
|
bodyPart = gEnHyBodyParts[limbIndex];
|
||||||
|
if (bodyPart >= 0) {
|
||||||
|
Matrix_MultiplyVector3fByState(&zeroVec, &this->enHy.bodyPartsPos[bodyPart]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbIndex == CNE_LIMB_HEAD) {
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->enHy.headObjIndex].segment);
|
||||||
|
gSegments[6] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[this->enHy.headObjIndex].segment);
|
||||||
|
*dList = gCneHeadBrownHairDL;
|
||||||
|
gSegments[6] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
if (limbIndex == CNE_LIMB_HEAD) {
|
||||||
|
Matrix_InsertTranslation(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertXRotation_s(this->enHy.headRot.y, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertZRotation_s(-this->enHy.headRot.x, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertTranslation(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbIndex == CNE_LIMB_TORSO) {
|
||||||
|
Matrix_InsertXRotation_s(-this->enHy.torsoRot.y, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertZRotation_s(-this->enHy.torsoRot.x, MTXMODE_APPLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((limbIndex == CNE_LIMB_HEAD) && this->enHy.inMsgState3 && ((globalCtx->state.frames % 2) == 0)) {
|
||||||
|
Matrix_InsertTranslation(40.0f, 0.0f, 0.0f, MTXMODE_APPLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((limbIndex == CNE_LIMB_TORSO) || (limbIndex == CNE_LIMB_LEFT_UPPER_ARM) ||
|
||||||
|
(limbIndex == CNE_LIMB_RIGHT_UPPER_ARM)) {
|
||||||
|
rot->y += (s16)(Math_SinS(this->enHy.limbRotTableY[limbIndex]) * 200.0f);
|
||||||
|
rot->z += (s16)(Math_CosS(this->enHy.limbRotTableZ[limbIndex]) * 200.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnCne01_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
||||||
|
Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
|
if (limbIndex == CNE_LIMB_RIGHT_FOOT) {
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
|
||||||
|
gSegments[0x06] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limbIndex == CNE_LIMB_HEAD) {
|
||||||
|
Matrix_MultiplyVector3fByState(&zeroVec, &this->enHy.actor.focus.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnCne01_TransformLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Actor* thisx) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnCne01_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnCne01* this = THIS;
|
||||||
|
s32 i;
|
||||||
|
u8* shadowTex = GRAPH_ALLOC(globalCtx->state.gfxCtx, sizeof(u8[64][64]));
|
||||||
|
u8* shadowTexIter;
|
||||||
|
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
|
func_8012C28C(globalCtx->state.gfxCtx);
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(globalCtx->state.gfxCtx, 160, 180, 255, 0));
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(globalCtx->state.gfxCtx, 160, 180, 255, 0));
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x0A, Gfx_EnvColor(globalCtx->state.gfxCtx, 160, 180, 255, 0));
|
||||||
|
gDPPipeSync(POLY_OPA_DISP++);
|
||||||
|
SkelAnime_DrawTransformFlexOpa(globalCtx, this->enHy.skelAnime.skeleton, this->enHy.skelAnime.jointTable,
|
||||||
|
this->enHy.skelAnime.dListCount, EnCne01_OverrideLimbDraw, EnCne01_PostLimbDraw,
|
||||||
|
EnCne01_TransformLimbDraw, &this->enHy.actor);
|
||||||
|
Matrix_InsertXRotation_s(0, MTXMODE_NEW);
|
||||||
|
|
||||||
|
for (i = 0, shadowTexIter = shadowTex; i < (s32)sizeof(u8[64][64]); i++) {
|
||||||
|
*shadowTexIter++ = 0;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 5; i++) {
|
||||||
|
func_8013CD64(this->enHy.bodyPartsPos, &this->enHy.actor.world.pos, shadowTex, i / 5.0f,
|
||||||
|
ARRAY_COUNT(this->enHy.bodyPartsPos), gEnHyShadowSize, gEnHyBodyPartsIndex);
|
||||||
|
}
|
||||||
|
func_8013CF04(&this->enHy.actor, &globalCtx->state.gfxCtx, shadowTex);
|
||||||
|
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
#ifndef Z_EN_CNE_01_H
|
#ifndef Z_EN_CNE_01_H
|
||||||
#define Z_EN_CNE_01_H
|
#define Z_EN_CNE_01_H
|
||||||
|
|
||||||
#include "global.h"
|
#include "z_en_hy.h"
|
||||||
|
|
||||||
struct EnCne01;
|
struct EnCne01;
|
||||||
|
|
||||||
typedef void (*EnCne01ActionFunc)(struct EnCne01*, GlobalContext*);
|
typedef void (*EnCne01ActionFunc)(struct EnCne01*, GlobalContext*);
|
||||||
|
|
||||||
|
#define ENCNE01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
|
||||||
|
#define ENCNE01_NO_PATH 0x3F
|
||||||
|
|
||||||
typedef struct EnCne01 {
|
typedef struct EnCne01 {
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x000 */ EnHy enHy;
|
||||||
/* 0x0144 */ EnCne01ActionFunc actionFunc;
|
/* 0x3EC */ UNK_TYPE1 unk_3EC[0x230];
|
||||||
/* 0x0148 */ char unk_148[0x4D4];
|
|
||||||
} EnCne01; // size = 0x61C
|
} EnCne01; // size = 0x61C
|
||||||
|
|
||||||
extern const ActorInit En_Cne_01_InitVars;
|
extern const ActorInit En_Cne_01_InitVars;
|
||||||
|
|
|
@ -9141,19 +9141,19 @@
|
||||||
0x809CB210:("EnBoj04_Destroy",),
|
0x809CB210:("EnBoj04_Destroy",),
|
||||||
0x809CB220:("EnBoj04_Update",),
|
0x809CB220:("EnBoj04_Update",),
|
||||||
0x809CB230:("EnBoj04_Draw",),
|
0x809CB230:("EnBoj04_Draw",),
|
||||||
0x809CB290:("func_809CB290",),
|
0x809CB290:("EnCne01_UpdateModel",),
|
||||||
0x809CB404:("func_809CB404",),
|
0x809CB404:("EnCne01_TestIsTalking",),
|
||||||
0x809CB4A0:("func_809CB4A0",),
|
0x809CB4A0:("func_809CB4A0",),
|
||||||
0x809CB520:("func_809CB520",),
|
0x809CB520:("EnCne01_FinishInit",),
|
||||||
0x809CB5A0:("func_809CB5A0",),
|
0x809CB5A0:("EnCne01_Walk",),
|
||||||
0x809CB5D8:("func_809CB5D8",),
|
0x809CB5D8:("EnCne01_FaceForward",),
|
||||||
0x809CB5FC:("func_809CB5FC",),
|
0x809CB5FC:("EnCne01_Talk",),
|
||||||
0x809CB72C:("EnCne01_Init",),
|
0x809CB72C:("EnCne01_Init",),
|
||||||
0x809CB86C:("EnCne01_Destroy",),
|
0x809CB86C:("EnCne01_Destroy",),
|
||||||
0x809CB898:("EnCne01_Update",),
|
0x809CB898:("EnCne01_Update",),
|
||||||
0x809CB920:("func_809CB920",),
|
0x809CB920:("EnCne01_OverrideLimbDraw",),
|
||||||
0x809CBBC8:("func_809CBBC8",),
|
0x809CBBC8:("EnCne01_PostLimbDraw",),
|
||||||
0x809CBCA0:("func_809CBCA0",),
|
0x809CBCA0:("EnCne01_TransformLimbDraw",),
|
||||||
0x809CBCB4:("EnCne01_Draw",),
|
0x809CBCB4:("EnCne01_Draw",),
|
||||||
0x809CC060:("func_809CC060",),
|
0x809CC060:("func_809CC060",),
|
||||||
0x809CC1D4:("func_809CC1D4",),
|
0x809CC1D4:("func_809CC1D4",),
|
||||||
|
|
|
@ -917,9 +917,9 @@
|
||||||
0x801BC240:("D_801BC240","Gfx","[9]",0x48),
|
0x801BC240:("D_801BC240","Gfx","[9]",0x48),
|
||||||
0x801BC288:("D_801BC288","Gfx","[3]",0x18),
|
0x801BC288:("D_801BC288","Gfx","[3]",0x18),
|
||||||
0x801BC2A0:("D_801BC2A0","UNK_TYPE1","",0x1),
|
0x801BC2A0:("D_801BC2A0","UNK_TYPE1","",0x1),
|
||||||
0x801BC3F0:("D_801BC3F0","UNK_TYPE1","",0x1),
|
0x801BC3F0:("gEnHyBodyParts","UNK_TYPE1","",0x1),
|
||||||
0x801BC400:("D_801BC400","UNK_TYPE1","",0x1),
|
0x801BC400:("gEnHyBodyPartsIndex","UNK_TYPE1","",0x1),
|
||||||
0x801BC410:("D_801BC410","s32",[],0x10),
|
0x801BC410:("gEnHyShadowSize","s32",[],0x10),
|
||||||
0x801BC420:("sReactionTextIds","u16","[]",0x140A),
|
0x801BC420:("sReactionTextIds","u16","[]",0x140A),
|
||||||
0x801BD830:("actorCutscenesGlobalCutscenes","ActorCutscene","[8]",0x80),
|
0x801BD830:("actorCutscenesGlobalCutscenes","ActorCutscene","[8]",0x80),
|
||||||
0x801BD8B0:("actorCutsceneCurrent","s16","",0x2),
|
0x801BD8B0:("actorCutsceneCurrent","s16","",0x2),
|
||||||
|
|
|
@ -550,25 +550,6 @@ D_06011AB8 = 0x06011AB8;
|
||||||
D_06012A80 = 0x06012A80;
|
D_06012A80 = 0x06012A80;
|
||||||
D_06013138 = 0x06013138;
|
D_06013138 = 0x06013138;
|
||||||
|
|
||||||
// z_en_hy.c
|
|
||||||
|
|
||||||
D_0600007C = 0x0600007C;
|
|
||||||
D_0600066C = 0x0600066C;
|
|
||||||
D_0600071C = 0x0600071C;
|
|
||||||
D_060008C0 = 0x060008C0;
|
|
||||||
D_06000AB0 = 0x06000AB0;
|
|
||||||
D_06000FDC = 0x06000FDC;
|
|
||||||
D_06001494 = 0x06001494;
|
|
||||||
D_06001908 = 0x06001908;
|
|
||||||
D_06001EE0 = 0x06001EE0;
|
|
||||||
D_06005DC4 = 0x06005DC4;
|
|
||||||
D_06005D9C = 0x06005D9C;
|
|
||||||
D_0600DED8 = 0x0600DED8;
|
|
||||||
D_0600F920 = 0x0600F920;
|
|
||||||
D_0600FC1C = 0x0600FC1C;
|
|
||||||
D_0600FEE4 = 0x0600FEE4;
|
|
||||||
D_06010330 = 0x06010330;
|
|
||||||
|
|
||||||
// ovl_Bg_Astr_Bombwall
|
// ovl_Bg_Astr_Bombwall
|
||||||
|
|
||||||
D_06002178 = 0x06002178;
|
D_06002178 = 0x06002178;
|
||||||
|
@ -1290,11 +1271,6 @@ D_0600C3E0 = 0x0600C3E0;
|
||||||
|
|
||||||
D_06001000 = 0x06001000;
|
D_06001000 = 0x06001000;
|
||||||
|
|
||||||
// ovl_En_Cne_01
|
|
||||||
|
|
||||||
D_060000F0 = 0x060000F0;
|
|
||||||
D_06001300 = 0x06001300;
|
|
||||||
|
|
||||||
// ovl_En_Crow
|
// ovl_En_Crow
|
||||||
|
|
||||||
D_060000F0 = 0x060000F0;
|
D_060000F0 = 0x060000F0;
|
||||||
|
@ -1405,6 +1381,7 @@ D_06003DC8 = 0x06003DC8;
|
||||||
|
|
||||||
// ovl_En_Fishing
|
// ovl_En_Fishing
|
||||||
|
|
||||||
|
D_0600007C = 0x0600007C;
|
||||||
D_0600CFE0 = 0x0600CFE0;
|
D_0600CFE0 = 0x0600CFE0;
|
||||||
D_06011058 = 0x06011058;
|
D_06011058 = 0x06011058;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue