diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index 2cc857d8..49569241 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -250,8 +250,8 @@ lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:double lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 data:double -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float @@ -372,12 +372,12 @@ lbl_1_data_3B1 = .data:0x000003B1; // type:object size:0x7 lbl_1_data_3B8 = .data:0x000003B8; // type:object size:0x48 lbl_1_data_400 = .data:0x00000400; // type:object size:0x3 data:string lbl_1_data_403 = .data:0x00000403; // type:object size:0xD -lbl_1_data_410 = .data:0x00000410; // type:object size:0x8 data:string -lbl_1_data_418 = .data:0x00000418; // type:object size:0x8 data:string -lbl_1_data_420 = .data:0x00000420; // type:object size:0x8 data:string -lbl_1_data_428 = .data:0x00000428; // type:object size:0x8 data:string -lbl_1_data_430 = .data:0x00000430; // type:object size:0x8 data:string -lbl_1_data_438 = .data:0x00000438; // type:object size:0x18 +lbl_1_data_410 = .data:0x00000410; // type:object size:0x8 scope:local data:string +lbl_1_data_418 = .data:0x00000418; // type:object size:0x8 scope:local data:string +lbl_1_data_420 = .data:0x00000420; // type:object size:0x8 scope:local data:string +lbl_1_data_428 = .data:0x00000428; // type:object size:0x8 scope:local data:string +lbl_1_data_430 = .data:0x00000430; // type:object size:0x8 scope:local data:string +lbl_1_data_438 = .data:0x00000438; // type:object size:0x18 scope:local lbl_1_data_450 = .data:0x00000450; // type:object size:0x4 data:4byte lbl_1_data_454 = .data:0x00000454; // type:object size:0x2 data:2byte lbl_1_data_456 = .data:0x00000456; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index 63cdb22b..550eb7bc 100644 --- a/configure.py +++ b/configure.py @@ -995,7 +995,7 @@ config.libs = [ Object(Matching, "REL/w03Dll/statue.c"), Object(NonMatching, "REL/w03Dll/condor.c"), Object(NonMatching, "REL/w03Dll/river.c"), - Object(NonMatching, "REL/w03Dll/smoke.c"), + Object(Matching, "REL/w03Dll/smoke.c"), Object(NonMatching, "REL/w03Dll/mg_coin.c"), Object(NonMatching, "REL/w03Dll/mg_item.c"), } diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 29d6b709..461baf08 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -19,7 +19,7 @@ extern int SystemInitF; -static Process *objman; +static Process *objman[2]; Vec lbl_1_bss_3C[2]; Vec lbl_1_bss_24[2]; float lbl_1_bss_1C[2]; @@ -42,11 +42,13 @@ static BOOL TitleProc(void); void *logoReadNintendo(void); +#define M_PI 3.141592653589793 + void ModuleProlog(void) { omOvlHisData *history; OSReport("******* Boot ObjectSetup *********\n"); - objman = omInitObjMan(50, 8192); + objman[0] = omInitObjMan(50, 8192); lbl_1_bss_3C[0].x = -67; lbl_1_bss_3C[0].y = 40; lbl_1_bss_3C[0].z = 0; @@ -384,9 +386,62 @@ void fn_1_1178(void) } } -void fn_1_152C(void) -{ - +//NON_MATCHING, only one in file +void fn_1_152C(void) { + Point3d temp_f0; + Point3d temp_f0_4; + Point3d temp_f0_7; + Point3d sp8; + + f32 temp_f31; + s32 var_r30; + s8 temp_r31; + + if ((HuPadBtnDown[0] & 0x800)) { + if (lbl_1_bss_0 != 0) { + var_r30 = 0; + } else { + var_r30 = 1; + } + lbl_1_bss_0 = var_r30; + } + if (lbl_1_bss_0 != 0) { + lbl_1_bss_3C->y += 0.1f * HuPadStkX[0]; + lbl_1_bss_3C->x += 0.1f * HuPadStkY[0]; + *lbl_1_bss_1C += HuPadTrigL[0] / 2; + *lbl_1_bss_1C -= HuPadTrigR[0] / 2; + if (*lbl_1_bss_1C < 100.0f) { + *lbl_1_bss_1C = 100.0f; + } + temp_f0.x = lbl_1_bss_24->x + (*lbl_1_bss_1C * (sin((M_PI * lbl_1_bss_3C->y) / 180.0) * cos((M_PI * lbl_1_bss_3C->x) / 180.0))); + temp_f0.y = (lbl_1_bss_24->y + (*lbl_1_bss_1C * -sin((M_PI * lbl_1_bss_3C->x) / 180.0))); + temp_f0.z = (lbl_1_bss_24->z + (*lbl_1_bss_1C * (cos((M_PI * lbl_1_bss_3C->y) / 180.0) * cos((M_PI * lbl_1_bss_3C->x) / 180.0)))); + temp_f0_4.x = lbl_1_bss_24->x - temp_f0.x; + temp_f0_4.y = lbl_1_bss_24->y - temp_f0.y; + temp_f0_4.z = lbl_1_bss_24->z - temp_f0.z; + temp_f0_7.x = (sin((M_PI * lbl_1_bss_3C->y) / 180.0) * sin((M_PI * lbl_1_bss_3C->x) / 180.0)); + temp_f0_7.y = cos((M_PI * lbl_1_bss_3C->x) / 180.0); + temp_f0_7.z = (cos((M_PI * lbl_1_bss_3C->y) / 180.0) * sin((M_PI * lbl_1_bss_3C->x) / 180.0)); + temp_f31 = lbl_1_bss_3C->z; + sp8.x = ((temp_f0_7.x * ((temp_f0_4.x * temp_f0_4.x) + ((1.0f - (temp_f0_4.x * temp_f0_4.x)) * cos((M_PI * temp_f31) / 180.0)))) + temp_f0_7.y * (((temp_f0_4.x * temp_f0_4.y) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.z * sin((M_PI * temp_f31) / 180.0)) + temp_f0_7.z * (((temp_f0_4.x * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.y * sin((M_PI * temp_f31) / 180.0))); + sp8.y = ((temp_f0_7.y * ((temp_f0_4.y * temp_f0_4.y) + ((1.0f - (temp_f0_4.y * temp_f0_4.y)) * cos((M_PI * temp_f31) / 180.0)))) + temp_f0_7.x * (((temp_f0_4.x * temp_f0_4.y) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.z * sin((M_PI * temp_f31) / 180.0)) + temp_f0_7.z * (((temp_f0_4.y * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.x * sin((M_PI * temp_f31) / 180.0))); + sp8.z = ((temp_f0_7.z * (temp_f0_4.z * temp_f0_4.z + ((1.0f - (temp_f0_4.z * temp_f0_4.z)) * cos((M_PI * temp_f31) / 180.0)))) + (temp_f0_7.x * (((temp_f0_4.x * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.y * sin((M_PI * temp_f31) / 180.0))) + temp_f0_7.y * (((temp_f0_4.y * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.x * sin((M_PI * temp_f31) / 180.0))); + PSVECCrossProduct(&temp_f0_7, &temp_f0_4, &temp_f0_4); + PSVECNormalize(&temp_f0_4, &temp_f0_4); + temp_r31 = (HuPadSubStkX[0] & 0xF8); + if (temp_r31 != 0) { + lbl_1_bss_24->x += 0.05f * (temp_f0_4.x * temp_r31); + lbl_1_bss_24->y += 0.05f * (temp_f0_4.y * temp_r31); + lbl_1_bss_24->z += 0.05f * (temp_f0_4.z * temp_r31); + } + PSVECNormalize(&sp8, &temp_f0_4); + temp_r31 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r31 != 0) { + lbl_1_bss_24->x += 0.05f * (temp_f0_4.x * temp_r31); + lbl_1_bss_24->y += 0.05f * (temp_f0_4.y * temp_r31); + lbl_1_bss_24->z += 0.05f * (temp_f0_4.z * temp_r31); + } + } } static void TitleInit(void) @@ -486,5 +541,6 @@ static BOOL TitleProc(void) HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN); HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN); HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN); + fn_1_152C(); return 0; } \ No newline at end of file diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c new file mode 100644 index 00000000..8f8f0f9c --- /dev/null +++ b/src/REL/w03Dll/smoke.c @@ -0,0 +1,83 @@ +#include "dolphin.h" +#include "game/object.h" +#include "REL/w03Dll.h" +#include "board_unsplit.h" +#include "game/board/main.h" + +typedef struct w03UnkWorkStruct { + s16 unk_00[5]; + char unk_0A[2]; + f32 unk_0C; +} w03UnkWorkStruct; + +extern w03State* lbl_1_bss_0; +extern omObjData* lbl_1_bss_138; +extern Process *boardObjMan; +extern s16 lbl_1_data_1E0; + +void fn_1_79E0(omObjData* arg0); +f32 BoardModelMotionMaxTimeGet(s16); + +char kemuri1[] = "kemuri1"; +char kemuri2[] = "kemuri2"; +char kemuri3[] = "kemuri3"; +char kemuri4[] = "kemuri4"; +char kemuri5[] = "kemuri5"; + +char* kemuri_strings[] = { + kemuri1, kemuri2, kemuri3, + kemuri4, kemuri5 +}; + +void fn_1_785C(void) { + f32 var_f31; + s32 i; + w03UnkWorkStruct* temp_r31; + char* temp_r29; + + lbl_1_bss_138 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_79E0); + temp_r31 = (w03UnkWorkStruct*)&lbl_1_bss_138->work[0]; + for (i = 0; i < 5; i++) { + temp_r31->unk_00[i] = BoardModelCreate(0x770008, NULL, 0); + temp_r29 = kemuri_strings[i]; + if (0.0f == temp_r31->unk_0C) { + temp_r31->unk_0C = BoardModelMotionMaxTimeGet(temp_r31->unk_00[i]); + } + var_f31 = temp_r31->unk_0C * BoardRandFloat(); + if (var_f31 < 1.0f) { + var_f31 = 1.0f; + } + BoardModelHookSet(lbl_1_data_1E0, temp_r29, temp_r31->unk_00[i]); + BoardModelMotionStart(temp_r31->unk_00[i], 0, 0x40000001); + BoardModelMotionTimeSet(temp_r31->unk_00[i], var_f31); + BoardModelLayerSet(temp_r31->unk_00[i], 2); + BoardModelPassSet(temp_r31->unk_00[i], 0); + } +} + +void fn_1_79E0(omObjData* arg0) { + s32 var_r29; + s32 i; + w03UnkWorkStruct* temp_r30; + + temp_r30 = (w03UnkWorkStruct*)&arg0->work[0]; + + if (BoardIsKill() != 0) { + for (i = 0; i < 5; i++) { + BoardModelKill(temp_r30->unk_00[i]); + } + lbl_1_bss_138 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (lbl_1_bss_0->unk3 != 0) { + var_r29 = 0; + } else { + var_r29 = 1; + } + for (i = 0; i < 5; i++) { + BoardModelVisibilitySet(temp_r30->unk_00[i], var_r29); + } +} + +char pad[4] = "\0\0\0\0"; \ No newline at end of file