diff --git a/include/dolphin/os/OSReset.h b/include/dolphin/os/OSReset.h index a4cb6416..d420a6f8 100644 --- a/include/dolphin/os/OSReset.h +++ b/include/dolphin/os/OSReset.h @@ -39,6 +39,8 @@ struct OSResetFunctionInfo { OSResetFunctionInfo* prev; }; +u32 OSGetResetCode(void); + #ifdef __cplusplus } #endif diff --git a/include/functions.h b/include/functions.h index 91099844..bdda3cf9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -6,7 +6,6 @@ void Hu3DLayerHookSet(short layer, void (*func)(short layer)); void Hu3D2Dto3D(Vec*, s32, Vec*); -void Hu3DModelLightInfoSet(s32, s32); void Hu3DBGColorSet(u8, u8, u8); void Hu3DCameraCreate(s32); void Hu3DCameraPerspectiveSet(s32, f32, f32, f32, f32); @@ -50,8 +49,6 @@ void BoardWinCreate(s16, s32, s32); void BoardWinKill(void); void BoardWinWait(void); -s32 HuTHPFrameGet(void); - s32 rand8(void); void fn_8005D8E8(void); diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 64fb0b25..c3306522 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -8,6 +8,10 @@ #include "game/hsfformat.h" #include "game/sprite.h" #include "game/init.h" +#include "game/data.h" +#include "game/memory.h" + +#define Hu3DModelCreateFile(data_id) (Hu3DModelCreate(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) typedef struct model_data { u8 unk_00; @@ -135,7 +139,6 @@ void Hu3DMotionExec(s16, s16, f32, s32); f32 Hu3DMotionMaxTimeGet(s16); /* extern */ s16 Hu3DMotionModelCreate(s16); /* extern */ void Hu3DMotionShapeSet(s16, s16); /* extern */ -HsfData* LoadHSF(s32); /* extern */ void MakeDisplayList(s16, HsfData*); /* extern */ void ClusterAdjustObject(HsfData*, HsfData*); /* extern */ HsfObject* Hu3DObjDuplicate(HsfData*, u32); /* extern */ @@ -145,7 +148,6 @@ void Hu3DLLightKill(s16, s16); /* extern */ s32 Hu3DMotionKill(s16); void Hu3DModelKill(s16); void Hu3DParManAllKill(void); -s32 MakeObjectName(s32); f32 Hu3DMotionMotionMaxTimeGet(s16); void Hu3DMotionStartEndSet(s16, f32, f32); void Hu3DMotionTimeSet(s16, f32); @@ -158,7 +160,7 @@ void Hu3DBGColorSet(u8, u8, u8); void Hu3DLayerHookSet(s16, void (*)(s16)); void Hu3DPauseSet(s32); void Hu3DNoSyncSet(s32); -s16 Hu3DModelCreate(s32); +s16 Hu3DModelCreate(void *); s16 Hu3DModelLink(s16); s16 Hu3DHookFuncCreate(HsfData*); void Hu3DModelAllKill(void); @@ -176,7 +178,7 @@ void Hu3DModelClusterAttrSet(s16, s16, s32); void Hu3DModelClusterAttrReset(s16, s16, s32); void Hu3DModelCameraSet(s16, u16); void Hu3DModelLayerSet(s16, s16); -HsfObject* Hu3DModelObjPtrGet(s16, s32); +HsfObject* Hu3DModelObjPtrGet(s16, char *); void Hu3DModelTPLvlSet(s16, f32); void Hu3DModelHiliteMapSet(s16, AnimData*); void Hu3DModelShadowSet(s16); @@ -184,11 +186,11 @@ void Hu3DModelShadowReset(s16); void Hu3DModelShadowDispOn(s16); void Hu3DModelShadowDispOff(s16); void Hu3DModelShadowMapSet(s16); -void Hu3DModelShadowMapObjSet(s16, s32); +void Hu3DModelShadowMapObjSet(s16, char *); void Hu3DModelAmbSet(s16, f32, f32, f32); -void Hu3DModelHookSet(s16, s32, s16); +void Hu3DModelHookSet(s16, char *, s16); void Hu3DModelHookReset(s16); -void Hu3DModelHookObjReset(s16, s32); +void Hu3DModelHookObjReset(s16, char *); void Hu3DModelProjectionSet(s16, s16); void Hu3DModelProjectionReset(s16, s16); void Hu3DModelHiliteTypeSet(s16, s16); @@ -203,6 +205,7 @@ void Hu3DCameraKill(s32); void Hu3DCameraAllKill(void); void Hu3DCameraSet(s32, Mtx); BOOL Hu3DModelCameraInfoSet(s16, u16); +BOOL Hu3DModelLightInfoSet(s16, u16); s16 Hu3DModelCameraCreate(s16, u16); void Hu3DCameraMotionOn(s16, s8); void Hu3DCameraMotionStart(s16, u16); diff --git a/include/game/sprite.h b/include/game/sprite.h index 1759e291..d1b87064 100644 --- a/include/game/sprite.h +++ b/include/game/sprite.h @@ -2,6 +2,8 @@ #define _GAME_SPRITE_H #include "dolphin.h" +#include "game/data.h" +#include "game/memory.h" #define SPRITE_MAX 384 #define SPRITE_GROUP_MAX 256 @@ -152,6 +154,7 @@ typedef struct sprite_group_data { extern SpriteData HuSprData[SPRITE_MAX]; extern SpriteGroupData HuSprGrpData[SPRITE_GROUP_MAX]; +#define HuSprAnimReadFile(data_id) (HuSprAnimRead(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) void HuSprInit(void); void HuSprClose(void); diff --git a/include/game/thpmain.h b/include/game/thpmain.h new file mode 100644 index 00000000..37ac9565 --- /dev/null +++ b/include/game/thpmain.h @@ -0,0 +1,18 @@ +#ifndef _GAME_THPMAIN_H +#define _GAME_THPMAIN_H + +#include "dolphin/types.h" + +s16 HuTHPSprCreateVol(char *path, s16 loop, s16 prio, float volume); +s16 HuTHPSprCreate(char *path, s16 loop, s16 prio); +s16 HuTHP3DCreateVol(char *path, s16 loop, float volume); +s16 HuTHP3DCreate(char *path, s16 loop); +void HuTHPStop(void); +void HuTHPClose(void); +void HuTHPRestart(void); +int HuTHPEndCheck(void); +int HuTHPFrameGet(void); +int HuTHPTotalFrameGet(void); +void HuTHPSetVolume(int left, int right); + +#endif \ No newline at end of file diff --git a/src/REL/bootDll/bootDll.c b/src/REL/bootDll/bootDll.c index 0f32e06b..130ae49b 100644 --- a/src/REL/bootDll/bootDll.c +++ b/src/REL/bootDll/bootDll.c @@ -1,137 +1,433 @@ #include "common.h" -#include "REL/executor.h" +#include "game/process.h" +#include "game/data.h" +#include "game/sprite.h" +#include "game/object.h" +#include "game/audio.h" +#include "game/memory.h" +#include "game/hsfman.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/window.h" +#include "game/thpmain.h" +#include "math.h" -extern s16 lbl_1_bss_E; -extern s16 lbl_1_data_38[]; +#define HU_PAD_BTN_ALL (HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3]) +#define HU_PAD_BTNDOWN_ALL (HuPadBtnDown[0] | HuPadBtnDown[1] | HuPadBtnDown[2] | HuPadBtnDown[3]) +#define HU_PAD_DSTK_ALL (HuPadDStkRep[0] | HuPadDStkRep[1] | HuPadDStkRep[2] | HuPadDStkRep[3]) -//TODO: fill these in correctly -Vec3f lbl_1_rodata_10 = {0.0f, 0.0f, 0.0f}; -Vec3f lbl_1_rodata_1C = {0.0f, 0.0f, 0.0f}; +extern int lbl_801D3A00; -extern f32 lbl_1_bss_1C; -extern Vec3f lbl_1_bss_24; -extern Vec3f lbl_1_bss_3C; -f32 lbl_1_rodata_28; -s32 lbl_1_bss_54; +Process *lbl_1_bss_54; +Vec lbl_1_bss_3C[2]; +Vec lbl_1_bss_24[2]; +float lbl_1_bss_1C[2]; +s16 lbl_1_bss_E[7]; -void fn_1_A0(void) { - UnkOvl* temp_r3; +s16 lbl_1_bss_8[3]; +s16 lbl_1_bss_6; - OSReport("******* Boot ObjectSetup *********\n"); - lbl_1_bss_54 = omInitObjMan(0x32, 0x2000); - lbl_1_bss_3C.x = 0.0f; - lbl_1_bss_3C.y = 0.0f; - lbl_1_bss_3C.z = 0.0f; - lbl_1_bss_24.x = 0.0f; - lbl_1_bss_24.y = 0.0f; - lbl_1_bss_24.z = 0.0f; - lbl_1_bss_1C = 0.0f; - Hu3DCameraCreate(1); - Hu3DCameraPerspectiveSet(1, 0.0f, 0.0f, 0.0f, 0.0f); - Hu3DCameraViewportSet(1, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); - HuPrcCreate(fn_1_26C, 0x64, 0x3000, 0); - Hu3DBGColorSet(0, 0, 0); - temp_r3 = omOvlHisGet(0); - omOvlHisChg(0, temp_r3->unk0, 1, temp_r3->unk8); +s16 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void fn_1_26C(void); +void fn_1_9F8(void); +void fn_1_AC0(void); +void fn_1_2100(void); +BOOL fn_1_2474(void); + +void *logoReadNintendo(void); + +void ModuleProlog(void) +{ + omOvlHisData *history; + OSReport("******* Boot ObjectSetup *********\n"); + lbl_1_bss_54 = omInitObjMan(50, 8192); + lbl_1_bss_3C[0].x = -67; + lbl_1_bss_3C[0].y = 40; + lbl_1_bss_3C[0].z = 0; + lbl_1_bss_24[0].x = 260; + lbl_1_bss_24[0].y = -103; + lbl_1_bss_24[0].z = -18; + lbl_1_bss_1C[0] = 2885; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 30, 20, 15000, 1.2); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + HuPrcCreate(fn_1_26C, 100, 12288, 0); + Hu3DBGColorSet(0, 0, 0); + history = omOvlHisGet(0); + omOvlHisChg(0, history->overlay, 1, history->stat); } -//void fn_1_26C(void) - -void fn_1_9F8(void) { - s32 temp_r30; - s32 i; - - temp_r30 = fn_800578E4(); - for (i = 0; lbl_1_data_38[i*2] != -1; i++) { - if (temp_r30 == lbl_1_data_38[i*2]) { - fn_80045F74(lbl_1_bss_E, i + 0x360000); - } - if (temp_r30 == lbl_1_data_38[i*2+1]) { - fn_80044920(lbl_1_bss_E); - } - } +void fn_1_26C(void) +{ + AnimData *data; + s16 group; + s16 sprite_nintendo; + s16 sprite_hudson; + s16 i; + OSTick tick_prev; + Process *curr = HuPrcCurrentGet(); + if(omovlevtno == 0) { + fn_1_AC0(); + } + group = HuSprGrpCreate(2); + data = HuSprAnimRead(logoReadNintendo()); + sprite_nintendo = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite_nintendo); + HuSprPosSet(group, 0, 288, 240); + HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); + if(omovlevtno != 0) { + HuAudSndGrpSetSet(0); + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1)); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + HuWinInit(1); + fn_1_2100(); + lbl_801D3A00 = 1; + } else { + s16 group_thp; + BOOL skip_wait; + float win_size[2]; + s16 sprite_thp; + for(i=0; i<4; i++) { + GWPlayerCfg[i].pad_idx = i; + } + repeat: + HuSprAttrReset(group, 0, SPRITE_ATTR_HIDDEN); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + WipeColorSet(255, 255, 255); + if(!lbl_801D3A00) { + tick_prev = OSGetTick(); + fn_800498F0(); + HuWindowInit(); + MGSeqInit(); + HuWinInit(1); + fn_1_2100(); + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1)); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 3000) { + HuPrcVSleep(); + } + } else { + for(i=0; i<180; i++) { + if(HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + break; + } + HuPrcVSleep(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(group, 1, SPRITE_ATTR_HIDDEN); + HuPrcSleep(60); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + if(!lbl_801D3A00) { + void *group_samp; + tick_prev = OSGetTick(); + group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); + msmSysLoadGroup(0, group_samp, 0); + HuMemDirectFree(group_samp); + while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 3000) { + HuPrcVSleep(); + } + } else { + for(i=0; i<180; i++) { + if(HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + break; + } + HuPrcVSleep(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + tick_prev = OSGetTick(); + if(!lbl_801D3A00) { + HuAudSndGrpSetSet(0); + lbl_801D3A00 = 1; + } + while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 1000) { + HuPrcVSleep(); + } + HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + group_thp = HuSprGrpCreate(1); + sprite_thp = HuTHPSprCreateVol("movie/opmov_a00.thp", 0, 100, 122); + HuSprGrpMemberSet(group_thp, 0, sprite_thp); + HuSprPosSet(group_thp, 0, 288, 240); + HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); + lbl_1_bss_E[0] = HuWinCreate(-10000, 448-win_size[1], win_size[0], win_size[1], 0); + HuWinMesSpeedSet(lbl_1_bss_E[0], 0); + HuWinBGTPLvlSet(lbl_1_bss_E[0], 0); + HuWinPriSet(lbl_1_bss_E[0], 10); + HuWinAttrSet(lbl_1_bss_E[0], 0x800); + HuPrcSleep(5); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + skip_wait = FALSE; + while(!HuTHPEndCheck()) { + fn_1_9F8(); + if(HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + skip_wait = TRUE; + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuWinKill(lbl_1_bss_E[0]); + HuTHPClose(); + HuPrcVSleep(); + HuSprGrpKill(group_thp); + if(!skip_wait) { + HuPrcSleep(60); + } + skip_wait = FALSE; + } + if(!fn_1_2474()) { + HuPrcSleep(60); + goto repeat; + } + WipeColorSet(255, 255, 255); + HuAudSStreamAllFadeOut(500); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuPrcVSleep(); + if(omSysExitReq) { + omOvlReturnEx(1, 1); + } else { + omOvlCallEx(OVL_MODESEL, 1, 0, 0); + } + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = -1; + } + HuPrcEnd(); + do { + HuPrcVSleep(); + } while(1); } -//fn_1_AC0 +s16 lbl_1_data_38[] = { + 1686, 1785, + 1850, 1936, + 1993, 2097, + 2135, 2245, + 2258, 2320, + -1, -1, +}; -//fn_1_1178 - -//fn_1_152C - -typedef struct temp2 { - s16 unk0; - s16 unk2; - s16 unk4; -} temp2; - -s32 fn_80008364(s32, s32, s32); -s32 fn_8000DD24(void); -s32 fn_8000DE48(s32, s32, s32); -s16 fn_8000E0F8(s32); -void fn_8000E520(s16, s32, s32); -void fn_8000E808(s16, s32, s32); -s32 fn_8000E960(s16, s32, f32, f32); -void fn_8000F038(s16, s32, s32); -s16 fn_800204D0(s32); -void fn_80021228(s16, s32); -void fn_80022420(s16, s32); -void Hu3DModelLightInfoSet(s16, s32); -extern s16 lbl_1_bss_6; -extern temp2 lbl_1_bss_8; -extern f32 lbl_1_rodata_48; -extern f32 lbl_1_rodata_4C; -extern f32 lbl_1_rodata_98; -extern f32 lbl_1_rodata_9C; -extern f32 lbl_1_rodata_A0; - -void fn_1_2100(void) { - s32 temp_r3_2; - s32 temp_r3; - s16 temp_r3_3; - - temp_r3_3 = fn_800204D0(fn_80008364(0x74000B, 0x10000000, 2)); - lbl_1_bss_8.unk0 = temp_r3_3; - fn_80021228(temp_r3_3, 1); - fn_80021228(temp_r3_3, 0x40000001); - temp_r3_3 = fn_800204D0(fn_80008364(0x74000C, 0x10000000, 2)); - lbl_1_bss_8.unk2 = temp_r3_3; - fn_80021228(temp_r3_3, 1); - fn_80021228(temp_r3_3, 0x40000001); - temp_r3_3 = fn_800204D0(fn_80008364(0x74000D, 0x10000000, 2)); - lbl_1_bss_8.unk4 = temp_r3_3; - fn_80021228(temp_r3_3, 1); - fn_80021228(temp_r3_3, 0x40000001); - fn_80022420(temp_r3_3, 1); - Hu3DModelLightInfoSet(temp_r3_3, 1); - lbl_1_bss_6 = fn_8000E0F8(4); - fn_80008364(0x740008, 0x10000000, 2); - temp_r3 = fn_8000DD24(); - temp_r3_2 = fn_8000DE48(temp_r3, 0, 0); - fn_8000E520(lbl_1_bss_6, 0, temp_r3_2); - fn_8000E808(lbl_1_bss_6, 0, 4); - fn_8000F038(lbl_1_bss_6, 0, 0x7F); - fn_8000E960(lbl_1_bss_6, 0, lbl_1_rodata_48, lbl_1_rodata_4C); - fn_80008364(0x74000A, 0x10000000, 2); - temp_r3 = fn_8000DD24(); - temp_r3_2 = fn_8000DE48(temp_r3, 1, 0); - fn_8000E520(lbl_1_bss_6, 1, temp_r3_2); - fn_8000E808(lbl_1_bss_6, 1, 4); - fn_8000E960(lbl_1_bss_6, 1, lbl_1_rodata_48, lbl_1_rodata_98); - fn_80008364(0x740002, 0x10000000, 2); - temp_r3 = fn_8000DD24(); - temp_r3_2 = fn_8000DE48(temp_r3, 2, 0); - fn_8000E520(lbl_1_bss_6, 2, temp_r3_2); - fn_8000E808(lbl_1_bss_6, 2, 0xC); - fn_8000E960(lbl_1_bss_6, 2, lbl_1_rodata_48, lbl_1_rodata_9C); - fn_80008364(0x740009, 0x10000000, 2); - temp_r3 = fn_8000DD24(); - temp_r3_2 = fn_8000DE48(temp_r3, 0, 0); - fn_8000E520(lbl_1_bss_6, 3, temp_r3_2); - fn_8000E808(lbl_1_bss_6, 3, 0xC); - fn_8000E960(lbl_1_bss_6, 3, lbl_1_rodata_48, lbl_1_rodata_A0); +void fn_1_9F8(void) +{ + int frame = HuTHPFrameGet(); + int i; + for(i=0; lbl_1_data_38[i*2] != -1; i++) { + if(frame == lbl_1_data_38[i*2]) { + HuWinMesSet(lbl_1_bss_E[0], MAKE_MESSID(54, i)); + } + if(frame == lbl_1_data_38[(i*2)+1]) { + HuWinHomeClear(lbl_1_bss_E[0]); + } + } } -//fn_1_2474 +u16 lbl_1_data_50[] = { + 236, 313, + 353, 313 +}; -//fn_1_2944 \ No newline at end of file +void fn_1_AC0(void) +{ + s16 i; + s16 option; + s16 group; + s16 sprite; + AnimData *data; + option = 0; + if(OSGetResetCode() != OS_RESET_RESTART) { + return; + } + if(VIGetDTVStatus() != VI_NON_INTERLACE) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + return; + } + if(OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_OFF && !(HU_PAD_BTN_ALL & PAD_BUTTON_B)) { + return; + } + if(OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON) { + VIConfigure(&GXNtsc480IntDf); + VIFlush(); + } + group = HuSprGrpCreate(3); + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 3)); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 6)); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite); + HuSprPosSet(group, 1, lbl_1_data_50[option*2], lbl_1_data_50[(option*2)+1]); + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 7)); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 2, sprite); + HuSprPosSet(group, 2, lbl_1_data_50[option*2], lbl_1_data_50[(option*2)+1]); + HuSprAttrSet(group, 2, SPRITE_ATTR_HIDDEN); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + for(i=0; i<600; i++) { + if(HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { + option ^= 1; + HuSprPosSet(group, 1, lbl_1_data_50[option*2], lbl_1_data_50[(option*2)+1]); + i=0; + } + if(HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + HuSprPosSet(group, 2, lbl_1_data_50[option*2], lbl_1_data_50[(option*2)+1]); + HuSprAttrReset(group, 2, SPRITE_ATTR_HIDDEN); + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + if(!option) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_ON); + VIConfigure(&GXNtsc480Prog); + VIFlush(); + HuPrcSleep(100); + } else { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + } + HuSprGrpKill(group); + group = HuSprGrpCreate(1); + if(!option) { + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 4)); + } else { + data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 5)); + } + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuPrcSleep(60); + for(i=0; i<180; i++) { + if(HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuSprGrpKill(group); + HuPrcSleep(30); +} + +u16 lbl_1_data_58[] = { + 1, 2 +}; + +void fn_1_1178(void) +{ + + s16 i; + for(i=0; i<1; i++) { + Vec pos, target, up; + float x, y, z; + + x = lbl_1_bss_3C[i].x; + y = lbl_1_bss_3C[i].y; + z = lbl_1_bss_3C[i].z; + + pos.x = (((sin((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].x); + pos.y = (-sin((M_PI*x)/180.0)*lbl_1_bss_1C[i])+lbl_1_bss_24[i].y; + pos.z = ((cos((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].z; + target.x = lbl_1_bss_24[i].x; + target.y = lbl_1_bss_24[i].y; + target.z = lbl_1_bss_24[i].z; + up.x = sin((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + up.y = cos((M_PI*x)/180.0); + up.z = cos((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + Hu3DCameraPosSet(lbl_1_data_58[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } +} + +void fn_1_152C(void) +{ + +} + +void fn_1_2100(void) +{ + s16 model; + s16 sprite; + AnimData *sprite_data; + lbl_1_bss_8[0] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 11)); + Hu3DModelAttrSet(model, 1); + Hu3DModelAttrSet(model, 0x40000001); + lbl_1_bss_8[1] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 12)); + Hu3DModelAttrSet(model, 1); + Hu3DModelAttrSet(model, 0x40000001); + lbl_1_bss_8[2] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 13)); + Hu3DModelAttrSet(model, 1); + Hu3DModelAttrSet(model, 0x40000001); + Hu3DModelCameraInfoSet(model, 1); + Hu3DModelLightInfoSet(model, 1); + lbl_1_bss_6 = HuSprGrpCreate(4); + sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 8)); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_6, 0, sprite); + HuSprAttrSet(lbl_1_bss_6, 0, SPRITE_ATTR_HIDDEN); + HuSprDrawNoSet(lbl_1_bss_6, 0, 127); + HuSprPosSet(lbl_1_bss_6, 0, 288, 240); + sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 10)); + sprite = HuSprCreate(sprite_data, 1, 0); + HuSprGrpMemberSet(lbl_1_bss_6, 1, sprite); + HuSprAttrSet(lbl_1_bss_6, 1, SPRITE_ATTR_HIDDEN); + HuSprPosSet(lbl_1_bss_6, 1, 288, 420); + sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 2)); + sprite = HuSprCreate(sprite_data, 2, 0); + HuSprGrpMemberSet(lbl_1_bss_6, 2, sprite); + HuSprAttrSet(lbl_1_bss_6, 2, SPRITE_ATTR_HIDDEN|SPIRTE_ATTR_BILINEAR); + HuSprPosSet(lbl_1_bss_6, 2, 288, 380); + sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 9)); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_6, 3, sprite); + HuSprAttrSet(lbl_1_bss_6, 3, SPRITE_ATTR_HIDDEN|SPIRTE_ATTR_BILINEAR); + HuSprPosSet(lbl_1_bss_6, 3, 288, 200); +} + +BOOL fn_1_2474(void) +{ + +} \ No newline at end of file diff --git a/src/REL/w10Dll/w10Dll.c b/src/REL/w10Dll/w10Dll.c index 39364092..28ad5f06 100644 --- a/src/REL/w10Dll/w10Dll.c +++ b/src/REL/w10Dll/w10Dll.c @@ -67,7 +67,7 @@ inline s32 get_current_board(void) { void fn_1_E0(void) { f32 sp10; - f32 spC; + f32 spC[2]; s32 sp8; s32 i; @@ -130,8 +130,8 @@ void fn_1_E0(void) { fn_800A4F6C(lbl_1_data_32); fn_80077AAC(lbl_1_data_2E); fn_8007A83C(lbl_1_data_30); - HuWinMesMaxSizeGet(1, &spC, 0x2E003A); - lbl_1_bss_E = HuWinCreate(-10000.0f, 390.0f, spC, sp10, 1); + HuWinMesMaxSizeGet(1, spC, 0x2E003A); + lbl_1_bss_E = HuWinCreate(-10000.0f, 390.0f, spC[0], spC[1], 1); HuWinMesSet(lbl_1_bss_E, 0x2E003A); HuWinMesSpeedSet(lbl_1_bss_E, 0); HuWinPriSet(lbl_1_bss_E, 1); diff --git a/src/game/hsfman.c b/src/game/hsfman.c index c0d26f6d..9f3a1798 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1,4 +1,5 @@ #include "game/hsfman.h" +#include "game/hsfload.h" ModelData Hu3DData[0x200]; CameraData Hu3DCamera[0x10]; @@ -310,7 +311,7 @@ void Hu3DNoSyncSet(s32 arg0) { NoSyncF = arg0; } -s16 Hu3DModelCreate(s32 arg0) { +s16 Hu3DModelCreate(void *arg0) { HsfData* temp_r0; ModelData* var_r31; s16 i; @@ -726,7 +727,7 @@ void Hu3DModelLayerSet(s16 arg0, s16 arg1) { layerNum[arg1] += 1; } -HsfObject* Hu3DModelObjPtrGet(s16 arg0, s32 arg1) { +HsfObject* Hu3DModelObjPtrGet(s16 arg0, char *arg1) { char name[0x100]; s32 spC; s16 sp8; @@ -900,7 +901,7 @@ void Hu3DModelShadowMapSet(s16 arg0) { } } -void Hu3DModelShadowMapObjSet(s16 arg0, s32 arg1) { +void Hu3DModelShadowMapObjSet(s16 arg0, char *arg1) { char name[0x100]; HsfData* temp_r30; s16 i; @@ -931,7 +932,7 @@ void Hu3DModelAmbSet(s16 arg0, f32 arg8, f32 arg9, f32 argA) { temp_r31->unk_58.y = argA; } -void Hu3DModelHookSet(s16 arg0, s32 arg1, s16 arg2) { +void Hu3DModelHookSet(s16 arg0, char *arg1, s16 arg2) { char name[0x100]; ModelData* data; HsfData* temp_r30; @@ -986,7 +987,7 @@ void Hu3DModelHookReset(s16 arg0) { } } -void Hu3DModelHookObjReset(s16 arg0, s32 arg1) { +void Hu3DModelHookObjReset(s16 arg0, char *arg1) { char name[0x100]; ModelData* temp_r28; HsfData* temp_r30;