object_zoraegg (#1439)

* naming

* improvements

* bss order
This commit is contained in:
Nuss 2023-10-16 00:01:04 +02:00 committed by GitHub
parent 9e5777e473
commit 1d3f38dcaa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 74 additions and 60 deletions

View File

@ -1,34 +1,48 @@
<Root>
<!-- Object for Zora Baby and Zora Egg -->
<File Name="object_zoraegg" Segment="6">
<Animation Name="object_zoraegg_Anim_0005D4" Offset="0x5D4" />
<Animation Name="object_zoraegg_Anim_001E08" Offset="0x1E08" />
<DList Name="object_zoraegg_DL_002550" Offset="0x2550" />
<DList Name="object_zoraegg_DL_0027C8" Offset="0x27C8" />
<DList Name="object_zoraegg_DL_002A60" Offset="0x2A60" />
<DList Name="object_zoraegg_DL_002B60" Offset="0x2B60" />
<DList Name="object_zoraegg_DL_002C70" Offset="0x2C70" />
<DList Name="object_zoraegg_DL_002D30" Offset="0x2D30" />
<Texture Name="object_zoraegg_TLUT_002DF0" OutName="tlut_002DF0" Format="rgba16" Width="16" Height="16" Offset="0x2DF0" />
<Texture Name="object_zoraegg_Tex_002FF0" OutName="tex_002FF0" Format="ci8" Width="32" Height="32" Offset="0x2FF0" />
<Texture Name="object_zoraegg_Tex_0033F0" OutName="tex_0033F0" Format="ci8" Width="8" Height="8" Offset="0x33F0" />
<Texture Name="object_zoraegg_Tex_003430" OutName="tex_003430" Format="ci8" Width="32" Height="32" Offset="0x3430" />
<Texture Name="object_zoraegg_Tex_003830" OutName="tex_003830" Format="ci8" Width="32" Height="64" Offset="0x3830" />
<Texture Name="object_zoraegg_Tex_004030" OutName="tex_004030" Format="ci8" Width="32" Height="32" Offset="0x4030" />
<Texture Name="object_zoraegg_Tex_004430" OutName="tex_004430" Format="ci8" Width="32" Height="32" Offset="0x4430" />
<Texture Name="object_zoraegg_Tex_004830" OutName="tex_004830" Format="ci8" Width="32" Height="32" Offset="0x4830" />
<Limb Name="object_zoraegg_Standardlimb_004C30" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_01" Offset="0x4C30" />
<Limb Name="object_zoraegg_Standardlimb_004C3C" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_02" Offset="0x4C3C" />
<Limb Name="object_zoraegg_Standardlimb_004C48" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_03" Offset="0x4C48" />
<Limb Name="object_zoraegg_Standardlimb_004C54" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_04" Offset="0x4C54" />
<Limb Name="object_zoraegg_Standardlimb_004C60" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_05" Offset="0x4C60" />
<Limb Name="object_zoraegg_Standardlimb_004C6C" Type="Standard" EnumName="OBJECT_ZORAEGG_LIMB_06" Offset="0x4C6C" />
<Skeleton Name="object_zoraegg_Skel_004C90" Type="Flex" LimbType="Standard" LimbNone="OBJECT_ZORAEGG_LIMB_NONE" LimbMax="OBJECT_ZORAEGG_LIMB_MAX" EnumName="ObjectZoraeggLimb" Offset="0x4C90" />
<Animation Name="object_zoraegg_Anim_004D20" Offset="0x4D20" />
<Animation Name="object_zoraegg_Anim_004E04" Offset="0x4E04" />
<Animation Name="object_zoraegg_Anim_004FE4" Offset="0x4FE4" />
<Animation Name="object_zoraegg_Anim_005098" Offset="0x5098" />
<DList Name="object_zoraegg_DL_005250" Offset="0x5250" />
<Texture Name="object_zoraegg_TLUT_0053B0" OutName="tlut_0053B0" Format="rgba16" Width="16" Height="16" Offset="0x53B0" />
<Texture Name="object_zoraegg_Tex_0055B0" OutName="tex_0055B0" Format="ci8" Width="32" Height="32" Offset="0x55B0" />
<!-- The animations when all the eggs hatch and the Zora babies swim up -->
<Animation Name="gZoraBabySwimUpAnim" Offset="0x5D4" />
<Animation Name="gZoraBabyHatchAnim" Offset="0x1E08" />
<!-- Zora Baby Dlists -->
<DList Name="gZoraBabyHeadDL" Offset="0x2550" />
<DList Name="gZoraBabyTail1DL" Offset="0x27C8" />
<DList Name="gZoraBabyTail2DL" Offset="0x2A60" />
<DList Name="gZoraBabyTailFinDL" Offset="0x2B60" />
<DList Name="gZoraBabyRightPectoralFinDL" Offset="0x2C70" />
<DList Name="gZoraBabyLeftPectoralFinDL" Offset="0x2D30" />
<!-- Zora Baby Textures -->
<Texture Name="gZoraBabyTLUT" OutName="zora_baby_tlut" Format="rgba16" Width="16" Height="16" Offset="0x2DF0" />
<Texture Name="gZoraBabyTailFinTex" OutName="zora_baby_tail_fin" Format="ci8" Width="32" Height="32" Offset="0x2FF0" />
<Texture Name="gZoraBabySkinTex" OutName="zora_baby_skin" Format="ci8" Width="8" Height="8" Offset="0x33F0" />
<Texture Name="gZoraBabyEyeOpenTex" OutName="zora_baby_eye_open" Format="ci8" Width="32" Height="32" Offset="0x3430" />
<Texture Name="gZoraBabySkinPatternTex" OutName="zora_baby_skin_pattern" Format="ci8" Width="32" Height="64" Offset="0x3830" />
<Texture Name="gZoraBabyPectoralFinTex" OutName="zora_baby_pectoral_fin" Format="ci8" Width="32" Height="32" Offset="0x4030" />
<Texture Name="gZoraBabyEyeHalfTex" OutName="zora_baby_eye_half" Format="ci8" Width="32" Height="32" Offset="0x4430" />
<Texture Name="gZoraBabyEyeClosedTex" OutName="zora_baby_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x4830" />
<!-- Zora Baby Limbs -->
<Limb Name="gZoraBabyHeadLimb" Type="Standard" EnumName="ZORA_BABY_LIMB_HEAD" Offset="0x4C30" />
<Limb Name="gZoraBabyTail1Limb" Type="Standard" EnumName="ZORA_BABY_LIMB_TAIL1" Offset="0x4C3C" />
<Limb Name="gZoraBabyTail2Limb" Type="Standard" EnumName="ZORA_BABY_LIMB_TAIL2" Offset="0x4C48" />
<Limb Name="gZoraBabyTailFinLimb" Type="Standard" EnumName="ZORA_BABY_LIMB_TAIL_FIN" Offset="0x4C54" />
<Limb Name="gZoraBabyRightPectoralFinLimb" Type="Standard" EnumName="ZORA_BABY_LIMB_RIGHT_PECTORAL_FIN" Offset="0x4C60" />
<Limb Name="gZoraBabyLeftPectoralFinLimb" Type="Standard" EnumName="ZORA_BABY_LIMB_LEFT_PECTORAL_FIN" Offset="0x4C6C" />
<!-- Zora baby Skeleton -->
<Skeleton Name="gZoraBabySkel" Type="Flex" LimbType="Standard" LimbNone="ZORA_BABY_LIMB_NONE" LimbMax="ZORA_BABY_LIMB_MAX" EnumName="ZoraBabyLimb" Offset="0x4C90" />
<!-- Animations -->
<Animation Name="gZoraBabyFormNoteAnim" Offset="0x4D20" />
<Animation Name="gZoraBabySongLearnedAnim" Offset="0x4E04" />
<Animation Name="gZoraBabyNoteAnim" Offset="0x4FE4" />
<Animation Name="gZoraBabySwimAnim" Offset="0x5098" />
<!-- Zora Egg -->
<DList Name="gZoraEggDL" Offset="0x5250" />
<Texture Name="gZoraEggTLUT" OutName="zora_egg_tlut" Format="rgba16" Width="16" Height="16" Offset="0x53B0" />
<Texture Name="gZoraEggTex" OutName="zora_egg" Format="ci8" Width="32" Height="32" Offset="0x55B0" />
</File>
</Root>

View File

@ -6,7 +6,6 @@
#include "z_en_zoraegg.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_zoraegg/object_zoraegg.h"
#define FLAGS (ACTOR_FLAG_10)
@ -81,9 +80,9 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
};
Actor_SetScale(&this->actor, 0.006f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_zoraegg_Skel_004C90, &object_zoraegg_Anim_005098,
this->jointTable, this->morphTable, 7);
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_005098);
SkelAnime_InitFlex(play, &this->skelAnime, &gZoraBabySkel, &gZoraBabySwimAnim, this->jointTable, this->morphTable,
ZORA_BABY_LIMB_MAX);
Animation_PlayLoop(&this->skelAnime, &gZoraBabySwimAnim);
ActorShape_Init(&this->actor.shape, 1100.0f, NULL, 0.0f);
this->actionFunc = func_80B32084;
@ -166,7 +165,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
case ZORA_EGG_TYPE_08:
case ZORA_EGG_TYPE_09:
this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_03];
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08);
Animation_PlayOnce(&this->skelAnime, &gZoraBabyHatchAnim);
this->unk_1EC = 1;
this->unk_1EE = 0;
this->unk_1EF = 0;
@ -187,7 +186,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_0A];
this->unk_1EC = 2;
this->actionFunc = func_80B324B0;
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim);
this->unk_1EE = 0;
this->unk_1ED = 0;
this->unk_1EA |= 3;
@ -426,13 +425,13 @@ void func_80B324B0(EnZoraegg* this, PlayState* play) {
if (this->unk_1EA & 4) {
if (Cutscene_IsCueInChannel(play, this->cueType) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim);
this->unk_1EA &= ~4;
}
} else {
if (Cutscene_IsCueInChannel(play, this->cueType) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 4)) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004E04);
Animation_PlayLoop(&this->skelAnime, &gZoraBabySongLearnedAnim);
this->unk_1EA |= 4;
}
}
@ -444,14 +443,14 @@ void func_80B324B0(EnZoraegg* this, PlayState* play) {
this->unk_1E4 = Rand_ZeroFloat(5.0f);
}
} else if (this->unk_1EA & 4) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim);
this->unk_1EA &= ~4;
}
}
void func_80B32644(EnZoraegg* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim);
this->unk_1EE = 0;
this->unk_1EA |= 2;
}
@ -474,8 +473,8 @@ void func_80B326F4(EnZoraegg* this, PlayState* play) {
if (Cutscene_IsCueInChannel(play, this->cueType) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
Animation_Change(&this->skelAnime, &object_zoraegg_Anim_004D20, 1.0f, 0.0f,
Animation_GetLastFrame(&object_zoraegg_Anim_004D20), ANIMMODE_ONCE, 5.0f);
Animation_Change(&this->skelAnime, &gZoraBabyFormNoteAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gZoraBabyFormNoteAnim), ANIMMODE_ONCE, 5.0f);
this->unk_1E8 = 0;
this->actionFunc = func_80B32644;
SET_WEEKEVENTREG(WEEKEVENTREG_19_40);
@ -495,14 +494,14 @@ void func_80B32820(EnZoraegg* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->unk_1E8 >= 2) {
this->actionFunc = func_80B326F4;
Animation_Change(&this->skelAnime, &object_zoraegg_Anim_005098, 1.0f, 0.0f,
Animation_GetLastFrame(&object_zoraegg_Anim_005098), ANIMMODE_LOOP, 10.0f);
Animation_Change(&this->skelAnime, &gZoraBabySwimAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gZoraBabySwimAnim), ANIMMODE_LOOP, 10.0f);
this->unk_1E8 = 0;
SkelAnime_Update(&this->skelAnime);
return;
}
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4);
Animation_PlayOnce(&this->skelAnime, &gZoraBabySwimUpAnim);
this->unk_1E8 += 1;
SkelAnime_Update(&this->skelAnime);
}
@ -520,7 +519,7 @@ void func_80B32928(EnZoraegg* this, PlayState* play) {
}
if (SkelAnime_Update(&this->skelAnime)) {
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4);
Animation_PlayOnce(&this->skelAnime, &gZoraBabySwimUpAnim);
this->unk_1EA |= 1;
this->actionFunc = func_80B32820;
this->unk_1E8 = 0;
@ -653,13 +652,13 @@ void EnZoraegg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (DECR(this->unk_1F4) == 0) {
this->unk_1F4 = Rand_S16Offset(60, 60);
if (DECR(this->blinkTimer) == 0) {
this->blinkTimer = Rand_S16Offset(60, 60);
}
this->unk_1F2 = this->unk_1F4;
if (this->unk_1F2 >= 3) {
this->unk_1F2 = 0;
this->eyeIndex = this->blinkTimer;
if (this->eyeIndex >= 3) {
this->eyeIndex = 0;
}
}
@ -730,14 +729,14 @@ void func_80B331C8(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250);
gSPDisplayList(POLY_OPA_DISP++, gZoraEggDL);
} else {
Gfx_SetupDL72(POLY_XLU_DISP++);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->unk_1ED);
gSPDisplayList(POLY_XLU_DISP++, object_zoraegg_DL_005250);
gSPDisplayList(POLY_XLU_DISP++, gZoraEggDL);
}
Matrix_Pop();
@ -856,16 +855,15 @@ void EnZoraegg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
}
}
TexturePtr D_80B33950[] = { object_zoraegg_Tex_003430, object_zoraegg_Tex_004430, object_zoraegg_Tex_004830 };
void func_80B33818(Actor* thisx, PlayState* play) {
static TexturePtr sZoraBabyEyeTextures[] = { gZoraBabyEyeOpenTex, gZoraBabyEyeHalfTex, gZoraBabyEyeClosedTex };
EnZoraegg* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2]));
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sZoraBabyEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnZoraegg_OverrideLimbDraw, EnZoraegg_PostLimbDraw, &this->actor);

