From 122e4f3982ef731b04c6f0dfd5f62ad927419330 Mon Sep 17 00:00:00 2001 From: Maide <34639600+Kelebek1@users.noreply.github.com> Date: Tue, 12 Jul 2022 03:21:04 +0100 Subject: [PATCH] Obj_Toudai (#892) * Obj_Toudai * PR --- assets/xml/overlays/ovl_Obj_Toudai.xml | 7 ++ spec | 3 +- .../actors/ovl_Obj_Toudai/z_obj_toudai.c | 103 ++++++++++++++++-- .../actors/ovl_Obj_Toudai/z_obj_toudai.h | 12 +- undefined_syms.txt | 5 - 5 files changed, 110 insertions(+), 20 deletions(-) create mode 100644 assets/xml/overlays/ovl_Obj_Toudai.xml diff --git a/assets/xml/overlays/ovl_Obj_Toudai.xml b/assets/xml/overlays/ovl_Obj_Toudai.xml new file mode 100644 index 0000000000..989c47a722 --- /dev/null +++ b/assets/xml/overlays/ovl_Obj_Toudai.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spec b/spec index 449dbefea7..51185d0393 100644 --- a/spec +++ b/spec @@ -2655,8 +2655,7 @@ beginseg name "ovl_Obj_Toudai" compress include "build/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.o" - include "build/data/ovl_Obj_Toudai/ovl_Obj_Toudai.data.o" - include "build/data/ovl_Obj_Toudai/ovl_Obj_Toudai.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Toudai/ovl_Obj_Toudai_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c index 508da5040f..4a71acc950 100644 --- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c +++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c @@ -5,6 +5,7 @@ */ #include "z_obj_toudai.h" +#include "objects/object_f53_obj/object_f53_obj.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -15,7 +16,6 @@ void ObjToudai_Destroy(Actor* thisx, PlayState* play); void ObjToudai_Update(Actor* thisx, PlayState* play); void ObjToudai_Draw(Actor* thisx, PlayState* play); -#if 0 const ActorInit Obj_Toudai_InitVars = { ACTOR_OBJ_TOUDAI, ACTORCAT_PROP, @@ -28,21 +28,102 @@ const ActorInit Obj_Toudai_InitVars = { (ActorFunc)ObjToudai_Draw, }; -#endif +#include "assets/overlays/ovl_Obj_Toudai/ovl_Obj_Toudai.c" -extern UNK_TYPE D_060023B0; -extern UNK_TYPE D_060024E8; +void func_80A33B00(ObjToudai* this, PlayState* play) { + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/func_80A33B00.s") + OPEN_DISPS(play->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/func_80A33BB4.s") + func_8012C28C(play->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/func_80A342F4.s") + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_f53_obj_DL_0024E8); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/ObjToudai_Init.s") + CLOSE_DISPS(play->state.gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/ObjToudai_Destroy.s") +void func_80A33BB4(ObjToudai* this, PlayState* play) { + u8 sp57; + u8 sp56; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/ObjToudai_Update.s") + this->unk_22C += 1.8f; + this->unk_230 += 0.6f; + sp57 = this->unk_22C; + sp56 = this->unk_230; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Toudai/ObjToudai_Draw.s") + this->unk_228 = CLAMP(this->unk_228, 0.0f, 1.0f); + + for (i = 0; i < ARRAY_COUNT(ovl_Obj_Toudai_Vtx_D_80A34590); i++) { + this->unk_148[i].v.cn[3] = ovl_Obj_Toudai_Vtx_D_80A34590[i].v.cn[3] * this->unk_228; + } + + if (this->unk_228 > 0.0f) { + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); + Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(play->state.gfxCtx); + + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x80, 1, 0, sp56, 0x20, 0x20)); + gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(this->unk_148)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_f53_obj_DL_0023B0); + + CLOSE_DISPS(play->state.gfxCtx); + } +} + +u8 func_80A342F4(s16 arg0) { + u8 var_v1 = 0; + s16 minutes = TIME_TO_MINUTES_F(gSaveContext.save.time); + s32 hours = minutes / 60; + + if (hours >= 17) { + if ((hours == 17) && ((minutes % 60) < arg0)) { + return var_v1; + } + var_v1 = 2; + } else if (hours < 6) { + if ((hours == 5) && ((minutes % 60) < arg0)) { + return var_v1; + } + var_v1 = 1; + } + return var_v1; +} + +void ObjToudai_Init(Actor* thisx, PlayState* play) { + ObjToudai* this = THIS; + + Lib_MemCpy(this->unk_148, &ovl_Obj_Toudai_Vtx_D_80A34590, sizeof(ovl_Obj_Toudai_Vtx_D_80A34590)); +} + +void ObjToudai_Destroy(Actor* thisx, PlayState* play) { +} + +void ObjToudai_Update(Actor* thisx, PlayState* play) { + ObjToudai* this = THIS; + u8 temp_v0 = func_80A342F4(this->unk_238); + + if (temp_v0 != this->unk_236) { + this->unk_236 = temp_v0; + this->unk_238 = Rand_S16Offset(0, 50); + } + + Math_ApproachF(&this->unk_228, (this->unk_236 == 0) ? 0.0f : 1.0f, 0.01f, 1000.0f); + this->unk_234 += 100; + thisx->shape.rot.y = (s16)(Math_SinS(this->unk_234) * 16000.0f) + thisx->world.rot.y; +} + +void ObjToudai_Draw(Actor* thisx, PlayState* play) { + ObjToudai* this = THIS; + + func_80A33B00(this, play); + func_80A33BB4(this, play); +} diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h index ca28dc786a..c1af4d7332 100644 --- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h +++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h @@ -7,8 +7,16 @@ struct ObjToudai; typedef struct ObjToudai { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0xFC]; -} ObjToudai; // size = 0x240 + /* 0x144 */ UNK_TYPE1 pad144[4]; + /* 0x148 */ Vtx unk_148[14]; + /* 0x228 */ f32 unk_228; + /* 0x22C */ f32 unk_22C; + /* 0x230 */ f32 unk_230; + /* 0x234 */ s16 unk_234; + /* 0x236 */ u8 unk_236; + /* 0x238 */ s16 unk_238; + /* 0x23A */ UNK_TYPE1 pad23A[6]; +} ObjToudai;// size = 0x240 extern const ActorInit Obj_Toudai_InitVars; diff --git a/undefined_syms.txt b/undefined_syms.txt index f160ee7013..6e787b5066 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1525,11 +1525,6 @@ D_06001100 = 0x06001100; D_06001140 = 0x06001140; D_06001CB0 = 0x06001CB0; -// ovl_Obj_Toudai - -D_060023B0 = 0x060023B0; -D_060024E8 = 0x060024E8; - // ovl_Obj_Um D_06007E20 = 0x06007E20;