diff --git a/cucco-lady-hat.patch b/cucco-lady-hat.patch new file mode 100644 index 000000000..9e6b406a5 Binary files /dev/null and b/cucco-lady-hat.patch differ diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL new file mode 100644 index 000000000..ab8fdf45f --- /dev/null +++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0 new file mode 100644 index 000000000..980452845 --- /dev/null +++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0 @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0 new file mode 100644 index 000000000..8a64cdf18 --- /dev/null +++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0 @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour b/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour new file mode 100644 index 000000000..d1d036f89 --- /dev/null +++ b/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index b31e3f388..95a3ec1b3 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -8,6 +8,9 @@ // On Mac, not using aligned resource names was causing crashes in release builds // objects +#define dgCuccoLadyHatDL "__OTR__objects/object_festivehats/gCuccoLadyHatDL" +static const ALIGN_ASSET(2) char gCuccoLadyHatDL[] = dgCuccoLadyHatDL; + #define dgChristmasGreenTreasureChestFrontTex "__OTR__objects/object_box/gChristmasGreenTreasureChestFrontTex" static const ALIGN_ASSET(2) char gChristmasGreenTreasureChestFrontTex[] = dgChristmasGreenTreasureChestFrontTex; diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 820f2c672..4370e6338 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -10,6 +10,7 @@ #include "soh/Enhancements/randomizer/draw.h" #include +#include typedef struct { /* 0x00 */ u8 flag; @@ -1672,6 +1673,27 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Matrix_MultVec3f(&sZeroVec, D_80160000); } + if (CVarGetInteger("gLetItSnow", 0)) { + if (limbIndex == PLAYER_LIMB_HEAD) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_RotateZYX(0, 0, -0x4000, MTXMODE_APPLY); + if (LINK_IS_ADULT) { + Matrix_Translate(200.0f, 0.0f, 0.0f, MTXMODE_APPLY); + } else { + Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); + } + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gCuccoLadyHatDL); + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + } + if (limbIndex == PLAYER_LIMB_L_HAND) { MtxF sp14C; Actor* hookedActor; diff --git a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c index 8ddf52fad..ac720f6f6 100644 --- a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c +++ b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c @@ -4,6 +4,7 @@ #include "overlays/actors/ovl_En_Niw/z_en_niw.h" #include "vt.h" #include "soh/Enhancements/randomizer/adult_trade_shuffle.h" +#include #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED) @@ -601,6 +602,20 @@ s32 EnNiwLady_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 return false; } +s32 EnNiwLady_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) { + EnNiwLady* this = (EnNiwLady*)thisx; + + if (CVarGetInteger("gLetItSnow", 0)) { + if (limbIndex == 15) { + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gCuccoLadyHatDL); + CLOSE_DISPS(play->state.gfxCtx); + } + } + + return false; +} + void EnNiwLady_Draw(Actor* thisx, PlayState* play) { static void* sEyeTextures[] = { gCuccoLadyEyeOpenTex, gCuccoLadyEyeHalfTex, gCuccoLadyEyeClosedTex }; EnNiwLady* this = (EnNiwLady*)thisx; @@ -612,7 +627,7 @@ void EnNiwLady_Draw(Actor* thisx, PlayState* play) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->faceState])); gSPSegment(POLY_OPA_DISP++, 0x0C, func_80ABB0A0(play->state.gfxCtx)); - SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwLady_OverrideLimbDraw, NULL, this); + SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwLady_OverrideLimbDraw, EnNiwLady_PostLimbDraw, this); } CLOSE_DISPS(play->state.gfxCtx); }