View File

@ -2,6 +2,7 @@
#define Z_EN_ZORAEGG_H
#include "global.h"
#include "objects/object_zoraegg/object_zoraegg.h"
struct EnZoraegg;
@ -44,8 +45,8 @@ typedef enum {
typedef struct EnZoraegg {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[7];
/* 0x1B2 */ Vec3s morphTable[7];
/* 0x188 */ Vec3s jointTable[ZORA_BABY_LIMB_MAX];
/* 0x1B2 */ Vec3s morphTable[ZORA_BABY_LIMB_MAX];
/* 0x1DC */ Actor* unk_1DC;
/* 0x1E0 */ f32 unk_1E0;
/* 0x1E4 */ f32 unk_1E4;
@ -56,8 +57,8 @@ typedef struct EnZoraegg {
/* 0x1EE */ u8 unk_1EE;
/* 0x1EF */ u8 unk_1EF;
/* 0x1F0 */ u16 cueType;
/* 0x1F2 */ s16 unk_1F2;
/* 0x1F4 */ s16 unk_1F4;
/* 0x1F2 */ s16 eyeIndex;
/* 0x1F4 */ s16 blinkTimer;
/* 0x1F8 */ EnZoraeggActionFunc actionFunc;
} EnZoraegg; // size = 0x1FC

View File

@ -4,6 +4,7 @@
* Description: Player
*/
#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64horse.h"
#include "z64quake.h"