diff --git a/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32 b/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32 new file mode 100644 index 000000000..4653f07d1 Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32 differ diff --git a/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32 b/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32 new file mode 100644 index 000000000..b905f21a9 Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32 differ diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL new file mode 100644 index 000000000..5b0d3694f --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_0 b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_0 new file mode 100644 index 000000000..bce87b152 --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_0 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_1 b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_1 new file mode 100644 index 000000000..ac9146850 --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_tri_1 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_0 b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_0 new file mode 100644 index 000000000..3b2a2a21c --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_0 @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_1 b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_1 new file mode 100644 index 000000000..a5aeeaa53 --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_1 @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_cull b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_cull new file mode 100644 index 000000000..6e79464b2 --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/gFrontGateDecorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_SnowBuildup b/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_SnowBuildup new file mode 100644 index 000000000..a79cca54f --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_SnowBuildup @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_StringGRGR b/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_StringGRGR new file mode 100644 index 000000000..b8478fa90 --- /dev/null +++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gFrontGateDecorDL_f3dlite_StringGRGR @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index a4a471f9f..b31e3f388 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -92,6 +92,9 @@ static const ALIGN_ASSET(2) char gXmasDecor100DL[] = dgXmasDecor100DL; #define dgXmasStarDL "__OTR__objects/object_xmas_tree/gXmasStarDL" static const ALIGN_ASSET(2) char gXmasStarDL[] = dgXmasStarDL; +#define dgFrontGateDecorDL "__OTR__objects/object_kakariko_decor/gFrontGateDecorDL" +static const ALIGN_ASSET(2) char gFrontGateDecorDL[] = dgFrontGateDecorDL; + // overlays #define dgOptionsDividerChangeLangVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerChangeLangVtx" static const ALIGN_ASSET(2) char gOptionsDividerChangeLangVtx[] = dgOptionsDividerChangeLangVtx; diff --git a/soh/soh/ActorDB.cpp b/soh/soh/ActorDB.cpp index 4e36f5e51..fe7d87a25 100644 --- a/soh/soh/ActorDB.cpp +++ b/soh/soh/ActorDB.cpp @@ -620,9 +620,26 @@ static ActorDBInit EnChristmasTreeInit = { }; extern "C" s16 gEnChristmasTreeId; +#include "src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h" +static ActorDBInit EnChristmasDecoInit = { + "En_ChristmasDeco", + "Christmas Decos", + ACTORCAT_PROP, + (ACTOR_FLAG_DRAW_WHILE_CULLED), + OBJECT_GAMEPLAY_KEEP, + sizeof(EnChristmasDeco), + (ActorFunc)EnChristmasDeco_Init, + (ActorFunc)EnChristmasDeco_Destroy, + (ActorFunc)EnChristmasDeco_Update, + (ActorFunc)EnChristmasDeco_Draw, + nullptr, +}; +extern "C" s16 gEnChristmasDecoId; + void ActorDB::AddBuiltInCustomActors() { gEnPartnerId = ActorDB::Instance->AddEntry(EnPartnerInit).entry.id; gEnChristmasTreeId = ActorDB::Instance->AddEntry(EnChristmasTreeInit).entry.id; + gEnChristmasDecoId = ActorDB::Instance->AddEntry(EnChristmasDecoInit).entry.id; } extern "C" ActorDBEntry* ActorDB_Retrieve(const int id) { diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index de13f78e9..c61b2a33b 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -36,6 +36,7 @@ PlayState* gPlayState; s16 gEnPartnerId; s16 gEnChristmasTreeId; +s16 gEnChristmasDecoId; void OTRPlay_SpawnScene(PlayState* play, s32 sceneNum, s32 spawn); @@ -762,8 +763,10 @@ void Play_Init(GameState* thisx) { } if (play->sceneNum == SCENE_KAKARIKO_VILLAGE && Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT)) { - Actor_Spawn(&play->actorCtx, play, gEnChristmasTreeId, -734, 0, 420, 0, 0, 0, 1, true); + Actor_Spawn(&play->actorCtx, play, gEnChristmasTreeId, -734, 0, 420, 0, 0, 0, 0, true); } + + Actor_Spawn(&play->actorCtx, play, gEnChristmasDecoId, 0, 0, 0, 0, 0, 0, 0, true); } void Play_Update(PlayState* play) { diff --git a/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c new file mode 100644 index 000000000..49059b6bc --- /dev/null +++ b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c @@ -0,0 +1,42 @@ +/* + * File: z_en_christmasdeco.c + * Overlay: ovl_En_ChristmasDeco + * Description: Custom Christmas Decorations + */ + +#include "z_en_christmasdeco.h" +#include "soh_assets.h" + +void EnChristmasDeco_Init(Actor* thisx, PlayState* play); +void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play); +void EnChristmasDeco_Update(Actor* thisx, PlayState* play); +void EnChristmasDeco_Draw(Actor* thisx, PlayState* play); + +void EnChristmasDeco_Init(Actor* thisx, PlayState* play) { + +} + +void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play) { + +} + +void EnChristmasDeco_Update(Actor* thisx, PlayState* play) { + +} + +void EnChristmasDeco_Draw(Actor* thisx, PlayState* play) { + float decoSize = 1000.0f; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL_25Opa(play->state.gfxCtx); + + Matrix_Scale(decoSize, decoSize, decoSize, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + + if (play->sceneNum == SCENE_KAKARIKO_VILLAGE) { + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFrontGateDecorDL); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h new file mode 100644 index 000000000..f2a317648 --- /dev/null +++ b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h @@ -0,0 +1,27 @@ +#ifndef Z_EN_CHRISTMASDECO_H +#define Z_EN_CHRISTMASDECO_H + +#include +#include "global.h" + +struct EnChristmasDeco; + +typedef void (*EnChristmasDecoActionFunc)(struct EnChristmasDeco*, PlayState*); + +typedef struct EnChristmasDeco { + Actor actor; + EnChristmasDecoActionFunc actionFunc; +} EnChristmasDeco; + +#ifdef __cplusplus +extern "C" { +#endif +void EnChristmasDeco_Init(Actor* thisx, PlayState* play); +void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play); +void EnChristmasDeco_Update(Actor* thisx, PlayState* play); +void EnChristmasDeco_Draw(Actor* thisx, PlayState* play); +#ifdef __cplusplus +} +#endif + +#endif