From 3cb84d1f21ba438ffc7c36e9bcceec6ce0ae187d Mon Sep 17 00:00:00 2001 From: zestydevy Date: Sat, 10 Feb 2024 11:26:23 -0600 Subject: [PATCH] matched modeltest00.c --- .../GMPE01_00/rels/modeltestDll/symbols.txt | 58 ++-- configure.py | 2 +- include/REL/modeltestDll.h | 4 + include/unsplit.h | 1 + src/REL/modeltestDll/modeltest00.c | 250 ++++++++++++++++++ 5 files changed, 285 insertions(+), 30 deletions(-) diff --git a/config/GMPE01_00/rels/modeltestDll/symbols.txt b/config/GMPE01_00/rels/modeltestDll/symbols.txt index f6f8dd36..e8215199 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -73,36 +73,36 @@ lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data: lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0xC data:4byte lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0xC data:4byte -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC data:4byte -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:4byte +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:float lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float @@ -166,7 +166,7 @@ lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C scope:local data:str lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:string lbl_1_data_322 = .data:0x00000322; // type:object size:0x36 lbl_1_data_358 = .data:0x00000358; // type:object size:0x8 -lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 data:string +lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 scope:local data:string lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x58 lbl_1_data_408 = .data:0x00000408; // type:object size:0x58 diff --git a/configure.py b/configure.py index ac6cc8ac..3e0d8918 100644 --- a/configure.py +++ b/configure.py @@ -865,7 +865,7 @@ config.libs = [ objects = { Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeltestDll/main.c"), - Object(NonMatching, "REL/modeltestDll/modeltest00.c"), + Object(Matching, "REL/modeltestDll/modeltest00.c"), Object(NonMatching, "REL/modeltestDll/modeltest01.c"), } ), diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h index 40e74cc0..0715ad9b 100644 --- a/include/REL/modeltestDll.h +++ b/include/REL/modeltestDll.h @@ -3,6 +3,7 @@ #include "game/hsfdraw.h" #include "game/objsub.h" +#include "game/object.h" // -------------------------------------------------------------------------- // @@ -35,6 +36,9 @@ extern f32 CZoom; void fn_1_29C(); void fn_1_28F8(Point3d * arg0, Point3d * arg1); extern void omOutView(); +void fn_1_37DC(omObjData*); +void fn_1_439C(omObjData*); +void fn_1_46F0(); s16 MGSeqCreate(s16, ...); void MGSeqParamSet(s16, s16, s16); diff --git a/include/unsplit.h b/include/unsplit.h index 35d6ade4..0dd04666 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -20,6 +20,7 @@ void CharModelMotionTimeSet(s16 character, float time); void CharModelMotionSpeedSet(s16 character, float speed); void CharMotionKill(s16 character, s32 motion); void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); +void CharModelCreateCoinParticle(s16, Vec *); s32 CharModelMotionEndCheck(s16 character); diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index e69de29b..17381a22 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -0,0 +1,250 @@ +#include "math.h" +#include "unsplit.h" +#include "game/wipe.h" +#include "game/pad.h" + +#include "REL/modeltestDll.h" + +// -------------------------------------------------------------------------- // + +omObjData * unk_bss_9FC; +omObjData * lbl_1_bss_9F8; +omObjData * lbl_1_bss_9F4; +s16 lbl_1_bss_9EC[4]; +s16 lbl_1_bss_9AC[4][8]; +Process * lbl_1_bss_9A8; +u16 lbl_1_data_358[4] = {1, 2, 4, 8}; + +// -------------------------------------------------------------------------- // + +void fn_1_34B0() +{ + Process * temp_r30; + s16 var_r31; + s32 var_r29; + s32 var_r28; + + OSReport("******* MODELTESTObjectSetup *********\n"); + + temp_r30 = omInitObjMan(0x32, 0x2000); + CRot.x = -22.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 60.0f; + Center.z = 0.0f; + CZoom = 400.0f; + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + Hu3DCameraCreate(lbl_1_data_358[var_r31]); + Hu3DCameraPerspectiveSet(lbl_1_data_358[var_r31], 45.0f, 20.0f, 20000.0f, 1.2f); + + if ((var_r31 & 2) != 0) { + var_r29 = 0xF0; + } else { + var_r29 = 0; + } + + Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r29, 320.0f, 240.0f, 0.0f, 1.0f); + + if ((var_r31 & 2) != 0) { + var_r28 = 0xF0; + } else { + var_r28 = 0; + } + + Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r28, 320, 240); + } + + lbl_1_bss_9F4 = omAddObjEx(temp_r30, 0, 0x20U, 0x20U, -1, fn_1_37DC); + lbl_1_bss_9F8 = omAddObjEx(temp_r30, 0x7FDA, 0U, 0U, -1, fn_1_439C); + lbl_1_bss_9A8 = HuPrcCreate(fn_1_46F0, 0x64U, 0x2000U, 0); + + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); + WipeCreate(1, 0, 0x1E); +} + +// -------------------------------------------------------------------------- // + +static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) { + s8 temp_r28; + + temp_r28 = HuPadSubStkX[0] & 0xF8; + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } + PSVECNormalize(sp18, sp30); + temp_r28 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_37DC(omObjData *) +{ + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + float temp_f31; + + if ((HuPadBtnDown[0] & PAD_BUTTON_START) != 0) { + if (lbl_1_bss_9A8) { + HuPrcKill(lbl_1_bss_9A8); + } + omOvlReturnEx(1, 1); + return; + } + + if ((HuPadBtn[0] & PAD_BUTTON_UP) != 0) { + CRot.x += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0) { + CRot.x -= 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) { + CRot.y += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) { + CRot.y -= 2.0f; + } + + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + sp30.x = Center.x - sp3C.x; + sp30.y = Center.y - sp3C.y; + sp30.z = Center.z - sp3C.z; + sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + sp24.y = cos((M_PI * CRot.x) / 180.0); + sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + temp_f31 = CRot.z; + + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); + + sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); + + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); + + PSVECCrossProduct(&sp24, &sp30, &sp30); + PSVECNormalize(&sp30, &sp30); + + HuControlCamCenter(&sp18, &sp30); +} + +// -------------------------------------------------------------------------- // + +void fn_1_439C(omObjData * ) +{ + s16 var_r31; + f32 temp_f30; + f32 temp_f31; + f32 sp10; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + temp_f31 = CRot.x; + temp_f30 = CRot.y + (var_r31 * 90); + sp10 = CRot.z; + sp2C.x = Center.x + (CZoom * (sin((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + sp2C.y = Center.y + (CZoom * -sin((M_PI * temp_f31) / 180.0)); + sp2C.z = Center.z + (CZoom * (cos((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + + sp20.x = Center.x; + sp20.y = Center.y; + sp20.z = Center.z; + + sp14.x = sin((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + sp14.y = cos((M_PI * temp_f31) / 180.0); + sp14.z = cos((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + + Hu3DCameraPosSet(lbl_1_data_358[var_r31], sp2C.x, sp2C.y, sp2C.z, sp14.x, sp14.y, sp14.z, sp20.x, sp20.y, sp20.z); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_18C = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_198 = {0.0f, 1.0f, 0.0f}; + +// -------------------------------------------------------------------------- // + +void fn_1_46F0(void) +{ + Point3d sp20; + Point3d sp14; + Point3d sp8; + s16 var_r31; + s16 var_r30; + + sp14 = lbl_1_rodata_18C; + sp8 = lbl_1_rodata_198; + + Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowSizeSet(0xC0U); + + sp20.x = -500.0f; + sp20.y = 1000.0f; + sp20.z = 1000.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + var_r30 = var_r31; + lbl_1_bss_9EC[var_r31] = CharModelCreate(var_r30, 8); + Hu3DModelShadowSet(lbl_1_bss_9EC[var_r31]); + lbl_1_bss_9AC[var_r31][0] = CharMotionCreate(var_r30, 0x5F0002); + CharModelMotionSet(var_r30, lbl_1_bss_9AC[var_r31][0]); + Hu3DModelAttrSet(lbl_1_bss_9EC[var_r31], 0x40000001U); + Hu3DModelCameraSet(lbl_1_bss_9EC[var_r31], lbl_1_data_358[var_r31]); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], ((( var_r31 / 4) * 200) - 100), 0.0f, (-( var_r31 % 4) * 150)); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], 0.0f, 0.0f, 0.0f); + CharMotionDataClose(var_r30); + } + + var_r31 = Hu3DModelCreateFile(0x700024); + Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f); + Hu3DModelShadowMapSet(var_r31); + + while (TRUE) + { + if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { + Hu3DCameraKill(2); + Hu3DCameraKill(4); + Hu3DCameraKill(8); + sp20.x = + sp20.z = + sp20.y = 0.0f; + sp20.y += 200.0f; + CharModelCreateCoinParticle(4, &sp20); + } + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f}; + +// -------------------------------------------------------------------------- // \ No newline at end of file