diff --git a/config/GMPE01_00/rels/mstory2Dll/splits.txt b/config/GMPE01_00/rels/mstory2Dll/splits.txt index 080a347f..aa6bd0d5 100644 --- a/config/GMPE01_00/rels/mstory2Dll/splits.txt +++ b/config/GMPE01_00/rels/mstory2Dll/splits.txt @@ -38,13 +38,13 @@ REL/mstory2Dll/mg_clear.c: REL/mstory2Dll/mg_miss.c: .text start:0x00016060 end:0x000186D0 - .rodata start:0x000003D0 end:0x00000440 + .rodata start:0x000003D0 end:0x00000438 .data start:0x00000DB8 end:0x00000EF8 .bss start:0x00000968 end:0x00000B38 REL/mstory2Dll/ending.c: .text start:0x000186D0 end:0x0001B560 - .rodata start:0x00000440 end:0x000004B8 + .rodata start:0x00000438 end:0x000004B8 .data start:0x00000EF8 end:0x00001113 .bss start:0x00000B38 end:0x00000D10 diff --git a/config/GMPE01_01/rels/mstory2Dll/splits.txt b/config/GMPE01_01/rels/mstory2Dll/splits.txt index 2d36e6e7..efd06f61 100644 --- a/config/GMPE01_01/rels/mstory2Dll/splits.txt +++ b/config/GMPE01_01/rels/mstory2Dll/splits.txt @@ -38,13 +38,13 @@ REL/mstory2Dll/mg_clear.c: REL/mstory2Dll/mg_miss.c: .text start:0x00016060 end:0x000186D0 - .rodata start:0x000003D0 end:0x00000440 + .rodata start:0x000003D0 end:0x00000438 .data start:0x00000DB8 end:0x00000EF8 .bss start:0x00000968 end:0x00000B38 REL/mstory2Dll/ending.c: .text start:0x000186D0 end:0x0001B560 - .rodata start:0x00000440 end:0x000004B8 + .rodata start:0x00000438 end:0x000004B8 .data start:0x00000EF8 end:0x00001113 .bss start:0x00000B38 end:0x00000D10 diff --git a/configure.py b/configure.py index dc0c82ab..015fa960 100644 --- a/configure.py +++ b/configure.py @@ -1374,10 +1374,10 @@ config.libs = [ Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/board_entrance.c"), Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/board_clear.c"), Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/board_miss.c"), - Object(NonMatching, "REL/mstory2Dll/mg_clear.c"), - Object(NonMatching, "REL/mstory2Dll/mg_miss.c"), - Object(NonMatching, "REL/mstory2Dll/ending.c"), - Object(NonMatching, "REL/mstory2Dll/save.c"), + Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/mg_clear.c"), + Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/mg_miss.c"), + Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/ending.c"), + Object(MatchingFor("GMPE01_00"), "REL/mstory2Dll/save.c"), }, ), Rel( diff --git a/include/REL/mstory2Dll.h b/include/REL/mstory2Dll.h index b170640e..7998a490 100644 --- a/include/REL/mstory2Dll.h +++ b/include/REL/mstory2Dll.h @@ -46,6 +46,7 @@ float fn_1_864(float arg0, float arg1, float arg2, float arg3); float fn_1_88C(float arg0, float arg1, float arg2); float fn_1_8AC(float arg0, float arg1, float arg2, float arg3); float fn_1_984(float arg0, float arg1, float arg2, float arg3); +float fn_1_A4C(float arg0, float arg1, float arg2, float arg3); float fn_1_B08(float arg0, float arg1, float arg2, float arg3); void fn_1_BC8(void); void fn_1_BE8(s32 arg0); @@ -77,6 +78,7 @@ void fn_1_6704(omObjData* arg0); void fn_1_67D8(omObjData* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void fn_1_6A90(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void fn_1_6D78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void fn_1_6DBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); s32 fn_1_7064(s32 arg0, s32 arg1); void fn_1_71DC(s32 arg0); void fn_1_7244(s16 modelId, char *objName, u32 constAttr, float ofs); diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 8d98cad0..0e2c8254 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -40,7 +40,8 @@ typedef struct system_state { }; /* 0x09 */ s8 last5_effect; /* 0x0A */ s8 player_curr; -/* 0x0B */ s8 unk0B[3]; +/* 0x0B */ u8 unk0B; +/* 0x0C */ s8 unk0C; /* 0x0E */ s16 block_pos; /* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; /* 0x30 */ u8 mess_delay; @@ -316,7 +317,7 @@ static inline s32 GWPlayerCurrGet(void) static inline s32 GWUnkB1Get(void) { - return GWSystem.unk0B[1]; + return GWSystem.unk0C; } static inline s32 GWPlayerTeamGet(s32 player) diff --git a/src/REL/mentDll/main.c b/src/REL/mentDll/main.c index 03f49eb0..3888ccf4 100644 --- a/src/REL/mentDll/main.c +++ b/src/REL/mentDll/main.c @@ -2696,7 +2696,7 @@ void fn_1_E71C(s32 arg0) inline void fn_1_E874_inline(void) { s32 sp18 = lbl_1_bss_3114[0].unk_68; - GWSystem.unk0B[1] = sp18; + GWSystem.unk0C = sp18; } void fn_1_E874(omObjData *arg0, MentDllUnkBss35BCStruct *arg1) diff --git a/src/REL/modeseldll/filesel.c b/src/REL/modeseldll/filesel.c index 53a1d962..ef0bc58f 100644 --- a/src/REL/modeseldll/filesel.c +++ b/src/REL/modeseldll/filesel.c @@ -1859,7 +1859,7 @@ void fn_1_A8C0(s16 boxno) SLLoadBoardStory(); lbl_1_bss_EE[boxno] = GWGameStat.total_stars; lbl_1_bss_D0[boxno] = GWGameStat.create_time; - lbl_1_bss_E8[boxno] = GWSystem.unk0B[1]; + lbl_1_bss_E8[boxno] = GWSystem.unk0C; lbl_1_bss_C4[boxno] = GWGameStat.story_continue; lbl_1_bss_B8[boxno] = GWGameStat.party_continue; if (GWGameStat.story_continue) { diff --git a/src/REL/mstory2Dll/ending.c b/src/REL/mstory2Dll/ending.c new file mode 100644 index 00000000..c0c09595 --- /dev/null +++ b/src/REL/mstory2Dll/ending.c @@ -0,0 +1,676 @@ +#include "REL/mstory2Dll.h" +#include "game/armem.h" +#include "game/board/main.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/esprite.h" + +typedef struct { + /* 0x000 */ s32 unk00; + /* 0x004 */ s32 unk04; + /* 0x008 */ s32 unk08; + /* 0x00C */ s32 unk0C; + /* 0x010 */ s32 unk10; + /* 0x014 */ s32 unk14; + /* 0x018 */ char unk18[0x18]; + /* 0x030 */ StructFn357C unk30[4]; + /* 0x100 */ float unk100; +} StructBssC0C; // Size 0x104 + +StructBssC0C lbl_1_bss_C0C; +StructBss16C lbl_1_bss_BE4; +StructBss16C lbl_1_bss_BBC; +StructBss16C lbl_1_bss_B94; +StructBss16C lbl_1_bss_B6C; +StructBss16C lbl_1_bss_B44; +BOOL lbl_1_bss_B40; +BOOL lbl_1_bss_B3C; +Process *lbl_1_bss_B38; + +s32 lbl_1_data_EF8[2][2] = { 20, 70, 1, 1 }; +s32 lbl_1_data_F08 = -1; +s32 lbl_1_data_F0C[2] = { -1, -1 }; +s32 lbl_1_data_F14 = 127; + +void fn_1_19F14(void); +void fn_1_1A160(void); +void fn_1_1A538(omObjData* arg0, StructBss16C* arg1); +void fn_1_1A578(void); +void fn_1_1A9D0(omObjData* arg0, StructBss16C* arg1); +void fn_1_1AAB4(void); +void fn_1_1AFD4(omObjData* arg0, StructBss16C* arg1); +void fn_1_1B0E4(void); +void fn_1_1AD3C(int arg0); +void fn_1_1B318(void); +void fn_1_1B3A4(void); +void fn_1_1B430(void); + +void fn_1_186D0(void) +{ + int i; + while(1) { + HuPrcVSleep(); + if(lbl_1_data_F08 != -1 && lbl_1_data_F0C[0] != -1 && lbl_1_data_F0C[1] != -1 && lbl_1_data_F0C[0] == Hu3DMotionIDGet(lbl_1_data_F08)) { + for(i=0; i<2; i++) { + if(lbl_1_data_EF8[1][i] != -1) { + if(Hu3DMotionTimeGet(lbl_1_data_F08) >= lbl_1_data_EF8[0][i]) { + OSReport("KE-System TIME:%d\n", lbl_1_data_EF8[0][i]); + HuAudFXPlayVol(81, lbl_1_data_F14); + lbl_1_data_EF8[1][i] = -1; + } + } + } + if(Hu3DMotionTimeGet(lbl_1_data_F08) <= 10) { + for(i=0; i<2; i++) { + lbl_1_data_EF8[1][i] = 1; + } + } + } + if(lbl_1_bss_B3C == 1) { + lbl_1_data_F14--; + if(lbl_1_data_F14 <= 0) { + lbl_1_data_F14 = 0; + } + } + if(lbl_1_bss_B3C == 2) { + break; + } + } + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_188F0(Process* arg0, s32 arg1) +{ + lbl_1_bss_B38 = arg0; + if(GWSystem.diff_story == 2) { + GWGameStat.field10E_bit4 = TRUE; + } + lbl_1_bss_C0C.unk0C = arg1; + fn_1_C30(); + fn_1_3668(255); + fn_1_2828(lbl_1_bss_B38, fn_1_1B318); + fn_1_3754(); + fn_1_1AD3C(arg1); + HuPrcChildCreate(fn_1_1B0E4, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_1A160, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_1AAB4, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_1A578, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_19F14, 100, 12288, 0, HuPrcCurrentGet()); +} + +void fn_1_18A34(omObjData *object) +{ + if(object->work[2]) { + object->work[2]--; + return; + } + if(object->work[2] == 0 && Hu3DMotionEndCheck(object->model[1])) { + fn_1_1DFC(object, 1, object->work[1], 15, 1); + object->work[0] = object->work[1] = object->work[2] = 0; + } +} + +void fn_1_18AC0(void) +{ + int posX = 16; + int posY = 40; + GXColor winColor = { 0, 0, 128, 128 }; + int i; + while(1) { + fn_1_BC8(); + fontcolor = FONT_COLOR_WHITE; + printWin(posX, posY, 220, 130, &winColor); + if(lbl_1_bss_BE4.unk04 == NULL) { + print8(posX, posY, 1, "PROC_MAIN -> FALSE"); + } else { + print8(posX, posY, 1, "PROC_MAIN -> TRUE"); + } + if(lbl_1_bss_BBC.unk04 == NULL) { + print8(posX, posY+10, 1, "PROC_MAP -> FALSE"); + } else { + print8(posX, posY+10, 1, "PROC_MAP -> TRUE"); + } + if(lbl_1_bss_B94.unk04 == NULL) { + print8(posX, posY+20, 1, "PROC_PLAYER -> FALSE"); + } else { + print8(posX, posY+20, 1, "PROC_PLAYER -> TRUE"); + } + if(lbl_1_bss_B6C.unk04 == NULL) { + print8(posX, posY+30, 1, "PROC_SUB -> FALSE"); + } else { + print8(posX, posY+30, 1, "PROC_SUB -> TRUE"); + } + if(lbl_1_bss_B44.unk04 == NULL) { + print8(posX, posY+40, 1, "PROC_KOOPA -> FALSE"); + } else { + print8(posX, posY+40, 1, "PROC_KOOPA -> TRUE"); + } + + print8(posX, posY+60, 1, "P:%d W:%d", lbl_1_bss_C0C.unk00, lbl_1_bss_C0C.unk0C); + print8(posX, posY+80, 1, "NO) IDX:GRP:COM:DIF:PAD:CHR"); + for(i=0; i<4; i++) { + print8(posX, posY+90+(i*10), 1, "%2d) %3d:%3d:%3d:%3d:%3d:%3d", i, lbl_1_bss_C0C.unk30[i].unk00, lbl_1_bss_C0C.unk30[i].unk04, lbl_1_bss_C0C.unk30[i].unk08, lbl_1_bss_C0C.unk30[i].unk0C, lbl_1_bss_C0C.unk30[i].unk14, lbl_1_bss_C0C.unk30[i].unk10); + } + } +} + +void fn_1_18E7C(void) +{ + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + fn_1_BE8(60); +} + +void fn_1_18EC4(void) +{ + lbl_1_bss_C0C.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_C0C.unk0C); + HuAudFXPlay(lbl_1_data_0[6][1]); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x1F001E); + fn_1_1AFC(lbl_1_bss_C0C.unk04, -1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x250004); + fn_1_1A94(lbl_1_bss_C0C.unk04); + lbl_1_bss_B44.unk04 = (void *)fn_1_1A538; + lbl_1_bss_B3C = 1; + fn_1_BE8(60); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + fn_1_BE8(60); + lbl_1_bss_B44.unk04 = NULL; + lbl_1_bss_B3C = 2; + fn_1_1DFC(lbl_1_bss_B44.unk00, 1, 1, 0, 1); + fn_1_2750(fn_1_1B3A4); + Hu3DModelAttrReset(lbl_1_bss_BBC.unk00->model[1], 1); + Hu3DModelAttrReset(lbl_1_bss_BBC.unk00->model[2], 1); + Hu3DModelAttrReset(lbl_1_bss_BBC.unk00->model[4], 1); + Hu3DModelAttrReset(lbl_1_bss_B6C.unk00->model[1], 1); + Hu3DModelAttrReset(lbl_1_bss_B94.unk00->model[1], 1); + Hu3DModelAttrSet(lbl_1_bss_B44.unk00->model[1], 1); + Hu3DModelPosSet(lbl_1_bss_BBC.unk00->model[1], 0, 0, 0); + fn_1_BE8(60); + lbl_1_bss_78[0] = HuAudSeqPlay(56); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + if(0) { + fn_1_BC8(); + } +} + +void fn_1_19138(void) +{ + fn_1_1DFC(lbl_1_bss_BBC.unk00, 2, 3, 0, 0); + fn_1_2264(lbl_1_bss_BBC.unk00, 2, 3, 0); + lbl_1_bss_B94.unk04 = (void *)fn_1_1AFD4; + lbl_1_bss_B6C.unk04 = (void *)fn_1_1A9D0; + fn_1_3854(&lbl_1_bss_24); + fn_1_2750(fn_1_1B430); + fn_1_BE8(30); + fn_1_1DFC(lbl_1_bss_BBC.unk00, 2, 2, 0, 0); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_B94.unk04 == NULL) { + break; + } + } + while(1) { + fn_1_BC8(); + if(lbl_1_bss_B6C.unk04 == NULL) { + break; + } + } + lbl_1_bss_C0C.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_C0C.unk0C); + HuAudFXPlay(lbl_1_data_0[0][2]); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 3, 15, 1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x1F001F); + fn_1_1AFC(lbl_1_bss_C0C.unk04, -1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x1F0020); + fn_1_1AFC(lbl_1_bss_C0C.unk04, -1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x250004); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 1, 15, 1); + fn_1_1A94(lbl_1_bss_C0C.unk04); + fn_1_BE8(60); +} + +char *lbl_1_data_10E4[8] = { + "movie/endmov_ma0.thp", + "movie/endmov_lu0.thp", + "movie/endmov_pe0.thp", + "movie/endmov_yo0.thp", + "movie/endmov_wa0.thp", + "movie/endmov_do0.thp", + "movie/endmov_da0.thp", + "movie/endmov_wl0.thp" +}; + +void fn_1_19334(void) +{ + lbl_1_bss_C0C.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_C0C.unk0C); + HuAudFXPlay(lbl_1_data_0[0][2]); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 3, 0, 1); + fn_1_1D4C(lbl_1_bss_C0C.unk04, lbl_1_bss_C0C.unk30[lbl_1_bss_C0C.unk00].unk10, 0); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x1F0024); + fn_1_1AFC(lbl_1_bss_C0C.unk04, -1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x250004); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 1, 0, 1); + fn_1_1A94(lbl_1_bss_C0C.unk04); + fn_1_1DFC(lbl_1_bss_B94.unk00, 1, 4, 15, 0); + fn_1_2264(lbl_1_bss_B94.unk00, 1, 4, 15); + fn_1_1DFC(lbl_1_bss_B94.unk00, 1, 3, 15, 1); + fn_1_BE8(60); + lbl_1_bss_C0C.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_C0C.unk0C); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 3, 0, 1); + fn_1_6D78(lbl_1_bss_C0C.unk04, 0x1F0023, 0, -1); + fn_1_1D18(lbl_1_bss_C0C.unk04, 0x250004); + fn_1_1DFC(lbl_1_bss_B6C.unk00, 1, 1, 0, 1); + HuAudFXPlay(lbl_1_data_0[0][3]); + fn_1_1A94(lbl_1_bss_C0C.unk04); + fn_1_BE8(60); + HuAudFXPlay(152); + Hu3DModelAttrSet(lbl_1_bss_BBC.unk00->model[1], 1); + Hu3DModelAttrSet(lbl_1_bss_BBC.unk00->model[2], 1); + Hu3DModelAttrSet(lbl_1_bss_BBC.unk00->model[4], 1); + Hu3DModelAttrSet(lbl_1_bss_B6C.unk00->model[1], 1); + Hu3DModelAttrSet(lbl_1_bss_B94.unk00->model[1], 1); + HuAudSeqFadeOut(lbl_1_bss_78[0], 100); + lbl_1_bss_B3C = 2; + GWGameStat.field10E_bit6 = TRUE; + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while (WipeStatGet()) { + HuPrcVSleep(); + } + lbl_1_bss_BBC.unk04 = NULL; + lbl_1_bss_B94.unk04 = NULL; + lbl_1_bss_B44.unk04 = NULL; + lbl_1_bss_B6C.unk04 = NULL; + + CharModelKill(-1); + Hu3DAllKill(); + fn_1_BE8(60); + { + int time = 0; + int gid = HuSprGrpCreate(3); + int sprid = HuTHPSprCreate(lbl_1_data_10E4[lbl_1_bss_C0C.unk30[lbl_1_bss_C0C.unk00].unk10], FALSE, 1000); + HuSprGrpMemberSet(gid, 0, sprid); + HuSprPosSet(gid, 0, 288, 240); + sprid = HuSprCreate(HuSprAnimRead(HuDataReadNum(0x660060, 0x10000000)), 950, 0); + HuSprGrpMemberSet(gid, 1, sprid); + HuSprPosSet(gid, 1, 288, 226); + HuSprAttrSet(gid, 1, HUSPR_ATTR_DISPOFF); + sprid = HuSprCreate(HuSprAnimRead(HuDataReadNum(0x660061, 0x10000000)), 950, 0); + HuSprGrpMemberSet(gid, 2, sprid); + HuSprBankSet(gid, 2, lbl_1_bss_C0C.unk30[lbl_1_bss_C0C.unk00].unk10); + if(GWLanguageGet() == 0 && lbl_1_bss_C0C.unk30[lbl_1_bss_C0C.unk00].unk10 == 5) { + HuSprBankSet(gid, 2, 8); + } + HuSprPosSet(gid, 2, 288, 254); + HuSprAttrSet(gid, 2, HUSPR_ATTR_DISPOFF); + HuPrcSleep(5); + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + while(!HuTHPEndCheck()) { + if(time >= 3300) { + HuSprAttrReset(gid, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(gid, 2, HUSPR_ATTR_DISPOFF); + } else { + time++; + } + HuPrcVSleep(); + } + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuTHPClose(); + HuPrcVSleep(); + HuSprGrpKill(gid); + } + +} + +void fn_1_199A0(void) +{ + float sp8[2]; + s32 temp_r30; + s32 var_r29; + s32 var_r31; + s32 var_r28; + temp_r30 = 1; + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + if (SLSaveFlagGet() == 0) { + lbl_1_bss_B40 = 1; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } + } + espInit(); + HuPrcVSleep(); + var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_WIN, 32), 5000, 0); + espPosSet(var_r29, 288.0f, 240.0f); + espAttrReset(var_r29, 4); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_BE8(60); + var_r28 = GWUnkB1Get(); + GWSystem.unk0B |= 1 << var_r28; + if (SLSaveFlagGet() == 1) { + HuWinInit(1); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(30, 22)); + var_r31 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); + winData[var_r31].active_pad = 1; + HuWinAttrSet(var_r31, 0x10); + HuWinExAnimIn(var_r31); + HuWinMesSet(var_r31, MAKE_MESSID(30, 22)); + temp_r30 = HuWinChoiceGet(var_r31, 0); + HuWinExAnimOut(var_r31); + HuWinExCleanup(var_r31); + if (SLSaveFlagGet() == 1 && temp_r30 == 0) { + GWGameStat.story_continue = FALSE; + SLCommonSet(); + SLSaveBoardStory(); + SLSave(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + lbl_1_bss_B40 = 1; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_19BE8(void) +{ + omOvlHisData *his; + fn_1_BE8(120); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + CharModelKill(-1); + HuAudFadeOut(1); + his = omOvlHisGet(0); + omOvlHisChg(0, OVL_MSTORY2, 20, 1); + omOvlCallEx(OVL_STAFF, 1, 0, 0); + while(1) { + fn_1_BC8(); + } +} + +void fn_1_19C6C(omObjData* arg0, StructBss16C* arg1) +{ + int temp = 0; + fn_1_18E7C(); + fn_1_18EC4(); + fn_1_19138(); + fn_1_19334(); + fn_1_19BE8(); + arg1->unk04 = NULL; +} + +void fn_1_19F14(void) +{ + omObjData *obj; + lbl_1_bss_BE4.unk00 = obj = omAddObjEx(lbl_1_bss_B38, 256, 16, 16, -1, NULL); + lbl_1_bss_BE4.unk04 = (void *)fn_1_19C6C; + lbl_1_bss_BE4.unk00->data = &lbl_1_bss_BE4; + while(1) { + fn_1_BC8(); + if(lbl_1_bss_BE4.unk04 != NULL) { + lbl_1_bss_BE4.unk04(obj, &lbl_1_bss_BE4); + } + } +} + +void fn_1_19FC8(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660050); + object->motion[0] = Hu3DMotionIDGet(object->model[1]); + fn_1_1DFC(object, 1, 0, 0, 2); + Hu3DModelShadowMapObjSet(object->model[1], "base_fix9-base"); + Hu3DModelAttrSet(object->model[1], 1); + object->model[2] = Hu3DModelCreateFile(0x660053); + object->motion[2] = Hu3DJointMotionFile(object->model[2], 0x660054); + object->motion[3] = Hu3DJointMotionFile(object->model[2], 0x660055); + Hu3DModelAttrSet(object->model[2], 1); + fn_1_1DFC(object, 2, 3, 0, 2); + object->model[4] = Hu3DModelCreateFile(0x660051); + Hu3DModelAttrSet(object->model[4], 1); + Hu3DModelPosSet(object->model[1], 0, -1000, 0); +} + +void fn_1_1A160(void) +{ + omObjData *obj; + lbl_1_bss_BBC.unk00 = obj = omAddObjEx(lbl_1_bss_B38, 256, 16, 16, -1, NULL); + lbl_1_bss_BBC.unk04 = NULL; + fn_1_19FC8(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_BBC.unk04 != NULL) { + lbl_1_bss_BBC.unk04(obj, &lbl_1_bss_BBC); + } + } +} + +void fn_1_1A368(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660062); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x660063); + object->motion[2] = Hu3DJointMotionFile(object->model[1], 0x660070); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660071); + Hu3DModelPosSet(object->model[1], 0, 0, 600); + Hu3DModelRotSet(object->model[1], 0, 180, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + fn_1_1DFC(object, 1, 3, 0, 1); + lbl_1_data_F08 = object->model[1]; + lbl_1_data_F0C[0] = object->motion[3]; + lbl_1_data_F0C[1] = object->motion[3]; + HuPrcChildCreate(fn_1_186D0, 100, 8192, 0, HuPrcCurrentGet()); +} + +void fn_1_1A538(omObjData* arg0, StructBss16C* arg1) +{ + Hu3DData[lbl_1_bss_B44.unk00->model[1]].pos.z -= 2.5f; +} + +void fn_1_1A578(void) +{ + omObjData *obj; + lbl_1_bss_B44.unk00 = obj = omAddObjEx(lbl_1_bss_B38, 256, 16, 16, -1, NULL); + lbl_1_bss_B44.unk04 = NULL; + fn_1_1A368(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_B44.unk04 != NULL) { + lbl_1_bss_B44.unk04(obj, &lbl_1_bss_B44); + } + if(obj->work[0]) { + fn_1_6704(obj); + } + } +} + +void fn_1_1A7CC(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660072); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x660073); + object->motion[2] = Hu3DJointMotionFile(object->model[1], 0x660075); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660076); + object->motion[4] = Hu3DJointMotionFile(object->model[1], 0x66007C); + object->motion[5] = Hu3DJointMotionFile(object->model[1], 0x660079); + Hu3DModelPosSet(object->model[1], 0, 0, 460); + Hu3DModelRotSet(object->model[1], 0, 0, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelAttrSet(object->model[1], 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 5, 0, 1); + CharModelEffectNpcInit(object->model[1], object->motion[2], 1, 9); +} + + +void fn_1_1A9D0(omObjData* arg0, StructBss16C* arg1) +{ + Vec pos = { -120, 0, 800 }; + fn_1_1DFC(arg0, 1, 2, 15, 1); + fn_1_2D00(arg0, 1, pos, 90, 60, 10); + fn_1_1DFC(arg0, 1, 1, 15, 1); + arg1->unk04 = NULL; +} + +void fn_1_1AAB4(void) +{ + omObjData *obj; + lbl_1_bss_B6C.unk00 = obj = omAddObjEx(lbl_1_bss_B38, 256, 16, 16, -1, NULL); + lbl_1_bss_B6C.unk04 = NULL; + fn_1_1A7CC(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_B6C.unk04 != NULL) { + lbl_1_bss_B6C.unk04(obj, &lbl_1_bss_B6C); + } + if(obj->work[0]) { + fn_1_6704(obj); + } + } +} + +void fn_1_1AD3C(int arg0) +{ + int i; + int order[4]; + order[0] = 0; + for(i=1; i<4; i++) { + order[i] = order[i-1]+1; + if(order[i] >= 4) { + order[i] = 0; + } + if(arg0 == order[i]) { + lbl_1_bss_C0C.unk00 = i; + } + } + for(i=0; i<4; i++) { + fn_1_357C(&lbl_1_bss_C0C.unk30[i], order[i]); + } +} + +void fn_1_1AE20(omObjData *object) +{ + int charNo = lbl_1_bss_C0C.unk30[lbl_1_bss_C0C.unk00].unk10; + object->model[1] = CharModelCreate(charNo, 1); + object->motion[1] = CharModelMotionCreate(charNo, 0x5F0000); + object->motion[2] = CharModelMotionCreate(charNo, 0x5F0035); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660010+charNo); + object->motion[4] = Hu3DJointMotionFile(object->model[1], 0x660008+charNo); + CharModelMotionDataClose(charNo); + Hu3DModelPosSet(object->model[1], 120, 0, 800); + Hu3DModelRotSet(object->model[1], 0, -135, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelAttrSet(object->model[1], 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 1, 0, 1); +} + +void fn_1_1AFD4(omObjData* arg0, StructBss16C* arg1) +{ + int i; + fn_1_1DFC(arg0, 1, 2, 0, 0); + fn_1_BC8(); + Hu3DMotionTimeSet(arg0->model[1], 60); + for(i=0; i<60; i++) { + fn_1_BC8(); + Hu3DData[arg0->model[1]].rot.y = fn_1_864(-135, -90, i, 60); + } + fn_1_1DFC(arg0, 1, 1, 15, 1); + arg1->unk04 = NULL; +} + +void fn_1_1B0E4(void) +{ + omObjData *obj; + lbl_1_bss_B94.unk00 = obj = omAddObjEx(lbl_1_bss_B38, 256, 16, 16, -1, NULL); + lbl_1_bss_B94.unk04 = NULL; + fn_1_1AE20(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_B94.unk04 != NULL) { + lbl_1_bss_B94.unk04(obj, &lbl_1_bss_B94); + } + if(obj->work[0]) { + fn_1_6704(obj); + } + } +} + +void fn_1_1B318(void) +{ + StructBss24 *work = &lbl_1_bss_24; + work->unk08.x = 0; + work->unk08.y = 120; + work->unk08.z = 0; + work->unk20.x = 0; + work->unk20.y = 0; + work->unk20.z = 0; + work->unk38 = 1400; +} + +void fn_1_1B3A4(void) +{ + StructBss24 *work = &lbl_1_bss_24; + work->unk08.x = 0; + work->unk08.y = 125; + work->unk08.z = 0; + work->unk20.x = -4.9f; + work->unk20.y = 0; + work->unk20.z = 0; + work->unk38 = 1750; +} + +void fn_1_1B430(void) +{ + StructBss24 *work = &lbl_1_bss_24; + StructBss24 temp; + temp.unk08.x = 0; + temp.unk08.y = 100; + temp.unk08.z = 0; + temp.unk20.x = 0; + temp.unk20.y = 0; + temp.unk20.z = 0; + temp.unk38 = 1400; + fn_1_42A0(work, &temp, work->unk40++, 60, 10); + if(0.0f != lbl_1_bss_C0C.unk100) { + work->unk08.y = 125+lbl_1_bss_C0C.unk100; + } +} \ No newline at end of file diff --git a/src/REL/mstory2Dll/mg_clear.c b/src/REL/mstory2Dll/mg_clear.c new file mode 100644 index 00000000..ddeded43 --- /dev/null +++ b/src/REL/mstory2Dll/mg_clear.c @@ -0,0 +1,831 @@ +#include "REL/mstory2Dll.h" +#include "game/armem.h" +#include "game/board/main.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/objsub.h" + +typedef struct struct_data850 { + s32 unk0; + s32 unk4; + s32 unk8; + s32 unkC; + s32 unk10; +} StructData850; + +StructData850 lbl_1_data_850[] = { + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x00), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x01), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x02), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x03), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x04), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x05), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x06), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x07), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x08), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x09), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0A), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0B), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0C), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0D), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0E), 1, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x0F), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x10), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x11), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x12), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x13), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x14), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x15), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x16), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x17), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x18), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x19), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1A), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1B), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1C), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1D), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1E), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x1F), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x20), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x21), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x22), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x23), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x24), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x25), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x26), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x27), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x28), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x29), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2A), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2B), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2C), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2D), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2E), 0, 0, 0, 1 }, + { DATA_MAKE_NUM(DATADIR_MSTORY4, 0x2F), 0, 0, 0, 1 }, +}; + +s32 lbl_1_data_C10[2][2] = { 20, 70, 1, 1 }; +s32 lbl_1_data_C20 = -1; +s32 lbl_1_data_C24[2] = { -1, -1 }; + +typedef struct { + /* 0x000 */ s32 unk00; + /* 0x004 */ s32 unk04; + /* 0x008 */ s32 unk08; + /* 0x00C */ s32 unk0C; + /* 0x010 */ s32 unk10; + /* 0x014 */ s32 unk14; + /* 0x018 */ char unk18[0x18]; + /* 0x030 */ StructFn357C unk30[4]; + /* 0x100 */ s32 unk100; +} StructBss860; // Size 0x104 + +StructBss860 lbl_1_bss_860; +StructBss16C lbl_1_bss_838; +StructBss16C lbl_1_bss_810; +StructBss16C lbl_1_bss_7E8; +StructBss16C lbl_1_bss_7C0; +StructBss16C lbl_1_bss_798; +BOOL lbl_1_bss_794; +Process *lbl_1_bss_790; + +void fn_1_13BB8(void); +void fn_1_13FB4(omObjData* arg0, StructBss16C* arg1); +void fn_1_140A0(omObjData* arg0, StructBss16C* arg1); +void fn_1_1449C(void); +void fn_1_14A9C(int arg0, int arg1, int arg2, int arg3, int arg4); +void fn_1_14B48(omObjData* arg0, StructBss16C* arg1); +void fn_1_14C40(void); +void fn_1_15134(int arg0, int arg1, int arg2, int arg3, int arg4); +void fn_1_151E0(omObjData* arg0, StructBss16C* arg1); +void fn_1_152C4(omObjData* arg0, StructBss16C* arg1); +void fn_1_153A8(void); +void fn_1_15668(int arg0); +void fn_1_159F0(void); +void fn_1_15CDC(void); +void fn_1_15D68(void); +void fn_1_15E58(void); +void fn_1_15F70(void); + +void fn_1_123C8(void) +{ + int i; + while(1) { + do { + HuPrcVSleep(); + } while(lbl_1_data_C20 == -1 || lbl_1_data_C24[0] == -1 || lbl_1_data_C24[1] == -1 || lbl_1_data_C24[0] != Hu3DMotionIDGet(lbl_1_data_C20)); + for(i=0; i<2; i++) { + if(lbl_1_data_C10[1][i] != -1) { + if(Hu3DMotionTimeGet(lbl_1_data_C20) >= lbl_1_data_C10[0][i]) { + OSReport("KE-System TIME:%d\n", lbl_1_data_C10[0][i]); + HuAudFXPlay(81); + lbl_1_data_C10[1][i] = -1; + } + } + } + if(Hu3DMotionTimeGet(lbl_1_data_C20) <= 10) { + for(i=0; i<2; i++) { + lbl_1_data_C10[1][i] = 1; + } + } + } +} + +void fn_1_1256C(Process* arg0, s32 arg1) +{ + lbl_1_bss_790 = arg0; + lbl_1_bss_860.unk0C = arg1; + fn_1_C30(); + lbl_1_bss_860.unk100 = fn_1_3668(255); + fn_1_2828(lbl_1_bss_790, fn_1_15CDC); + fn_1_3754(); + fn_1_15668(arg1); + HuPrcChildCreate(fn_1_1449C, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_14C40, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_153A8, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_159F0, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_13BB8, 100, 8192, 0, HuPrcCurrentGet()); +} + +void fn_1_12690(omObjData *object) +{ + if(object->work[2]) { + object->work[2]--; + return; + } + if(object->work[2] == 0 && Hu3DMotionEndCheck(object->model[1])) { + fn_1_1DFC(object, 1, object->work[1], 15, 1); + object->work[0] = object->work[1] = object->work[2] = 0; + } +} + +void fn_1_1271C(void) +{ + int posX = 16; + int posY = 40; + GXColor winColor = { 0, 0, 128, 128 }; + int i; + while(1) { + fn_1_BC8(); + printWin(posX, posY, 220, 130, &winColor); + if(lbl_1_bss_838.unk04 == NULL) { + print8(posX, posY, 1, "PROC_MAIN -> FALSE"); + } else { + print8(posX, posY, 1, "PROC_MAIN -> TRUE"); + } + if(lbl_1_bss_810.unk04 == NULL) { + print8(posX, posY+10, 1, "PROC_MAP -> FALSE"); + } else { + print8(posX, posY+10, 1, "PROC_MAP -> TRUE"); + } + if(lbl_1_bss_7E8.unk04 == NULL) { + print8(posX, posY+20, 1, "PROC_KOOPA -> FALSE"); + } else { + print8(posX, posY+20, 1, "PROC_KOOPA -> TRUE"); + } + if(lbl_1_bss_7C0.unk04 == NULL) { + print8(posX, posY+30, 1, "PROC_MKOOPA -> FALSE"); + } else { + print8(posX, posY+30, 1, "PROC_MKOOPA -> TRUE"); + } + if(lbl_1_bss_798.unk04 == NULL) { + print8(posX, posY+40, 1, "PROC_PLAYER -> FALSE"); + } else { + print8(posX, posY+40, 1, "PROC_PLAYER -> TRUE"); + } + print8(posX, posY+60, 1, "P:%d W:%d", lbl_1_bss_860.unk00, lbl_1_bss_860.unk0C); + print8(posX, posY+80, 1, "NO) IDX:GRP:COM:DIF:PAD:CHR"); + for(i=0; i<4; i++) { + print8(posX, posY+90+(i*10), 1, "%2d) %3d:%3d:%3d:%3d:%3d:%3d", i, lbl_1_bss_860.unk30[i].unk00, lbl_1_bss_860.unk30[i].unk04, lbl_1_bss_860.unk30[i].unk08, lbl_1_bss_860.unk30[i].unk0C, lbl_1_bss_860.unk30[i].unk14, lbl_1_bss_860.unk30[i].unk10); + } + } +} + +void fn_1_12AC8(void) +{ + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + fn_1_BE8(30); +} + +void fn_1_12B10(void) +{ + lbl_1_bss_860.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_860.unk0C); + HuAudFXPlay(lbl_1_data_0[6][1]); + fn_1_14A9C(4, 1, 15, 0, 1); + fn_1_1D4C(lbl_1_bss_860.unk04, lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10, 0); + fn_1_6D78(lbl_1_bss_860.unk04, 0x1F0014, 0, lbl_1_bss_7E8.unk00->model[1]); + HuAudFXPlay(lbl_1_data_0[6][2]); + fn_1_1DFC(lbl_1_bss_7E8.unk00, 1, 5, 10, 1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F0015); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + fn_1_15134(1, -1, 15, 1, 0); + fn_1_1A94(lbl_1_bss_860.unk04); + lbl_1_bss_7E8.unk04 = (void *)fn_1_14B48; + fn_1_BE8(60); + fn_1_1DFC(lbl_1_bss_798.unk00, 1, 4, 15, 0); + fn_1_BE8(16); + while(1) { + fn_1_BC8(); + if(Hu3DMotionTimeGet(lbl_1_bss_798.unk00->model[1]) >= 20) { + break; + } + } + Hu3DMotionSpeedSet(lbl_1_bss_798.unk00->model[1], 0); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_7E8.unk04 == NULL) { + break; + } + } + fn_1_BE8(30); + fn_1_3854(&lbl_1_bss_24); + fn_1_2750(fn_1_15D68); + lbl_1_bss_7C0.unk04 = (void *)fn_1_152C4; + fn_1_BE8(80); + Hu3DMotionSpeedSet(lbl_1_bss_798.unk00->model[1], 1); + fn_1_1DFC(lbl_1_bss_798.unk00, 1, 1, 15, 1); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_7C0.unk04 == NULL) { + break; + } + } +} + +void fn_1_12DD4(void) +{ + lbl_1_bss_860.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_860.unk0C); + lbl_1_bss_78[0] = HuAudSeqPlay(56); + HuAudFXPlay(lbl_1_data_0[5][0]); + fn_1_1DFC(lbl_1_bss_7C0.unk00, 1, 4, 15, 0); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F0016); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + HuAudFXPlay(lbl_1_data_0[5][0]); + fn_1_1DFC(lbl_1_bss_7C0.unk00, 1, 3, 15, 1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F0017); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + HuAudFXPlay(lbl_1_data_0[5][0]); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F0018); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + fn_1_1DFC(lbl_1_bss_7C0.unk00, 1, 1, 15, 1); + fn_1_1A94(lbl_1_bss_860.unk04); + fn_1_BE8(60); + lbl_1_bss_860.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_860.unk0C); + HuAudFXPlay(lbl_1_data_0[5][0]); + fn_1_1DFC(lbl_1_bss_7C0.unk00, 1, 3, 15, 1); + fn_1_1D4C(lbl_1_bss_860.unk04, lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10, 0); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F0019); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + HuAudFXPlay(lbl_1_data_0[5][1]); + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F001A); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + lbl_1_bss_7C0.unk04 = (void *)fn_1_151E0; + fn_1_1D18(lbl_1_bss_860.unk04, 0x1F001B); + fn_1_1AFC(lbl_1_bss_860.unk04, -1); + fn_1_1D18(lbl_1_bss_860.unk04, 0x250004); + fn_1_1A94(lbl_1_bss_860.unk04); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_7C0.unk04 == NULL) { + break; + } + } +} + +void fn_1_13150(omObjData* arg0, StructBss16C* arg1) +{ + int streamNo = HuAudSStreamPlay(7); + while(1) { + fn_1_BC8(); + if(HuAudSStreamStatGet(streamNo) == 0) { + break; + } + } + HuAudSeqPause(lbl_1_bss_78[0], 0, 1000); + arg1->unk04 = NULL; +} + +void fn_1_131C0(omObjData* arg0, StructBss16C* arg1) +{ + int presentSe = (lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10*6)+5; + fn_1_BE8(150); + OSReport("########## PRESENT_SE : %d\n", presentSe); + HuAudFXPlay(presentSe+2260); + fn_1_1DFC(lbl_1_bss_810.unk00, 7, 7, 1, 0); + arg1->unk04 = NULL; +} + +void fn_1_13264(void) +{ + int i; + fn_1_1DFC(lbl_1_bss_798.unk00, 1, 2, 15, 1); + for(i=0; i<30; i++) { + fn_1_BC8(); + if(lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10 != 5) { + Hu3DData[lbl_1_bss_798.unk00->model[1]].pos.x = fn_1_864(120, 80, i, 30); + } + Hu3DData[lbl_1_bss_798.unk00->model[1]].rot.y = fn_1_864(-60, -90, i, 30); + } + fn_1_1DFC(lbl_1_bss_798.unk00, 1, 5, 5, 0); + fn_1_BE8(10); + while(1) { + fn_1_BC8(); + if(Hu3DMotionTimeGet(lbl_1_bss_798.unk00->model[1]) >= 30) { + break; + } + } + Hu3DModelPosSet(lbl_1_bss_810.unk00->model[5], 0, 0, 0); + Hu3DModelHookSet(lbl_1_bss_798.unk00->model[1], CharModelHookNameGet(lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10, 1, 1), lbl_1_bss_810.unk00->model[5]); + fn_1_BE8(60); + lbl_1_bss_810.unk04 = (void *)fn_1_13FB4; + HuAudFXPlay(163); + HuAudCharVoicePlay(lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10, 296); + fn_1_1DFC(lbl_1_bss_810.unk00, 6, 6, 0, 0); + Hu3DModelAttrReset(lbl_1_bss_810.unk00->model[6], 1); + Hu3DModelAttrSet(lbl_1_bss_810.unk00->model[5], 1); + fn_1_1DFC(lbl_1_bss_798.unk00, 1, 6, 5, 0); + HuAudSeqPause(lbl_1_bss_78[0], 1, 1000); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + while(1) { + fn_1_BC8(); + if(!WipeStatGet()) { + break; + } + } + Hu3DMotionSpeedSet(lbl_1_bss_798.unk00->model[1], 0); + Hu3DMotionTimeSet(lbl_1_bss_798.unk00->model[1], 50); + Hu3DModelAttrReset(lbl_1_bss_810.unk00->model[7], 1); + Hu3DModelAttrReset(lbl_1_bss_810.unk00->model[8], 1); + fn_1_1DFC(lbl_1_bss_810.unk00, 8, 8, 0, 1); + fn_1_BE8(30); + HuAudFXPlay(169); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + while(1) { + fn_1_BC8(); + if(!WipeStatGet()) { + break; + } + } + fn_1_3854(&lbl_1_bss_24); + fn_1_2750(fn_1_15F70); + fn_1_BE8(60); + lbl_1_bss_798.unk04 = (void *)fn_1_131C0; + lbl_1_bss_860.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_860.unk0C); + lbl_1_bss_7C0.unk04 = (void *)fn_1_13150; + fn_1_1D4C(lbl_1_bss_860.unk04, (lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10*6)+0x32000B, 0); + fn_1_6DBC(lbl_1_bss_860.unk04, 0x320086, 0, 300); + fn_1_1D18(lbl_1_bss_860.unk04,0x250004); + fn_1_1A94(lbl_1_bss_860.unk04); + fn_1_3854(&lbl_1_bss_24); + fn_1_2750(fn_1_15E58); + lbl_1_bss_810.unk04 = (void *)fn_1_140A0; + fn_1_BE8(30); + Hu3DMotionSpeedSet(lbl_1_bss_798.unk00->model[1], 0.1f); + fn_1_BE8(180); + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); +} + +void fn_1_13828(void) +{ + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_BE8(60); + SLCommonSet(); + SLSaveBoardStory(); + if (SLSaveFlagGet() == 1) { + SLSave(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 10); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + lbl_1_bss_794 = TRUE; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_138CC(void) +{ + omOvlHisData* var_r31; + + msmSeStopAll(FALSE, 1000); + do { + fn_1_BC8(); + } while (WipeStatGet() != 0); + CharModelKill(-1); + HuAudFXAllStop(); + HuAudSStreamAllStop(); + GWMGAvailSet(omMgIndexGet(58)+401); + GWGameStat.present[lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10 * 6 + 5] = 1; + OSReport("########## PRESENTFLG CHR:%d, MAP:5, PRESENT:%d\n", lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10, lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10 * 6 + 5); + var_r31 = omOvlHisGet(0); + omOvlHisChg(0, OVL_MSTORY2, 20, var_r31->stat); + omOvlCallEx(OVL_PRESENT, 1, lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10 * 6 + 5 + 1, 0); +} + +void fn_1_13A18(omObjData* arg0, StructBss16C* arg1) +{ + int temp = 0; + fn_1_12AC8(); + fn_1_12B10(); + fn_1_12DD4(); + fn_1_13264(); + fn_1_138CC(); + arg1->unk04 = 0; +} + +void fn_1_13BB8(void) +{ + omObjData *obj; + lbl_1_bss_838.unk00 = obj = omAddObjEx(lbl_1_bss_790, 256, 16, 16, -1, NULL); + lbl_1_bss_838.unk04 = (void *)fn_1_13A18; + lbl_1_bss_838.unk00->data = &lbl_1_bss_838; + while(1) { + fn_1_BC8(); + if(lbl_1_bss_838.unk04 != NULL) { + lbl_1_bss_838.unk04(obj, &lbl_1_bss_838); + } + } +} + +void fn_1_13C6C(omObjData* object) +{ + s32 charNo; + charNo = lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10; + object->model[7] = Hu3DModelCreateFile(lbl_1_data_850[charNo * 6 + 5].unk0); + object->motion[7] = Hu3DMotionIDGet(object->model[7]); + Hu3DModelPosSet(object->model[7], 0, 180, 825); + Hu3DModelAttrSet(object->model[7], 1); + Hu3DModelShadowSet(object->model[7]); + fn_1_1DFC(object, 7, 7, 0, 2); + HuDataDirClose(DATADIR_MSTORY4); + object->model[1] = Hu3DModelCreateFile(0x660052); + object->motion[1] = Hu3DMotionIDGet(object->model[1]); + Hu3DModelShadowMapObjSet(object->model[1], "base_story-base"); + fn_1_1DFC(object, 1, 1, 0, 1); + object->model[2] = Hu3DModelCreateFile(0x660053); + object->motion[2] = Hu3DJointMotionFile(object->model[2], 0x660054); + object->motion[3] = Hu3DJointMotionFile(object->model[2], 0x660055); + fn_1_1DFC(object, 2, 3, 0, 2); + object->model[5] = Hu3DModelCreateFile(0x66005B); + Hu3DModelPosSet(object->model[5], 0, 125, 800); + Hu3DModelAttrSet(object->model[5], 1); + Hu3DModelShadowSet(object->model[5]); + object->model[6] = Hu3DModelCreateFile(0x66005D); + object->motion[6] = Hu3DMotionIDGet(object->model[6]); + Hu3DModelPosSet(object->model[6], 25, 125, 900); + Hu3DModelAttrSet(object->model[6], 1); + fn_1_1DFC(object, 6, 6, 0, 2); + object->model[8] = Hu3DModelCreateFile(0x66005F); + object->motion[8] = Hu3DMotionIDGet(object->model[8]); + Hu3DModelAttrSet(object->model[8], 1); + fn_1_1DFC(object, 8, 8, 0, 1); +} + + +void fn_1_13FB4(omObjData* arg0, StructBss16C* arg1) +{ + Mtx matrix; + Hu3DData[arg0->model[7]].pos.y = fn_1_B08(180, 185, arg1->unk08++, 360); + Hu3DModelObjMtxGet(arg0->model[7], "effect", matrix); + Hu3DModelPosSet(arg0->model[8], matrix[0][3], matrix[1][3], matrix[2][3]); + if(arg1->unk08 >= 360) { + arg1->unk08 = 0; + } +} + +void fn_1_140A0(omObjData* arg0, StructBss16C* arg1) +{ + Mtx matrix; + Hu3DData[arg0->model[7]].pos.y += arg1->unk0C/100.0f; + Hu3DModelObjMtxGet(arg0->model[7], "effect", matrix); + Hu3DModelPosSet(arg0->model[8], matrix[0][3], matrix[1][3], matrix[2][3]); + arg1->unk0C += 2; +} + +void fn_1_1416C(omObjData* arg0, StructBss16C* arg1) +{ + int i; + Vec pos; + float rotY; + Hu3DModelPosSet(arg0->model[5], -180, 100, 800); + Hu3DModelRotSet(arg0->model[5], 0, 0, 0); + Hu3DModelAttrReset(arg0->model[5], 1); + for(i=0; i<60; i++) { + fn_1_BC8(); + if(i == 30) { + HuAudFXPlay(151); + } + if(i <= 30) { + pos.y = fn_1_A4C(0, 100, i+30, 60); + pos.x = fn_1_864(-180, -45, i, 30); + rotY = fn_1_984(0, -90, i, 30); + } else { + pos.x = fn_1_864(-45, 0, i-30, 30); + pos.y = fn_1_A4C(0, 25, i-30, 30); + rotY = fn_1_984(-90, -360, i-30, 30); + } + Hu3DModelPosSet(arg0->model[5], pos.x, pos.y, 800); + Hu3DModelRotSet(arg0->model[5], 0, rotY, 0); + } + arg1->unk04 = NULL; +} + +void fn_1_1449C(void) +{ + omObjData *obj; + lbl_1_bss_810.unk00 = obj = omAddObjEx(lbl_1_bss_790, 256, 16, 16, -1, NULL); + lbl_1_bss_810.unk04 = NULL; + lbl_1_bss_810.unk00->data = &lbl_1_bss_810; + fn_1_13C6C(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_810.unk04 != NULL) { + lbl_1_bss_810.unk04(obj, &lbl_1_bss_810); + } + } +} + +void fn_1_14868(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660062); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x660063); + object->motion[2] = Hu3DJointMotionFile(object->model[1], 0x660064); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x66006E); + object->motion[4] = Hu3DJointMotionFile(object->model[1], 0x66006F); + object->motion[5] = Hu3DJointMotionFile(object->model[1], 0x660069); + Hu3DModelPosSet(object->model[1], -180, 0, 800); + Hu3DModelRotSet(object->model[1], 0, 60, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 3, 0, 1); + lbl_1_data_C20 = object->model[1]; + lbl_1_data_C24[0] = object->motion[2]; + lbl_1_data_C24[1] = object->motion[2]; + HuPrcChildCreate(fn_1_123C8, 100, 8192, 0, HuPrcCurrentGet()); +} + +void fn_1_14A9C(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_7E8.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_7E8.unk00->work[0] = arg4; + lbl_1_bss_7E8.unk00->work[1] = arg1; + lbl_1_bss_7E8.unk00->work[2] = arg2+1; +} + +void fn_1_14B48(omObjData* arg0, StructBss16C* arg1) +{ + Vec pos = { -1000, 0, 810 }; + lbl_1_bss_810.unk04 = (void *)fn_1_1416C; + fn_1_1DFC(arg0, 1, 2, 15, 1); + fn_1_2D00(arg0, 1, pos, -1, 45, 10); + fn_1_1DFC(arg0, 1, 1, 15, 1); + arg1->unk04 = NULL; +} + +void fn_1_14C40(void) +{ + omObjData *obj; + lbl_1_bss_7E8.unk00 = obj = omAddObjEx(lbl_1_bss_790, 256, 16, 16, -1, NULL); + lbl_1_bss_7E8.unk04 = NULL; + lbl_1_bss_7E8.unk00->data = &lbl_1_bss_810; + fn_1_14868(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_7E8.unk04 != NULL) { + lbl_1_bss_7E8.unk04(obj, &lbl_1_bss_7E8); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_14F6C(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x66007D); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x66007E); + object->motion[2] = Hu3DJointMotionFile(object->model[1], 0x660080); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660081); + object->motion[4] = Hu3DJointMotionFile(object->model[1], 0x660086); + Hu3DModelPosSet(object->model[1], -600, 0, 800); + Hu3DModelRotSet(object->model[1], 0, 60, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 1, 0, 1); + CharModelEffectNpcInit(object->model[1], object->motion[2], 1, 13); +} + +void fn_1_15134(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_7C0.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_7C0.unk00->work[0] = arg4; + lbl_1_bss_7C0.unk00->work[1] = arg1; + lbl_1_bss_7C0.unk00->work[2] = arg2+1; +} + +void fn_1_151E0(omObjData* arg0, StructBss16C* arg1) +{ + Vec pos = { -800, 0, 800 }; + fn_1_1DFC(arg0, 1, 2, 15, 1); + fn_1_2D00(arg0, 1, pos, 60, 60, 10); + fn_1_1DFC(arg0, 1, 1, 15, 1); + arg1->unk04 = NULL; +} + +void fn_1_152C4(omObjData* arg0, StructBss16C* arg1) +{ + Vec pos = { -120, 0, 800 }; + fn_1_1DFC(arg0, 1, 2, 15, 1); + fn_1_2D00(arg0, 1, pos, 60, 60, 10); + fn_1_1DFC(arg0, 1, 1, 15, 1); + arg1->unk04 = NULL; +} + +void fn_1_153A8(void) +{ + omObjData *obj; + lbl_1_bss_7C0.unk00 = obj = omAddObjEx(lbl_1_bss_790, 256, 16, 16, -1, NULL); + lbl_1_bss_7C0.unk04 = NULL; + lbl_1_bss_7C0.unk00->data = &lbl_1_bss_7C0; + fn_1_14F6C(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_7C0.unk04 != NULL) { + lbl_1_bss_7C0.unk04(obj, &lbl_1_bss_7C0); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_15668(int arg0) +{ + int i; + int order[4]; + order[0] = 0; + for(i=1; i<4; i++) { + order[i] = order[i-1]+1; + if(order[i] >= 4) { + order[i] = 0; + } + if(arg0 == order[i]) { + lbl_1_bss_860.unk00 = i; + } + } + for(i=0; i<4; i++) { + fn_1_357C(&lbl_1_bss_860.unk30[i], order[i]); + } +} + +void fn_1_1574C(omObjData *object) +{ + int charNo = lbl_1_bss_860.unk30[lbl_1_bss_860.unk00].unk10; + object->model[1] = CharModelCreate(charNo, 1); + object->motion[1] = CharModelMotionCreate(charNo, 0x5F0000); + object->motion[2] = CharModelMotionCreate(charNo, 0x5F0002); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660028+charNo); + object->motion[4] = Hu3DJointMotionFile(object->model[1], 0x660030+charNo); + object->motion[5] = Hu3DJointMotionFile(object->model[1], 0x660038+charNo); + object->motion[6] = Hu3DJointMotionFile(object->model[1], 0x660000+charNo); + CharModelMotionDataClose(charNo); + Hu3DModelPosSet(object->model[1], 120, 0, 800); + Hu3DModelRotSet(object->model[1], 0, -60, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 3, 0, 1); +} + +void fn_1_15944(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_798.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_798.unk00->work[0] = arg4; + lbl_1_bss_798.unk00->work[1] = arg1; + lbl_1_bss_798.unk00->work[2] = arg2+1; +} + +void fn_1_159F0(void) +{ + omObjData *obj; + lbl_1_bss_798.unk00 = obj = omAddObjEx(lbl_1_bss_790, 256, 16, 16, -1, NULL); + lbl_1_bss_798.unk04 = NULL; + lbl_1_bss_798.unk00->data = &lbl_1_bss_798; + fn_1_1574C(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_798.unk04 != NULL) { + lbl_1_bss_798.unk04(obj, &lbl_1_bss_798); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_15CDC(void) +{ + StructBss24 *work = &lbl_1_bss_24; + work->unk08.x = 0; + work->unk08.y = 125; + work->unk08.z = 0; + work->unk20.x = -5; + work->unk20.y = 0; + work->unk20.z = 0; + work->unk38 = 1750; +} + +void fn_1_15D68(void) +{ + StructBss24 *work = &lbl_1_bss_24; + StructBss24 temp; + temp.unk08.x = 0; + temp.unk08.y = 100; + temp.unk08.z = 0; + temp.unk20.x = 0; + temp.unk20.y = 0; + temp.unk20.z = 0; + temp.unk38 = 1400; + fn_1_4FEC(work, &temp, work->unk40++, 120, 10); + +} + +void fn_1_15E58(void) +{ + StructBss24 *work = &lbl_1_bss_24; + work->unk14 = 0; + work->unk18 = Hu3DData[lbl_1_bss_810.unk00->model[7]].pos.y; + work->unk1C = 0; + work->unk2C = 0; + work->unk30 = 0; + work->unk34 = 0; + work->unk3C = fn_1_864(1200, 1400, work->unk40++, 240); + fn_1_3B04(work, 30); +} + +void fn_1_15F70(void) +{ + StructBss24 *work = &lbl_1_bss_24; + StructBss24 temp; + temp.unk08.x = 0; + temp.unk08.y = 160; + temp.unk08.z = 0; + temp.unk20.x = 0; + temp.unk20.y = 0; + temp.unk20.z = 0; + temp.unk38 = 1200; + fn_1_6004(work, &temp, work->unk40++, 10, 5); +} \ No newline at end of file diff --git a/src/REL/mstory2Dll/mg_miss.c b/src/REL/mstory2Dll/mg_miss.c new file mode 100644 index 00000000..6a9232ab --- /dev/null +++ b/src/REL/mstory2Dll/mg_miss.c @@ -0,0 +1,501 @@ +#include "REL/mstory2Dll.h" +#include "game/armem.h" +#include "game/board/main.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/objsub.h" + +typedef struct { + /* 0x000 */ s32 unk00; + /* 0x004 */ s32 unk04; + /* 0x008 */ s32 unk08; + /* 0x00C */ s32 unk0C; + /* 0x010 */ s32 unk10; + /* 0x014 */ s32 unk14; + /* 0x018 */ char unk18[0x18]; + /* 0x030 */ StructFn357C unk30[4]; + /* 0x100 */ s32 unk100; +} StructBssA34; // Size 0x104 + +StructBssA34 lbl_1_bss_A34; +StructBss16C lbl_1_bss_A0C; +StructBss16C lbl_1_bss_9E4; +StructBss16C lbl_1_bss_9BC; +StructBss16C lbl_1_bss_994; +StructBss16C lbl_1_bss_96C; +Process *lbl_1_bss_968; + +void fn_1_16FC0(void); +void fn_1_17338(void); +void fn_1_1774C(int arg0, int arg1, int arg2, int arg3, int arg4); +void fn_1_177F8(void); +void fn_1_17C44(void); +void fn_1_17E64(s32 arg0); +void fn_1_180D8(int arg0, int arg1, int arg2, int arg3, int arg4); +void fn_1_18184(void); +void fn_1_18408(void); +void fn_1_18494(void); + +void fn_1_16060(Process* arg0, s32 arg1) +{ + lbl_1_bss_968 = arg0; + lbl_1_bss_A34.unk0C = arg1; + fn_1_C30(); + fn_1_3668(255); + fn_1_2828(lbl_1_bss_968, fn_1_18408); + fn_1_3754(); + fn_1_17E64(arg1); + HuPrcChildCreate(fn_1_17338, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_177F8, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_17C44, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_18184, 100, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(fn_1_16FC0, 100, 8192, 0, HuPrcCurrentGet()); +} + +void fn_1_16178(omObjData *object) +{ + if(object->work[2]) { + object->work[2]--; + return; + } + if(object->work[2] == 0 && Hu3DMotionEndCheck(object->model[1])) { + fn_1_1DFC(object, 1, object->work[1], 15, 1); + object->work[0] = object->work[1] = object->work[2] = 0; + } +} + +void fn_1_16204(void) +{ + int posX = 16; + int posY = 40; + GXColor winColor = { 0, 0, 128, 128 }; + int i; + while(1) { + fn_1_BC8(); + printWin(posX, posY, 220, 130, &winColor); + if(lbl_1_bss_A0C.unk04 == NULL) { + print8(posX, posY, 1, "PROC_MAIN -> FALSE"); + } else { + print8(posX, posY, 1, "PROC_MAIN -> TRUE"); + } + if(lbl_1_bss_9E4.unk04 == NULL) { + print8(posX, posY+10, 1, "PROC_MAP -> FALSE"); + } else { + print8(posX, posY+10, 1, "PROC_MAP -> TRUE"); + } + if(lbl_1_bss_9BC.unk04 == NULL) { + print8(posX, posY+20, 1, "PROC_KOOPA -> FALSE"); + } else { + print8(posX, posY+20, 1, "PROC_KOOPA -> TRUE"); + } + if(lbl_1_bss_994.unk04 == NULL) { + print8(posX, posY+30, 1, "PROC_MKOOPA -> FALSE"); + } else { + print8(posX, posY+30, 1, "PROC_MKOOPA -> TRUE"); + } + if(lbl_1_bss_96C.unk04 == NULL) { + print8(posX, posY+40, 1, "PROC_PLAYER -> FALSE"); + } else { + print8(posX, posY+40, 1, "PROC_PLAYER -> TRUE"); + } + print8(posX, posY+60, 1, "P:%d W:%d", lbl_1_bss_A34.unk00, lbl_1_bss_A34.unk0C); + print8(posX, posY+80, 1, "NO) IDX:GRP:COM:DIF:PAD:CHR"); + for(i=0; i<4; i++) { + print8(posX, posY+90+(i*10), 1, "%2d) %3d:%3d:%3d:%3d:%3d:%3d", i, lbl_1_bss_A34.unk30[i].unk00, lbl_1_bss_A34.unk30[i].unk04, lbl_1_bss_A34.unk30[i].unk08, lbl_1_bss_A34.unk30[i].unk0C, lbl_1_bss_A34.unk30[i].unk14, lbl_1_bss_A34.unk30[i].unk10); + } + } +} + +void fn_1_165B0(void) +{ + lbl_1_bss_78[0] = HuAudSeqPlay(52); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet()); + fn_1_BE8(60); +} + +void fn_1_1661C(void) +{ + lbl_1_bss_A34.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_A34.unk0C); + fn_1_1774C(2, 1, 15, 0, 1); + fn_1_180D8(2, 3, 15, 0, 1); + HuAudCharVoicePlay(lbl_1_bss_A34.unk30[lbl_1_bss_A34.unk00].unk10, 302); + fn_1_6D78(lbl_1_bss_A34.unk04, 0x1F0010, -1, lbl_1_bss_9BC.unk00->model[1]); + fn_1_1D18(lbl_1_bss_A34.unk04, 0x250004); + fn_1_1774C(1, -1, 15, 1, 0); + fn_1_1A94(lbl_1_bss_A34.unk04); +} + +int fn_1_1670C(void) +{ + int result = 0; + HuWinInsertMesSet(lbl_1_bss_A34.unk04, 0x1E003C, 3); + fn_1_1D18(lbl_1_bss_A34.unk04, 0x1E002D); + fn_1_1AFC(lbl_1_bss_A34.unk04, 5); + lbl_1_bss_A34.unk08 = fn_1_7064(0x1E0035, lbl_1_bss_A34.unk0C); + fn_1_1D18(lbl_1_bss_A34.unk08, 0x1E0035); + result = fn_1_1C64(lbl_1_bss_A34.unk08); + fn_1_1D18(lbl_1_bss_A34.unk08, 0x250004); + fn_1_71DC(lbl_1_bss_A34.unk08); + if(result) { + HuAudFXPlay(lbl_1_data_0[6][2]); + fn_1_1774C(3, 1, 15, 1, 0); + fn_1_1D18(lbl_1_bss_A34.unk04, 0x1F0012); + fn_1_1AFC(lbl_1_bss_A34.unk04, -1); + fn_1_1D18(lbl_1_bss_A34.unk04, 0x250004); + fn_1_1774C(1, -1, 15, 1, 0); + fn_1_180D8(4, 1, 15, 0, 1); + } + return result; +} + +int fn_1_168B0(void) +{ + int result = 0; + fn_1_1D18(lbl_1_bss_A34.unk04, 0x1E0005); + fn_1_1AFC(lbl_1_bss_A34.unk04, 5); + lbl_1_bss_A34.unk08 = fn_1_7064(0x1E0035, lbl_1_bss_A34.unk0C); + fn_1_1D18(lbl_1_bss_A34.unk08, 0x1E0035); + result = fn_1_1BA8(lbl_1_bss_A34.unk08, 1); + fn_1_1D18(lbl_1_bss_A34.unk08, 0x250004); + fn_1_71DC(lbl_1_bss_A34.unk08); + return result; +} + +void fn_1_16984(void) +{ + HuAudSeqFadeOut(lbl_1_bss_78[0], 3000); + fn_1_3854(&lbl_1_bss_24); + fn_1_2750(fn_1_18494); + fn_1_BE8(150); +} + +void fn_1_169D4(void) +{ + +} + +void fn_1_169D8(int arg0) +{ + omOvlHisData* his; + + if (arg0 != 0) { + HuAudSeqFadeOut(lbl_1_bss_78[0], 1000); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + do { + fn_1_BC8(); + } while (WipeStatGet() != 0); + CharModelKill(-1); + his = omOvlHisGet(0); + omOvlHisChg(0, OVL_MSTORY2, 3, his->stat); + if (arg0 == 0) { + HuAudSeqAllFadeOut(1000); + HuAudSStreamAllFadeOut(1000); + GWMGAvailSet(450); + GWSystem.mg_next = 450-401; + omOvlCallEx(OVL_M450, 1, 0, 0); + } else { + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_16ACC(omObjData* arg0, StructBss16C* arg1) +{ + int mode = 0; + fn_1_165B0(); + fn_1_1661C(); + lbl_1_bss_A34.unk04 = fn_1_185C(1, 0, 21, 2, lbl_1_bss_A34.unk0C); + while(1) { + fn_1_BC8(); + if(fn_1_1670C()) { + mode = 0; + break; + } else if(fn_1_168B0()) { + mode = 1; + break; + } + } + fn_1_1A94(lbl_1_bss_A34.unk04); + switch(mode) { + case 0: + fn_1_16984(); + break; + case 1: + break; + } + fn_1_169D8(mode); + arg1->unk04 = NULL; +} + +void fn_1_16FC0(void) +{ + omObjData *obj; + lbl_1_bss_A0C.unk00 = obj = omAddObjEx(lbl_1_bss_968, 256, 16, 16, -1, NULL); + lbl_1_bss_A0C.unk04 = (void *)fn_1_16ACC; + lbl_1_bss_A0C.unk00->data = &lbl_1_bss_A0C; + while(1) { + fn_1_BC8(); + if(lbl_1_bss_A0C.unk04 != NULL) { + lbl_1_bss_A0C.unk04(obj, &lbl_1_bss_A0C); + } + } +} + +void fn_1_17074(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660052); + object->motion[1] = Hu3DMotionIDGet(object->model[1]); + Hu3DModelShadowMapObjSet(object->model[1], "base_story-base"); + fn_1_1DFC(object, 1, 1, 0, 1); + object->model[2] = Hu3DModelCreateFile(0x660053); + object->motion[2] = Hu3DJointMotionFile(object->model[2], 0x660054); + object->motion[3] = Hu3DJointMotionFile(object->model[2], 0x660055); + fn_1_1DFC(object, 2, 2, 0, 2); + object->model[5] = Hu3DModelCreateFile(0x660059); + object->motion[5] = Hu3DMotionIDGet(object->model[5]); + Hu3DModelPosSet(object->model[5], 0, 80, 460); + Hu3DModelShadowSet(object->model[5]); + fn_1_1DFC(object, 5, 5, 0, 2); + object->model[6] = Hu3DModelCreateFile(0x66005A); + object->motion[6] = Hu3DMotionIDGet(object->model[6]); + Hu3DModelHookSet(object->model[5], "koopasgbox_fix-effect_fook2", object->model[6]); + fn_1_1DFC(object, 6, 6, 0, 2); +} + +void fn_1_1727C(omObjData* arg0, StructBss16C* arg1) +{ + Hu3DData[arg0->model[5]].pos.y = fn_1_B08(80, 90, arg1->unk08++, 360); + if(arg1->unk08 >= 360) { + arg1->unk08 = 0; + } +} + +void fn_1_17338(void) +{ + omObjData *obj; + lbl_1_bss_9E4.unk00 = obj = omAddObjEx(lbl_1_bss_968, 256, 16, 16, -1, NULL); + lbl_1_bss_9E4.unk04 = (void *)fn_1_1727C; + lbl_1_bss_9E4.unk00->data = &lbl_1_bss_9E4; + fn_1_17074(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_9E4.unk04 != NULL) { + lbl_1_bss_9E4.unk04(obj, &lbl_1_bss_9E4); + } + } +} + +void fn_1_175CC(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x660062); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x660063); + object->motion[2] = Hu3DJointMotionFile(object->model[1], 0x660066); + object->motion[3] = Hu3DJointMotionFile(object->model[1], 0x660069); + Hu3DModelPosSet(object->model[1], 0, 0, 200); + Hu3DModelRotSet(object->model[1], 0, 0, 0); + Hu3DModelScaleSet(object->model[1], 1.6f, 1.6f, 1.6f); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 1, 0, 1); +} + +void fn_1_1774C(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_9BC.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_9BC.unk00->work[0] = arg4; + lbl_1_bss_9BC.unk00->work[1] = arg1; + lbl_1_bss_9BC.unk00->work[2] = arg2+1; +} + +void fn_1_177F8(void) +{ + omObjData *obj; + lbl_1_bss_9BC.unk00 = obj = omAddObjEx(lbl_1_bss_968, 256, 16, 16, -1, NULL); + lbl_1_bss_9BC.unk04 = NULL; + lbl_1_bss_9BC.unk00->data = &lbl_1_bss_9E4; + fn_1_175CC(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_9BC.unk04 != NULL) { + lbl_1_bss_9BC.unk04(obj, &lbl_1_bss_9BC); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_17A70(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(0x66007D); + object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x66007E); + Hu3DModelPosSet(object->model[1], -120, 0, 800); + Hu3DModelRotSet(object->model[1], 0, 135, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 1, 0, 1); +} + +void fn_1_17B98(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_994.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_994.unk00->work[0] = arg4; + lbl_1_bss_994.unk00->work[1] = arg1; + lbl_1_bss_994.unk00->work[2] = arg2+1; +} + +void fn_1_17C44(void) +{ + omObjData *obj; + lbl_1_bss_994.unk00 = obj = omAddObjEx(lbl_1_bss_968, 256, 16, 16, -1, NULL); + lbl_1_bss_994.unk04 = NULL; + lbl_1_bss_994.unk00->data = &lbl_1_bss_994; + fn_1_17A70(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_994.unk04 != NULL) { + lbl_1_bss_994.unk04(obj, &lbl_1_bss_994); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_17E64(s32 arg0) +{ + int i; + int order[4]; + order[0] = 0; + for(i=1; i<4; i++) { + order[i] = order[i-1]+1; + if(order[i] >= 4) { + order[i] = 0; + } + if(arg0 == order[i]) { + lbl_1_bss_A34.unk00 = i; + } + } + for(i=0; i<4; i++) { + fn_1_357C(&lbl_1_bss_A34.unk30[i], order[i]); + } +} + +void fn_1_17F48(omObjData *object) +{ + int charNo = lbl_1_bss_A34.unk30[lbl_1_bss_A34.unk00].unk10; + object->model[1] = CharModelCreate(charNo, 1); + object->motion[1] = CharModelMotionCreate(charNo, 0x5F0000); + object->motion[2] = CharModelMotionCreate(charNo, 0x5F0018); + object->motion[3] = CharModelMotionCreate(charNo, 0x5F0034); + object->motion[4] = CharModelMotionCreate(charNo, 0x5F0048); + CharModelVoiceEnableSet(charNo, object->motion[2], FALSE); + CharModelMotionDataClose(charNo); + Hu3DModelPosSet(object->model[1], 120, 0, 800); + Hu3DModelRotSet(object->model[1], 0, -135, 0); + Hu3DModelScaleSet(object->model[1], 1, 1, 1); + Hu3DModelShadowSet(object->model[1]); + fn_1_1DFC(object, 1, 1, 0, 1); +} + +void fn_1_180D8(int arg0, int arg1, int arg2, int arg3, int arg4) +{ + fn_1_1DFC(lbl_1_bss_96C.unk00, 1, arg0, arg2, arg3); + if(arg3 == 1) { + arg4 = 0; + } + lbl_1_bss_96C.unk00->work[0] = arg4; + lbl_1_bss_96C.unk00->work[1] = arg1; + lbl_1_bss_96C.unk00->work[2] = arg2+1; +} + +void fn_1_18184(void) +{ + omObjData *obj; + lbl_1_bss_96C.unk00 = obj = omAddObjEx(lbl_1_bss_968, 256, 16, 16, -1, NULL); + lbl_1_bss_96C.unk04 = NULL; + lbl_1_bss_96C.unk00->data = &lbl_1_bss_96C; + fn_1_17F48(obj); + while(1) { + fn_1_BC8(); + if(lbl_1_bss_96C.unk04 != NULL) { + lbl_1_bss_96C.unk04(obj, &lbl_1_bss_96C); + } + if(obj->work[0]) { + if(obj->work[2]) { + obj->work[2]--; + } else if(obj->work[2] == 0 && Hu3DMotionEndCheck(obj->model[1])) { + fn_1_1DFC(obj, 1, obj->work[1], 15, 1); + obj->work[0] = obj->work[1] = obj->work[2] = 0; + } + } + } +} + +void fn_1_18408(void) +{ + StructBss24 *work = &lbl_1_bss_24; + work->unk08.x = 0; + work->unk08.y = 125; + work->unk08.z = 0; + work->unk20.x = -5; + work->unk20.y = 0; + work->unk20.z = 0; + work->unk38 = 1750; +} + +void fn_1_18494(void) +{ + StructBss24 *work = &lbl_1_bss_24; + StructBss24 temp; + if(work->unk40 == 50) { + fn_1_1DFC(lbl_1_bss_9E4.unk00, 5, 5, 0, 0); + fn_1_1DFC(lbl_1_bss_9E4.unk00, 6, 6, 0, 0); + HuAudFXPlay(161); + } + temp.unk08.x = 0; + temp.unk08.y = 130; + temp.unk08.z = 460; + temp.unk20.x = 0; + temp.unk20.y = 0; + temp.unk20.z = 0; + temp.unk38 = 150; + fn_1_4FEC(work, &temp, work->unk40, 180, 10); + if(work->unk40++ >= 90) { + if(work->unk40 == 91) { + lbl_1_bss_88[0] = HuAudFXPlay(32); + } + work->unk20.x = fn_1_864(work->unk20.x, -45, work->unk40-90, 90); + Hu3DData[lbl_1_bss_9E4.unk00->model[5]].rot.x = fn_1_864(0, 45, work->unk40-90, 90); + } +} \ No newline at end of file diff --git a/src/REL/mstory2Dll/save.c b/src/REL/mstory2Dll/save.c new file mode 100644 index 00000000..8bdf3535 --- /dev/null +++ b/src/REL/mstory2Dll/save.c @@ -0,0 +1,118 @@ +#include "REL/mstoryDll.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/flag.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/saveload.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" + +s32 lbl_1_bss_D14; +Process *lbl_1_bss_D10; + +s32 fn_1_1B560(s32 arg0) +{ + if (arg0 == 0 && _CheckFlag(FLAG_ID_MAKE(0, 2))) { + return 1; + } + if (arg0 == 1 && _CheckFlag(FLAG_ID_MAKE(0, 3))) { + return 1; + } + if (arg0 == 2 && _CheckFlag(FLAG_ID_MAKE(0, 4))) { + return 1; + } + if (arg0 == 3 && _CheckFlag(FLAG_ID_MAKE(0, 5))) { + return 1; + } + if (arg0 == 4 && _CheckFlag(FLAG_ID_MAKE(0, 6))) { + return 1; + } + if (arg0 == 5 && _CheckFlag(FLAG_ID_MAKE(0, 7))) { + return 1; + } + return 0; +} + +void fn_1_1B64C(void) +{ + float sp8[2]; + s32 temp_r30; + s32 var_r29; + s32 var_r31; + + temp_r30 = 1; + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + if (SLSaveFlagGet() == 0) { + lbl_1_bss_D14 = 1; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } + } + espInit(); + HuPrcVSleep(); + var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_WIN, 32), 5000, 0); + espPosSet(var_r29, 288.0f, 240.0f); + espAttrReset(var_r29, 4); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + if (SLSaveFlagGet() == 1) { + HuWinInit(1); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(30, 22)); + var_r31 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); + winData[var_r31].active_pad = 1; + HuWinAttrSet(var_r31, 0x10); + HuWinExAnimIn(var_r31); + HuWinMesSet(var_r31, MAKE_MESSID(30, 22)); + temp_r30 = HuWinChoiceGet(var_r31, 0); + HuWinExAnimOut(var_r31); + HuWinExCleanup(var_r31); + if (SLSaveFlagGet() == 1 && temp_r30 == 0) { + if(omovlstat) { + GWGameStat.story_continue = 0; + } + SLCommonSet(); + SLSaveBoardStory(); + SLSave(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + lbl_1_bss_D14 = 1; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_1B870(void) +{ + _SetFlag(9); + HuPrcChildCreate(fn_1_1B64C, 100, 0x2000, 0, HuPrcCurrentGet()); + do { + fn_1_BC8(); + } while (lbl_1_bss_D14 != 1); + if(omovlstat == 0) { + omOvlGotoEx(OVL_MSTORY2, 1, 4, 0); + } else { + omOvlReturnEx(omovlhisidx, 1); + } + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_1B90C(Process *arg0) +{ + lbl_1_bss_D10 = arg0; + HuPrcChildCreate(fn_1_1B870, 100, 0x2000, 0, HuPrcCurrentGet()); +} diff --git a/src/REL/mstory4Dll/main.c b/src/REL/mstory4Dll/main.c index 1bb809d0..e5fce452 100644 --- a/src/REL/mstory4Dll/main.c +++ b/src/REL/mstory4Dll/main.c @@ -583,7 +583,7 @@ void fn_1_13A0(void) } } character = GWPlayerCfg[0].character; - GWSystem.unk0B[1] = character; + GWSystem.unk0C = character; GWPlayer[0].character = GWPlayerCfg[0].character; GWPlayer[1].character = GWPlayerCfg[1].character; GWPlayer[2].character = GWPlayerCfg[2].character;