diff --git a/config/GMPE01_00/rels/m446dll/symbols.txt b/config/GMPE01_00/rels/m446dll/symbols.txt index 88e526ff..498cf2fe 100644 --- a/config/GMPE01_00/rels/m446dll/symbols.txt +++ b/config/GMPE01_00/rels/m446dll/symbols.txt @@ -2,7 +2,7 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0x9C fn_1_13C = .text:0x0000013C; // type:function size:0x168 -fn_1_2A4 = .text:0x000002A4; // type:function size:0x158 +m446FlowCreate = .text:0x000002A4; // type:function size:0x158 fn_1_3FC = .text:0x000003FC; // type:function size:0xB8 fn_1_4B4 = .text:0x000004B4; // type:function size:0x88 fn_1_53C = .text:0x0000053C; // type:function size:0x41C diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c new file mode 100644 index 00000000..7e844232 --- /dev/null +++ b/src/REL/m446Dll/main.c @@ -0,0 +1,793 @@ +#include "dolphin/types.h" + +#include "game/hsfman.h" +#include "game/audio.h" +#include "game/jmp.h" +#include "game/process.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/frand.h" +#include "game/object.h" +#include "game/minigame_seq.h" + +typedef struct _unkSubStruct { + s32 unk0; + char unk4[0x20]; + s32 unk24; + char unk28[0x3C]; + u8 unk64; + u8 unk65; + u8 unk66; + s32 unk68; + char unk6C[0x4]; +} unkSubStruct; + +typedef struct _unkSubStruct2 { + char unk0; +} unkSubStruct2; + +typedef struct _unkSubStruct3 { + s32 unk0; + s32 unk4; + char unk8[0x68]; + s32 unk70; + s32 unk74; + s32 unk78; +} unkSubStruct3; + +typedef struct _unkStruct { + s32 unk0; + s16 unk4; + s16 unk6; + char unk8[0x4]; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1C; + unkSubStruct2 *unk20; + s32 unk24; + s32 unk28; + unkSubStruct *unk2C[2]; + unkSubStruct3 *unk34; + s32 unk38[23]; + s32 unk94; + Process *unk98; +} unkStruct; + +typedef void (*m446Func)(unkStruct *); + +// card.c +extern s32 fn_1_2064(void); +extern void fn_1_207C(void); +extern void fn_1_20D4(void); +// deck.c +extern void fn_1_3180(s32); +extern s32 fn_1_38E0(void); +extern s32 fn_1_3064(void); +// table.c +extern s32 fn_1_3924(void); +extern void fn_1_393C(void); +extern void fn_1_3994(void); +extern unkSubStruct2 *fn_1_39D0(void); +void fn_1_3B4C(unkSubStruct2*); +// player.c +extern s32 fn_1_480C(void); +extern void fn_1_4824(void); +extern void fn_1_487C(void); +extern unkSubStruct *fn_1_4B00(s32, unkSubStruct2*); +extern void fn_1_509C(unkSubStruct*); +extern void fn_1_5B34(unkSubStruct*); +extern void fn_1_5C10(unkSubStruct*); +extern void fn_1_5CEC(unkSubStruct*); +extern void fn_1_637C(unkSubStruct*, s32); +// camera.c +extern void fn_1_6778(void); +extern void fn_1_68D8(void); +extern void fn_1_68DC(void); +extern void fn_1_6EA0(Vec*); +extern void fn_1_6EC4(Vec*); +extern void fn_1_6EE8(f32); +extern void fn_1_6EF8(Vec*, Vec*, f32*, s32); +// cursor.c +extern s32 fn_1_72E0(void); +extern void fn_1_72F8(void); +extern void fn_1_7350(void); +// stage.c +extern s32 fn_1_7BF0(void); +extern void fn_1_7C08(void); +extern void fn_1_7C60(void); +extern s32 fn_1_80C0(void); +extern void fn_1_83F0(s32); +extern void fn_1_84AC(s32); + +// prototypes +void ModuleProlog(void); +void fn_1_13C(omObjData*); +unkStruct* m446FlowCreate(void); +void fn_1_3FC(unkStruct*); +void fn_1_4B4(unkStruct*); +void fn_1_53C(unkStruct*); +void fn_1_958(unkStruct*); +void fn_1_B78(unkStruct*); +//... +void fn_1_C0C(unkStruct*); +void fn_1_CA0(unkStruct*); +s32 fn_1_17FC(unkStruct*); +void fn_1_183C(unkStruct*); +void fn_1_1874(unkStruct*); +void fn_1_18B0(unkStruct*); +void fn_1_19D4(void); + +// bss +s32 lbl_1_bss_14; +s32 lbl_1_bss_10; +Process* lbl_1_bss_C; +omObjData *lbl_1_bss_8; +s32 lbl_1_bss_4; +unkStruct* lbl_1_bss_0; + +// data +Vec lbl_1_data_0 = { 0.0f, 90.0f, 0.0f }; +Vec lbl_1_data_C = { -40.0f, 40.0f, 0.0f }; +f32 lbl_1_data_18 = 1260.0f; +Vec lbl_1_data_1C = { 0.0f, 90.0f, 0.0f }; +Vec lbl_1_data_28 = { -90.0f, 0.0f, 0.0f }; +f32 lbl_1_data_34 = 260.0f; +Vec lbl_1_data_38[2] = { + { 0.0f, 100.0f, 120.0f }, + { 0.0f, 100.0f, 120.0f } +}; +Vec lbl_1_data_50[2] = { + { -30.0f, 0.0f, 0.0f }, + { -30.0f, 0.0f, 0.0f } +}; +f32 lbl_1_data_68[2] = { 600.0f, 600.0f }; +s32 lbl_1_data_70[2][2] = { { 0x46, 0x1A4 }, { 0x1F4, 0x3C } }; + +void ModuleProlog(void) { + lbl_1_bss_C = omInitObjMan(5, 0x2000); + omGameSysInit(lbl_1_bss_C); + lbl_1_bss_8 = omAddObjEx(lbl_1_bss_C, 0x3E8, 0x32U, 0x32U, 0, fn_1_13C); + omSetStatBit(lbl_1_bss_8, 0x100U); + lbl_1_bss_4 = 0; +} + +void fn_1_13C(omObjData* arg0) { + switch (lbl_1_bss_4) { + case 0: + HuWinInit(1); + Hu3DLighInit(); + frand(); + fn_1_38E0(); + fn_1_6778(); + fn_1_7BF0(); + fn_1_2064(); + fn_1_480C(); + fn_1_3924(); + fn_1_72E0(); + lbl_1_bss_0 = m446FlowCreate(); + lbl_1_bss_4 = 1; + break; + case 1: + fn_1_4B4(lbl_1_bss_0); + fn_1_7C60(); + fn_1_487C(); + fn_1_3994(); + fn_1_7350(); + fn_1_20D4(); + fn_1_68DC(); + if (lbl_1_bss_0->unk0 != 5) break; + lbl_1_bss_4 = 3; + WipeCreate(2, 0, 0x3C); + case 2: + break; + case 3: + if (WipeStatGet() == 0) { + lbl_1_bss_4 = 4; + } + break; + case 4: + HuAudFadeOut(0x64); + fn_1_3FC(lbl_1_bss_0); + fn_1_72F8(); + fn_1_4824(); + fn_1_393C(); + fn_1_207C(); + fn_1_7C08(); + fn_1_68D8(); + omOvlReturnEx(1, 1); + break; + } +} + +unkStruct* m446FlowCreate(void) { + s32 var_r30; + unkStruct* temp_r3; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x9C, 0x10000000); + if (temp_r3 == 0) { + OSReport("[!] m446FlowCreate() ERROR"); + return NULL; + } + temp_r3->unk4 = -1; + temp_r3->unk6 = -1; + temp_r3->unk1C = 0; + temp_r3->unk0 = 0; + temp_r3->unk10 = 0; + temp_r3->unk98 = NULL; + temp_r3->unk18 = -1; + + for (var_r30 = 0; var_r30 < 23; var_r30++) { + temp_r3->unk38[var_r30] = 0; + } + temp_r3->unk24 = fn_1_80C0(); + temp_r3->unk20 = fn_1_39D0(); + lbl_1_bss_10 = 0; + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + temp_r3->unk2C[var_r30] = fn_1_4B00(var_r30, temp_r3->unk20); + if (temp_r3->unk2C[var_r30]->unk68 != 0) { + lbl_1_bss_10 += 1; + } + } + temp_r3->unk28 = fn_1_3064(); + WipeCreate(1, 0, 0x3C); + return temp_r3; +} + +void fn_1_3FC(unkStruct* arg0) { + s32 var_r30; + + if (arg0->unk98) { + HuPrcKill(arg0->unk98); + } + if (arg0->unk4 == -1) { + fn_1_183C(arg0); + } + if (arg0->unk6 == -1) { + MGSeqParamSet(arg0->unk6, 2, -1); + } + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + fn_1_509C(arg0->unk2C[var_r30]); + } + fn_1_3B4C(arg0->unk20); + fn_1_3180(arg0->unk28); + fn_1_83F0(arg0->unk24); + HuMemDirectFree(arg0); +} + +m446Func lbl_1_data_A0[5] = {fn_1_53C, fn_1_B78, fn_1_CA0, fn_1_C0C, fn_1_958}; + +void fn_1_4B4(unkStruct* arg0) { + if (lbl_1_data_A0[arg0->unk0]) { + lbl_1_data_A0[arg0->unk0](arg0); + } + if (omSysExitReq != 0) { + arg0->unk0 = 5; + } +} + +void fn_1_53C(unkStruct* arg0) { + s32 var_r30; + s32 var_r29; + + switch (arg0->unk10) { + case 0: + fn_1_6EA0(&lbl_1_data_0); + fn_1_6EC4(&lbl_1_data_C); + fn_1_6EE8(lbl_1_data_18); + arg0->unk10 = 1; + arg0->unk14 = 0; + HuAudFXPlay(0x773); + break; + case 1: + if (arg0->unk14 == 20) { + fn_1_84AC(arg0->unk24); + } + if (arg0->unk14++ < 0xB4) break; + arg0->unk18 = HuAudSeqPlay(0x3D); + if (arg0->unk2C[1]->unk64 == 8) { + arg0->unk10 = 2; + } else { + arg0->unk10 = 4; + } + break; + case 2: + arg0->unk98 = HuPrcChildCreate(fn_1_19D4, 0x64, 0x2000, 0, lbl_1_bss_C); + lbl_1_bss_14 = 1; + arg0->unk10 = 3; + break; + case 3: + if (lbl_1_bss_14 == 0) { + arg0->unk98 = NULL; + arg0->unk10 = 4; + } + break; + case 4: + fn_1_6EF8(&lbl_1_data_1C, &lbl_1_data_28, &lbl_1_data_34, 0xB4); + arg0->unk10 = 5; + break; + case 5: + if (fn_1_708C()) break; + fn_1_860C(arg0->unk24); + for (var_r30 = 0; var_r30 < 2; var_r30++) { + fn_1_637C(arg0->unk2C[var_r30], 1); + } + arg0->unk10 = 6; + break; + case 6: + fn_1_31D8(arg0->unk28, arg0->unk38, &arg0->unk94, 1); + arg0->unk10 = 7; + arg0->unk14 = 0; + break; + case 7: + if (arg0->unk14++ < 0x78) break; + fn_1_34A0(arg0->unk28, arg0->unk38, arg0->unk94, 1); + arg0->unk10 = 8; + arg0->unk14 = 0; + break; + case 8: + if (arg0->unk14++ < 0x78) break; + + for (var_r29 = 0; var_r29 < 2; var_r29++) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + fn_1_3854(arg0->unk28, &arg0->unk34); + fn_1_51B8(arg0->unk2C[var_r29], arg0->unk34, 1); + fn_1_2EC0(arg0->unk34, 0); + } + } + HuAudFXPlay(0x767); + arg0->unk10 = 9; + break; + case 9: + if (arg0->unk34->unk70 != 0) break; + if (arg0->unk34->unk78 != 0) break; + if (arg0->unk34->unk74 != 0) break; + if (arg0->unk34->unk4 != 0) break; + + for (var_r29 = 0; var_r29 < 2; var_r29++) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + fn_1_5648(arg0->unk2C[var_r29], var_r30, &arg0->unk34); + fn_1_272C(arg0->unk34); + } + } + arg0->unk10 = 10; + break; + case 10: + if (arg0->unk34->unk70 != 0) break; + if (arg0->unk34->unk78 != 0) break; + if (arg0->unk34->unk74 != 0) break; + if (arg0->unk34->unk4 != 0) break; + fn_1_46AC(arg0->unk20); + + while (fn_1_3854(arg0->unk28, &arg0->unk34) != 0) { + fn_1_3BF0(arg0->unk20, arg0->unk34, 1); + } + fn_1_46D0(arg0->unk20); + if (arg0->unk18 != -1) { + HuAudSeqFadeOut(arg0->unk18, 0x7D0); + } + arg0->unk10 = 11; + arg0->unk14 = 0; + break; + case 11: + if (arg0->unk14++ < 0x78) break; + arg0->unk0 = 1; + arg0->unk10 = 0; + break; + } +} + +void fn_1_958(unkStruct* arg0) { + s32 temp_r3; + s32 temp_r3_2; + s32 temp_r3_3; + s32 var_r30; + + switch (arg0->unk10) { + case 0: + for (var_r30 = 0; var_r30 < 2; var_r30++) { + fn_1_637C(arg0->unk2C[var_r30], 0); + } + fn_1_6EF8(&lbl_1_data_38[arg0->unk1C], &lbl_1_data_50[arg0->unk1C], &lbl_1_data_68[arg0->unk1C], 0x4E); + arg0->unk10 = 1; + arg0->unk14 = 0; + break; + case 1: + if (arg0->unk14++ >= 0x1E) { + fn_1_5CEC(arg0->unk2C[0]); + arg0->unk10 = 2; + arg0->unk14 = 0; + } + break; + case 2: + if (arg0->unk14++ >= 0x36) { + if ((arg0->unk2C[0]->unk24 == 0) && (arg0->unk2C[1]->unk24 == 0)) { + fn_1_5C10(arg0->unk2C[0]); + if (arg0->unk2C[1]->unk64 == 8) { + fn_1_5B34(arg0->unk2C[1]); + HuAudSStreamPlay(3); + } else { + fn_1_5C10(arg0->unk2C[1]); + HuAudSStreamPlay(4); + } + } else if (arg0->unk2C[0]->unk24 != 0) { + fn_1_5B34(arg0->unk2C[0]); + fn_1_5C10(arg0->unk2C[1]); + HuAudSStreamPlay(1); + } else if (arg0->unk2C[1]->unk24 != 0) { + fn_1_5B34(arg0->unk2C[1]); + fn_1_5C10(arg0->unk2C[0]); + if (arg0->unk2C[1]->unk64 == 8) { + HuAudSStreamPlay(3); + } else { + HuAudSStreamPlay(1); + } + } + arg0->unk10 = 3; + arg0->unk14 = 0; + return; + } + break; + case 3: + if (arg0->unk14++ >= 0xD2) { + arg0->unk0 = 5; + } + break; + } +} + +void fn_1_B78(unkStruct* arg0) { + switch (arg0->unk10) { + case 0: + arg0->unk18 = HuAudSeqPlay(0x3F); + fn_1_1874(arg0); + arg0->unk10 = 1; + arg0->unk14 = 0; + break; + case 1: + if (!fn_1_17FC(arg0)) { + fn_1_183C(arg0); + arg0->unk0 = 2; + arg0->unk10 = 0; + } + break; + } +} + +void fn_1_C0C(unkStruct* arg0) { + switch (arg0->unk10) { + case 0: + HuAudSeqFadeOut(arg0->unk18, 0x64); + fn_1_18B0(arg0); + arg0->unk10 = 1; + arg0->unk14 = 0; + break; + case 1: + if (fn_1_17FC(arg0) == 0) { + fn_1_183C(arg0); + arg0->unk0 = 4; + arg0->unk10 = 0; + } + break; + } +} + +void fn_1_CA0(unkStruct* arg0) { + s32 var_r29; + unkSubStruct *var_r30; + + var_r30 = arg0->unk2C[arg0->unk1C]; + switch (arg0->unk10) { + case 0: + arg0->unk1C = 0; + arg0->unk10 = 1; + break; + case 1: + arg0->unkC = 300; + arg0->unk6 = MGSeqCreate(1, arg0->unkC / 60, -1, -1); + MGSeqPosSet(arg0->unk6, lbl_1_data_70[arg0->unk1C][0], lbl_1_data_70[arg0->unk1C][1]); + arg0->unk10 = 2; + case 2: + if (fn_1_5678(var_r30, &arg0->unk34, 0) == 0) { + if ((arg0->unkC-- % 60) == 0) { + MGSeqParamSet(arg0->unk6, 1, arg0->unkC / 60); + } + if (arg0->unkC == 0) { + arg0->unk10 = 3; + arg0->unk14 = 0; + } + } else { + arg0->unk10 = 4; + } + break; + case 3: + if (arg0->unk14++ >= 60) { + fn_1_5678(var_r30, &arg0->unk34, 1); + arg0->unk10 = 4; + } + break; + case 4: + MGSeqParamSet(arg0->unk6, 2, -1); + arg0->unk6 = -1; + fn_1_5504(var_r30, arg0->unk34, 3); + arg0->unk10 = 5; + break; + case 5: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + fn_1_3BF0(arg0->unk20, arg0->unk34, 4); + arg0->unk10 = 6; + } + break; + case 6: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + fn_1_2EC0(arg0->unk34, 1); + arg0->unkC = 300; + arg0->unk6 = MGSeqCreate(1, arg0->unkC / 60, -1, -1); + MGSeqPosSet(arg0->unk6, lbl_1_data_70[arg0->unk1C][0], lbl_1_data_70[arg0->unk1C][1]); + fn_1_4000(arg0->unk20, arg0->unk1C == 1 >> 5); + arg0->unk10 = 7; + } else break; + case 7: + if (fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 0) == 0) { + if ((arg0->unkC-- % 60) == 0) { + MGSeqParamSet(arg0->unk6, 1, arg0->unkC / 60); + } + if (arg0->unkC <= 0) { + if (fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 2) == 0) { + fn_1_4000(arg0->unk20, arg0->unk1C == 1 >> 5); + arg0->unk10 = 8; + arg0->unk14 = 0; + break; + } + } else break; + } + arg0->unk10 = 9; + break; + case 8: + fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 1); + if (arg0->unk14++ >= 0x1E) { + fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 2); + arg0->unk10 = 9; + } + break; + case 9: + MGSeqParamSet(arg0->unk6, 2, -1); + arg0->unk6 = -1; + fn_1_2EC0(arg0->unk34, 0); + fn_1_3EB4(arg0->unk20, arg0->unk34, 3); + arg0->unk10 = 10; + break; + case 10: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + if (arg0->unk34->unk0 == 4) { + arg0->unk10 = 13; + } else { + fn_1_51B8(var_r30, arg0->unk34, 4); + arg0->unk10 = 11; + } + } + break; + case 11: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + if (var_r30->unk24 != 0) { + arg0->unk10 = 24; + } else { + arg0->unk10 = 12; + } + } + break; + case 12: + if (fn_1_4720(arg0->unk20, 5) == 0) { + arg0->unk1C = 1; + arg0->unk10 = 25; + break; + } else if (arg0->unk1C == 0) { + arg0->unk1C = 1; + } else { + arg0->unk1C = 0; + } + arg0->unk10 = 1; + break; + case 13: + fn_1_64BC(var_r30, 0, 60); + HuAudFXPlay(0x4E); + arg0->unk10 = 14; + case 14: + fn_1_2A94(arg0->unk34); + arg0->unk10 = 15; + break; + case 15: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + fn_1_3EB4(var_r30, arg0->unk34, 4); + fn_1_2688(arg0->unk34); + for (var_r29 = 0; var_r29 < 3; var_r29++) { + fn_1_5648(var_r30, var_r29, &arg0->unk34); + if (arg0->unk34) { + fn_1_5504(var_r30, arg0->unk34, 4); + fn_1_3BF0(arg0->unk20, arg0->unk34, 3); + } + } + + arg0->unk10 = 16; + arg0->unk14 = 0; + } + break; + case 16: + if (arg0->unk14++ >= 60) { + for (var_r29 = 0; var_r29 < 21; var_r29++) { + fn_1_3FD0(arg0->unk20, var_r29, &arg0->unk34); + if (arg0->unk34) { + fn_1_2794(arg0->unk34); + fn_1_2EC0(arg0->unk34, 1); + } + } + arg0->unk10 = 17; + arg0->unk14 = 0; + } + break; + case 17: + if (arg0->unk14++ >= 60) { + for (var_r29 = 0; var_r29 < 21; var_r29++) { + fn_1_3FD0(arg0->unk20, var_r29, &arg0->unk34); + if (arg0->unk34) { + fn_1_3EB4(arg0->unk20, arg0->unk34, 4); + fn_1_3700(arg0->unk28, arg0->unk34, 2); + } + } + arg0->unk10 = 18; + arg0->unk14 = 0; + } + break; + case 18: + if (arg0->unk14++ >= 60) { + fn_1_31D8(arg0->unk28, &arg0->unk38, &arg0->unk94, 1); + arg0->unk10 = 19; + arg0->unk14 = 0; + } + break; + case 19: + if (arg0->unk14++ >= 120) { + fn_1_34A0(arg0->unk28, &arg0->unk38, arg0->unk94, 1); + arg0->unk10 = 20; + arg0->unk14 = 0; + } + break; + case 20: + if (arg0->unk14++ >= 120) { + for (var_r29 = 0; var_r29 < 3; var_r29++) { + fn_1_3854(arg0->unk28, &arg0->unk34); + fn_1_51B8(var_r30, arg0->unk34, 1); + fn_1_2EC0(arg0->unk34, 0); + } + HuAudFXPlay(0x767); + arg0->unk10 = 21; + } + break; + case 21: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + for (var_r29 = 0; var_r29 < 3; var_r29++) { + fn_1_5648(var_r30, var_r29, &arg0->unk34); + fn_1_272C(arg0->unk34); + } + + arg0->unk10 = 22; + } + break; + case 22: + if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) { + fn_1_46AC(arg0->unk20); + + while (fn_1_3854(arg0->unk28, &arg0->unk34)) { + fn_1_3BF0(arg0->unk20, arg0->unk34, 1); + } + fn_1_46D0(arg0->unk20); + arg0->unk10 = 23; + arg0->unk14 = 0; + } + break; + case 23: + if (arg0->unk14++ >= 120) { + arg0->unk10 = 12; + } + break; + case 24: + for (var_r29 = 0; var_r29 < 3; var_r29++) { + fn_1_5648(var_r29, var_r30, &arg0->unk34); + if (arg0->unk34) { + fn_1_2D94(arg0->unk34); + } + } + GWPlayerCoinWinAdd(arg0->unk1C, 10); + case 25: + arg0->unk0 = 3; + arg0->unk10 = 0; + break; + } +} + +s32 fn_1_17FC(unkStruct* arg0) { + return MGSeqStatGet(arg0->unk4) != 0; +} + +void fn_1_183C(unkStruct* arg0) { + MGSeqKill(arg0->unk4); + arg0->unk4 = -1; +} + +void fn_1_1874(unkStruct* arg0) { + arg0->unk4 = MGSeqCreate(3, 0); +} + +void fn_1_18B0(unkStruct* arg0) { + arg0->unk4 = MGSeqCreate(3, 1); +} + +void fn_1_18EC(s16 arg0, s32 arg1) { + HuWinComKeyReset(); + if (lbl_1_bss_10 == 2) { + HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, arg1); + } + winData[arg0].active_pad = 1; + HuWinMesWait(arg0); +} + +s32 fn_1_1970(s16 arg0, s32 arg1, s32 arg2, s32 arg3) { + if (lbl_1_bss_10 == 2) { + HuPrcSleep(arg3); + return arg2; + } else { + return HuWinChoiceGet(arg0, arg1); + } +} + +const s32 lbl_1_rodata_18[12] = { + 0x180003, 0x180004, 0x180005, 0x180006, + 0x180007, 0x180008, 0x180009, 0x18000A, + 0x18000B, 0x18000C, 0x18000D, 0 +}; + +void fn_1_19D4(void) { + s16 temp_r3; + s16 var_r30; + s32 temp_r0; + s32 var_r29; + u32 temp_r27; + + temp_r3 = HuWinExCreateStyled(-10000.0f, 40.0f, 0x138, 0x78, -1, 1); + HuWinExAnimIn(temp_r3); + HuWinBGTPLvlSet(temp_r3, 0.8f); + HuWinMesSpeedSet(temp_r3, 1); + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, 0x180001); + fn_1_18EC(temp_r3, 0x3C); + if (lbl_1_bss_10 < 2) { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, 0x180002); + var_r30 = fn_1_1970(temp_r3, 0, 1, 0x3C); + } else { + var_r30 = 1; + } + if (var_r30 == 0) { + var_r29 = 0; + while (temp_r27 = lbl_1_rodata_18[var_r29++], temp_r27 != 0) { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, temp_r27); + fn_1_18EC(temp_r3, 0x3C); + + } + } else { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, 0x18000D); + fn_1_18EC(temp_r3, 0x3C); + } + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + lbl_1_bss_14 = 0; + HuPrcEnd(); + while (1) { + HuPrcVSleep(); + } +} \ No newline at end of file