From 49a51164a01a2ef63192785be170a44562deabd6 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 22 Apr 2024 15:19:47 -0500 Subject: [PATCH 1/6] Add various minigame macros --- include/REL/modeltestDll.h | 3 --- include/game/gamework_data.h | 3 +++ include/game/minigame_seq.h | 37 ++++++++++++++++++++++++++++++++++++ src/REL/m407dll/main.c | 18 +++++++++--------- src/REL/modeltestDll/main.c | 17 +++++++++-------- src/REL/w01Dll/mg_item.c | 4 ++-- src/REL/w03Dll/mg_coin.c | 4 ++-- src/REL/w03Dll/mg_item.c | 4 ++-- src/REL/w06Dll/mg_item.c | 4 ++-- src/game/minigame_seq.c | 22 ++++++++++----------- 10 files changed, 77 insertions(+), 39 deletions(-) diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h index 0715ad9b..d0b4ccc3 100644 --- a/include/REL/modeltestDll.h +++ b/include/REL/modeltestDll.h @@ -35,13 +35,10 @@ extern Point3d Center; extern f32 CZoom; void fn_1_29C(); void fn_1_28F8(Point3d * arg0, Point3d * arg1); -extern void omOutView(); void fn_1_37DC(omObjData*); void fn_1_439C(omObjData*); void fn_1_46F0(); -s16 MGSeqCreate(s16, ...); -void MGSeqParamSet(s16, s16, s16); typedef void (omObjFunc2)(struct om_obj_data *); omObjFunc2 fn_1_F9C; diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 35303b96..5b3d2a26 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -310,4 +310,7 @@ static inline void GWPlayerCoinWinSet(s32 player, s16 value) } } +#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value)) +#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), GWPlayerCoinCollectGet((player))+(value)) + #endif diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h index ba4a2322..4bfd3107 100644 --- a/include/game/minigame_seq.h +++ b/include/game/minigame_seq.h @@ -4,6 +4,43 @@ #include "game/object.h" #include "stdarg.h" +#define MG_SEQ_TYPE_TIMER 1 +#define MG_SEQ_TYPE_AUTO 3 +#define MG_SEQ_TYPE_1VS3 4 +#define MG_SEQ_TYPE_WIN 5 +#define MG_SEQ_TYPE_BATTLE 6 +#define MG_SEQ_TYPE_STORY 7 +#define MG_SEQ_TYPE_4P 8 +#define MG_SEQ_TYPE_2VS2 9 +#define MG_SEQ_TYPE_PINBALL 10 +#define MG_SEQ_TYPE_BOWSER 11 +#define MG_SEQ_TYPE_ALTWIN 12 +#define MG_SEQ_TYPE_DRAW 13 +#define MG_SEQ_TYPE_RECORD 14 + +#define MG_SEQ_WIN_TYPE_WIN 3 +#define MG_SEQ_WIN_TYPE_LOSE 4 +#define MG_SEQ_WIN_TYPE_CHAMPION 5 + +#define MG_SEQ_WORD_START 0 +#define MG_SEQ_WORD_FINISH 1 +#define MG_SEQ_WORD_DRAW 2 + +#define MGSeqTimerCreate(value) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), -1, -1) +#define MGSeqTimerCreateXY(value, x, y) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), (int)(x), (int)(y)) +#define MGSeqStartCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_START) +#define MGSeqFinishCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_FINISH) +#define MGSeqDrawCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_DRAW) +#define MGSeqStartCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_START) +#define MGSeqFinishCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_FINISH) +#define MGSeqDrawCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_DRAW) +#define MGSeqWinCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_WIN, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqLoseCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_LOSE, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqChampionCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_ALTWIN, MG_SEQ_WIN_TYPE_CHAMPION, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqRecordCreate(value) MGSeqCreate(MG_SEQ_TYPE_RECORD, (value)) + + + typedef struct seq_work SeqWork; typedef int (*SeqUpdateFunc)(SeqWork *work); diff --git a/src/REL/m407dll/main.c b/src/REL/m407dll/main.c index 0336a620..7be29e78 100644 --- a/src/REL/m407dll/main.c +++ b/src/REL/m407dll/main.c @@ -211,7 +211,7 @@ void fn_1_4E8C(void) { temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_06 == -1) { - temp_r31->unk_06 = MGSeqCreate(3, 0); + temp_r31->unk_06 = MGSeqStartCreate(); temp_r31->unk_44 = HuAudSeqPlay(0x46); fn_1_2564(); for (i = 0; i < 4; i++) { @@ -222,7 +222,7 @@ void fn_1_4E8C(void) { MGSeqKill(temp_r31->unk_06); temp_r31->unk_06 = -1; temp_r31->unk_10 = 0x258; - temp_r31->unk_08 = MGSeqCreate(1, temp_r31->unk_10 / 60, -1, -1); + temp_r31->unk_08 = MGSeqTimerCreate(temp_r31->unk_10 / 60); fn_1_1E4(); fn_1_4C3C(3); } @@ -299,7 +299,7 @@ void fn_1_52AC(void) { temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { - temp_r31->unk_06 = MGSeqCreate(3, 1); + temp_r31->unk_06 = MGSeqFinishCreate(); temp_r31->unk_04++; HuAudSeqFadeOut(temp_r31->unk_44, 100); } @@ -362,7 +362,7 @@ void fn_1_5574(void) { temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { GWMGRecordSet(1, fn_1_28D4()); - temp_r31->unk_06 = MGSeqCreate(14, fn_1_28D4()); + temp_r31->unk_06 = MGSeqRecordCreate(fn_1_28D4()); fn_1_5F40(1); temp_r31->unk_04++; return; @@ -384,15 +384,15 @@ void fn_1_5630(void) { } } if (temp_r31->unk_24 == 0) { - temp_r31->unk_06 = MGSeqCreate(3, 2); + temp_r31->unk_06 = MGSeqDrawCreate(); HuAudSStreamPlay(4); } else { - temp_r31->unk_06 = MGSeqCreate(5, 3, fn_1_4C0(temp_r31->unk_1C[0]), fn_1_4C0(temp_r31->unk_1C[1]), fn_1_4C0(temp_r31->unk_1C[2]), fn_1_4C0(temp_r31->unk_1C[3])); + temp_r31->unk_06 = MGSeqWinCreate(fn_1_4C0(temp_r31->unk_1C[0]), fn_1_4C0(temp_r31->unk_1C[1]), fn_1_4C0(temp_r31->unk_1C[2]), fn_1_4C0(temp_r31->unk_1C[3])); for (i = 0; i < ARRAY_COUNT(temp_r31->unk_1C); i++) { if (temp_r31->unk_1C[i] != -1) { fn_1_3C4(temp_r31->unk_1C[i]); - GWPlayerCoinWinSet(temp_r31->unk_1C[i], GWPlayerCoinWinGet(temp_r31->unk_1C[i])+10); - } + GWPlayerCoinWinAdd(temp_r31->unk_1C[i], 10); + } } HuAudSStreamPlay(1); } @@ -500,7 +500,7 @@ void fn_1_5BB0(void) { temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { - temp_r31->unk_06 = MGSeqCreate(3, 2); + temp_r31->unk_06 = MGSeqDrawCreate(); temp_r31->unk_04++; } if (MGSeqStatGet(temp_r31->unk_06) == 0) { diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index e877c495..c2609edb 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -11,6 +11,7 @@ #include "game/window.h" #include "game/gamework_data.h" #include "game/sprite.h" +#include "game/minigame_seq.h" #include "REL/modeltestDll.h" @@ -287,7 +288,7 @@ void fn_1_29C(omObjData * arg0) HuSprExecLayerSet(0x40, 1); HuSprGrpDrawNoSet(lbl_1_bss_99C, 0x40); lbl_1_bss_458 = 0x293; - lbl_1_bss_45A[0] = MGSeqCreate(1, lbl_1_bss_458 / 60, -1, -1); + lbl_1_bss_45A[0] = MGSeqTimerCreate(lbl_1_bss_458 / 60); temp_r29 = HuDataSelHeapReadNum(0x120001, 0x10000000, 2); temp_r28 = HuSprAnimRead(temp_r29); lbl_1_bss_888 = Hu3DParManCreate(temp_r28, 0x3E8, &lbl_1_data_208); @@ -505,27 +506,27 @@ void fn_1_F9C(struct om_obj_data * omData) } if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) { - var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 0); + var_r30 = MGSeqStartCreateType(teropPatterns.unk0[lbl_1_bss_24]); } if ((HuPadBtnDown[0] & PAD_BUTTON_A) != 0) { - var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 2); + var_r30 = MGSeqDrawCreateType(teropPatterns.unk0[lbl_1_bss_24]); } if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { - var_r30 = MGSeqCreate(0xE, 0x3B); + var_r30 = MGSeqRecordCreate(59); } if ((HuPadBtnDown[0] & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)) != 0) { if ((HuPadBtnDown[0] & PAD_BUTTON_UP) != 0) { - MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, -1, -1, -1); + MGSeqChampionCreate(GWPlayerCfg[0].character, -1, -1, -1); } if ((HuPadBtnDown[0] & PAD_BUTTON_LEFT) != 0) { - MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, -1, -1); + MGSeqChampionCreate(GWPlayerCfg[0].character, GWPlayerCfg[1].character, -1, -1); } if ((HuPadBtnDown[0] & PAD_BUTTON_DOWN) != 0) { - MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, -1); + MGSeqChampionCreate(GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, -1); } if ((HuPadBtnDown[0] & PAD_BUTTON_RIGHT) != 0) { - MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, GWPlayerCfg[3].character); + MGSeqChampionCreate(GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, GWPlayerCfg[3].character); } } fontcolor = 5; diff --git a/src/REL/w01Dll/mg_item.c b/src/REL/w01Dll/mg_item.c index 5a1b133a..79acc244 100755 --- a/src/REL/w01Dll/mg_item.c +++ b/src/REL/w01Dll/mg_item.c @@ -337,7 +337,7 @@ static void fn_1_E914(omObjData *arg0) { lbl_1_bss_7FC[i]->func = fn_1_FED0; } BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7B8, 0.0f, 5.0f, 0x40000001); - lbl_1_bss_7D6 = MGSeqCreate(3, 0); + lbl_1_bss_7D6 = MGSeqStartCreate(); BoardMusStart(1, 0xE, 0x7F, 0); arg0->func = fn_1_ECD4; } @@ -359,7 +359,7 @@ static void fn_1_ECD4(omObjData *arg0) { arg0->func = fn_1_EED8; lbl_1_bss_7D2 = 5; lbl_1_bss_7D0 = 60; - lbl_1_bss_7D4 = MGSeqCreate(1, lbl_1_bss_7D2, 0x120, 0x40); + lbl_1_bss_7D4 = MGSeqTimerCreateXY(lbl_1_bss_7D2, 288, 64); } BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC); BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8); diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index e9238dc7..a52e5570 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -209,7 +209,7 @@ void fn_1_8140(s32 arg0) { fn_1_81E0(arg0); BoardMusStart(1, 0x16, 0x7F, 0); - temp_r31 = MGSeqCreate(3, 0); + temp_r31 = MGSeqStartCreate(); while (MGSeqStatGet(temp_r31)) { HuPrcVSleep(); @@ -305,7 +305,7 @@ void fn_1_84A8(s32 arg0) { temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_144, someBits3); temp_r31->unk00_bit1 = arg0; if (arg0 == 0) { - temp_r31->unk_04 = MGSeqCreate(1, temp_r31->unk2, 0x120, 0x40); + temp_r31->unk_04 = MGSeqTimerCreateXY(temp_r31->unk2, 288, 64); } } } diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index ea7c19b3..4a4ab195 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -345,7 +345,7 @@ void fn_1_A44C(s32 arg0) { s32 temp_r28; BoardMusStart(1, 0x17, 0x7F, 0); - temp_r30 = MGSeqCreate(3, 0); + temp_r30 = MGSeqStartCreate(); while (MGSeqStatGet(temp_r30) != 0) { HuPrcVSleep(); @@ -434,7 +434,7 @@ void fn_1_A7A0(s32 arg0) { temp_r31->unk00_bit1 = 0; temp_r31->unk1 = 5U; temp_r31->unk2 = 0x3C; - temp_r31->unk4 = MGSeqCreate(1, temp_r31->unk1, 0x120, 0x40); + temp_r31->unk4 = MGSeqTimerCreateXY(temp_r31->unk1, 288, 64); fn_1_BB74(lbl_1_bss_194); lbl_1_bss_18C = fn_1_AE4C(arg0, lbl_1_bss_194); } diff --git a/src/REL/w06Dll/mg_item.c b/src/REL/w06Dll/mg_item.c index cf6d9691..a0e93a6d 100755 --- a/src/REL/w06Dll/mg_item.c +++ b/src/REL/w06Dll/mg_item.c @@ -295,7 +295,7 @@ static void fn_1_15CC(s32 arg0) { s32 var_r31; BoardMusStart(1, 0x26, 0x7F, 0); - temp_r26 = MGSeqCreate(3, 0); + temp_r26 = MGSeqStartCreate(); while (MGSeqStatGet(temp_r26) != 0) { HuPrcVSleep(); } @@ -1072,7 +1072,7 @@ static void fn_1_4070(void) { temp_r31->unk00_field0 = 0; temp_r31->unk01 = 5; temp_r31->unk02 = 60; - temp_r31->unk04 = MGSeqCreate(1, temp_r31->unk01, 0x120, 0x40); + temp_r31->unk04 = MGSeqTimerCreateXY(temp_r31->unk01, 288, 64); } static void fn_1_4124(void) { diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index dceadba4..6834f870 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -83,15 +83,15 @@ static s32 seqType2SprTbl[6] = { }; static s16 mgSeqTypeTbl[9] = { - 8, - 4, - 9, - 11, - 6, - 10, - 7, - 11, - 7 + MG_SEQ_TYPE_4P, + MG_SEQ_TYPE_1VS3, + MG_SEQ_TYPE_2VS2, + MG_SEQ_TYPE_BOWSER, + MG_SEQ_TYPE_BATTLE, + MG_SEQ_TYPE_PINBALL, + MG_SEQ_TYPE_STORY, + MG_SEQ_TYPE_BOWSER, + MG_SEQ_TYPE_STORY }; static char lbl_8012F336[] = { @@ -252,9 +252,9 @@ s16 MGSeqCreate(s16 type, ...) s16 ret; va_list params; va_start(params, type); - if(type == 3) { + if(type == MG_SEQ_TYPE_AUTO) { if(GWSystem.mg_next == 0xFFFF) { - type = 8; + type = MG_SEQ_TYPE_4P; } else { type = mgSeqTypeTbl[mgInfoTbl[GWSystem.mg_next].type]; } From da91a2118342b83f98037dd197963d98a5528cea Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 22 Apr 2024 21:43:44 -0500 Subject: [PATCH 2/6] Decompile part of E3setup Stopped at InitPlayerCnt due to needing to fix parameter type to HuWinMesMaxSizeGet. It needs to be changed to use a new 2D Vector type. --- config/GMPE01_00/rels/E3setupDLL/symbols.txt | 21 +- include/REL/E3SetupDLL.h | 30 + src/REL/E3setupDLL/main.c | 547 +++++++++++++++++++ src/REL/E3setupDLL/mgselect.c | 0 4 files changed, 588 insertions(+), 10 deletions(-) create mode 100644 include/REL/E3SetupDLL.h create mode 100644 src/REL/E3setupDLL/main.c create mode 100644 src/REL/E3setupDLL/mgselect.c diff --git a/config/GMPE01_00/rels/E3setupDLL/symbols.txt b/config/GMPE01_00/rels/E3setupDLL/symbols.txt index 3618f15f..125caf85 100644 --- a/config/GMPE01_00/rels/E3setupDLL/symbols.txt +++ b/config/GMPE01_00/rels/E3setupDLL/symbols.txt @@ -17,9 +17,9 @@ GetStickY = .text:0x00001C20; // type:function size:0x84 scope:local GetBtn = .text:0x00001CA4; // type:function size:0x90 scope:local GetBtnDown = .text:0x00001D34; // type:function size:0x24 scope:local E3PadUpdate = .text:0x00001D58; // type:function size:0xFC -E3PadInit = .text:0x00001E54; // type:function size:0x1C0 -MotionGetMaxTime = .text:0x00002014; // type:function size:0x78 -MotionGetShiftTime = .text:0x0000208C; // type:function size:0x2C +E3PadRead = .text:0x00001E54; // type:function size:0x1C0 +MotionMaxTimeGet = .text:0x00002014; // type:function size:0x78 +MotionShiftTimeGet = .text:0x0000208C; // type:function size:0x2C InitMenuControl = .text:0x000020B8; // type:function size:0xA4 scope:local UpdateMenuControl = .text:0x0000215C; // type:function size:0x400 scope:local UpdateOvlWatch = .text:0x0000255C; // type:function size:0x124 scope:local @@ -136,9 +136,9 @@ cursorYOfsTbl = .data:0x000001F4; // type:object size:0x14 scope:local mgPicTbl = .data:0x00000208; // type:object size:0x34 scope:local startText = .data:0x0000023C; // type:object size:0x14 scope:local shadowPos = .data:0x00000250; // type:object size:0xC scope:local -shadowUp = .data:0x0000025C; // type:object size:0xC scope:local -shadowTarget = .data:0x00000268; // type:object size:0xC scope:local -lbl_2_data_274 = .data:0x00000274; // type:object size:0x60 +shadowTarget = .data:0x0000025C; // type:object size:0xC scope:local +shadowUp = .data:0x00000268; // type:object size:0xC scope:local +lbl_2_data_274 = .data:0x00000274; // type:object size:0x60 data:float playerCntTbl = .data:0x000002D4; // type:object size:0x8 scope:local charTbl = .data:0x000002DC; // type:object size:0x10 scope:local charSfxTbl = .data:0x000002EC; // type:object size:0x20 scope:local @@ -166,8 +166,9 @@ mgPicObj = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte mgSelectObj = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte mgInterface = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte mgDefault = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte -lbl_2_bss_28 = .bss:0x00000028; // type:object size:0xC data:2byte -lbl_2_bss_34 = .bss:0x00000034; // type:object size:0x2 scope:local data:2byte +repBtn = .bss:0x00000028; // type:object size:0x2 scope:local data:2byte +lbl_2_bss_2A = .bss:0x0000002A; // type:object size:0xA data:2byte +lbl_2_bss_34 = .bss:0x00000034; // type:object size:0x2 data:2byte lbl_2_bss_36 = .bss:0x00000036; // type:object size:0x2 data:2byte lbl_2_bss_38 = .bss:0x00000038; // type:object size:0x2 data:2byte lbl_2_bss_3A = .bss:0x0000003A; // type:object size:0x2 data:2byte @@ -184,7 +185,7 @@ e3BGObj = .bss:0x00000070; // type:object size:0x4 data:4byte configModeObj = .bss:0x00000074; // type:object size:0x10 scope:local data:4byte lbl_2_bss_84 = .bss:0x00000084; // type:object size:0x8 data:4byte cameraObj = .bss:0x0000008C; // type:object size:0x4 scope:local data:4byte -lbl_2_bss_90 = .bss:0x00000090; // type:object size:0x4 data:4byte +e3OvlWatchObj = .bss:0x00000090; // type:object size:0x4 data:4byte e3ViewObj = .bss:0x00000094; // type:object size:0x4 data:4byte e3MenuMainObj = .bss:0x00000098; // type:object size:0x4 data:4byte e3CameraFov = .bss:0x0000009C; // type:object size:0x4 data:float @@ -195,7 +196,7 @@ e3NextOvl = .bss:0x000000AC; // type:object size:0x4 data:4byte lbl_2_bss_B0 = .bss:0x000000B0; // type:object size:0x4 data:4byte e3ExitEnableF = .bss:0x000000B4; // type:object size:0x4 data:4byte e3EvtNo = .bss:0x000000B8; // type:object size:0x4 scope:local data:4byte -e3ConfigPlayerF = .bss:0x000000BC; // type:object size:0x2 data:2byte +e3ConfigPlayerCnt = .bss:0x000000BC; // type:object size:0x2 data:2byte e3PadCtrl = .bss:0x000000BE; // type:object size:0x2 data:2byte e3PadData = .bss:0x000000C0; // type:object size:0x20 configE3 = .bss:0x000000E0; // type:object size:0x18 scope:local data:2byte diff --git a/include/REL/E3SetupDLL.h b/include/REL/E3SetupDLL.h new file mode 100644 index 00000000..ef58102c --- /dev/null +++ b/include/REL/E3SetupDLL.h @@ -0,0 +1,30 @@ +#ifndef E3SETUPDLL_H +#define E3SETUPDLL_H + +#include "game/object.h" +#include "game/pad.h" + +typedef struct e3pad { + u16 btn; + u16 btnDown; + u16 enable; + u16 unk6; +} E3Pad; + +extern E3Pad e3PadData[4]; +extern s16 e3PadCtrl; +extern s16 e3ConfigPlayerF; +extern s32 e3ExitEnableF; +extern OverlayID e3NextOvl; +extern s32 e3NextEvent; +extern u32 e3ExitMode; + +void E3MainInit(void); +void E3MGSelectInit(void); +s16 E3PadRead(void); +u16 E3PadUpdate(s16 player, E3Pad *pad); +void E3OvlWatchInit(omObjData *object); +void E3BGCreate(omObjData *object); +void E3LightInit(void); + +#endif \ No newline at end of file diff --git a/src/REL/E3setupDLL/main.c b/src/REL/E3setupDLL/main.c new file mode 100644 index 00000000..e6401ce5 --- /dev/null +++ b/src/REL/E3setupDLL/main.c @@ -0,0 +1,547 @@ +#include "game/object.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/hsfmotion.h" +#include "game/init.h" +#include "game/minigame_seq.h" +#include "game/chrman.h" +#include "game/sprite.h" +#include "game/window.h" + +#include "REL/E3SetupDLL.h" + +static struct { + s16 playerCnt; + s16 rumble; + s16 mgF; + s16 board; + s16 port[4]; + s16 character[4]; +} configE3; + +E3Pad e3PadData[4]; +s16 e3PadCtrl; +s16 e3ConfigPlayerCnt; +static s32 e3EvtNo; +s32 e3ExitEnableF; +s32 lbl_2_bss_B0; +OverlayID e3NextOvl; +s32 e3NextEvent; +u32 e3ExitMode; +static s32 needCharKill; +float e3CameraFov; +omObjData *e3MenuMainObj; +omObjData *e3ViewObj; +omObjData *e3OvlWatchObj; +static omObjData *cameraObj; +static omObjData *lbl_2_bss_84[2]; +static omObjData *configModeObj[4]; +omObjData *e3BGObj; +omObjData *lbl_2_bss_6C; +static s16 lightE3; +s16 lbl_2_bss_62[4]; +s16 lbl_2_bss_60; +Vec lbl_2_bss_54; +Vec lbl_2_bss_48; +float lbl_2_bss_44; +s16 lbl_2_bss_40; +s32 lbl_2_bss_3C; +s16 lbl_2_bss_3A; +s16 lbl_2_bss_38; +s16 lbl_2_bss_36; +s16 lbl_2_bss_34; +s16 lbl_2_bss_2A[5]; +static s16 repBtn; + +static Vec shadowPos = { + 0, 12000, 0 +}; + +static Vec shadowTarget = { + 0, 0, 0 +}; + +static Vec shadowUp = { + 0, 0, -1 +}; + +Vec lbl_2_data_274[] = { + 477.5, 500, -425, + -477.5, 500, -425, + 477.5, 500, 425, + -477.5, 500, 425, + 0.11, -1, -0.22, + -0.11, -1, -0.22, + 0.11, -1, 0.22, + -0.11, -1, 0.22, +}; + +static s16 playerCntTbl[] = { + 1, 2, 3, 4 +}; + +static s16 charTbl[] = { + 0, 1, 2, 3, + -1, -1, 6, 7 +}; + +static s32 charSfxTbl[] = { + 295, + 359, + 423, + 487, + 551, + 615, + 679, + 743 +}; + +void ModuleProlog(void) +{ + e3EvtNo = omovlevtno; + HuAudSndGrpSetSet(0); + e3ExitEnableF = 0; + lbl_2_bss_B0 = 0; + e3PadCtrl = 0; + e3NextOvl = 0; + e3NextEvent = 0; + e3ExitMode = 0; + switch(e3EvtNo) { + default: + case 0: + repBtn = 0; + needCharKill = 1; + E3MainInit(); + break; + + case 1: + repBtn = 1; + needCharKill = 0; + E3MGSelectInit(); + break; + } +} + +static void InitCamera(omObjData *object); +static void InitMenuControl(omObjData *object); +static void InitPlayerCnt(omObjData *object); +static void InitCharSel(omObjData *object); +static void InitVibrateCfg(omObjData *object); +static void InitGameModeSel(omObjData *object); + +void E3MainInit(void) +{ + s32 idx = E3PadRead(); + s32 port; + Process *objman; + if(idx == 0) { + OSReport("No pad detected\n"); + idx++; + } + e3ConfigPlayerCnt = idx; + configE3.playerCnt = idx-1; + port = (GWRumbleGet()) ? 1 : 0; + configE3.rumble = port; + configE3.mgF = 0; + configE3.board = 0; + for(port=0,idx=0; port<4; idx++, port++) { + while(idx < 8) { + if(charTbl[idx] >= 0) { + break; + } + idx++; + } + configE3.character[port] = idx; + } + for(port=0,idx=0; port<4; port++) { + if(!e3PadData[port].enable) { + configE3.port[idx] = port; + if(idx == 0) { + e3PadCtrl = port; + } + idx++; + } + } + for(port=0; port<4; port++) { + if(e3PadData[port].enable) { + configE3.port[idx] = port; + idx++; + } + } + HuSysVWaitSet(1); + objman = omInitObjMan(80, 8192); + + HuWinInit(1); + CRot.x = -4; + CRot.y = 0; + CRot.z = 0; + Center.x = 0; + Center.y = 160; + Center.z = 0; + CZoom = 1960; + e3CameraFov = 40; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, e3CameraFov, 100, 25000, 4.0f/3.0f); + Hu3DShadowCreate(e3CameraFov*0.3f, 100, 25000); + Hu3DShadowTPLvlSet(0.6f); + Hu3DShadowPosSet(&shadowPos, &shadowUp, &shadowTarget); + e3ViewObj = omAddObjEx(objman, 32730, 0, 0, -1, omOutView); + cameraObj = omAddObjEx(objman, 199, 0, 0, -1, InitCamera); + e3OvlWatchObj = omAddObjEx(objman, 200, 0, 0, -1, E3OvlWatchInit); + e3MenuMainObj = omAddObjEx(objman, 10, 0, 0, -1, InitMenuControl); + e3BGObj = omAddObjEx(objman, 20, 0, 0, -1, E3BGCreate); + configModeObj[0] = omAddObjEx(objman, 30, 0, 0, -1, InitPlayerCnt); + configModeObj[0]->work[0] = 1; + configModeObj[1] = omAddObjEx(objman, 30, 0, 0, -1, InitCharSel); + configModeObj[2] = omAddObjEx(objman, 30, 0, 0, -1, InitVibrateCfg); + configModeObj[3] = omAddObjEx(objman, 30, 0, 0, -1, InitGameModeSel); + E3LightInit(); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); +} + +void E3LightInit(void) +{ + s32 i; + lightE3 = lbl_2_bss_60 = -1; + for(i=0; i<4; i++) { + lbl_2_bss_62[i] = -1; + } + lbl_2_bss_54.x = 0; + lbl_2_bss_54.y = 1500; + lbl_2_bss_54.z = 0; + lbl_2_bss_48.x = 0; + lbl_2_bss_48.y = -1; + lbl_2_bss_48.z = 0; + lbl_2_bss_44 = 26; + lbl_2_bss_40 = 4; + lightE3 = Hu3DGLightCreate(0, 1500, 0, 0, -1, 0, 255, 255, 255); + Hu3DGLightStaticSet(lightE3, 1); + Hu3DGLightInfinitytSet(lightE3); +} + +static float GetStickX(s8 value) +{ + float new_value; + if(value > 69) { + value = 69; + } else if(value < -69) { + value = -69; + } + new_value = value; + new_value /= 69; + return new_value; +} + +static s16 GetStickY(s8 value) +{ + float new_value; + if(value > 69) { + value = 69; + } else if(value < -69) { + value = -69; + } + new_value = value; + new_value *= 255.0f/69; + return new_value; +} + +static u16 GetBtn(s16 player) +{ + u16 value; + if(repBtn) { + value = HuPadDStkRep[player]; + value |= HuPadBtnRep[player]; + } else { + value = HuPadDStk[player]; + value |= HuPadBtn[player]; + } + return value; +} + +static u16 GetBtnDown(u16 button, u16 buttonLast) +{ + u16 down = PADButtonUp(button, buttonLast); + return down; +} + +u16 E3PadUpdate(s16 player, E3Pad *pad) +{ + pad->enable = HuPadStatGet(player); + if(!pad->enable) { + u16 btn = GetBtn(player); + pad->btnDown = PADButtonUp(btn, pad->btn); + pad->btn = btn; + } else { + pad->btnDown = pad->btn = 0; + } + return pad->btnDown; +} + +s16 E3PadRead(void) +{ + s16 i; + s16 players; + for(i=0, players=0; i<4; i++) { + E3PadUpdate(i, &e3PadData[i]); + if(!e3PadData[i].enable) { + players++; + } + } + return players; +} + +float MotionMaxTimeGet(s16 arg0) +{ + MotionData *temp_r31 = &Hu3DMotion[arg0]; + HsfMotion *temp_r30; + s16 temp_r29; + + temp_r30 = temp_r31->unk_04->motion; + temp_r29 = temp_r30->len; + return temp_r29; +} + + +float MotionShiftTimeGet(s16 arg0) +{ + ModelData *temp_r31 = &Hu3DData[arg0]; + + return temp_r31->unk_84; +} + +static void UpdateMenuControl(omObjData *object); + +static void InitMenuControl(omObjData *object) +{ + HuAudSeqPlay(43); + lbl_2_bss_3C = 0; + lbl_2_bss_3A = -1; + lbl_2_bss_36 = 30; + lbl_2_bss_34 = 0; + object->func = UpdateMenuControl; + worstVcount = 0; + object->work[0] = 0; + object->work[1] = 0; + object->work[3] = 0; +} + +static void UpdateMenuControl(omObjData *object) +{ + s32 pos; + + if(e3ExitEnableF) { + return; + } + E3PadRead(); + pos = object->work[1]; + if(pos < 4) { + omObjData *config = configModeObj[pos]; + if(config->work[0] == 0) { + if(config->work[3]) { + pos++; + } else { + pos--; + if(pos < 0) { + omOvlHisData *his; + pos=0; + his = omOvlHisGet(1); + omOvlHisChg(1, his->overlay, 1, his->stat); + e3ExitMode = 0; + e3NextOvl = 0; + e3NextEvent = 0; + e3ExitEnableF = 1; + } + } + + if(pos < 4) { + configModeObj[pos]->work[0] = 1; + } + } + object->work[1] = pos; + } + if(pos >= 4) { + s32 playerCnt; + e3ExitMode = 2; + if(configE3.mgF) { + e3NextOvl = OVL_E3SETUP; + e3NextEvent = 1; + } else { + if(configE3.board) { + e3NextOvl = OVL_W02; + } else { + e3NextOvl = OVL_W01; + } + } + GWRumbleSet(configE3.rumble); + playerCnt = playerCntTbl[configE3.playerCnt]; + for(pos=0; pos<4; pos++) { + s16 character; + GWPlayerCfg[pos].pad_idx = configE3.port[pos]; + character = configE3.character[pos]; + GWPlayerCfg[pos].character = character; + if(!configE3.mgF) { + HuAudFXPlay(charSfxTbl[character]); + } + GWPlayerCfg[pos].group = pos; + if(pos < playerCnt) { + GWPlayerCfg[pos].iscom = 0; + } else { + GWPlayerCfg[pos].iscom = 1; + } + } + e3ExitEnableF = 1; + } +} + +static void UpdateOvlWatch(omObjData *object) +{ + s32 i; + if(WipeStatGet()) { + return; + } + if(!MGSeqDoneCheck()) { + return; + } + HuSysVWaitSet(1); + if(needCharKill) { + CharKill(-1); + for(i=0; i<4; i++) { + CharARAMOpen(GWPlayerCfg[i].character); + } + } + if(e3ExitMode == 1) { + omOvlGotoEx(e3NextOvl, 1, e3NextEvent, 0); + } else if(e3ExitMode == 2) { + omOvlCallEx(e3NextOvl, 1, e3NextEvent, 0); + } else { + omOvlReturnEx(e3NextOvl+1, 1); + } +} + +void E3OvlWatchInit(omObjData *object) +{ + if(e3ExitEnableF) { + HuAudSeqAllFadeOut(2500); + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + MGSeqKillAll(); + object->func = UpdateOvlWatch; + } +} + +typedef struct e3_player_cnt_work { + AnimData *frame[3]; + AnimData *arrow; + AnimData *arrow_hilite; + float winSize[2]; //Should be struct + s16 frameGroup; + s16 arrowGroup; + s16 arrowGroup2; + s16 unk22[6]; + s16 winHeader; + s16 winPlayer; + s16 playerCnt; + s16 playerCntOld; +} E3PlayerCntWork; + +static s16 lbl_2_data_31E[] = { + 35, 38, 41, 44 +}; + +static u32 playerCntMessTbl[] = { + 0x00220002, + 0x00220003, + 0x00220004, + 0x00220001 +}; + +static void UpdatePlayerCnt(omObjData *object) +{ + E3PlayerCntWork *work = object->data; + s32 i; + u16 btnDown; + u32 mess; + if(object->work[1] != object->work[0]) { + if(object->work[0] == 0) { + object->work[2] = 4; + } else { + object->work[2] = 3; + } + object->work[1] = object->work[0]; + } + btnDown = e3PadData[e3PadCtrl].btnDown; + switch(object->work[2]) { + case 0: + break; + case 1: + if(btnDown & PAD_BUTTON_A) { + HuAudFXPlay(1); + configE3.playerCnt = work->playerCnt; + object->work[0] = 0; + object->work[3] = 1; + } else if(btnDown & PAD_BUTTON_B) { + HuAudFXPlay(3); + work->playerCnt = configE3.playerCnt; + object->work[0] = 0; + object->work[3] = 0; + } else { + if(e3ConfigPlayerCnt) { + if(btnDown & PAD_BUTTON_LEFT) { + HuAudFXPlay(0); + work->playerCnt--; + if(work->playerCnt < 0) { + work->playerCnt = e3ConfigPlayerCnt-1; + if(work->playerCnt < 0) { + work->playerCnt = 0; + } + } + } else if(btnDown & PAD_BUTTON_RIGHT) { + HuAudFXPlay(0); + work->playerCnt++; + if(work->playerCnt >= e3ConfigPlayerCnt) { + work->playerCnt = 0; + } + } + } else { + work->playerCnt = 0; + } + } + break; + + case 3: + HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + if(e3ConfigPlayerCnt > 1) { + for(i=0; i<2; i++) { + HuSprAttrReset(work->arrowGroup, i, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->arrowGroup2, i, HUSPR_ATTR_DISPOFF); + } + } + object->work[2] = 1; + break; + + case 4: + HuSprAttrReset(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<2; i++) { + HuSprAttrSet(work->arrowGroup, i, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->arrowGroup2, i, HUSPR_ATTR_DISPOFF); + } + object->work[2] = 0; + break; + } + if(work->playerCntOld != work->playerCnt) { + float size[2]; + mess = playerCntMessTbl[work->playerCnt]; + HuWinMesMaxSizeGet(1, size, mess); + HuWinCenterPosSet(work->winPlayer, (work->winSize[0]-size[0])/-2.0f, (work->winSize[1]-size[1])/-2.0f); + HuWinMesSet(work->winPlayer, mess); + work->playerCntOld = work->playerCnt; + } +} + +static void InitPlayerCnt(omObjData *object) +{ + +} \ No newline at end of file diff --git a/src/REL/E3setupDLL/mgselect.c b/src/REL/E3setupDLL/mgselect.c new file mode 100644 index 00000000..e69de29b From 1e83c979fbb1ed3d90a003d9076a2a89069bd976 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 23 Apr 2024 17:05:53 -0500 Subject: [PATCH 3/6] Finish e3setup/main.c Also add ext_math.h file for better math --- config/GMPE01_00/rels/E3setupDLL/symbols.txt | 110 +- configure.py | 2 +- include/ext_math.h | 21 + src/REL/E3setupDLL/main.c | 1193 +++++++++++++++++- 4 files changed, 1251 insertions(+), 75 deletions(-) create mode 100644 include/ext_math.h diff --git a/config/GMPE01_00/rels/E3setupDLL/symbols.txt b/config/GMPE01_00/rels/E3setupDLL/symbols.txt index 125caf85..2fe290d7 100644 --- a/config/GMPE01_00/rels/E3setupDLL/symbols.txt +++ b/config/GMPE01_00/rels/E3setupDLL/symbols.txt @@ -29,13 +29,13 @@ InitPlayerCnt = .text:0x00002A38; // type:function size:0x59C scope:local UpdateCharSelCursor = .text:0x00002FD4; // type:function size:0x208 scope:local UpdateCharSelPlayerCursor = .text:0x000031DC; // type:function size:0x37C scope:local UpdateCharSelComCursor = .text:0x00003558; // type:function size:0x3B4 scope:local -IsCharSelDone = .text:0x0000390C; // type:function size:0xAC scope:local +CheckCharSel = .text:0x0000390C; // type:function size:0xAC scope:local UpdateCharSel = .text:0x000039B8; // type:function size:0x2B8 scope:local InitCharSel = .text:0x00003C70; // type:function size:0x534 scope:local -UpdateVibrateCfg = .text:0x000041A4; // type:function size:0x2DC scope:local -InitVibrateCfg = .text:0x00004480; // type:function size:0x520 scope:local -UpdateGameModeSel = .text:0x000049A0; // type:function size:0x59C scope:local -InitGameModeSel = .text:0x00004F3C; // type:function size:0x4E8 scope:local +UpdateRumbleCfg = .text:0x000041A4; // type:function size:0x2DC scope:local +InitRumbleCfg = .text:0x00004480; // type:function size:0x520 scope:local +UpdateModeSel = .text:0x000049A0; // type:function size:0x59C scope:local +InitModeSel = .text:0x00004F3C; // type:function size:0x4E8 scope:local E3BGUpdate = .text:0x00005424; // type:function size:0x100 scope:local E3BGCreate = .text:0x00005524; // type:function size:0x184 InitCamera = .text:0x000056A8; // type:function size:0x7C scope:local @@ -71,47 +71,47 @@ lbl_2_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float lbl_2_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float lbl_2_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float lbl_2_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:float -lbl_2_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_2_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_2_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_2_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_2_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_2_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_2_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_2_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_2_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_2_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_2_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_2_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_2_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_2_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_2_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_2_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_2_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_2_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_2_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_2_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_2_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_2_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_2_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_2_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_2_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_2_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_2_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_2_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_2_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_2_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_2_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_2_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_2_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_2_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_2_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_2_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_2_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_2_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_2_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_2_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_2_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float +lbl_2_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_2_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_2_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_2_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_2_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_2_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_2_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_2_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_2_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_2_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_2_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_2_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_2_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_2_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_2_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float lbl_2_data_0 = .data:0x00000000; // type:object size:0x24 lbl_2_data_24 = .data:0x00000024; // type:object size:0x11 data:string lbl_2_data_36 = .data:0x00000036; // type:object size:0x8 @@ -142,21 +142,21 @@ lbl_2_data_274 = .data:0x00000274; // type:object size:0x60 data:float playerCntTbl = .data:0x000002D4; // type:object size:0x8 scope:local charTbl = .data:0x000002DC; // type:object size:0x10 scope:local charSfxTbl = .data:0x000002EC; // type:object size:0x20 scope:local -lbl_2_data_30C = .data:0x0000030C; // type:object size:0x12 +lbl_2_data_30C = .data:0x0000030C; // type:object size:0x12 scope:local lbl_2_data_31E = .data:0x0000031E; // type:object size:0x8 playerCntMessTbl = .data:0x00000328; // type:object size:0x10 scope:local -charPosTbl = .data:0x00000338; // type:object size:0x40 scope:local -charComSfxTbl = .data:0x00000378; // type:object size:0x20 -lbl_2_data_398 = .data:0x00000398; // type:object size:0xE data:string +charPosTbl = .data:0x00000338; // type:object size:0x40 scope:local data:float +charComSfxTbl = .data:0x00000378; // type:object size:0x20 scope:local +lbl_2_data_398 = .data:0x00000398; // type:object size:0xE scope:local data:string charSpriteTbl = .data:0x000003A8; // type:object size:0x20 scope:local cursorSpriteTbl = .data:0x000003C8; // type:object size:0x14 scope:local -highlightSpriteTbl = .data:0x000003DC; // type:object size:0x14 scope:local -vibrateSettingMess = .data:0x000003F0; // type:object size:0x8 scope:local +hiliteSprTbl = .data:0x000003DC; // type:object size:0x14 scope:local +rumbleMess = .data:0x000003F0; // type:object size:0x8 scope:local modeSelCursorPosTbl = .data:0x000003F8; // type:object size:0x10 scope:local boardSelCursorPosTbl = .data:0x00000408; // type:object size:0x10 scope:local -camRotTbl = .data:0x00000418; // type:object size:0x60 scope:local -lbl_2_data_478 = .data:0x00000478; // type:object size:0x24 -lbl_2_data_49C = .data:0x0000049C; // type:object size:0x24 +camViewTbl = .data:0x00000418; // type:object size:0x60 scope:local data:float +lbl_2_data_478 = .data:0x00000478; // type:object size:0x24 data:float +lbl_2_data_49C = .data:0x0000049C; // type:object size:0x24 data:float lbl_2_data_4C0 = .data:0x000004C0; // type:object size:0x10 lbl_2_bss_A = .bss:0x0000000A; // type:object size:0x2 data:2byte lbl_2_bss_C = .bss:0x0000000C; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index a090ce37..c4996de3 100644 --- a/configure.py +++ b/configure.py @@ -783,7 +783,7 @@ config.libs = [ objects = { Object(NonMatching, "REL/E3setupDLL/mgselect.c"), Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/E3setupDLL/main.c"), + Object(Matching, "REL/E3setupDLL/main.c"), } ), Rel('instDll', diff --git a/include/ext_math.h b/include/ext_math.h new file mode 100644 index 00000000..b839dcbf --- /dev/null +++ b/include/ext_math.h @@ -0,0 +1,21 @@ +#ifndef _EXT_MATH_H +#define _EXT_MATH_H + +#include "math.h" +#include "dolphin/mtx.h" + +typedef struct vector2 { + float x; + float y; +} Vector2; + +#define ABS(x) (((x) < 0) ? -(x) : (x)) + +#define VECDistanceXZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->z-(b)->z)*((a)->z-(b)->z))) +#define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z)) + +#define sind(x) sin(M_PI*(x)/180.0) +#define cosd(x) cos(M_PI*(x)/180.0) +#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI)) + +#endif diff --git a/src/REL/E3setupDLL/main.c b/src/REL/E3setupDLL/main.c index e6401ce5..b50c04e9 100644 --- a/src/REL/E3setupDLL/main.c +++ b/src/REL/E3setupDLL/main.c @@ -10,13 +10,14 @@ #include "game/chrman.h" #include "game/sprite.h" #include "game/window.h" +#include "ext_math.h" #include "REL/E3SetupDLL.h" static struct { s16 playerCnt; s16 rumble; - s16 mgF; + s16 mode; s16 board; s16 port[4]; s16 character[4]; @@ -129,8 +130,8 @@ static void InitCamera(omObjData *object); static void InitMenuControl(omObjData *object); static void InitPlayerCnt(omObjData *object); static void InitCharSel(omObjData *object); -static void InitVibrateCfg(omObjData *object); -static void InitGameModeSel(omObjData *object); +static void InitRumbleCfg(omObjData *object); +static void InitModeSel(omObjData *object); void E3MainInit(void) { @@ -145,7 +146,7 @@ void E3MainInit(void) configE3.playerCnt = idx-1; port = (GWRumbleGet()) ? 1 : 0; configE3.rumble = port; - configE3.mgF = 0; + configE3.mode = 0; configE3.board = 0; for(port=0,idx=0; port<4; idx++, port++) { while(idx < 8) { @@ -196,8 +197,8 @@ void E3MainInit(void) configModeObj[0] = omAddObjEx(objman, 30, 0, 0, -1, InitPlayerCnt); configModeObj[0]->work[0] = 1; configModeObj[1] = omAddObjEx(objman, 30, 0, 0, -1, InitCharSel); - configModeObj[2] = omAddObjEx(objman, 30, 0, 0, -1, InitVibrateCfg); - configModeObj[3] = omAddObjEx(objman, 30, 0, 0, -1, InitGameModeSel); + configModeObj[2] = omAddObjEx(objman, 30, 0, 0, -1, InitRumbleCfg); + configModeObj[3] = omAddObjEx(objman, 30, 0, 0, -1, InitModeSel); E3LightInit(); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); } @@ -365,11 +366,11 @@ static void UpdateMenuControl(omObjData *object) if(pos >= 4) { s32 playerCnt; e3ExitMode = 2; - if(configE3.mgF) { + if(configE3.mode != 0) { e3NextOvl = OVL_E3SETUP; e3NextEvent = 1; } else { - if(configE3.board) { + if(configE3.board != 0) { e3NextOvl = OVL_W02; } else { e3NextOvl = OVL_W01; @@ -382,7 +383,7 @@ static void UpdateMenuControl(omObjData *object) GWPlayerCfg[pos].pad_idx = configE3.port[pos]; character = configE3.character[pos]; GWPlayerCfg[pos].character = character; - if(!configE3.mgF) { + if(configE3.mode == 0) { HuAudFXPlay(charSfxTbl[character]); } GWPlayerCfg[pos].group = pos; @@ -435,11 +436,11 @@ void E3OvlWatchInit(omObjData *object) typedef struct e3_player_cnt_work { AnimData *frame[3]; AnimData *arrow; - AnimData *arrow_hilite; - float winSize[2]; //Should be struct + AnimData *arrowHilite; + Vector2 winSize; s16 frameGroup; - s16 arrowGroup; - s16 arrowGroup2; + s16 arrowGroupL; + s16 arrowGroupR; s16 unk22[6]; s16 winHeader; s16 winPlayer; @@ -515,8 +516,8 @@ static void UpdatePlayerCnt(omObjData *object) HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); if(e3ConfigPlayerCnt > 1) { for(i=0; i<2; i++) { - HuSprAttrReset(work->arrowGroup, i, HUSPR_ATTR_DISPOFF); - HuSprAttrReset(work->arrowGroup2, i, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->arrowGroupL, i, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->arrowGroupR, i, HUSPR_ATTR_DISPOFF); } } object->work[2] = 1; @@ -525,8 +526,8 @@ static void UpdatePlayerCnt(omObjData *object) case 4: HuSprAttrReset(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); for(i=0; i<2; i++) { - HuSprAttrSet(work->arrowGroup, i, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(work->arrowGroup2, i, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->arrowGroupL, i, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->arrowGroupR, i, HUSPR_ATTR_DISPOFF); } object->work[2] = 0; break; @@ -535,7 +536,7 @@ static void UpdatePlayerCnt(omObjData *object) float size[2]; mess = playerCntMessTbl[work->playerCnt]; HuWinMesMaxSizeGet(1, size, mess); - HuWinCenterPosSet(work->winPlayer, (work->winSize[0]-size[0])/-2.0f, (work->winSize[1]-size[1])/-2.0f); + HuWinCenterPosSet(work->winPlayer, (work->winSize.x-size[0])/-2.0f, (work->winSize.y-size[1])/-2.0f); HuWinMesSet(work->winPlayer, mess); work->playerCntOld = work->playerCnt; } @@ -543,5 +544,1159 @@ static void UpdatePlayerCnt(omObjData *object) static void InitPlayerCnt(omObjData *object) { + E3PlayerCntWork *work; + s16 index2; + s32 index; + s16 group; + AnimData *anim; + u32 mess; + float sizeMax[2]; //FIXME: Change to Vector2 + float size[2]; //FIXME: Change to Vector2 -} \ No newline at end of file + omSetStatBit(object, 0x100); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3PlayerCntWork), MEMORY_DEFAULT_NUM); + work = object->data; + index = 0; + group = HuSprGrpCreate(3); + work->frameGroup = group; + HuSprGrpPosSet(group, 288, 80); + anim = HuSprAnimRead(HuDataReadNum(2, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30008, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.5f); + index++; + anim = HuSprAnimRead(HuDataReadNum(1, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30000, 0); + HuSprGrpMemberSet(group, index, index2); + index++; + anim = HuSprAnimRead(HuDataReadNum(3, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 1, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.4f); + anim = HuSprAnimRead(HuDataReadNum(12, MEMORY_DEFAULT_NUM)); + work->arrow = anim; + work->arrowHilite = HuSprAnimRead(HuDataReadNum(13, MEMORY_DEFAULT_NUM)); + group = HuSprGrpCreate(2); + work->arrowGroupL = group; + HuSprGrpPosSet(group, 140, 96); + index2 = HuSprCreate(anim, 4, 0); + HuSprGrpMemberSet(group, 0, index2); + index2 = HuSprCreate(work->arrowHilite, 6, 0); + HuSprGrpMemberSet(group, 1, index2); + HuSprTPLvlSet(group, 1, 0.5f); + HuSprPosSet(group, 1, 0, -4); + group = HuSprGrpCreate(2); + work->arrowGroupR = group; + HuSprGrpPosSet(group, 436, 96); + index2 = HuSprCreate(anim, 4, 1); + HuSprGrpMemberSet(group, 0, index2); + index2 = HuSprCreate(work->arrowHilite, 6, 1); + HuSprGrpMemberSet(group, 1, index2); + HuSprTPLvlSet(group, 1, 0.5f); + HuSprPosSet(group, 1, 0, -4); + index2 = work->arrowGroupL; + for(index=0; index<2; index++) { + HuSprAttrSet(group, index, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(index2, index, HUSPR_ATTR_DISPOFF); + } + HuWinMesMaxSizeGet(1, sizeMax, 0x220000); + index2 = HuWinCreate(-10000, 26, sizeMax[0], sizeMax[1], 0); + work->winHeader = index2; + HuWinMesColSet(index2, 4); + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesSet(index2, 0x220000); + work->playerCntOld = work->playerCnt = configE3.playerCnt; + mess = playerCntMessTbl[work->playerCnt]; + HuWinMesMaxSizeGet(4, sizeMax, 0x220001, 0x220002, 0x220003, 0x220004); + index2 = HuWinCreate(-10000, 58, sizeMax[0], sizeMax[1], 0); + work->winPlayer = index2; + work->winSize = *(Vector2 *)(sizeMax); //FIXME: Remove Cast + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesMaxSizeGet(1, size, mess); + HuWinCenterPosSet(index2, (sizeMax[0]-size[0])/-2.0f, (sizeMax[1]-size[1])/-2.0f); + HuWinMesSet(index2, mess); + if(object->work[0] == 1) { + HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + if(e3ConfigPlayerCnt > 1) { + group = work->arrowGroupR; + index2 = work->arrowGroupL; + for(index=0; index<2; index++) { + HuSprAttrReset(group, index, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(index2, index, HUSPR_ATTR_DISPOFF); + } + } + object->work[1] = 1; + object->work[2] = 1; + } + object->func = UpdatePlayerCnt; + (void)object; +} + +typedef struct e3_char_sel_work { + AnimData *anims[24]; + s16 frameGroup; + s16 charGroup; + s16 cursorGroup; + s16 hiliteGroup; + s16 unk68[6]; + s16 cursorPos[4]; + s16 cursorStat[4]; + s16 currPlayer; +} E3CharSelWork; + +static Vector2 charPosTbl[] = { + 85, 248, + 143, 248, + 201, 248, + 259, 248, + 317, 248, + 375, 248, + 433, 248, + 491, 248 +}; + +static s32 charComSfxTbl[] = { + 294, + 358, + 422, + 486, + 550, + 614, + 678, + 742 +}; + +static void UpdateCharSelCursor(omObjData *object, s32 backF) +{ + s32 i; + E3CharSelWork *work; + s16 cursorPos; + s16 cursorGroup; + s16 playerSpr; + s16 playerCnt; + s16 hiliteGroup; + work = object->data; + cursorGroup = work->cursorGroup; + hiliteGroup = work->hiliteGroup; + if(!backF) { + for(i=0; i<7; i++) { + HuSprAttrSet(cursorGroup, i, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(hiliteGroup, i, HUSPR_ATTR_DISPOFF); + } + return; + } + playerCnt = playerCntTbl[configE3.playerCnt]; + for(i=0; icursorStat[i]) { + cursorPos = 1; + } + HuSprBankSet(cursorGroup, i, cursorPos); + cursorPos = work->cursorPos[i]; + HuSprPosSet(cursorGroup, i, charPosTbl[cursorPos].x, charPosTbl[cursorPos].y); + HuSprAttrReset(cursorGroup, i, HUSPR_ATTR_DISPOFF); + } + for(; i<4; i++) { + cursorPos = 0; + playerSpr = (4+i)-(s32)playerCnt; + if(work->cursorStat[i] != 0) { + if(work->cursorStat[i] == 3) { + cursorPos = 1; + } + HuSprBankSet(cursorGroup, playerSpr, cursorPos); + cursorPos = work->cursorPos[i]; + HuSprPosSet(cursorGroup, playerSpr, charPosTbl[cursorPos].x, charPosTbl[cursorPos].y); + HuSprAttrReset(cursorGroup, playerSpr, HUSPR_ATTR_DISPOFF); + } else { + HuSprAttrSet(cursorGroup, playerSpr, HUSPR_ATTR_DISPOFF); + } + } +} + +static s32 UpdateCharSelPlayerCursor(omObjData *object) +{ + E3CharSelWork *temp_r31; + s32 temp_r30; + s16 temp_r29; + s32 temp_r28; + s16 temp_r27; + s32 temp_r26; + s16 temp_r25; + s16 temp_r24; + s16 temp_r23; + s32 temp_r22; + s16 temp_r21; + s16 temp_r20; + s16 temp_r19; + s16 temp_r18; + s16 sp8[8]; + temp_r31 = object->data; + temp_r22 = 0; + temp_r23 = playerCntTbl[configE3.playerCnt]; + temp_r24 = 0; + temp_r20 = 0; + for(temp_r30=0; temp_r30 < temp_r23; temp_r30++) { + temp_r19 = configE3.port[temp_r30]; + if(e3PadData[temp_r19].enable) { + if(temp_r31->cursorStat[temp_r30] == 0) { + temp_r31->cursorStat[temp_r30] = 1; + } + temp_r24++; + continue; + } + temp_r25 = e3PadData[temp_r19].btnDown; + if(temp_r25 & PAD_BUTTON_A) { + HuAudFXPlay(1); + temp_r28 = charTbl[temp_r31->cursorPos[temp_r30]]; + HuAudFXPlay(charComSfxTbl[temp_r28]); + temp_r31->cursorStat[temp_r30] = 1; + } else if(temp_r25 & PAD_BUTTON_B) { + HuAudFXPlay(3); + if(temp_r30 == e3PadCtrl && temp_r31->cursorStat[temp_r30] == 0) { + temp_r20 = 1; + } + temp_r31->cursorStat[temp_r30] = 0; + } + if(temp_r31->cursorStat[temp_r30] != 0) { + temp_r24++; + continue; + } + if(temp_r25 & (PAD_BUTTON_LEFT|PAD_BUTTON_RIGHT)) { + temp_r27 = 0; + for(temp_r28=0; temp_r28<8; temp_r28++) { + if(charTbl[temp_r28] >= 0) { + if(temp_r28 == temp_r31->cursorPos[temp_r30]) { + temp_r29 = temp_r27; + sp8[temp_r27++] = temp_r28; + } else { + for(temp_r26=0; temp_r26cursorPos[temp_r26] == temp_r28) { + break; + } + } + if(temp_r26 >= temp_r23) { + sp8[temp_r27++] = temp_r28; + } + } + } + } + sp8[temp_r27] = -1; + temp_r21 = temp_r27; + temp_r18 = temp_r29; + if(temp_r21 > 1) { + if(temp_r25 & PAD_BUTTON_LEFT) { + HuAudFXPlay(26); + temp_r29--; + if(temp_r29 < 0) { + temp_r29 = temp_r21-1; + } + } else if(temp_r25 & PAD_BUTTON_RIGHT) { + HuAudFXPlay(26); + temp_r29++; + if(temp_r29 >= temp_r21) { + temp_r29 = 0; + } + } + if(temp_r18 != temp_r29) { + temp_r31->cursorPos[temp_r30] = sp8[temp_r29]; + } + } + } + } + if(temp_r24 >= temp_r23) { + temp_r22 = 1; + } + if(temp_r20) { + temp_r22 = -1; + } + return temp_r22; +} + +static s32 UpdateCharSelComCursor(omObjData *object) +{ + E3CharSelWork *temp_r31; + s16 temp_r30; + s16 temp_r29; + s32 temp_r28; + s32 temp_r27; + s16 temp_r26; + s16 temp_r25; + s32 temp_r24; + s16 temp_r23; + s16 temp_r22; + s32 temp_r21; + s16 temp_r20; + s16 temp_r19; + s16 sp8[8]; + temp_r31 = object->data; + temp_r21 = 0; + temp_r20 = playerCntTbl[configE3.playerCnt]; + temp_r19 = 4-temp_r20; + temp_r30 = temp_r20+temp_r31->currPlayer-1; + temp_r31->cursorStat[temp_r30] = 1; + temp_r26 = temp_r31->cursorPos[temp_r30]; + for(temp_r28=0; temp_r28cursorPos[temp_r28] == temp_r26) { + break; + } + } + if(temp_r28= 0) { + if(temp_r27 == temp_r26) { + temp_r29 = temp_r25; + sp8[temp_r25++] = temp_r27; + } else { + for(temp_r24=0; temp_r24cursorPos[temp_r24] == temp_r27) { + break; + } + } + if(temp_r24 >= temp_r30) { + sp8[temp_r25++] = temp_r27; + } + } + } + } + temp_r22 = temp_r25; + if(temp_r26 < 0) { + temp_r29 = 0; + temp_r31->cursorPos[temp_r30] = sp8[temp_r29]; + } + temp_r23 = e3PadData[e3PadCtrl].btnDown; + if(temp_r23 & PAD_BUTTON_A) { + HuAudFXPlay(1); + HuAudFXPlay(charComSfxTbl[charTbl[temp_r31->cursorPos[temp_r30]]]); + temp_r31->cursorStat[temp_r30] = 3; + if(temp_r31->currPlayer >= temp_r19) { + temp_r21 = 1; + } else { + temp_r31->currPlayer++; + } + } else if(temp_r23 & PAD_BUTTON_B) { + HuAudFXPlay(3); + temp_r31->cursorStat[temp_r30] = 0; + temp_r31->currPlayer--; + if(temp_r31->currPlayer != 0) { + temp_r30--; + temp_r31->cursorStat[temp_r30] = 1; + } else { + for(temp_r28=0; temp_r28<4; temp_r28++) { + temp_r31->cursorStat[temp_r28] = 0; + } + } + } else if(temp_r23 & (PAD_BUTTON_LEFT|PAD_BUTTON_RIGHT)) { + temp_r26 = temp_r29; + if(temp_r22 > 1) { + if(temp_r23 & PAD_BUTTON_LEFT) { + HuAudFXPlay(26); + temp_r29--; + if(temp_r29 < 0) { + temp_r29 = temp_r22-1; + } + } else if(temp_r23 & PAD_BUTTON_RIGHT) { + HuAudFXPlay(26); + temp_r29++; + if(temp_r29 >= temp_r22) { + temp_r29 = 0; + } + } + if(temp_r26 != temp_r29) { + temp_r31->cursorPos[temp_r28] = sp8[temp_r29]; + } + } + } + return temp_r21; +} + +static s32 CheckCharSel(omObjData *object) +{ + E3CharSelWork *work; + s32 result; + work = object->data; + result = 0; + if(work->currPlayer == 0) { + result = UpdateCharSelPlayerCursor(object); + if(result == 1) { + if(playerCntTbl[configE3.playerCnt] < 4) { + result = 0; + work->currPlayer++; + } + } + } else { + result = UpdateCharSelComCursor(object); + } + return result; +} + +static void UpdateCharSel(omObjData *object) +{ + s32 i; + E3CharSelWork *work; + u16 btnDown; + work = object->data; + if(object->work[1] != object->work[0]) { + if(object->work[0] == 0) { + object->work[2] = 4; + } else { + object->work[2] = 3; + } + object->work[1] = object->work[0]; + } + btnDown = e3PadData[e3PadCtrl].btnDown; + switch(object->work[2]) { + case 0: + break; + + case 1: + i = CheckCharSel(object); + if(i == 1) { + for(i=0; i<4; i++) { + configE3.character[i] = work->cursorPos[i]; + } + object->work[0] = 0; + object->work[3] = 1; + } else { + if(i < 0) { + for(i=0; i<4; i++) { + work->cursorPos[i] = configE3.character[i]; + } + object->work[0] = 0; + object->work[3] = 0; + } + } + UpdateCharSelCursor(object, 1); + break; + + case 3: + HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + object->work[2] = 1; + if(work->currPlayer != 0) { + i = work->currPlayer+(i = playerCntTbl[configE3.playerCnt]-1); + OSReport("selmode %d %d\n", work->currPlayer, i); + work->cursorStat[i] = 0; + } else { + for(i=0; i<4; i++) { + work->cursorStat[i] = 0; + } + } + UpdateCharSelCursor(object, 1); + break; + + case 4: + HuSprAttrReset(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + object->work[2] = 0; + UpdateCharSelCursor(object, object->work[3]); + break; + } +} + +static s32 charSpriteTbl[] = { + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32 +}; + +static s32 cursorSpriteTbl[] = { + 14, + 15, + 16, + 17, + 18 +}; + +static s32 hiliteSprTbl[] = { + 19, + 20, + 21, + 22, + 23 +}; + +static void InitCharSel(omObjData *object) +{ + E3CharSelWork *work; + s32 i; + s16 member; + s16 group; + AnimData *anim; + s16 sprite; + s16 j; + s16 x; + omSetStatBit(object, 0x100); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3CharSelWork), MEMORY_DEFAULT_NUM); + work = object->data; + i=0; + member=0; + group = HuSprGrpCreate(3); + work->frameGroup = group; + HuSprGrpPosSet(group, 288, 200); + anim = HuSprAnimRead(HuDataReadNum(2, MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + sprite = HuSprCreate(anim, 30008, 0); + HuSprGrpMemberSet(group, member, sprite); + HuSprTPLvlSet(group, member, 0.5f); + member++; + anim = HuSprAnimRead(HuDataReadNum(1, MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + sprite = HuSprCreate(anim, 30000, 0); + HuSprGrpMemberSet(group, member, sprite); + member++; + anim = HuSprAnimRead(HuDataReadNum(3, MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + sprite = HuSprCreate(anim, 1, 0); + HuSprGrpMemberSet(group, member, sprite); + HuSprTPLvlSet(group, member, 0.4f); + member++; + group = HuSprGrpCreate(16); + work->charGroup = group; + HuSprGrpPosSet(group, 288, 200); + x = -203; + for(j=0; j<8; j++, member++) { + anim = HuSprAnimRead(HuDataReadNum(charSpriteTbl[j], MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + sprite = HuSprCreate(anim, 28010, 0); + HuSprGrpMemberSet(group, j, sprite); + HuSprPosSet(group, j, x, 0); + x += 58; + } + anim = HuSprAnimRead(HuDataReadNum(24, MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + member++; + x = -203; + for(i=0; i<8; i++) { + if(charTbl[i] < 0){ + sprite = HuSprCreate(anim, 28000, 0); + HuSprGrpMemberSet(group, j, sprite); + HuSprPosSet(group, j, x, 0); + HuSprTPLvlSet(group, j, 0.5f); + j++; + } + x += 58; + } + group = HuSprGrpCreate(7); + work->cursorGroup = group; + HuSprGrpPosSet(group, 0, 0); + for(i=0; i<7; i++) { + if(i < 5) { + anim = HuSprAnimRead(HuDataReadNum(cursorSpriteTbl[i], MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + member++; + } + sprite = HuSprCreate(anim, 10010, 0); + HuSprGrpMemberSet(group, i, sprite); + HuSprAttrSet(group, i, HUSPR_ATTR_DISPOFF); + } + group = HuSprGrpCreate(7); + work->hiliteGroup = group; + HuSprGrpPosSet(group, 0, 0); + for(i=0; i<7; i++) { + if(i < 5) { + anim = HuSprAnimRead(HuDataReadNum(hiliteSprTbl[i], MEMORY_DEFAULT_NUM)); + work->anims[member] = anim; + member++; + } + sprite = HuSprCreate(anim, 10000, 0); + HuSprGrpMemberSet(group, i, sprite); + HuSprAttrSet(group, i, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<4; i++) { + work->cursorPos[i] = configE3.character[i]; + work->cursorStat[i] = 0; + } + work->currPlayer = 0; + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = UpdateCharSel; +} + +typedef struct e3_rumble_cfg_work { + AnimData *frame[3]; + AnimData *arrow; + AnimData *arrowHilite; + Vector2 winSize; + s16 frameGroup; + s16 arrowGroupL; + s16 arrowGroupR; + s16 unk22[6]; + s16 winHeader; + s16 winValue; + s16 rumbleVal; + s16 rumbleValOld; +} E3RumbleCfgWork; + +static u32 rumbleMess[] = { + 0x220008, + 0x220007 +}; + +static void UpdateRumbleCfg(omObjData *object) +{ + E3RumbleCfgWork *work; + s32 i; + u16 btnDown; + + work = object->data; + if(object->work[1] != object->work[0]) { + if(object->work[0] == 0) { + object->work[2] = 4; + } else { + object->work[2] = 3; + } + object->work[1] = object->work[0]; + } + btnDown = e3PadData[e3PadCtrl].btnDown; + switch(object->work[2]) { + + case 0: + break; + + case 1: + if(btnDown & PAD_BUTTON_A) { + HuAudFXPlay(1); + configE3.rumble = work->rumbleVal; + object->work[0] = 0; + object->work[3] = 1; + } else if(btnDown & PAD_BUTTON_B) { + HuAudFXPlay(3); + work->rumbleVal = configE3.rumble; + object->work[0] = 0; + object->work[3] = 0; + } else if(btnDown & PAD_BUTTON_LEFT) { + HuAudFXPlay(0); + work->rumbleVal--; + if(work->rumbleVal < 0) { + work->rumbleVal = 1; + } + } else if(btnDown & PAD_BUTTON_RIGHT) { + HuAudFXPlay(0); + work->rumbleVal++; + if(work->rumbleVal > 1) { + work->rumbleVal = 0; + } + } + break; + + case 3: + HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<2; i++) { + HuSprAttrReset(work->arrowGroupL, i, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->arrowGroupR, i, HUSPR_ATTR_DISPOFF); + } + object->work[2] = 1; + break; + + case 4: + HuSprAttrReset(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<2; i++) { + HuSprAttrSet(work->arrowGroupL, i, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->arrowGroupR, i, HUSPR_ATTR_DISPOFF); + } + object->work[2] = 0; + break; + } + if(work->rumbleValOld != work->rumbleVal) { + u32 mess; + float size[2]; + mess = rumbleMess[work->rumbleVal]; + HuWinMesMaxSizeGet(1, size, mess); + HuWinCenterPosSet(work->winValue, (work->winSize.x-size[0])/-2.0f, (work->winSize.y-size[1])/-2.0f); + HuWinMesSet(work->winValue, mess); + work->rumbleValOld = work->rumbleVal; + } +} + +static void InitRumbleCfg(omObjData *object) +{ + E3RumbleCfgWork *work; + s16 index2; + s16 group; + s32 index; + AnimData *anim; + u32 mess; + float sizeMax[2]; //FIXME: Change to Vector2 + float size[2]; //FIXME: Change to Vector2 + + omSetStatBit(object, 0x100); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3RumbleCfgWork), MEMORY_DEFAULT_NUM); + work = object->data; + index = 0; + group = HuSprGrpCreate(3); + work->frameGroup = group; + HuSprGrpPosSet(group, 288, 303); + anim = HuSprAnimRead(HuDataReadNum(8, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30008, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.5f); + index++; + anim = HuSprAnimRead(HuDataReadNum(7, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30000, 0); + HuSprGrpMemberSet(group, index, index2); + index++; + anim = HuSprAnimRead(HuDataReadNum(9, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 1, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.4f); + anim = HuSprAnimRead(HuDataReadNum(12, MEMORY_DEFAULT_NUM)); + work->arrow = anim; + work->arrowHilite = HuSprAnimRead(HuDataReadNum(13, MEMORY_DEFAULT_NUM)); + group = HuSprGrpCreate(2); + work->arrowGroupL = group; + HuSprGrpPosSet(group, 240, 319); + index2 = HuSprCreate(anim, 4, 0); + HuSprGrpMemberSet(group, 0, index2); + index2 = HuSprCreate(work->arrowHilite, 6, 0); + HuSprGrpMemberSet(group, 1, index2); + HuSprTPLvlSet(group, 1, 0.5f); + HuSprPosSet(group, 1, 0, -4); + group = HuSprGrpCreate(2); + work->arrowGroupR = group; + HuSprGrpPosSet(group, 336, 319); + index2 = HuSprCreate(anim, 4, 1); + HuSprGrpMemberSet(group, 0, index2); + index2 = HuSprCreate(work->arrowHilite, 6, 1); + HuSprGrpMemberSet(group, 1, index2); + HuSprTPLvlSet(group, 1, 0.5f); + HuSprPosSet(group, 1, 0, -4); + index2 = work->arrowGroupL; + for(index=0; index<2; index++) { + HuSprAttrSet(group, index, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(index2, index, HUSPR_ATTR_DISPOFF); + } + HuWinMesMaxSizeGet(1, sizeMax, 0x220006); + index2 = HuWinCreate(-10000, 267, sizeMax[0], sizeMax[1], 0); + work->winHeader = index2; + HuWinMesColSet(index2, 4); + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesSet(index2, 0x220006); + work->rumbleValOld = work->rumbleVal = configE3.rumble; + mess = rumbleMess[work->rumbleVal]; + HuWinMesMaxSizeGet(2, sizeMax, 0x220007, 0x220008); + index2 = HuWinCreate(-10000, 299, sizeMax[0], sizeMax[1], 0); + work->winValue = index2; + work->winSize = *(Vector2 *)(sizeMax); //FIXME: Remove Cast + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesMaxSizeGet(1, size, mess); + HuWinCenterPosSet(index2, (sizeMax[0]-size[0])/-2.0f, 0); + HuWinMesSet(index2, mess); + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = UpdateRumbleCfg; + (void)object; +} + +typedef struct e3_mode_sel_work { + AnimData *frame[7]; + Vector2 winSizeMode; + Vector2 winSizeBoard; + s16 frameGroup; + s16 arrowGroupL; + s16 arrowGroupR; + s16 cursorGroup; + s16 unk34[6]; + s16 winMode; + s16 winBoard; + s16 mode; + s16 modeOld; + s16 board; + s16 boardOld; +} E3ModeSelWork; + +static Vector2 modeSelCursorPosTbl[] = { + 144, 418, + 288, 418 +}; + +static Vector2 boardSelCursorPosTbl[] = { + 94, 418, + 284, 418 +}; + +static void UpdateModeSel(omObjData *object) +{ + E3ModeSelWork *work; + u16 btnDown; + float winSize[2]; + + work = object->data; + if(object->work[1] != object->work[0]) { + if(object->work[0] == 0) { + object->work[2] = 4; + } else { + object->work[2] = 3; + } + object->work[1] = object->work[0]; + } + btnDown = e3PadData[e3PadCtrl].btnDown; + switch(object->work[2]) { + case 0: + break; + + case 1: + if(btnDown & PAD_BUTTON_A) { + HuAudFXPlay(1); + configE3.mode = work->mode; + if(work->mode != 0) { + object->work[0] = 0; + object->work[3] = 1; + } else { + object->work[2] = 2; + work->boardOld = -1; + HuWinMesColSet(work->winMode, 4); + HuWinMesMaxSizeGet(1, winSize, 0x22000F); + HuWinCenterPosSet(work->winMode, (work->winSizeMode.x-winSize[0])/-2.0f, (work->winSizeMode.y-winSize[1])/-2.0f); + HuWinMesSet(work->winMode, 0x22000F); + HuWinMesMaxSizeGet(1, winSize, 0x220010); + HuWinCenterPosSet(work->winBoard, (work->winSizeBoard.x-winSize[0])/-2.0f, (work->winSizeBoard.y-winSize[1])/-2.0f); + HuWinMesSet(work->winBoard, 0x220010); + } + } else if(btnDown & PAD_BUTTON_B) { + HuAudFXPlay(3); + work->mode = configE3.mode; + object->work[0] = 0; + object->work[3] = 0; + } else if(btnDown & PAD_BUTTON_LEFT) { + HuAudFXPlay(0); + work->mode--; + if(work->mode < 0) { + work->mode = 1; + } + } else if(btnDown & PAD_BUTTON_RIGHT) { + HuAudFXPlay(0); + work->mode++; + if(work->mode > 1) { + work->mode = 0; + } + } + break; + + case 2: + if(btnDown & PAD_BUTTON_A) { + HuAudFXPlay(1); + configE3.board = work->board; + object->work[0] = 0; + object->work[3] = 1; + } else if(btnDown & PAD_BUTTON_B) { + HuAudFXPlay(3); + work->boardOld = work->board; + work->modeOld = -1; + object->work[2] = 1; + HuWinMesColSet(work->winMode, 4); + HuWinMesMaxSizeGet(1, winSize, 0x220009); + HuWinCenterPosSet(work->winMode, (work->winSizeMode.x-winSize[0])/-2.0f, (work->winSizeMode.y-winSize[1])/-2.0f); + HuWinMesSet(work->winMode, 0x220009); + HuWinMesMaxSizeGet(1, winSize, 0x22000A); + HuWinCenterPosSet(work->winBoard, (work->winSizeBoard.x-winSize[0])/-2.0f, (work->winSizeBoard.y-winSize[1])/-2.0f); + HuWinMesSet(work->winBoard, 0x22000A); + } else if(btnDown & PAD_BUTTON_LEFT) { + HuAudFXPlay(0); + work->board--; + if(work->board < 0) { + work->board = 1; + } + } else if(btnDown & PAD_BUTTON_RIGHT) { + HuAudFXPlay(0); + work->board++; + if(work->board > 1) { + work->board = 0; + } + } + break; + + case 3: + HuSprAttrSet(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->cursorGroup, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(work->cursorGroup, 1, HUSPR_ATTR_DISPOFF); + object->work[2] = 1; + break; + + case 4: + HuSprAttrReset(work->frameGroup, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->cursorGroup, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->cursorGroup, 1, HUSPR_ATTR_DISPOFF); + object->work[2] = 0; + break; + } + if(object->work[0]) { + if(work->modeOld != work->mode) { + HuSprGrpPosSet(work->cursorGroup, modeSelCursorPosTbl[work->mode].x, modeSelCursorPosTbl[work->mode].y); + work->modeOld = work->mode; + } + if(work->boardOld != work->board) { + HuSprGrpPosSet(work->cursorGroup, boardSelCursorPosTbl[work->board].x, boardSelCursorPosTbl[work->board].y); + work->boardOld = work->board; + } + } +} + +static void InitModeSel(omObjData *object) +{ + E3ModeSelWork *work; + s16 index2; + s32 index; + s16 group; + AnimData *anim; + float size[2]; //FIXME: Change to Vector2 + + omSetStatBit(object, 0x100); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3ModeSelWork), MEMORY_DEFAULT_NUM); + work = object->data; + index = 0; + group = HuSprGrpCreate(3); + work->frameGroup = group; + HuSprGrpPosSet(group, 288, 398); + anim = HuSprAnimRead(HuDataReadNum(5, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30008, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.5f); + index++; + anim = HuSprAnimRead(HuDataReadNum(4, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 30000, 0); + HuSprGrpMemberSet(group, index, index2); + index++; + anim = HuSprAnimRead(HuDataReadNum(6, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 1, 0); + HuSprGrpMemberSet(group, index, index2); + HuSprTPLvlSet(group, index, 0.4f); + index++; + work->modeOld = work->mode = configE3.mode; + work->board = work->boardOld = 0; + group = HuSprGrpCreate(2); + work->cursorGroup = group; + HuSprGrpPosSet(group, modeSelCursorPosTbl[work->mode].x, modeSelCursorPosTbl[work->mode].y); + anim = HuSprAnimRead(HuDataReadNum(10, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 10000, 0); + HuSprGrpMemberSet(group, 0, index2); + index++; + anim = HuSprAnimRead(HuDataReadNum(11, MEMORY_DEFAULT_NUM)); + work->frame[index] = anim; + index2 = HuSprCreate(anim, 10008, 0); + HuSprGrpMemberSet(group, 1, index2); + HuSprTPLvlSet(group, 1, 0.5f); + HuSprPosSet(group, 1, 0, -4); + index++; + HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + HuWinMesMaxSizeGet(2, &work->winSizeMode.x, 0x220009, 0x22000F); + index2 = HuWinCreate(-10000, 350, work->winSizeMode.x, work->winSizeMode.y, 0); + work->winMode = index2; + HuWinMesColSet(index2, 4); + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesMaxSizeGet(1, size, 0x220009); + HuWinCenterPosSet(index2, (work->winSizeMode.x-size[0])/-2.0f, (work->winSizeMode.y-size[1])/-2.0f); + HuWinMesSet(index2, 0x220009); + HuWinMesMaxSizeGet(2, &work->winSizeBoard.x, 0x22000A, 0x220010); + index2 = HuWinCreate(-10000, 390, work->winSizeBoard.x, work->winSizeBoard.y, 0); + work->winBoard = index2; + HuWinBGTPLvlSet(index2, 0); + HuWinMesSpeedSet(index2, 0); + HuWinMesMaxSizeGet(1, size, 0x22000A); + HuWinCenterPosSet(index2, (work->winSizeBoard.x-size[0])/-2.0f, (work->winSizeBoard.y-size[1])/-2.0f); + HuWinMesSet(index2, 0x22000A); + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = UpdateModeSel; +} + +#define E3_BG_SPEED 0.5f +#define E3_BG_TILE_W 128 +#define E3_BG_TILE_H 128 +#define E3_BG_TILE_COL 6 +#define E3_BG_TILE_ROW 5 +#define E3_BG_MAX_TILE (E3_BG_TILE_COL*E3_BG_TILE_ROW) + +typedef struct e3_bg_tile { + Vector2 pos; + s16 sprite; +} E3BGTile; + +typedef struct e3_bg_work { + AnimData *anim; + s16 group; + E3BGTile tiles[E3_BG_MAX_TILE]; +} E3BGWork; + +static void E3BGUpdate(omObjData *object) +{ + E3BGTile *tile; + s32 i; + E3BGWork *work; + s16 group; + work = object->data; + tile = &work->tiles[0]; + group = work->group; + for(i=0; ipos.x -= E3_BG_SPEED; + if(tile->pos.x <= -(E3_BG_TILE_W/2)) { + tile->pos.x += E3_BG_TILE_W*E3_BG_TILE_COL; + } + tile->pos.y -= E3_BG_SPEED; + if(tile->pos.y <= -(E3_BG_TILE_H/2)) { + tile->pos.y += E3_BG_TILE_H*E3_BG_TILE_ROW; + } + HuSprPosSet(group, i, tile->pos.x, tile->pos.y); + } +} + +void E3BGCreate(omObjData *object) +{ + E3BGTile *tile; + E3BGWork *work; + s32 tile_idx; + s16 group; + s16 col; + s16 row; + AnimData *anim; + s16 sprite; + float x; + float y; + + omSetStatBit(object, 0x100); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3BGWork), MEMORY_DEFAULT_NUM); + work = object->data; + group = HuSprGrpCreate(E3_BG_MAX_TILE); + work->group = group; + anim = HuSprAnimRead(HuDataReadNum(0, MEMORY_DEFAULT_NUM)); + work->anim =anim; + tile = &work->tiles[0]; + tile_idx = 0; + y = E3_BG_TILE_H/2; + for(row=0; rowsprite = sprite; + tile->pos.x = x; + tile->pos.y = y; + tile++; + tile_idx++; + x += E3_BG_TILE_W; + } + y += E3_BG_TILE_H; + } + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = E3BGUpdate; +} + +typedef struct camera_view_params { + Vec rot; + Vec pos; + float zoom; + float fov; +} CameraViewParams; + +static CameraViewParams camViewTbl[] = { + { + -42, 0, 0, + 0, 50, -57, + 2488, + 30 + }, + { + -90, 0, 0, + 0, 50, 0, + 2990, + 30 + }, + { + -13, 0, 0, + 0, 50, -1025, + 2488, + 30 + } +}; + +static void UpdateCamera(omObjData *object); + +static void InitCamera(omObjData *object) +{ + u32 *work; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3*sizeof(u32), MEMORY_DEFAULT_NUM); + work = object->data; + work[0] = 0; + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = UpdateCamera; +} + +static void UpdateCamera(omObjData *object) +{ + u32 *work = object->data; + if(object->work[0]) { + if((s32)object->work[0] != 1) { + (void)object; + } else { + CameraViewParams *view = &camViewTbl[object->work[1]]; + CRot = view->rot; + Center = view->pos; + CZoom = view->zoom; + if(e3CameraFov != view->fov) { + e3CameraFov = view->fov; + Hu3DCameraPerspectiveSet(1, e3CameraFov, 100, 25000, 4.0f/3.0f); + } + } + object->work[0] = 0; + } + if(object->work[2]) { + (void)object; + } +} + +Vec lbl_2_data_478[] = { + -90, 0, 2990, + -42, -57, 2488, + 9999, 9999, 9999 +}; + +Vec lbl_2_data_49C[] = { + -42, -57, 2488, + -13, -1025, 2350, + 9999, 9999, 9999 +}; + +struct unkstruct_4C0 { + Vec *unk0; + float unk4; +}; + +struct unkstruct_4C0 lbl_2_data_4C0[] = { + lbl_2_data_478, 60, + lbl_2_data_49C, 60 +}; \ No newline at end of file From 7703c88607f6adc9ce5c2375b5d8304ef77aa4f3 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 23 Apr 2024 17:09:47 -0500 Subject: [PATCH 4/6] Change vector2 type name --- include/ext_math.h | 4 ++-- src/REL/E3setupDLL/main.c | 30 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/ext_math.h b/include/ext_math.h index b839dcbf..2c709a82 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -4,10 +4,10 @@ #include "math.h" #include "dolphin/mtx.h" -typedef struct vector2 { +typedef struct vec2f { float x; float y; -} Vector2; +} Vec2f; #define ABS(x) (((x) < 0) ? -(x) : (x)) diff --git a/src/REL/E3setupDLL/main.c b/src/REL/E3setupDLL/main.c index b50c04e9..fc5b2372 100644 --- a/src/REL/E3setupDLL/main.c +++ b/src/REL/E3setupDLL/main.c @@ -437,7 +437,7 @@ typedef struct e3_player_cnt_work { AnimData *frame[3]; AnimData *arrow; AnimData *arrowHilite; - Vector2 winSize; + Vec2f winSize; s16 frameGroup; s16 arrowGroupL; s16 arrowGroupR; @@ -550,8 +550,8 @@ static void InitPlayerCnt(omObjData *object) s16 group; AnimData *anim; u32 mess; - float sizeMax[2]; //FIXME: Change to Vector2 - float size[2]; //FIXME: Change to Vector2 + float sizeMax[2]; //FIXME: Change to Vec2f + float size[2]; //FIXME: Change to Vec2f omSetStatBit(object, 0x100); object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3PlayerCntWork), MEMORY_DEFAULT_NUM); @@ -614,7 +614,7 @@ static void InitPlayerCnt(omObjData *object) HuWinMesMaxSizeGet(4, sizeMax, 0x220001, 0x220002, 0x220003, 0x220004); index2 = HuWinCreate(-10000, 58, sizeMax[0], sizeMax[1], 0); work->winPlayer = index2; - work->winSize = *(Vector2 *)(sizeMax); //FIXME: Remove Cast + work->winSize = *(Vec2f *)(sizeMax); //FIXME: Remove Cast HuWinBGTPLvlSet(index2, 0); HuWinMesSpeedSet(index2, 0); HuWinMesMaxSizeGet(1, size, mess); @@ -649,7 +649,7 @@ typedef struct e3_char_sel_work { s16 currPlayer; } E3CharSelWork; -static Vector2 charPosTbl[] = { +static Vec2f charPosTbl[] = { 85, 248, 143, 248, 201, 248, @@ -1131,7 +1131,7 @@ typedef struct e3_rumble_cfg_work { AnimData *frame[3]; AnimData *arrow; AnimData *arrowHilite; - Vector2 winSize; + Vec2f winSize; s16 frameGroup; s16 arrowGroupL; s16 arrowGroupR; @@ -1231,8 +1231,8 @@ static void InitRumbleCfg(omObjData *object) s32 index; AnimData *anim; u32 mess; - float sizeMax[2]; //FIXME: Change to Vector2 - float size[2]; //FIXME: Change to Vector2 + float sizeMax[2]; //FIXME: Change to Vec2f + float size[2]; //FIXME: Change to Vec2f omSetStatBit(object, 0x100); object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3RumbleCfgWork), MEMORY_DEFAULT_NUM); @@ -1295,7 +1295,7 @@ static void InitRumbleCfg(omObjData *object) HuWinMesMaxSizeGet(2, sizeMax, 0x220007, 0x220008); index2 = HuWinCreate(-10000, 299, sizeMax[0], sizeMax[1], 0); work->winValue = index2; - work->winSize = *(Vector2 *)(sizeMax); //FIXME: Remove Cast + work->winSize = *(Vec2f *)(sizeMax); //FIXME: Remove Cast HuWinBGTPLvlSet(index2, 0); HuWinMesSpeedSet(index2, 0); HuWinMesMaxSizeGet(1, size, mess); @@ -1310,8 +1310,8 @@ static void InitRumbleCfg(omObjData *object) typedef struct e3_mode_sel_work { AnimData *frame[7]; - Vector2 winSizeMode; - Vector2 winSizeBoard; + Vec2f winSizeMode; + Vec2f winSizeBoard; s16 frameGroup; s16 arrowGroupL; s16 arrowGroupR; @@ -1325,12 +1325,12 @@ typedef struct e3_mode_sel_work { s16 boardOld; } E3ModeSelWork; -static Vector2 modeSelCursorPosTbl[] = { +static Vec2f modeSelCursorPosTbl[] = { 144, 418, 288, 418 }; -static Vector2 boardSelCursorPosTbl[] = { +static Vec2f boardSelCursorPosTbl[] = { 94, 418, 284, 418 }; @@ -1459,7 +1459,7 @@ static void InitModeSel(omObjData *object) s32 index; s16 group; AnimData *anim; - float size[2]; //FIXME: Change to Vector2 + float size[2]; //FIXME: Change to Vec2f omSetStatBit(object, 0x100); object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(E3ModeSelWork), MEMORY_DEFAULT_NUM); @@ -1536,7 +1536,7 @@ static void InitModeSel(omObjData *object) #define E3_BG_MAX_TILE (E3_BG_TILE_COL*E3_BG_TILE_ROW) typedef struct e3_bg_tile { - Vector2 pos; + Vec2f pos; s16 sprite; } E3BGTile; From fa17948b84e2378ecce42117ee00e9d3a5d24a48 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 23 Apr 2024 23:33:05 -0500 Subject: [PATCH 5/6] Start on m401dll --- config/GMPE01_00/rels/m401Dll/symbols.txt | 10 +- include/REL/m401Dll.h | 19 + src/REL/m401Dll/m401Dll.c | 533 ------------------- src/REL/m401Dll/m401Dll.h | 198 ------- src/REL/m401Dll/main.c | 613 ++++++++++++++++++++++ 5 files changed, 638 insertions(+), 735 deletions(-) create mode 100644 include/REL/m401Dll.h delete mode 100644 src/REL/m401Dll/m401Dll.c delete mode 100644 src/REL/m401Dll/m401Dll.h create mode 100644 src/REL/m401Dll/main.c diff --git a/config/GMPE01_00/rels/m401Dll/symbols.txt b/config/GMPE01_00/rels/m401Dll/symbols.txt index 371068fb..b74724ac 100644 --- a/config/GMPE01_00/rels/m401Dll/symbols.txt +++ b/config/GMPE01_00/rels/m401Dll/symbols.txt @@ -436,15 +436,16 @@ lbl_2_data_48 = .data:0x00000048; // type:object size:0xC data:float lbl_2_data_54 = .data:0x00000054; // type:object size:0x1B data:string lbl_2_data_6F = .data:0x0000006F; // type:object size:0x11 lbl_2_data_80 = .data:0x00000080; // type:object size:0x20 -lbl_2_data_A0 = .data:0x000000A0; // type:object size:0x14 -lbl_2_data_B4 = .data:0x000000B4; // type:object size:0x18 +lbl_2_data_A0 = .data:0x000000A0; // type:object size:0x14 data:float +lbl_2_data_B4 = .data:0x000000B4; // type:object size:0x18 data:float lbl_2_data_CC = .data:0x000000CC; // type:object size:0x28 lbl_2_data_F4 = .data:0x000000F4; // type:object size:0x9 data:string lbl_2_data_FD = .data:0x000000FD; // type:object size:0x9 data:string lbl_2_data_106 = .data:0x00000106; // type:object size:0x9 data:string lbl_2_data_10F = .data:0x0000010F; // type:object size:0x9 data:string lbl_2_data_118 = .data:0x00000118; // type:object size:0xC -lbl_2_data_124 = .data:0x00000124; // type:object size:0x34 data:4byte +lbl_2_data_124 = .data:0x00000124; // type:object size:0x14 data:4byte +lbl_2_data_138 = .data:0x00000138; // type:object size:0x20 data:4byte lbl_2_data_158 = .data:0x00000158; // type:object size:0x140 lbl_2_data_298 = .data:0x00000298; // type:object size:0x30 lbl_2_data_2C8 = .data:0x000002C8; // type:object size:0x30 @@ -466,7 +467,8 @@ lbl_2_bss_10 = .bss:0x00000010; // type:object size:0x4 data:float lbl_2_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte lbl_2_bss_18 = .bss:0x00000018; // type:object size:0x2 data:2byte lbl_2_bss_1A = .bss:0x0000001A; // type:object size:0x2 data:2byte -lbl_2_bss_1C = .bss:0x0000001C; // type:object size:0x10 data:4byte +lbl_2_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:4byte +lbl_2_bss_20 = .bss:0x00000020; // type:object size:0xC data:4byte lbl_2_bss_2C = .bss:0x0000002C; // type:object size:0xC data:float lbl_2_bss_38 = .bss:0x00000038; // type:object size:0xC data:float lbl_2_bss_44 = .bss:0x00000044; // type:object size:0xC data:float diff --git a/include/REL/m401Dll.h b/include/REL/m401Dll.h new file mode 100644 index 00000000..085cd726 --- /dev/null +++ b/include/REL/m401Dll.h @@ -0,0 +1,19 @@ +#ifndef M401DLL_H +#define M401DLL_H + +#include "game/object.h" +#include "dolphin.h" + +extern float lbl_2_bss_12C; +extern float lbl_2_bss_128; +extern float lbl_2_bss_124; +extern s16 lbl_2_bss_120; + +void fn_2_10240(Vec *arg0, Vec *arg1); +void fn_2_1041C(void); +void fn_2_10710(void); + +void fn_2_1079C(void); +omObjData *fn_2_14640(Process *objman); + +#endif \ No newline at end of file diff --git a/src/REL/m401Dll/m401Dll.c b/src/REL/m401Dll/m401Dll.c deleted file mode 100644 index 3c19e79f..00000000 --- a/src/REL/m401Dll/m401Dll.c +++ /dev/null @@ -1,533 +0,0 @@ -#include "m401Dll.h" - -void M401ObjectSetup(void) { - s32 i; - unkStructBSS114 *temp_r30; - unkStruct18BFC0 *temp_r29; - s16* temp_r28; - - OSReport("**** M401ObjectSetup ****\n"); - HuMemHeapDump(HuMemHeapPtrGet(0), -1); - HuMemHeapDump(HuMemHeapPtrGet(2), -1); - HuMemHeapDump(HuMemHeapPtrGet(3), -1); - lbl_2_bss_1C = omInitObjMan(0x3C, 0x2000); - omGameSysInit(lbl_2_bss_1C); - lbl_2_bss_A8 = Hu3DGLightCreateV(&lbl_2_data_14, &lbl_2_data_20, &lbl_2_data_2C); - Hu3DGLightInfinitytSet(lbl_2_bss_A8); - temp_r28 = &lbl_8018C8FC[lbl_2_bss_A8].unk_00; - *temp_r28 |= 0x8000; - Hu3DCameraCreate(1); - temp_r29 = &lbl_8018BFC0; - Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0, 480.0, 0.0f, 1.0f); - lbl_2_bss_114 = omAddObjEx(lbl_2_bss_1C, 0x3E8, 3, 0, -1, &fn_2_BD90); - *lbl_2_bss_114->model = 0; - lbl_2_bss_110 = omAddObjEx(lbl_2_bss_1C, 0xA, 0, 0, -1, &fn_2_70C); - omMakeGroupEx(lbl_2_bss_1C, 0, 4); - lbl_2_bss_118[0] = omGetGroupMemberListEx(lbl_2_bss_1C, 0); - omMakeGroupEx(lbl_2_bss_1C, 1, 0x1C); - for (i = 0; i < 4; i++) { - temp_r30 = omAddObjEx(lbl_2_bss_1C, 0x4B0, 4, 0xA, 0, &fn_2_3B24); - temp_r30->unk_4C = i; - } - lbl_2_bss_12C = 60.0f; - lbl_2_bss_128 = 50.0f; - lbl_2_bss_124 = 25000.0f; - Hu3DShadowCreate(30.0f, 30.0f, 20.0f); - Hu3DShadowTPLvlSet(0.35f); - lbl_2_data_30.y = (f32) (1500.0f + lbl_2_bss_60.y); - lbl_2_data_30.z = (f32) (500.0f + lbl_2_bss_60.z); - lbl_2_data_48.y = (f32) lbl_2_bss_60.y; - lbl_2_data_48.z = (f32) (500.0f + lbl_2_bss_60.z); - Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); - lbl_2_bss_10C = omAddObjEx(lbl_2_bss_1C, 0x1F4, 0xC, 3, -1, &fn_2_2FA4); - lbl_2_bss_108 = omAddObjEx(lbl_2_bss_1C, 0x44C, 1, 1, -1, &fn_2_7CB4); - lbl_2_bss_100.unk_00 = omAddObjEx(lbl_2_bss_1C, 0x456, 1, 1, -1, &fn_2_8E74); - lbl_2_bss_100.unk_04 = omAddObjEx(lbl_2_bss_1C, 0x456, 1, 1, -1, &fn_2_8E74); - lbl_2_bss_FC = omAddObjEx(lbl_2_bss_1C, 0x460, 1, 2, -1, &fn_2_95E4); - lbl_2_bss_C8 = omAddObjEx(lbl_2_bss_1C, 0x64, 0, 0, -1, &fn_2_D088); - lbl_2_bss_E0 = omAddObjEx(lbl_2_bss_1C, 0x5DC, 0, 0, -1, &fn_2_C1C); - fn_2_DBCC(0x5A); - lbl_2_bss_F8 = omAddObjEx(lbl_2_bss_1C, 0x1F4, 9, 0, -1, &fn_2_C6DC); - fn_2_9D00(lbl_2_bss_1C); - fn_2_1041C(); - fn_2_1079C(); - lbl_2_bss_F4 = fn_2_14640(lbl_2_bss_1C); - lbl_2_bss_50 = 0.0f; - lbl_2_bss_54.unk_00 = temp_r29->unk_14; - Hu3DReflectNoSet(0); - lbl_2_bss_120 = 0; - lbl_2_bss_BE = 0; - lbl_2_bss_BA = 0; - Hu3DFogSet(3000.0f, 10000.0f, 0xAU, 0x3CU, 0xA0U); - Hu3DBGColorSet(0xAU, 0x3CU, 0xA0U); - lbl_2_bss_88 = 3000.0f; - lbl_2_bss_84 = 142000.0f; - lbl_2_bss_11C = HuAudFXPlay(0x50A); -} - -void fn_2_70C(unkStructBSS114* arg0) { - s16 var_r29; - unkSubstructBSS114* temp_r30_2; - s32 i; - - switch (lbl_2_bss_120) { - case 0: - break; - case 1: - if (lbl_2_bss_BE == 1) { - lbl_2_bss_120 = 2; - lbl_2_bss_C0 = MGSeqCreate(3, 1); - HuAudSeqFadeOut(lbl_2_bss_A4, 0x64); - } - break; - case 2: - if (lbl_2_bss_114 == NULL) { - lbl_2_bss_114 = omAddObjEx(HuPrcCurrentGet(), 0x3E8, 0, 0, -1, &fn_2_C130); - *lbl_2_bss_114->model = 0; - var_r29 = 0; - lbl_2_bss_BA = 0; - for (i = 0; i < 4; i++) { - temp_r30_2 = lbl_2_bss_118[i]->unk_5C; - lbl_2_bss_118[i]->unk_14 = &fn_2_48A0; - temp_r30_2->unk_00[0] = 5; - temp_r30_2->unk_68[0][0] = 0; - if (temp_r30_2->unk_68[1][2] > var_r29) { - var_r29 = temp_r30_2->unk_68[1][2]; - } - lbl_2_bss_B2[i] = -1; - lbl_2_bss_AA[i] = -1; - } - if ((s16) var_r29 > 0) { - for (i = 0; i < 4; i++) { - temp_r30_2 = lbl_2_bss_118[i]->unk_5C; - if (temp_r30_2->unk_68[1][2] == var_r29) { - lbl_2_bss_AA[lbl_2_bss_BA] = lbl_8018FC10[i].unk_00; - lbl_2_bss_B2[lbl_2_bss_BA++] = i; - temp_r30_2->unk_68[0][0] = 1; - } - } - } - OSReport(lbl_2_data_6F, lbl_2_bss_BA); - } - break; - } - if (lbl_801D3CC2 != 0) { - WipeCreate(2, 0, 0x3C); - HuAudSeqFadeOut(lbl_2_bss_A4, 0x64); - HuAudFXStop(lbl_2_bss_11C); - arg0->unk_14 = &fn_2_A10; - } -} - -void fn_2_A10(void) { - s32 i; - - if (WipeStatGet() == 0) { - fn_2_10710(); - for (i = 0; i < 4; i++) { - fn_8004D6F4(lbl_2_data_4[lbl_8018FC10[i].unk_00]); - } - - HuAudFXListnerKill(); - omOvlReturnEx(1, 1); - } -} - -void M401SetFogAndBG(void) { - Hu3DFogSet(174.0f, 271.0f, 0xA, 0x3C, 0xA0); - Hu3DBGColorSet(0xAU, 0x3CU, 0xA0U); -} - -void M401SetSpriteDisp(s16 arg0) { - s32 j; - s32 i; - unkSubstructBSS114* temp_r31; - - temp_r31 = lbl_2_bss_E0->unk_5C; - if (arg0 != 0) { - for (i = 0; i < 4; i++) { - espDispOn(temp_r31->unk_00[i]); - espDispOn(temp_r31->unk_80[i]); - espDispOn(temp_r31->unk_88[i]); - for (j = 0; j < 2; j++) { - espDispOn(temp_r31->unk_08[i][j]); - } - } - return; - } - for (i = 0; i < 4; i++) { - espDispOff(temp_r31->unk_00[i]); - espDispOff(temp_r31->unk_80[i]); - espDispOff(temp_r31->unk_88[i]); - for (j = 0; j < 2; j++) { - espDispOff(temp_r31->unk_08[i][j]); - } - } -} - -void fn_2_C1C(unkStructBSS114* arg0) { - s16 temp_r0; - s32 temp_r0_2; - s32 temp_r0_3; - s32 temp_r0_4; - s32 j; - s32 i; - unkSubstructBSS114* temp_r31; - - arg0->unk_5C = HuMemDirectMallocNum(0, 0x148, 0x10000000U); - temp_r31 = arg0->unk_5C; - for (i = 0; i < 4; i++) { - temp_r31->unk_00[i] = espEntry(lbl_2_data_80[lbl_8018FC10[i].unk_00], 2, 0); - espDispOff(temp_r31->unk_00[i]); - espDrawNoSet(temp_r31->unk_00[i], 0); - espPosSet(temp_r31->unk_00[i], (f32) ((i & 1) * 0x1B6 + 0x25), ((i>1)*0x166)+0x3B); - temp_r31->unk_80[i] = espEntry(0x20002F, 3, 0); - espDispOff(temp_r31->unk_80[i]); - espDrawNoSet(temp_r31->unk_80[i], 0); - espPosSet(temp_r31->unk_80[i], (f32) (((i & 1) * 0x1B6) + 0x49), (((i>1) * 0x166) + 0x3D)); - temp_r31->unk_88[i] = espEntry(0x200030, 4, 0); - espDispOff(temp_r31->unk_88[i]); - espDrawNoSet(temp_r31->unk_88[i], 0); - espPosSet(temp_r31->unk_88[i], (f32) (((i & 1) * 0x1B6) + 0x49), (((i>1) * 0x166) + 0x3D)); - espColorSet(temp_r31->unk_88[i], 0, 0, 0); - espTPLvlSet(temp_r31->unk_88[i], 0.5f); - for (j = 0; j < 2; j++) { - temp_r31->unk_08[i][j] = espEntry(0x20002E, 1, 0); - espDispOff(temp_r31->unk_08[i][j]); - espDrawNoSet(temp_r31->unk_08[i][j], 0); - espPosSet(temp_r31->unk_08[i][j], 0x45 + ((i & 1) * 0x1B6) + (j * 0x14), ((i>1) * 0x166) + 0x3F); - espAttrSet(temp_r31->unk_08[i][j], 1); - } - for (j = 0; j < 3; j++) { - temp_r31->unk_50[i][j] = espEntry(0x20002D, 0, 0); - espDispOff(temp_r31->unk_50[i][j]); - espDrawNoSet(temp_r31->unk_50[i][j], 0); - espAttrSet(temp_r31->unk_50[i][j], 1); - temp_r31->unk_68[i][j] = espEntry(0x20002D, 0, 0); - espDispOff(temp_r31->unk_68[i][j]); - espDrawNoSet(temp_r31->unk_68[i][j], 0); - espAttrSet(temp_r31->unk_68[i][j], 1); - } - espBankSet(temp_r31->unk_50[i][0], 0xA); - espBankSet(temp_r31->unk_68[i][0], 0xB); - temp_r31->unk_90[i] = 1.0f; - temp_r31->unk_A0[i] = 1.0f; - temp_r31->unk_130[i] = 0; - temp_r31->unk_138[i] = 0; - } - arg0->unk_14 = &fn_2_11D0; -} - -void fn_2_11D0(unkStructBSS114* arg0) { - unkStructBSS114* sp1C; - Vec sp18; - Vec spC; - unkSubstructBSS114* sp8; - unkSubstructBSS114* temp_r31; - s32 i; - s32 j; - unkStructBSS114* temp_r28; - s16 temp; - - temp_r31 = arg0->unk_5C; - - for (i = 0; i < 4; i++) { - sp8 = lbl_2_bss_118[i]->unk_5C; - if (temp_r31->unk_130[i] != 0) { - temp_r28 = lbl_2_bss_118[i]; - sp18.x = temp_r28->unk_18.x; - sp18.y = temp_r28->unk_18.y; - sp18.z = temp_r28->unk_18.z; - fn_2_10240(&sp18, &spC); - - for (j = 0; j < 3; j++) { - espPosSet(temp_r31->unk_50[i][j], -20.0f + spC.x + temp_r31->unk_F0[i] + (f32) (j * 0x10), 20.0f + spC.y + temp_r31->unk_100[i]); - espTPLvlSet(temp_r31->unk_50[i][j], temp_r31->unk_90[i]); - } - - temp_r31->unk_C0[i] -= 0.5f; - temp_r31->unk_100[i] -= 1.0f; - if (temp_r31->unk_130[i] < 15) { - temp_r31->unk_90[i] -= 2.0f / 30.0f; - } - - if (--temp_r31->unk_130[i] == 0) { - espDispOff(temp_r31->unk_50[i][0]); - espDispOff(temp_r31->unk_50[i][1]); - } - } - if (temp_r31->unk_138[i] != 0) { - temp_r28 = lbl_2_bss_118[i]; - sp18.x = temp_r28->unk_18.x; - sp18.y = temp_r28->unk_18.y; - sp18.z = temp_r28->unk_18.z; - fn_2_10240(&sp18, &spC); - - for (j = 0; j < 2; j++) { - espPosSet(temp_r31->unk_68[i][j], -20.0f + spC.x + temp_r31->unk_110[i] + (f32) (j * 0x10), -20.0f + spC.y + temp_r31->unk_120[i]); - espTPLvlSet(temp_r31->unk_68[i][j], temp_r31->unk_A0[i]); - } - - temp_r31->unk_E0[i] += 0.5f; - temp_r31->unk_120[i] += 1.0f; - if (temp_r31->unk_138[i] < 0xF) { - temp_r31->unk_A0[i] -= 2.0f / 30.0f; - } - - if (--temp_r31->unk_138[i] == 0) { - espDispOff(temp_r31->unk_68[i][0]); - espDispOff(temp_r31->unk_68[i][1]); - } - } - fn_2_15C4(i); - } -} - -void fn_2_15C4(s16 arg0) { - s32 temp_r30; - unkSubstructBSS114* temp_r31; - unkSubstructBSS114* temp_r29; - - temp_r31 = lbl_2_bss_E0->unk_5C; - temp_r29 = lbl_2_bss_118[arg0]->unk_5C; - temp_r30 = temp_r29->unk_68[1][2]; - espBankSet(temp_r31->unk_08[arg0][0], temp_r30 / 10); - espBankSet(temp_r31->unk_08[arg0][1], temp_r30 % 10); -} - -void fn_2_169C(s16 arg0) { - s32 i; - unkSubstructBSS114* temp_r28; - unkSubstructBSS114* temp_r31; - - temp_r31 = lbl_2_bss_E0->unk_5C; - temp_r28 = lbl_2_bss_118[arg0]->unk_5C; - for (i = 0; i < 2; i++) { - espDispOn(temp_r31->unk_50[arg0][i]); - } - temp_r31->unk_90[arg0] = 1.0f; - temp_r31->unk_C0[arg0] = ((arg0 > 1) * 0x18E) + 0x34; - temp_r31->unk_B0[arg0] = ((arg0 & 1) * 0x1BA) + 0x29; - temp_r31->unk_100[arg0] = 0.0f; - temp_r31->unk_F0[arg0] = 0.0f; - espBankSet(temp_r31->unk_50[arg0][1], temp_r28->unk_68[2][0]); - temp_r31->unk_130[arg0] = 0x2D; -} - -void fn_2_1858(s16 arg0, s16 arg1) { - s16 temp_r4; - s32 temp_r0; - s32 var_r28; - unkSubstructBSS114* temp_r29; - unkSubstructBSS114* temp_r31; - - temp_r31 = lbl_2_bss_E0->unk_5C; - temp_r29 = lbl_2_bss_118[arg0]->unk_5C; - for (var_r28 = 0; var_r28 < 2; var_r28++) { - espDispOn(temp_r31->unk_68[arg0][var_r28]); - } - temp_r31->unk_A0[arg0] = 1.0f; - temp_r31->unk_E0[arg0] = ((arg0 > 1) * 0x18E) + 0x14; - temp_r31->unk_D0[arg0] = ((arg0 & 1) * 0x1BA) + 0x29; - temp_r31->unk_120[arg0] = 0.0f; - temp_r31->unk_110[arg0] = 0.0f; - espBankSet(temp_r31->unk_68[arg0][1], arg1); - temp_r31->unk_138[arg0] = 0x2D; - temp_r31->unk_140[arg0] = arg1; - temp_r29->unk_68[1][2] -= arg1; - if (temp_r29->unk_68[1][2] < 0) { - temp_r29->unk_68[1][2] = 0; - } -} - -// void fn_2_1A38(unkStructBSS114* arg0) { -// Vec sp20; -// Vec sp14; -// Vec sp8; -// unkStructBSS114 *temp; -// unkStructBSS114 *temp2; - -// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124); -// temp->unk_04 = 2; - -// sp20.x = -2500.0f; -// sp20.y = 150.0f; -// sp20.z = -6800.0f; -// sp14.x = 50.0f; -// sp14.y = 50.0f; -// sp14.z = 50.0f; -// sp8.x = 1500.0f; -// sp8.y = 150.0f; -// sp8.z = -4800.0f; -// temp2 = fn_2_FC40(0x12, &sp20, &sp14, &sp8); -// fn_2_E6BC(temp2->unk_4C, 5.0f, 1.5f, 0.2f, 0.8f, 3.0f); -// } - -// void fn_2_1B80(unkStructBSS114* arg0) { -// Vec sp14; -// Vec sp8; -// unkStructBSS114* temp; -// unkStructBSS114* temp2; - -// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[1]); -// temp->unk_04 = 2; -// sp14.x = -1000.0f; -// sp14.y = 0.0f; -// sp14.z = -9100.0f; -// sp8.x = 150.0f; -// sp8.y = 100.0f; -// sp8.z = 100.0f; -// temp2 = fn_2_FC40(0xE, &sp14, &sp8, &sp14); -// omSetRot(temp2, 3.0f, 0.0f, 0.0f); -// fn_8002FB30(temp2, 0.0f, 0.0f, 50.0f); -// fn_2_E6BC(temp2->unk_4C, 4.5f, 2.5f, 0.08f, 0.9f, 1.0f); -// } - -// void fn_2_1CF0(unkStructBSS114* arg0) { -// Vec sp20; -// Vec sp14; -// Vec sp8; -// unkStructBSS114 *temp; - -// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[2]); -// temp->unk_04 = 2; -// sp20.x = 500.0f; -// sp20.y = 0.0f; -// sp20.z = -24300.0f; -// sp14.x = 200.0f; -// sp14.y = 100.0f; -// sp14.z = 100.0f; -// sp8.x = 1000.0f; -// sp8.y = 0.0f; -// sp8.z = -16300.0f; -// fn_2_FC40(0x28, &sp20, &sp14, &sp8); -// } - -// void fn_2_1DE8(unkStructBSS114* arg0) { -// Vec sp2C; -// Vec sp20; -// Vec sp14; -// Vec sp8; -// unkStructBSS114 *temp2; -// unkStructBSS114 *temp; - -// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[3]); -// temp->unk_04 = 2; -// sp2C.x = 0.0f; -// sp2C.y = -150.0f + 0.003921569f * (300.0f * frand()); -// sp2C.z = -23000.0f; -// fn_2_91AC(lbl_2_bss_100.unk_00, &sp2C); -// sp2C.x = 0.0f; -// sp2C.y = -150.0f + 0.003921569f * (300.0f * frand()); -// sp2C.z = -25000.0f; -// fn_2_91AC(lbl_2_bss_100.unk_04, &sp2C); -// sp2C.x = 5500.0f; -// sp2C.y = 0.0f; -// sp2C.z = -29800.0f; -// sp20.x = 100.0f; -// sp20.y = 100.0f; -// sp20.z = 100.0f; -// sp14.x = -1500.0f; -// sp14.y = 0.0f; -// sp14.z = -24900.0f; -// temp2 = fn_2_FC40(0x14, &sp2C, &sp20, &sp14); -// fn_2_E6BC(temp2->unk_4C, 6.0f, 1.5f, 0.2f, 0.8f, 3.5f); -// sp8.x = -650.0f; -// sp8.y = -360.0f; -// sp8.z = -26300.0f; -// lbl_2_bss_D0 = fn_2_10A88(&sp8, 3); -// lbl_2_bss_90[0] = HuAudFXEmiterPlay(0x50B, &sp8); -// } - -// void fn_2_20B0(omObjData* arg0) { -// Vec sp8; -// omObjData* temp; - -// temp = Hu3DModelObjPtrGet(arg0->model[0], lbl_2_data_124[4]); -// temp->unk_04 = 2; -// Hu3DModelAttrReset(arg0->unk_40->unk_08[1][0], 1); -// sp8.x = 0.0f; -// sp8.y = -370.0f; -// sp8.z = -43000.0f; -// lbl_2_bss_8 = fn_2_10A88(&sp8, 3); -// lbl_2_bss_90[1] = HuAudFXEmiterPlay(0x50B, &sp8); -// sp8.x = 380.0f; -// sp8.y = -440.0f; -// sp8.z = -32000.0f; -// lbl_2_bss_CC = fn_2_10A88(&sp8, 3); -// lbl_2_bss_90[2] = HuAudFXEmiterPlay(0x50B, &sp8); -// Hu3DModelAttrReset(arg0->unk_40->unk_00[2], 1); -// Hu3DModelAttrSet(arg0->unk_40->unk_00[2], -0x3FFFFFFF); -// } - -// void fn_2_21F8(omObjData* arg0) { -// Vec sp2C; -// Vec sp20; -// Vec sp14; -// Vec sp8; -// s32 i; -// s32 var_r30_2; -// unkStructBSS114* temp; - -// temp = Hu3DModelObjPtrGet(arg0->model[0], *lbl_2_data_124); -// temp->unk_04 = 2; - -// Hu3DModelAttrReset(arg0->model[0], 1); -// Hu3DModelAttrReset(arg0->model[1], 1); -// Hu3DModelAttrSet(arg0->model[0], 0x40000001); -// Hu3DModelAttrSet(arg0->model[1], 0x40000001); -// Hu3DModelAttrReset(arg0->model[3], 1); -// lbl_2_bss_44.x = 0.0f; -// lbl_2_bss_44.y = 100.0f; -// lbl_2_bss_44.z = 0.0f; -// lbl_2_bss_38.x = 0.0f; -// lbl_2_bss_38.y = 1000.0f; -// lbl_2_bss_38.z = -1500.0f; -// lbl_2_bss_2C.x = 0.0f; -// lbl_2_bss_2C.y = 1.0f; -// lbl_2_bss_2C.z = 0.0f; -// Hu3DCameraPosSetV(1, &lbl_2_bss_44, &lbl_2_bss_2C, &lbl_2_bss_38); -// Hu3DCameraPerspectiveSet(1, lbl_2_bss_12C, lbl_2_bss_128, lbl_2_bss_124, 1.2f); -// lbl_2_bss_54.unk_00 = lbl_2_bss_44; -// fn_2_D088(NULL); -// sp20 = lbl_2_bss_44; -// PSVECSubtract(&lbl_2_bss_38, &lbl_2_bss_44, &sp2C); -// PSVECNormalize(&sp2C, &sp2C); -// fn_80032D3C(&sp20, &sp2C, lbl_2_bss_88, lbl_2_bss_84, 0x12C, 0x12C, 0x12C); -// sp14.x = 300.0f; -// sp14.y = -450.0f; -// sp14.z = -3100.0f; -// lbl_2_bss_D8 = fn_2_10A88(&sp14, 3); -// lbl_2_bss_90[0] = HuAudFXEmiterPlay(0x50B, &sp14); -// sp14.x = -300.0f; -// sp14.y = -340.0f; -// sp14.z = -4720.0f; -// lbl_2_bss_D4 = fn_2_10A88(&sp14, 3); -// lbl_2_bss_90[1] = HuAudFXEmiterPlay(0x50B, &sp14); -// Hu3DModelAttrReset(arg0->model[2], 1); -// Hu3DModelAttrSet(arg0->model[2], -0x3FFFFFFF); - -// var_r30_2 = 4; -// for (i = 0; i < var_r30_2; i++) { -// sp8.x = -340.0f + (0.003921569f * (680.0f * frand())); -// sp8.y = -250.0f + (0.003921569f * (500.0f * frand())); -// sp8.z = ((-1550.0f - (f32) (i * 0x104)) - 40.0f) + (0.003921569f * (80.0f * frand())); -// fn_2_10A88(&sp8, 0); -// } -// } - -void fn_2_33B4(omObjData* arg0) { - fn_800210CC(arg0->model[3], 110.0f, 5.0 * fn_800EB910(M_PI * (f64) lbl_2_bss_10 / 180.0), -1500.0); - lbl_2_bss_10 += 2.0f; - if (lbl_2_bss_10 >= 360.0f) { - lbl_2_bss_10 -= 360.0f; - } -} - -void fn_2_14738(omObjData* arg0) { - omSetTra(arg0, lbl_2_bss_6C.x, lbl_2_bss_6C.y, lbl_2_bss_6C.z); - if (arg0->work[0] == 1U) { - Hu3DModelAttrSet(*arg0->model, 1); - omDelObjEx(HuPrcCurrentGet(), arg0); - } -} diff --git a/src/REL/m401Dll/m401Dll.h b/src/REL/m401Dll/m401Dll.h deleted file mode 100644 index 0bf29f61..00000000 --- a/src/REL/m401Dll/m401Dll.h +++ /dev/null @@ -1,198 +0,0 @@ -#include "unsplit.h" -#include "REL/executor.h" -#include -#include "game/objsub.h" -#include "game/object.h" - -// global data // -typedef struct unkStruct18FC10 { - s16 unk_00; - char unk_02[8]; -} unkStruct18FC10; -typedef struct unkSubstructBSS114 { - s16 unk_00[4]; - s16 unk_08[4][3]; - char unk_20[0x30]; - s16 unk_50[4][3]; - s16 unk_68[4][3]; - s16 unk_80[4]; - s16 unk_88[4]; - f32 unk_90[4]; - f32 unk_A0[4]; - char unk_B0[0x10]; - f32 unk_C0[4]; - f32 unk_D0[4]; - f32 unk_E0[4]; - f32 unk_F0[4]; - f32 unk_100[4]; - f32 unk_110[4]; - f32 unk_120[4]; - s16 unk_130[4]; - s16 unk_138[4]; - s16 unk_140[4]; -} unkSubstructBSS114; -typedef struct unkStructBSS114 { - char unk_00[4]; - s32 unk_04; - char unk_08[0xC]; - void *unk_14; - Vec unk_18; - char unk_24[0x1C]; - unkSubstructBSS114 *unk_40; - char unk_44[0x8]; - s32 unk_4C; - u32 unk_50; - char unk_54[0x8]; - unkSubstructBSS114 *unk_5C; -} unkStructBSS114; -typedef struct unkStruct18BFC0 { - char unk_00[0x14]; - Vec unk_14; -} unkStruct18BFC0; -typedef struct unkStruct18C8FC { - s16 unk_00; - char unk_02[0x42]; -} unkStruct18C8FC; - -extern unkStruct18FC10 lbl_8018FC10[]; -extern unkStruct18BFC0 lbl_8018BFC0; -extern unkStruct18C8FC lbl_8018C8FC[]; -extern s16 lbl_801D3CC2; - -extern void Hu3DModelAttrSet(s16, s32); -extern void Hu3DModelAttrReset(s16, s32); -extern omObjData* Hu3DModelObjPtrGet(s16, s32); -extern void Hu3DCameraPosSetV(s32, Vec*, Vec*, Vec*); -extern s16 Hu3DGLightCreateV(Vec*, Vec*, s32*); -extern void Hu3DGLightInfinitytSet(s16); -extern void Hu3DReflectNoSet(s16); -extern void Hu3DShadowCreate(f32, f32, f32); -extern void Hu3DShadowPosSet(Vec*, Vec*, Vec*); -extern void Hu3DShadowTPLvlSet(f32); -extern void Hu3DFogSet(f32, f32, u8, u8, u8); -extern void omOvlReturnEx(s16, s16); -extern omObjData* omAddObjEx(void*, s16, s16, s16, s16, void*); -extern void omDelObjEx(s32*, omObjData*); -extern void omMakeGroupEx(omObjData*, s16, s16); -extern omObjData* omGetGroupMemberListEx(omObjData*, s16); -extern void omSetTra(omObjData*, f32, f32, f32); -extern void omSetRot(omObjData*, f32, f32, f32); -extern void omSetSca(omObjData*, f32, f32, f32); -extern u8 frand(void); -extern s32 HuAudFXPlay(s32); -extern void HuAudFXStop(s32); -extern s32 HuAudFXEmiterPlay(s32, Vec*); -extern void HuAudFXListnerKill(void); -extern void HuAudSeqFadeOut(s32, s32); -extern s16 MGSeqCreate(s32, ...); -extern s16 espEntry(s32, s16, s16); -extern void espDispOn(s16); -extern void espDispOff(s16); -extern void espAttrSet(s16, s16); -extern void espPosSet(s16, f32, f32); -extern void espTPLvlSet(s16, f32); -extern void espColorSet(s16, s8, s8, s8); -extern void espBankSet(s16, s16); -extern void espDrawNoSet(s16, s16); -extern void WipeCreate(s16, s16, s16); -extern u8 WipeStatGet(void); -extern f32 PSVECNormalize(Vec*, Vec*); - -// local data // -typedef struct unkStructBSS54 { - Vec unk_00; -} unkStructBSS54; -typedef struct unkStructBSS100 { - void *unk_00; - void *unk_04; -} unkStructBSS100; - -extern f32 lbl_2_data_0 = -7.1875f; -extern s16 lbl_2_data_4[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; -extern Vec lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f }; -extern Vec lbl_2_data_20 = { 0.0f, -1.0f, 0.0f }; -extern s32 lbl_2_data_2C = -1; -extern Vec lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f }; -extern Vec lbl_2_data_3C = { 0.0f, 1.0f, -1.0f }; -extern Vec lbl_2_data_48 = { 0.0f, 0.0f, 0.0f }; -extern char lbl_2_data_6F[] = "winnercnt:%d"; -extern s32 lbl_2_data_80[8] = { 0x610000, 0x610001, 0x610002, 0x610003, 0x610004, 0x610005, 0x610006, 0x610007 }; -extern s32 lbl_2_data_124[5]; - -extern s32 lbl_2_bss_8; -extern f32 lbl_2_bss_10; -extern unkStruct18FC10* lbl_2_bss_1C; -extern Vec lbl_2_bss_2C; -extern Vec lbl_2_bss_38; -extern Vec lbl_2_bss_44; -extern f32 lbl_2_bss_50; -extern unkStructBSS54 lbl_2_bss_54; -extern Vec lbl_2_bss_60; -extern Vec lbl_2_bss_6C; -extern f32 lbl_2_bss_84; -extern f32 lbl_2_bss_88; -extern s32 lbl_2_bss_90[4]; -extern s32 lbl_2_bss_A4; -extern s16 lbl_2_bss_A8; -extern s16 lbl_2_bss_AA[]; -extern s16 lbl_2_bss_B2[]; -extern s16 lbl_2_bss_BA; -extern s16 lbl_2_bss_BE; -extern s16 lbl_2_bss_C0; -extern void* lbl_2_bss_C8; -extern s32 lbl_2_bss_CC; -extern s32 lbl_2_bss_D0; -extern s32 lbl_2_bss_D4; -extern s32 lbl_2_bss_D8; -extern unkStructBSS114* lbl_2_bss_E0; -extern s32 lbl_2_bss_F4; -extern omObjData* lbl_2_bss_F8; -extern omObjData* lbl_2_bss_FC; -extern unkStructBSS100 lbl_2_bss_100; -extern omObjData* lbl_2_bss_108; -extern omObjData* lbl_2_bss_10C; -extern omObjData* lbl_2_bss_110; -extern omObjData* lbl_2_bss_114; -extern unkStructBSS114** lbl_2_bss_118; -extern s32 lbl_2_bss_11C; -extern s16 lbl_2_bss_120; -extern f32 lbl_2_bss_124; -extern f32 lbl_2_bss_128; -extern f32 lbl_2_bss_12C; - -void M401ObjectSetup(void); -void fn_2_70C(unkStructBSS114*); -void fn_2_A10(void); -void M401SetFogAndBG(void); -void M401SetSpriteDisp(s16); -void fn_2_C1C(unkStructBSS114*); -void fn_2_11D0(unkStructBSS114*); -void fn_2_15C4(s16); -void fn_2_169C(s16); -void fn_2_1858(s16, s16); -void fn_2_1A38(unkStructBSS114*); -void fn_2_1B80(unkStructBSS114*); -void fn_2_1CF0(unkStructBSS114*); -void fn_2_1DE8(unkStructBSS114*); -void fn_2_20B0(unkStructBSS114*); -void fn_2_2FA4(void*); -void fn_2_3B24(void*); -void fn_2_48A0(void*); -void fn_2_7CB4(void*); -void fn_2_8E74(void*); -void fn_2_95E4(void*); -void fn_2_91AC(void*, Vec*); -void fn_2_9D00(void*); -void fn_2_BD90(void*); -void fn_2_C6DC(void*); -void fn_2_C130(void); -void fn_2_D088(void*); -void fn_2_DBCC(s16); -void fn_2_E6BC(s32, f32, f32, f32, f32, f32); -unkStructBSS114* fn_2_FC40(s32, Vec*, Vec*, Vec*); -void fn_2_10240(Vec*, Vec*); -void fn_2_1041C(void); -s32 fn_2_14640(void*); -void fn_2_10710(void); -s16 fn_2_1079C(void); -s32 fn_2_10A88(Vec*, s16); diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c new file mode 100644 index 00000000..909b04b1 --- /dev/null +++ b/src/REL/m401Dll/main.c @@ -0,0 +1,613 @@ +#include "game/object.h" +#include "game/memory.h" +#include "game/hsfman.h" +#include "game/objsub.h" +#include "game/minigame_seq.h" +#include "game/gamework_data.h" +#include "game/wipe.h" +#include "game/esprite.h" +#include "game/sprite.h" + +#include "REL/m401Dll.h" + +#include "rel_sqrt_consts.h" + +float lbl_2_data_0 = -7.1875f; + +s16 lbl_2_data_4[] = { + 0, 1, 2, 3, + 4, 5, 6, 7 +}; + +Vec lbl_2_data_14 = { + 1500, 2500, 1500 +}; + +Vec lbl_2_data_20 = { + 0, -1, 0 +}; + +GXColor lbl_2_data_2C = { + 255, 255, 255, 255 +}; + +Vec lbl_2_data_30 = { + 0, 2500, 0 +}; + +Vec lbl_2_data_3C = { + 0, 1, -1 +}; + +Vec lbl_2_data_48 = { + 0, 0, 0 +}; + +s32 lbl_2_bss_11C; +omObjData **lbl_2_bss_118; +omObjData *lbl_2_bss_114; +omObjData *lbl_2_bss_110; +omObjData *lbl_2_bss_10C; +omObjData *lbl_2_bss_108; +omObjData *lbl_2_bss_100[2]; +omObjData *lbl_2_bss_FC; +omObjData *lbl_2_bss_F8; +omObjData *lbl_2_bss_F4; +omObjData *lbl_2_bss_E4[4]; +omObjData *lbl_2_bss_E0; +omObjData *lbl_2_bss_DC; +omObjData *lbl_2_bss_D8; +omObjData *lbl_2_bss_D4; +omObjData *lbl_2_bss_D0; +omObjData *lbl_2_bss_CC; +omObjData *lbl_2_bss_C8; +omObjData *lbl_2_bss_C4; +s16 lbl_2_bss_C0; +s16 lbl_2_bss_BE; +s16 lbl_2_bss_BC; +s16 lbl_2_bss_BA; +s16 lbl_2_bss_B2[4]; +s16 lbl_2_bss_AA[4]; +s16 lbl_2_bss_A8; +s32 lbl_2_bss_A4; +s32 lbl_2_bss_90[5]; +s32 lbl_2_bss_8C; +float lbl_2_bss_88; +float lbl_2_bss_84; +Vec lbl_2_bss_78; +Vec lbl_2_bss_6C; +Vec lbl_2_bss_60; +Vec lbl_2_bss_54; +float lbl_2_bss_50; +Vec lbl_2_bss_44; +Vec lbl_2_bss_38; +Vec lbl_2_bss_2C; +Vec lbl_2_bss_20; +Process *lbl_2_bss_1C; +s16 lbl_2_bss_1A; +s16 lbl_2_bss_18; +s32 lbl_2_bss_14; +float lbl_2_bss_10; +s16 lbl_2_bss_E; +s16 lbl_2_bss_C; +omObjData *lbl_2_bss_8; +omObjData *lbl_2_bss_4; +omObjData *lbl_2_bss_0; + +void fn_2_70C(omObjData *object); +void fn_2_A10(omObjData *object); +void fn_2_C1C(omObjData *object); +void fn_2_11D0(omObjData *object); + +void fn_2_2FA4(omObjData *object); +void fn_2_3B24(omObjData *object); +void fn_2_48A0(omObjData *object); +void fn_2_7CB4(omObjData *object); +void fn_2_8E74(omObjData *object); +void fn_2_95E4(omObjData *object); +void fn_2_9D00(Process *objman); +void fn_2_BD90(omObjData *object); +void fn_2_C130(omObjData *object); +void fn_2_C6DC(omObjData *object); +void fn_2_D088(omObjData *object); + +void fn_2_DBCC(s32 arg0); + +void ModuleProlog(void) +{ + s32 i; + omObjData *object; + CameraData *camera; + LightData *light; + OSReport("**** M401ObjectSetup ****\n"); + HuMemHeapDump(HuMemHeapPtrGet(HEAP_SYSTEM), -1); + HuMemHeapDump(HuMemHeapPtrGet(HEAP_DATA), -1); + HuMemHeapDump(HuMemHeapPtrGet(HEAP_DVD), -1); + lbl_2_bss_1C = omInitObjMan(60, 8192); + omGameSysInit(lbl_2_bss_1C); + lbl_2_bss_A8 = Hu3DGLightCreateV(&lbl_2_data_14, &lbl_2_data_20, &lbl_2_data_2C); + Hu3DGLightInfinitytSet(lbl_2_bss_A8); + light = &Hu3DGlobalLight[lbl_2_bss_A8]; + light->unk_00 |= 0x8000; + Hu3DCameraCreate(1); + camera = &Hu3DCamera[0]; + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + lbl_2_bss_114 = omAddObjEx(lbl_2_bss_1C, 1000, 3, 0, -1, fn_2_BD90); + lbl_2_bss_114->work[0] = 0; + lbl_2_bss_110 = omAddObjEx(lbl_2_bss_1C, 10, 0, 0, -1, fn_2_70C); + omMakeGroupEx(lbl_2_bss_1C, 0, 4); + lbl_2_bss_118 = omGetGroupMemberListEx(lbl_2_bss_1C, 0); + omMakeGroupEx(lbl_2_bss_1C, 1, 28); + for(i=0; i<4; i++) { + object = omAddObjEx(lbl_2_bss_1C, 1200, 4, 10, 0, fn_2_3B24); + object->work[0] = i; + } + lbl_2_bss_12C = 60; + lbl_2_bss_128 = 50; + lbl_2_bss_124 = 25000; + Hu3DShadowCreate(30, 20, 5000); + Hu3DShadowTPLvlSet(0.35f); + lbl_2_data_30.y = lbl_2_bss_60.y + 1500.0f; + lbl_2_data_30.z = lbl_2_bss_60.z + 500.0f; + lbl_2_data_48.y = lbl_2_bss_60.y; + lbl_2_data_48.z = lbl_2_bss_60.z + 500.0f; + Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); + lbl_2_bss_10C = omAddObjEx(lbl_2_bss_1C, 500, 12, 3, -1, fn_2_2FA4); + lbl_2_bss_108 = omAddObjEx(lbl_2_bss_1C, 1100, 1, 1, -1, fn_2_7CB4); + lbl_2_bss_100[0] = omAddObjEx(lbl_2_bss_1C, 1110, 1, 1, -1, fn_2_8E74); + lbl_2_bss_100[1] = omAddObjEx(lbl_2_bss_1C, 1110, 1, 1, -1, fn_2_8E74); + lbl_2_bss_FC = omAddObjEx(lbl_2_bss_1C, 1120, 1, 2, -1, fn_2_95E4); + lbl_2_bss_C8 = omAddObjEx(lbl_2_bss_1C, 100, 0, 0, -1, fn_2_D088); + lbl_2_bss_E0 = omAddObjEx(lbl_2_bss_1C, 1500, 0, 0, -1, fn_2_C1C); + fn_2_DBCC(90); + lbl_2_bss_F8 = omAddObjEx(lbl_2_bss_1C, 500, 9, 0, -1, fn_2_C6DC); + fn_2_9D00(lbl_2_bss_1C); + fn_2_1041C(); + fn_2_1079C(); + lbl_2_bss_F4 = fn_2_14640(lbl_2_bss_1C); + lbl_2_bss_50 = 0; + lbl_2_bss_54 = camera->pos; + Hu3DReflectNoSet(0); + lbl_2_bss_120 = 0; + lbl_2_bss_BE = 0; + lbl_2_bss_BA = 0; + Hu3DFogSet(3000, 10000, 10, 60, 160); + Hu3DBGColorSet(10, 60, 160); + lbl_2_bss_88 = 3000; + lbl_2_bss_84 = 142000; + lbl_2_bss_11C = HuAudFXPlay(1290); +} + +typedef struct work_70C { + s16 unk0; + u8 unk2[0x66]; + s16 unk68; + u8 unk6A[8]; + s16 unk72; + s16 unk74; +} Work70C; + +void fn_2_70C(omObjData *object) +{ + s32 temp_r31; + Work70C *temp_r30; + s16 temp_r29; + switch(lbl_2_bss_120) { + case 0: + break; + + case 1: + if(lbl_2_bss_BE == 1) { + lbl_2_bss_120 = 2; + lbl_2_bss_C0 = MGSeqFinishCreate(); + HuAudSeqFadeOut(lbl_2_bss_A4, 100); + } + break; + + case 2: + if(lbl_2_bss_114 == NULL) { + lbl_2_bss_114 = omAddObjEx(HuPrcCurrentGet(), 1000, 0, 0, -1, fn_2_C130); + lbl_2_bss_114->work[0] = 0; + temp_r29 = 0; + lbl_2_bss_BA = 0; + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = lbl_2_bss_118[temp_r31]->data; + lbl_2_bss_118[temp_r31]->func = fn_2_48A0; + temp_r30->unk0 = 5; + temp_r30->unk68 = 0; + if(temp_r30->unk72 > temp_r29) { + temp_r29 = temp_r30->unk72; + } + lbl_2_bss_B2[temp_r31] = -1; + lbl_2_bss_AA[temp_r31] = -1; + } + if(temp_r29 > 0) { + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = lbl_2_bss_118[temp_r31]->data; + if(temp_r30->unk72 == temp_r29) { + lbl_2_bss_AA[lbl_2_bss_BA] = GWPlayerCfg[temp_r31].character; + lbl_2_bss_B2[lbl_2_bss_BA++] = temp_r31; + temp_r30->unk68 = 1; + } + } + } + OSReport("winnercnt:%d\n", lbl_2_bss_BA); + } + break; + } + if(omSysExitReq) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqFadeOut(lbl_2_bss_A4, 100); + HuAudFXStop(lbl_2_bss_11C); + object->func = fn_2_A10; + } +} + +void fn_2_A10(omObjData *object) +{ + s32 i; + if(!WipeStatGet()) { + fn_2_10710(); + for(i=0; i<4; i++) { + CharModelKill(lbl_2_data_4[GWPlayerCfg[i].character]); + } + HuAudFXListnerKill(); + omOvlReturnEx(1, 1); + } +} + +void fn_2_A98(void) +{ + Hu3DFogSet(3000, 10000, 10, 60, 160); + Hu3DBGColorSet(10, 60, 160); +} + +typedef struct work_AEC { + s16 unk0[4]; + s16 unk8[4][3]; + u8 unk20[0x30]; + s16 unk50[4][3]; + s16 unk68[4][3]; + s16 unk80[4]; + s16 unk88[4]; + float unk90[4]; + float unkA0[4]; + float unkB0[4]; + float unkC0[4]; + float unkD0[4]; + float unkE0[4]; + float unkF0[4]; + float unk100[4]; + float unk110[4]; + float unk120[4]; + s16 unk130[4]; + s16 unk138[4]; + s16 unk140[4]; +} WorkAEC; + +void fn_2_AEC(s16 arg0) +{ + WorkAEC *temp_r31; + s32 i; + s32 j; + temp_r31 = lbl_2_bss_E0->data; + if(arg0) { + for(i=0; i<4; i++) { + espDispOn(temp_r31->unk0[i]); + espDispOn(temp_r31->unk80[i]); + espDispOn(temp_r31->unk88[i]); + for(j=0; j<2; j++) { + espDispOn(temp_r31->unk8[i][j]); + } + } + } else { + for(i=0; i<4; i++) { + espDispOff(temp_r31->unk0[i]); + espDispOff(temp_r31->unk80[i]); + espDispOff(temp_r31->unk88[i]); + for(j=0; j<2; j++) { + espDispOff(temp_r31->unk8[i][j]); + } + } + } +} + +s32 lbl_2_data_80[] = { + 0x610000, + 0x610001, + 0x610002, + 0x610003, + 0x610004, + 0x610005, + 0x610006, + 0x610007 +}; + +#define PLAYER_POS_X(index, left, width) ((((index)&1)*width)+left) +#define PLAYER_POS_Y(index, top, height) ((((index)>1)*height)+top) + +void fn_2_C1C(omObjData *object) +{ + WorkAEC *temp_r31; + s32 i; + s32 j; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkAEC), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + for(i=0; i<4; i++) { + temp_r31->unk0[i] = espEntry(lbl_2_data_80[GWPlayerCfg[i].character], 2, 0); + espDispOff(temp_r31->unk0[i]); + espDrawNoSet(temp_r31->unk0[i], 0); + espPosSet(temp_r31->unk0[i], PLAYER_POS_X(i, 37, 438), PLAYER_POS_Y(i, 59, 358)); + temp_r31->unk80[i] = espEntry(0x20002F, 3, 0); + espDispOff(temp_r31->unk80[i]); + espDrawNoSet(temp_r31->unk80[i], 0); + espPosSet(temp_r31->unk80[i], PLAYER_POS_X(i, 73, 438), PLAYER_POS_Y(i, 61, 358)); + temp_r31->unk88[i] = espEntry(0x200030, 4, 0); + espDispOff(temp_r31->unk88[i]); + espDrawNoSet(temp_r31->unk88[i], 0); + espPosSet(temp_r31->unk88[i], PLAYER_POS_X(i, 73, 438), PLAYER_POS_Y(i, 61, 358)); + espColorSet(temp_r31->unk88[i], 0, 0, 0); + espTPLvlSet(temp_r31->unk88[i], 0.5f); + for(j=0; j<2; j++) { + temp_r31->unk8[i][j] = espEntry(0x20002E, 1, 0); + espDispOff(temp_r31->unk8[i][j]); + espDrawNoSet(temp_r31->unk8[i][j], 0); + espPosSet(temp_r31->unk8[i][j], PLAYER_POS_X(i, 69+(j*20), 438), PLAYER_POS_Y(i, 63, 358)); + espAttrSet(temp_r31->unk8[i][j], HUSPR_ATTR_NOANIM); + } + for(j=0; j<3; j++) { + temp_r31->unk50[i][j] = espEntry(0x20002D, 0, 0); + espDispOff(temp_r31->unk50[i][j]); + espDrawNoSet(temp_r31->unk50[i][j], 0); + espAttrSet(temp_r31->unk50[i][j], HUSPR_ATTR_NOANIM); + temp_r31->unk68[i][j] = espEntry(0x20002D, 0, 0); + espDispOff(temp_r31->unk68[i][j]); + espDrawNoSet(temp_r31->unk68[i][j], 0); + espAttrSet(temp_r31->unk68[i][j], HUSPR_ATTR_NOANIM); + } + espBankSet(temp_r31->unk50[i][0], 10); + espBankSet(temp_r31->unk68[i][0], 11); + temp_r31->unk90[i] = 1.0f; + temp_r31->unkA0[i] = 1.0f; + temp_r31->unk130[i] = 0; + temp_r31->unk138[i] = 0; + } + object->func = fn_2_11D0; +} + +void fn_2_15C4(s16 arg0); + +void fn_2_11D0(omObjData *object) +{ + WorkAEC *temp_r31; + s32 i; + s32 j; + omObjData *temp_r28; + Vec sp18; + Vec spC; + Work70C *sp8; + temp_r31 = object->data; + for(i=0; i<4; i++) { + sp8 = lbl_2_bss_118[i]->data; + if(temp_r31->unk130[i]) { + temp_r28 = lbl_2_bss_118[i]; + sp18.x = temp_r28->trans.x; + sp18.y = temp_r28->trans.y; + sp18.z = temp_r28->trans.z; + fn_2_10240(&sp18, &spC); + for(j=0; j<3; j++) { + espPosSet(temp_r31->unk50[i][j], (-20.0f+spC.x+temp_r31->unkF0[i])+(j*16), 20.0f+spC.y+temp_r31->unk100[i]); + espTPLvlSet(temp_r31->unk50[i][j], temp_r31->unk90[i]); + } + temp_r31->unkC0[i] -= 0.5f; + temp_r31->unk100[i] -= 1.0f; + if(temp_r31->unk130[i] < 15) { + temp_r31->unk90[i] -= 1.0f/15.0f; + } + if(--temp_r31->unk130[i] == 0) { + espDispOff(temp_r31->unk50[i][0]); + espDispOff(temp_r31->unk50[i][1]); + } + } + if(temp_r31->unk138[i]) { + temp_r28 = lbl_2_bss_118[i]; + sp18.x = temp_r28->trans.x; + sp18.y = temp_r28->trans.y; + sp18.z = temp_r28->trans.z; + fn_2_10240(&sp18, &spC); + for(j=0; j<2; j++) { + espPosSet(temp_r31->unk68[i][j], (-20.0f+spC.x+temp_r31->unk110[i])+(j*16), -20.0f+spC.y+temp_r31->unk120[i]); + espTPLvlSet(temp_r31->unk68[i][j], temp_r31->unkA0[i]); + } + temp_r31->unkE0[i] += 0.5f; + temp_r31->unk120[i] += 1.0f; + if(temp_r31->unk138[i] < 15) { + temp_r31->unkA0[i] -= 1.0f/15.0f; + } + if(--temp_r31->unk138[i] == 0) { + espDispOff(temp_r31->unk68[i][0]); + espDispOff(temp_r31->unk68[i][1]); + } + } + fn_2_15C4(i); + } +} + +void fn_2_15C4(s16 arg0) +{ + WorkAEC *temp_r31; + s32 temp_r30; + Work70C *temp_r29; + temp_r31 = lbl_2_bss_E0->data; + temp_r29 = lbl_2_bss_118[arg0]->data; + temp_r30 = temp_r29->unk72; + espBankSet(temp_r31->unk8[arg0][0], temp_r30/10); + espBankSet(temp_r31->unk8[arg0][1], temp_r30%10); +} + +void fn_2_169C(s16 arg0) +{ + WorkAEC *temp_r31; + s32 i; + Work70C *temp_r28; + temp_r31 = lbl_2_bss_E0->data; + temp_r28 = lbl_2_bss_118[arg0]->data; + for(i=0; i<2; i++ ){ + espDispOn(temp_r31->unk50[arg0][i]); + } + temp_r31->unk90[arg0] = 1; + temp_r31->unkC0[arg0] = PLAYER_POS_Y(arg0, 52, 398); + temp_r31->unkB0[arg0] = PLAYER_POS_X(arg0, 41, 442); + temp_r31->unk100[arg0] = 0; + temp_r31->unkF0[arg0] = 0; + espBankSet(temp_r31->unk50[arg0][1], temp_r28->unk74); + temp_r31->unk130[arg0] = 45; +} + +void fn_2_1858(s16 arg0, s16 arg1) +{ + WorkAEC *temp_r31; + Work70C *temp_r29; + s32 i; + temp_r31 = lbl_2_bss_E0->data; + temp_r29 = lbl_2_bss_118[arg0]->data; + for(i=0; i<2; i++ ){ + espDispOn(temp_r31->unk68[arg0][i]); + } + temp_r31->unkA0[arg0] = 1; + temp_r31->unkE0[arg0] = PLAYER_POS_Y(arg0, 20, 398); + temp_r31->unkD0[arg0] = PLAYER_POS_X(arg0, 41, 442); + temp_r31->unk120[arg0] = 0; + temp_r31->unk110[arg0] = 0; + espBankSet(temp_r31->unk68[arg0][1], arg1); + temp_r31->unk138[arg0] = 45; + temp_r31->unk140[arg0] = arg1; + temp_r29->unk72 -= arg1; + if(temp_r29->unk72 < 0) { + temp_r29->unk72 = 0; + } +} + +float lbl_2_data_A0[] = { + -500, + -8500, + -17500, + -26500, + -99000 +}; + +float lbl_2_data_B4[] = { + -9100, + -18100, + -27100, + -36100, + -45100, + -100000 +}; + +void fn_2_1A38(omObjData *object); +void fn_2_1B80(omObjData *object); +void fn_2_1CF0(omObjData *object); +void fn_2_1DE8(omObjData *object); +void fn_2_1DE8(omObjData *object); +void fn_2_20B0(omObjData *object); +void fn_2_2CBC(omObjData *object); +void fn_2_2D64(omObjData *object); +void fn_2_2DCC(omObjData *object); +void fn_2_2E20(omObjData *object); +void fn_2_2ED0(omObjData *object); + +omObjFunc lbl_2_data_CC[] = { + fn_2_1A38, + fn_2_2CBC, + fn_2_1B80, + fn_2_2D64, + fn_2_1CF0, + fn_2_2DCC, + fn_2_1DE8, + fn_2_2E20, + fn_2_20B0, + fn_2_2ED0 +}; + +char *lbl_2_data_124[] = { + "kaitei01", + "kaitei02", + "kaitei03", + "kaitei04", + "kaitei05" +}; + +s32 lbl_2_data_138[] = { + 0x5C0002, + 0x5C0002, + 0x5C0002, + 0x5C0002, + 0x5C0002, + 0x5C0002, + 0x5C0002, + 0x5C0002, +}; + +omObjData *fn_2_FC40(s16 arg0, Vec *arg1, Vec *arg2, Vec *arg3); +void fn_2_E6BC(omObjData *object, float arg2, float arg3, float arg4, float arg5, float arg6); + +void fn_2_1A38(omObjData *object) +{ + Vec sp20; + Vec sp14; + Vec sp8; + HsfObject *temp_r31 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[0]); + omObjData *temp_r30; + temp_r31->type = 2; + sp20.x = -2500; + sp20.y = 150; + sp20.z = -6800; + sp14.x = 50; + sp14.y = 50; + sp14.z = 50; + sp8.x = 1500; + sp8.y = 150; + sp8.z = -4800; + temp_r30 = fn_2_FC40(18, &sp20, &sp14, &sp8); + fn_2_E6BC((omObjData *)temp_r30->work[0], 5, 1.5, 0.2, 0.8, 3); +} + +void fn_2_1B80(omObjData *object) +{ + Vec sp14; + Vec sp8; + omObjData *temp_r31; + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[1]); + + temp_r30->type = 2; + sp14.x = -1000; + sp14.y = 0; + sp14.z = -9100; + sp8.x = 150; + sp8.y = 100; + sp8.z = 100; + temp_r31 = fn_2_FC40(14, &sp14, &sp8, &sp14); + omSetRot(temp_r31, 3, 0, 0); + omSetSca(temp_r31, 0, 0, 50); + fn_2_E6BC((omObjData *)temp_r31->work[0], 4.5, 2.5, 0.08, 0.9, 1); +} + +void fn_2_1CF0(omObjData *object) +{ + Vec sp20; + Vec sp14; + Vec sp8; + HsfObject *temp_r31 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[2]); + temp_r31->type = 2; + sp20.x = 500; + sp20.y = 0; + sp20.z = -24300; + sp14.x = 200; + sp14.y = 100; + sp14.z = 100; + sp8.x = 1000; + sp8.y = 0; + sp8.z = -16300; + fn_2_FC40(40, &sp20, &sp14, &sp8); +} \ No newline at end of file From cc98e58a98282dcc149007ae120ac54a13a5172d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 23 Apr 2024 23:38:05 -0500 Subject: [PATCH 6/6] Replace names with slightly better ones --- src/REL/m401Dll/main.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index 909b04b1..308cd7a8 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -178,19 +178,19 @@ void ModuleProlog(void) lbl_2_bss_11C = HuAudFXPlay(1290); } -typedef struct work_70C { +typedef struct m401_work_player { s16 unk0; u8 unk2[0x66]; s16 unk68; u8 unk6A[8]; s16 unk72; s16 unk74; -} Work70C; +} M401WorkPlayer; void fn_2_70C(omObjData *object) { s32 temp_r31; - Work70C *temp_r30; + M401WorkPlayer *temp_r30; s16 temp_r29; switch(lbl_2_bss_120) { case 0: @@ -262,7 +262,7 @@ void fn_2_A98(void) Hu3DBGColorSet(10, 60, 160); } -typedef struct work_AEC { +typedef struct m401_work_2d { s16 unk0[4]; s16 unk8[4][3]; u8 unk20[0x30]; @@ -283,11 +283,11 @@ typedef struct work_AEC { s16 unk130[4]; s16 unk138[4]; s16 unk140[4]; -} WorkAEC; +} M401Work2D; void fn_2_AEC(s16 arg0) { - WorkAEC *temp_r31; + M401Work2D *temp_r31; s32 i; s32 j; temp_r31 = lbl_2_bss_E0->data; @@ -328,10 +328,10 @@ s32 lbl_2_data_80[] = { void fn_2_C1C(omObjData *object) { - WorkAEC *temp_r31; + M401Work2D *temp_r31; s32 i; s32 j; - object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkAEC), MEMORY_DEFAULT_NUM); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M401Work2D), MEMORY_DEFAULT_NUM); temp_r31 = object->data; for(i=0; i<4; i++) { temp_r31->unk0[i] = espEntry(lbl_2_data_80[GWPlayerCfg[i].character], 2, 0); @@ -379,13 +379,13 @@ void fn_2_15C4(s16 arg0); void fn_2_11D0(omObjData *object) { - WorkAEC *temp_r31; + M401Work2D *temp_r31; s32 i; s32 j; omObjData *temp_r28; Vec sp18; Vec spC; - Work70C *sp8; + M401WorkPlayer *sp8; temp_r31 = object->data; for(i=0; i<4; i++) { sp8 = lbl_2_bss_118[i]->data; @@ -435,9 +435,9 @@ void fn_2_11D0(omObjData *object) void fn_2_15C4(s16 arg0) { - WorkAEC *temp_r31; + M401Work2D *temp_r31; s32 temp_r30; - Work70C *temp_r29; + M401WorkPlayer *temp_r29; temp_r31 = lbl_2_bss_E0->data; temp_r29 = lbl_2_bss_118[arg0]->data; temp_r30 = temp_r29->unk72; @@ -447,9 +447,9 @@ void fn_2_15C4(s16 arg0) void fn_2_169C(s16 arg0) { - WorkAEC *temp_r31; + M401Work2D *temp_r31; s32 i; - Work70C *temp_r28; + M401WorkPlayer *temp_r28; temp_r31 = lbl_2_bss_E0->data; temp_r28 = lbl_2_bss_118[arg0]->data; for(i=0; i<2; i++ ){ @@ -466,8 +466,8 @@ void fn_2_169C(s16 arg0) void fn_2_1858(s16 arg0, s16 arg1) { - WorkAEC *temp_r31; - Work70C *temp_r29; + M401Work2D *temp_r31; + M401WorkPlayer *temp_r29; s32 i; temp_r31 = lbl_2_bss_E0->data; temp_r29 = lbl_2_bss_118[arg0]->data;