Match rest of mstory2 (#521)

This commit is contained in:
Liam Coleman 2025-01-11 00:04:16 -06:00 committed by GitHub
parent 98a95407ff
commit f28e9d19aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 2142 additions and 13 deletions

View file

@ -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

View file

@ -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

View file

@ -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(

View file

@ -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);

View file

@ -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)

View file

@ -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)

View file

@ -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) {

676
src/REL/mstory2Dll/ending.c Normal file
View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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);
}
}

118
src/REL/mstory2Dll/save.c Normal file
View file

@ -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());
}

View file

@ -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;