From ca2b9cd67b8ad18ef6c1cd16648c65197da19b45 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 4 Apr 2024 22:26:51 -0500 Subject: [PATCH 1/7] Start more work on resultdll Solve fn_1_B78 and fully decompile datalist.c --- config/GMPE01_00/rels/resultDll/symbols.txt | 7 +- configure.py | 2 +- include/REL/resultdll.h | 41 + src/REL/resultDll/datalist.c | 86 ++ src/REL/resultDll/main.c | 833 +++++++++----------- 5 files changed, 526 insertions(+), 443 deletions(-) create mode 100644 include/REL/resultdll.h create mode 100644 src/REL/resultDll/datalist.c diff --git a/config/GMPE01_00/rels/resultDll/symbols.txt b/config/GMPE01_00/rels/resultDll/symbols.txt index 85f1fdb6..acded739 100644 --- a/config/GMPE01_00/rels/resultDll/symbols.txt +++ b/config/GMPE01_00/rels/resultDll/symbols.txt @@ -132,8 +132,8 @@ lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0xDC data:4byte lbl_1_data_380 = .data:0x00000380; // type:object size:0x2 data:2byte @@ -188,7 +188,8 @@ lbl_1_bss_174 = .bss:0x00000174; // type:object size:0x4 data:4byte lbl_1_bss_178 = .bss:0x00000178; // type:object size:0x4 data:4byte lbl_1_bss_17C = .bss:0x0000017C; // type:object size:0x2 data:2byte lbl_1_bss_180 = .bss:0x00000180; // type:object size:0x4 data:4byte -lbl_1_bss_184 = .bss:0x00000184; // type:object size:0x8 data:4byte +lbl_1_bss_184 = .bss:0x00000184; // type:object size:0x4 data:4byte +lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte lbl_1_bss_190 = .bss:0x00000190; // type:object size:0x4 data:4byte lbl_1_bss_194 = .bss:0x00000194; // type:object size:0x1680 lbl_1_bss_1814 = .bss:0x00001814; // type:object size:0x14 diff --git a/configure.py b/configure.py index dc33a548..3fb21974 100644 --- a/configure.py +++ b/configure.py @@ -1055,7 +1055,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/resultDll/main.c"), Object(NonMatching, "REL/resultDll/battle.c"), - Object(NonMatching, "REL/resultDll/datalist.c"), + Object(Matching, "REL/resultDll/datalist.c"), } ), Rel('safDll', diff --git a/include/REL/resultdll.h b/include/REL/resultdll.h new file mode 100644 index 00000000..7f8a60e4 --- /dev/null +++ b/include/REL/resultdll.h @@ -0,0 +1,41 @@ +#ifndef RESULTDLL_H +#define RESULTDLL_H + +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/sprite.h" + +typedef struct datalist_model { + s32 datanum; + u32 attr; + s16 type; + s16 link; + s16 mot_link; + Vec pos; + Vec rot; + Vec scale; +} DataListModel; + +typedef struct datalist_sprite { + u32 datanum; + s16 attr; + s16 prio; + float x; + float y; + GXColor color; +} DataListSprite; + +void fn_1_6490(void); + +void fn_1_8FF8(DataListModel *model_list); +void fn_1_927C(DataListSprite *sprite_list); +void fn_1_93B4(void); + +extern s16 lbl_1_bss_1A9C[32]; +extern s16 lbl_1_bss_1A5C[32]; +extern s16 lbl_1_bss_1A1A[33]; +extern s16 lbl_1_bss_1A18; + +#endif \ No newline at end of file diff --git a/src/REL/resultDll/datalist.c b/src/REL/resultDll/datalist.c new file mode 100644 index 00000000..af956902 --- /dev/null +++ b/src/REL/resultDll/datalist.c @@ -0,0 +1,86 @@ +#include "REL/resultdll.h" + +s16 lbl_1_bss_1A9C[32]; +s16 lbl_1_bss_1A5C[32]; +s16 lbl_1_bss_1A1A[33]; +s16 lbl_1_bss_1A18; + +void fn_1_8FF8(DataListModel *model_list) +{ + DataListModel *list; + s16 i; + s16 model; + s16 clear_i; + ModelData *model_ptr; + void *data; + list = model_list; + for(clear_i=0; clear_i<32; clear_i++) { + lbl_1_bss_1A9C[clear_i] = lbl_1_bss_1A5C[clear_i] = -1; + } + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 0) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + model = Hu3DModelCreate(data); + lbl_1_bss_1A9C[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + model_ptr = &Hu3DData[model]; + if(model_ptr->unk_08 != -1) { + lbl_1_bss_1A5C[i] = model_ptr->unk_08; + } + } else if(list->type == 1) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_1A5C[i] = Hu3DJointMotion(lbl_1_bss_1A9C[list->mot_link], data); + + } + (void)i; + } + list = model_list; + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 2) { + model = Hu3DModelLink(lbl_1_bss_1A9C[list->link]); + lbl_1_bss_1A9C[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + } + if(list->mot_link != -1) { + Hu3DMotionSet(lbl_1_bss_1A9C[i], lbl_1_bss_1A5C[list->mot_link]); + } + (void)i; + } +} + +void fn_1_927C(DataListSprite *sprite_list) +{ + DataListSprite *list; + s16 sprite; + s16 clear_i; + s16 i; + list = sprite_list; + for(clear_i=0; clear_i<32; clear_i++) { + lbl_1_bss_1A1A[clear_i] = -1; + } + for(i=0; list->datanum; i++, list++) { + sprite = espEntry(list->datanum, 100, 0); + lbl_1_bss_1A1A[i] = sprite; + espPosSet(sprite, list->x, list->y); + espColorSet(sprite, list->color.r, list->color.g, list->color.b); + espTPLvlSet(sprite, list->color.a/255.0f); + espPriSet(sprite, list->prio); + espAttrSet(sprite, list->attr); + } +} + +void fn_1_93B4(void) +{ + s16 i; + for(i=0; i<32; i++) { + if(lbl_1_bss_1A1A[i] != -1) { + espKill(lbl_1_bss_1A1A[i]); + } + } +} \ No newline at end of file diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index 9eac3516..3d81e3bf 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -1,311 +1,226 @@ // include "REL/resultDll/main.h" #include "dolphin.h" #include "rel_sqrt_consts.h" -#include "game/gamework_data.h" -#include "game/gamework.h" -#include "game/hsfex.h" -#include "game/memory.h" -#include "game/armem.h" -#include "game/animdata.h" -#include "game/hsfman.h" #include "game/object.h" -#include "game/audio.h" -#include "game/saveload.h" -#include "game/sprite.h" +#include "game/data.h" #include "game/window.h" -#include "game/flag.h" -#include "game/wipe.h" +#include "game/hsfman.h" +#include "game/process.h" #include "game/objsub.h" +#include "game/audio.h" +#include "game/wipe.h" #include "game/pad.h" -// #include "game/frand.h" +#include "game/saveload.h" +#include "game/gamework.h" #include "game/board/player.h" -// #include "REL/resultDll/battle.h" -extern s16 lbl_1_bss_1A1A[0x21]; -extern s16 lbl_1_bss_1A9C[0x20]; -// structs -typedef struct unkStructData0 { - u32 unk0; - u32 unk4; - s16 unk8; - s16 unkA; - s16 unkC; - s16 unkE; - Vec unk10; - Vec unk1C; - Vec unk28; -} unkStructData0; -typedef struct unkStructData2A4 { - u32 unk0; - u32 unk4; - f32 unk8; - f32 unkC; - s32 unk10; -} unkStructData2A4; -typedef struct unkStructBSS12 { - s16 unk0; - s16 unk2; - s16 unk4; - s16 unk6; - s16 unk8; -} unkStructBSS12; +#include "REL/resultdll.h" -// bss -omObjData* lbl_1_bss_184[2]; -Process* lbl_1_bss_180; +DataListModel lbl_1_data_0[] = { + { 0x6F0000, 1, 0, -1, -1, { 148, 132, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0001, 1, 0, -1, -1, { 148, 217, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0002, 1, 0, -1, -1, { 148, 302, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0003, 1, 0, -1, -1, { 148, 387, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 0, -1, -1, { 230, 132, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 4, -1, { 230, 217, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 4, -1, { 230, 302, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 4, -1, { 230, 387, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0005, 0, 0, -1, -1, { 410, 132, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 8, -1, { 410, 217, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 8, -1, { 410, 302, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x6F0006, 0, 2, 8, -1, { 410, 387, 500 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } } +}; + +DataListSprite lbl_1_data_2A4[] = { + { 0x6F0043, 0, 10, 288, 240, { 255, 255, 255, 255 } }, + { 0x6F001D, 0, 10, 288, 60, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 270, 132, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 450, 132, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 270, 217, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 450, 217, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 270, 302, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 450, 302, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 270, 387, { 255, 255, 255, 255 } }, + { 0x6F001A, 0, 10, 450, 387, { 255, 255, 255, 255 } }, + { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } }, +}; + +s16 lbl_1_data_380 = -1; + +omObjData *lbl_1_bss_188; +omObjData *lbl_1_bss_184; +Process *lbl_1_bss_180; s16 lbl_1_bss_17C; s32 lbl_1_bss_178; s32 lbl_1_bss_174; s16 lbl_1_bss_172; s16 lbl_1_bss_170; s16 lbl_1_bss_168[4]; -s16 lbl_1_bss_158[8]; -AnimData* lbl_1_bss_144[5]; -AnimData* lbl_1_bss_E4[8][3]; -AnimData* lbl_1_bss_E0; +AnimData *lbl_1_bss_144[5]; +AnimData *lbl_1_bss_E4[8][3]; +AnimData *lbl_1_bss_E0; s16 lbl_1_bss_CE[9]; -S16Vec lbl_1_bss_9E[8]; +s16 lbl_1_bss_9E[8][3]; s16 lbl_1_bss_9C; s16 lbl_1_bss_5C[8][4]; -// extern ? lbl_1_bss_54; s16 lbl_1_bss_52; s16 lbl_1_bss_4A[4]; s16 lbl_1_bss_42[4]; s16 lbl_1_bss_3A[4]; -unkStructBSS12 lbl_1_bss_12[4]; -// extern ? lbl_1_bss_A; -// extern s16 lbl_1_bss_8; +s16 lbl_1_bss_12[4][5]; s32 lbl_1_bss_4; s32 lbl_1_bss_0; -// data -unkStructData0 lbl_1_data_0[13] = { - { 0x6F0000, 1, 0, -1, -1, 0, - { 148.0f, 132.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0001, 1, 0, -1, -1, 0, - { 148.0f, 217.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0002, 1, 0, -1, -1, 0, - { 148.0f, 302.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0003, 1, 0, -1, -1, 0, - { 148.0f, 387.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 0, -1, -1, 0, - { 230.0f, 132.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 4, -1, 0, - { 230.0f, 217.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 4, -1, 0, - { 230.0f, 302.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 4, -1, 0, - { 230.0f, 387.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0005, 0, 0, -1, -1, 0, - { 410.0f, 132.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 8, -1, 0, - { 410.0f, 217.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 8, -1, 0, - { 410.0f, 302.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { 0x6F0006, 0, 2, 8, -1, 0, - { 410.0f, 387.0f, 500.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, - { -1, 0, 0, -1, -1, 0, - { 0.0f, 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, 1.0f } }, -}; -unkStructData2A4 lbl_1_data_2A4[11] = { - { 0x6F0043, 10, 288.0f, 240.0f, -1 }, - { 0x6F001D, 10, 288.0f, 60.0f, -1 }, - { 0x6F001A, 10, 270.0f, 132.0f, -1 }, - { 0x6F001A, 10, 450.0f, 132.0f, -1 }, - { 0x6F001A, 10, 270.0f, 217.0f, -1 }, - { 0x6F001A, 10, 450.0f, 217.0f, -1 }, - { 0x6F001A, 10, 270.0f, 302.0f, -1 }, - { 0x6F001A, 10, 450.0f, 302.0f, -1 }, - { 0x6F001A, 10, 270.0f, 387.0f, -1 }, - { 0x6F001A, 10, 450.0f, 387.0f, -1 }, - { 0, 0, 0.0f, 0.0f, 0 }, -}; -s16 lbl_1_data_380 = -1; - -// rodata -// extern s32 saveExecF; - -// functions -void fn_1_6490(void); -void fn_1_8FF8(unkStructData0*); -void fn_1_927C(unkStructData2A4*); -void fn_1_1F4C(void); -void fn_1_2ADC(void); -void fn_1_3B50(s16 arg0, s16 arg1); -void fn_1_3CAC(s16 arg0, s16 arg1); -void fn_1_3E08(void); -void fn_1_3FD8(void); -void fn_1_40DC(void); -void fn_1_423C(s16 (*arg0)[]); -void fn_1_461C(void); -void fn_1_47FC(void); void fn_1_4D8(void); void fn_1_888(void); + void fn_1_B78(void); +void fn_1_1F4C(void); +void fn_1_2ADC(void); +void fn_1_3FD8(void); +void fn_1_40DC(void); +void fn_1_461C(void); +void fn_1_47FC(void); -void ModuleProlog(void) { - s32 var_r31; - s32 var_r30; - OSReport("******* RESULT ObjectSetup *********\n"); - lbl_1_bss_180 = omInitObjMan(0x32, 0x2000); - lbl_1_bss_17C = GWSystem.mg_next; - if (mgInfoTbl[lbl_1_bss_17C].ovl == 0x26) { - for (var_r31 = 0; var_r31 < 4; var_r31++) { - GWPlayerCfg[var_r31].group = GWPlayerCfg[var_r31].group / 2; - } - } - HuDataDirClose(mgInfoTbl[lbl_1_bss_17C].data_dir); - if (mgInfoTbl[lbl_1_bss_17C].type == 3 || mgInfoTbl[lbl_1_bss_17C].type == 5 || mgInfoTbl[lbl_1_bss_17C].type == 6 || _CheckFlag(0x10000U) == 0) { - if (_CheckFlag(0x10000) != 0) { - HuAR_DVDtoARAM(0x70000); - while (HuARDMACheck() != 0) {} - } - omOvlReturnEx(1, 1); - return; - } - - CRot.x = 0.0f; - CRot.y = 0.0f; - CRot.z = 0.0f; - Center.x = 0.0f; - Center.y = 0.0f; - Center.z = 0.0f; - CZoom = 500.0f; - Hu3DCameraCreate(1); - Hu3DCameraPerspectiveSet(1, 20.0f, 20.0f, 15000.0f, 1.2f); - Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); - var_r30 = Hu3DGLightCreate(0.0f, 100.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFF, 0xFF, 0xFF); - Hu3DGLightInfinitytSet(var_r30); - lbl_1_bss_174 = 0; - if (mgInfoTbl[GWSystem.mg_next].type != 4) { - HuPrcChildCreate(fn_1_4D8, 0x64, 0x3000, 0, lbl_1_bss_180); - } else { - HuPrcChildCreate(fn_1_6490, 0x64, 0x3000, 0, lbl_1_bss_180); - } - lbl_1_bss_184[0] = omAddObjEx(lbl_1_bss_180, 0x7FDA, 0U, 0U, -1, omOutView); - HuWinInit(1); - lbl_1_bss_172 = frandmod(4); +void ModuleProlog(void) +{ + s32 i; + s32 light; + OSReport("******* RESULT ObjectSetup *********\n"); + lbl_1_bss_180 = omInitObjMan(50, 8192); + lbl_1_bss_17C = GWSystem.mg_next; + + if(mgInfoTbl[lbl_1_bss_17C].ovl == OVL_M430) { + for(i=0; i<4; i++) { + GWPlayerCfg[i].group = GWPlayerCfg[i].group/2; + } + } + HuDataDirClose(mgInfoTbl[lbl_1_bss_17C].data_dir); + if(mgInfoTbl[lbl_1_bss_17C].type == 3 || mgInfoTbl[lbl_1_bss_17C].type == 5 || mgInfoTbl[lbl_1_bss_17C].type == 6 || !_CheckFlag(0x10000)) { + if(_CheckFlag(0x10000)) { + HuAR_DVDtoARAM(DATADIR_BOARD); + while(HuARDMACheck()); + } + omOvlReturnEx(1, 1); + return; + } + CRot.x = 0.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 500.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 20.0f, 20.0f, 15000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + light = Hu3DGLightCreate(0, 100, 1000, 0, -0.5, -1, 255, 255, 255); + Hu3DGLightInfinitytSet(light); + lbl_1_bss_174 = 0; + if(mgInfoTbl[GWSystem.mg_next].type != 4) { + HuPrcChildCreate(fn_1_4D8, 100, 12288, 0, lbl_1_bss_180); + + } else { + HuPrcChildCreate(fn_1_6490, 100, 12288, 0, lbl_1_bss_180); + } + lbl_1_bss_184 = omAddObjEx(lbl_1_bss_180, 32730, 0, 0, -1, omOutView); + HuWinInit(1); + lbl_1_bss_172 = frandmod(4); } -void fn_1_4D8(void) { - Process* sp8; - s32 var_r27; - s16 var_r28; - s16 var_r29; - s16 var_r30; - s16 var_r31; - - sp8 = HuPrcCurrentGet(); - HuAudSeqPlay(0x39); - for (var_r30 = var_r31 = 0; var_r30 < 4; var_r30++) { - if (GWPlayerCfg[var_r30].iscom != 0) { - var_r31++; - } - } - if (var_r31 == 4) { - lbl_1_bss_4 = 1; - } else { - lbl_1_bss_4 = 0; - } - fn_1_B78(); - HuPrcChildCreate(fn_1_888, 0x64, 0x2000, 0, lbl_1_bss_180); - WipeCreate(1, 0, 0x14); - while (WipeStatGet() != 0) HuPrcVSleep(); - HuDataDirClose(0x6F0000); - lbl_1_bss_178 = 0; - HuPrcChildCreate(fn_1_3FD8, 0x64, 0x3000, 0, lbl_1_bss_180); - HuPrcSleep(0xA); - if (lbl_1_bss_174 == 0) { - HuPrcSleep(0x14); - } - fn_1_1F4C(); - fn_1_40DC(); - fn_1_2ADC(); - var_r29 = HuWinCreate(-10000.0f, 400.0f, 0x140, 0x28, 0); - HuWinMesSpeedSet(var_r29 , 0); - HuWinBGTPLvlSet(var_r29 , 0.0f); - HuWinPriSet(var_r29, 5); - HuWinAttrSet(var_r29, 0x800); - HuWinMesSet(var_r29, 0x240007); - HuPrcSleep(4); - - var_r30 = 0; -loopHack: - if (lbl_1_bss_4 == 0 || var_r30 <= 0x78) { - for (var_r31 = var_r28 = 0; var_r31 < 4; var_r31++) { - if (GWPlayerCfg[var_r31].iscom == 0) { - var_r28 = var_r28 | HuPadBtnDown[GWPlayerCfg[var_r31].pad_idx]; - } - } - - if ((var_r28 & 0x100) != 0) { - HuAudFXPlay(0x1C); - } else { - HuPrcVSleep(); - var_r30++; - goto loopHack; - } - } - - HuWinKill(var_r29); - if ((s32) GWSystem.team != 0) { - fn_1_47FC(); - } - while (lbl_1_bss_178 == 0) HuPrcVSleep(); - HuAudSeqAllFadeOut(0x3E8); - WipeColorSet(0xFF, 0xFF, 0xFF); - if (GWSystem.save_mode == 3) { - GWSystem.save_mode = 1; - } - var_r27 = GWSystem.save_mode; - - if (var_r27 != 1 && SLSaveFlagGet() != 0) { - WipeCreate(2, 0, 0x1E); - while (WipeStatGet() != 0) { - HuPrcVSleep(); - } - fn_1_461C(); - } else { - WipeCreate(2, 0, 0x3C); - while (WipeStatGet() != 0) { - HuPrcVSleep(); - } - } - omSysPauseEnable(1); - omOvlReturnEx(1, 1); - HuPrcEnd(); - while (1) HuPrcVSleep(); +void fn_1_4D8(void) +{ + s16 player; + s16 i; + s16 window; + s16 button; + Process *process_curr = HuPrcCurrentGet(); + HuAudSeqPlay(57); + for(i=player=0; i<4; i++) { + if(GWPlayerCfg[i].iscom) { + player++; + } + } + if(player == 4) { + lbl_1_bss_4 = 1; + } else { + lbl_1_bss_4 = 0; + } + fn_1_B78(); + HuPrcChildCreate(fn_1_888, 100, 8192, 0, lbl_1_bss_180); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuDataDirClose(DATADIR_RESULT); + lbl_1_bss_178 = 0; + HuPrcChildCreate(fn_1_3FD8, 100, 12288, 0, lbl_1_bss_180); + HuPrcSleep(10); + if(!lbl_1_bss_174) { + HuPrcSleep(20); + } + fn_1_1F4C(); + fn_1_40DC(); + fn_1_2ADC(); + window = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0); + HuWinMesSpeedSet(window, 0); + HuWinBGTPLvlSet(window, 0); + HuWinPriSet(window, 5); + HuWinAttrSet(window, 0x800); + HuWinMesSet(window, 0x240007); + HuPrcSleep(4); + i=0; + while(1) { + if(!lbl_1_bss_4 || i <= 120) { + for(player=button=0; player<4; player++) { + if(!GWPlayerCfg[player].iscom) { + button |= HuPadBtnDown[GWPlayerCfg[player].pad_idx]; + } + } + if(button & PAD_BUTTON_A) { + HuAudFXPlay(28); + break; + } + HuPrcVSleep(); + i++; + } else { + break; + } + } + HuWinKill(window); + if(GWTeamGet()) { + fn_1_47FC(); + } + while(!lbl_1_bss_178) { + HuPrcVSleep(); + } + HuAudSeqAllFadeOut(1000); + WipeColorSet(255, 255, 255); + if(GWSaveModeGet() != 1 && SLSaveFlagGet()) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + fn_1_461C(); + } else { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + while(WipeStatGet()) { + HuPrcVSleep(); + } + } + omSysPauseEnable(1); + omOvlReturnEx(1, 1); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } } -void fn_1_888(void) { - f32 var_f29; +void fn_1_888(void) +{ + f32 var_f29; f32 var_f31; f32 var_f30; @@ -346,177 +261,217 @@ void fn_1_888(void) { } } -s32 lbl_1_data_3A8[6] = { 0x6F0010, 0x6F0011, 0x6F0012, 0x6F0013, 0x6F0014, 0x6F0015 }; -s32 lbl_1_data_3C0[6] = { 0x6F001F, 0x6F001E, 0x6F001D, 0x6F0021, 0x6F0020, 0x6F001F }; -s16 lbl_1_data_3D8[16] = { 0x140, 0x84, 0x1F4, 0x84, 0x0140, 0xD9, 0x1F4, 0xD9, 0x140, 0x12E, 0x1F4, 0x12E, 0x140, 0x183, 0x1F4, 0x183 }; -s16 lbl_1_data_3F8[8] = { 0x4A, 0x84, 0x4A, 0xD9, 0x4A, 0x12E, 0x4A, 0x183 }; -Vec lbl_1_data_408[4] = { { 148.0f, 132.0f, 500.0f }, { 148.0f, 217.0f, 500.0f }, { 148.0f, 302.0f, 500.0f }, { 148.0f, 387.0f, 500.0f } }; -s16 lbl_1_data_438[8] = { 0xA4, 0x94, 0xA4, 0xE9, 0xA4, 0x13E, 0xA4, 0x193 }; -// extern s8 lbl_1_data_448; -// extern ? lbl_1_data_450; -// extern ? lbl_1_data_488; -// extern s8 lbl_1_data_4B8; -// extern s8 lbl_1_data_4C9; -// extern s8 lbl_1_data_4DA; +s32 lbl_1_data_3A8[] = { + 0x006F0010, + 0x006F0011, + 0x006F0012, + 0x006F0013, + 0x006F0014, + 0x006F0015 +}; -void fn_1_B78(void) { - Vec sp14; - s16 sp8[5]; - AnimData* temp_r22; - AnimData* temp_r23; - AnimData* temp_r24; - s16 temp_r25; - s16 var_r26; - s16 temp_r27; - AnimData* temp_r28; - s16 temp_r29; - s16 temp_r3; - s16 var_r30; - s16 var_r31; +s32 lbl_1_data_3C0[] = { + 0x006F001F, + 0x006F001E, + 0x006F001D, + 0x006F0021, + 0x006F0020, + 0x006F001F +}; - fn_1_8FF8(&lbl_1_data_0[0]); - lbl_1_data_2A4[0].unk0 = lbl_1_data_3A8[mgInfoTbl[lbl_1_bss_17C].type]; - lbl_1_data_2A4[1].unk0 = lbl_1_data_3C0[mgInfoTbl[lbl_1_bss_17C].type]; - fn_1_927C(&lbl_1_data_2A4[0]); - espDrawNoSet(lbl_1_bss_1A1A[0], 0x7F); - temp_r28 = HuSprAnimReadFile(0x6F001B); - for (var_r31 = 0; var_r31 < 8; var_r31++) { - lbl_1_bss_CE[var_r31] = HuSprGrpCreate(3); - lbl_1_bss_9E[var_r31].x = HuSprCreate(temp_r28, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_CE[var_r31], 0, lbl_1_bss_9E[var_r31].x); - HuSprPosSet(lbl_1_bss_CE[var_r31], 0, -28.0f, 0.0f); - - lbl_1_bss_9E[var_r31].y = HuSprCreate(temp_r28, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_CE[var_r31], 1, lbl_1_bss_9E[var_r31].y); - HuSprPosSet(lbl_1_bss_CE[var_r31], 1, 0.0f, 0.0f); - - lbl_1_bss_9E[var_r31].z = HuSprCreate(temp_r28, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_CE[var_r31], 2, lbl_1_bss_9E[var_r31].z); - HuSprPosSet(lbl_1_bss_CE[var_r31], 2, 28.0f, 0.0f); - HuSprGrpPosSet(lbl_1_bss_CE[var_r31], lbl_1_data_3D8[var_r31 * 2], lbl_1_data_3D8[var_r31 * 2 + 1]); - - fn_1_3B50(lbl_1_bss_CE[var_r31], 0x3E7); - } - fn_1_3E08(); - fn_1_423C((s16 (*)[]) &sp8[0]); - temp_r28 = HuSprAnimReadFile(0x6F003A); - temp_r23 = HuSprAnimReadFile(0x6F003B); - temp_r24 = HuSprAnimReadFile(0x6F003C); - temp_r22 = HuSprAnimReadFile(0x6F003E); +s16 lbl_1_data_3D8[] = { + 320, 132, + 500, 132, + 320, 217, + 500, 217, + 320, 302, + 500, 302, + 320, 387, + 500, 387, +}; - for (var_r31 = 0; var_r31 < 4; var_r31++) { - lbl_1_bss_3A[var_r31] = HuSprGrpCreate(5); - if (sp8[lbl_1_bss_4A[var_r31]] < 0x64) { - lbl_1_bss_12[var_r31].unk0 = HuSprCreate(temp_r28, 10, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 0, lbl_1_bss_12[var_r31].unk0); - HuSprPosSet(lbl_1_bss_3A[var_r31], 0, 30.0f, -25.0f); - } else { - lbl_1_bss_12[var_r31].unk0 = HuSprCreate(temp_r22, 10, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 0, lbl_1_bss_12[var_r31].unk0); - HuSprPosSet(lbl_1_bss_3A[var_r31], 0, 30.0f, -25.0f); - } - lbl_1_bss_12[var_r31].unk2 = HuSprCreate(temp_r23, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 1, lbl_1_bss_12[var_r31].unk2); - HuSprPosSet(lbl_1_bss_3A[var_r31], 1, 12.0f, -25.0f); - - lbl_1_bss_12[var_r31].unk4 = HuSprCreate(temp_r24, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 2, lbl_1_bss_12[var_r31].unk4); - HuSprPosSet(lbl_1_bss_3A[var_r31], 2, 28.0f, -25.0f); - - lbl_1_bss_12[var_r31].unk6 = HuSprCreate(temp_r24, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 3, lbl_1_bss_12[var_r31].unk6); - HuSprPosSet(lbl_1_bss_3A[var_r31], 3, 44.0f, -25.0f); - - lbl_1_bss_12[var_r31].unk6 = HuSprCreate(temp_r24, 0, 0); - HuSprGrpMemberSet(lbl_1_bss_3A[var_r31], 3, lbl_1_bss_12[var_r31].unk6); - HuSprPosSet(lbl_1_bss_3A[var_r31], 3, 60.0f, -25.0f); +s16 lbl_1_data_3F8[] = { + 74, 132, + 74, 217, + 74, 302, + 74, 387 +}; - HuSprGrpPosSet(lbl_1_bss_3A[var_r31], lbl_1_data_438[var_r31 * 2], lbl_1_data_438[var_r31 * 2 + 1]); - fn_1_3CAC(lbl_1_bss_3A[var_r31], 9); - HuSprGrpScaleSet(lbl_1_bss_3A[var_r31], 0.0f, 0.0f); - } +Vec lbl_1_data_408[4] = { + { 148, 132, 500 }, + { 148, 217, 500 }, + { 148, 302, 500 }, + { 148, 387, 500 } +}; - for (var_r31 = 0; var_r31 < 4; var_r31++) { - temp_r29 = GWPlayerCfg[var_r31].character; - lbl_1_bss_E4[temp_r29][0] = HuSprAnimReadFile(temp_r29 * 3 + 0x6F0022); - lbl_1_bss_E4[temp_r29][1] = HuSprAnimReadFile(temp_r29 * 3 + 0x6F0023); - lbl_1_bss_E4[temp_r29][2] = HuSprAnimReadFile(temp_r29 * 3 + 0x6F0024); - for (var_r30 = 0; var_r30 < 4; var_r30++) { - lbl_1_bss_5C[temp_r29][var_r30] = Hu3DModelCreateFile(var_r30 + 0x6F0000); - Hu3DModelScaleSet(lbl_1_bss_5C[temp_r29][var_r30], 1.1f, 1.1f, 1.1f); - Hu3DAnimCreate(lbl_1_bss_E4[temp_r29], lbl_1_bss_5C[temp_r29][var_r30], "ys22"); - Hu3DModelAttrSet(lbl_1_bss_5C[temp_r29][var_r30], 1); - } - } +s16 lbl_1_data_438[] = { + 164, 148, + 164, 233, + 164, 318, + 164, 403 +}; - for (var_r31 = 0; var_r31 < 4; var_r31++) { - lbl_1_bss_144[var_r31] = HuSprAnimReadFile(var_r31 + 0x6F0016); - } +void fn_1_3B50(s16 group, s16 value); +void fn_1_3CAC(s16 group, s16 value); - lbl_1_bss_52 = HuSprGrpCreate(4); - for (var_r31 = 0; var_r31 < 4; var_r31++) { - HuSprGrpMemberSet(lbl_1_bss_52, var_r31, HuSprCreate(lbl_1_bss_144[lbl_1_bss_42[var_r31]], var_r31, 0)); - HuSprPosSet(lbl_1_bss_52, var_r31, lbl_1_data_3F8[var_r31 * 2], lbl_1_data_3F8[var_r31 * 2 + 1]); - fn_1_3B50(lbl_1_bss_CE[var_r31 * 2], GWStarsGet(lbl_1_bss_4A[var_r31])); - fn_1_3B50(lbl_1_bss_CE[var_r31 * 2 + 1], BoardPlayerCoinsGet(lbl_1_bss_4A[var_r31])); - temp_r29 = GWPlayerCfg[lbl_1_bss_4A[var_r31]].character; - Hu3D2Dto3D(&lbl_1_data_408[var_r31], 1, &sp14); - Hu3DModelPosSetV(lbl_1_bss_5C[temp_r29][lbl_1_bss_42[var_r31]], &sp14); - Hu3DModelAttrReset(lbl_1_bss_5C[temp_r29][lbl_1_bss_42[var_r31]], 1); - } +void fn_1_3E08(void); +void fn_1_423C(s16 *data); - for (var_r31 = 4; var_r31 <= 11; var_r31++) { - Hu3D2Dto3D(&lbl_1_data_0[var_r31].unk10, 1, &sp14); - Hu3DModelPosSetV(lbl_1_bss_1A9C[var_r31], &sp14); - Hu3D3Dto2D(&sp14, 1, &sp14); - } - - temp_r25 = Hu3DModelCreateFile(0x6F0004); - for (var_r31 = 0; var_r31 < 4; var_r31++) { - temp_r3 = Hu3DModelLink(temp_r25); - lbl_1_bss_168[var_r31] = temp_r3; - sp14 = lbl_1_data_408[var_r31]; - sp14.x += 5.0f; - sp14.y += 3.0f; - sp14.z += 200.0f; - Hu3D2Dto3D(&sp14, 1, &sp14); - Hu3DModelPosSetV(temp_r3, &sp14); - Hu3DModelScaleSet(temp_r3, 1.5f, 1.5f, 1.5f); - } - - Hu3DModelAttrSet(temp_r25, 1); - temp_r25 = Hu3DModelCreateFile(0x6F0007); - for (var_r31 = 0; var_r31 < 8; var_r31++) { - temp_r3 = Hu3DModelLink(temp_r25); - lbl_1_bss_158[var_r31] = temp_r3; - sp14 = lbl_1_data_0[var_r31 + 4].unk10; - sp14.x += 5.0f; - sp14.y += 3.0f; - sp14.z += 200.0f; - Hu3D2Dto3D(&sp14, 1, &sp14); - Hu3DModelPosSetV(temp_r3, &sp14); - Hu3DModelScaleSet(temp_r3, 1.5f, 1.5f, 1.5f); - } - - Hu3DModelAttrSet(temp_r25, 1); - lbl_1_bss_E0 = HuSprAnimReadFile(0x6F001C); - lbl_1_bss_9C = HuSprGrpCreate(4); - for (var_r31 = 0; var_r31 < 4; var_r31++) { - HuSprGrpMemberSet(lbl_1_bss_9C, var_r31, HuSprCreate(lbl_1_bss_E0, var_r31, 0)); - HuSprScaleSet(lbl_1_bss_9C, var_r31, 0.0f, 0.0f); - HuSprPosSet(lbl_1_bss_9C, var_r31, lbl_1_data_408[var_r31].x - 4.0f, lbl_1_data_408[var_r31].y - 35.0f); - HuSprAttrSet(lbl_1_bss_9C, var_r31, 4); - } - lbl_1_bss_170 = var_r26 = HuSprGrpCreate(4); - HuSprGrpMemberSet(var_r26, 0, HuSprCreate(HuSprAnimReadFile(0x6F003F), 0x64, 0)); - HuSprAttrSet(var_r26, 0, 4); - HuSprDrawNoSet(var_r26, 0, 0x7F); - HuSprGrpMemberSet(var_r26, 1, HuSprCreate(HuSprAnimReadFile(0x6F0040), 0x5A, 0)); - HuSprAttrSet(var_r26, 1, 4); - HuSprGrpMemberSet(var_r26, 2, HuSprCreate(HuSprAnimReadFile(0x6F0041), 0x50, 0)); - HuSprAttrSet(var_r26, 2, 4); - HuSprDrawNoSet(var_r26, 2, 0x7F); - HuSprGrpMemberSet(var_r26, 3, HuSprCreate(HuSprAnimReadFile(0x6F0042), 0x50, 0)); - HuSprAttrSet(var_r26, 3, 4); - HuSprDrawNoSet(var_r26, 3, 0x7F); -} +void fn_1_B78(void) +{ + Vec pos; + s16 sp8[5]; + s16 i; + s16 j; + s16 character; + AnimData *anim; + s16 sprite; + s16 group; + s16 model; + AnimData *anim2; + AnimData *anim3; + AnimData *anim4; + + fn_1_8FF8(lbl_1_data_0); + lbl_1_data_2A4[0].datanum = lbl_1_data_3A8[mgInfoTbl[lbl_1_bss_17C].type]; + lbl_1_data_2A4[1].datanum = lbl_1_data_3C0[mgInfoTbl[lbl_1_bss_17C].type]; + fn_1_927C(lbl_1_data_2A4); + espDrawNoSet(lbl_1_bss_1A1A[0], 127); + anim = HuSprAnimReadFile(0x6F001B); + for(i=0; i<8; i++) { + lbl_1_bss_CE[i] = HuSprGrpCreate(3); + lbl_1_bss_9E[i][0] = HuSprCreate(anim, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_CE[i], 0, lbl_1_bss_9E[i][0]); + HuSprPosSet(lbl_1_bss_CE[i], 0, -28.0f, 0.0f); + lbl_1_bss_9E[i][1] = HuSprCreate(anim, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_CE[i], 1, lbl_1_bss_9E[i][1]); + HuSprPosSet(lbl_1_bss_CE[i], 1, 0.0f, 0.0f); + lbl_1_bss_9E[i][2] = HuSprCreate(anim, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_CE[i], 2, lbl_1_bss_9E[i][2]); + HuSprPosSet(lbl_1_bss_CE[i], 2, 28.0f, 0.0f); + HuSprGrpPosSet(lbl_1_bss_CE[i], lbl_1_data_3D8[(i*2)], lbl_1_data_3D8[(i*2)+1]); + fn_1_3B50(lbl_1_bss_CE[i], 999); + } + fn_1_3E08(); + fn_1_423C(sp8); + anim = HuSprAnimReadFile(0x6F003A); + anim3 = HuSprAnimReadFile(0x6F003B); + anim2 = HuSprAnimReadFile(0x6F003C); + anim4 = HuSprAnimReadFile(0x6F003E); + for(i=0; i<4; i++) { + lbl_1_bss_3A[i] = HuSprGrpCreate(5); + if(sp8[lbl_1_bss_4A[i]] < 100) { + lbl_1_bss_12[i][0] = HuSprCreate(anim, 10, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 0, lbl_1_bss_12[i][0]); + HuSprPosSet(lbl_1_bss_3A[i], 0, 30.0f, -25.0f); + } else { + lbl_1_bss_12[i][0] = HuSprCreate(anim4, 10, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 0, lbl_1_bss_12[i][0]); + HuSprPosSet(lbl_1_bss_3A[i], 0, 40.0f, -21.0f); + } + lbl_1_bss_12[i][1] = HuSprCreate(anim3, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 1, lbl_1_bss_12[i][1]); + HuSprPosSet(lbl_1_bss_3A[i], 1, 12.0f, -25.0f); + lbl_1_bss_12[i][2] = HuSprCreate(anim2, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 2, lbl_1_bss_12[i][2]); + HuSprPosSet(lbl_1_bss_3A[i], 2, 28.0f, -25.0f); + lbl_1_bss_12[i][3] = HuSprCreate(anim2, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 3, lbl_1_bss_12[i][3]); + HuSprPosSet(lbl_1_bss_3A[i], 3, 44.0f, -25.0f); + lbl_1_bss_12[i][4] = HuSprCreate(anim2, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_3A[i], 4, lbl_1_bss_12[i][4]); + HuSprPosSet(lbl_1_bss_3A[i], 4, 60.0f, -25.0f); + HuSprGrpPosSet(lbl_1_bss_3A[i], lbl_1_data_3D8[(i*2)], lbl_1_data_3D8[(i*2)+1]); + fn_1_3CAC(lbl_1_bss_3A[i], 9); + HuSprGrpScaleSet(lbl_1_bss_3A[i], 0.0f, 0.0f); + } + for(i=0; i<4; i++) { + character = GWPlayerCfg[i].character; + lbl_1_bss_E4[character][0] = HuSprAnimReadFile(0x6F0022+(character*3)); + lbl_1_bss_E4[character][1] = HuSprAnimReadFile(0x6F0023+(character*3)); + lbl_1_bss_E4[character][2] = HuSprAnimReadFile(0x6F0024+(character*3)); + for(j=0; j<4; j++) { + lbl_1_bss_5C[character][j] = Hu3DModelCreateFile(0x6F0000+j); + Hu3DModelScaleSet(lbl_1_bss_5C[character][j], 1.1f, 1.1f, 1.1f); + Hu3DAnimCreate(lbl_1_bss_E4[character][0], lbl_1_bss_5C[character][j], "ys22"); + Hu3DModelAttrSet(lbl_1_bss_5C[character][j], 1); + } + } + for(i=0; i<4; i++) { + lbl_1_bss_144[i] = HuSprAnimReadFile(0x6F0016+i); + } + lbl_1_bss_52 = HuSprGrpCreate(4); + for(i=0; i<4; i++) { + sprite = HuSprCreate(lbl_1_bss_144[lbl_1_bss_42[i]], i, 0); + HuSprGrpMemberSet(lbl_1_bss_52, i, sprite); + HuSprPosSet(lbl_1_bss_52, i, lbl_1_data_3F8[(i*2)], lbl_1_data_3F8[(i*2)+1]); + fn_1_3B50(lbl_1_bss_CE[(i*2)], GWStarsGet(lbl_1_bss_4A[i])); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], BoardPlayerCoinsGet(lbl_1_bss_4A[i])); + character = GWPlayerCfg[lbl_1_bss_4A[i]].character; + Hu3D2Dto3D(&lbl_1_data_408[i], 1, &pos); + Hu3DModelPosSetV(lbl_1_bss_5C[character][lbl_1_bss_42[i]], &pos); + Hu3DModelAttrReset(lbl_1_bss_5C[character][lbl_1_bss_42[i]], 1); + } + for(i=4; i<=11; i++) { + Hu3D2Dto3D(&lbl_1_data_0[i].pos, 1, &pos); + Hu3DModelPosSetV(lbl_1_bss_1A9C[i], &pos); + Hu3D3Dto2D(&pos, 1, &pos); + } + model = Hu3DModelCreateFile(0x6F0004); + for(i=0; i<4; i++) { + j = Hu3DModelLink(model); + lbl_1_bss_168[i] = j; + pos = lbl_1_data_408[i]; + pos.x += 5.0f; + pos.y += 3.0f; + pos.z += 200.0f; + Hu3D2Dto3D(&pos, 1, &pos); + Hu3DModelPosSetV(j, &pos); + Hu3DModelScaleSet(j, 1.5f, 1.5f, 1.5f); + } + Hu3DModelAttrSet(model, 1); + model = Hu3DModelCreateFile(0x6F0007); + for(i=0; i<8; i++) { + j = Hu3DModelLink(model); + lbl_1_bss_168[i] = j; + pos = lbl_1_data_0[i+4].pos; + pos.x += 5.0f; + pos.y += 3.0f; + pos.z += 200.0f; + Hu3D2Dto3D(&pos, 1, &pos); + Hu3DModelPosSetV(j, &pos); + Hu3DModelScaleSet(j, 1.5f, 1.5f, 1.5f); + } + Hu3DModelAttrSet(model, 1); + lbl_1_bss_E0 = HuSprAnimReadFile(0x6F001C); + lbl_1_bss_9C = HuSprGrpCreate(4); + for(i=0; i<4; i++) { + sprite = HuSprCreate(lbl_1_bss_E0, i, 0); + HuSprGrpMemberSet(lbl_1_bss_9C, i, sprite); + HuSprScaleSet(lbl_1_bss_9C, i, 0.0f, 0.0f); + HuSprPosSet(lbl_1_bss_9C, i, lbl_1_data_408[i].x-4.0f, lbl_1_data_408[i].y-35.0f); + HuSprAttrSet(lbl_1_bss_9C, i, 4); + } + group = HuSprGrpCreate(4); + lbl_1_bss_170 = group; + anim = HuSprAnimReadFile(0x6F003F); + sprite = HuSprCreate(anim, 100, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprAttrSet(group, 0, 4); + HuSprDrawNoSet(group, 0, 127); + anim = HuSprAnimReadFile(0x6F0040); + sprite = HuSprCreate(anim, 90, 0); + HuSprGrpMemberSet(group, 1, sprite); + HuSprAttrSet(group, 1, 4); + anim = HuSprAnimReadFile(0x6F0041); + sprite = HuSprCreate(anim, 80, 0); + HuSprGrpMemberSet(group, 2, sprite); + HuSprAttrSet(group, 2, 4); + HuSprDrawNoSet(group, 2, 127); + anim = HuSprAnimReadFile(0x6F0042); + sprite = HuSprCreate(anim, 80, 0); + HuSprGrpMemberSet(group, 3, sprite); + HuSprAttrSet(group, 3, 4); + HuSprDrawNoSet(group, 3, 127); + (void)sprite; +} \ No newline at end of file From dd5b977ee0464760e5d541e1ca584da4e5f40dee Mon Sep 17 00:00:00 2001 From: mrshigure Date: Thu, 4 Apr 2024 23:07:25 -0700 Subject: [PATCH 2/7] Matched REL/w06/fire and bridge --- config/GMPE01_00/rels/w06Dll/symbols.txt | 166 +++++----- configure.py | 4 +- include/REL/w06Dll.h | 13 +- src/REL/w06Dll/bridge.c | 403 +++++++++++++++++++++++ src/REL/w06Dll/fire.c | 366 ++++++++++++++++++++ src/REL/w06Dll/main.c | 4 +- src/game/board/player.c | 2 +- 7 files changed, 869 insertions(+), 89 deletions(-) create mode 100755 src/REL/w06Dll/bridge.c create mode 100755 src/REL/w06Dll/fire.c diff --git a/config/GMPE01_00/rels/w06Dll/symbols.txt b/config/GMPE01_00/rels/w06Dll/symbols.txt index 511bbca8..dbc4f922 100644 --- a/config/GMPE01_00/rels/w06Dll/symbols.txt +++ b/config/GMPE01_00/rels/w06Dll/symbols.txt @@ -76,24 +76,24 @@ fn_1_6A0C = .text:0x00006A0C; // type:function size:0x240 scope:local fn_1_6C4C = .text:0x00006C4C; // type:function size:0x244 scope:local fn_1_6E90 = .text:0x00006E90; // type:function size:0x60 scope:local fn_1_6EF0 = .text:0x00006EF0; // type:function size:0x90 -fn_1_6F80 = .text:0x00006F80; // type:function size:0x290 -fn_1_7210 = .text:0x00007210; // type:function size:0x94 -fn_1_72A4 = .text:0x000072A4; // type:function size:0x28 -fn_1_72CC = .text:0x000072CC; // type:function size:0x120 -fn_1_73EC = .text:0x000073EC; // type:function size:0xD0 -fn_1_74BC = .text:0x000074BC; // type:function size:0xB8 -fn_1_7574 = .text:0x00007574; // type:function size:0x100 -fn_1_7674 = .text:0x00007674; // type:function size:0xEC -fn_1_7760 = .text:0x00007760; // type:function size:0x1E4 -fn_1_7944 = .text:0x00007944; // type:function size:0x26C +fn_1_6F80 = .text:0x00006F80; // type:function size:0x290 scope:local +fn_1_7210 = .text:0x00007210; // type:function size:0x94 scope:local +fn_1_72A4 = .text:0x000072A4; // type:function size:0x28 scope:local +fn_1_72CC = .text:0x000072CC; // type:function size:0x120 scope:local +fn_1_73EC = .text:0x000073EC; // type:function size:0xD0 scope:local +fn_1_74BC = .text:0x000074BC; // type:function size:0xB8 scope:local +fn_1_7574 = .text:0x00007574; // type:function size:0x100 scope:local +fn_1_7674 = .text:0x00007674; // type:function size:0xEC scope:local +fn_1_7760 = .text:0x00007760; // type:function size:0x1E4 scope:local +fn_1_7944 = .text:0x00007944; // type:function size:0x26C scope:local fn_1_7BB0 = .text:0x00007BB0; // type:function size:0x38C fn_1_7F3C = .text:0x00007F3C; // type:function size:0x68 fn_1_7FA4 = .text:0x00007FA4; // type:function size:0x2C0 fn_1_8264 = .text:0x00008264; // type:function size:0xBC -fn_1_8320 = .text:0x00008320; // type:function size:0x100 -fn_1_8420 = .text:0x00008420; // type:function size:0x70 -fn_1_8490 = .text:0x00008490; // type:function size:0x5C8 -fn_1_8A58 = .text:0x00008A58; // type:function size:0x4C8 +fn_1_8320 = .text:0x00008320; // type:function size:0x100 scope:local +fn_1_8420 = .text:0x00008420; // type:function size:0x70 scope:local +fn_1_8490 = .text:0x00008490; // type:function size:0x5C8 scope:local +fn_1_8A58 = .text:0x00008A58; // type:function size:0x4C8 scope:local fn_1_8F20 = .text:0x00008F20; // type:function size:0x2B8 fn_1_91D8 = .text:0x000091D8; // type:function size:0xBC fn_1_9294 = .text:0x00009294; // type:function size:0x44 @@ -205,31 +205,31 @@ lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data: lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local 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:0x8 data:double -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 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 -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 data:double -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 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:0x8 scope:local data:double +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:float lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float @@ -288,37 +288,37 @@ lbl_1_data_1DA = .data:0x000001DA; // type:object size:0x2 scope:local data:2byt lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x2 scope:local data:2byte lbl_1_data_1DE = .data:0x000001DE; // type:object size:0x3 scope:local data:string lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x20 scope:local -lbl_1_data_208 = .data:0x00000208; // type:object size:0x20 -lbl_1_data_228 = .data:0x00000228; // type:object size:0x1 data:byte -lbl_1_data_22A = .data:0x0000022A; // type:object size:0x2 data:2byte -lbl_1_data_22C = .data:0x0000022C; // type:object size:0x2 data:2byte -lbl_1_data_230 = .data:0x00000230; // type:object size:0x38 -lbl_1_data_268 = .data:0x00000268; // type:object size:0x5 data:string -lbl_1_data_26D = .data:0x0000026D; // type:object size:0xE -lbl_1_data_27B = .data:0x0000027B; // type:object size:0x4 -lbl_1_data_27F = .data:0x0000027F; // type:object size:0x8 -lbl_1_data_287 = .data:0x00000287; // type:object size:0x12 data:string -lbl_1_data_299 = .data:0x00000299; // type:object size:0x11 data:string -lbl_1_data_2AA = .data:0x000002AA; // type:object size:0x18 data:string -lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x17 data:string -lbl_1_data_2D9 = .data:0x000002D9; // type:object size:0x16 data:string -lbl_1_data_2EF = .data:0x000002EF; // type:object size:0x10 data:string -lbl_1_data_2FF = .data:0x000002FF; // type:object size:0x10 data:string -lbl_1_data_30F = .data:0x0000030F; // type:object size:0x11 data:string -lbl_1_data_320 = .data:0x00000320; // type:object size:0x15 data:string -lbl_1_data_335 = .data:0x00000335; // type:object size:0x15 data:string -lbl_1_data_34A = .data:0x0000034A; // type:object size:0x10 data:string -lbl_1_data_35A = .data:0x0000035A; // type:object size:0x13 data:string -lbl_1_data_36D = .data:0x0000036D; // type:object size:0x13 data:string -lbl_1_data_380 = .data:0x00000380; // type:object size:0x11 data:string -lbl_1_data_394 = .data:0x00000394; // type:object size:0x38 -lbl_1_data_3CC = .data:0x000003CC; // type:object size:0x4C -lbl_1_data_418 = .data:0x00000418; // type:object size:0x2 data:2byte -lbl_1_data_41C = .data:0x0000041C; // type:object size:0x18 -lbl_1_data_434 = .data:0x00000434; // type:object size:0x18 -lbl_1_data_44C = .data:0x0000044C; // type:object size:0xC -lbl_1_data_458 = .data:0x00000458; // type:object size:0x20 -lbl_1_data_478 = .data:0x00000478; // type:object size:0x20 +lbl_1_data_208 = .data:0x00000208; // type:object size:0x20 scope:local +lbl_1_data_228 = .data:0x00000228; // type:object size:0x1 scope:local data:byte +lbl_1_data_22A = .data:0x0000022A; // type:object size:0x2 scope:local data:2byte +lbl_1_data_22C = .data:0x0000022C; // type:object size:0x2 scope:local data:2byte +lbl_1_data_230 = .data:0x00000230; // type:object size:0x38 scope:local +lbl_1_data_268 = .data:0x00000268; // type:object size:0x5 scope:local data:string +lbl_1_data_26D = .data:0x0000026D; // type:object size:0xE scope:local data:byte +lbl_1_data_27B = .data:0x0000027B; // type:object size:0x4 scope:local data:byte +lbl_1_data_27F = .data:0x0000027F; // type:object size:0x8 scope:local data:byte +lbl_1_data_287 = .data:0x00000287; // type:object size:0x12 scope:local data:string +lbl_1_data_299 = .data:0x00000299; // type:object size:0x11 scope:local data:string +lbl_1_data_2AA = .data:0x000002AA; // type:object size:0x18 scope:local data:string +lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x17 scope:local data:string +lbl_1_data_2D9 = .data:0x000002D9; // type:object size:0x16 scope:local data:string +lbl_1_data_2EF = .data:0x000002EF; // type:object size:0x10 scope:local data:string +lbl_1_data_2FF = .data:0x000002FF; // type:object size:0x10 scope:local data:string +lbl_1_data_30F = .data:0x0000030F; // type:object size:0x11 scope:local data:string +lbl_1_data_320 = .data:0x00000320; // type:object size:0x15 scope:local data:string +lbl_1_data_335 = .data:0x00000335; // type:object size:0x15 scope:local data:string +lbl_1_data_34A = .data:0x0000034A; // type:object size:0x10 scope:local data:string +lbl_1_data_35A = .data:0x0000035A; // type:object size:0x13 scope:local data:string +lbl_1_data_36D = .data:0x0000036D; // type:object size:0x13 scope:local data:string +lbl_1_data_380 = .data:0x00000380; // type:object size:0x11 scope:local data:string +lbl_1_data_394 = .data:0x00000394; // type:object size:0x38 scope:local +lbl_1_data_3CC = .data:0x000003CC; // type:object size:0x4C scope:local +lbl_1_data_418 = .data:0x00000418; // type:object size:0x2 scope:local data:2byte +lbl_1_data_41C = .data:0x0000041C; // type:object size:0x18 scope:local +lbl_1_data_434 = .data:0x00000434; // type:object size:0x18 scope:local +lbl_1_data_44C = .data:0x0000044C; // type:object size:0xC scope:local +lbl_1_data_458 = .data:0x00000458; // type:object size:0x20 scope:local +lbl_1_data_478 = .data:0x00000478; // type:object size:0x20 scope:local lbl_1_data_498 = .data:0x00000498; // type:object size:0x2 data:2byte lbl_1_data_49A = .data:0x0000049A; // type:object size:0x2 data:2byte lbl_1_data_49C = .data:0x0000049C; // type:object size:0x2 data:2byte @@ -356,19 +356,19 @@ lbl_1_bss_59 = .bss:0x00000059; // type:object size:0x1 scope:local data:byte lbl_1_bss_5A = .bss:0x0000005A; // type:object size:0x1 scope:local data:byte lbl_1_bss_5B = .bss:0x0000005B; // type:object size:0x31 scope:local lbl_1_bss_8C = .bss:0x0000008C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_90 = .bss:0x00000090; // type:object size:0x28 data:4byte -lbl_1_bss_B8 = .bss:0x000000B8; // type:object size:0x4 data:4byte -lbl_1_bss_BC = .bss:0x000000BC; // type:object size:0x4 data:4byte -lbl_1_bss_C0 = .bss:0x000000C0; // type:object size:0x2 data:2byte -lbl_1_bss_C2 = .bss:0x000000C2; // type:object size:0x4 -lbl_1_bss_C6 = .bss:0x000000C6; // type:object size:0x1 data:byte -lbl_1_bss_C8 = .bss:0x000000C8; // type:object size:0x4 data:4byte -lbl_1_bss_CC = .bss:0x000000CC; // type:object size:0x4 data:4byte -lbl_1_bss_D0 = .bss:0x000000D0; // type:object size:0x6 -lbl_1_bss_D6 = .bss:0x000000D6; // type:object size:0xC -lbl_1_bss_E2 = .bss:0x000000E2; // type:object size:0x2 data:2byte -lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x2 data:2byte -lbl_1_bss_E6 = .bss:0x000000E6; // type:object size:0x1 data:byte +lbl_1_bss_90 = .bss:0x00000090; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_B8 = .bss:0x000000B8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_BC = .bss:0x000000BC; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_C0 = .bss:0x000000C0; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_C2 = .bss:0x000000C2; // type:object size:0x4 scope:local +lbl_1_bss_C6 = .bss:0x000000C6; // type:object size:0x1 scope:local data:byte +lbl_1_bss_C8 = .bss:0x000000C8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_CC = .bss:0x000000CC; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_D0 = .bss:0x000000D0; // type:object size:0x6 scope:local +lbl_1_bss_D6 = .bss:0x000000D6; // type:object size:0xC scope:local +lbl_1_bss_E2 = .bss:0x000000E2; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_E6 = .bss:0x000000E6; // type:object size:0x1 scope:local data:byte lbl_1_bss_E8 = .bss:0x000000E8; // type:object size:0x4 data:4byte lbl_1_bss_EC = .bss:0x000000EC; // type:object size:0x4 data:4byte lbl_1_bss_F0 = .bss:0x000000F0; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 3fb21974..2c998e93 100644 --- a/configure.py +++ b/configure.py @@ -1141,8 +1141,8 @@ config.libs = [ Object(Matching, "REL/w06Dll/main.c"), Object(Matching, "REL/w06Dll/mg_item.c"), Object(Matching, "REL/w06Dll/mg_coin.c"), - Object(NonMatching, "REL/w06Dll/fire.c"), - Object(NonMatching, "REL/w06Dll/bridge.c"), + Object(Matching, "REL/w06Dll/fire.c"), + Object(Matching, "REL/w06Dll/bridge.c"), Object(NonMatching, "REL/w06Dll/bowser.c"), } ), diff --git a/include/REL/w06Dll.h b/include/REL/w06Dll.h index ed13f799..5423f049 100755 --- a/include/REL/w06Dll.h +++ b/include/REL/w06Dll.h @@ -7,6 +7,16 @@ enum { MAPOBJ_MAX = 6 }; +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + }; + s8 unk01; + s8 unk02; +} UnkW06BoardData; + extern void fn_1_D70(void); extern void fn_1_F6C(void); extern void fn_1_1054(void); // return s32? @@ -19,6 +29,7 @@ extern void fn_1_6EF0(void); // return s32? extern void fn_1_7BB0(void); extern void fn_1_7F3C(void); +extern void fn_1_7FA4(void); extern void fn_1_8264(s32 arg0, s16 arg1); extern void fn_1_8F20(void); @@ -31,6 +42,6 @@ extern void fn_1_CC90(void); extern void fn_1_CD0C(void); extern s16 lbl_1_bss_C[MAPOBJ_MAX]; -extern void *lbl_1_bss_0; +extern UnkW06BoardData *lbl_1_bss_0; #endif diff --git a/src/REL/w06Dll/bridge.c b/src/REL/w06Dll/bridge.c new file mode 100755 index 00000000..1fa213d6 --- /dev/null +++ b/src/REL/w06Dll/bridge.c @@ -0,0 +1,403 @@ +#include "REL/w06Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; + }; + u8 unk01; + s8 unk02; + s8 unk03; + s16 unk04; + char unk06[2]; + float unk08; +} BssCCWork; + +static void fn_1_8320(void); +static void fn_1_8420(void); +static s32 fn_1_8490(s32 arg0, s8 arg1); +static void fn_1_8A58(omObjData *arg0); + +static s8 lbl_1_bss_E6; +static s16 lbl_1_bss_E4; +static s16 lbl_1_bss_E2; +static s16 lbl_1_bss_D6[3][2]; +static s16 lbl_1_bss_D0[3]; +static omObjData *lbl_1_bss_CC; +static Process *lbl_1_bss_C8; + +static s16 lbl_1_data_418 = -1; + +static float lbl_1_data_41C[][2] = { + { 90.0f, 180.0f }, + { -90.0f, 0.0f }, + { 180.0f, 0.0f } +}; + +static s32 lbl_1_data_434[][2] = { + { 0x00000200, 0x00000100 }, + { 0x00000080, 0x00000040 }, + { 0x00000800, 0x00000400 } +}; + +static s32 lbl_1_data_44C[] = { + DATA_MAKE_NUM(DATADIR_W06, 3), + DATA_MAKE_NUM(DATADIR_W06, 3), + DATA_MAKE_NUM(DATADIR_W06, 4) +}; + +static s32 lbl_1_data_458[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 26), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 26), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 26), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 26), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 26), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 26), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 26), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 26), +}; + +static s32 lbl_1_data_478[8] = { + DATA_MAKE_NUM(DATADIR_W06, 30), + DATA_MAKE_NUM(DATADIR_W06, 31), + DATA_MAKE_NUM(DATADIR_W06, 32), + DATA_MAKE_NUM(DATADIR_W06, 33), + DATA_MAKE_NUM(DATADIR_W06, 34), + DATA_MAKE_NUM(DATADIR_W06, 35), + DATA_MAKE_NUM(DATADIR_W06, 36), + DATA_MAKE_NUM(DATADIR_W06, 37) +}; + +void fn_1_7BB0(void) { + Vec sp8; + float var_f29; + BoardSpace *var_r26; + s16 temp_r27; + s32 var_r28; + s32 i; + + if (GWSystem.star_pos < 4) { + lbl_1_bss_0->unk00_field2 = 0; + } else { + lbl_1_bss_0->unk00_field2 = 1; + } + for (i = 0; i < 3; i++) { + lbl_1_bss_D0[i] = BoardModelCreate(lbl_1_data_44C[i], NULL, 0); + switch (i) { + case 0: + var_r28 = (lbl_1_bss_0->unk00_field0 != 0) ? 1 : 0; + OSs8tof32(&lbl_1_bss_0->unk01, &var_f29); + break; + case 1: + var_r28 = (lbl_1_bss_0->unk00_field1 != 0) ? 1 : 0; + OSs8tof32(&lbl_1_bss_0->unk02, &var_f29); + break; + case 2: + var_r28 = (lbl_1_bss_0->unk00_field2 != 0) ? 1 : 0; + var_f29 = 0.0f; + break; + } + temp_r27 = BoardSpaceFlagPosGet(0, lbl_1_data_434[i][var_r28], &sp8); + BoardModelPosSetV(lbl_1_bss_D0[i], &sp8); + BoardModelRotYSet(lbl_1_bss_D0[i], lbl_1_data_41C[i][var_r28]); + BoardModelMotionShiftSet(lbl_1_bss_D0[i], 0, 60.0f * var_f29, 0.0f, 0); + HuPrcSleep(2); + BoardModelMotionSpeedSet(lbl_1_bss_D0[i], 0.0f); + lbl_1_bss_D6[i][var_r28] = temp_r27; + temp_r27 = BoardSpaceFlagSearch(0, lbl_1_data_434[i][var_r28 ^ 1]); + var_r26 = BoardSpaceGet(0, temp_r27); + var_r26->flag |= 0x04000000; + lbl_1_bss_D6[i][var_r28 ^ 1] = temp_r27; + } +} + +void fn_1_7F3C(void) { + s32 i; + + for (i = 0; i < 3; i++) { + BoardModelKill(lbl_1_bss_D0[i]); + lbl_1_bss_D0[i] = -1; + } +} + +void fn_1_7FA4(void) { + Vec sp8; + float temp_f31; + BoardSpace *temp_r3; + s16 temp_r30; + s16 temp_r29; + s16 var_r31; + + if (GWSystem.star_pos < 4) { + lbl_1_bss_0->unk00_field2 = 0; + } else { + lbl_1_bss_0->unk00_field2 = 1; + } + var_r31 = 2; + temp_r30 = (lbl_1_bss_0->unk00_field2 != 0) ? 1 : 0; + temp_f31 = 0.0f; + temp_r29 = BoardSpaceFlagPosGet(0, lbl_1_data_434[var_r31][temp_r30], &sp8); + BoardModelPosSetV(lbl_1_bss_D0[var_r31], &sp8); + BoardModelRotYSet(lbl_1_bss_D0[var_r31], lbl_1_data_41C[var_r31][temp_r30]); + BoardModelMotionShiftSet(lbl_1_bss_D0[var_r31], 0, 60.0f * temp_f31, 0.0f, 0); + HuPrcSleep(2); + BoardModelMotionSpeedSet(lbl_1_bss_D0[var_r31], 0.0f); + lbl_1_bss_D6[var_r31][temp_r30] = temp_r29; + temp_r29 = BoardSpaceFlagSearch(0, lbl_1_data_434[var_r31][temp_r30]); + temp_r3 = BoardSpaceGet(0, temp_r29); + temp_r3->flag &= ~0x04000000; + temp_r29 = BoardSpaceFlagSearch(0, lbl_1_data_434[var_r31][temp_r30 ^ 1]); + temp_r3 = BoardSpaceGet(0, temp_r29); + temp_r3->flag |= 0x04000000; + lbl_1_bss_D6[var_r31][temp_r30 ^ 1] = temp_r29; +} + +void fn_1_8264(s32 arg0, s16 arg1) { + BoardDiceDigit2DShowSet(0); + lbl_1_bss_E6 = arg0; + lbl_1_bss_E4 = arg1; + lbl_1_bss_C8 = HuPrcChildCreate(fn_1_8320, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_C8, fn_1_8420); + while (lbl_1_bss_C8) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_8320(void) { + s32 temp_r30; + s8 *var_r31; + BoardSpace *var_r29; + + temp_r30 = GWSystem.player_curr; + if (lbl_1_bss_E6 != 0) { + var_r31 = &lbl_1_bss_0->unk02; + } else { + var_r31 = &lbl_1_bss_0->unk01; + } + var_r29 = BoardSpaceGet(0, lbl_1_bss_E4); + lbl_1_bss_E2 = var_r29->link[0]; + GWPlayer[temp_r30].space_curr = lbl_1_bss_E2; + fn_1_8490(temp_r30, *var_r31); + (*var_r31)++; + if (*var_r31 >= 3) { + *var_r31 = 0; + } + HuPrcEnd(); +} + +static void fn_1_8420(void) { + if (lbl_1_data_418 != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_418); + lbl_1_data_418 = -1; + } + lbl_1_bss_C8 = NULL; +} + +static s32 fn_1_8490(s32 arg0, s8 arg1) { + Vec sp24; + Vec sp18; + Vec spC; + float temp_f30; + float var_f29; + float var_f28; + s32 temp_r27; + omObjData *var_r26; + BssCCWork *temp_r29; + s8 var_r28; + + BoardPlayerPosGet(arg0, &sp18); + BoardSpacePosGet(0, lbl_1_bss_E2, &sp24); + PSVECSubtract(&sp24, &sp18, &spC); + temp_f30 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + BoardPlayerMotBlendSet(arg0, temp_f30, 0xF); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); + HuPrcSleep(11); + temp_r27 = GWPlayer[arg0].character; + switch (arg1) { + case 0: + lbl_1_data_418 = -1; + var_f29 = 60.0f; + var_f28 = 1.0f; + break; + case 1: + lbl_1_data_418 = BoardPlayerMotionCreate(arg0, lbl_1_data_478[temp_r27]); + var_f29 = 50.0f; + var_f28 = 2.5f; + if (GWPlayer[arg0].bowser_suit) { + BoardPlayerIdleSet(arg0); + HuPrcSleep(30); + } else { + BoardPlayerMotionShiftSet(arg0, lbl_1_data_418, 0.0f, 6.0f, 0); + BoardPlayerMotionSpeedSet(arg0, 1.5f); + HuPrcSleep(60); + } + break; + case 2: + lbl_1_data_418 = BoardPlayerMotionCreate(arg0, lbl_1_data_458[temp_r27]); + var_f29 = 40.0f; + var_f28 = 2.0f; + if (GWPlayer[arg0].bowser_suit) { + BoardPlayerIdleSet(arg0); + HuPrcSleep(30); + } else { + BoardPlayerMotionShiftSet(arg0, lbl_1_data_418, 0.0f, 6.0f, 0x40000001); + BoardPlayerMotionSpeedSet(arg0, 3.0f); + HuPrcSleep(60); + } + break; + } + var_r26 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_8A58); + lbl_1_bss_CC = var_r26; + temp_r29 = OM_GET_WORK_PTR(var_r26, BssCCWork); + temp_r29->unk00_field0 = 0; + temp_r29->unk00_field1 = 0; + temp_r29->unk00_field2 = 0; + temp_r29->unk00_field3 = 0; + temp_r29->unk00_field4 = 0; + temp_r29->unk01 = 0; + temp_r29->unk03 = arg1; + temp_r29->unk02 = 0; + temp_r29->unk04 = lbl_1_bss_D0[lbl_1_bss_E6]; + OSs8tof32(&arg1, &temp_r29->unk08); + temp_r29->unk08 = 60.0f * (temp_r29->unk08 + 1.0f); + BoardPlayerPosLerpStart(arg0, &sp18, &sp24, var_f29); + BoardPlayerMotionSpeedSet(arg0, var_f28); + for (var_r28 = 0; GWPlayer[arg0].moving; var_r28++) { + if (!(var_r28 & 0xF)) { + omVibrate(arg0, 12, 6, 6); + } + HuPrcVSleep(); + } + temp_f30 -= 180.0f; + BoardPlayerMotBlendSet(arg0, temp_f30, 0xF); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + while (lbl_1_bss_CC) { + HuPrcVSleep(); + } + HuPrcSleep(30); + if (arg1 == 2) { + BoardWinCreate(0, MAKE_MESSID(48, 40), -1); + BoardWinWait(); + BoardWinKill(); + } + BoardCameraTargetPlayerSet(arg0); + BoardCameraViewSet(1); + temp_f30 += 180.0f; + BoardPlayerMotBlendSet(arg0, temp_f30, 0xF); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + if (arg1 == 1) { + BoardWinCreate(0, MAKE_MESSID(48, 15), -1); + BoardWinWait(); + BoardWinKill(); + } + return 0; +} + +static void fn_1_8A58(omObjData *arg0) { + Vec sp8; + u8 var_r30; + BoardSpace *var_r29; + BssCCWork *temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, BssCCWork); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + lbl_1_bss_CC = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + return; + } + if (temp_r31->unk00_field1 != 0 && temp_r31->unk00_field4 == 0) { + BoardModelMotionStart(temp_r31->unk04, 0, 0); + BoardModelMotionTimeSet(temp_r31->unk04, temp_r31->unk08 - 60.0f); + BoardModelMotionSpeedSet(temp_r31->unk04, 1.0f); + temp_r31->unk00_field4 = 1; + } + if (temp_r31->unk00_field2 != 0) { + HuAudFXPlay(0x49C); + temp_r31->unk00_field2 = 0; + } + if (temp_r31->unk00_field3 != 0) { + HuAudFXPlay(0x49D); + temp_r31->unk00_field3 = 0; + } + switch (temp_r31->unk02) { + case 0: + if (temp_r31->unk00_field1 == 0) { + if (GWPlayer[GWSystem.player_curr].bowser_suit != 0) { + temp_r31->unk01 = 72; + } else { + temp_r31->unk01 = 30; + } + temp_r31->unk00_field2 = 1; + temp_r31->unk00_field1 = 1; + break; + } + if (BoardModelMotionTimeGet(temp_r31->unk04) >= temp_r31->unk08) { + BoardModelMotionTimeSet(temp_r31->unk04, temp_r31->unk08); + BoardModelMotionSpeedSet(temp_r31->unk04, 0.0f); + if (temp_r31->unk03 == 2) { + temp_r31->unk01 = 30; + temp_r31->unk02 = 1; + temp_r31->unk00_field3 = 1; + } else { + temp_r31->unk00_field0 = 1; + } + } + break; + case 1: + if (lbl_1_bss_E6 == 0) { + var_r30 = lbl_1_bss_0->unk00_field0; + lbl_1_bss_0->unk00_field0 ^= 1; + } else { + var_r30 = lbl_1_bss_0->unk00_field1; + lbl_1_bss_0->unk00_field1 ^= 1; + } + var_r29 = BoardSpaceGet(0, lbl_1_bss_D6[lbl_1_bss_E6][var_r30]); + var_r29->flag |= 0x04000000; + var_r29 = BoardSpaceGet(0, lbl_1_bss_D6[lbl_1_bss_E6][var_r30 ^ 1]); + var_r29->flag &= ~0x04000000; + BoardSpacePosGet(0, lbl_1_bss_D6[lbl_1_bss_E6][var_r30 ^ 1], &sp8); + BoardModelMotionStart(temp_r31->unk04, 0, 0); + BoardModelMotionTimeSet(temp_r31->unk04, 180.0f); + BoardModelPosSetV(temp_r31->unk04, &sp8); + BoardModelRotYSet(temp_r31->unk04, lbl_1_data_41C[lbl_1_bss_E6][var_r30 ^ 1]); + BoardCameraTargetModelSet(temp_r31->unk04); + temp_r31->unk02 = 2; + break; + case 2: + if (BoardModelMotionEndCheck(temp_r31->unk04) && BoardCameraMotionIsDone()) { + temp_r31->unk00_field0 = 1; + } + break; + } +} diff --git a/src/REL/w06Dll/fire.c b/src/REL/w06Dll/fire.c new file mode 100755 index 00000000..1ea92d36 --- /dev/null +++ b/src/REL/w06Dll/fire.c @@ -0,0 +1,366 @@ +#include "REL/w06Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/objsub.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +static void fn_1_6F80(void); +static void fn_1_7210(void); +static s32 fn_1_72A4(void); +static void fn_1_72CC(s32 arg0); +static void fn_1_73EC(float arg0); +static void fn_1_74BC(s32 arg0); +static void fn_1_7574(void); +static void fn_1_7674(s32 arg0); +static void fn_1_7760(s32 arg0); +static s32 fn_1_7944(s32 arg0); + +static s8 lbl_1_bss_C6; +static s8 lbl_1_bss_C2[4]; +static s16 lbl_1_bss_C0; +static s32 lbl_1_bss_BC; +static s32 lbl_1_bss_B8; +static u8 lbl_1_bss_94_gap[0x24]; +static Process *lbl_1_bss_90; + +static s32 lbl_1_data_208[8] = { + 0x00000123, + 0x00000163, + 0x000001A3, + 0x000001E3, + 0x00000223, + 0x00000263, + 0x000002A3, + 0x000002E3 +}; + +static s8 lbl_1_data_228 = -1; +static s16 lbl_1_data_22A = -1; +static s16 lbl_1_data_22C = -1; +static s16 lbl_1_data_22E = -1; + +static s32 lbl_1_data_230[] = { + MAKE_MESSID(8, 14), + MAKE_MESSID(8, 15), + MAKE_MESSID(8, 16), + MAKE_MESSID(8, 17), + MAKE_MESSID(8, 18), + MAKE_MESSID(8, 19), + MAKE_MESSID(8, 20), + MAKE_MESSID(8, 21), + MAKE_MESSID(8, 22), + MAKE_MESSID(8, 23), + MAKE_MESSID(8, 24), + MAKE_MESSID(8, 25), + MAKE_MESSID(8, 26), + MAKE_MESSID(8, 27) +}; + +void fn_1_6EF0(void) { + BoardDiceDigit2DShowSet(0); + lbl_1_bss_90 = HuPrcChildCreate(fn_1_6F80, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_90, fn_1_7210); + while (lbl_1_bss_90) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_6F80(void) { + s32 temp_r31; + s32 sp8; + + lbl_1_bss_B8 = -1; + temp_r31 = GWSystem.player_curr; + sp8 = GWPlayer[temp_r31].space_curr; + if (BoardSpaceFlagGet(0, GWPlayer[temp_r31].space_curr) & 0x2000) { + lbl_1_bss_C6 = 0; + lbl_1_bss_C0 = lbl_1_bss_C[2]; + lbl_1_bss_BC = 0x4A6; + } else { + lbl_1_bss_C6 = 1; + lbl_1_bss_C0 = lbl_1_bss_C[3]; + lbl_1_bss_BC = 0x49B; + } + fn_1_72CC(temp_r31); + fn_1_7760(temp_r31); + BoardCameraMotionWait(); + BoardModelMotionShiftSet(lbl_1_bss_C0, 0, 0.0f, 8.0f, 0x40000001); + HuPrcSleep(8); + while (BoardModelMotionTimeGet(lbl_1_bss_C0) < 22.0f) { + HuPrcVSleep(); + } + fn_1_7674(temp_r31); + BoardModelMotionStartEndSet(lbl_1_bss_C0, 30, 60); + lbl_1_data_228 = 2; + HuPrcSleep(30); + fn_1_74BC(1); + while (!BoardModelMotionEndCheck(lbl_1_data_22C)) { + HuPrcVSleep(); + } + lbl_1_data_228 = 3; + BoardModelHookReset(lbl_1_bss_C0); + if (lbl_1_bss_B8 != -1) { + HuAudFXStop(lbl_1_bss_B8); + } + BoardModelMotionShiftSet(lbl_1_bss_C0, 0, 60.0f, 8.0f, 0); + fn_1_73EC(0.0f); + fn_1_7574(); + while (!BoardModelMotionEndCheck(lbl_1_bss_C0)) { + HuPrcVSleep(); + } + BoardPlayerPostTurnHookSet(temp_r31, fn_1_72A4); + HuPrcEnd(); +} + +static void fn_1_7210(void) { + if (lbl_1_data_22C != -1) { + BoardModelKill(lbl_1_data_22C); + lbl_1_data_22C = -1; + } + if (lbl_1_data_22A != -1) { + BoardModelKill(lbl_1_data_22A); + lbl_1_data_22A = -1; + } + lbl_1_bss_90 = NULL; +} + +static s32 fn_1_72A4(void) { + fn_1_74BC(0); + return 1; +} + +static void fn_1_72CC(s32 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + s32 var_r30; + s32 i; + + if (lbl_1_bss_C6 == 0) { + var_r30 = 0x2000; + } else { + var_r30 = 0x1000; + } + BoardPlayerPosGet(arg0, &sp18); + BoardModelPosGet(lbl_1_bss_C0, &sp24); + PSVECSubtract(&sp24, &sp18, &spC); + for (i = 0; i < 4; i++) { + if (var_r30 & BoardSpaceFlagGet(0, GWPlayer[i].space_curr)) { + lbl_1_bss_C2[i] = 1; + } else { + lbl_1_bss_C2[i] = 0; + } + } + fn_1_73EC(180.0 * (atan2(spC.x, spC.z) / M_PI)); +} + +static void fn_1_73EC(float arg0) { + s32 var_r30; + s32 i; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C2[i] != 0) { + BoardPlayerMotBlendSet(i, arg0, 15); + } + } + do { + var_r30 = 0; + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C2[i] != 0 && !BoardPlayerMotBlendCheck(i)) { + var_r30 = 1; + } + } + HuPrcVSleep(); + } while (var_r30 != 0); +} + +static void fn_1_74BC(s32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C2[i] == 0) { + continue; + } + if (arg0 != 0) { + omVibrate(i, 12, 4, 2); + HuAudFXPlay(lbl_1_data_208[GWPlayer[i].character]); + } + BoardPlayerCopyEyeMat(i, arg0); + } +} + +static void fn_1_7574(void) { + s32 temp_r3; + s32 temp_r29; + s32 temp_r28; + s32 i; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C2[i] == 0) { + continue; + } + temp_r3 = fn_1_7944(i); + if (temp_r3 != -1) { + temp_r29 = GWPlayer[i].items[temp_r3]; + BoardPlayerItemRemove(i, temp_r3); + temp_r28 = BoardPlayerGetCharMess(i); + BoardWinCreate(0, MAKE_MESSID(48, 16), -1); + BoardWinInsertMesSet(temp_r28, 0); + BoardWinInsertMesSet(lbl_1_data_230[temp_r29], 1); + BoardWinPlayerSet(i); + BoardWinWait(); + BoardWinKill(); + } + } +} + +static void fn_1_7674(s32 arg0) { + Vec sp8; + float var_f31; + + if (lbl_1_bss_C6 == 0) { + var_f31 = -90.0f; + } else { + var_f31 = 90.0f; + } + lbl_1_data_22C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 15), NULL, 0); + BoardModelPosGet(lbl_1_bss_C0, &sp8); + BoardModelMotionStart(lbl_1_data_22C, 0, 0); + BoardModelHookSet(lbl_1_bss_C0, "fire", lbl_1_data_22C); + lbl_1_bss_B8 = HuAudFXPlay(lbl_1_bss_BC); +} + +static void fn_1_7760(s32 arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + u32 var_r30; + u32 var_r28; + s16 var_r29; + s32 i; + + if (lbl_1_bss_C6 == 0) { + var_r30 = 0x6000; + } else { + var_r30 = 0x5000; + } + for (var_r29 = i = 0; i < BoardSpaceCountGet(0); i++) { + var_r28 = BoardSpaceFlagGet(0, i + 1); + if (var_r30 == (var_r28 & var_r30)) { + var_r29 = i + 1; + break; + } + } + BoardModelPosGet(lbl_1_bss_C0, &sp20); + BoardSpacePosGet(0, var_r29, &sp2C); + PSVECSubtract(&sp2C, &sp20, &sp8); + sp8.x *= 0.4f; + sp8.y *= 0.4f; + sp8.z *= 0.4f; + PSVECAdd(&sp20, &sp8, &sp2C); + lbl_1_data_22A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); + BoardModelVisibilitySet(lbl_1_data_22A, 0); + BoardModelPosSetV(lbl_1_data_22A, &sp2C); + sp14.x = 0.0f; + sp14.y = 200.0f; + sp14.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_22A, 0, &sp14, 2500.0f, -1.0f, 21); + BoardCameraMotionWait(); +} + +static s8 lbl_1_data_26D[] = { + 0, 0, 1, 1, 0, + 0, 1, 1, 1, 1, + 2, 2, 2, 2 +}; + +static s8 lbl_1_data_27B[] = { 40, 30, 20, 10 }; + +static s8 lbl_1_data_27F[4][2] = { + { 35, 80 }, { 30, 70 }, + { 20, 60 }, { 10, 50 } +}; + +static s32 fn_1_7944(s32 arg0) { + s8 spB[3]; + s8 sp8[3]; + s32 var_r25; + s32 temp_r26; + s32 var_r30; + s32 temp_r27; + s32 var_r31; + s32 i; + + var_r25 = BoardPlayerItemCount(arg0); + if (var_r25 == 0) { + return -1; + } + for (var_r30 = i = 0; i < 3; i++) { + temp_r26 = GWPlayer[arg0].items[i]; + if (temp_r26 != -1) { + spB[var_r30] = temp_r26; + sp8[var_r30] = i; + var_r30++; + } + } + if (var_r30 == 0) { + return -1; + } + if (var_r30 == 1) { + return 0; + } + temp_r27 = BoardRandMod(100); + if (lbl_1_data_26D[spB[0]] > lbl_1_data_26D[spB[1]]) { + if (lbl_1_data_27B[GWPlayer[arg0].rank] > temp_r27) { + var_r31 = 1; + } else { + var_r31 = 0; + } + } else if (lbl_1_data_27B[GWPlayer[arg0].rank] > temp_r27) { + var_r31 = 0; + } else { + var_r31 = 1; + } + if (var_r30 == 3) { + if (lbl_1_data_26D[spB[var_r31]] > lbl_1_data_26D[spB[2]]) { + if (lbl_1_data_27F[GWPlayer[arg0].rank][1] > temp_r27) { + var_r31 = 2; + } + } else if (lbl_1_data_27F[GWPlayer[arg0].rank][1] < temp_r27) { + var_r31 = 2; + } + } + var_r31 = sp8[var_r31]; + return var_r31; +} + +static char *lbl_1_data_394[] = { + "01 : CHIBI KINOKO", + "02 : DEKA KINOKO", + "03 : SUPER CHIBI KINOKO", + "04 : SUPER DEKA KINOKO", + "05 : DEKACHIBI HAMMER", + "06 : WARP DOKAN", + "07 : TRADE CARD", + "08 : BIRI-Q SEAL", + "09 : TERE-YOKE LIGHT", + "10 : WAN-WAN WHISTLE", + "11 : KOOPA SUIT", + "12 : TERESA SUISYO", + "13 : MAJIN NO LAMP", + "14 : ITEM BUKURO" +}; + +static u8 lbl_1_data_3CC[0x4C] = { 0 }; diff --git a/src/REL/w06Dll/main.c b/src/REL/w06Dll/main.c index fd5e1d78..d629ed78 100755 --- a/src/REL/w06Dll/main.c +++ b/src/REL/w06Dll/main.c @@ -52,7 +52,7 @@ static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { static omObjData *lbl_1_bss_8; static s32 lbl_1_bss_4; -void *lbl_1_bss_0; +UnkW06BoardData *lbl_1_bss_0; static s16 lbl_1_data_F0 = -1; static s16 lbl_1_data_F2 = -1; @@ -87,7 +87,7 @@ void BoardCreate(void) { s32 *var_r29; s32 i; - lbl_1_bss_0 = GWSystem.board_data; + lbl_1_bss_0 = (UnkW06BoardData*) GWSystem.board_data; BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W06, 0)); lbl_1_data_F0 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 1), NULL, 0); fn_8006DDE8(lbl_1_data_F0, -1.0f); diff --git a/src/game/board/player.c b/src/game/board/player.c index 75e8692d..9be100ed 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1782,7 +1782,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2); temp_r26->field00_bit0 = 1; - for (var_r19 = 0; var_r19 < 180; var_r19++) { + for (var_r19 = 0; var_r19 < 180U; var_r19++) { if (BoardPlayerMotBlendCheck(arg0) != 0) break; HuPrcVSleep(); From aa65939684b984d0465c0e43aae9f1d54ac68ab1 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Fri, 5 Apr 2024 12:39:00 -0500 Subject: [PATCH 3/7] match m407/score.c --- config/GMPE01_00/rels/m407dll/symbols.txt | 22 +-- configure.py | 8 +- src/REL/m407dll/score.c | 188 ++++++++++++++++++++++ 3 files changed, 203 insertions(+), 15 deletions(-) create mode 100644 src/REL/m407dll/score.c diff --git a/config/GMPE01_00/rels/m407dll/symbols.txt b/config/GMPE01_00/rels/m407dll/symbols.txt index edfc4c98..f78e0ce5 100644 --- a/config/GMPE01_00/rels/m407dll/symbols.txt +++ b/config/GMPE01_00/rels/m407dll/symbols.txt @@ -197,17 +197,17 @@ lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data: lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC scope:local data:4byte lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0xC scope:local data:4byte lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 scope:local data:double +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x100 lbl_1_data_100 = .data:0x00000100; // type:object size:0x20 lbl_1_data_120 = .data:0x00000120; // type:object size:0x19 data:string diff --git a/configure.py b/configure.py index 2c998e93..f8ebc4dc 100644 --- a/configure.py +++ b/configure.py @@ -841,7 +841,7 @@ config.libs = [ Object(Matching, "REL/m407dll/whomp_score.c"), Object(Matching, "REL/m407dll/effect.c"), Object(Matching, "REL/m407dll/main.c"), - Object(NonMatching, "REL/m407dll/score.c"), + Object(Matching, "REL/m407dll/score.c"), } ), Rel('m408Dll', @@ -1055,7 +1055,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/resultDll/main.c"), Object(NonMatching, "REL/resultDll/battle.c"), - Object(Matching, "REL/resultDll/datalist.c"), + Object(NonMatching, "REL/resultDll/datalist.c"), } ), Rel('safDll', @@ -1141,8 +1141,8 @@ config.libs = [ Object(Matching, "REL/w06Dll/main.c"), Object(Matching, "REL/w06Dll/mg_item.c"), Object(Matching, "REL/w06Dll/mg_coin.c"), - Object(Matching, "REL/w06Dll/fire.c"), - Object(Matching, "REL/w06Dll/bridge.c"), + Object(NonMatching, "REL/w06Dll/fire.c"), + Object(NonMatching, "REL/w06Dll/bridge.c"), Object(NonMatching, "REL/w06Dll/bowser.c"), } ), diff --git a/src/REL/m407dll/score.c b/src/REL/m407dll/score.c new file mode 100644 index 00000000..5d0ebd84 --- /dev/null +++ b/src/REL/m407dll/score.c @@ -0,0 +1,188 @@ +#include "game/process.h" +#include "game/object.h" +#include "game/esprite.h" + +typedef struct unkDominationData6 { +/* 0x00 */ s32 unk_00; +/* 0x04 */ s32 unk_04; +/* 0x08 */ s16 unk_08; +/* 0x0A */ s16 unk_0A; +/* 0x0C */ s16 unk_0C[8]; //what size is this?? +/* 0x1C */ s32 unk_1C; +/* 0x20 */ f32 unk_20; +} unkDominationData6; //sizeof 0x24 + +//func signatures +void fn_1_61A0(void); +void fn_1_6218(void); +void fn_1_62A0(void); +void fn_1_5FE4(omObjData* arg0); +void fn_1_5FB4(s32 arg0); +s16 fn_1_28D4(void); + +//bss +Process* lbl_1_bss_398C; +omObjData* lbl_1_bss_3988; + +//data +typedef void (*ObjFuncs)(void); + +ObjFuncs lbl_1_data_360[] = { + fn_1_61A0, + fn_1_6218, + fn_1_62A0 +}; + +void fn_1_5C5C(Process* arg0, s16 arg1) { + unkDominationData6* temp_r31; + u32 i; + + lbl_1_bss_398C = arg0; + lbl_1_bss_3988 = omAddObjEx(lbl_1_bss_398C, 0x800, 0U, 0U, 7, fn_1_5FE4); + lbl_1_bss_3988->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x24, 0x10000000U); + temp_r31 = lbl_1_bss_3988->data; + temp_r31->unk_08 = arg1; + temp_r31->unk_0A = 0; + temp_r31->unk_0C[6] = espEntry(0x260025, 2, 0); + espTPLvlSet(temp_r31->unk_0C[6], 0.5f); + espPosSet(temp_r31->unk_0C[6], 508.0f, 64.0f); + temp_r31->unk_0C[7] = espEntry(0x260022, 1, 0); + espPosSet(temp_r31->unk_0C[7], 480.0f, 56.0f); + + for (i = 0; i < 3; i++) { + temp_r31->unk_0C[i] = espEntry(0x26001F, 0, 0); + espPosSet(temp_r31->unk_0C[i], i * 16 + 0x1F4, 56.0f); + espDispOff(temp_r31->unk_0C[i]); + } + + for (i = 0; i < 3; i++) { + temp_r31->unk_0C[i+3] = espEntry(0x260020, 1, 0); + espPosSet(temp_r31->unk_0C[i+3], i * 16 + 0x1F4, 74.0f); + } + + for (i = 0; i < 8; i++) { + espDispOff(temp_r31->unk_0C[i]); + } + + fn_1_5FB4(0); +} + +void fn_1_5ECC(void) { + s32 i; + unkDominationData6* temp_r30; + + temp_r30 = lbl_1_bss_3988->data; + for (i = 0; i < 7; i++) { + espKill(temp_r30->unk_0C[i]); + } + + HuMemDirectFree(lbl_1_bss_3988->data); +} + +void fn_1_5F40(s32 arg0) { + switch (arg0) { + case 0: + fn_1_5FB4(1); + break; + case 1: + fn_1_5FB4(2); + break; + } +} + +void fn_1_5F90(void) { + fn_1_5FB4(0); +} + +//this function is an inline for other TUs, but not this one +void fn_1_5FB4(s32 arg0) { + unkDominationData6* temp_r31; + + temp_r31 = lbl_1_bss_3988->data; + temp_r31->unk_00 = arg0; + temp_r31->unk_04 = 0; +} + +void fn_1_5FE4(omObjData* arg0) { + s16 temp_r31; + unkDominationData6* temp_r30; + + temp_r30 = lbl_1_bss_3988->data; + lbl_1_data_360[temp_r30->unk_00](); + temp_r31 = temp_r30->unk_08; + espBankSet(temp_r30->unk_0C[0], temp_r31 / 100); + temp_r31 = (temp_r31 - ((temp_r31 / 100) * 100)); + espBankSet(temp_r30->unk_0C[1], (temp_r31 / 10)); + temp_r31 = (temp_r31 - ((temp_r31 / 10) * 10)); + espBankSet(temp_r30->unk_0C[2], temp_r31); + temp_r31 = temp_r30->unk_0A; + espBankSet(temp_r30->unk_0C[3], (temp_r31 / 100)); + temp_r31 = (temp_r31 - ((temp_r31 / 100) * 100)); + espBankSet(temp_r30->unk_0C[4], (temp_r31 / 10)); + temp_r31 = (temp_r31 - ((temp_r31 / 10) * 10)); + espBankSet(temp_r30->unk_0C[5], temp_r31); +} + +void fn_1_61A0(void) { + s32 i; + unkDominationData6* temp_r31; + + temp_r31 = lbl_1_bss_3988->data; + + if (temp_r31->unk_04 == 0) { + for (i = 0; i < 8; i++) { + espDispOff(temp_r31->unk_0C[i]); + } + temp_r31->unk_04++; + } +} + +void fn_1_6218(void) { + s16 i; + unkDominationData6* temp_r31; + + temp_r31 = lbl_1_bss_3988->data; + + if (temp_r31->unk_04 == 0) { + for (i = 0; i < 8; i++) { + espDispOn(temp_r31->unk_0C[i]); + } + temp_r31->unk_04++; + } + + temp_r31->unk_0A = fn_1_28D4(); +} + +void fn_1_62A0(void) { + s32 i; + unkDominationData6* temp_r31; + + temp_r31 = lbl_1_bss_3988->data; + + if (temp_r31->unk_04 == 0) { + temp_r31->unk_1C = 0; + temp_r31->unk_20 = 1.0f; + if (temp_r31->unk_0A > temp_r31->unk_08) { + temp_r31->unk_08 = temp_r31->unk_0A; + } + temp_r31->unk_04++; + } + + if (temp_r31->unk_1C == 0) { + if ((temp_r31->unk_20 += 0.02f) >= 1.2f) { + temp_r31->unk_20 = 1.2f; + temp_r31->unk_1C = 1; + } + } else { + if ((temp_r31->unk_20 -= 0.04f) <= 1.0f) { + temp_r31->unk_20 = 1.0f; + temp_r31->unk_1C = 0; + } + } + + for (i = 0; i <= 2; i++) { + espScaleSet(temp_r31->unk_0C[i], temp_r31->unk_20, temp_r31->unk_20); + } + + espScaleSet(temp_r31->unk_0C[7], temp_r31->unk_20, temp_r31->unk_20); +} From 39ed3fb0843a177e7e4ea9c667de1152b00f3f59 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 5 Apr 2024 13:23:18 -0500 Subject: [PATCH 4/7] Decompile more of resultdll/main.c --- include/game/audio.h | 4 +- src/REL/resultDll/main.c | 369 ++++++++++++++++++++++++++++++++++++++- src/game/audio.c | 8 +- 3 files changed, 374 insertions(+), 7 deletions(-) diff --git a/include/game/audio.h b/include/game/audio.h index 7392530a..7481c410 100644 --- a/include/game/audio.h +++ b/include/game/audio.h @@ -58,8 +58,8 @@ void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); void HuAudAUXSet(s32 arg0, s32 arg1); void HuAudAUXVolSet(s8 arg0, s8 arg1); void HuAudVoiceInit(s16 ovl); -void HuAudPlayerVoicePlay(s16 arg0, s16 arg1); -void HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); +s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); +s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index 3d81e3bf..a9c1eacc 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -57,6 +57,7 @@ s32 lbl_1_bss_174; s16 lbl_1_bss_172; s16 lbl_1_bss_170; s16 lbl_1_bss_168[4]; +s16 lbl_1_bss_158[8]; AnimData *lbl_1_bss_144[5]; AnimData *lbl_1_bss_E4[8][3]; AnimData *lbl_1_bss_E0; @@ -64,11 +65,14 @@ s16 lbl_1_bss_CE[9]; s16 lbl_1_bss_9E[8][3]; s16 lbl_1_bss_9C; s16 lbl_1_bss_5C[8][4]; +s16 lbl_1_bss_54[4]; s16 lbl_1_bss_52; s16 lbl_1_bss_4A[4]; s16 lbl_1_bss_42[4]; s16 lbl_1_bss_3A[4]; s16 lbl_1_bss_12[4][5]; +s16 lbl_1_bss_A[4]; +s16 lbl_1_bss_8; s32 lbl_1_bss_4; s32 lbl_1_bss_0; @@ -433,7 +437,7 @@ void fn_1_B78(void) model = Hu3DModelCreateFile(0x6F0007); for(i=0; i<8; i++) { j = Hu3DModelLink(model); - lbl_1_bss_168[i] = j; + lbl_1_bss_158[i] = j; pos = lbl_1_data_0[i+4].pos; pos.x += 5.0f; pos.y += 3.0f; @@ -474,4 +478,367 @@ void fn_1_B78(void) HuSprAttrSet(group, 3, 4); HuSprDrawNoSet(group, 3, 127); (void)sprite; +} + +void fn_1_1F4C(void) +{ + float temp_f31; + float temp_f30; + + s16 i; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s32 status; + s32 temp_r26; + s32 sp24[4]; + float sp14[4]; + s16 sp8[5]; + + + + fn_1_423C(sp8); + for(i=0; i<4; i++) { + fn_1_3CAC(lbl_1_bss_3A[i], sp8[lbl_1_bss_4A[i]]); + sp24[i] = 0; + } + temp_r29 = (lbl_1_bss_174) ? 3 : 10; + for(temp_r30=0; temp_r30<=temp_r29; temp_r30++) { + temp_f31 = sin(M_PI*((90.0/temp_r29)*temp_r30)/180.0); + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_3A[i], temp_f31, temp_f31); + } + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_3A[i], 1.0f, 1.0f); + } + for(temp_r28=0; temp_r28<=14;) { + for(i=0; i<4; i++) { + if(GWPlayerCoinWinGet(lbl_1_bss_4A[i]) >= 10) { + HuSprAttrReset(lbl_1_bss_9C, i, 4); + } + HuSprScaleSet(lbl_1_bss_9C, i, sin(M_PI*((120.0f/14.0f)*temp_r28)/180.0)*(0.8*(1.0/sin((M_PI*2)/3))), 0.8*(sin(M_PI*((120.0f/14.0f)*temp_r28)/180.0)*(1.0/sin((M_PI*2)/3)))); + } + temp_r28 += (lbl_1_bss_174) ? 2 : 1; + HuPrcVSleep(); + } + if(!lbl_1_bss_174) { + HuPrcSleep(15); + } + for(i=0; i<4; i++) { + sp14[i] = 0.0f; + } + for(i=temp_r30=0; i<4; i++) { + temp_r30 += sp8[i]; + } + status = -1; + if(temp_r30) { + status = HuAudFXPlay(23); + } + temp_r30 = 0; + temp_f30 = temp_r30; + temp_r30 = 0; + while(1) { + temp_r26 = 0 ; + temp_f30 += (lbl_1_bss_174) ? 1.0f : 0.2f; + temp_r30 = temp_f30; + for(i=temp_r29=0; i<4; i++) { + if(sp8[lbl_1_bss_4A[i]]-temp_r30 <= 0) { + if(!sp24[lbl_1_bss_4A[i]] && sp8[lbl_1_bss_4A[i]] != 0) { + sp24[lbl_1_bss_4A[i]] = 1; + if(!temp_r26) { + HuAudFXPlay(9); + temp_r26 = 1; + } + } + + temp_r29++; + fn_1_3CAC(lbl_1_bss_3A[i], 0); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], sp8[lbl_1_bss_4A[i]]+BoardPlayerCoinsGet(lbl_1_bss_4A[i])); + if(!sp14[i]) { + continue; + } + sp14[i] += 20.0f; + if(sp14[i] >= 360.0f) { + sp14[i] -= 360.0f; + } + Hu3DModelRotSet(lbl_1_bss_1A9C[i+8], 0.0f, sp14[i], 0.0f); + } else { + fn_1_3CAC(lbl_1_bss_3A[i], sp8[lbl_1_bss_4A[i]]-temp_r30); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], (s32)temp_r30+BoardPlayerCoinsGet(lbl_1_bss_4A[i])); + sp14[i] += 20.0f; + if(sp14[i] >= 360.0f) { + sp14[i] -= 360.0f; + } + Hu3DModelRotSet(lbl_1_bss_1A9C[i+8], 0.0f, sp14[i], 0.0f); + } + } + if(temp_r29 == 4) { + break; + } + HuPrcVSleep(); + } + if(status != -1) { + HuAudFXStop(status); + } + temp_r29 = 0; + while(1) { + for(i=temp_r30=0; i<4; i++) { + if(sp14[i]) { + sp14[i] += 20.0f; + if(sp14[i] >= 360.0f) { + sp14[i] -= 360.0f; + } + Hu3DModelRotSet(lbl_1_bss_1A9C[i+8], 0.0f, sp14[i], 0.0f); + } else { + temp_r30++; + } + } + if(temp_r30 >= 4) { + break; + } + HuPrcVSleep(); + temp_r29++; + } + if(temp_r29 < 30) { + HuPrcSleep(30-temp_r29); + } + temp_r29 = (lbl_1_bss_174) ? 3 : 10; + for(temp_r30=0; temp_r30<=temp_r29; temp_r30++) { + temp_f31 = cos(M_PI*((90.0/temp_r29)*temp_r30)/180.0); + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_3A[i], temp_f31, temp_f31); + } + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_3A[i], 0.0f, 0.0f); + } +} + +void fn_1_2ADC(void) +{ + float temp_f31; + s16 i; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + s16 temp_r24; + float sp54[4]; + Vec sp48; + s32 sp38[4] = { -1, -1, -1, -1 }; + s16 sp30[4]; + s16 sp28[4]; + s16 sp20[4]; + s16 sp18[4]; + s16 sp10[4]; + s16 sp8[4]; + for(i=0; i<4; i++) { + sp30[i] = sp28[i] = lbl_1_bss_4A[i]; + sp18[i] = sp20[i] = lbl_1_bss_42[i]; + sp10[i] = BoardPlayerCoinsGet(lbl_1_bss_4A[i]); + sp8[i] = GWStarsGet(lbl_1_bss_4A[i]); + } + fn_1_3E08(); + for(i=0; i<4; i++) { + if(sp30[i] != lbl_1_bss_4A[i] || sp18[i] != lbl_1_bss_42[i]) { + break; + } + } + if(i == 4) { + lbl_1_bss_0 = 1; + return; + } + lbl_1_data_380 = HuSprGrpCreate(4); + for(i=0; i<4; i++) { + temp_r24 = HuSprCreate(lbl_1_bss_144[lbl_1_bss_42[i]], i, 0); + HuSprGrpMemberSet(lbl_1_data_380, i, temp_r24); + HuSprPosSet(lbl_1_data_380, i, lbl_1_data_3F8[(i*2)], lbl_1_data_3F8[(i*2)+1]); + HuSprAttrSet(lbl_1_data_380, i, 4); + temp_r30 = GWPlayerCfg[lbl_1_bss_4A[i]].character; + lbl_1_bss_54[i] = lbl_1_bss_A[i] = Hu3DModelLink(lbl_1_bss_5C[temp_r30][lbl_1_bss_42[i]]); + Hu3D2Dto3D(&lbl_1_data_408[i], 1, &sp48); + Hu3DModelPosSetV(lbl_1_bss_A[i], &sp48); + if(sp30[i] == lbl_1_bss_4A[i] && sp18[i] == lbl_1_bss_42[i]) { + Hu3DModelAttrSet(lbl_1_bss_5C[temp_r30][sp18[i]], 1); + Hu3DModelAttrReset(lbl_1_bss_A[i], 1); + Hu3DModelScaleSet(lbl_1_bss_A[i], 1.1f, 1.1f, 1.1f); + } else { + Hu3DModelAttrSet(lbl_1_bss_A[i], 1); + } + } + for(i=0; i<4; i++) { + sp54[i] = 0; + } + temp_r25 = 0; + temp_r28 = 0; + while(1) { + for(temp_r26=i=0; i<4; i++) { + if(sp30[i] == lbl_1_bss_4A[i] && sp18[i] == lbl_1_bss_42[i]) { + temp_r26++; + fn_1_3B50(lbl_1_bss_CE[(i*2)], GWStarsGet(lbl_1_bss_4A[i])); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], BoardPlayerCoinsGet(lbl_1_bss_4A[i])); + } else { + if(temp_r28 > (i*20)) { + temp_r27 = temp_r28-(i*20); + if(temp_r27 <= 20) { + if(temp_r27 <= 10) { + HuSprScaleSet(lbl_1_bss_52, i, 1.0f, sin(M_PI*(9.0f*temp_r27)/180.0)); + } else { + HuSprAttrSet(lbl_1_bss_52, i, 4); + HuSprAttrReset(lbl_1_data_380, i, 4); + HuSprScaleSet(lbl_1_data_380, i, 1.0f, sin(M_PI*(9.0f*(temp_r27-10))/180.0)); + } + temp_f31 = temp_r27/20.0f; + temp_r29 = GWStarsGet(sp28[i])+(temp_f31*(GWStarsGet(lbl_1_bss_4A[i])-GWStarsGet(sp28[i]))); + fn_1_3B50(lbl_1_bss_CE[(i*2)], temp_r29); + temp_r29 = BoardPlayerCoinsGet(sp28[i])+(temp_f31*(BoardPlayerCoinsGet(lbl_1_bss_4A[i])-BoardPlayerCoinsGet(sp28[i]))); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], temp_r29); + } else { + temp_r30 = GWPlayerCfg[sp28[i]].character; + Hu3DModelAttrSet(lbl_1_bss_5C[temp_r30][sp18[i]], 1); + temp_r30 = GWPlayerCfg[lbl_1_bss_4A[i]].character; + Hu3DModelAttrReset(lbl_1_bss_A[i], 1); + Hu3DModelScaleSet(lbl_1_bss_A[i], 1.1f, 1.1f, 1.1f); + fn_1_3B50(lbl_1_bss_CE[(i*2)], GWStarsGet(lbl_1_bss_4A[i])); + fn_1_3B50(lbl_1_bss_CE[(i*2)+1], BoardPlayerCoinsGet(lbl_1_bss_4A[i])); + for(temp_r29=0; temp_r29<4; temp_r29++) { + if(sp28[temp_r29] == lbl_1_bss_4A[i]) { + break; + } + } + if(lbl_1_bss_42[i] != sp20[temp_r29]) { + if(lbl_1_bss_42[i] < sp20[temp_r29]) { + Hu3DAnimCreate(lbl_1_bss_E4[temp_r30][1], lbl_1_bss_5C[temp_r30][lbl_1_bss_42[i]], "ys22"); + } else { + Hu3DAnimCreate(lbl_1_bss_E4[temp_r30][2], lbl_1_bss_5C[temp_r30][lbl_1_bss_42[i]], "ys22"); + } + if(lbl_1_bss_42[i] == 0) { + sp38[lbl_1_bss_4A[i]] = HuAudPlayerVoicePlay(lbl_1_bss_4A[i], 293); + } + if(!temp_r25) { + temp_r25 = 1; + HuAudFXPlay(27); + } + } + sp30[i] = lbl_1_bss_4A[i]; + sp18[i] = lbl_1_bss_42[i]; + } + } + sp54[i] += 20.0f; + if(sp54[i] >= 360.0f) { + sp54[i] -= 360.0f; + } + temp_r30 = GWPlayerCfg[sp28[i]].character; + Hu3DModelRotSet(lbl_1_bss_5C[temp_r30][sp18[i]], sp54[i]/(4-i), sp54[i], 0.0f); + } + } + if(temp_r28 <= 10) { + for(i=0; i<4; i++) { + HuSprScaleSet(lbl_1_bss_9C, i, cos(M_PI*(9.0f*temp_r28)/180.0), cos(M_PI*(9.0f*temp_r28)/180.0)); + } + } else { + for(i=0; i<4; i++) { + HuSprScaleSet(lbl_1_bss_9C, i, 0.0f, 0.0f); + } + } + if(temp_r26 >= 4) { + break; + } + if(lbl_1_bss_174) { + temp_r28 += 2; + } + HuPrcVSleep(); + temp_r28++; + } + for(i=0; i<4; i++) { + HuSprScaleSet(lbl_1_bss_9C, i, 0.0f, 0.0f); + } + lbl_1_bss_0 = 1; +} + +void fn_1_3B50(s16 group, s16 value) +{ + s16 digit; + s16 digit_value; + if(value > 999) { + value = 999; + } + digit = 0; + digit_value = value/100; + if(digit_value != 0) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*100; + digit_value = value/10; + if(digit_value != 0 || digit == 1) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*10; + HuSprBankSet(group, digit, value); + HuSprAttrReset(group, digit, 4); + digit++; + for(digit_value=digit; digit_value<3; digit_value++) { + HuSprAttrSet(group, digit_value, 4); + } +} + +void fn_1_3CAC(s16 group, s16 value) +{ + s16 digit; + s16 digit_value; + if(value > 999) { + value = 999; + } + digit = 2; + digit_value = value/100; + if(digit_value != 0) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*100; + digit_value = value/10; + if(digit_value != 0 || digit == 3) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*10; + HuSprBankSet(group, digit, value); + HuSprAttrReset(group, digit, 4); + digit++; + for(digit_value=digit; digit_value<5; digit_value++) { + HuSprAttrSet(group, digit_value, 4); + } +} + +void fn_1_3E08(void) +{ + s16 i; + s16 j; + for(i=0; i<4; i++) { + lbl_1_bss_42[i] = BoardPlayerRankCalc(i); + lbl_1_bss_4A[i] = i; + } + for(j=1; j<4; j++) { + for(i=0; i<4-j; i++) { + if(lbl_1_bss_42[i] > lbl_1_bss_42[i+1]) { + s16 temp = lbl_1_bss_42[i]; + lbl_1_bss_42[i] = lbl_1_bss_42[i+1]; + lbl_1_bss_42[i+1] = temp; + temp = lbl_1_bss_4A[i]; + lbl_1_bss_4A[i] = lbl_1_bss_4A[i+1]; + lbl_1_bss_4A[i+1] = temp; + } + } + } } \ No newline at end of file diff --git a/src/game/audio.c b/src/game/audio.c index 804da97f..1348bd5b 100644 --- a/src/game/audio.c +++ b/src/game/audio.c @@ -597,16 +597,16 @@ void HuAudVoiceInit(s16 ovl) { } } -void HuAudPlayerVoicePlay(s16 arg0, s16 arg1) { +s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1) { s16 temp_r31 = GWPlayerCfg[arg0].character; - HuAudCharVoicePlay(temp_r31, arg1); + return HuAudCharVoicePlay(temp_r31, arg1); } -void HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2) { +s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2) { s16 temp_r31 = GWPlayerCfg[arg0].character; - HuAudCharVoicePlayPos(temp_r31, arg1, arg2); + return HuAudCharVoicePlayPos(temp_r31, arg1, arg2); } void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1) { From d32bd99e23068c4ac76eeb57be2e66690a4788dd Mon Sep 17 00:00:00 2001 From: Rainchus Date: Fri, 5 Apr 2024 13:34:39 -0500 Subject: [PATCH 5/7] fix accidental reverting of matching files in configure.py --- configure.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.py b/configure.py index f8ebc4dc..859c3d18 100644 --- a/configure.py +++ b/configure.py @@ -1055,7 +1055,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/resultDll/main.c"), Object(NonMatching, "REL/resultDll/battle.c"), - Object(NonMatching, "REL/resultDll/datalist.c"), + Object(Matching, "REL/resultDll/datalist.c"), } ), Rel('safDll', @@ -1141,8 +1141,8 @@ config.libs = [ Object(Matching, "REL/w06Dll/main.c"), Object(Matching, "REL/w06Dll/mg_item.c"), Object(Matching, "REL/w06Dll/mg_coin.c"), - Object(NonMatching, "REL/w06Dll/fire.c"), - Object(NonMatching, "REL/w06Dll/bridge.c"), + Object(Matching, "REL/w06Dll/fire.c"), + Object(Matching, "REL/w06Dll/bridge.c"), Object(NonMatching, "REL/w06Dll/bowser.c"), } ), From 3c8d3954b933989c228faf574b5c6d6d1198f09e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 5 Apr 2024 14:31:14 -0500 Subject: [PATCH 6/7] Decompile more of resultdll --- config/GMPE01_00/symbols.txt | 4 +- include/game/gamework_data.h | 5 + include/game/saveload.h | 13 ++- src/REL/resultDll/main.c | 204 ++++++++++++++++++++++++++++++++++- src/game/kerent.c | 16 +-- src/game/saveload.c | 14 +-- 6 files changed, 233 insertions(+), 23 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 76969889..77ad7c84 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -972,14 +972,14 @@ SLSaveDataMake = .text:0x80058860; // type:function size:0x154 SLSaveDataInfoSet = .text:0x800589B4; // type:function size:0x218 SLCommonSet = .text:0x80058BCC; // type:function size:0x254 SLSaveBoard = .text:0x80058E20; // type:function size:0x8C -SLSaveBoardBackup = .text:0x80058EAC; // type:function size:0x8C +SLSaveBoardStory = .text:0x80058EAC; // type:function size:0x8C SLSave = .text:0x80058F38; // type:function size:0x380 SLCreateSaveWin = .text:0x800592B8; // type:function size:0xDC scope:local SLKillSaveWin = .text:0x80059394; // type:function size:0x48 scope:local SLLoad = .text:0x800593DC; // type:function size:0x110 SLLoadGameStat = .text:0x800594EC; // type:function size:0x38 SLLoadBoard = .text:0x80059524; // type:function size:0x1A0 -SLLoadBoardBackup = .text:0x800596C4; // type:function size:0x184 +SLLoadBoardStory = .text:0x800596C4; // type:function size:0x184 SLSerialNoGet = .text:0x80059848; // type:function size:0x28 SLSerialNoCheck = .text:0x80059870; // type:function size:0xA0 SLCheckSumCheck = .text:0x80059910; // type:function size:0x60 diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index fa11d647..5b3b87e5 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -234,6 +234,11 @@ static inline void GWLuckyValueSet(s32 value) GWSystem.lucky_value = value; } +static inline s16 GWPlayerCoinBattleGet(s32 player) +{ + return GWPlayer[player].coins_battle; +} + static inline s16 GWPlayerCoinCollectGet(s32 player) { return GWPlayer[player].coin_collect; diff --git a/include/game/saveload.h b/include/game/saveload.h index d75df8af..97e26817 100644 --- a/include/game/saveload.h +++ b/include/game/saveload.h @@ -15,8 +15,8 @@ typedef struct save_buf_data { GameStat stat; SystemState system; PlayerState player[4]; - SystemState systemBackup; - PlayerState playerBackup[4]; + SystemState systemStory; + PlayerState playerStory[4]; } SaveBufData; typedef union save_buf_all { @@ -24,7 +24,12 @@ typedef union save_buf_all { u8 ATTRIBUTE_ALIGN(32) buf[SAVE_BUF_SIZE]; } SaveBufAll; +extern CARDFileInfo curFileInfo; extern SaveBufAll saveBuf; +extern u64 SLSerialNo; +extern s32 saveExecF; +extern u8 curBoxNo; +extern s16 curSlotNo; s32 SLFileOpen(char *fileName); s32 SLFileCreate(char *fileName, u32 size, void *addr); @@ -39,12 +44,12 @@ void SLSaveDataMake(s32 erase, OSTime *time); void SLSaveDataInfoSet(OSTime *time); void SLCommonSet(void); void SLSaveBoard(void); -void SLSaveBoardBackup(void); +void SLSaveBoardStory(void); s32 SLSave(void); s32 SLLoad(void); void SLLoadGameStat(void); void SLLoadBoard(void); -void SLLoadBoardBackup(void); +void SLLoadBoardStory(void); void SLSerialNoGet(void); BOOL SLSerialNoCheck(void); BOOL SLCheckSumCheck(void); diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index a9c1eacc..3f757674 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -10,6 +10,7 @@ #include "game/audio.h" #include "game/wipe.h" #include "game/pad.h" +#include "game/armem.h" #include "game/saveload.h" #include "game/gamework.h" #include "game/board/player.h" @@ -385,7 +386,7 @@ void fn_1_B78(void) lbl_1_bss_12[i][4] = HuSprCreate(anim2, 0, 0); HuSprGrpMemberSet(lbl_1_bss_3A[i], 4, lbl_1_bss_12[i][4]); HuSprPosSet(lbl_1_bss_3A[i], 4, 60.0f, -25.0f); - HuSprGrpPosSet(lbl_1_bss_3A[i], lbl_1_data_3D8[(i*2)], lbl_1_data_3D8[(i*2)+1]); + HuSprGrpPosSet(lbl_1_bss_3A[i], lbl_1_data_438[(i*2)], lbl_1_data_438[(i*2)+1]); fn_1_3CAC(lbl_1_bss_3A[i], 9); HuSprGrpScaleSet(lbl_1_bss_3A[i], 0.0f, 0.0f); } @@ -687,7 +688,7 @@ void fn_1_2ADC(void) temp_r27 = temp_r28-(i*20); if(temp_r27 <= 20) { if(temp_r27 <= 10) { - HuSprScaleSet(lbl_1_bss_52, i, 1.0f, sin(M_PI*(9.0f*temp_r27)/180.0)); + HuSprScaleSet(lbl_1_bss_52, i, 1.0f, cos(M_PI*(9.0f*temp_r27)/180.0)); } else { HuSprAttrSet(lbl_1_bss_52, i, 4); HuSprAttrReset(lbl_1_data_380, i, 4); @@ -841,4 +842,203 @@ void fn_1_3E08(void) } } } +} + +s32 lbl_1_data_450[] = { + DATADIR_W01, + DATADIR_W02, + DATADIR_W03, + DATADIR_W04, + DATADIR_W05, + DATADIR_W06 +}; + +void fn_1_3FD8(void) +{ + s32 status; + u32 ardma; + if(!_CheckFlag(0x10000)) { + lbl_1_bss_178 = 1; + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } + } + status = HuDataDirReadAsync(DATADIR_BOARD); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + ardma = HuAR_MRAMtoARAM(DATADIR_BOARD); + if(ardma) { + while(HuARDMACheck()) { + HuPrcVSleep(); + } + } + HuDataDirClose(DATADIR_BOARD); + status = HuDataDirReadAsync(lbl_1_data_450[GWSystem.board]); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + lbl_1_bss_178 = 1; + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_40DC(void) +{ + s16 i; + s16 sp8[5]; + fn_1_423C(sp8); + sp8[lbl_1_bss_172] += sp8[4]; + for(i=0; i<4; i++) { + GWCoinsAdd(i, sp8[i]); + GWPlayerCoinWinSet(i, 0); + GWPlayerCoinCollectSet(i, 0); + if(mgInfoTbl[GWSystem.mg_next].type != 4) { + GWPlayer[i].coins_mg += sp8[i]; + if(GWPlayer[i].coins_mg > 9999) { + GWPlayer[i].coins_mg = 9999; + } + } + } +} + +void fn_1_423C(s16 *data) +{ + s16 i; + s32 coin; + u32 mul_coin; + u32 coin_battle; + s16 temp_r26; + s16 mgtype; + float sp10[4]; + s16 sp8[4]; + mgtype = mgInfoTbl[GWSystem.mg_next].type; + switch(mgtype) { + case 4: + temp_r26 = 0; + for(i=coin_battle=0; i<4; i++) { + coin_battle += GWPlayerCoinBattleGet(i); + } + sp8[0] = sp8[1] = sp8[2] = sp8[3] = 0; + for(i=0; i<4; i++) { + sp8[GWPlayerCoinWinGet(i)]++; + } + sp10[0] = sp10[1] = sp10[2] = sp10[3] = 0; + if(sp8[0] == 1 && sp8[1] == 1 && sp8[2] == 1) { + sp10[0] = 0.7f; + sp10[1] = 0.3f; + } else if(sp8[0] ==2) { + sp10[0] = 0.5f; + } else if(sp8[0] == 3) { + sp10[0] = 1.0f/3.0f; + } else if(sp8[0] == 1 && sp8[1] == 2) { + sp10[0] = 0.6f; + sp10[1] = 0.2f; + } else if(sp8[0] == 1 && sp8[1] == 3) { + sp10[0] = 0.7f; + sp10[1] = 0.1f; + } else if(sp8[0] == 1 && sp8[1] == 1 && sp8[2] == 2) { + sp10[0] = 0.7f; + sp10[1] = 0.3f; + } else if(sp8[0] == 4) { + sp10[0] = 0.25f; + } else { + temp_r26 = 1; + } + for(i=coin=0; i<4; i++) { + if(!temp_r26) { + mul_coin = coin_battle*sp10[GWPlayerCoinWinGet(i)]; + } else { + mul_coin = GWPlayerCoinBattleGet(i); + } + data[i] = mul_coin; + coin += mul_coin; + } + if(coin < coin_battle) { + data[4] = coin_battle-coin; + } else { + data[4] = 0; + } + break; + + default: + for(i=0; i<4; i++) { + coin = GWPlayerCoinWinGet(i)+GWPlayerCoinCollectGet(i); + mul_coin = GWLuckyValueGet(); + if(mul_coin == 0) { + mul_coin = 1; + } + coin *= mul_coin; + data[i] = coin; + } + break; + } +} + +void fn_1_461C(void) +{ + s16 sprite; + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + espInit(); + HuPrcVSleep(); + sprite = espEntry(0x860020, 5000, 0); + espPosSet(sprite, 288.0, 240.0); + espAttrReset(sprite, 4); + Hu3DBGColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + if(GWSaveModeGet() == 2) { + GWSystem.save_mode = 1; + } + if(GWPartyGet() == 1) { + GWGameStat.party_continue = 1; + SLSaveBoard(); + } else { + GWGameStat.story_continue = 1; + SLSaveBoardStory(); + } + SLCommonSet(); + if(SLSave()) { + saveExecF = 1; + } else { + GWSystem.save_mode = 1; + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } +} + +s32 lbl_1_data_468[] = { + DATADIR_MARIOMDL1, + DATADIR_LUIGIMDL1, + DATADIR_PEACHMDL1, + DATADIR_YOSHIMDL1, + DATADIR_WARIOMDL1, + DATADIR_DONKEYMDL1, + DATADIR_DAISYMDL1, + DATADIR_WALUIGIMDL1 +}; + +Vec lbl_1_data_488[] = { + { 160, 185, 500 }, + { 240, 185, 500 }, + { 160, 355, 500 }, + { 240, 355, 500 }, +}; + +void fn_1_47FC(void) +{ + } \ No newline at end of file diff --git a/src/game/kerent.c b/src/game/kerent.c index fb99d976..bbde6772 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -578,11 +578,11 @@ void SLCurSlotNoSet(void); void SLSaveDataMake(void); void SLCommonSet(void); void SLSaveBoard(void); -void SLSaveBoardBackup(void); +void SLSaveBoardStory(void); void SLSave(void); void SLLoadGameStat(void); void SLLoadBoard(void); -void SLLoadBoardBackup(void); +void SLLoadBoardStory(void); void SLLoad(void); void SLCurBoxNoSet(void); void SLSaveFlagSet(void); @@ -1595,11 +1595,11 @@ extern void _kerjmp_SLCurSlotNoSet(void); extern void _kerjmp_SLSaveDataMake(void); extern void _kerjmp_SLCommonSet(void); extern void _kerjmp_SLSaveBoard(void); -extern void _kerjmp_SLSaveBoardBackup(void); +extern void _kerjmp_SLSaveBoardStory(void); extern void _kerjmp_SLSave(void); extern void _kerjmp_SLLoadGameStat(void); extern void _kerjmp_SLLoadBoard(void); -extern void _kerjmp_SLLoadBoardBackup(void); +extern void _kerjmp_SLLoadBoardStory(void); extern void _kerjmp_SLLoad(void); extern void _kerjmp_SLCurBoxNoSet(void); extern void _kerjmp_SLSaveFlagSet(void); @@ -3195,16 +3195,16 @@ asm void _kerent(void) { b SLCommonSet entry _kerjmp_SLSaveBoard b SLSaveBoard - entry _kerjmp_SLSaveBoardBackup - b SLSaveBoardBackup + entry _kerjmp_SLSaveBoardStory + b SLSaveBoardStory entry _kerjmp_SLSave b SLSave entry _kerjmp_SLLoadGameStat b SLLoadGameStat entry _kerjmp_SLLoadBoard b SLLoadBoard - entry _kerjmp_SLLoadBoardBackup - b SLLoadBoardBackup + entry _kerjmp_SLLoadBoardStory + b SLLoadBoardStory entry _kerjmp_SLLoad b SLLoad entry _kerjmp_SLCurBoxNoSet diff --git a/src/game/saveload.c b/src/game/saveload.c index 2859f33a..de336950 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -12,7 +12,7 @@ #include "stddef.h" #define SAVE_GET_PLAYER(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, player)] -#define SAVE_GET_PLAYER_BACKUP(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerBackup)] +#define SAVE_GET_PLAYER_STORY(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerStory)] static s16 SLCreateSaveWin(void); static void SLKillSaveWin(void); @@ -319,12 +319,12 @@ void SLSaveBoard(void) { } } -void SLSaveBoardBackup(void) { +void SLSaveBoardStory(void) { s16 i; - memcpy(&saveBuf.data.systemBackup, &GWSystem, sizeof(SystemState)); + memcpy(&saveBuf.data.systemStory, &GWSystem, sizeof(SystemState)); for (i = 0; i < 4; i++) { - memcpy(SAVE_GET_PLAYER_BACKUP(i), &GWPlayer[i], sizeof(PlayerState)); + memcpy(SAVE_GET_PLAYER_STORY(i), &GWPlayer[i], sizeof(PlayerState)); } } @@ -470,12 +470,12 @@ void SLLoadBoard(void) { } } -void SLLoadBoardBackup(void) { +void SLLoadBoardStory(void) { s16 i; - memcpy(&GWSystem, &saveBuf.data.systemBackup, 0xDC); + memcpy(&GWSystem, &saveBuf.data.systemStory, 0xDC); for (i = 0; i < 4; i++) { - memcpy(&GWPlayer[i], SAVE_GET_PLAYER_BACKUP(i), sizeof(PlayerState)); + memcpy(&GWPlayer[i], SAVE_GET_PLAYER_STORY(i), sizeof(PlayerState)); GWPlayerCfg[i].character = GWPlayer[i].character; GWPlayerCfg[i].pad_idx = GWPlayer[i].port; GWPlayerCfg[i].diff = GWPlayer[i].diff; From 58a961e7225b89351b22473547de702d8711bffd Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 5 Apr 2024 15:41:50 -0500 Subject: [PATCH 7/7] Decompile resultdll/main.c --- config/GMPE01_00/rels/resultDll/symbols.txt | 138 +++++------ configure.py | 2 +- src/REL/resultDll/main.c | 258 +++++++++++++++++++- 3 files changed, 327 insertions(+), 71 deletions(-) diff --git a/config/GMPE01_00/rels/resultDll/symbols.txt b/config/GMPE01_00/rels/resultDll/symbols.txt index acded739..64910ff2 100644 --- a/config/GMPE01_00/rels/resultDll/symbols.txt +++ b/config/GMPE01_00/rels/resultDll/symbols.txt @@ -31,70 +31,70 @@ fn_1_927C = .text:0x0000927C; // type:function size:0x138 fn_1_93B4 = .text:0x000093B4; // type:function size:0x78 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 data:4byte -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -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:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:float lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float @@ -137,20 +137,20 @@ lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data: lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0xDC data:4byte lbl_1_data_380 = .data:0x00000380; // type:object size:0x2 data:2byte -lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 data:string +lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x18 lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x18 lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x20 lbl_1_data_3F8 = .data:0x000003F8; // type:object size:0x10 lbl_1_data_408 = .data:0x00000408; // type:object size:0x30 lbl_1_data_438 = .data:0x00000438; // type:object size:0x10 -lbl_1_data_448 = .data:0x00000448; // type:object size:0x8 +lbl_1_data_448 = .data:0x00000448; // type:object size:0x8 scope:local lbl_1_data_450 = .data:0x00000450; // type:object size:0x18 lbl_1_data_468 = .data:0x00000468; // type:object size:0x20 lbl_1_data_488 = .data:0x00000488; // type:object size:0x30 -lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 data:string -lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 data:string -lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB data:string +lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string +lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string +lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string lbl_1_data_4E8 = .data:0x000004E8; // type:object size:0x270 lbl_1_data_758 = .data:0x00000758; // type:object size:0x28 lbl_1_data_780 = .data:0x00000780; // type:object size:0x70 diff --git a/configure.py b/configure.py index 859c3d18..e02757d7 100644 --- a/configure.py +++ b/configure.py @@ -1053,7 +1053,7 @@ config.libs = [ Rel('resultDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/resultDll/main.c"), + Object(Matching, "REL/resultDll/main.c"), Object(NonMatching, "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/datalist.c"), } diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index 3f757674..b7839e9f 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -937,7 +937,7 @@ void fn_1_423C(s16 *data) } else if(sp8[0] ==2) { sp10[0] = 0.5f; } else if(sp8[0] == 3) { - sp10[0] = 1.0f/3.0f; + sp10[0] = 0.3333333f; } else if(sp8[0] == 1 && sp8[1] == 2) { sp10[0] = 0.6f; sp10[1] = 0.2f; @@ -1040,5 +1040,261 @@ Vec lbl_1_data_488[] = { void fn_1_47FC(void) { + s16 temp_r31; + s16 temp_r24; + s16 temp_r21; + s16 temp_r20; + s16 temp_r19; + s16 temp_r18; + s16 temp_r17; + Vec sp40; + Vec sp34; + s16 sp2C[4]; + s16 sp28[2]; + s16 sp24[2]; + s16 sp20[2]; + s16 sp1C[2]; + s16 sp18[2]; + AnimData *sp14; + s32 sp10; + s16 spC; + s16 spA; + s16 sp8; + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + espAttrSet(lbl_1_bss_1A1A[0], 4); + espAttrSet(lbl_1_bss_1A1A[1], 4); + for(temp_r31=0; temp_r31<2; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_1A9C[temp_r31+6], 1); + Hu3DModelAttrSet(lbl_1_bss_1A9C[temp_r31+10], 1); + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + espAttrSet(lbl_1_bss_1A1A[temp_r31+6], 4); + } + for(temp_r31=4; temp_r31<8; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_158[temp_r31], 1); + } + for(temp_r31=4; temp_r31<8; temp_r31++) { + HuSprGrpTPLvlSet(lbl_1_bss_CE[temp_r31], 0.0f); + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + for(temp_r19=0; temp_r19<4; temp_r19++) { + Hu3DModelAttrSet(lbl_1_bss_5C[GWPlayerCfg[temp_r31].character][temp_r19], 1); + } + Hu3DModelAttrSet(lbl_1_bss_54[temp_r31], 1); + } + HuSprGrpKill(lbl_1_bss_9C); + HuSprGrpKill(lbl_1_bss_52); + if(lbl_1_data_380 != -1) { + HuSprGrpKill(lbl_1_data_380); + } + sp28[0] = sp28[1] = 0; + sp24[0] = sp24[1] = 0; + sp1C[0] = 0; + sp1C[1] = 2; + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r17 = GWPlayer[temp_r31].team; + sp28[temp_r17] += BoardPlayerCoinsGet(temp_r31); + sp24[temp_r17] += GWStarsGet(temp_r31); + sp2C[sp1C[temp_r17]++] = GWPlayerCfg[temp_r31].character; + } + sp18[0] = 0; + sp18[1] = 1; + if(sp24[0] > sp24[1]) { + lbl_1_bss_8 = 0; + } else { + if(sp24[0] == sp24[1]) { + if(sp28[0] > sp28[1]) { + lbl_1_bss_8 =0; + } else if(sp28[0] == sp28[1]) { + sp18[0] = sp18[1] = 0; + lbl_1_bss_8 = 0; + } else { + lbl_1_bss_8 = 1; + } + } else { + lbl_1_bss_8 = 1; + } + } + HuSprAttrReset(lbl_1_bss_170, 0, 4); + HuSprAttrReset(lbl_1_bss_170, 1, 4); + HuSprPosSet(lbl_1_bss_170, 1, 0, -180); + HuSprAttrReset(lbl_1_bss_170, 2, 4); + HuSprAttrReset(lbl_1_bss_170, 3, 4); + if(lbl_1_bss_8 == 0) { + sp20[0] = -55; + sp20[1] = 115; + } else { + sp20[0] = 115; + sp20[1] = -55; + temp_r24 = sp2C[0]; + sp2C[0] = sp2C[2]; + sp2C[2] = temp_r24; + temp_r24 = sp2C[1]; + sp2C[1] = sp2C[3]; + sp2C[3] = temp_r24; + temp_r24 = sp28[0]; + sp28[0] = sp28[1]; + sp28[1] = temp_r24; + temp_r24 = sp24[0]; + sp24[0] = sp24[1]; + sp24[1] = temp_r24; + } + HuSprPosSet(lbl_1_bss_170, 2, 0, sp20[0]); + HuSprPosSet(lbl_1_bss_170, 3, 0, sp20[1]); + HuSprGrpPosSet(lbl_1_bss_170, 288, 240); + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 < 2) { + sp10 = 0; + } else { + sp10 = 1; + } + temp_r18 = lbl_1_bss_5C[sp2C[temp_r31]][sp10]; + Hu3DAnimCreate(lbl_1_bss_E4[sp2C[temp_r31]][0], temp_r18, "ys22"); + Hu3DModelAttrReset(temp_r18, 1); + Hu3D2Dto3D(&lbl_1_data_488[temp_r31], 1, &sp40); + Hu3DModelPosSetV(temp_r18, &sp40); + Hu3DModelRotSet(temp_r18, 0, 0, 0); + sp34 = lbl_1_data_488[temp_r31]; + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_168[temp_r31], &sp40); + } + spC = HuSprGrpCreate(2); + for(temp_r31=0; temp_r31<2; temp_r31++) { + sp14 = HuSprAnimReadFile(0x6F0016+sp18[temp_r31]); + spA = HuSprCreate(sp14, temp_r31, 0); + HuSprGrpMemberSet(spC, temp_r31, spA); + HuSprPosSet(spC, temp_r31, (lbl_1_data_488[temp_r31*2].x)-80.0f, lbl_1_data_488[temp_r31*2].y); + sp34 = lbl_1_data_488[temp_r31*2]; + sp34.x += 180.0f; + sp34.y -= 35.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_1A9C[temp_r31+4], &sp40); + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_158[temp_r31*2], &sp40); + espPosSet(lbl_1_bss_1A1A[(temp_r31*2)+2], 230.0f+lbl_1_data_488[temp_r31*2].x, lbl_1_data_488[temp_r31*2].y-35.0f); + fn_1_3B50(lbl_1_bss_CE[temp_r31*2], sp24[temp_r31]); + HuSprGrpPosSet(lbl_1_bss_CE[temp_r31*2], 320.0f+lbl_1_data_488[temp_r31*2].x, lbl_1_data_488[temp_r31*2].y-35.0f); + sp34 = lbl_1_data_488[temp_r31*2]; + sp34.x += 180.0f; + sp34.y += 35.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_1A9C[temp_r31+8], &sp40); + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_158[(temp_r31*2)+1], &sp40); + espPosSet(lbl_1_bss_1A1A[(temp_r31*2)+3], 230.0f+lbl_1_data_488[temp_r31*2].x, 35.0f+lbl_1_data_488[temp_r31*2].y); + fn_1_3B50(lbl_1_bss_CE[(temp_r31*2)+1], sp28[temp_r31]); + HuSprGrpPosSet(lbl_1_bss_CE[(temp_r31*2)+1], 320.0f+lbl_1_data_488[temp_r31*2].x, 35.0f+lbl_1_data_488[temp_r31*2].y); + } + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + temp_r21 = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0); + HuWinMesSpeedSet(temp_r21, 0); + HuWinBGTPLvlSet(temp_r21, 0); + HuWinPriSet(temp_r21, 5); + HuWinAttrSet(temp_r21, 0x800); + HuWinMesSet(temp_r21, 0x240007); + HuPrcSleep(4); + temp_r31 = 0; + while(1) { + if(lbl_1_bss_4 && temp_r31 > 120) { + break; + } + for(temp_r20=sp8=0; temp_r20<4; temp_r20++) { + if(!GWPlayerCfg[temp_r20].iscom) { + sp8 |= HuPadBtnDown[GWPlayerCfg[temp_r20].pad_idx]; + } + } + if(sp8 & PAD_BUTTON_A) { + HuAudFXPlay(28); + break; + } + HuPrcVSleep(); + temp_r31++; + } + HuWinKill(temp_r21); +} + +void fn_1_5880(omObjData *object) +{ + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + if(HuPadBtn[0] & PAD_BUTTON_UP) { + CRot.x += 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_DOWN) { + CRot.x -= 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_LEFT) { + CRot.y += 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_RIGHT) { + CRot.y -= 2.0f; + } + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + OSReport("CRot %f,%f,%f\n", CRot.x, CRot.y, CRot.z); + OSReport("Center %f,%f,%f\n", Center.x, Center.y, Center.z); + OSReport("CZoom %f\n", CZoom); + } + + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + pos.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + pos.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + pos.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + offset.x = Center.x - pos.x; + offset.y = Center.y - pos.y; + offset.z = Center.z - pos.z; + dir.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + dir.y = cos((M_PI * CRot.x) / 180.0); + dir.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + z_rot = CRot.z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cos((M_PI * z_rot) / 180.0)) + + dir.y * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.x * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.y * sin((M_PI * z_rot) / 180.0)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cos((M_PI * z_rot) / 180.0)) + + dir.x * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.y * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.x * sin((M_PI * z_rot) / 180.0)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cos((M_PI * z_rot) / 180.0)) + + (dir.x * (offset.x * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) - offset.y * sin((M_PI * z_rot) / 180.0)) + + dir.y * (offset.y * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) + offset.x * sin((M_PI * z_rot) / 180.0))); + + PSVECCrossProduct(&dir, &offset, &offset); + PSVECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + Center.x += 0.05f * (offset.x * stick_pos); + Center.y += 0.05f * (offset.y * stick_pos); + Center.z += 0.05f * (offset.z * stick_pos); + } + PSVECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + Center.x += 0.05f * (offset.x * stick_pos); + Center.y += 0.05f * (offset.y * stick_pos); + Center.z += 0.05f * (offset.z * stick_pos); + } } \ No newline at end of file