From 8a96d23ba9fd02bbad7babf029bb032703894334 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 17 Nov 2024 21:06:57 -0600 Subject: [PATCH] Match bootdll in PAL --- config/GMPE01_00/config.yml | 6 +- config/GMPE01_00/rels/bootDll/splits.txt | 8 +- config/GMPE01_00/rels/bootDll/symbols.txt | 39 +- config/GMPE01_01/config.yml | 6 +- config/GMPP01_00/config.yml | 4 + config/GMPP01_00/rels/bootDll/splits.txt | 14 + config/GMPP01_00/rels/bootDll/symbols.txt | 49 +-- config/GMPP01_02/config.yml | 4 + configure.py | 4 +- include/data_num/title.h | 39 ++ src/REL/bootDll/language.c | 280 +++++++++++++ src/REL/bootDll/main.c | 470 ++++++++++++++++------ src/REL/bootDll/nintendo_data.c | 15 - 13 files changed, 746 insertions(+), 192 deletions(-) create mode 100644 src/REL/bootDll/language.c delete mode 100644 src/REL/bootDll/nintendo_data.c diff --git a/config/GMPE01_00/config.yml b/config/GMPE01_00/config.yml index 9512c05c..7e4233af 100644 --- a/config/GMPE01_00/config.yml +++ b/config/GMPE01_00/config.yml @@ -19,9 +19,9 @@ modules: splits: config/GMPE01_00/rels/bootDll/splits.txt links: [] extract: - - symbol: logoNintendoData - binary: logoNintendoData.bin - header: logoNintendoData.inc + - symbol: nintendoData + binary: nintendoData.bin + header: nintendoData.inc - object: files/dll/instDll.rel hash: f09399fee83c63abfe2adb25341152adad959a93 symbols: config/GMPE01_00/rels/instDll/symbols.txt diff --git a/config/GMPE01_00/rels/bootDll/splits.txt b/config/GMPE01_00/rels/bootDll/splits.txt index 49f64a4a..14a67037 100644 --- a/config/GMPE01_00/rels/bootDll/splits.txt +++ b/config/GMPE01_00/rels/bootDll/splits.txt @@ -10,11 +10,7 @@ REL/executor.c: .text start:0x00000000 end:0x000000A0 REL/bootDll/main.c: - .text start:0x000000A0 end:0x00002944 + .text start:0x000000A0 end:0x000029C8 .rodata start:0x00000000 end:0x000000DC - .data start:0x00000000 end:0x000000A0 + .data start:0x00000000 end:0x0000311D .bss start:0x00000000 end:0x0000005C - -REL/bootDll/nintendo_data.c: - .text start:0x00002944 end:0x000029C8 - .data start:0x000000A0 end:0x0000311D diff --git a/config/GMPE01_00/rels/bootDll/symbols.txt b/config/GMPE01_00/rels/bootDll/symbols.txt index b576a34e..463f8400 100644 --- a/config/GMPE01_00/rels/bootDll/symbols.txt +++ b/config/GMPE01_00/rels/bootDll/symbols.txt @@ -1,14 +1,14 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ObjectSetup = .text:0x000000A0; // type:function size:0x1CC -BootProc = .text:0x0000026C; // type:function size:0x78C scope:local +BootExec = .text:0x0000026C; // type:function size:0x78C UpdateDemoMess = .text:0x000009F8; // type:function size:0xC8 scope:local -ProgressiveProc = .text:0x00000AC0; // type:function size:0x6B8 scope:local -fn_1_1178 = .text:0x00001178; // type:function size:0x3B4 -fn_1_152C = .text:0x0000152C; // type:function size:0xBD4 -TitleInit = .text:0x00002100; // type:function size:0x374 scope:local -TitleProc = .text:0x00002474; // type:function size:0x4D0 scope:local -logoReadNintendo = .text:0x00002944; // type:function size:0x84 +BootProgExec = .text:0x00000AC0; // type:function size:0x6B8 +DebugCamOutView = .text:0x00001178; // type:function size:0x3B4 +DebugCamUpdate = .text:0x0000152C; // type:function size:0xBD4 +BootTitleCreate = .text:0x00002100; // type:function size:0x374 +BootTitleExec = .text:0x00002474; // type:function size:0x4D0 +NintendoDataDecode = .text:0x00002944; // type:function size:0x84 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float @@ -50,20 +50,21 @@ lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:d lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x24 scope:local data:string lbl_1_data_24 = .data:0x00000024; // type:object size:0x14 scope:local data:string -demoTimingTbl = .data:0x00000038; // type:object size:0x18 scope:local data:2byte -progressivePosTbl = .data:0x00000050; // type:object size:0x8 scope:local -lbl_1_data_58 = .data:0x00000058; // type:object size:0x4 scope:local +demoMessTimeTbl = .data:0x00000038; // type:object size:0x18 scope:local data:2byte +progPosTbl = .data:0x00000050; // type:object size:0x8 scope:local +debugCamTbl = .data:0x00000058; // type:object size:0x4 scope:local lbl_1_data_5C = .data:0x0000005C; // type:object size:0x1A scope:local data:string lbl_1_data_76 = .data:0x00000076; // type:object size:0x13 scope:local data:string lbl_1_data_89 = .data:0x00000089; // type:object size:0x17 scope:local -logoNintendoData = .data:0x000000A0; // type:object size:0x307D align:32 -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 +nintendoData = .data:0x000000A0; // type:object size:0x307D align:32 +debugCamOnF = .bss:0x00000000; // type:object size:0x4 lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 -titleGroup = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte -titleModel = .bss:0x00000008; // type:object size:0x6 scope:local data:2byte -demoWin = .bss:0x0000000E; // type:object size:0x2 scope:local data:2byte +bootGrpId = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte +titleMdlId = .bss:0x00000008; // type:object size:0x6 scope:local data:2byte +demoWinId = .bss:0x0000000E; // type:object size:0x2 scope:local data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0xC -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x8 data:float -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x18 data:float -lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x18 data:float -objman = .bss:0x00000054; // type:object size:0x8 scope:local data:4byte +debugCamZoom = .bss:0x0000001C; // type:object size:0x8 data:float +debugCamPos = .bss:0x00000024; // type:object size:0x18 data:float +debugCamRot = .bss:0x0000003C; // type:object size:0x18 data:float +objman = .bss:0x00000054; // type:object size:0x4 data:4byte +debugOutView = .bss:0x00000058; // type:object size:0x4 scope:local data:4byte diff --git a/config/GMPE01_01/config.yml b/config/GMPE01_01/config.yml index f9236cb2..8445dc5f 100644 --- a/config/GMPE01_01/config.yml +++ b/config/GMPE01_01/config.yml @@ -19,9 +19,9 @@ modules: splits: config/GMPE01_00/rels/bootDll/splits.txt links: [] extract: - - symbol: logoNintendoData - binary: logoNintendoData.bin - header: logoNintendoData.inc + - symbol: nintendoData + binary: nintendoData.bin + header: nintendoData.inc - object: files/dll/instDll.rel hash: f09399fee83c63abfe2adb25341152adad959a93 symbols: config/GMPE01_00/rels/instDll/symbols.txt diff --git a/config/GMPP01_00/config.yml b/config/GMPP01_00/config.yml index ed67d838..997b2d75 100644 --- a/config/GMPP01_00/config.yml +++ b/config/GMPP01_00/config.yml @@ -20,6 +20,10 @@ modules: symbols: config/GMPP01_00/rels/bootDll/symbols.txt splits: config/GMPP01_00/rels/bootDll/splits.txt links: [] + extract: + - symbol: nintendoData + binary: nintendoData.bin + header: nintendoData.inc - object: files/dll/instDll.rel hash: eef3ac50923ab2f20d588ef10ae15f3bc739f2b8 symbols: config/GMPP01_00/rels/instDll/symbols.txt diff --git a/config/GMPP01_00/rels/bootDll/splits.txt b/config/GMPP01_00/rels/bootDll/splits.txt index 531cd645..593d873d 100644 --- a/config/GMPP01_00/rels/bootDll/splits.txt +++ b/config/GMPP01_00/rels/bootDll/splits.txt @@ -5,3 +5,17 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/bootDll/main.c: + .text start:0x000000A0 end:0x00002AE0 + .rodata start:0x00000000 end:0x000000F8 + .data start:0x00000000 end:0x00003120 + .bss start:0x00000000 end:0x00000060 + +REL/bootDll/language.c: + .text start:0x00002AE0 end:0x00003D9C + .rodata start:0x000000F8 end:0x000001A0 + .data start:0x00003120 end:0x00003156 diff --git a/config/GMPP01_00/rels/bootDll/symbols.txt b/config/GMPP01_00/rels/bootDll/symbols.txt index b9ed4f1e..fa5f8812 100644 --- a/config/GMPP01_00/rels/bootDll/symbols.txt +++ b/config/GMPP01_00/rels/bootDll/symbols.txt @@ -1,15 +1,15 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x204 -fn_1_2A4 = .text:0x000002A4; // type:function size:0x8B4 -fn_1_B58 = .text:0x00000B58; // type:function size:0xC8 -fn_1_C20 = .text:0x00000C20; // type:function size:0x3B4 -fn_1_FD4 = .text:0x00000FD4; // type:function size:0xB88 -fn_1_1B5C = .text:0x00001B5C; // type:function size:0x460 -fn_1_1FBC = .text:0x00001FBC; // type:function size:0xAA0 -fn_1_2A5C = .text:0x00002A5C; // type:function size:0x84 -fn_1_2AE0 = .text:0x00002AE0; // type:function size:0x10C8 -fn_1_3BA8 = .text:0x00003BA8; // type:function size:0x1F4 +ObjectSetup = .text:0x000000A0; // type:function size:0x204 +BootExec = .text:0x000002A4; // type:function size:0x8B4 +UpdateDemoMess = .text:0x00000B58; // type:function size:0xC8 scope:local +DebugCamOutView = .text:0x00000C20; // type:function size:0x3B4 +DebugCamUpdate = .text:0x00000FD4; // type:function size:0xB88 +BootTitleCreate = .text:0x00001B5C; // type:function size:0x460 +BootTitleExec = .text:0x00001FBC; // type:function size:0xAA0 +NintendoDataDecode = .text:0x00002A5C; // type:function size:0x84 +LanguageMenuExec = .text:0x00002AE0; // type:function size:0x10C8 +LanguageBootGet = .text:0x00003BA8; // type:function size:0x1F4 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float @@ -86,22 +86,25 @@ lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x24 data:string lbl_1_data_24 = .data:0x00000024; // type:object size:0x14 data:string -lbl_1_data_38 = .data:0x00000038; // type:object size:0x18 data:2byte -lbl_1_data_50 = .data:0x00000050; // type:object size:0x4 +demoMessTimeTbl = .data:0x00000038; // type:object size:0x18 scope:local data:2byte +debugCamTbl = .data:0x00000050; // type:object size:0x4 scope:local lbl_1_data_54 = .data:0x00000054; // type:object size:0x1A data:string lbl_1_data_6E = .data:0x0000006E; // type:object size:0x13 data:string lbl_1_data_81 = .data:0x00000081; // type:object size:0x1F -lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x3080 data:4byte -lbl_1_data_3120 = .data:0x00003120; // type:object size:0x14 +nintendoData = .data:0x000000A0; // type:object size:0x307D align:32 +flagFileTbl = .data:0x00003120; // type:object size:0x14 scope:local lbl_1_data_3134 = .data:0x00003134; // type:object size:0x5 data:string lbl_1_data_3139 = .data:0x00003139; // type:object size:0xD data:string lbl_1_data_3146 = .data:0x00003146; // type:object size:0x10 data:string -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x6 -lbl_1_bss_A = .bss:0x0000000A; // type:object size:0x2 data:2byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x6 data:2byte -lbl_1_bss_12 = .bss:0x00000012; // type:object size:0xE data:2byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:float -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 data:float -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 data:float -lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x8 data:4byte +debugCamOnF = .bss:0x00000000; // type:object size:0x4 data:4byte +initLanguageF = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_4 = .bss:0x00000008; // type:object size:0x2 +bootGrpId = .bss:0x0000000A; // type:object size:0x2 scope:local data:2byte +titleMdlId = .bss:0x0000000C; // type:object size:0x6 scope:local data:2byte +demoWinId = .bss:0x00000012; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_10 = .bss:0x00000014; // type:object size:0xC data:float +debugCamZoom = .bss:0x00000020; // type:object size:0x8 data:float +debugCamPos = .bss:0x00000028; // type:object size:0x18 data:float +debugCamRot = .bss:0x00000040; // type:object size:0x18 data:float +objman = .bss:0x00000058; // type:object size:0x4 data:4byte +debugOutView = .bss:0x0000005C; // type:object size:0x4 scope:local data:4byte diff --git a/config/GMPP01_02/config.yml b/config/GMPP01_02/config.yml index da871c96..fa72e0a2 100644 --- a/config/GMPP01_02/config.yml +++ b/config/GMPP01_02/config.yml @@ -21,6 +21,10 @@ modules: symbols: config/GMPP01_00/rels/bootDll/symbols.txt splits: config/GMPP01_00/rels/bootDll/splits.txt links: [] + extract: + - symbol: nintendoData + binary: nintendoData.bin + header: nintendoData.inc - object: files/dll/instDll.rel hash: eef3ac50923ab2f20d588ef10ae15f3bc739f2b8 symbols: config/GMPP01_00/rels/instDll/symbols.txt diff --git a/configure.py b/configure.py index a5be4728..d3de99e8 100644 --- a/configure.py +++ b/configure.py @@ -835,8 +835,8 @@ config.libs = [ Rel( "bootDll", objects={ - Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/bootDll/main.c"), - Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/bootDll/nintendo_data.c"), + Object(Matching, "REL/bootDll/main.c"), + Object(Matching, "REL/bootDll/language.c"), }, ), Rel( diff --git a/include/data_num/title.h b/include/data_num/title.h index 2d0ce603..a50179ec 100644 --- a/include/data_num/title.h +++ b/include/data_num/title.h @@ -2,6 +2,9 @@ #define DATANUM_TITLE_H #include "datadir_enum.h" +#include "version.h" + +#if VERSION_NTSC enum { TITLE_NINTENDO_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 0), @@ -20,4 +23,40 @@ enum { TITLE_SKY_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 13), }; +#else + +enum { + TITLE_HUDSON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 0), + TITLE_PROGRESSIVE_CHOOSE_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 1), + TITLE_PROGRESSIVE_ON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 2), + TITLE_PROGRESSIVE_OFF_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 3), + TITLE_PROGRESSIVE_CURSOR_ON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 4), + TITLE_PROGRESSIVE_CURSOR_OFF_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 5), + TITLE_BG_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 6), + TITLE_LOGO_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 7), + TITLE_COPYRIGHT_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 8), + TITLE_CHAR_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 9), + TITLE_CUBE_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 10), + TITLE_SKY_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 11), + TITLE_LANGUAGEBG_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 12), + TITLE_FLAG_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 13), + TITLE_FLAG_EN_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 14), + TITLE_FLAG_GE_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 15), + TITLE_FLAG_FR_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 16), + TITLE_FLAG_IT_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 17), + TITLE_FLAG_ES_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 18), + TITLE_PRESS_START_EN_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 19), + TITLE_PRESS_START_GE_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 20), + TITLE_PRESS_START_FR_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 21), + TITLE_PRESS_START_IT_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 22), + TITLE_PRESS_START_ES_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 23), + TITLE_LANGUAGE_EN_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 24), + TITLE_LANGUAGE_GE_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 25), + TITLE_LANGUAGE_FR_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 26), + TITLE_LANGUAGE_IT_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 27), + TITLE_LANGUAGE_ES_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 28), +}; + +#endif + #endif \ No newline at end of file diff --git a/src/REL/bootDll/language.c b/src/REL/bootDll/language.c new file mode 100644 index 00000000..fdc674f1 --- /dev/null +++ b/src/REL/bootDll/language.c @@ -0,0 +1,280 @@ +#include "version.h" +#if VERSION_PAL +#include "dolphin.h" +#include "game/card.h" +#include "game/saveload.h" +#include "game/sprite.h" +#include "game/hsfman.h" +#include "game/hsfanim.h" +#include "game/window.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/minigame_seq.h" + +#include "math.h" +#include "ext_math.h" + +#include "data_num/title.h" + +s32 flagFileTbl[] = { + TITLE_FLAG_EN_ANM, + TITLE_FLAG_ES_ANM, + TITLE_FLAG_IT_ANM, + TITLE_FLAG_FR_ANM, + TITLE_FLAG_GE_ANM +}; + +extern int SystemInitF; + +extern Process *objman; +extern Vec debugCamRot[2]; +extern Vec debugCamPos[2]; +extern float debugCamZoom[2]; + +void DebugCamOutView(omObjData *obj); +void DebugCamUpdate(omObjData *obj); + +BOOL LanguageMenuExec(void) +{ + s16 language = GWLanguageGet()-1; + s16 i; + s16 gid; + s16 time; + s16 choiceChange; + AnimData *anim; + s16 sprid; + s16 choice; + omObjData *outView; + omObjData *updateCamera; + s16 modelId[5]; + s16 winId[5]; + + float winSize[2]; + float dist; + float posX; + float posZ; + + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = i; + } + gid = HuSprGrpCreate(1); + anim = HuSprAnimReadFile(TITLE_LANGUAGEBG_ANM); + sprid = HuSprCreate(anim, 0, 0); + HuSprGrpMemberSet(gid, 0, sprid); + HuSprDrawNoSet(gid, 0, 127); + HuSprPosSet(gid, 0, 288, 240); + HuSprTPLvlSet(gid, 0, 0.6f); + Hu3DFogSet(350, 2000, 128, 128, 128); + debugCamRot[0].x = -20; + debugCamRot[0].y = 0; + debugCamRot[0].z = 0; + debugCamPos[0].x = 0; + debugCamPos[0].y = 20; + debugCamPos[0].z = -7; + debugCamZoom[0] = 600; + + Hu3DCameraPerspectiveSet(HU3D_CAM0, 60, 20, 5000, 1.2f); + outView = omAddObjEx(objman, 32730, 0, 0, -1, DebugCamOutView); + updateCamera = omAddObjEx(objman, 0, 32, 32, -1, DebugCamUpdate); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + if(!SystemInitF) { + void *group_samp; + HuWindowInit(); + group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); + msmSysLoadGroup(0, group_samp, 0); + HuMemDirectFree(group_samp); + } + for(i=0; i<5; i++) { + modelId[i] = Hu3DModelCreateFile(TITLE_FLAG_HSF); + anim = HuSprAnimReadFile(flagFileTbl[i]); + Hu3DAnimCreate(anim, modelId[i], "flag"); + Hu3DModelPosSet(modelId[i], sind(i*72)*200, 70, cosd(i*72)*200); + Hu3DModelRotSet(modelId[i], -20, 0, 0); + } + for(time=1; time<=30; time++) { + dist = 1.0-(time/30.0); + for(i=0; i<5; i++) { + Hu3DModelPosSet(modelId[i], sind((dist*180.0f)+(i*72)+(language*72))*(200+(300*dist)), 70, cosd((dist*180.0f)+(i*72)+(language*72))*(200+(300*dist))); + } + HuPrcVSleep(); + } + HuWinInit(1); + HuWinMesMaxSizeGet(5, winSize, 0x380000, 0x380005, 0x38000A, 0x38000F, 0x380014); + winId[0] = HuWinExCreateStyled(-10000, 50, winSize[0], winSize[1], -1, 0); + HuWinAttrSet(winId[0], 0x800); + HuWinMesSet(winId[0], 0x380000+(language*5)); + HuWinBGTPLvlSet(winId[0], 0); + HuWinMesSpeedSet(winId[0], 0); + HuWinDispOn(winId[0]); + HuWinMesMaxSizeGet(5, winSize, 0x380001, 0x380006, 0x38000B, 0x380010, 0x380015); + winId[1] = HuWinExCreateStyled(-10000, 100, winSize[0], winSize[1], -1, 0); + HuWinAttrSet(winId[1], 0x800); + HuWinMesSet(winId[1], 0x380001+(language*5)); + HuWinBGTPLvlSet(winId[1], 0); + HuWinMesSpeedSet(winId[1], 0); + HuWinDispOn(winId[1]); + HuWinMesMaxSizeGet(5, winSize, 0x380002, 0x380007, 0x38000C, 0x380011, 0x380016); + winId[2] = HuWinExCreateStyled(-10000, 340, winSize[0], winSize[1], -1, 0); + HuWinAttrSet(winId[2], 0x800); + HuWinMesSet(winId[2], 0x380002+(language*5)); + HuWinBGTPLvlSet(winId[2], 0); + HuWinMesSpeedSet(winId[2], 0); + HuWinDispOn(winId[2]); + HuWinMesMaxSizeGet(5, winSize, 0x380004, 0x380009, 0x38000E, 0x380013, 0x380018); + winId[4] = HuWinExCreateStyled(-10000, (448-winSize[1])-10, winSize[0], winSize[1], -1, 0); + HuWinAttrSet(winId[4], 0x800); + choiceChange = FALSE; + while(1) { + if(HuPadDStkRep[0] & PAD_BUTTON_LEFT) { + HuAudFXPlay(0); + for(time=0; time<=10; time++) { + for(i=0; i<5; i++) { + posX = sind((72.0*language)+(i*72)-(72.0*(time/10.0)))*200; + posZ = cosd((72.0*language)+(i*72)-(72.0*(time/10.0)))*200; + Hu3DModelPosSet(modelId[i], posX, 70, posZ); + } + HuPrcVSleep(); + } + language--; + if(language < 0) { + language = 4; + } + choiceChange = TRUE; + } else if(HuPadDStkRep[0] & PAD_BUTTON_RIGHT) { + HuAudFXPlay(0); + for(time=0; time<=10; time++) { + for(i=0; i<5; i++) { + posX = sind((72.0*language)+(i*72)+(72.0*(time/10.0)))*200; + posZ = cosd((72.0*language)+(i*72)+(72.0*(time/10.0)))*200; + Hu3DModelPosSet(modelId[i], posX, 70, posZ); + } + HuPrcVSleep(); + } + language++; + if(language >= 5) { + language = 0; + } + choiceChange = TRUE; + } + if(choiceChange) { + HuWinMesSet(winId[0], 0x380000+(language*5)); + HuWinMesSet(winId[1], 0x380001+(language*5)); + HuWinMesSet(winId[2], 0x380002+(language*5)); + choiceChange = FALSE; + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + HuAudFXPlay(1); + HuWinHomeClear(winId[4]); + HuWinExAnimIn(winId[4]); + HuWinMesSet(winId[4], 0x380004+(language*5)); + HuWinMesWait(winId[4]); + choice = HuWinChoiceGet(winId[4], 0); + if(choice == 0) { + GwLanguage = GwLanguageSave = language+1; + GWLanguageSet(GwLanguage); + break; + } + HuWinExAnimOut(winId[4]); + } + if(GwLanguage != -1 && (HuPadBtnDown[0] & PAD_BUTTON_B)) { + HuAudFXPlay(3); + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuSprGrpKill(gid); + for(i=0; i<5; i++) { + Hu3DModelKill(modelId[i]); + } + omDelObjEx(objman, outView); + omDelObjEx(objman, updateCamera); + if(SystemInitF == 0) { + CharManInit(); + MGSeqInit(); + } + HuWinAllKill(); + Hu3DFogClear(); + return TRUE; +} + +s32 LanguageBootGet(void) +{ + s16 result = -1; + s16 i; + s16 j; + for(i=0; i<2; i++) { + if(HuCardSlotCheck(i) < 0) { + continue; + } + if(HuCardMount(i) < 0) { + continue; + } + for(j=0; j<3; j++) { + CARDFileInfo fileInfo; + if(HuCardOpen(i, SaveFileNameTbl[j], &fileInfo) < 0) { + continue; + } + if(HuCardRead(&fileInfo, &saveBuf, SAVE_BUF_SIZE, 0) < 0) { + continue; + } + if(!SLCheckSumCheck()) { + continue; + } + memcpy(&GWGameStat, &saveBuf.data.stat, sizeof(GameStat)); + if(GWGameStat.language < 1) { + continue; + } + if(GWGameStat.language > 5) { + continue; + } + result = GWGameStat.language; + OSReport("Language %d\n", GWGameStat.language); + HuCardClose(&fileInfo); + HuCardUnMount(i); + return result; + } + HuCardUnMount(i); + } + if(result == -1) { + OSReport("OS Language %d\n", OSGetLanguage()); + switch(OSGetLanguage()) { + case OS_LANG_ENGLISH: + result = 1; + break; + + case OS_LANG_GERMAN: + result = 2; + break; + + case OS_LANG_FRENCH: + result = 3; + break; + + case OS_LANG_SPANISH: + result = 5; + break; + + case OS_LANG_ITALIAN: + result = 4; + break; + + default: + result = -1; + break; + } + } + return result; +} + +#endif \ No newline at end of file diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index b525067a..5aa7dfcb 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -24,51 +24,69 @@ extern int SystemInitF; -static Process *objman[2]; -Vec lbl_1_bss_3C[2]; -Vec lbl_1_bss_24[2]; -float lbl_1_bss_1C[2]; +static omObjData *debugOutView; +Process *objman; +Vec debugCamRot[2]; +Vec debugCamPos[2]; +float debugCamZoom[2]; Vec lbl_1_bss_10; -static s16 demoWin; +static s16 demoWinId; -static s16 titleModel[3]; -static s16 titleGroup; +static s16 titleMdlId[3]; +static s16 bootGrpId; s16 lbl_1_bss_4; -s32 lbl_1_bss_0; +#if VERSION_PAL +static BOOL initLanguageF; +#endif +s32 debugCamOnF; -static void BootProc(void); +void BootExec(void); static void UpdateDemoMess(void); -static void ProgressiveProc(void); -static void TitleInit(void); -static BOOL TitleProc(void); +#if VERSION_NTSC +void BootProgExec(void); +#endif +void BootTitleCreate(void); +BOOL BootTitleExec(void); -void *logoReadNintendo(void); +void *NintendoDataDecode(void); void ObjectSetup(void) { omOvlHisData *history; OSReport("******* Boot ObjectSetup *********\n"); - objman[0] = 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; + objman = omInitObjMan(50, 8192); + debugCamRot[0].x = -67; + debugCamRot[0].y = 40; + debugCamRot[0].z = 0; + debugCamPos[0].x = 260; + debugCamPos[0].y = -103; + debugCamPos[0].z = -18; + debugCamZoom[0] = 2885; Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 30, 20, 15000, 1.2); Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); - HuPrcCreate(BootProc, 100, 12288, 0); + HuPrcCreate(BootExec, 100, 12288, 0); Hu3DBGColorSet(0, 0, 0); history = omOvlHisGet(0); omOvlHisChg(0, history->overlay, 1, history->stat); + #if VERSION_PAL + if(SystemInitF == FALSE) { + initLanguageF = FALSE; + } else { + initLanguageF = TRUE; + } + #endif } -static void BootProc(void) +#if VERSION_PAL +s32 LanguageBootGet(void); +BOOL LanguageMenuExec(void); +#endif + +void BootExec(void) { AnimData *data; s16 group; @@ -77,11 +95,24 @@ static void BootProc(void) s16 i; OSTick tick_prev; Process *curr = HuPrcCurrentGet(); + #if VERSION_NTSC if (omovlevtno == 0) { - ProgressiveProc(); + BootProgExec(); } + #else + if(SystemInitF == FALSE) { + GwLanguage = LanguageBootGet(); + if(GwLanguage == -1) { + if(LanguageMenuExec()) { + SystemInitF = TRUE; + } + } else { + GWLanguageSet(GwLanguage); + } + } + #endif group = HuSprGrpCreate(2); - data = HuSprAnimRead(logoReadNintendo()); + data = HuSprAnimRead(NintendoDataDecode()); sprite_nintendo = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 0, sprite_nintendo); HuSprPosSet(group, 0, 288, 240); @@ -94,7 +125,7 @@ static void BootProc(void) HuSprPosSet(group, 1, 288, 240); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuWinInit(1); - TitleInit(); + BootTitleCreate(); SystemInitF = 1; } else { @@ -105,6 +136,18 @@ static void BootProc(void) for (i = 0; i < 4; i++) { GWPlayerCfg[i].pad_idx = i; } + #if VERSION_PAL + if(SystemInitF) { + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + HuAudSndGrpSetSet(0); + BootTitleCreate(); + HuWinInit(1); + } + #endif repeat: HuSprAttrReset(group, 0, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); @@ -118,7 +161,7 @@ static void BootProc(void) HuWindowInit(); MGSeqInit(); HuWinInit(1); - TitleInit(); + BootTitleCreate(); data = HuSprAnimReadFile(TITLE_HUDSON_ANM); sprite_hudson = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite_hudson); @@ -130,9 +173,15 @@ static void BootProc(void) } else { for (i = 0; i < 180; i++) { + #if VERSION_NTSC if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { break; } + #else + if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { + break; + } + #endif HuPrcVSleep(); } } @@ -159,12 +208,21 @@ static void BootProc(void) } else { for (i = 0; i < 180; i++) { + #if VERSION_NTSC if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { break; } + #else + if (initLanguageF && (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A))) { + break; + } + #endif HuPrcVSleep(); } } + #if VERSION_PAL + initLanguageF = TRUE; + #endif WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); @@ -184,11 +242,11 @@ static void BootProc(void) HuSprGrpMemberSet(group_thp, 0, sprite_thp); HuSprPosSet(group_thp, 0, 288, 240); HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); - demoWin = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); - HuWinMesSpeedSet(demoWin, 0); - HuWinBGTPLvlSet(demoWin, 0); - HuWinPriSet(demoWin, 10); - HuWinAttrSet(demoWin, 0x800); + demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); + HuWinMesSpeedSet(demoWinId, 0); + HuWinBGTPLvlSet(demoWinId, 0); + HuWinPriSet(demoWinId, 10); + HuWinAttrSet(demoWinId, 0x800); HuPrcSleep(5); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); while (WipeStatGet()) { @@ -207,7 +265,7 @@ static void BootProc(void) while (WipeStatGet()) { HuPrcVSleep(); } - HuWinKill(demoWin); + HuWinKill(demoWinId); HuTHPClose(); HuPrcVSleep(); HuSprGrpKill(group_thp); @@ -216,7 +274,7 @@ static void BootProc(void) } skip_wait = FALSE; } - if (!TitleProc()) { + if (!BootTitleExec()) { HuPrcSleep(60); goto repeat; } @@ -242,7 +300,7 @@ static void BootProc(void) } while (1); } -static s16 demoTimingTbl[] = { +static s16 demoMessTimeTbl[] = { 1686, 1785, 1850, @@ -261,19 +319,21 @@ static void UpdateDemoMess(void) { int frame = HuTHPFrameGet(); int i; - for (i = 0; demoTimingTbl[i * 2] != -1; i++) { - if (frame == demoTimingTbl[i * 2]) { - HuWinMesSet(demoWin, MAKE_MESSID(54, i)); + for (i = 0; demoMessTimeTbl[i * 2] != -1; i++) { + if (frame == demoMessTimeTbl[i * 2]) { + HuWinMesSet(demoWinId, MAKE_MESSID(54, i)); } - if (frame == demoTimingTbl[(i * 2) + 1]) { - HuWinHomeClear(demoWin); + if (frame == demoMessTimeTbl[(i * 2) + 1]) { + HuWinHomeClear(demoWinId); } } } -static u16 progressivePosTbl[] = { 236, 313, 353, 313 }; +#if VERSION_NTSC -static void ProgressiveProc(void) +static u16 progPosTbl[] = { 236, 313, 353, 313 }; + +void BootProgExec(void) { s16 i; s16 option; @@ -303,11 +363,11 @@ static void ProgressiveProc(void) data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite); - HuSprPosSet(group, 1, progressivePosTbl[option * 2], progressivePosTbl[(option * 2) + 1]); + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 2, sprite); - HuSprPosSet(group, 2, progressivePosTbl[option * 2], progressivePosTbl[(option * 2) + 1]); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { @@ -316,12 +376,12 @@ static void ProgressiveProc(void) for (i = 0; i < 600; i++) { if (HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { option ^= 1; - HuSprPosSet(group, 1, progressivePosTbl[option * 2], progressivePosTbl[(option * 2) + 1]); + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); i = 0; } if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - HuSprPosSet(group, 2, progressivePosTbl[option * 2], progressivePosTbl[(option * 2) + 1]); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); break; } @@ -370,33 +430,35 @@ static void ProgressiveProc(void) HuPrcSleep(30); } -u16 lbl_1_data_58[] = { 1, 2 }; +#endif -void fn_1_1178(void) +static u16 debugCamTbl[] = { 1, 2 }; + +void DebugCamOutView(omObjData *obj) { 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; + x = debugCamRot[i].x; + y = debugCamRot[i].y; + z = debugCamRot[i].z; - pos.x = (((sind(y) * cosd(x)) * lbl_1_bss_1C[i]) + lbl_1_bss_24[i].x); - pos.y = (-sind(x) * lbl_1_bss_1C[i]) + lbl_1_bss_24[i].y; - pos.z = ((cosd(y) * cosd(x)) * 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; + pos.x = (((sind(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].x); + pos.y = (-sind(x) * debugCamZoom[i]) + debugCamPos[i].y; + pos.z = ((cosd(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].z; + target.x = debugCamPos[i].x; + target.y = debugCamPos[i].y; + target.z = debugCamPos[i].z; up.x = sind(y) * sind(x); up.y = cosd(x); up.z = cosd(y) * sind(x); - Hu3DCameraPosSet(lbl_1_data_58[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + Hu3DCameraPosSet(debugCamTbl[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 DebugCamUpdate(omObjData *obj) { Vec pos; Vec offset; @@ -405,28 +467,30 @@ void fn_1_152C(void) f32 z_rot; s8 stick_pos; - + + #if VERSION_NTSC if ((HuPadBtnDown[0] & 0x800)) { - lbl_1_bss_0 = (lbl_1_bss_0) ? 0 : 1; + debugCamOnF = (debugCamOnF) ? 0 : 1; } - if (lbl_1_bss_0 != 0) { - lbl_1_bss_3C[0].y += 0.1f * HuPadStkX[0]; - lbl_1_bss_3C[0].x += 0.1f * HuPadStkY[0]; - lbl_1_bss_1C[0] += HuPadTrigL[0] / 2; - lbl_1_bss_1C[0] -= HuPadTrigR[0] / 2; - if (lbl_1_bss_1C[0] < 100.0f) { - lbl_1_bss_1C[0] = 100.0f; + #endif + if (debugCamOnF != 0) { + debugCamRot[0].y += 0.1f * HuPadStkX[0]; + debugCamRot[0].x += 0.1f * HuPadStkY[0]; + debugCamZoom[0] += HuPadTrigL[0] / 2; + debugCamZoom[0] -= HuPadTrigR[0] / 2; + if (debugCamZoom[0] < 100.0f) { + debugCamZoom[0] = 100.0f; } - pos.x = lbl_1_bss_24[0].x + (lbl_1_bss_1C[0] * (sind(lbl_1_bss_3C[0].y) * cosd(lbl_1_bss_3C[0].x))); - pos.y = (lbl_1_bss_24[0].y + (lbl_1_bss_1C[0] * -sind(lbl_1_bss_3C[0].x))); - pos.z = (lbl_1_bss_24[0].z + (lbl_1_bss_1C[0] * (cosd(lbl_1_bss_3C[0].y) * cosd(lbl_1_bss_3C[0].x)))); - offset.x = lbl_1_bss_24[0].x - pos.x; - offset.y = lbl_1_bss_24[0].y - pos.y; - offset.z = lbl_1_bss_24[0].z - pos.z; - dir.x = (sind(lbl_1_bss_3C[0].y) * sind(lbl_1_bss_3C[0].x)); - dir.y = cosd(lbl_1_bss_3C[0].x); - dir.z = (cosd(lbl_1_bss_3C[0].y) * sind(lbl_1_bss_3C[0].x)); - z_rot = lbl_1_bss_3C[0].z; + pos.x = debugCamPos[0].x + (debugCamZoom[0] * (sind(debugCamRot[0].y) * cosd(debugCamRot[0].x))); + pos.y = (debugCamPos[0].y + (debugCamZoom[0] * -sind(debugCamRot[0].x))); + pos.z = (debugCamPos[0].z + (debugCamZoom[0] * (cosd(debugCamRot[0].y) * cosd(debugCamRot[0].x)))); + offset.x = debugCamPos[0].x - pos.x; + offset.y = debugCamPos[0].y - pos.y; + offset.z = debugCamPos[0].z - pos.z; + dir.x = (sind(debugCamRot[0].y) * sind(debugCamRot[0].x)); + dir.y = cosd(debugCamRot[0].x); + dir.z = (cosd(debugCamRot[0].y) * sind(debugCamRot[0].x)); + z_rot = debugCamRot[0].z; y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); @@ -443,70 +507,102 @@ void fn_1_152C(void) VECNormalize(&offset, &offset); stick_pos = (HuPadSubStkX[0] & 0xF8); if (stick_pos != 0) { - lbl_1_bss_24[0].x += 0.05f * (offset.x * stick_pos); - lbl_1_bss_24[0].y += 0.05f * (offset.y * stick_pos); - lbl_1_bss_24[0].z += 0.05f * (offset.z * stick_pos); + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); } VECNormalize(&y_offset, &offset); stick_pos = -(HuPadSubStkY[0] & 0xF8); if (stick_pos != 0) { - lbl_1_bss_24[0].x += 0.05f * (offset.x * stick_pos); - lbl_1_bss_24[0].y += 0.05f * (offset.y * stick_pos); - lbl_1_bss_24[0].z += 0.05f * (offset.z * stick_pos); + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); } } } -static void TitleInit(void) +void BootTitleCreate(void) { s16 model; s16 sprite; AnimData *sprite_data; - titleModel[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); + s16 i; + titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); - titleModel[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); + titleMdlId[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); - titleModel[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); + titleMdlId[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); Hu3DModelCameraInfoSet(model, 1); Hu3DModelLightInfoSet(model, 1); - titleGroup = HuSprGrpCreate(4); + #if VERSION_NTSC + bootGrpId = HuSprGrpCreate(4); + #else + bootGrpId = HuSprGrpCreate(13); + #endif sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(titleGroup, 0, sprite); - HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF); - HuSprDrawNoSet(titleGroup, 0, 127); - HuSprPosSet(titleGroup, 0, 288, 240); + HuSprGrpMemberSet(bootGrpId, 0, sprite); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprDrawNoSet(bootGrpId, 0, 127); + HuSprPosSet(bootGrpId, 0, 288, 240); sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); sprite = HuSprCreate(sprite_data, 1, 0); - HuSprGrpMemberSet(titleGroup, 1, sprite); - HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF); - HuSprPosSet(titleGroup, 1, 288, 420); + HuSprGrpMemberSet(bootGrpId, 1, sprite); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprPosSet(bootGrpId, 1, 288, 420); + #if VERSION_NTSC sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); sprite = HuSprCreate(sprite_data, 2, 0); - HuSprGrpMemberSet(titleGroup, 2, sprite); - HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(titleGroup, 2, 288, 380); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 2, 288, 380); sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(titleGroup, 3, sprite); - HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(titleGroup, 3, 288, 200); + HuSprGrpMemberSet(bootGrpId, 3, sprite); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 3, 288, 200); + #else + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 2, 288, 200); + for(i=0; i<5; i++) { + sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); + sprite = HuSprCreate(sprite_data, 3+i, 0); + HuSprGrpMemberSet(bootGrpId, 3+i, sprite); + HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 3+i, 288, 340); + } + for(i=0; i<5; i++) { + sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); + sprite = HuSprCreate(sprite_data, 8+i, 0); + HuSprGrpMemberSet(bootGrpId, 8+i, sprite); + HuSprAttrSet(bootGrpId, 8+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 8+i, 288, 380); + } + #endif } -static BOOL TitleProc(void) +BOOL BootTitleExec(void) { float scale; float scale_time; int seNo[32]; + s16 pressStartMemberNo; + s16 languageMemberNo; s16 i; - Hu3DModelAttrReset(titleModel[0], HU3D_ATTR_DISPOFF); - Hu3DModelAttrReset(titleModel[1], HU3D_ATTR_DISPOFF); - HuSprAttrReset(titleGroup, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrReset(titleGroup, 1, HUSPR_ATTR_DISPOFF); + s16 choice; + float temp; + repeat: + Hu3DModelAttrReset(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(titleMdlId[1], HU3D_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 1, HUSPR_ATTR_DISPOFF); OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); HuAudSStreamPlay(20); @@ -514,24 +610,128 @@ static BOOL TitleProc(void) while (WipeStatGet()) { HuPrcVSleep(); } - HuSprAttrReset(titleGroup, 3, HUSPR_ATTR_DISPOFF); + #if VERSION_NTSC + HuSprAttrReset(bootGrpId, 3, HUSPR_ATTR_DISPOFF); for (i = 1; i <= 50; i++) { scale = (cosd(i * 1.8) * 10.0) + 1.0; - HuSprScaleSet(titleGroup, 3, scale, scale); - HuSprTPLvlSet(titleGroup, 3, i / 50.0); + HuSprScaleSet(bootGrpId, 3, scale, scale); + HuSprTPLvlSet(bootGrpId, 3, i / 50.0); HuPrcVSleep(); } - HuSprAttrReset(titleGroup, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for (i = 1; i <= 50; i++) { + scale = (cosd(i * 1.8) * 10.0) + 1.0; + HuSprScaleSet(bootGrpId, 2, scale, scale); + HuSprTPLvlSet(bootGrpId, 2, i / 50.0); + HuPrcVSleep(); + } + if(GwLanguage == -1) { + pressStartMemberNo = 3; + languageMemberNo = 8; + } else { + pressStartMemberNo = GwLanguage+3-1; + languageMemberNo = GwLanguage+8-1; + } + HuSprAttrReset(bootGrpId, pressStartMemberNo, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, languageMemberNo, HUSPR_ATTR_DISPOFF); + for(i=1; i<=20; i++) { + scale = sind(i*4.5); + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + HuSprScaleSet(bootGrpId, languageMemberNo, scale*0.7, scale*0.7); + HuPrcVSleep(); + } + choice = 0; + scale_time = 0; + #endif + + #if VERSION_NTSC for (i = scale_time = 0; i < 1800; i++) { + #else + for (i = temp = 0; i < 1800; i++) { + #endif + #if VERSION_PAL + if((choice == 0 && (HuPadDStkRep[0] & PAD_BUTTON_DOWN)) || (choice != 0 && (HuPadDStkRep[0] & PAD_BUTTON_UP))) { + HuAudFXPlay(0); + for(i=1; i<=10; i++) { + scale = ((1-(i/10.0))*(((cosd(scale_time)*0.1)+0.9)-0.7))+0.7; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = ((1-(i/10.0))*(((cosd(scale_time/3.0)*0.05)+0.65)-1.0))+1.0; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + HuPrcVSleep(); + } + choice ^= 1; + scale_time = 0; + } + if (HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + if(choice == 0) { + s32 ret = HuAudFXPlay(2092); + if (ret < 0) { + OSReport(">>>>>Error %d\n", ret); + } + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + return 1; + } else { + HuAudFXPlay(1); + HuAudSStreamAllFadeOut(500); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + LanguageMenuExec(); + Hu3DModelCameraInfoSet(titleMdlId[2], 1); + Hu3DModelLightInfoSet(titleMdlId[2], 1); + HuWinInit(1); + goto repeat; + } + } + scale = (cosd(scale_time) * 0.1) + 0.9; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = (cosd(scale_time/3.0) * 0.05) + 0.65; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + scale_time += 5; + HuPrcVSleep(); + #else if (i <= 10) { - HuSprTPLvlSet(titleGroup, 2, i / 10.0); + HuSprTPLvlSet(bootGrpId, 2, i / 10.0); } if (HuPadBtnDown[0] & PAD_BUTTON_START) { s32 ret = HuAudFXPlay(2092); if (ret < 0) { OSReport(">>>>>Error %d\n", ret); } - HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); return 1; } scale = (sind(i * scale_time) * 0.1) + 0.9; @@ -539,20 +739,48 @@ static BOOL TitleProc(void) if (scale_time > 5) { scale_time = 5; } - HuSprScaleSet(titleGroup, 2, scale, scale); + HuSprScaleSet(bootGrpId, 2, scale, scale); HuPrcVSleep(); + #endif + } WipeColorSet(255, 255, 255); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); } - Hu3DModelAttrSet(titleModel[0], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleModel[1], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(titleModel[2], HU3D_ATTR_DISPOFF); - HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF); - HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); + #if VERSION_NTSC + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + #endif return 0; } + +#include "nintendoData.inc" + +void *NintendoDataDecode(void) +{ + u32 *src = (u32 *)nintendoData; + u32 size = *src++; + void *dst = HuMemDirectMalloc(HEAP_DATA, size); + int decode_type = *src++; + if(dst) { + HuDecodeData(src, dst, size, decode_type); + } + return dst; +} \ No newline at end of file diff --git a/src/REL/bootDll/nintendo_data.c b/src/REL/bootDll/nintendo_data.c deleted file mode 100644 index 5cb14723..00000000 --- a/src/REL/bootDll/nintendo_data.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "game/data.h" - -#include "logoNintendoData.inc" - -void *logoReadNintendo(void) -{ - u32 *src = (u32 *)logoNintendoData; - u32 size = *src++; - void *dst = HuMemDirectMalloc(HEAP_DATA, size); - int decode_type = *src++; - if(dst) { - HuDecodeData(src, dst, size, decode_type); - } - return dst; -} \ No newline at end of file