Merge branch 'main' into main

This commit is contained in:
CreateSource 2025-03-05 20:44:20 -05:00 committed by GitHub
commit e486d2c27b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
47 changed files with 3413 additions and 2932 deletions

View file

@ -1,16 +1,16 @@
_prolog = .text:0x00000000; // type:function size:0x54 scope:global _prolog = .text:0x00000000; // type:function size:0x54 scope:global
_epilog = .text:0x00000054; // type:function size:0x4C scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global
ObjectSetup = .text:0x000000A0; // type:function size:0x8F4 ObjectSetup = .text:0x000000A0; // type:function size:0x8F4
fn_1_994 = .text:0x00000994; // type:function size:0xE50 scope:local InstMain = .text:0x00000994; // type:function size:0xE50 scope:local
fn_1_17E4 = .text:0x000017E4; // type:function size:0xA28 scope:local InstPlayerMain = .text:0x000017E4; // type:function size:0xA28 scope:local
fn_1_220C = .text:0x0000220C; // type:function size:0x5F8 scope:local InstHostMain = .text:0x0000220C; // type:function size:0x5F8 scope:local
fn_1_2804 = .text:0x00002804; // type:function size:0x79C scope:local InstWinMain = .text:0x00002804; // type:function size:0x79C scope:local
fn_1_2FA0 = .text:0x00002FA0; // type:function size:0x11D4 scope:local InstNameMain = .text:0x00002FA0; // type:function size:0x11D4 scope:local
fn_1_4174 = .text:0x00004174; // type:function size:0x3B4 scope:local CameraOutView = .text:0x00004174; // type:function size:0x3B4 scope:local
fn_1_4528 = .text:0x00004528; // type:function size:0xB88 scope:local CameraDebug = .text:0x00004528; // type:function size:0xB88 scope:local
fn_1_50B0 = .text:0x000050B0; // type:function size:0xAB4 scope:local InstPicDraw = .text:0x000050B0; // type:function size:0xAB4 scope:local
fn_1_5B64 = .text:0x00005B64; // type:function size:0x340 scope:local ShadowDraw = .text:0x00005B64; // type:function size:0x340 scope:local
fn_1_5EA4 = .text:0x00005EA4; // type:function size:0x4B8 FontCreate = .text:0x00005EA4; // type:function size:0x4B8
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte _ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors: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 lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
@ -115,38 +115,38 @@ lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:
lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float
lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double
lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 scope:local data:2byte instMode = .data:0x00000000; // type:object size:0x2 scope:local data:2byte
lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 scope:local data:string lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 scope:local data:string
lbl_1_data_26 = .data:0x00000026; // type:object size:0x20 scope:local instGrpTbl = .data:0x00000026; // type:object size:0x20 scope:local
lbl_1_data_46 = .data:0x00000046; // type:object size:0x8 scope:local instPlayerNumTbl = .data:0x00000046; // type:object size:0x8 scope:local
lbl_1_data_50 = .data:0x00000050; // type:object size:0x20 scope:local instBoxFile = .data:0x00000050; // type:object size:0x20 scope:local
lbl_1_data_70 = .data:0x00000070; // type:object size:0x20 scope:local instBackFile = .data:0x00000070; // type:object size:0x20 scope:local
lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 scope:local data:string lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 scope:local data:string
lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:string lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:string
lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 scope:local data:string lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 scope:local data:string
lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 scope:local data:string lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 scope:local data:string
lbl_1_data_B0 = .data:0x000000B0; // type:object size:0x10 scope:local playerPosNameTbl = .data:0x000000B0; // type:object size:0x10 scope:local
lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x4 scope:local playerDelayTbl = .data:0x000000C0; // type:object size:0x4 scope:local
lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x48 scope:local hostFileTbl = .data:0x000000C4; // type:object size:0x48 scope:local
lbl_1_data_10C = .data:0x0000010C; // type:object size:0x18 scope:local hostSeTbl = .data:0x0000010C; // type:object size:0x18 scope:local
lbl_1_data_124 = .data:0x00000124; // type:object size:0x20 scope:local data:float instNamePosTbl = .data:0x00000124; // type:object size:0x20 scope:local data:float
lbl_1_data_144 = .data:0x00000144; // type:object size:0x4 scope:local cameraMask$858 = .data:0x00000144; // type:object size:0x4 scope:local
lbl_1_data_148 = .data:0x00000148; // type:object size:0x4 scope:local lbl_1_data_148 = .data:0x00000148; // type:object size:0x4 scope:local
lbl_1_data_14C = .data:0x0000014C; // type:object size:0x4 scope:local data:float instPicRadius = .data:0x0000014C; // type:object size:0x4 scope:local data:float
lbl_1_data_150 = .data:0x00000150; // type:object size:0x318 scope:local FontCharFile = .data:0x00000150; // type:object size:0x318 scope:local
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte debugCamOnF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte instBusyF = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_6 = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte instPage = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x1 scope:local data:byte LanguageNo = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:float instFov = .bss:0x0000000C; // type:object size:0x4 scope:local data:float
lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x2 scope:local data:2byte instMesOfs = .bss:0x00000010; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x2 scope:local data:2byte instHostNo = .bss:0x00000012; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 scope:local data:2byte instMgNo = .bss:0x00000014; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte instPicAnim = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte instBoxMdlId = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 scope:local data:float cameraZoom = .bss:0x00000020; // type:object size:0x8 data:float
lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 scope:local data:float cameraPos = .bss:0x00000028; // type:object size:0x18 data:float
lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 scope:local data:float cameraRot = .bss:0x00000040; // type:object size:0x18 data:float
lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 scope:local data:4byte objman = .bss:0x00000058; // type:object size:0x4 data:4byte
lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x4 scope:local data:4byte outViewObj = .bss:0x0000005C; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 scope:local data:4byte lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 scope:local data:4byte

View file

@ -1,34 +1,34 @@
_prolog = .text:0x00000000; // type:function size:0x54 scope:global _prolog = .text:0x00000000; // type:function size:0x54 scope:global
_epilog = .text:0x00000054; // type:function size:0x4C scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global
ObjectSetup = .text:0x000000A0; // type:function size:0x438 ObjectSetup = .text:0x000000A0; // type:function size:0x438
fn_1_4D8 = .text:0x000004D8; // type:function size:0x3B0 ResultMain = .text:0x000004D8; // type:function size:0x3B0 scope:local
fn_1_888 = .text:0x00000888; // type:function size:0x2F0 ResultIdle = .text:0x00000888; // type:function size:0x2F0 scope:local
fn_1_B78 = .text:0x00000B78; // type:function size:0x13D4 ResultCreate = .text:0x00000B78; // type:function size:0x13D4 scope:local
fn_1_1F4C = .text:0x00001F4C; // type:function size:0xB90 ResultStatAdd = .text:0x00001F4C; // type:function size:0xB90 scope:local
fn_1_2ADC = .text:0x00002ADC; // type:function size:0x1074 ResultOrderApply = .text:0x00002ADC; // type:function size:0x1074 scope:local
fn_1_3B50 = .text:0x00003B50; // type:function size:0x15C ResultSprNumSet = .text:0x00003B50; // type:function size:0x15C scope:local
fn_1_3CAC = .text:0x00003CAC; // type:function size:0x15C ResultCoinAddNumSet = .text:0x00003CAC; // type:function size:0x15C scope:local
fn_1_3E08 = .text:0x00003E08; // type:function size:0x1D0 ResultOrderSet = .text:0x00003E08; // type:function size:0x1D0 scope:local
fn_1_3FD8 = .text:0x00003FD8; // type:function size:0x104 ResultBoardDataRead = .text:0x00003FD8; // type:function size:0x104
fn_1_40DC = .text:0x000040DC; // type:function size:0x160 ResultCoinAdd = .text:0x000040DC; // type:function size:0x160
fn_1_423C = .text:0x0000423C; // type:function size:0x3E0 ResultCoinNumGet = .text:0x0000423C; // type:function size:0x3E0
fn_1_461C = .text:0x0000461C; // type:function size:0x1E0 SaveExec = .text:0x0000461C; // type:function size:0x1E0 scope:local
fn_1_47FC = .text:0x000047FC; // type:function size:0x1084 ResultTeamExec = .text:0x000047FC; // type:function size:0x1084 scope:local
fn_1_5880 = .text:0x00005880; // type:function size:0xC10 CameraDebug = .text:0x00005880; // type:function size:0xC10
fn_1_6490 = .text:0x00006490; // type:function size:0x2D0 ResultBattleMain = .text:0x00006490; // type:function size:0x2D0
fn_1_6760 = .text:0x00006760; // type:function size:0xC4 ResultBattleIdle = .text:0x00006760; // type:function size:0xC4 scope:local
fn_1_6824 = .text:0x00006824; // type:function size:0xD20 ResultBattleCreate = .text:0x00006824; // type:function size:0xD20 scope:local
fn_1_7544 = .text:0x00007544; // type:function size:0xA54 ResultBattleStatAdd = .text:0x00007544; // type:function size:0xA54 scope:local
fn_1_7F98 = .text:0x00007F98; // type:function size:0x3A0 ResultBattleCoinAddShow = .text:0x00007F98; // type:function size:0x3A0 scope:local
fn_1_8338 = .text:0x00008338; // type:function size:0x14C ResultBattleCoinAddNumSet = .text:0x00008338; // type:function size:0x14C scope:local
fn_1_8484 = .text:0x00008484; // type:function size:0x1D4 ResultBattleOrderSet = .text:0x00008484; // type:function size:0x1D4 scope:local
fn_1_8658 = .text:0x00008658; // type:function size:0x84 CoinEffectInit = .text:0x00008658; // type:function size:0x84 scope:local
fn_1_86DC = .text:0x000086DC; // type:function size:0x2BC CoinEffectAdd = .text:0x000086DC; // type:function size:0x2BC scope:local
fn_1_8998 = .text:0x00008998; // type:function size:0x320 CoinEffectMain = .text:0x00008998; // type:function size:0x320 scope:local
fn_1_8CB8 = .text:0x00008CB8; // type:function size:0x340 ResultShadowDraw = .text:0x00008CB8; // type:function size:0x340 scope:local
fn_1_8FF8 = .text:0x00008FF8; // type:function size:0x284 StageModelCreate = .text:0x00008FF8; // type:function size:0x284
fn_1_927C = .text:0x0000927C; // type:function size:0x138 StageSpriteCreate = .text:0x0000927C; // type:function size:0x138
fn_1_93B4 = .text:0x000093B4; // type:function size:0x78 StageSpriteKill = .text:0x000093B4; // type:function size:0x78
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte _ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors: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 lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
@ -134,77 +134,77 @@ lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:
lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float
lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double
lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 resultModel = .data:0x00000000; // type:object size:0x2A4 scope:local
lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0xDC data:4byte resultSprite = .data:0x000002A4; // type:object size:0xDC scope:local data:4byte
lbl_1_data_380 = .data:0x00000380; // type:object size:0x2 data:2byte rankNewGrpId = .data:0x00000380; // type:object size:0x2 scope:local data:2byte
lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string
lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x18 resultBackFile = .data:0x000003A8; // type:object size:0x18 scope:local
lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x18 resultLetterFile = .data:0x000003C0; // type:object size:0x18 scope:local
lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x20 resultStatPosTbl = .data:0x000003D8; // type:object size:0x20 scope:local
lbl_1_data_3F8 = .data:0x000003F8; // type:object size:0x10 resultRankPosTbl = .data:0x000003F8; // type:object size:0x10 scope:local
lbl_1_data_408 = .data:0x00000408; // type:object size:0x30 resultCharPosTbl = .data:0x00000408; // type:object size:0x30 scope:local
lbl_1_data_438 = .data:0x00000438; // type:object size:0x10 resultCoinAddPosTbl = .data:0x00000438; // type:object size:0x10 scope:local
lbl_1_data_448 = .data:0x00000448; // type:object size:0x5 scope:local data:string lbl_1_data_448 = .data:0x00000448; // type:object size:0x5 scope:local data:string
lbl_1_data_450 = .data:0x00000450; // type:object size:0x18 resultBoardDirTbl = .data:0x00000450; // type:object size:0x18 scope:local
lbl_1_data_468 = .data:0x00000468; // type:object size:0x20 resultCharMdlTbl = .data:0x00000468; // type:object size:0x20 scope:local
lbl_1_data_488 = .data:0x00000488; // type:object size:0x30 resultTeamCharPosTbl = .data:0x00000488; // type:object size:0x30 scope:local
lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string
lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string
lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string
lbl_1_data_4E8 = .data:0x000004E8; // type:object size:0x270 resultBattleModel = .data:0x000004E8; // type:object size:0x270 scope:local
lbl_1_data_758 = .data:0x00000758; // type:object size:0x28 resultBattleSprite = .data:0x00000758; // type:object size:0x28 scope:local
lbl_1_data_780 = .data:0x00000780; // type:object size:0x50 resultBattleEffParMan = .data:0x00000780; // type:object size:0x50 scope:local
lbl_1_data_7D0 = .data:0x000007D0; // type:object size:0x20 resultStatPosTbl = .data:0x000007D0; // type:object size:0x20 scope:local
lbl_1_data_7F0 = .data:0x000007F0; // type:object size:0x30 playerPosTbl = .data:0x000007F0; // type:object size:0x30 scope:local
lbl_1_data_820 = .data:0x00000820; // type:object size:0x10 lbl_1_data_820 = .data:0x00000820; // type:object size:0x10
lbl_1_data_830 = .data:0x00000830; // type:object size:0x10 bomheiCubeMdlTbl = .data:0x00000830; // type:object size:0x10 scope:local
lbl_1_data_840 = .data:0x00000840; // type:object size:0x20 coinEffectYOfs = .data:0x00000840; // type:object size:0x20 scope:local
lbl_1_data_860 = .data:0x00000860; // type:object size:0x20 coinAddYOfs = .data:0x00000860; // type:object size:0x20 scope:local
lbl_1_data_880 = .data:0x00000880; // type:object size:0x20 coinBlankYOfs = .data:0x00000880; // type:object size:0x20 scope:local
lbl_1_data_8A0 = .data:0x000008A0; // type:object size:0x6 data:2byte coinNumXOfs = .data:0x000008A0; // type:object size:0x6 scope:local data:2byte
lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 scope:local data:float lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 scope:local data:string
lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 scope:local data:float lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 scope:local data:string
lbl_1_data_8B8 = .data:0x000008B8; // type:object size:0x60 cameraShakeOfs = .data:0x000008B8; // type:object size:0x60 scope:local
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte resultReorderF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte resultSkipF = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x2 data:2byte resultTeamOrder = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_A = .bss:0x0000000A; // type:object size:0x8 resultCharCubeMdlId = .bss:0x0000000A; // type:object size:0x8 scope:local
lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x28 resultCoinAddSprId = .bss:0x00000012; // type:object size:0x28 scope:local
lbl_1_bss_3A = .bss:0x0000003A; // type:object size:0x8 resultCoinAddGrpId = .bss:0x0000003A; // type:object size:0x8 scope:local
lbl_1_bss_42 = .bss:0x00000042; // type:object size:0x8 resultRank = .bss:0x00000042; // type:object size:0x8 scope:local
lbl_1_bss_4A = .bss:0x0000004A; // type:object size:0x8 resultOrder = .bss:0x0000004A; // type:object size:0x8 scope:local
lbl_1_bss_52 = .bss:0x00000052; // type:object size:0x2 data:2byte resultRankGrpId = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x8 resultPlayerCubeMdlId = .bss:0x00000054; // type:object size:0x8 scope:local
lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x40 resultCubeMdlId = .bss:0x0000005C; // type:object size:0x40 scope:local
lbl_1_bss_9C = .bss:0x0000009C; // type:object size:0x2 data:2byte resultCrownGrpId = .bss:0x0000009C; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_9E = .bss:0x0000009E; // type:object size:0x30 resultNumSprId = .bss:0x0000009E; // type:object size:0x30 scope:local
lbl_1_bss_CE = .bss:0x000000CE; // type:object size:0x12 resultNumGrpId = .bss:0x000000CE; // type:object size:0x10 scope:local
lbl_1_bss_E0 = .bss:0x000000E0; // type:object size:0x4 data:4byte resultCrownAnim = .bss:0x000000E0; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x60 resultCharAnim = .bss:0x000000E4; // type:object size:0x60 scope:local
lbl_1_bss_144 = .bss:0x00000144; // type:object size:0x14 resultRankAnim = .bss:0x00000144; // type:object size:0x14 scope:local
lbl_1_bss_158 = .bss:0x00000158; // type:object size:0x10 statShadowMdlId = .bss:0x00000158; // type:object size:0x10 scope:local
lbl_1_bss_168 = .bss:0x00000168; // type:object size:0x8 charShadowMdlId = .bss:0x00000168; // type:object size:0x8 scope:local
lbl_1_bss_170 = .bss:0x00000170; // type:object size:0x2 data:2byte teamResultGrpId = .bss:0x00000170; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_172 = .bss:0x00000172; // type:object size:0x2 data:2byte resultBonusPlayer = .bss:0x00000172; // type:object size:0x2 data:2byte
lbl_1_bss_174 = .bss:0x00000174; // type:object size:0x4 data:4byte resultFastF = .bss:0x00000174; // type:object size:0x4 data:4byte
lbl_1_bss_178 = .bss:0x00000178; // type:object size:0x4 data:4byte resultReadEndF = .bss:0x00000178; // type:object size:0x4 data:4byte
lbl_1_bss_17C = .bss:0x0000017C; // type:object size:0x2 data:2byte resultMgNo = .bss:0x0000017C; // type:object size:0x2 data:2byte
lbl_1_bss_180 = .bss:0x00000180; // type:object size:0x4 data:4byte objman = .bss:0x00000180; // type:object size:0x4 data:4byte
lbl_1_bss_184 = .bss:0x00000184; // type:object size:0x4 data:4byte outViewObj = .bss:0x00000184; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte
lbl_1_bss_190 = .bss:0x00000190; // type:object size:0x4 data:4byte resultBattleSkipF = .bss:0x00000190; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_194 = .bss:0x00000194; // type:object size:0x1680 coinEffectData = .bss:0x00000194; // type:object size:0x1680 scope:local
lbl_1_bss_1814 = .bss:0x00001814; // type:object size:0x8 resultBattleEffParManId = .bss:0x00001814; // type:object size:0x8 scope:local
lbl_1_bss_181C = .bss:0x0000181C; // type:object size:0xC lbl_1_bss_181C = .bss:0x0000181C; // type:object size:0xC
lbl_1_bss_1828 = .bss:0x00001828; // type:object size:0x168 data:2byte coinEffectMdlId = .bss:0x00001828; // type:object size:0x168 scope:local data:2byte
lbl_1_bss_1990 = .bss:0x00001990; // type:object size:0x20 resultBattleCharMot = .bss:0x00001990; // type:object size:0x20 scope:local
lbl_1_bss_19B0 = .bss:0x000019B0; // type:object size:0x8 resultBattleCharMdl = .bss:0x000019B0; // type:object size:0x8 scope:local
lbl_1_bss_19B8 = .bss:0x000019B8; // type:object size:0x28 coinNumSprId = .bss:0x000019B8; // type:object size:0x28 scope:local
lbl_1_bss_19E0 = .bss:0x000019E0; // type:object size:0x8 coinNumGrpId = .bss:0x000019E0; // type:object size:0x8 scope:local
lbl_1_bss_19E8 = .bss:0x000019E8; // type:object size:0x8 resultBattleRank = .bss:0x000019E8; // type:object size:0x8 scope:local
lbl_1_bss_19F0 = .bss:0x000019F0; // type:object size:0x8 resultBattleOrder = .bss:0x000019F0; // type:object size:0x8 scope:local
lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20 lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20
lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2 lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2
lbl_1_bss_1A1A = .bss:0x00001A1A; // type:object size:0x42 data:2byte stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte
lbl_1_bss_1A5C = .bss:0x00001A5C; // type:object size:0x40 data:2byte stageMotId = .bss:0x00001A5C; // type:object size:0x40 data:2byte
lbl_1_bss_1A9C = .bss:0x00001A9C; // type:object size:0x40 data:2byte stageSprId = .bss:0x00001A9C; // type:object size:0x40 data:2byte

View file

@ -3668,7 +3668,7 @@ atanhi = .rodata:0x8011E9B8; // type:object size:0x20 scope:local
atanlo = .rodata:0x8011E9D8; // type:object size:0x20 scope:local atanlo = .rodata:0x8011E9D8; // type:object size:0x20 scope:local
aT = .rodata:0x8011E9F8; // type:object size:0x58 scope:local aT = .rodata:0x8011E9F8; // type:object size:0x58 scope:local
@62 = .rodata:0x8011EA50; // type:object size:0x1C scope:local data:string @62 = .rodata:0x8011EA50; // type:object size:0x1C scope:local data:string
lbl_8011EA70 = .rodata:0x8011EA70; // type:object size:0x20 lbl_8011EA70 = .rodata:0x8011EA70; // type:object size:0x1D data:string
gTRKMemMap = .rodata:0x8011EA90; // type:object size:0x10 data:4byte gTRKMemMap = .rodata:0x8011EA90; // type:object size:0x10 data:4byte
lbl_8011EAA0 = .rodata:0x8011EAA0; // type:object size:0x28 data:4byte lbl_8011EAA0 = .rodata:0x8011EAA0; // type:object size:0x28 data:4byte
lbl_8011EAC8 = .rodata:0x8011EAC8; // type:object size:0x28 data:4byte lbl_8011EAC8 = .rodata:0x8011EAC8; // type:object size:0x28 data:4byte

View file

@ -1,16 +1,16 @@
_prolog = .text:0x00000000; // type:function size:0x54 scope:global _prolog = .text:0x00000000; // type:function size:0x54 scope:global
_epilog = .text:0x00000054; // type:function size:0x4C scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global
ObjectSetup = .text:0x000000A0; // type:function size:0x8F4 ObjectSetup = .text:0x000000A0; // type:function size:0x8F4
fn_1_994 = .text:0x00000994; // type:function size:0xE50 InstMain = .text:0x00000994; // type:function size:0xE50 scope:local
fn_1_17E4 = .text:0x000017E4; // type:function size:0xA28 InstPlayerMain = .text:0x000017E4; // type:function size:0xA28 scope:local
fn_1_220C = .text:0x0000220C; // type:function size:0x5F8 InstHostMain = .text:0x0000220C; // type:function size:0x5F8 scope:local
fn_1_2804 = .text:0x00002804; // type:function size:0x79C InstWinMain = .text:0x00002804; // type:function size:0x79C scope:local
fn_1_2FA0 = .text:0x00002FA0; // type:function size:0x11D4 InstNameMain = .text:0x00002FA0; // type:function size:0x11D4 scope:local
fn_1_4174 = .text:0x00004174; // type:function size:0x3B4 CameraOutView = .text:0x00004174; // type:function size:0x3B4 scope:local
fn_1_4528 = .text:0x00004528; // type:function size:0xB88 CameraDebug = .text:0x00004528; // type:function size:0xB88 scope:local
fn_1_50B0 = .text:0x000050B0; // type:function size:0xAB4 InstPicDraw = .text:0x000050B0; // type:function size:0xAB4 scope:local
fn_1_5B64 = .text:0x00005B64; // type:function size:0x340 ShadowDraw = .text:0x00005B64; // type:function size:0x340 scope:local
fn_1_5EA4 = .text:0x00005EA4; // type:function size:0x3F8 FontCreate = .text:0x00005EA4; // type:function size:0x3F8
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte _ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors: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 lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float
@ -112,36 +112,38 @@ lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float
lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float
lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float
lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double
lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte instMode = .data:0x00000000; // type:object size:0x2 scope:local data:2byte
lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 data:string lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 scope:local data:string
lbl_1_data_26 = .data:0x00000026; // type:object size:0x20 instGrpTbl = .data:0x00000026; // type:object size:0x20 scope:local
lbl_1_data_46 = .data:0x00000046; // type:object size:0xA instPlayerNumTbl = .data:0x00000046; // type:object size:0x8 scope:local
lbl_1_data_50 = .data:0x00000050; // type:object size:0x20 instBoxFile = .data:0x00000050; // type:object size:0x20 scope:local
lbl_1_data_70 = .data:0x00000070; // type:object size:0x20 instBackFile = .data:0x00000070; // type:object size:0x20 scope:local
lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 data:string lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 scope:local data:string
lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 data:string lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:string
lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 data:string lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 scope:local data:string
lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 data:string lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 scope:local data:string
lbl_1_data_B0 = .data:0x000000B0; // type:object size:0x10 playerPosNameTbl = .data:0x000000B0; // type:object size:0x10 scope:local
lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x4 playerDelayTbl = .data:0x000000C0; // type:object size:0x4 scope:local
lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x48 hostFileTbl = .data:0x000000C4; // type:object size:0x48 scope:local
lbl_1_data_10C = .data:0x0000010C; // type:object size:0x18 hostSeTbl = .data:0x0000010C; // type:object size:0x18 scope:local
lbl_1_data_124 = .data:0x00000124; // type:object size:0x20 data:float instNamePosTbl = .data:0x00000124; // type:object size:0x20 scope:local data:float
lbl_1_data_144 = .data:0x00000144; // type:object size:0x8 cameraMask$858 = .data:0x00000144; // type:object size:0x4 scope:local
lbl_1_data_14C = .data:0x0000014C; // type:object size:0x4 data:float lbl_1_data_148 = .data:0x00000148; // type:object size:0x4 scope:local
lbl_1_data_150 = .data:0x00000150; // type:object size:0x4C0 instPicRadius = .data:0x0000014C; // type:object size:0x4 scope:local data:float
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte FontCharFile = .data:0x00000150; // type:object size:0x4C0 scope:local
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 data:2byte debugCamOnF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_6 = .bss:0x00000006; // type:object size:0x2 data:2byte instBusyF = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte instPage = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:float LanguageNo = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x2 data:2byte instFov = .bss:0x0000000C; // type:object size:0x4 scope:local data:float
lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x2 data:2byte instMesOfs = .bss:0x00000010; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 data:2byte instHostNo = .bss:0x00000012; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte instMgNo = .bss:0x00000014; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:4byte instPicAnim = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:float instBoxMdlId = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 data:float cameraZoom = .bss:0x00000020; // type:object size:0x8 data:float
lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 data:float cameraPos = .bss:0x00000028; // type:object size:0x18 data:float
lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte cameraRot = .bss:0x00000040; // type:object size:0x18 data:float
lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x8 data:4byte objman = .bss:0x00000058; // type:object size:0x4 data:4byte
outViewObj = .bss:0x0000005C; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 scope:local data:4byte

View file

@ -1,34 +1,34 @@
_prolog = .text:0x00000000; // type:function size:0x54 scope:global _prolog = .text:0x00000000; // type:function size:0x54 scope:global
_epilog = .text:0x00000054; // type:function size:0x4C scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global
ObjectSetup = .text:0x000000A0; // type:function size:0x438 ObjectSetup = .text:0x000000A0; // type:function size:0x438
fn_1_4D8 = .text:0x000004D8; // type:function size:0x3B0 ResultMain = .text:0x000004D8; // type:function size:0x3B0 scope:local
fn_1_888 = .text:0x00000888; // type:function size:0x2F0 ResultIdle = .text:0x00000888; // type:function size:0x2F0 scope:local
fn_1_B78 = .text:0x00000B78; // type:function size:0x13D4 ResultCreate = .text:0x00000B78; // type:function size:0x13D4 scope:local
fn_1_1F4C = .text:0x00001F4C; // type:function size:0xB90 ResultStatAdd = .text:0x00001F4C; // type:function size:0xB90 scope:local
fn_1_2ADC = .text:0x00002ADC; // type:function size:0x1074 ResultOrderApply = .text:0x00002ADC; // type:function size:0x1074 scope:local
fn_1_3B50 = .text:0x00003B50; // type:function size:0x15C ResultSprNumSet = .text:0x00003B50; // type:function size:0x15C scope:local
fn_1_3CAC = .text:0x00003CAC; // type:function size:0x15C ResultCoinAddNumSet = .text:0x00003CAC; // type:function size:0x15C scope:local
fn_1_3E08 = .text:0x00003E08; // type:function size:0x1D0 ResultOrderSet = .text:0x00003E08; // type:function size:0x1D0 scope:local
fn_1_3FD8 = .text:0x00003FD8; // type:function size:0x104 ResultBoardDataRead = .text:0x00003FD8; // type:function size:0x104
fn_1_40DC = .text:0x000040DC; // type:function size:0x160 ResultCoinAdd = .text:0x000040DC; // type:function size:0x160
fn_1_423C = .text:0x0000423C; // type:function size:0x3E0 ResultCoinNumGet = .text:0x0000423C; // type:function size:0x3E0
fn_1_461C = .text:0x0000461C; // type:function size:0x1E0 SaveExec = .text:0x0000461C; // type:function size:0x1E0 scope:local
fn_1_47FC = .text:0x000047FC; // type:function size:0x1084 ResultTeamExec = .text:0x000047FC; // type:function size:0x1084 scope:local
fn_1_5880 = .text:0x00005880; // type:function size:0xC10 CameraDebug = .text:0x00005880; // type:function size:0xC10
fn_1_6490 = .text:0x00006490; // type:function size:0x2D0 ResultBattleMain = .text:0x00006490; // type:function size:0x2D0
fn_1_6760 = .text:0x00006760; // type:function size:0xC4 ResultBattleIdle = .text:0x00006760; // type:function size:0xC4 scope:local
fn_1_6824 = .text:0x00006824; // type:function size:0xD20 ResultBattleCreate = .text:0x00006824; // type:function size:0xD20 scope:local
fn_1_7544 = .text:0x00007544; // type:function size:0xA54 ResultBattleStatAdd = .text:0x00007544; // type:function size:0xA54 scope:local
fn_1_7F98 = .text:0x00007F98; // type:function size:0x3A0 ResultBattleCoinAddShow = .text:0x00007F98; // type:function size:0x3A0 scope:local
fn_1_8338 = .text:0x00008338; // type:function size:0x14C ResultBattleCoinAddNumSet = .text:0x00008338; // type:function size:0x14C scope:local
fn_1_8484 = .text:0x00008484; // type:function size:0x1D4 ResultBattleOrderSet = .text:0x00008484; // type:function size:0x1D4 scope:local
fn_1_8658 = .text:0x00008658; // type:function size:0x84 CoinEffectInit = .text:0x00008658; // type:function size:0x84 scope:local
fn_1_86DC = .text:0x000086DC; // type:function size:0x2BC CoinEffectAdd = .text:0x000086DC; // type:function size:0x2BC scope:local
fn_1_8998 = .text:0x00008998; // type:function size:0x320 CoinEffectMain = .text:0x00008998; // type:function size:0x320 scope:local
fn_1_8CB8 = .text:0x00008CB8; // type:function size:0x340 ResultShadowDraw = .text:0x00008CB8; // type:function size:0x340 scope:local
fn_1_8FF8 = .text:0x00008FF8; // type:function size:0x284 StageModelCreate = .text:0x00008FF8; // type:function size:0x284
fn_1_927C = .text:0x0000927C; // type:function size:0x138 StageSpriteCreate = .text:0x0000927C; // type:function size:0x138
fn_1_93B4 = .text:0x000093B4; // type:function size:0x78 StageSpriteKill = .text:0x000093B4; // type:function size:0x78
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte _ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors: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 lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
@ -94,7 +94,7 @@ lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:
lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float
lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float
lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:float lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float
lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float
lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float
lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float
@ -134,77 +134,77 @@ lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:
lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float
lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double
lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 resultModel = .data:0x00000000; // type:object size:0x2A4 scope:local
lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0xDC data:4byte resultSprite = .data:0x000002A4; // type:object size:0xDC scope:local data:4byte
lbl_1_data_380 = .data:0x00000380; // type:object size:0x2 data:2byte rankNewGrpId = .data:0x00000380; // type:object size:0x2 scope:local data:2byte
lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string
lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x18 resultBackFile = .data:0x000003A8; // type:object size:0x18 scope:local
lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x18 resultLetterFile = .data:0x000003C0; // type:object size:0x18 scope:local
lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x20 resultStatPosTbl = .data:0x000003D8; // type:object size:0x20 scope:local
lbl_1_data_3F8 = .data:0x000003F8; // type:object size:0x10 resultRankPosTbl = .data:0x000003F8; // type:object size:0x10 scope:local
lbl_1_data_408 = .data:0x00000408; // type:object size:0x30 resultCharPosTbl = .data:0x00000408; // type:object size:0x30 scope:local
lbl_1_data_438 = .data:0x00000438; // type:object size:0x10 resultCoinAddPosTbl = .data:0x00000438; // type:object size:0x10 scope:local
lbl_1_data_448 = .data:0x00000448; // type:object size:0x8 scope:local lbl_1_data_448 = .data:0x00000448; // type:object size:0x5 scope:local data:string
lbl_1_data_450 = .data:0x00000450; // type:object size:0x18 resultBoardDirTbl = .data:0x00000450; // type:object size:0x18 scope:local
lbl_1_data_468 = .data:0x00000468; // type:object size:0x20 resultCharMdlTbl = .data:0x00000468; // type:object size:0x20 scope:local
lbl_1_data_488 = .data:0x00000488; // type:object size:0x30 resultTeamCharPosTbl = .data:0x00000488; // type:object size:0x30 scope:local
lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string
lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string
lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string
lbl_1_data_4E8 = .data:0x000004E8; // type:object size:0x270 resultBattleModel = .data:0x000004E8; // type:object size:0x270 scope:local
lbl_1_data_758 = .data:0x00000758; // type:object size:0x28 resultBattleSprite = .data:0x00000758; // type:object size:0x28 scope:local
lbl_1_data_780 = .data:0x00000780; // type:object size:0x50 resultBattleEffParMan = .data:0x00000780; // type:object size:0x50 scope:local
lbl_1_data_7D0 = .data:0x000007D0; // type:object size:0x20 resultStatPosTbl = .data:0x000007D0; // type:object size:0x20 scope:local
lbl_1_data_7F0 = .data:0x000007F0; // type:object size:0x30 playerPosTbl = .data:0x000007F0; // type:object size:0x30 scope:local
lbl_1_data_820 = .data:0x00000820; // type:object size:0x10 lbl_1_data_820 = .data:0x00000820; // type:object size:0x10
lbl_1_data_830 = .data:0x00000830; // type:object size:0x10 bomheiCubeMdlTbl = .data:0x00000830; // type:object size:0x10 scope:local
lbl_1_data_840 = .data:0x00000840; // type:object size:0x20 coinEffectYOfs = .data:0x00000840; // type:object size:0x20 scope:local
lbl_1_data_860 = .data:0x00000860; // type:object size:0x20 coinAddYOfs = .data:0x00000860; // type:object size:0x20 scope:local
lbl_1_data_880 = .data:0x00000880; // type:object size:0x20 coinBlankYOfs = .data:0x00000880; // type:object size:0x20 scope:local
lbl_1_data_8A0 = .data:0x000008A0; // type:object size:0x6 data:2byte coinNumXOfs = .data:0x000008A0; // type:object size:0x6 scope:local data:2byte
lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 scope:local data:float lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 scope:local data:string
lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 scope:local data:float lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 scope:local data:string
lbl_1_data_8B8 = .data:0x000008B8; // type:object size:0x60 cameraShakeOfs = .data:0x000008B8; // type:object size:0x60 scope:local
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte resultReorderF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte resultSkipF = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x2 data:2byte resultTeamOrder = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_A = .bss:0x0000000A; // type:object size:0x8 resultCharCubeMdlId = .bss:0x0000000A; // type:object size:0x8 scope:local
lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x28 resultCoinAddSprId = .bss:0x00000012; // type:object size:0x28 scope:local
lbl_1_bss_3A = .bss:0x0000003A; // type:object size:0x8 resultCoinAddGrpId = .bss:0x0000003A; // type:object size:0x8 scope:local
lbl_1_bss_42 = .bss:0x00000042; // type:object size:0x8 resultRank = .bss:0x00000042; // type:object size:0x8 scope:local
lbl_1_bss_4A = .bss:0x0000004A; // type:object size:0x8 resultOrder = .bss:0x0000004A; // type:object size:0x8 scope:local
lbl_1_bss_52 = .bss:0x00000052; // type:object size:0x2 data:2byte resultRankGrpId = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x8 resultPlayerCubeMdlId = .bss:0x00000054; // type:object size:0x8 scope:local
lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x40 resultCubeMdlId = .bss:0x0000005C; // type:object size:0x40 scope:local
lbl_1_bss_9C = .bss:0x0000009C; // type:object size:0x2 data:2byte resultCrownGrpId = .bss:0x0000009C; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_9E = .bss:0x0000009E; // type:object size:0x30 resultNumSprId = .bss:0x0000009E; // type:object size:0x30 scope:local
lbl_1_bss_CE = .bss:0x000000CE; // type:object size:0x12 resultNumGrpId = .bss:0x000000CE; // type:object size:0x10 scope:local
lbl_1_bss_E0 = .bss:0x000000E0; // type:object size:0x4 data:4byte resultCrownAnim = .bss:0x000000E0; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x60 resultCharAnim = .bss:0x000000E4; // type:object size:0x60 scope:local
lbl_1_bss_144 = .bss:0x00000144; // type:object size:0x14 resultRankAnim = .bss:0x00000144; // type:object size:0x14 scope:local
lbl_1_bss_158 = .bss:0x00000158; // type:object size:0x10 statShadowMdlId = .bss:0x00000158; // type:object size:0x10 scope:local
lbl_1_bss_168 = .bss:0x00000168; // type:object size:0x8 charShadowMdlId = .bss:0x00000168; // type:object size:0x8 scope:local
lbl_1_bss_170 = .bss:0x00000170; // type:object size:0x2 data:2byte teamResultGrpId = .bss:0x00000170; // type:object size:0x2 scope:local data:2byte
lbl_1_bss_172 = .bss:0x00000172; // type:object size:0x2 data:2byte resultBonusPlayer = .bss:0x00000172; // type:object size:0x2 data:2byte
lbl_1_bss_174 = .bss:0x00000174; // type:object size:0x4 data:4byte resultFastF = .bss:0x00000174; // type:object size:0x4 data:4byte
lbl_1_bss_178 = .bss:0x00000178; // type:object size:0x4 data:4byte resultReadEndF = .bss:0x00000178; // type:object size:0x4 data:4byte
lbl_1_bss_17C = .bss:0x0000017C; // type:object size:0x2 data:2byte resultMgNo = .bss:0x0000017C; // type:object size:0x2 data:2byte
lbl_1_bss_180 = .bss:0x00000180; // type:object size:0x4 data:4byte objman = .bss:0x00000180; // type:object size:0x4 data:4byte
lbl_1_bss_184 = .bss:0x00000184; // type:object size:0x4 data:4byte outViewObj = .bss:0x00000184; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte
lbl_1_bss_190 = .bss:0x00000190; // type:object size:0x4 data:4byte resultBattleSkipF = .bss:0x00000190; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_194 = .bss:0x00000194; // type:object size:0x1680 coinEffectData = .bss:0x00000194; // type:object size:0x1680 scope:local
lbl_1_bss_1814 = .bss:0x00001814; // type:object size:0x8 resultBattleEffParManId = .bss:0x00001814; // type:object size:0x8 scope:local
lbl_1_bss_181C = .bss:0x0000181C; // type:object size:0xC lbl_1_bss_181C = .bss:0x0000181C; // type:object size:0xC
lbl_1_bss_1828 = .bss:0x00001828; // type:object size:0x168 data:2byte coinEffectMdlId = .bss:0x00001828; // type:object size:0x168 scope:local data:2byte
lbl_1_bss_1990 = .bss:0x00001990; // type:object size:0x20 resultBattleCharMot = .bss:0x00001990; // type:object size:0x20 scope:local
lbl_1_bss_19B0 = .bss:0x000019B0; // type:object size:0x8 resultBattleCharMdl = .bss:0x000019B0; // type:object size:0x8 scope:local
lbl_1_bss_19B8 = .bss:0x000019B8; // type:object size:0x28 coinNumSprId = .bss:0x000019B8; // type:object size:0x28 scope:local
lbl_1_bss_19E0 = .bss:0x000019E0; // type:object size:0x8 coinNumGrpId = .bss:0x000019E0; // type:object size:0x8 scope:local
lbl_1_bss_19E8 = .bss:0x000019E8; // type:object size:0x8 resultBattleRank = .bss:0x000019E8; // type:object size:0x8 scope:local
lbl_1_bss_19F0 = .bss:0x000019F0; // type:object size:0x8 resultBattleOrder = .bss:0x000019F0; // type:object size:0x8 scope:local
lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20 lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20
lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2 lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2
lbl_1_bss_1A1A = .bss:0x00001A1A; // type:object size:0x42 data:2byte stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte
lbl_1_bss_1A5C = .bss:0x00001A5C; // type:object size:0x40 data:2byte stageMotId = .bss:0x00001A5C; // type:object size:0x40 data:2byte
lbl_1_bss_1A9C = .bss:0x00001A9C; // type:object size:0x40 data:2byte stageSprId = .bss:0x00001A9C; // type:object size:0x40 data:2byte

View file

@ -238,12 +238,11 @@ cflags_msl = [
cflags_trk = [ cflags_trk = [
*cflags_base, *cflags_base,
"-use_lmw_stmw on", "-use_lmw_stmw on",
"-str reuse,pool,readonly", "-str reuse,readonly",
"-common off", "-common off",
"-sdata 0", "-sdata 0",
"-sdata2 0", "-sdata2 0",
"-inline auto,deferred", "-inline auto,deferred",
"-pool off",
"-enum min", "-enum min",
"-sdatathreshold 0" "-sdatathreshold 0"
] ]
@ -742,13 +741,13 @@ config.libs = [
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mainloop.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mainloop.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubevent.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubevent.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubinit.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/nubinit.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/msg.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msg.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/msgbuf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msgbuf.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/serpoll.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/serpoll.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/usr_put.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/usr_put.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/dispatch.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dispatch.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/msghndlr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msghndlr.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/support.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/support.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mutex_TRK.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mutex_TRK.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/notify.c"), Object(NonMatching, "TRK_MINNOW_DOLPHIN/notify.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/flush_cache.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/flush_cache.c"),
@ -761,8 +760,8 @@ config.libs = [
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/main_TRK.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/main_TRK.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c"), Object(NonMatching, "TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targcont.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targcont.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/target_options.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/target_options.c"),
Object(NonMatching, "TRK_MINNOW_DOLPHIN/mslsupp.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mslsupp.c"),
], ],
}, },
MusyX( MusyX(
@ -1457,9 +1456,9 @@ config.libs = [
Rel( Rel(
"resultDll", "resultDll",
objects={ objects={
Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/resultDll/main.c"), Object(Matching, "REL/resultDll/main.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/battle.c"),
Object(MatchingFor("GMPE01_00", "GMPE01_01", "GMPJ01_00"), "REL/resultDll/datalist.c"), Object(Matching, "REL/resultDll/datalist.c"),
}, },
), ),
Rel( Rel(

View file

@ -254,6 +254,9 @@ typedef struct ProcessorRestoreFlags_PPC {
void TRKSaveExtended1Block(); void TRKSaveExtended1Block();
void SetUseSerialIO(u8);
u8 GetUseSerialIO(void);
#define SPR_XER 1 #define SPR_XER 1
#define SPR_LR 8 #define SPR_LR 8
#define SPR_CTR 9 #define SPR_CTR 9

View file

@ -3,6 +3,6 @@
#include "game/minigame_seq.h" #include "game/minigame_seq.h"
s32 fn_1_5EA4(SeqWork *work, char *mess, s16 jp_flag); s32 FontCreate(SeqWork *work, char *mess, s16 jp_flag);
#endif #endif

View file

@ -7,7 +7,7 @@
#include "game/sprite.h" #include "game/sprite.h"
typedef struct datalist_model { typedef struct StageModel_s {
s32 datanum; s32 datanum;
u32 attr; u32 attr;
s16 type; s16 type;
@ -16,33 +16,33 @@ typedef struct datalist_model {
Vec pos; Vec pos;
Vec rot; Vec rot;
Vec scale; Vec scale;
} DataListModel; } StageModel;
typedef struct datalist_sprite { typedef struct StageSprite_s {
u32 datanum; u32 datanum;
s16 attr; s16 attr;
s16 prio; s16 prio;
float x; float x;
float y; float y;
GXColor color; GXColor color;
} DataListSprite; } StageSprite;
void fn_1_3FD8(void); void ResultBoardDataRead(void);
void fn_1_40DC(void); void ResultCoinAdd(void);
void fn_1_423C(s16 *data); void ResultCoinNumGet(s16 *coinNum);
void fn_1_6490(void); void ResultBattleMain(void);
void fn_1_8FF8(DataListModel *model_list); void StageModelCreate(StageModel *model_list);
void fn_1_927C(DataListSprite *sprite_list); void StageSpriteCreate(StageSprite *sprite_list);
void fn_1_93B4(void); void StageSpriteKill(void);
extern s16 lbl_1_bss_1A9C[32]; extern s16 stageMdlId[32];
extern s16 lbl_1_bss_1A5C[32]; extern s16 stageMotId[32];
extern s16 lbl_1_bss_1A1A[33]; extern s16 stageSprId[33];
extern s16 lbl_1_bss_1A18; extern s16 lbl_1_bss_1A18;
extern s32 lbl_1_bss_178; extern s32 resultReadEndF;
extern s32 lbl_1_bss_174; extern s32 resultFastF;
extern s16 lbl_1_bss_172; extern s16 resultBonusPlayer;
#endif #endif

View file

@ -8,7 +8,7 @@ typedef struct _TRK_Msg {
u8 _00[8]; u8 _00[8];
u32 m_msgLength; u32 m_msgLength;
u32 _0C; u32 _0C;
u32 m_msg; u8 m_msg[4]; // TODO: unknown array length
} TRK_Msg; } TRK_Msg;
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -12,7 +12,7 @@ DSError TRKInitializeMessageBuffers(void);
DSError TRKSetBufferPosition(TRKBuffer* msg, u32 pos); DSError TRKSetBufferPosition(TRKBuffer* msg, u32 pos);
void* TRKGetBuffer(int); void* TRKGetBuffer(int);
void TRKResetBuffer(TRKBuffer* msg, BOOL keepData); void TRKResetBuffer(TRKBuffer* msg, u8 keepData);
void* TRKGetBuffer(int idx); void* TRKGetBuffer(int idx);
void TRKReleaseBuffer(int idx); void TRKReleaseBuffer(int idx);
DSError TRKGetFreeBuffer(int* msgID, TRKBuffer** outMsg); DSError TRKGetFreeBuffer(int* msgID, TRKBuffer** outMsg);

View file

@ -15,12 +15,12 @@ DSError TRKRequestSend(TRKBuffer* msgBuf, int* bufferId, u32 p1, u32 p2,
int p3); int p3);
DSError HandleOpenFileSupportRequest(const char* path, u8 replyError, DSError HandleOpenFileSupportRequest(const char* path, u8 replyError,
u32* param_3, DSIOResult* ioResult); u32* param_3, u8* ioResult);
DSError HandleCloseFileSupportRequest(int replyError, DSIOResult* ioResult); DSError HandleCloseFileSupportRequest(int replyError, u8* ioResult);
DSError HandlePositionFileSupportRequest(DSReplyError replyErr, u32* param_2, DSError HandlePositionFileSupportRequest(u32 replyErr, u32* param_2,
u8 param_3, DSIOResult* ioResult); u8 param_3, u8* ioResult);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -7,7 +7,7 @@
extern "C" { extern "C" {
#endif #endif
u32 TRKTargetCPUMinorType(void); u8 TRKTargetCPUMinorType(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -40,8 +40,8 @@ typedef struct system_state {
}; };
/* 0x09 */ s8 last5_effect; /* 0x09 */ s8 last5_effect;
/* 0x0A */ s8 player_curr; /* 0x0A */ s8 player_curr;
/* 0x0B */ u8 unk0B; /* 0x0B */ u8 storyCharBit;
/* 0x0C */ s8 unk0C; /* 0x0C */ s8 storyChar;
/* 0x0E */ s16 block_pos; /* 0x0E */ s16 block_pos;
/* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; /* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32];
/* 0x30 */ u8 mess_delay; /* 0x30 */ u8 mess_delay;
@ -137,9 +137,9 @@ typedef struct game_stat {
u8 story_continue : 1; u8 story_continue : 1;
u8 party_continue : 1; u8 party_continue : 1;
u8 open_w06 : 1; u8 open_w06 : 1;
u8 field10E_bit4 : 1; u8 veryHardUnlock : 1;
u8 field10E_bit5 : 1; u8 customPackEnable : 1;
u8 field10E_bit6 : 1; u8 musicAllF : 1;
}; };
/* 0x10F */ PauseBackupConfig story_pause; /* 0x10F */ PauseBackupConfig story_pause;
/* 0x110 */ PauseBackupConfig party_pause; /* 0x110 */ PauseBackupConfig party_pause;
@ -300,11 +300,6 @@ static inline s32 GWSaveModeGet(void)
return GWSystem.save_mode; return GWSystem.save_mode;
} }
static inline s32 GWTurnGet(void)
{
return GWSystem.turn;
}
static inline s32 GWBoardGet(void) static inline s32 GWBoardGet(void)
{ {
return GWSystem.board; return GWSystem.board;
@ -315,9 +310,14 @@ static inline s32 GWPlayerCurrGet(void)
return GWSystem.player_curr; return GWSystem.player_curr;
} }
static inline s32 GWUnkB1Get(void) static inline s32 GWStoryCharGet(void)
{ {
return GWSystem.unk0C; return GWSystem.storyChar;
}
static inline void GWStoryCharSet(s32 storyChar)
{
GWSystem.storyChar = storyChar;
} }
static inline s32 GWPlayerTeamGet(s32 player) static inline s32 GWPlayerTeamGet(s32 player)

View file

@ -2,7 +2,7 @@
#include "REL/instDll.h" #include "REL/instDll.h"
s32 lbl_1_data_150[0xC6] = { static s32 FontCharFile[0xC6] = {
0, 0,
0, 0,
0, 0,
@ -203,115 +203,115 @@ s32 lbl_1_data_150[0xC6] = {
DATA_MAKE_NUM(DATADIR_INST, 0x25), DATA_MAKE_NUM(DATADIR_INST, 0x25),
}; };
s32 fn_1_5EA4(SeqWork *work, char *mess, s16 jp_flag) s32 FontCreate(SeqWork *work, char *mess, s16 jp_flag)
{ {
char *var_r31; char *str;
s16 var_r30; s16 len;
s16 *var_r29; s16 *posY;
s16 var_r28; s16 charNum;
s32 *var_r27; s32 *fileTbl;
s16 var_r26; s16 i;
s16 var_r25; s16 grpNo;
s32 var_r24; s32 file;
s16 *var_r22; s16 *posX;
AnimData **var_r21; AnimData **animP;
s16 var_r20; s16 gid;
s16 var_r19; s16 sprid;
var_r27 = lbl_1_data_150; fileTbl = FontCharFile;
for (var_r25 = 0; var_r25 < 0x10; var_r25++) { for (grpNo = 0; grpNo < 0x10; grpNo++) {
if (work->spr_grp[var_r25] == -1) { if (work->spr_grp[grpNo] == -1) {
break; break;
} }
} }
if (var_r25 == 0x10) { if (grpNo == 0x10) {
return -1; return -1;
} }
var_r21 = HuMemDirectMalloc(HEAP_SYSTEM, 0x190); animP = HuMemDirectMalloc(HEAP_SYSTEM, 0x190);
var_r22 = HuMemDirectMalloc(HEAP_SYSTEM, 0xC8); posX = HuMemDirectMalloc(HEAP_SYSTEM, 0xC8);
var_r29 = HuMemDirectMalloc(HEAP_SYSTEM, 0xC8); posY = HuMemDirectMalloc(HEAP_SYSTEM, 0xC8);
for (var_r31 = mess, var_r30 = 0, var_r28 = 0; var_r31[0] != 0; var_r31++) { for (str = mess, len = 0, charNum = 0; str[0] != 0; str++) {
if (var_r31[0] == 0x20 || var_r31[0] == 0x10) { if (str[0] == 0x20 || str[0] == 0x10) {
var_r30 += 0xE; len += 0xE;
} }
else if (var_r31[0] < 0x30) { else if (str[0] < 0x30) {
} }
else if (var_r31[0] == 0x80) { else if (str[0] == 0x80) {
} }
else if (var_r31[0] == 0x81) { else if (str[0] == 0x81) {
} }
else { else {
if (var_r31[1] == 0x80) { if (str[1] == 0x80) {
if ((var_r31[0] >= 0x96) && (var_r31[0] <= 0xA4)) { if ((str[0] >= 0x96) && (str[0] <= 0xA4)) {
var_r24 = var_r27[var_r31[0] + 0x6A]; file = fileTbl[str[0] + 0x6A];
} }
else if ((var_r31[0] >= 0xAA) && (var_r31[0] <= 0xAE)) { else if ((str[0] >= 0xAA) && (str[0] <= 0xAE)) {
var_r24 = var_r27[var_r31[0] + 0x65]; file = fileTbl[str[0] + 0x65];
} }
else if ((var_r31[0] >= 0xD6) && (var_r31[0] <= 0xE4)) { else if ((str[0] >= 0xD6) && (str[0] <= 0xE4)) {
var_r24 = var_r27[var_r31[0] + 0x43]; file = fileTbl[str[0] + 0x43];
} }
else if ((var_r31[0] >= 0xEA) && (var_r31[0] <= 0xEE)) { else if ((str[0] >= 0xEA) && (str[0] <= 0xEE)) {
var_r24 = var_r27[var_r31[0] + 0x3E]; file = fileTbl[str[0] + 0x3E];
} }
} }
else if (var_r31[1] == 0x81) { else if (str[1] == 0x81) {
if ((var_r31[0] >= 0xAA) && (var_r31[0] <= 0xAE)) { if ((str[0] >= 0xAA) && (str[0] <= 0xAE)) {
var_r24 = var_r27[var_r31[0] + 0x6A]; file = fileTbl[str[0] + 0x6A];
} }
else if ((var_r31[0] >= 0xEA) && (var_r31[0] <= 0xEE)) { else if ((str[0] >= 0xEA) && (str[0] <= 0xEE)) {
var_r24 = var_r27[var_r31[0] + 0x43]; file = fileTbl[str[0] + 0x43];
} }
} }
else { else {
var_r24 = var_r27[var_r31[0]]; file = fileTbl[str[0]];
} }
var_r21[var_r28] = HuSprAnimReadFile(var_r24); animP[charNum] = HuSprAnimReadFile(file);
var_r22[var_r28] = var_r30; posX[charNum] = len;
if ((var_r31[0] >= 0x61) && (var_r31[0] <= 0x7A)) { if ((str[0] >= 0x61) && (str[0] <= 0x7A)) {
var_r29[var_r28] = 2; posY[charNum] = 2;
var_r30 += 0x12; len += 0x12;
} }
else if ((var_r31[0] == 0xC2) || (var_r31[0] == 0xC3)) { else if ((str[0] == 0xC2) || (str[0] == 0xC3)) {
var_r29[var_r28] = 0; posY[charNum] = 0;
var_r30 += 0x12; len += 0x12;
} }
else if (var_r31[0] == 0x5C || var_r31[0] == 0x85) { else if (str[0] == 0x5C || str[0] == 0x85) {
var_r29[var_r28] = 0; posY[charNum] = 0;
var_r30 += 8; len += 8;
} }
else if ((var_r31[0] >= 0x87) && (var_r31[0] <= 0x8F)) { else if ((str[0] >= 0x87) && (str[0] <= 0x8F)) {
var_r29[var_r28] = 4; posY[charNum] = 4;
var_r30 += 0x18; len += 0x18;
} }
else if ((var_r31[0] >= 0xC7) && (var_r31[0] <= 0xCF)) { else if ((str[0] >= 0xC7) && (str[0] <= 0xCF)) {
var_r29[var_r28] = 4; posY[charNum] = 4;
var_r30 += 0x18; len += 0x18;
} }
else if ((var_r31[0] == 0x3D) || (var_r31[0] == 0x84)) { else if ((str[0] == 0x3D) || (str[0] == 0x84)) {
var_r29[var_r28] = 0; posY[charNum] = 0;
var_r30 += 0x14; len += 0x14;
} }
else { else {
var_r29[var_r28] = 0; posY[charNum] = 0;
var_r30 += 0x1C; len += 0x1C;
} }
var_r28++; charNum++;
} }
} }
var_r20 = HuSprGrpCreate(var_r28); gid = HuSprGrpCreate(charNum);
work->spr_grp[var_r25] = var_r20; work->spr_grp[grpNo] = gid;
work->alt_word_len = var_r30; work->alt_word_len = len;
var_r30 = (var_r30 / 2) - 0xE; len = (len / 2) - 0xE;
for (var_r26 = 0; var_r26 < var_r28; var_r26++) { for (i = 0; i < charNum; i++) {
var_r19 = HuSprCreate(var_r21[var_r26], 0, 0); sprid = HuSprCreate(animP[i], 0, 0);
HuSprGrpMemberSet(var_r20, var_r26, var_r19); HuSprGrpMemberSet(gid, i, sprid);
HuSprPosSet(var_r20, var_r26, var_r22[var_r26] - var_r30, var_r29[var_r26]); HuSprPosSet(gid, i, posX[i] - len, posY[i]);
} }
work->word_len = var_r28; work->word_len = charNum;
HuMemDirectFree(var_r21); HuMemDirectFree(animP);
HuMemDirectFree(var_r22); HuMemDirectFree(posX);
HuMemDirectFree(var_r29); HuMemDirectFree(posY);
return var_r25; return grpNo;
} }

File diff suppressed because it is too large Load diff

View file

@ -200,8 +200,8 @@ void fn_1_658C(Process *arg0)
CharKill(-1); CharKill(-1);
} }
lbl_1_bss_A8[4] = GWGameStat.open_w06; lbl_1_bss_A8[4] = GWGameStat.open_w06;
lbl_1_bss_A8[5] = GWGameStat.field10E_bit4; lbl_1_bss_A8[5] = GWGameStat.veryHardUnlock;
lbl_1_bss_A8[6] = GWGameStat.field10E_bit5; lbl_1_bss_A8[6] = GWGameStat.customPackEnable;
switch (lbl_1_bss_A8[0]) { switch (lbl_1_bss_A8[0]) {
case 0: case 0:
HuAudSndGrpSetSet(7); HuAudSndGrpSetSet(7);
@ -340,11 +340,9 @@ void fn_1_6C4C(void)
print8(var_r30, var_r29 + 0xAA, 1.0f, "MODE:%d MAP:%d", lbl_1_bss_A8[0], lbl_1_bss_A8[2]); print8(var_r30, var_r29 + 0xAA, 1.0f, "MODE:%d MAP:%d", lbl_1_bss_A8[0], lbl_1_bss_A8[2]);
print8(var_r30, var_r29 + 0xBE, 1.0f, "NO) IDX:GRP:COM:DIF:PAD:CHR"); print8(var_r30, var_r29 + 0xBE, 1.0f, "NO) IDX:GRP:COM:DIF:PAD:CHR");
for (var_r31 = 0; var_r31 < 4; var_r31++) { for (var_r31 = 0; var_r31 < 4; var_r31++) {
s32 spC;
s32 sp8 = lbl_1_bss_3114[var_r31].unk_6C;
spC = lbl_1_bss_3114[var_r31].unk_68;
print8(var_r30, var_r29 + 0xC8 + (var_r31 * 0xA), 1.0f, "%2d) %3d:%3d:%3d:%3d:%3d:%3d", var_r31, lbl_1_bss_3114[var_r31].unk_58, print8(var_r30, var_r29 + 0xC8 + (var_r31 * 0xA), 1.0f, "%2d) %3d:%3d:%3d:%3d:%3d:%3d", var_r31, lbl_1_bss_3114[var_r31].unk_58,
lbl_1_bss_3114[var_r31].unk_5C, lbl_1_bss_3114[var_r31].unk_60, lbl_1_bss_3114[var_r31].unk_64); lbl_1_bss_3114[var_r31].unk_5C, lbl_1_bss_3114[var_r31].unk_60, lbl_1_bss_3114[var_r31].unk_64, lbl_1_bss_3114[var_r31].unk_6C, lbl_1_bss_3114[var_r31].unk_68);
} }
print8(var_r30, var_r29 + 0xF0, 1.0f, "NO) FG0:FG1:FG2:FG3"); print8(var_r30, var_r29 + 0xF0, 1.0f, "NO) FG0:FG1:FG2:FG3");
for (var_r31 = 0; var_r31 < 4; var_r31++) { for (var_r31 = 0; var_r31 < 4; var_r31++) {
@ -2693,12 +2691,6 @@ void fn_1_E71C(s32 arg0)
} }
} }
inline void fn_1_E874_inline(void)
{
s32 sp18 = lbl_1_bss_3114[0].unk_68;
GWSystem.unk0C = sp18;
}
void fn_1_E874(omObjData *arg0, MentDllUnkBss35BCStruct *arg1) void fn_1_E874(omObjData *arg0, MentDllUnkBss35BCStruct *arg1)
{ {
s32 var_r31; s32 var_r31;
@ -2757,7 +2749,7 @@ void fn_1_E874(omObjData *arg0, MentDllUnkBss35BCStruct *arg1)
var_r18 = 0; var_r18 = 0;
} }
BoardStoryConfigSet(var_r24, var_r18); BoardStoryConfigSet(var_r24, var_r18);
fn_1_E874_inline(); GWStoryCharSet(lbl_1_bss_3114[0].unk_68);
// looks a bit similar to fn_1_7304 // looks a bit similar to fn_1_7304
for (var_r31 = 1; var_r31 < 4; var_r31++) { for (var_r31 = 1; var_r31 < 4; var_r31++) {
lbl_1_bss_3114[var_r31].unk_68 = -1; lbl_1_bss_3114[var_r31].unk_68 = -1;

View file

@ -1075,7 +1075,7 @@ s32 fn_1_1D688(StructBss8_24 *arg0)
var_r28 = 0; var_r28 = 0;
var_r26 = arg0->unk64; var_r26 = arg0->unk64;
if (HuPadStkX[lbl_1_bss_1E10->unk6C] >= 5 || (HuPadBtn[lbl_1_bss_1E10->unk6C] & 2)) { if (HuPadStkX[lbl_1_bss_1E10->unk6C] >= 5 || (HuPadBtn[lbl_1_bss_1E10->unk6C] & 2)) {
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk64++; arg0->unk64++;
var_r28 = 1; var_r28 = 1;
if (arg0->unk64 > 3) { if (arg0->unk64 > 3) {
@ -1091,7 +1091,7 @@ s32 fn_1_1D688(StructBss8_24 *arg0)
} }
} }
else if (HuPadStkX[lbl_1_bss_1E10->unk6C] <= -5 || (HuPadBtn[lbl_1_bss_1E10->unk6C] & 1)) { else if (HuPadStkX[lbl_1_bss_1E10->unk6C] <= -5 || (HuPadBtn[lbl_1_bss_1E10->unk6C] & 1)) {
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk64--; arg0->unk64--;
var_r28 = -1; var_r28 = -1;
if (arg0->unk64 < 0) { if (arg0->unk64 < 0) {

View file

@ -930,10 +930,10 @@ void fn_1_4010(void)
} }
} }
if (spA[0] >= 4 && spA[1] >= 3 && spA[2] >= 3 && spA[3] >= 2) { if (spA[0] >= 4 && spA[1] >= 3 && spA[2] >= 3 && spA[3] >= 2) {
GWGameStat.field10E_bit5 = 1; GWGameStat.customPackEnable = 1;
} }
else { else {
GWGameStat.field10E_bit5 = 0; GWGameStat.customPackEnable = 0;
} }
pos2D = lbl_1_data_40[2]; pos2D = lbl_1_data_40[2];
pos2D.z = 800; pos2D.z = 800;

View file

@ -1859,7 +1859,7 @@ void fn_1_A8C0(s16 boxno)
SLLoadBoardStory(); SLLoadBoardStory();
lbl_1_bss_EE[boxno] = GWGameStat.total_stars; lbl_1_bss_EE[boxno] = GWGameStat.total_stars;
lbl_1_bss_D0[boxno] = GWGameStat.create_time; lbl_1_bss_D0[boxno] = GWGameStat.create_time;
lbl_1_bss_E8[boxno] = GWSystem.unk0C; lbl_1_bss_E8[boxno] = GWSystem.storyChar;
lbl_1_bss_C4[boxno] = GWGameStat.story_continue; lbl_1_bss_C4[boxno] = GWGameStat.story_continue;
lbl_1_bss_B8[boxno] = GWGameStat.party_continue; lbl_1_bss_B8[boxno] = GWGameStat.party_continue;
if (GWGameStat.story_continue) { if (GWGameStat.story_continue) {

View file

@ -2441,7 +2441,7 @@ s32 fn_1_19A98(MpexDllUnkStruct4 *arg0)
goto block_2; goto block_2;
} }
} }
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk_54++; arg0->unk_54++;
var_r28 = 1; var_r28 = 1;
if (arg0->unk_54 > 3) { if (arg0->unk_54 > 3) {
@ -2457,7 +2457,7 @@ s32 fn_1_19A98(MpexDllUnkStruct4 *arg0)
goto block_1; goto block_1;
block_2: block_2:
if (HuPadStkX[lbl_1_bss_45C->unk_58] <= -5 || HuPadBtn[lbl_1_bss_45C->unk_58] & PAD_BUTTON_LEFT) { if (HuPadStkX[lbl_1_bss_45C->unk_58] <= -5 || HuPadBtn[lbl_1_bss_45C->unk_58] & PAD_BUTTON_LEFT) {
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk_54--; arg0->unk_54--;
var_r28 = -1; var_r28 = -1;
if (arg0->unk_54 < 0) { if (arg0->unk_54 < 0) {

View file

@ -105,7 +105,7 @@ void fn_1_188F0(Process *arg0, s32 arg1)
{ {
lbl_1_bss_B38 = arg0; lbl_1_bss_B38 = arg0;
if (GWSystem.diff_story == 2) { if (GWSystem.diff_story == 2) {
GWGameStat.field10E_bit4 = TRUE; GWGameStat.veryHardUnlock = TRUE;
} }
lbl_1_bss_C0C.unk0C = arg1; lbl_1_bss_C0C.unk0C = arg1;
fn_1_C30(); fn_1_C30();
@ -298,7 +298,7 @@ void fn_1_19334(void)
Hu3DModelAttrSet(lbl_1_bss_B94.unk00->model[1], 1); Hu3DModelAttrSet(lbl_1_bss_B94.unk00->model[1], 1);
HuAudSeqFadeOut(lbl_1_bss_78[0], 100); HuAudSeqFadeOut(lbl_1_bss_78[0], 100);
lbl_1_bss_B3C = 2; lbl_1_bss_B3C = 2;
GWGameStat.field10E_bit6 = TRUE; GWGameStat.musicAllF = TRUE;
WipeColorSet(0, 0, 0); WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
while (WipeStatGet()) { while (WipeStatGet()) {
@ -406,8 +406,8 @@ void fn_1_199A0(void)
HuPrcVSleep(); HuPrcVSleep();
} }
fn_1_BE8(60); fn_1_BE8(60);
var_r28 = GWUnkB1Get(); var_r28 = GWStoryCharGet();
GWSystem.unk0B |= 1 << var_r28; GWSystem.storyCharBit |= 1 << var_r28;
if (SLSaveFlagGet() == 1) { if (SLSaveFlagGet() == 1) {
HuWinInit(1); HuWinInit(1);
HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(30, 22)); HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(30, 22));

View file

@ -171,7 +171,7 @@ void fn_1_4F4(void) {
case 1: case 1:
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (GWPlayerCfg[i].character == GWUnkB1Get()) { if (GWPlayerCfg[i].character == GWStoryCharGet()) {
break; break;
} }
} }
@ -179,7 +179,7 @@ void fn_1_4F4(void) {
break; break;
case 2: case 2:
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (GWPlayerCfg[i].character == GWUnkB1Get()) { if (GWPlayerCfg[i].character == GWStoryCharGet()) {
break; break;
} }
} }

View file

@ -619,7 +619,7 @@ void fn_1_17570(void) {
} else { } else {
fn_1_159A4(); fn_1_159A4();
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (lbl_1_bss_1A0C.unk38[i].unk10 != GWUnkB1Get()) { if (lbl_1_bss_1A0C.unk38[i].unk10 != GWStoryCharGet()) {
continue; continue;
} }
_SetFlag(9); _SetFlag(9);

View file

@ -575,15 +575,13 @@ void fn_1_13A0(void)
GWPlayerCfg[0].character = itemno/6; GWPlayerCfg[0].character = itemno/6;
{ {
s32 i; s32 i;
s32 character;
for(i=1; i<4; i++) { for(i=1; i<4; i++) {
GWPlayerCfg[i].character = GWPlayerCfg[i-1].character+1; GWPlayerCfg[i].character = GWPlayerCfg[i-1].character+1;
if(GWPlayerCfg[i].character > GW_CHARACTER_MAX) { if(GWPlayerCfg[i].character > GW_CHARACTER_MAX) {
GWPlayerCfg[i].character = 0; GWPlayerCfg[i].character = 0;
} }
} }
character = GWPlayerCfg[0].character; GWStoryCharSet(GWPlayerCfg[0].character);
GWSystem.unk0C = character;
GWPlayer[0].character = GWPlayerCfg[0].character; GWPlayer[0].character = GWPlayerCfg[0].character;
GWPlayer[1].character = GWPlayerCfg[1].character; GWPlayer[1].character = GWPlayerCfg[1].character;
GWPlayer[2].character = GWPlayerCfg[2].character; GWPlayer[2].character = GWPlayerCfg[2].character;

View file

@ -147,7 +147,7 @@ void fn_1_488(void) {
switch (omovlevtno) { switch (omovlevtno) {
case 0: case 0:
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (GWPlayerCfg[i].character == GWUnkB1Get()) { if (GWPlayerCfg[i].character == GWStoryCharGet()) {
break; break;
} }
} }
@ -155,7 +155,7 @@ void fn_1_488(void) {
break; break;
case 1: case 1:
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (GWPlayerCfg[i].character == GWUnkB1Get()) { if (GWPlayerCfg[i].character == GWStoryCharGet()) {
break; break;
} }
} }

View file

@ -513,9 +513,9 @@ omObjData *OptionSoundCreate(void)
for (i = 0; i < NUM_BOARDS; i++) { for (i = 0; i < NUM_BOARDS; i++) {
musicPageOn[i + 3] = (GWGameStat.board_play_count[i] != 0) ? TRUE : FALSE; musicPageOn[i + 3] = (GWGameStat.board_play_count[i] != 0) ? TRUE : FALSE;
} }
musicPageOn[11] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; musicPageOn[11] = (GWGameStat.musicAllF != 0) ? TRUE : FALSE;
musicPageOn[12] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; musicPageOn[12] = (GWGameStat.musicAllF != 0) ? TRUE : FALSE;
musicPageOn[13] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; musicPageOn[13] = (GWGameStat.musicAllF != 0) ? TRUE : FALSE;
return object; return object;
} }

View file

@ -19,7 +19,9 @@
#include "REL/resultdll.h" #include "REL/resultdll.h"
DataListModel lbl_1_data_4E8[] = { { DATA_MAKE_NUM(DATADIR_RESULT, 0x08), 0, 0, -1, -1, { -300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, #define COIN_EFFECT_MAX 180
static StageModel resultBattleModel[] = { { DATA_MAKE_NUM(DATADIR_RESULT, 0x08), 0, 0, -1, -1, { -300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } },
{ DATA_MAKE_NUM(DATADIR_RESULT, 0x09), 0, 0, -1, -1, { -100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, { DATA_MAKE_NUM(DATADIR_RESULT, 0x09), 0, 0, -1, -1, { -100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } },
{ DATA_MAKE_NUM(DATADIR_RESULT, 0x0A), 0, 0, -1, -1, { 100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, { DATA_MAKE_NUM(DATADIR_RESULT, 0x0A), 0, 0, -1, -1, { 100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } },
{ DATA_MAKE_NUM(DATADIR_RESULT, 0x0A), 0, 0, -1, -1, { 300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, { DATA_MAKE_NUM(DATADIR_RESULT, 0x0A), 0, 0, -1, -1, { 300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } },
@ -32,12 +34,12 @@ DataListModel lbl_1_data_4E8[] = { { DATA_MAKE_NUM(DATADIR_RESULT, 0x08), 0, 0,
{ DATA_MAKE_NUM(DATADIR_RESULT, 0x0F), 0x40000002, 0, -1, -1, { 5000, 0, 0 }, { 0, 0, 0 }, { 2.0f, 2.0f, 2.0f } }, { DATA_MAKE_NUM(DATADIR_RESULT, 0x0F), 0x40000002, 0, -1, -1, { 5000, 0, 0 }, { 0, 0, 0 }, { 2.0f, 2.0f, 2.0f } },
{ -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } } }; { -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } } };
DataListSprite lbl_1_data_758[] = { static StageSprite resultBattleSprite[] = {
{ DATA_MAKE_NUM(DATADIR_RESULT, 0x43), 0, 10, 288, 240, { 255, 255, 255, 255 } }, { DATA_MAKE_NUM(DATADIR_RESULT, 0x43), 0, 10, 288, 240, { 255, 255, 255, 255 } },
{ 0, 0, 0, 0, 0, { 0, 0, 0, 0 } }, { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } },
}; };
HsfanimStruct00 lbl_1_data_780 = { 80, { 0, 0 }, 3, 30, 90, { 0, -0.2, 0 }, 5.0f, 0.95f, 10.0f, 0.995f, 2, static HsfanimStruct00 resultBattleEffParMan = { 80, { 0, 0 }, 3, 30, 90, { 0, -0.2, 0 }, 5.0f, 0.95f, 10.0f, 0.995f, 2,
{ {
{ 255, 192, 112, 255 }, { 255, 192, 112, 255 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 },
@ -49,9 +51,10 @@ HsfanimStruct00 lbl_1_data_780 = { 80, { 0, 0 }, 3, 30, 90, { 0, -0.2, 0 }, 5.0f
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 },
} }; }
};
s16 lbl_1_data_7D0[] = { static s16 resultStatPosTbl[] = {
320, 320,
132, 132,
500, 500,
@ -70,103 +73,103 @@ s16 lbl_1_data_7D0[] = {
387, 387,
}; };
Vec lbl_1_data_7F0[] = { { -300, 270, 0 }, { -100, 180, 500 }, { 100, 90, 500 }, { 300, 0, 500 } }; static Vec playerPosTbl[] = { { -300, 270, 0 }, { -100, 180, 500 }, { 100, 90, 500 }, { 300, 0, 500 } };
s16 lbl_1_data_820[] = { -284, 148, -84, 233, 116, 318, 316, 403 }; s16 lbl_1_data_820[] = { -284, 148, -84, 233, 116, 318, 316, 403 };
s32 lbl_1_data_830[] = { DATA_MAKE_NUM(DATADIR_RESULT, 0x08), DATA_MAKE_NUM(DATADIR_RESULT, 0x09), DATA_MAKE_NUM(DATADIR_RESULT, 0x0A), static s32 bomheiCubeMdlTbl[] = { DATA_MAKE_NUM(DATADIR_RESULT, 0x08), DATA_MAKE_NUM(DATADIR_RESULT, 0x09), DATA_MAKE_NUM(DATADIR_RESULT, 0x0A),
DATA_MAKE_NUM(DATADIR_RESULT, 0x0A) }; DATA_MAKE_NUM(DATADIR_RESULT, 0x0A) };
float lbl_1_data_840[] = { 130, 150, 170, 150, 150, 130, 170, 190 }; static float coinEffectYOfs[] = { 130, 150, 170, 150, 150, 130, 170, 190 };
float lbl_1_data_860[] = { 130, 150, 180, 150, 150, 170, 180, 210 }; static float coinAddYOfs[] = { 130, 150, 180, 150, 150, 170, 180, 210 };
float lbl_1_data_880[] = { 140, 160, 180, 150, 150, 120, 180, 210 }; static float coinBlankYOfs[] = { 140, 160, 180, 150, 150, 120, 180, 210 };
s16 lbl_1_data_8A0[] = { 8, 0, -8 }; static s16 coinNumXOfs[] = { 8, 0, -8 };
typedef struct struct_unk194 { typedef struct CoinEffect_s {
s16 unk0; s16 playerNo;
s16 unk2; s16 rank;
Vec unk4; Vec pos;
Vec unk10; Vec rotVel;
float unk1C; float velY;
} StructUnk194; } CoinEffect;
u8 lbl_1_bss_19F8[32]; u8 lbl_1_bss_19F8[32];
s16 lbl_1_bss_19F0[4]; static s16 resultBattleOrder[4];
s16 lbl_1_bss_19E8[4]; static s16 resultBattleRank[4];
s16 lbl_1_bss_19E0[4]; static s16 coinNumGrpId[4];
s16 lbl_1_bss_19B8[4][5]; static s16 coinNumSprId[4][5];
s16 lbl_1_bss_19B0[4]; static s16 resultBattleCharMdl[4];
s16 lbl_1_bss_1990[4][4]; static s16 resultBattleCharMot[4][4];
s16 lbl_1_bss_1828[180]; static s16 coinEffectMdlId[COIN_EFFECT_MAX];
s16 lbl_1_bss_181C[6]; s16 lbl_1_bss_181C[6];
s16 lbl_1_bss_1814[4]; static s16 resultBattleEffParManId[4];
StructUnk194 lbl_1_bss_194[180]; static CoinEffect coinEffectData[COIN_EFFECT_MAX];
s32 lbl_1_bss_190; static s32 resultBattleSkipF;
void fn_1_6760(void); static void ResultBattleIdle(void);
void fn_1_6824(void); static void ResultBattleCreate(void);
void fn_1_7544(void); static void ResultBattleStatAdd(void);
void fn_1_6490(void) void ResultBattleMain(void)
{ {
s16 player; s16 playerNo;
s16 i; s16 i;
s16 window; s16 winId;
s16 button; s16 btnDown;
Process *process = HuPrcCurrentGet(); Process *proc = HuPrcCurrentGet();
HuAudSeqPlay(10); HuAudSeqPlay(10);
for (i = player = 0; i < 4; i++) { for (i = playerNo = 0; i < 4; i++) {
if (GWPlayerCfg[i].iscom) { if (GWPlayerCfg[i].iscom) {
player++; playerNo++;
} }
} }
if (player == 4) { if (playerNo == 4) {
lbl_1_bss_190 = 1; resultBattleSkipF = 1;
} }
else { else {
lbl_1_bss_190 = 0; resultBattleSkipF = 0;
} }
fn_1_6824(); ResultBattleCreate();
HuPrcChildCreate(fn_1_6760, 100, 8192, 0, process); HuPrcChildCreate(ResultBattleIdle, 100, 8192, 0, proc);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20);
while (WipeStatGet()) { while (WipeStatGet()) {
HuPrcVSleep(); HuPrcVSleep();
} }
lbl_1_bss_178 = 0; resultReadEndF = 0;
HuPrcChildCreate(fn_1_3FD8, 100, 12288, 0, process); HuPrcChildCreate(ResultBoardDataRead, 100, 12288, 0, proc);
HuPrcSleep(10); HuPrcSleep(10);
if (!lbl_1_bss_174) { if (!resultFastF) {
HuPrcSleep(20); HuPrcSleep(20);
} }
fn_1_7544(); ResultBattleStatAdd();
fn_1_40DC(); ResultCoinAdd();
window = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0); winId = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0);
HuWinMesSpeedSet(window, 0); HuWinMesSpeedSet(winId, 0);
HuWinBGTPLvlSet(window, 0); HuWinBGTPLvlSet(winId, 0);
HuWinAttrSet(window, 0x800); HuWinAttrSet(winId, 0x800);
HuWinMesSet(window, MAKE_MESSID(0x24, 0x07)); HuWinMesSet(winId, MAKE_MESSID(0x24, 0x07));
i = 0; i = 0;
while (1) { while (1) {
if (lbl_1_bss_190 && i > 120) { if (resultBattleSkipF && i > 120) {
break; break;
} }
for (player = button = 0; player < 4; player++) { for (playerNo = btnDown = 0; playerNo < 4; playerNo++) {
if (!GWPlayerCfg[player].iscom) { if (!GWPlayerCfg[playerNo].iscom) {
button |= HuPadBtnDown[GWPlayerCfg[player].pad_idx]; btnDown |= HuPadBtnDown[GWPlayerCfg[playerNo].pad_idx];
} }
} }
if (button & PAD_BUTTON_A) { if (btnDown & PAD_BUTTON_A) {
HuAudFXPlay(28); HuAudFXPlay(28);
break; break;
} }
HuPrcVSleep(); HuPrcVSleep();
i++; i++;
} }
HuWinKill(window); HuWinKill(winId);
while (!lbl_1_bss_178) { while (!resultReadEndF) {
HuPrcVSleep(); HuPrcVSleep();
} }
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30);
@ -183,45 +186,45 @@ void fn_1_6490(void)
} }
} }
void fn_1_6760(void) static void ResultBattleIdle(void)
{ {
Vec temp; Vec temp;
temp.z = 0.0f; temp.z = 0.0f;
temp.y = 0.0f; temp.y = 0.0f;
temp.x = 0.0f; temp.x = 0.0f;
while (1) { while (1) {
if (((HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3]) & 0x100) != 0 || lbl_1_bss_190 != 0) { if (((HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3]) & 0x100) != 0 || resultBattleSkipF != 0) {
lbl_1_bss_174 = 1; resultFastF = 1;
} }
else { else {
lbl_1_bss_174 = 0; resultFastF = 0;
} }
HuPrcVSleep(); HuPrcVSleep();
} }
} }
void fn_1_7F98(void); static void ResultBattleCoinAddShow(void);
void fn_1_8338(s16 group, s16 value); static void ResultBattleCoinAddNumSet(s16 grpId, s16 value);
void fn_1_8484(void); static void ResultBattleOrderSet(void);
void fn_1_8658(void); static void CoinEffectInit(void);
void fn_1_86DC(s16 player); static void CoinEffectAdd(s16 playerNo);
void fn_1_8CB8(struct model_data *model, Mtx matrix); static void ResultShadowDraw(struct model_data *model, Mtx matrix);
void fn_1_6824(void) static void ResultBattleCreate(void)
{ {
s16 i; s16 i;
s16 character; s16 charNo;
s16 player; s16 playerNo;
s16 x_ofs; s16 xOfs;
AnimData *anim; AnimData *anim;
AnimData *anim2; AnimData *anim2;
AnimData *anim3; AnimData *anim3;
s16 char_mdl; s16 charMdlId;
Vec pos; Vec pos;
Vec target; Vec target;
Vec up; Vec up;
s16 gains[5]; s16 coinNum[5];
Process *process = HuPrcCurrentGet(); Process *proc = HuPrcCurrentGet();
CRot.x = 0; CRot.x = 0;
CRot.y = 0; CRot.y = 0;
CRot.z = 0; CRot.z = 0;
@ -240,168 +243,167 @@ void fn_1_6824(void)
up.y = 1; up.y = 1;
up.z = 0; up.z = 0;
Hu3DShadowPosSet(&pos, &up, &target); Hu3DShadowPosSet(&pos, &up, &target);
i = Hu3DHookFuncCreate(fn_1_8CB8); i = Hu3DHookFuncCreate(ResultShadowDraw);
Hu3DModelPosSet(i, 0, 0, 0); Hu3DModelPosSet(i, 0, 0, 0);
fn_1_8484(); ResultBattleOrderSet();
fn_1_423C(gains); ResultCoinNumGet(coinNum);
gains[lbl_1_bss_172] += gains[4]; coinNum[resultBonusPlayer] += coinNum[4];
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
lbl_1_data_4E8[i].datanum = lbl_1_data_830[lbl_1_bss_19E8[i]]; resultBattleModel[i].datanum = bomheiCubeMdlTbl[resultBattleRank[i]];
if (lbl_1_bss_19E8[i] == 3) { if (resultBattleRank[i] == 3) {
lbl_1_data_4E8[i].attr = 1; resultBattleModel[i].attr = 1;
} }
} }
fn_1_8FF8(lbl_1_data_4E8); StageModelCreate(resultBattleModel);
fn_1_927C(lbl_1_data_758); StageSpriteCreate(resultBattleSprite);
espDrawNoSet(lbl_1_bss_1A1A[0], 127); espDrawNoSet(stageSprId[0], 127);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Hu3DModelShadowSet(lbl_1_bss_1A9C[i]); Hu3DModelShadowSet(stageMdlId[i]);
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
anim = HuSprAnimRead(HuDataReadNum(lbl_1_bss_19E8[i] + DATA_MAKE_NUM(DATADIR_RESULT, 0x44), MEMORY_DEFAULT_NUM)); anim = HuSprAnimRead(HuDataReadNum(resultBattleRank[i] + DATA_MAKE_NUM(DATADIR_RESULT, 0x44), MEMORY_DEFAULT_NUM));
; if (resultBattleRank[i] <= 2) {
if (lbl_1_bss_19E8[i] <= 2) {
anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x48), MEMORY_DEFAULT_NUM)); anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x48), MEMORY_DEFAULT_NUM));
} }
else { else {
anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x48), MEMORY_DEFAULT_NUM)); anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x48), MEMORY_DEFAULT_NUM));
} }
Hu3DAnimCreate(anim, lbl_1_bss_1A9C[i + 4], "ys22_a0"); Hu3DAnimCreate(anim, stageMdlId[i + 4], "ys22_a0");
Hu3DAnimCreate(anim2, lbl_1_bss_1A9C[i + 4], "ys22_a1"); Hu3DAnimCreate(anim2, stageMdlId[i + 4], "ys22_a1");
Hu3DModelAttrSet(lbl_1_bss_1A9C[i + 4], HU3D_MOTATTR_PAUSE); Hu3DModelAttrSet(stageMdlId[i + 4], HU3D_MOTATTR_PAUSE);
} }
anim = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3D), MEMORY_DEFAULT_NUM)); anim = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3D), MEMORY_DEFAULT_NUM));
anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3B), MEMORY_DEFAULT_NUM)); anim2 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3B), MEMORY_DEFAULT_NUM));
anim3 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3C), MEMORY_DEFAULT_NUM)); anim3 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_RESULT, 0x3C), MEMORY_DEFAULT_NUM));
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (gains[lbl_1_bss_19F0[i]] >= 100) { if (coinNum[resultBattleOrder[i]] >= 100) {
x_ofs = lbl_1_data_8A0[2]; xOfs = coinNumXOfs[2];
} }
else if (gains[lbl_1_bss_19F0[i]] >= 10) { else if (coinNum[resultBattleOrder[i]] >= 10) {
x_ofs = lbl_1_data_8A0[1]; xOfs = coinNumXOfs[1];
} }
else { else {
x_ofs = lbl_1_data_8A0[0]; xOfs = coinNumXOfs[0];
} }
lbl_1_bss_19E0[i] = HuSprGrpCreate(5); coinNumGrpId[i] = HuSprGrpCreate(5);
lbl_1_bss_19B8[i][0] = HuSprCreate(anim, 10, 0); coinNumSprId[i][0] = HuSprCreate(anim, 10, 0);
HuSprGrpMemberSet(lbl_1_bss_19E0[i], 0, lbl_1_bss_19B8[i][0]); HuSprGrpMemberSet(coinNumGrpId[i], 0, coinNumSprId[i][0]);
HuSprPosSet(lbl_1_bss_19E0[i], 0, 17, -32); HuSprPosSet(coinNumGrpId[i], 0, 17, -32);
lbl_1_bss_19B8[i][1] = HuSprCreate(anim2, 0, 0); coinNumSprId[i][1] = HuSprCreate(anim2, 0, 0);
HuSprGrpMemberSet(lbl_1_bss_19E0[i], 1, lbl_1_bss_19B8[i][1]); HuSprGrpMemberSet(coinNumGrpId[i], 1, coinNumSprId[i][1]);
HuSprPosSet(lbl_1_bss_19E0[i], 1, x_ofs, -36); HuSprPosSet(coinNumGrpId[i], 1, xOfs, -36);
lbl_1_bss_19B8[i][2] = HuSprCreate(anim3, 0, 0); coinNumSprId[i][2] = HuSprCreate(anim3, 0, 0);
HuSprGrpMemberSet(lbl_1_bss_19E0[i], 2, lbl_1_bss_19B8[i][2]); HuSprGrpMemberSet(coinNumGrpId[i], 2, coinNumSprId[i][2]);
HuSprPosSet(lbl_1_bss_19E0[i], 2, x_ofs + 16, -36); HuSprPosSet(coinNumGrpId[i], 2, xOfs + 16, -36);
lbl_1_bss_19B8[i][3] = HuSprCreate(anim3, 0, 0); coinNumSprId[i][3] = HuSprCreate(anim3, 0, 0);
HuSprGrpMemberSet(lbl_1_bss_19E0[i], 3, lbl_1_bss_19B8[i][3]); HuSprGrpMemberSet(coinNumGrpId[i], 3, coinNumSprId[i][3]);
HuSprPosSet(lbl_1_bss_19E0[i], 3, x_ofs + 32, -36); HuSprPosSet(coinNumGrpId[i], 3, xOfs + 32, -36);
lbl_1_bss_19B8[i][4] = HuSprCreate(anim3, 0, 0); coinNumSprId[i][4] = HuSprCreate(anim3, 0, 0);
HuSprGrpMemberSet(lbl_1_bss_19E0[i], 4, lbl_1_bss_19B8[i][4]); HuSprGrpMemberSet(coinNumGrpId[i], 4, coinNumSprId[i][4]);
HuSprPosSet(lbl_1_bss_19E0[i], 4, x_ofs + 48, -36); HuSprPosSet(coinNumGrpId[i], 4, xOfs + 48, -36);
HuSprGrpPosSet(lbl_1_bss_19E0[i], 0, 0); HuSprGrpPosSet(coinNumGrpId[i], 0, 0);
fn_1_8338(lbl_1_bss_19E0[i], 9); ResultBattleCoinAddNumSet(coinNumGrpId[i], 9);
HuSprGrpScaleSet(lbl_1_bss_19E0[i], 0, 0); HuSprGrpScaleSet(coinNumGrpId[i], 0, 0);
} }
(void)anim3; (void)anim3;
Hu3DMotionSet(lbl_1_bss_1A9C[8], lbl_1_bss_1A5C[9]); Hu3DMotionSet(stageMdlId[8], stageMotId[9]);
Hu3DModelAttrSet(lbl_1_bss_1A9C[8], HU3D_MOTATTR_LOOP); Hu3DModelAttrSet(stageMdlId[8], HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(lbl_1_bss_1A9C[8]); Hu3DModelShadowSet(stageMdlId[8]);
for (i = 0; i < 180; i++) { for (i = 0; i < COIN_EFFECT_MAX; i++) {
if (i == 0) { if (i == 0) {
lbl_1_bss_1828[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_RESULT, 0x0C)); coinEffectMdlId[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_RESULT, 0x0C));
} }
else { else {
lbl_1_bss_1828[i] = Hu3DModelLink(lbl_1_bss_1828[0]); coinEffectMdlId[i] = Hu3DModelLink(coinEffectMdlId[0]);
} }
Hu3DModelScaleSet(lbl_1_bss_1828[i], 0.5f, 0.5f, 0.5f); Hu3DModelScaleSet(coinEffectMdlId[i], 0.5f, 0.5f, 0.5f);
Hu3DModelAttrSet(lbl_1_bss_1828[i], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(coinEffectMdlId[i], HU3D_ATTR_DISPOFF);
} }
fn_1_8658(); CoinEffectInit();
anim = HuSprAnimRead(HuAR_ARAMtoMRAMFileRead(DATA_MAKE_NUM(DATADIR_EFFECT, 4), MEMORY_DEFAULT_NUM, HEAP_DATA)); anim = HuSprAnimRead(HuAR_ARAMtoMRAMFileRead(DATA_MAKE_NUM(DATADIR_EFFECT, 4), MEMORY_DEFAULT_NUM, HEAP_DATA));
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
lbl_1_bss_1814[i] = Hu3DParManCreate(anim, 300, &lbl_1_data_780); resultBattleEffParManId[i] = Hu3DParManCreate(anim, 300, &resultBattleEffParMan);
Hu3DParManAttrSet(lbl_1_bss_1814[i], 0x65); Hu3DParManAttrSet(resultBattleEffParManId[i], 0x65);
Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_1814[i]), 1); Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(resultBattleEffParManId[i]), 1);
Hu3DParManRotSet(lbl_1_bss_1814[i], 90, 0, 0); Hu3DParManRotSet(resultBattleEffParManId[i], 90, 0, 0);
} }
HuDataDirClose(DATADIR_RESULT); HuDataDirClose(DATADIR_RESULT);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
player = lbl_1_bss_19F0[i]; playerNo = resultBattleOrder[i];
character = GWPlayerCfg[lbl_1_bss_19F0[i]].character; charNo = GWPlayerCfg[resultBattleOrder[i]].character;
char_mdl = CharModelCreate(character, 2); charMdlId = CharModelCreate(charNo, 2);
lbl_1_bss_19B0[player] = char_mdl; resultBattleCharMdl[playerNo] = charMdlId;
lbl_1_bss_1990[player][0] = CharModelMotionCreate(character, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00)); resultBattleCharMot[playerNo][0] = CharModelMotionCreate(charNo, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00));
lbl_1_bss_1990[player][1] = CharModelMotionCreate(character, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17)); resultBattleCharMot[playerNo][1] = CharModelMotionCreate(charNo, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17));
lbl_1_bss_1990[player][2] = CharModelMotionCreate(character, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x49)); resultBattleCharMot[playerNo][2] = CharModelMotionCreate(charNo, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x49));
CharModelVoiceEnableSet(character, lbl_1_bss_1990[player][1], 0); CharModelVoiceEnableSet(charNo, resultBattleCharMot[playerNo][1], 0);
CharModelMotionSet(character, lbl_1_bss_1990[player][0]); CharModelMotionSet(charNo, resultBattleCharMot[playerNo][0]);
Hu3DModelPosSet(char_mdl, lbl_1_data_7F0[i].x, lbl_1_data_7F0[lbl_1_bss_19E8[i]].y, 0); Hu3DModelPosSet(charMdlId, playerPosTbl[i].x, playerPosTbl[resultBattleRank[i]].y, 0);
Hu3DModelAttrSet(char_mdl, HU3D_MOTATTR_LOOP); Hu3DModelAttrSet(charMdlId, HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(char_mdl); Hu3DModelShadowSet(charMdlId);
} }
CharModelDataClose(-1); CharModelDataClose(-1);
} }
Vec lbl_1_data_8B8[] = { { 8, 0, 0 }, { 0, 8, 0 }, { 10, 5, 0 }, { -5, 10, 0 }, { 0, -8, 0 }, { 8, 10, 0 }, { -10, 8, 0 }, { 15, 0, 0 } }; static Vec cameraShakeOfs[] = { { 8, 0, 0 }, { 0, 8, 0 }, { 10, 5, 0 }, { -5, 10, 0 }, { 0, -8, 0 }, { 8, 10, 0 }, { -10, 8, 0 }, { 15, 0, 0 } };
void fn_1_7544(void) static void ResultBattleStatAdd(void)
{ {
s16 i; s16 i;
s16 time; s16 time;
s16 done_cnt; s16 done_cnt;
float pos_y; float pos_y;
s16 gains[5]; s16 coinNum[5];
s16 time_player[4]; s16 delay[4];
fn_1_423C(gains); ResultCoinNumGet(coinNum);
for (time = 0; time <= 5; time++) { for (time = 0; time <= 5; time++) {
pos_y = ((5 - time) * 50) + 580; pos_y = ((5 - time) * 50) + 580;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Hu3DModelPosSet(lbl_1_bss_1A9C[i + 4], lbl_1_data_7F0[i].x, pos_y, 0); Hu3DModelPosSet(stageMdlId[i + 4], playerPosTbl[i].x, pos_y, 0);
} }
HuPrcVSleep(); HuPrcVSleep();
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Hu3DModelAttrReset(lbl_1_bss_1A9C[i + 4], HU3D_MOTATTR_PAUSE); Hu3DModelAttrReset(stageMdlId[i + 4], HU3D_MOTATTR_PAUSE);
Hu3DMotionSpeedSet(lbl_1_bss_1A9C[i + 4], 1.5f); Hu3DMotionSpeedSet(stageMdlId[i + 4], 1.5f);
} }
HuPrcSleep(35); HuPrcSleep(35);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (gains[lbl_1_bss_19F0[i]] > 0) { if (coinNum[resultBattleOrder[i]] > 0) {
Hu3DParManAttrReset(lbl_1_bss_1814[i], 1); Hu3DParManAttrReset(resultBattleEffParManId[i], 1);
time_player[i] = frandmod(10); delay[i] = frandmod(10);
} }
else { else {
time_player[i] = 0; delay[i] = 0;
} }
Hu3DParManPosSet(lbl_1_bss_1814[i], lbl_1_data_7F0[i].x, 610.0f, 0.0f); Hu3DParManPosSet(resultBattleEffParManId[i], playerPosTbl[i].x, 610.0f, 0.0f);
} }
while (1) { while (1) {
for (i = done_cnt = 0; i < 4; i++) { for (i = done_cnt = 0; i < 4; i++) {
if (time_player[i]) { if (delay[i]) {
time_player[i]--; delay[i]--;
continue; continue;
} }
if (gains[lbl_1_bss_19F0[i]] <= 0) { if (coinNum[resultBattleOrder[i]] <= 0) {
Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); Hu3DParManAttrSet(resultBattleEffParManId[i], 1);
done_cnt++; done_cnt++;
} }
else { else {
fn_1_86DC(i); CoinEffectAdd(i);
gains[lbl_1_bss_19F0[i]]--; coinNum[resultBattleOrder[i]]--;
if (gains[lbl_1_bss_19F0[i]] <= 10) { if (coinNum[resultBattleOrder[i]] <= 10) {
time_player[i] = 4; delay[i] = 4;
} }
else { else {
if (gains[lbl_1_bss_19F0[i]] <= 20) { if (coinNum[resultBattleOrder[i]] <= 20) {
time_player[i] = 3; delay[i] = 3;
} }
else { else {
if (gains[lbl_1_bss_19F0[i]] <= 40) { if (coinNum[resultBattleOrder[i]] <= 40) {
time_player[i] = 2; delay[i] = 2;
} }
else { else {
time_player[i] = 1; delay[i] = 1;
} }
} }
} }
@ -412,234 +414,233 @@ void fn_1_7544(void)
} }
HuPrcVSleep(); HuPrcVSleep();
} }
if (gains[4]) { if (coinNum[4]) {
HuPrcSleep(20); HuPrcSleep(20);
Hu3DModelRotSet(lbl_1_bss_1A9C[8], 0, -90, 0); Hu3DModelRotSet(stageMdlId[8], 0, -90, 0);
Hu3DModelScaleSet(lbl_1_bss_1A9C[8], 0.8f, 0.8f, 0.8f); Hu3DModelScaleSet(stageMdlId[8], 0.8f, 0.8f, 0.8f);
Hu3DMotionSpeedSet(lbl_1_bss_1A9C[8], 2.0f); Hu3DMotionSpeedSet(stageMdlId[8], 2.0f);
for (i = 0; i <= 40; i++) { for (i = 0; i <= 40; i++) {
Hu3DModelPosSet(lbl_1_bss_1A9C[8], 500.0f * (1.0f - (i / 40.0f)), 0, 100.0f); Hu3DModelPosSet(stageMdlId[8], 500.0f * (1.0f - (i / 40.0f)), 0, 100.0f);
HuPrcVSleep(); HuPrcVSleep();
} }
HuAudFXPlay(828); HuAudFXPlay(828);
Hu3DModelAttrReset(lbl_1_bss_1A9C[10], HU3D_MOTATTR_PAUSE); Hu3DModelAttrReset(stageMdlId[10], HU3D_MOTATTR_PAUSE);
Hu3DModelPosSet(lbl_1_bss_1A9C[10], 0, 0, 200); Hu3DModelPosSet(stageMdlId[10], 0, 0, 200);
for (i = 0; i < Hu3DMotionMaxTimeGet(lbl_1_bss_1A9C[10]); i++) { for (i = 0; i < Hu3DMotionMaxTimeGet(stageMdlId[10]); i++) {
if (i > 10) { if (i > 10) {
Hu3DModelAttrSet(lbl_1_bss_1A9C[8], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(stageMdlId[8], HU3D_ATTR_DISPOFF);
} }
Center.x = lbl_1_data_8B8[(i / 2) & 0x7].x; Center.x = cameraShakeOfs[(i / 2) & 0x7].x;
Center.y = 330.0f + lbl_1_data_8B8[(i / 2) & 0x7].y; Center.y = 330.0f + cameraShakeOfs[(i / 2) & 0x7].y;
Center.z = lbl_1_data_8B8[(i / 2) & 0x7].z; Center.z = cameraShakeOfs[(i / 2) & 0x7].z;
espPosSet(lbl_1_bss_1A1A[0], 288.0f + lbl_1_data_8B8[(i / 2) & 0x7].x, 240.0f - lbl_1_data_8B8[(i / 2) & 0x7].y); espPosSet(stageSprId[0], 288.0f + cameraShakeOfs[(i / 2) & 0x7].x, 240.0f - cameraShakeOfs[(i / 2) & 0x7].y);
HuPrcVSleep(); HuPrcVSleep();
} }
espPosSet(lbl_1_bss_1A1A[0], 288.0, 240.0); espPosSet(stageSprId[0], 288.0, 240.0);
Center.x = 0; Center.x = 0;
Center.y = 330; Center.y = 330;
Center.z = 0; Center.z = 0;
time_player[0] = 10; delay[0] = 10;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (lbl_1_bss_172 == lbl_1_bss_19F0[i]) { if (resultBonusPlayer == resultBattleOrder[i]) {
break; break;
} }
} }
Hu3DParManAttrReset(lbl_1_bss_1814[i], 1); Hu3DParManAttrReset(resultBattleEffParManId[i], 1);
while (1) { while (1) {
if (time_player[0] != 0) { if (delay[0] != 0) {
time_player[0]--; delay[0]--;
HuPrcVSleep(); HuPrcVSleep();
continue; continue;
} }
if (gains[4] <= 0) { if (coinNum[4] <= 0) {
Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); Hu3DParManAttrSet(resultBattleEffParManId[i], 1);
break; break;
} }
fn_1_86DC(i); CoinEffectAdd(i);
gains[4]--; coinNum[4]--;
time_player[0] = 5; delay[0] = 5;
HuPrcVSleep(); HuPrcVSleep();
} }
Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); Hu3DParManAttrSet(resultBattleEffParManId[i], 1);
} }
fn_1_423C(gains); ResultCoinNumGet(coinNum);
gains[lbl_1_bss_172] += gains[4]; coinNum[resultBonusPlayer] += coinNum[4];
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (gains[lbl_1_bss_19F0[i]]) { if (coinNum[resultBattleOrder[i]]) {
CharModelMotionShiftSet(GWPlayerCfg[lbl_1_bss_19F0[i]].character, lbl_1_bss_1990[lbl_1_bss_19F0[i]][1], 0, 4, HU3D_MOTATTR_NONE); CharModelMotionShiftSet(GWPlayerCfg[resultBattleOrder[i]].character, resultBattleCharMot[resultBattleOrder[i]][1], 0, 4, HU3D_MOTATTR_NONE);
HuAudPlayerVoicePlay(lbl_1_bss_19F0[i], 293); HuAudPlayerVoicePlay(resultBattleOrder[i], 293);
} }
else { else {
CharModelMotionShiftSet(GWPlayerCfg[lbl_1_bss_19F0[i]].character, lbl_1_bss_1990[lbl_1_bss_19F0[i]][2], 0, 4, HU3D_MOTATTR_NONE); CharModelMotionShiftSet(GWPlayerCfg[resultBattleOrder[i]].character, resultBattleCharMot[resultBattleOrder[i]][2], 0, 4, HU3D_MOTATTR_NONE);
} }
} }
HuPrcSleep(20); HuPrcSleep(20);
fn_1_7F98(); ResultBattleCoinAddShow();
HuPrcSleep(120); HuPrcSleep(120);
} }
void fn_1_7F98(void) static void ResultBattleCoinAddShow(void)
{ {
s16 i; s16 i;
s16 time; s16 time;
s16 delay; s16 speed;
s16 gains[5]; s16 coinNum[5];
Vec pos_3d; Vec pos3D;
Vec pos_2d; Vec pos2D;
fn_1_423C(gains); ResultCoinNumGet(coinNum);
gains[lbl_1_bss_172] += gains[4]; coinNum[resultBonusPlayer] += coinNum[4];
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
fn_1_8338(lbl_1_bss_19E0[i], gains[lbl_1_bss_19F0[i]]); ResultBattleCoinAddNumSet(coinNumGrpId[i], coinNum[resultBattleOrder[i]]);
pos_3d.x = lbl_1_data_7F0[i].x; pos3D.x = playerPosTbl[i].x;
if (gains[lbl_1_bss_19F0[i]]) { if (coinNum[resultBattleOrder[i]]) {
pos_3d.y = lbl_1_data_7F0[lbl_1_bss_19E8[i]].y + lbl_1_data_860[GWPlayerCfg[lbl_1_bss_19F0[i]].character]; pos3D.y = playerPosTbl[resultBattleRank[i]].y + coinAddYOfs[GWPlayerCfg[resultBattleOrder[i]].character];
} }
else { else {
pos_3d.y = lbl_1_data_7F0[lbl_1_bss_19E8[i]].y + lbl_1_data_880[GWPlayerCfg[lbl_1_bss_19F0[i]].character]; pos3D.y = playerPosTbl[resultBattleRank[i]].y + coinBlankYOfs[GWPlayerCfg[resultBattleOrder[i]].character];
} }
pos_3d.z = 0; pos3D.z = 0;
Hu3D3Dto2D(&pos_3d, 1, &pos_2d); Hu3D3Dto2D(&pos3D, 1, &pos2D);
HuSprGrpPosSet(lbl_1_bss_19E0[i], pos_2d.x, pos_2d.y); HuSprGrpPosSet(coinNumGrpId[i], pos2D.x, pos2D.y);
} }
delay = (lbl_1_bss_174) ? 3 : 10; speed = (resultFastF) ? 3 : 10;
for (time = 0; time <= delay; time++) { for (time = 0; time <= speed; time++) {
float scale = sind((90.0 / delay) * time); float scale = sind((90.0 / speed) * time);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
HuSprGrpScaleSet(lbl_1_bss_19E0[i], scale, scale); HuSprGrpScaleSet(coinNumGrpId[i], scale, scale);
} }
HuPrcVSleep(); HuPrcVSleep();
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
HuSprGrpScaleSet(lbl_1_bss_19E0[i], 1.0f, 1.0f); HuSprGrpScaleSet(coinNumGrpId[i], 1.0f, 1.0f);
} }
} }
void fn_1_8338(s16 group, s16 value) static void ResultBattleCoinAddNumSet(s16 grpId, s16 value)
{ {
s16 digit; s16 no;
s16 digit_value; s16 bank;
no = 2;
digit = 2; bank = value / 100;
digit_value = value / 100; if (bank != 0) {
if (digit_value != 0) { HuSprBankSet(grpId, no, bank);
HuSprBankSet(group, digit, digit_value); HuSprAttrReset(grpId, no, 4);
HuSprAttrReset(group, digit, 4); no++;
digit++;
} }
value -= digit_value * 100; value -= bank * 100;
digit_value = value / 10; bank = value / 10;
if (digit_value != 0 || digit == 3) { if (bank != 0 || no == 3) {
HuSprBankSet(group, digit, digit_value); HuSprBankSet(grpId, no, bank);
HuSprAttrReset(group, digit, 4); HuSprAttrReset(grpId, no, 4);
digit++; no++;
} }
value -= digit_value * 10; value -= bank * 10;
HuSprBankSet(group, digit, value); HuSprBankSet(grpId, no, value);
HuSprAttrReset(group, digit, 4); HuSprAttrReset(grpId, no, 4);
digit++; no++;
for (digit_value = digit; digit_value < 5; digit_value++) { for (bank = no; bank < 5; bank++) {
HuSprAttrSet(group, digit_value, 4); HuSprAttrSet(grpId, bank, 4);
} }
} }
void fn_1_8484(void) static void ResultBattleOrderSet(void)
{ {
s16 i; s16 i;
s16 j; s16 j;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
lbl_1_bss_19E8[i] = GWPlayerCoinWinGet(i); resultBattleRank[i] = GWPlayerCoinWinGet(i);
lbl_1_bss_19F0[i] = i; resultBattleOrder[i] = i;
} }
for (j = 1; j < 4; j++) { for (j = 1; j < 4; j++) {
for (i = 0; i < 4 - j; i++) { for (i = 0; i < 4 - j; i++) {
if (lbl_1_bss_19E8[i] > lbl_1_bss_19E8[i + 1]) { if (resultBattleRank[i] > resultBattleRank[i + 1]) {
s16 temp; s16 temp;
temp = lbl_1_bss_19E8[i]; temp = resultBattleRank[i];
lbl_1_bss_19E8[i] = lbl_1_bss_19E8[i + 1]; resultBattleRank[i] = resultBattleRank[i + 1];
lbl_1_bss_19E8[i + 1] = temp; resultBattleRank[i + 1] = temp;
temp = lbl_1_bss_19F0[i]; temp = resultBattleOrder[i];
lbl_1_bss_19F0[i] = lbl_1_bss_19F0[i + 1]; resultBattleOrder[i] = resultBattleOrder[i + 1];
lbl_1_bss_19F0[i + 1] = temp; resultBattleOrder[i + 1] = temp;
} }
} }
} }
} }
void fn_1_8998(void); static void CoinEffectMain(void);
void fn_1_8658(void) static void CoinEffectInit(void)
{ {
s16 i; s16 i;
Process *process = HuPrcCurrentGet(); Process *process = HuPrcCurrentGet();
for (i = 0; i < 180; i++) { for (i = 0; i < COIN_EFFECT_MAX; i++) {
lbl_1_bss_194[i].unk0 = -1; coinEffectData[i].playerNo = -1;
} }
HuPrcChildCreate(fn_1_8998, 100, 8192, 0, process); HuPrcChildCreate(CoinEffectMain, 100, 8192, 0, process);
} }
void fn_1_86DC(s16 player) static void CoinEffectAdd(s16 playerNo)
{ {
s16 i; s16 i;
for (i = 0; i < 180; i++) { for (i = 0; i < COIN_EFFECT_MAX; i++) {
if (lbl_1_bss_194[i].unk0 == -1) { if (coinEffectData[i].playerNo == -1) {
break; break;
} }
} }
if (i == 180) { if (i == COIN_EFFECT_MAX) {
return; return;
} }
lbl_1_bss_194[i].unk0 = player; coinEffectData[i].playerNo = playerNo;
lbl_1_bss_194[i].unk4.x = lbl_1_data_7F0[player].x; coinEffectData[i].pos.x = playerPosTbl[playerNo].x;
lbl_1_bss_194[i].unk4.y = 610.0f; coinEffectData[i].pos.y = 610.0f;
lbl_1_bss_194[i].unk4.z = 0.0f; coinEffectData[i].pos.z = 0.0f;
lbl_1_bss_194[i].unk2 = lbl_1_bss_19E8[player]; coinEffectData[i].rank = resultBattleRank[playerNo];
lbl_1_bss_194[i].unk10.x = frandmod(20) - 10.0f; coinEffectData[i].rotVel.x = frandmod(20) - 10.0f;
lbl_1_bss_194[i].unk10.y = frandmod(20) - 10.0f; coinEffectData[i].rotVel.y = frandmod(20) - 10.0f;
lbl_1_bss_194[i].unk10.z = 0; coinEffectData[i].rotVel.z = 0;
lbl_1_bss_194[i].unk1C = 10.0f; coinEffectData[i].velY = 10.0f;
Hu3DModelAttrReset(lbl_1_bss_1828[i], HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(coinEffectMdlId[i], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(lbl_1_bss_1828[i], 0, 100, 0); Hu3DModelPosSet(coinEffectMdlId[i], 0, 100, 0);
Hu3DModelRotSet(lbl_1_bss_1828[i], 0, 0, 0); Hu3DModelRotSet(coinEffectMdlId[i], 0, 0, 0);
} }
void fn_1_8998(void) static void CoinEffectMain(void)
{ {
s16 i; s16 i;
ModelData *model_ptr; ModelData *modelP;
s16 player; s16 player;
while (1) { while (1) {
for (i = 0; i < 180; i++) { for (i = 0; i < COIN_EFFECT_MAX; i++) {
if (lbl_1_bss_194[i].unk0 == -1) { if (coinEffectData[i].playerNo == -1) {
continue; continue;
} }
player = lbl_1_bss_194[i].unk0; player = coinEffectData[i].playerNo;
model_ptr = &Hu3DData[lbl_1_bss_1828[i]]; modelP = &Hu3DData[coinEffectMdlId[i]];
model_ptr->pos = lbl_1_bss_194[i].unk4; modelP->pos = coinEffectData[i].pos;
model_ptr->rot.x += lbl_1_bss_194[i].unk10.x; modelP->rot.x += coinEffectData[i].rotVel.x;
model_ptr->rot.y += lbl_1_bss_194[i].unk10.y; modelP->rot.y += coinEffectData[i].rotVel.y;
lbl_1_bss_194[i].unk4.y -= lbl_1_bss_194[i].unk1C; coinEffectData[i].pos.y -= coinEffectData[i].velY;
lbl_1_bss_194[i].unk1C += 0.2f; coinEffectData[i].velY += 0.2f;
if (lbl_1_bss_194[i].unk4.y < ((3 - lbl_1_bss_194[i].unk2) * 100) + lbl_1_data_840[GWPlayerCfg[lbl_1_bss_19F0[player]].character]) { if (coinEffectData[i].pos.y < ((3 - coinEffectData[i].rank) * 100) + coinEffectYOfs[GWPlayerCfg[resultBattleOrder[player]].character]) {
Vec pos; Vec pos;
pos.x = lbl_1_data_7F0[player].x; pos.x = playerPosTbl[player].x;
pos.y = ((3 - lbl_1_bss_194[i].unk2) * 100) + lbl_1_data_840[GWPlayerCfg[lbl_1_bss_19F0[player]].character]; pos.y = ((3 - coinEffectData[i].rank) * 100) + coinEffectYOfs[GWPlayerCfg[resultBattleOrder[player]].character];
pos.z = 0.0f; pos.z = 0.0f;
CharModelCoinEffectCreate(1, &pos); CharModelCoinEffectCreate(1, &pos);
lbl_1_bss_194[i].unk0 = -1; coinEffectData[i].playerNo = -1;
HuAudFXPlay(7); HuAudFXPlay(7);
Hu3DModelAttrSet(lbl_1_bss_1828[i], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(coinEffectMdlId[i], HU3D_ATTR_DISPOFF);
} }
} }
HuPrcVSleep(); HuPrcVSleep();
} }
} }
void fn_1_8CB8(struct model_data *model, Mtx matrix) static void ResultShadowDraw(struct model_data *model, Mtx matrix)
{ {
s32 sp8 = 0; s32 sp8 = 0;
GXTexObj tex; GXTexObj tex;
Mtx final; Mtx final;
Mtx inv_camera; Mtx invCamera;
Mtx shadow; Mtx shadow;
GXClearVtxDesc(); GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
@ -647,8 +648,8 @@ void fn_1_8CB8(struct model_data *model, Mtx matrix)
GXInitTexObj(&tex, Hu3DShadowData.unk_04, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObj(&tex, Hu3DShadowData.unk_04, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&tex, 0); GXLoadTexObj(&tex, 0);
MTXInverse(Hu3DCameraMtx, inv_camera); MTXInverse(Hu3DCameraMtx, invCamera);
MTXConcat(inv_camera, matrix, final); MTXConcat(invCamera, matrix, final);
MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, shadow); MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, shadow);
MTXConcat(shadow, final, final); MTXConcat(shadow, final, final);
GXLoadTexMtxImm(final, GX_TEXMTX9, GX_MTX3x4); GXLoadTexMtxImm(final, GX_TEXMTX9, GX_MTX3x4);

View file

@ -1,13 +1,13 @@
#include "REL/resultdll.h" #include "REL/resultdll.h"
s16 lbl_1_bss_1A9C[32]; s16 stageMdlId[32];
s16 lbl_1_bss_1A5C[32]; s16 stageMotId[32];
s16 lbl_1_bss_1A1A[33]; s16 stageSprId[33];
s16 lbl_1_bss_1A18; s16 lbl_1_bss_1A18;
void fn_1_8FF8(DataListModel *model_list) void StageModelCreate(StageModel *model_list)
{ {
DataListModel *list; StageModel *list;
s16 i; s16 i;
s16 model; s16 model;
s16 clear_i; s16 clear_i;
@ -15,24 +15,24 @@ void fn_1_8FF8(DataListModel *model_list)
void *data; void *data;
list = model_list; list = model_list;
for(clear_i=0; clear_i<32; clear_i++) { for(clear_i=0; clear_i<32; clear_i++) {
lbl_1_bss_1A9C[clear_i] = lbl_1_bss_1A5C[clear_i] = -1; stageMdlId[clear_i] = stageMotId[clear_i] = -1;
} }
for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) { for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) {
if(list->type == 0) { if(list->type == 0) {
data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA);
model = Hu3DModelCreate(data); model = Hu3DModelCreate(data);
lbl_1_bss_1A9C[i] = model; stageMdlId[i] = model;
Hu3DModelAttrSet(model, list->attr); Hu3DModelAttrSet(model, list->attr);
Hu3DModelPosSetV(model, &list->pos); Hu3DModelPosSetV(model, &list->pos);
Hu3DModelRotSetV(model, &list->rot); Hu3DModelRotSetV(model, &list->rot);
Hu3DModelScaleSetV(model, &list->scale); Hu3DModelScaleSetV(model, &list->scale);
model_ptr = &Hu3DData[model]; model_ptr = &Hu3DData[model];
if(model_ptr->unk_08 != -1) { if(model_ptr->unk_08 != -1) {
lbl_1_bss_1A5C[i] = model_ptr->unk_08; stageMotId[i] = model_ptr->unk_08;
} }
} else if(list->type == 1) { } else if(list->type == 1) {
data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA);
lbl_1_bss_1A5C[i] = Hu3DJointMotion(lbl_1_bss_1A9C[list->mot_link], data); stageMotId[i] = Hu3DJointMotion(stageMdlId[list->mot_link], data);
} }
(void)i; (void)i;
@ -40,33 +40,33 @@ void fn_1_8FF8(DataListModel *model_list)
list = model_list; list = model_list;
for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) { for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) {
if(list->type == 2) { if(list->type == 2) {
model = Hu3DModelLink(lbl_1_bss_1A9C[list->link]); model = Hu3DModelLink(stageMdlId[list->link]);
lbl_1_bss_1A9C[i] = model; stageMdlId[i] = model;
Hu3DModelAttrSet(model, list->attr); Hu3DModelAttrSet(model, list->attr);
Hu3DModelPosSetV(model, &list->pos); Hu3DModelPosSetV(model, &list->pos);
Hu3DModelRotSetV(model, &list->rot); Hu3DModelRotSetV(model, &list->rot);
Hu3DModelScaleSetV(model, &list->scale); Hu3DModelScaleSetV(model, &list->scale);
} }
if(list->mot_link != -1) { if(list->mot_link != -1) {
Hu3DMotionSet(lbl_1_bss_1A9C[i], lbl_1_bss_1A5C[list->mot_link]); Hu3DMotionSet(stageMdlId[i], stageMotId[list->mot_link]);
} }
(void)i; (void)i;
} }
} }
void fn_1_927C(DataListSprite *sprite_list) void StageSpriteCreate(StageSprite *sprite_list)
{ {
DataListSprite *list; StageSprite *list;
s16 sprite; s16 sprite;
s16 clear_i; s16 clear_i;
s16 i; s16 i;
list = sprite_list; list = sprite_list;
for(clear_i=0; clear_i<32; clear_i++) { for(clear_i=0; clear_i<32; clear_i++) {
lbl_1_bss_1A1A[clear_i] = -1; stageSprId[clear_i] = -1;
} }
for(i=0; list->datanum; i++, list++) { for(i=0; list->datanum; i++, list++) {
sprite = espEntry(list->datanum, 100, 0); sprite = espEntry(list->datanum, 100, 0);
lbl_1_bss_1A1A[i] = sprite; stageSprId[i] = sprite;
espPosSet(sprite, list->x, list->y); espPosSet(sprite, list->x, list->y);
espColorSet(sprite, list->color.r, list->color.g, list->color.b); espColorSet(sprite, list->color.r, list->color.g, list->color.b);
espTPLvlSet(sprite, list->color.a/255.0f); espTPLvlSet(sprite, list->color.a/255.0f);
@ -75,12 +75,12 @@ void fn_1_927C(DataListSprite *sprite_list)
} }
} }
void fn_1_93B4(void) void StageSpriteKill(void)
{ {
s16 i; s16 i;
for(i=0; i<32; i++) { for(i=0; i<32; i++) {
if(lbl_1_bss_1A1A[i] != -1) { if(stageSprId[i] != -1) {
espKill(lbl_1_bss_1A1A[i]); espKill(stageSprId[i]);
} }
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -2511,7 +2511,7 @@ s32 fn_1_F214(ZtarDllUnkStruct2 *arg0)
var_r28 = 0; var_r28 = 0;
var_r26 = arg0->unk_54; var_r26 = arg0->unk_54;
if (HuPadStkX[lbl_1_bss_8C[0].unk_58] >= 5 || (HuPadBtn[lbl_1_bss_8C[0].unk_58] & PAD_BUTTON_RIGHT)) { if (HuPadStkX[lbl_1_bss_8C[0].unk_58] >= 5 || (HuPadBtn[lbl_1_bss_8C[0].unk_58] & PAD_BUTTON_RIGHT)) {
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk_54++; arg0->unk_54++;
var_r28 = 1; var_r28 = 1;
if (arg0->unk_54 > 3) { if (arg0->unk_54 > 3) {
@ -2527,7 +2527,7 @@ s32 fn_1_F214(ZtarDllUnkStruct2 *arg0)
} }
} }
else if (HuPadStkX[lbl_1_bss_8C[0].unk_58] <= -5 || (HuPadBtn[lbl_1_bss_8C[0].unk_58] & PAD_BUTTON_LEFT)) { else if (HuPadStkX[lbl_1_bss_8C[0].unk_58] <= -5 || (HuPadBtn[lbl_1_bss_8C[0].unk_58] & PAD_BUTTON_LEFT)) {
if (GWGameStat.field10E_bit4 == 1) { if (GWGameStat.veryHardUnlock == 1) {
arg0->unk_54--; arg0->unk_54--;
var_r28 = -1; var_r28 = -1;
if (arg0->unk_54 < 0) { if (arg0->unk_54 < 0) {

View file

@ -16,7 +16,7 @@ struct DispatchEntry gTRKDispatchTable[33] = {
{ &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported },
{ &TRKDoUnsupported }, { &TRKDoReadMemory }, { &TRKDoWriteMemory }, { &TRKDoUnsupported }, { &TRKDoReadMemory }, { &TRKDoWriteMemory },
{ &TRKDoReadRegisters }, { &TRKDoWriteRegisters }, { &TRKDoUnsupported }, { &TRKDoReadRegisters }, { &TRKDoWriteRegisters }, { &TRKDoUnsupported },
{ &TRKDoUnsupported }, { &TRKDoFlushCache }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoFlushCache }, { &TRKDoSetOption },
{ &TRKDoContinue }, { &TRKDoStep }, { &TRKDoStop }, { &TRKDoContinue }, { &TRKDoStep }, { &TRKDoStop },
{ &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported },
{ &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported }, { &TRKDoUnsupported },
@ -36,6 +36,7 @@ DSError TRKDispatchMessage(TRKBuffer* buffer)
error = DS_DispatchError; error = DS_DispatchError;
TRKSetBufferPosition(buffer, 0); TRKSetBufferPosition(buffer, 0);
TRKReadBuffer1_ui8(buffer, &command); TRKReadBuffer1_ui8(buffer, &command);
command &= 0xFF;
if (command < gTRKDispatchTableSize) { if (command < gTRKDispatchTableSize) {
error = gTRKDispatchTable[command].fn(buffer); error = gTRKDispatchTable[command].fn(buffer);
} }

View file

@ -4,6 +4,15 @@
#include "amcstubs/AmcExi2Stubs.h" #include "amcstubs/AmcExi2Stubs.h"
#include "PowerPC_EABI_Support/MetroTRK/trk.h" #include "PowerPC_EABI_Support/MetroTRK/trk.h"
#define BUFF_LEN 4362
u8 gWriteBuf[BUFF_LEN];
u8 gReadBuf[BUFF_LEN];
s32 _MetroTRK_Has_Framing;
s32 gReadCount;
s32 gReadPos;
s32 gWritePos;
DBCommTable gDBCommTable = {}; DBCommTable gDBCommTable = {};
asm void TRKLoadContext(OSContext* ctx, u32) asm void TRKLoadContext(OSContext* ctx, u32)
@ -60,6 +69,7 @@ int InitMetroTRKCommTable(int hwId)
int result; int result;
if (hwId == HARDWARE_GDEV) { if (hwId == HARDWARE_GDEV) {
OSReport("MetroTRK : Set to GDEV hardware\n");
result = Hu_IsStub(); result = Hu_IsStub();
gDBCommTable.initialize_func = DBInitComm; gDBCommTable.initialize_func = DBInitComm;
@ -70,6 +80,7 @@ int InitMetroTRKCommTable(int hwId)
gDBCommTable.open_func = DBOpen; gDBCommTable.open_func = DBOpen;
gDBCommTable.close_func = DBClose; gDBCommTable.close_func = DBClose;
} else { } else {
OSReport("MetroTRK : Set to AMC DDH hardware\n");
result = AMC_IsStub(); result = AMC_IsStub();
gDBCommTable.initialize_func = EXI2_Init; gDBCommTable.initialize_func = EXI2_Init;
@ -109,6 +120,51 @@ UARTError TRKWriteUARTN(const void* bytes, u32 length)
return writeErr == 0 ? 0 : -1; return writeErr == 0 ? 0 : -1;
} }
UARTError WriteUARTFlush(void)
{
UARTError readErr = 0;
while (gWritePos < 0x800) {
gWriteBuf[gWritePos] = 0;
gWritePos++;
}
if (gWritePos != 0) {
readErr = TRKWriteUARTN(gWriteBuf, gWritePos);
gWritePos = 0;
}
return readErr;
}
UARTError WriteUART1(u8 arg0)
{
gWriteBuf[gWritePos++] = arg0;
return 0;
}
UARTError TRKReadUARTPoll(u8* arg0)
{
UARTError readErr = 4;
if (gReadPos >= gReadCount) {
gReadPos = 0;
gReadCount = TRKPollUART();
if (gReadCount > 0) {
if (gReadCount > BUFF_LEN) {
gReadCount = BUFF_LEN;
}
readErr = TRKReadUARTN(gReadBuf, gReadCount);
if (readErr != 0) {
gReadCount = 0;
}
}
}
if (gReadPos < gReadCount) {
*arg0 = gReadBuf[gReadPos++];
readErr = 0;
}
return readErr;
}
void ReserveEXI2Port(void) { gDBCommTable.open_func(); } void ReserveEXI2Port(void) { gDBCommTable.open_func(); }
void UnreserveEXI2Port(void) { gDBCommTable.close_func(); } void UnreserveEXI2Port(void) { gDBCommTable.close_func(); }

View file

@ -245,4 +245,4 @@ lbl_8037149C:
#endif // clang-format on #endif // clang-format on
} }
u32 TRKTargetCPUMinorType(void) { return 0x54; } u8 TRKTargetCPUMinorType(void) { return 0x54; }

View file

@ -2,8 +2,60 @@
#include "TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk_glue.h" #include "TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk_glue.h"
#include "PowerPC_EABI_Support/MetroTRK/trk.h" #include "PowerPC_EABI_Support/MetroTRK/trk.h"
// Incorrect signature? Should be u8.
UARTError WriteUART1(s8 arg0);
DSError TRKMessageSend(TRK_Msg* msg) DSError TRKMessageSend(TRK_Msg* msg)
{ {
DSError write_err = TRKWriteUARTN(&msg->m_msg, msg->m_msgLength); u8 var_r30;
return DS_NoError; u8 var_r28;
u8 var_r28_2;
s32 var_r3;
s32 i;
var_r30 = 0;
for (i = 0; i < msg->m_msgLength; i++) {
var_r30 = var_r30 + msg->m_msg[i];
}
var_r30 = var_r30 ^ 0xFF;
var_r3 = WriteUART1(0x7E);
if (var_r3 == 0) {
for (i = 0; i < msg->m_msgLength; i++) {
var_r28 = msg->m_msg[i];
if (var_r28 == 0x7E || var_r28 == 0x7D) {
var_r3 = WriteUART1(0x7D);
var_r28 ^= 0x20;
if (var_r3 != 0) {
break;
}
}
var_r3 = WriteUART1(var_r28);
if (var_r3 != 0) {
break;
}
}
}
if (var_r3 == 0) {
var_r28_2 = var_r30;
for (i = 0; i < 1; i++) {
if (var_r28_2 == 0x7E || var_r28_2 == 0x7D) {
var_r3 = WriteUART1(0x7D);
var_r28_2 ^= 0x20;
if (var_r3 != 0) {
break;
}
}
var_r3 = WriteUART1(var_r28_2);
if (var_r3 != 0) {
break;
}
}
}
if (var_r3 == 0) {
var_r3 = WriteUART1(0x7E);
}
if (var_r3 == 0) {
var_r3 = WriteUARTFlush();
}
return var_r3;
} }

View file

@ -34,7 +34,7 @@ DSError TRKGetFreeBuffer(int* msgID, TRKBuffer** outMsg)
TRKAcquireMutex(buf); TRKAcquireMutex(buf);
if (!buf->isInUse) { if (!buf->isInUse) {
TRKResetBuffer(buf, TRUE); TRKResetBuffer(buf, 1);
TRKSetBufferUsed(buf, TRUE); TRKSetBufferUsed(buf, TRUE);
error = DS_NoError; error = DS_NoError;
*outMsg = buf; *outMsg = buf;
@ -44,6 +44,10 @@ DSError TRKGetFreeBuffer(int* msgID, TRKBuffer** outMsg)
TRKReleaseMutex(buf); TRKReleaseMutex(buf);
} }
if (error == DS_NoMessageBufferAvailable) {
usr_puts_serial("ERROR : No buffer available\n");
}
return error; return error;
} }
@ -68,7 +72,7 @@ void TRKReleaseBuffer(int idx)
} }
} }
void TRKResetBuffer(TRKBuffer* msg, BOOL keepData) void TRKResetBuffer(TRKBuffer* msg, u8 keepData)
{ {
msg->length = 0; msg->length = 0;
msg->position = 0; msg->position = 0;
@ -96,6 +100,7 @@ DSError TRKSetBufferPosition(TRKBuffer* msg, u32 pos)
return error; return error;
} }
#pragma dont_inline on
DSError TRKAppendBuffer(TRKBuffer* msg, const void* data, size_t length) DSError TRKAppendBuffer(TRKBuffer* msg, const void* data, size_t length)
{ {
DSError error = DS_NoError; // r31 DSError error = DS_NoError; // r31
@ -129,6 +134,7 @@ DSError TRKAppendBuffer(TRKBuffer* msg, const void* data, size_t length)
return error; return error;
} }
#pragma dont_inline reset
DSError TRKReadBuffer(TRKBuffer* msg, void* data, size_t length) DSError TRKReadBuffer(TRKBuffer* msg, void* data, size_t length)
{ {

View file

@ -45,8 +45,7 @@ DSError TRKStandardACK(TRKBuffer* buffer, MessageCommandID commandID,
DSReplyError replyError) DSReplyError replyError)
{ {
TRKMessageIntoReply(buffer, commandID, replyError); TRKMessageIntoReply(buffer, commandID, replyError);
TRKSendACK(buffer); return TRKSendACK(buffer);
return;
} }
DSError TRKDoUnsupported(TRKBuffer* buffer) DSError TRKDoUnsupported(TRKBuffer* buffer)
@ -107,7 +106,6 @@ DSError TRKDoVersions(TRKBuffer* buffer)
else else
error = TRKSendACK(buffer); error = TRKSendACK(buffer);
} }
return error;
} }
DSError TRKDoSupportMask(TRKBuffer* buffer) DSError TRKDoSupportMask(TRKBuffer* buffer)
@ -140,7 +138,7 @@ DSError TRKDoCPUType(TRKBuffer* buffer)
if (buffer->length != 1) { if (buffer->length != 1) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
return error; return;
} }
TRKMessageIntoReply(buffer, DSMSG_ReplyACK, DSREPLY_NoError); TRKMessageIntoReply(buffer, DSMSG_ReplyACK, DSREPLY_NoError);
@ -166,8 +164,6 @@ DSError TRKDoCPUType(TRKBuffer* buffer)
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_CWDSError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_CWDSError);
else else
error = TRKSendACK(buffer); error = TRKSendACK(buffer);
return error;
} }
DSError TRKDoReadMemory(TRKBuffer* buffer) DSError TRKDoReadMemory(TRKBuffer* buffer)
@ -175,11 +171,11 @@ DSError TRKDoReadMemory(TRKBuffer* buffer)
DSError error; DSError error;
DSReplyError replyError; DSReplyError replyError;
u8 tempBuf[0x800]; u8 tempBuf[0x800];
u32 length;
u32 msg_start; u32 msg_start;
u32 length;
u16 msg_length; u16 msg_length;
u8 msg_options;
u8 msg_command; u8 msg_command;
u8 msg_options;
if (buffer->length != 8) { if (buffer->length != 8) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
@ -257,11 +253,11 @@ DSError TRKDoWriteMemory(TRKBuffer* buffer)
DSError error; DSError error;
DSReplyError replyError; DSReplyError replyError;
u8 tmpBuffer[0x800]; u8 tmpBuffer[0x800];
u32 length;
u32 msg_start; u32 msg_start;
u32 length;
u16 msg_length; u16 msg_length;
u8 msg_options;
u8 msg_command; u8 msg_command;
u8 msg_options;
if (buffer->length <= 8) { if (buffer->length <= 8) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
@ -343,14 +339,14 @@ DSError TRKDoReadRegisters(TRKBuffer* buffer)
DSReplyError replyError; DSReplyError replyError;
DSMessageRegisterOptions options; DSMessageRegisterOptions options;
u32 registerDataLength; u32 registerDataLength;
u16 msg_lastRegister;
u16 msg_firstRegister; u16 msg_firstRegister;
u8 msg_options; u16 msg_lastRegister;
u8 msg_command; u8 msg_command;
u8 msg_options;
if (buffer->length != 6) { if (buffer->length != 6) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
return error; return;
} }
TRKSetBufferPosition(buffer, DSREPLY_NoError); TRKSetBufferPosition(buffer, DSREPLY_NoError);
error = TRKReadBuffer1_ui8(buffer, &msg_command); error = TRKReadBuffer1_ui8(buffer, &msg_command);
@ -366,13 +362,13 @@ DSError TRKDoReadRegisters(TRKBuffer* buffer)
if (msg_firstRegister > msg_lastRegister) { if (msg_firstRegister > msg_lastRegister) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, error = TRKStandardACK(buffer, DSMSG_ReplyACK,
DSREPLY_InvalidRegisterRange); DSREPLY_InvalidRegisterRange);
return error; return;
} }
if (error == DS_NoError) if (error == DS_NoError)
TRKMessageIntoReply(buffer, DSMSG_ReplyACK, DSREPLY_NoError); TRKMessageIntoReply(buffer, DSMSG_ReplyACK, DSREPLY_NoError);
options = (DSMessageRegisterOptions)msg_options; options = (DSMessageRegisterOptions)(msg_options & 7);
switch (options) { switch (options) {
case DSREG_Default: case DSREG_Default:
error = TRKTargetAccessDefault(msg_firstRegister, msg_lastRegister, error = TRKTargetAccessDefault(msg_firstRegister, msg_lastRegister,
@ -423,8 +419,6 @@ DSError TRKDoReadRegisters(TRKBuffer* buffer)
} else { } else {
error = TRKSendACK(buffer); error = TRKSendACK(buffer);
} }
return error;
} }
DSError TRKDoWriteRegisters(TRKBuffer* buffer) DSError TRKDoWriteRegisters(TRKBuffer* buffer)
@ -433,14 +427,14 @@ DSError TRKDoWriteRegisters(TRKBuffer* buffer)
DSReplyError replyError; DSReplyError replyError;
DSMessageRegisterOptions options; DSMessageRegisterOptions options;
u32 registerDataLength; u32 registerDataLength;
u16 msg_lastRegister;
u16 msg_firstRegister; u16 msg_firstRegister;
u8 msg_options; u16 msg_lastRegister;
u8 msg_command; u8 msg_command;
u8 msg_options;
if (buffer->length <= 6) { if (buffer->length <= 6) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
return error; return;
} }
TRKSetBufferPosition(buffer, DSREPLY_NoError); TRKSetBufferPosition(buffer, DSREPLY_NoError);
error = TRKReadBuffer1_ui8(buffer, &msg_command); error = TRKReadBuffer1_ui8(buffer, &msg_command);
@ -456,7 +450,7 @@ DSError TRKDoWriteRegisters(TRKBuffer* buffer)
if (msg_firstRegister > msg_lastRegister) { if (msg_firstRegister > msg_lastRegister) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, error = TRKStandardACK(buffer, DSMSG_ReplyACK,
DSREPLY_InvalidRegisterRange); DSREPLY_InvalidRegisterRange);
return error; return;
} }
options = (DSMessageRegisterOptions)msg_options; options = (DSMessageRegisterOptions)msg_options;
@ -516,22 +510,20 @@ DSError TRKDoWriteRegisters(TRKBuffer* buffer)
} else { } else {
error = TRKSendACK(buffer); error = TRKSendACK(buffer);
} }
return error;
} }
DSError TRKDoFlushCache(TRKBuffer* buffer) DSError TRKDoFlushCache(TRKBuffer* buffer)
{ {
DSError error; DSError error;
DSReplyError replyErr; DSReplyError replyErr;
u32 msg_end;
u32 msg_start; u32 msg_start;
u8 msg_options; u32 msg_end;
u8 msg_command; u8 msg_command;
u8 msg_options;
if (buffer->length != 10) { if (buffer->length != 10) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
return error; return;
} }
TRKSetBufferPosition(buffer, DSREPLY_NoError); TRKSetBufferPosition(buffer, DSREPLY_NoError);
@ -546,7 +538,7 @@ DSError TRKDoFlushCache(TRKBuffer* buffer)
if (msg_start > msg_end) { if (msg_start > msg_end) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, error = TRKStandardACK(buffer, DSMSG_ReplyACK,
DSREPLY_InvalidMemoryRange); DSREPLY_InvalidMemoryRange);
return error; return;
} }
if (error == DS_NoError) if (error == DS_NoError)
@ -570,8 +562,6 @@ DSError TRKDoFlushCache(TRKBuffer* buffer)
} else { } else {
error = TRKSendACK(buffer); error = TRKSendACK(buffer);
} }
return error;
} }
DSError TRKDoContinue(TRKBuffer* buffer) DSError TRKDoContinue(TRKBuffer* buffer)
@ -581,14 +571,12 @@ DSError TRKDoContinue(TRKBuffer* buffer)
error = TRKTargetStopped(); error = TRKTargetStopped();
if (error == DS_NoError) { if (error == DS_NoError) {
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NotStopped); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NotStopped);
return error; return;
} }
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NoError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NoError);
if (error == DS_NoError) if (error == DS_NoError)
error = TRKTargetContinue(); error = TRKTargetContinue();
return error;
} }
DSError TRKDoStep(TRKBuffer* buffer) DSError TRKDoStep(TRKBuffer* buffer)
@ -601,8 +589,10 @@ DSError TRKDoStep(TRKBuffer* buffer)
u32 msg_rangeEnd; u32 msg_rangeEnd;
u32 pc; u32 pc;
if (buffer->length < 3) if (buffer->length < 3) {
return TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError); TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
return;
}
TRKSetBufferPosition(buffer, DSREPLY_NoError); TRKSetBufferPosition(buffer, DSREPLY_NoError);
@ -618,12 +608,14 @@ DSError TRKDoStep(TRKBuffer* buffer)
if (msg_count >= 1) { if (msg_count >= 1) {
break; break;
} }
return TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_ParameterError); TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_ParameterError);
return;
case DSSTEP_IntoRange: case DSSTEP_IntoRange:
case DSSTEP_OverRange: case DSSTEP_OverRange:
if (buffer->length != 10) if (buffer->length != 10) {
return TRKStandardACK(buffer, DSMSG_ReplyACK, TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_PacketSizeError);
DSREPLY_PacketSizeError); return;
}
if (error == DS_NoError) if (error == DS_NoError)
error = TRKReadBuffer1_ui32(buffer, &msg_rangeStart); error = TRKReadBuffer1_ui32(buffer, &msg_rangeStart);
@ -634,15 +626,18 @@ DSError TRKDoStep(TRKBuffer* buffer)
if (pc >= msg_rangeStart && pc <= msg_rangeEnd) { if (pc >= msg_rangeStart && pc <= msg_rangeEnd) {
break; break;
} }
return TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_ParameterError); TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_ParameterError);
return;
default: default:
return TRKStandardACK(buffer, DSMSG_ReplyACK, TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_UnsupportedOptionError);
DSREPLY_UnsupportedOptionError); return;
} }
if (!TRKTargetStopped()) { if (!TRKTargetStopped()) {
return TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NotStopped); TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NotStopped);
} else { return;
}
error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NoError); error = TRKStandardACK(buffer, DSMSG_ReplyACK, DSREPLY_NoError);
if (error == DS_NoError) if (error == DS_NoError)
switch (msg_options) { switch (msg_options) {
@ -658,9 +653,6 @@ DSError TRKDoStep(TRKBuffer* buffer)
(msg_options == DSSTEP_OverRange)); (msg_options == DSSTEP_OverRange));
break; break;
} }
return error;
}
} }
DSError TRKDoStop(TRKBuffer* b) DSError TRKDoStop(TRKBuffer* b)
@ -687,3 +679,46 @@ DSError TRKDoStop(TRKBuffer* b)
return TRKStandardACK(b, DSMSG_ReplyACK, replyError); return TRKStandardACK(b, DSMSG_ReplyACK, replyError);
} }
DSError TRKDoSetOption(TRKBuffer* buffer) {
DSError error;
u8 spA;
u8 sp9;
u8 sp8;
spA = 0;
sp9 = 0;
sp8 = 0;
TRKSetBufferPosition(buffer, DSREPLY_NoError);
error = TRKReadBuffer1_ui8(buffer, &spA);
if (error == DS_NoError) {
error = TRKReadBuffer1_ui8(buffer, &sp9);
}
if (error == DS_NoError) {
error = TRKReadBuffer1_ui8(buffer, &sp8);
}
if (error != DS_NoError) {
TRKResetBuffer(buffer, 1);
if (buffer->position < 0x880) {
buffer->data[buffer->position++] = 0x80;
buffer->length++;
}
if (buffer->position < 0x880) {
buffer->data[buffer->position++] = 1;
buffer->length++;
}
TRKSendACK(buffer);
} else if (sp9 == 1) {
SetUseSerialIO(sp8);
}
TRKResetBuffer(buffer, 1);
if (buffer->position < 0x880) {
buffer->data[buffer->position++] = 0x80;
buffer->length++;
}
if (buffer->position < 0x880) {
buffer->data[buffer->position++] = 0;
buffer->length++;
}
return TRKSendACK(buffer);
}

112
src/TRK_MINNOW_DOLPHIN/mslsupp.c Executable file
View file

@ -0,0 +1,112 @@
#include "PowerPC_EABI_Support/MetroTRK/trk.h"
#include <stddef.h>
// forward declares
DSIOResult __read_file(u32 handle, u8* buffer, size_t* count, void* ref_con);
DSIOResult __write_file(u32 handle, u8* buffer, size_t* count, void* ref_con);
DSIOResult __access_file(u32 handle, u8* buffer, size_t* count, void* ref_con, MessageCommandID cmd);
/**
* @note Address: 0x800C0B4C
* @note Size: 0xBC
*/
DSIOResult __read_console(u32 handle, u8* buffer, size_t* count, void* ref_con)
{
if (GetUseSerialIO() == 0) {
return DS_IOError;
}
return __read_file(DS_Stdin, buffer, count, ref_con);
}
/**
* @note Address: 0x800C0A90
* @note Size: 0xBC
*/
DSIOResult __TRK_write_console(u32 handle, u8* buffer, size_t* count, void* ref_con)
{
if (GetUseSerialIO() == 0) {
return DS_IOError;
}
return __write_file(DS_Stdout, buffer, count, ref_con);
}
/**
* @note Address: N/A
* @note Size: 0xB4
*/
DSIOResult __read_file(u32 handle, u8* buffer, size_t* count, void* ref_con)
{
return __access_file(handle, buffer, count, ref_con, DSMSG_ReadFile);
}
/**
* @note Address: N/A
* @note Size: 0xB4
*/
DSIOResult __write_file(u32 handle, u8* buffer, size_t* count, void* ref_con)
{
return __access_file(handle, buffer, count, ref_con, DSMSG_WriteFile);
}
/**
* @note Address: N/A
* @note Size: 0x17C
*/
void __open_file(void)
{
// UNUSED FUNCTION
}
/**
* @note Address: N/A
* @note Size: 0xDC
*/
void __position_file(void)
{
// UNUSED FUNCTION
}
/**
* @note Address: N/A
* @note Size: 0xE0
*/
void convertFileMode(void)
{
// UNUSED FUNCTION
}
/**
* @note Address: N/A
* @note Size: 0xC0
*/
DSIOResult __access_file(u32 handle, u8* buffer, size_t* count, void* ref_con, MessageCommandID cmd)
{
size_t countTemp;
u32 r0;
if (GetTRKConnected() == DS_NoError) {
return DS_IOError;
}
countTemp = *count;
r0 = TRKAccessFile(cmd, handle, &countTemp, buffer);
*count = countTemp;
switch ((u8)r0) {
case DS_IONoError:
return DS_IONoError;
case DS_IOEOF:
return DS_IOEOF;
}
return DS_IOError;
}
/**
* @note Address: N/A
* @note Size: 0x1D0
*/
void __open_temp_file(void)
{
// UNUSED FUNCTION
}

View file

@ -9,41 +9,100 @@ static TRKFramingState gTRKFramingState;
void* gTRKInputPendingPtr; void* gTRKInputPendingPtr;
MessageBufferID TRKTestForPacket() static inline BOOL serpoll_inline_00(TRKBuffer* buffer) {
{ if (buffer->length < 2) {
int bytes; TRKStandardACK(buffer, DSMSG_ReplyNAK, DSREPLY_PacketSizeError);
int batch; if (gTRKFramingState.msgBufID != -1) {
int err; TRKReleaseBuffer(gTRKFramingState.msgBufID);
TRKBuffer* b; gTRKFramingState.msgBufID = -1;
int id; }
gTRKFramingState.buffer = NULL;
gTRKFramingState.receiveState = DSRECV_Wait;
return FALSE;
}
buffer->position = 0;
buffer->length--;
return TRUE;
}
bytes = TRKPollUART(); MessageBufferID TRKTestForPacket(void) {
if (bytes > 0) { s32 var_r29;
TRKGetFreeBuffer(&id, &b); s32 var_r3;
if (bytes > TRKMSGBUF_SIZE) { s8 sp8;
for (; bytes > 0; bytes -= batch) { s32 temp_r3;
batch = bytes > TRKMSGBUF_SIZE ? TRKMSGBUF_SIZE : bytes;
TRKReadUARTN(b->data, batch); var_r29 = 0;
var_r3 = TRKReadUARTPoll(&sp8);
while (var_r3 == 0 && var_r29 == 0) {
if (gTRKFramingState.receiveState != DSRECV_InFrame) {
gTRKFramingState.isEscape = FALSE;
} }
TRKStandardACK(b, 0xff, 6); switch (gTRKFramingState.receiveState) {
case DSRECV_Wait:
if (sp8 == 0x7E) {
var_r29 = TRKGetFreeBuffer(&gTRKFramingState.msgBufID, &gTRKFramingState.buffer);
gTRKFramingState.fcsType = 0;
gTRKFramingState.receiveState = DSRECV_Found;
}
break;
case DSRECV_Found:
if (sp8 == 0x7E) {
break;
}
gTRKFramingState.receiveState = DSRECV_InFrame;
/* fallthrough */
case DSRECV_InFrame:
if (sp8 == 0x7E) {
if (gTRKFramingState.isEscape) {
TRKStandardACK(gTRKFramingState.buffer, DSMSG_ReplyNAK, DSREPLY_EscapeError);
if (gTRKFramingState.msgBufID != -1) {
TRKReleaseBuffer(gTRKFramingState.msgBufID);
gTRKFramingState.msgBufID = -1;
}
gTRKFramingState.buffer = NULL;
gTRKFramingState.receiveState = DSRECV_Wait;
break;
}
if (serpoll_inline_00(gTRKFramingState.buffer)) {
temp_r3 = gTRKFramingState.msgBufID;
gTRKFramingState.msgBufID = -1;
gTRKFramingState.buffer = NULL;
gTRKFramingState.receiveState = DSRECV_Wait;
return temp_r3;
}
gTRKFramingState.receiveState = DSRECV_Wait;
} else { } else {
err = TRKReadUARTN(b->data, bytes); if (gTRKFramingState.isEscape) {
if (err == 0) { sp8 ^= 0x20;
b->length = bytes; gTRKFramingState.isEscape = FALSE;
return id; } else if (sp8 == 0x7D) {
gTRKFramingState.isEscape = TRUE;
break;
} }
var_r29 = TRKAppendBuffer1_ui8(gTRKFramingState.buffer, sp8);
gTRKFramingState.fcsType += sp8;
} }
break;
case DSRECV_FrameOverflow:
if (sp8 == 0x7E) {
if (gTRKFramingState.msgBufID != -1) {
TRKReleaseBuffer(gTRKFramingState.msgBufID);
gTRKFramingState.msgBufID = -1;
} }
if (id != -1) { gTRKFramingState.buffer = NULL;
TRKReleaseBuffer(id); gTRKFramingState.receiveState = DSRECV_Wait;
}
break;
}
var_r3 = TRKReadUARTPoll(&sp8);
} }
return -1; return -1;
} }
void TRKGetInput(void) void TRKGetInput(void)
{ {
MessageBufferID id;
TRKBuffer* msgBuffer; TRKBuffer* msgBuffer;
MessageBufferID id;
u8 command; u8 command;
id = TRKTestForPacket(); id = TRKTestForPacket();

View file

@ -28,7 +28,7 @@ DSError TRKSuppAccessFile(u32 file_handle, u8* data, size_t* count,
*io_result = DS_IONoError; *io_result = DS_IONoError;
done = 0; done = 0;
error = DS_NoError; error = DS_NoError;
while (!exit && done < *count && error == DS_NoError && *io_result == 0) { while (!exit && done < *count && error == DS_NoError && *io_result == DS_IONoError) {
if (*count - done > 0x800) { if (*count - done > 0x800) {
length = 0x800; length = 0x800;
} else { } else {
@ -175,3 +175,114 @@ DSError TRKRequestSend(TRKBuffer* msgBuf, int* bufferId, u32 p1, u32 p2, int p3)
return error; return error;
} }
DSError HandleOpenFileSupportRequest(const char* path, u8 replyError, u32* param_3, u8* ioResult) {
int sp10;
int spC;
TRKBuffer* sp8;
TRKBuffer* var_r31;
DSError var_r26;
*param_3 = 0;
var_r26 = TRKGetFreeBuffer(&spC, &sp8);
if (var_r26 == DS_NoError) {
var_r26 = TRKAppendBuffer1_ui8(sp8, 0xD2);
}
if (var_r26 == DS_NoError) {
var_r26 = TRKAppendBuffer1_ui8(sp8, replyError);
}
if (var_r26 == DS_NoError) {
var_r26 = TRKAppendBuffer1_ui16(sp8, strlen(path) + 1);
}
if (var_r26 == DS_NoError) {
var_r26 = TRKAppendBuffer_ui8(sp8, (u8*) path, strlen(path) + 1);
}
if (var_r26 == DS_NoError) {
*ioResult = 0;
var_r26 = TRKRequestSend(sp8, &sp10, 7, 3, 0);
if (var_r26 == DS_NoError) {
var_r31 = TRKGetBuffer(sp10);
TRKSetBufferPosition(var_r31, 2);
}
if (var_r26 == DS_NoError) {
var_r26 = TRKReadBuffer1_ui8(var_r31, ioResult);
}
if (var_r26 == DS_NoError) {
var_r26 = TRKReadBuffer1_ui32(var_r31, param_3);
}
TRKReleaseBuffer(sp10);
}
TRKReleaseBuffer(spC);
return var_r26;
}
DSError HandleCloseFileSupportRequest(int replyError, u8* ioResult) {
int sp10;
int spC;
DSError var_r31;
TRKBuffer* sp8;
TRKBuffer* var_r30;
var_r31 = TRKGetFreeBuffer(&spC, &sp8);
if (var_r31 == DS_NoError) {
var_r31 = TRKAppendBuffer1_ui8(sp8, 0xD3);
}
if (var_r31 == DS_NoError) {
var_r31 = TRKAppendBuffer1_ui32(sp8, replyError);
}
if (var_r31 == DS_NoError) {
*ioResult = DS_IONoError;
var_r31 = TRKRequestSend(sp8, &sp10, 3, 3, 0);
if (var_r31 == DS_NoError) {
var_r30 = TRKGetBuffer(sp10);
TRKSetBufferPosition(var_r30, 2);
}
if (var_r31 == DS_NoError) {
var_r31 = TRKReadBuffer1_ui8(var_r30, ioResult);
}
TRKReleaseBuffer(sp10);
}
TRKReleaseBuffer(spC);
return var_r31;
}
DSError HandlePositionFileSupportRequest(u32 replyErr, u32* param_2, u8 param_3, u8* ioResult) {
int sp10;
int spC;
TRKBuffer* sp8;
TRKBuffer* var_r31;
DSError var_r27;
var_r27 = TRKGetFreeBuffer(&spC, &sp8);
if (var_r27 == DS_NoError) {
var_r27 = TRKAppendBuffer1_ui8(sp8, 0xD4);
}
if (var_r27 == DS_NoError) {
var_r27 = TRKAppendBuffer1_ui32(sp8, replyErr);
}
if (var_r27 == DS_NoError) {
var_r27 = TRKAppendBuffer1_ui32(sp8, *param_2);
}
if (var_r27 == DS_NoError) {
var_r27 = TRKAppendBuffer1_ui8(sp8, param_3);
}
if (var_r27 == DS_NoError) {
*ioResult = DS_IONoError;
var_r27 = TRKRequestSend(sp8, &sp10, 3, 3, 0);
if (var_r27 == DS_NoError) {
var_r31 = TRKGetBuffer(sp10);
TRKSetBufferPosition(var_r31, 2);
}
if (var_r27 == DS_NoError) {
var_r27 = TRKReadBuffer1_ui8(var_r31, ioResult);
}
if (var_r27 == DS_NoError) {
var_r27 = TRKReadBuffer1_ui32(var_r31, param_2);
} else {
*param_2 = -1;
}
TRKReleaseBuffer(sp10);
}
TRKReleaseBuffer(spC);
return var_r27;
}

View file

@ -0,0 +1,11 @@
#include "PowerPC_EABI_Support/MetroTRK/trk.h"
static u8 bUseSerialIO;
void SetUseSerialIO(u8 sio) {
bUseSerialIO = sio;
}
u8 GetUseSerialIO(void) {
return bUseSerialIO;
}

View file

@ -114,6 +114,7 @@ asm void __TRK_set_MSR(register u32 msr) {
#endif // clang-format on #endif // clang-format on
} }
#pragma dont_inline on
DSError TRKValidMemory32(const void* addr, size_t length, DSError TRKValidMemory32(const void* addr, size_t length,
ValidMemoryOptions readWriteable) ValidMemoryOptions readWriteable)
{ {
@ -199,6 +200,7 @@ DSError TRKValidMemory32(const void* addr, size_t length,
return err; return err;
} }
#pragma dont_inline reset
static asm void TRK_ppc_memcpy(register void* dest, register const void* src, static asm void TRK_ppc_memcpy(register void* dest, register const void* src,
register int n, register u32 param_4, register int n, register u32 param_4,
@ -240,6 +242,7 @@ out_loop:
#endif // clang-format on #endif // clang-format on
} }
#pragma dont_inline on
DSError TRKTargetAccessMemory(void* data, u32 start, size_t* length, DSError TRKTargetAccessMemory(void* data, u32 start, size_t* length,
MemoryAccessOptions accessOptions, BOOL read) MemoryAccessOptions accessOptions, BOOL read)
{ {
@ -279,6 +282,7 @@ DSError TRKTargetAccessMemory(void* data, u32 start, size_t* length,
gTRKExceptionStatus = tempExceptionStatus; gTRKExceptionStatus = tempExceptionStatus;
return error; return error;
} }
#pragma dont_inline reset
DSError TRKTargetReadInstruction(void* data, u32 start) DSError TRKTargetReadInstruction(void* data, u32 start)
{ {
@ -310,12 +314,12 @@ DSError TRKTargetAccessDefault(u32 firstRegister, u32 lastRegister,
tempExceptionStatus = gTRKExceptionStatus; tempExceptionStatus = gTRKExceptionStatus;
gTRKExceptionStatus.exceptionDetected = FALSE;
data = gTRKCPUState.Default.GPR + firstRegister; data = gTRKCPUState.Default.GPR + firstRegister;
count = (lastRegister - firstRegister) + 1; count = (lastRegister - firstRegister) + 1;
gTRKExceptionStatus.exceptionDetected = FALSE;
*registersLengthPtr = count * sizeof(u32); *registersLengthPtr = count * sizeof(u32);
if (read) { if (read) {
@ -480,7 +484,7 @@ DSError TRKTargetAccessExtended2(u32 firstRegister, u32 lastRegister,
DSError TRKTargetVersions(DSVersions* versions) DSError TRKTargetVersions(DSVersions* versions)
{ {
versions->kernelMajor = 0; versions->kernelMajor = 0;
versions->kernelMinor = 8; versions->kernelMinor = 10;
versions->protocolMajor = 1; versions->protocolMajor = 1;
versions->protocolMinor = 10; versions->protocolMinor = 10;
return DS_NoError; return DS_NoError;
@ -832,16 +836,26 @@ DSError TRKTargetAddStopInfo(TRKBuffer* buffer)
{ {
DSError error; DSError error;
u32 instruction; u32 instruction;
s32 i;
error = TRKAppendBuffer1_ui32(buffer, gTRKCPUState.Default.PC); error = TRKAppendBuffer1_ui32(buffer, gTRKCPUState.Default.PC);
if (error == 0) { if (error == DS_NoError) {
error = TRKTargetReadInstruction(&instruction, gTRKCPUState.Default.PC); error = TRKTargetReadInstruction(&instruction, gTRKCPUState.Default.PC);
} }
if (error == 0) if (error == DS_NoError)
error = TRKAppendBuffer1_ui32(buffer, instruction); error = TRKAppendBuffer1_ui32(buffer, instruction);
if (error == 0) if (error == DS_NoError)
error error = TRKAppendBuffer1_ui16(buffer, gTRKCPUState.Extended1.exceptionID);
= TRKAppendBuffer1_ui16(buffer, gTRKCPUState.Extended1.exceptionID);
if (error == DS_NoError) {
for (i = 0; i < 32; i++) {
error = TRKAppendBuffer1_ui32(buffer, (u16) gTRKCPUState.Default.GPR[i]);
}
for (i = 0; i < 32; i++) {
error = TRKAppendBuffer1_ui64(buffer, (u16) gTRKCPUState.Float.FPR[i]);
}
}
return error; return error;
} }
@ -938,8 +952,8 @@ DSError TRKTargetSingleStep(u32 count, BOOL stepOver)
if (stepOver) { if (stepOver) {
error = DS_UnsupportedError; error = DS_UnsupportedError;
} else { } else {
gTRKStepStatus.count = count;
gTRKStepStatus.type = DSSTEP_IntoCount; gTRKStepStatus.type = DSSTEP_IntoCount;
gTRKStepStatus.count = count;
error = TRKTargetDoStep(); error = TRKTargetDoStep();
} }
@ -966,36 +980,51 @@ DSError TRKTargetStepOutOfRange(u32 rangeStart, u32 rangeEnd, BOOL stepOver)
u32 TRKTargetGetPC() { return gTRKCPUState.Default.PC; } u32 TRKTargetGetPC() { return gTRKCPUState.Default.PC; }
DSError TRKTargetSupportRequest() DSError TRKTargetSupportRequest(void) {
{
DSError error; DSError error;
u32 spC;
size_t* length; size_t* length;
DSIOResult ioResult;
MessageCommandID commandId; MessageCommandID commandId;
TRKEvent event; TRKEvent event;
u8 ioResult;
commandId = gTRKCPUState.Default.GPR[3]; commandId = (u8) gTRKCPUState.Default.GPR[3];
if (commandId != DSMSG_ReadFile && commandId != DSMSG_WriteFile) { if (commandId != DSMSG_ReadFile && commandId != DSMSG_WriteFile && commandId != DSMSG_OpenFile && commandId != DSMSG_CloseFile && commandId != DSMSG_PositionFile) {
TRKConstructEvent(&event, 4); TRKConstructEvent(&event, NUBEVENT_Exception);
TRKPostEvent(&event); TRKPostEvent(&event);
return DS_NoError; return DS_NoError;
} else { }
length = (size_t*)gTRKCPUState.Default.GPR[5]; if (commandId == DSMSG_OpenFile) {
error = TRKSuppAccessFile((u8)gTRKCPUState.Default.GPR[4], error = HandleOpenFileSupportRequest((char*) gTRKCPUState.Default.GPR[4], gTRKCPUState.Default.GPR[5], (u32*) gTRKCPUState.Default.GPR[6], &ioResult);
(u8*)gTRKCPUState.Default.GPR[6], length, if (ioResult == DS_IONoError && error != DS_NoError) {
&ioResult, TRUE, commandId == DSMSG_ReadFile); ioResult = DS_IOError;
}
gTRKCPUState.Default.GPR[3] = ioResult;
} else if (commandId == DSMSG_CloseFile) {
error = HandleCloseFileSupportRequest(gTRKCPUState.Default.GPR[4], &ioResult);
if (ioResult == DS_IONoError && error != DS_NoError) {
ioResult = DS_IOError;
}
gTRKCPUState.Default.GPR[3] = ioResult;
} else if (commandId == DSMSG_PositionFile) {
spC = *((u32*) gTRKCPUState.Default.GPR[5]);
error = HandlePositionFileSupportRequest(gTRKCPUState.Default.GPR[4], &spC, gTRKCPUState.Default.GPR[6], &ioResult);
if (ioResult == DS_IONoError && error != DS_NoError) {
ioResult = DS_IOError;
}
gTRKCPUState.Default.GPR[3] = ioResult;
*((u32*) gTRKCPUState.Default.GPR[5]) = spC;
} else {
length = (size_t*) gTRKCPUState.Default.GPR[5];
error = TRKSuppAccessFile((u8) gTRKCPUState.Default.GPR[4], (u8*) gTRKCPUState.Default.GPR[6], length, (DSIOResult*) &ioResult, TRUE, commandId == DSMSG_ReadFile);
if (ioResult == DS_IONoError && error != DS_NoError) { if (ioResult == DS_IONoError && error != DS_NoError) {
ioResult = DS_IOError; ioResult = DS_IOError;
} }
gTRKCPUState.Default.GPR[3] = ioResult; gTRKCPUState.Default.GPR[3] = ioResult;
if (commandId == DSMSG_ReadFile) { if (commandId == DSMSG_ReadFile) {
TRK_flush_cache((void*) gTRKCPUState.Default.GPR[6], *length); TRK_flush_cache((void*) gTRKCPUState.Default.GPR[6], *length);
} }
} }
gTRKCPUState.Default.PC += 4; gTRKCPUState.Default.PC += 4;
return error; return error;
} }
@ -1027,8 +1056,10 @@ DSError TRKPPCAccessSPR(void* value, u32 spr_register_num, BOOL read)
{ {
/* Initialize instruction array with nop */ /* Initialize instruction array with nop */
u32 access_func[5] u32 access_func[10] = {
= { INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP }; INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP,
INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP
};
/* /*
** Construct a small assembly function to perform the ** Construct a small assembly function to perform the
** requested access and call it. The read/write function ** requested access and call it. The read/write function
@ -1060,8 +1091,10 @@ DSError TRKPPCAccessSPR(void* value, u32 spr_register_num, BOOL read)
DSError TRKPPCAccessPairedSingleRegister(void* srcDestPtr, u32 psr, BOOL read) DSError TRKPPCAccessPairedSingleRegister(void* srcDestPtr, u32 psr, BOOL read)
{ {
// all nop by default // all nop by default
u32 instructionData[] u32 instructionData[] = {
= { INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP }; INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP,
INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP
};
if (read) { if (read) {
instructionData[0] instructionData[0]
@ -1074,12 +1107,15 @@ DSError TRKPPCAccessPairedSingleRegister(void* srcDestPtr, u32 psr, BOOL read)
return TRKPPCAccessSpecialReg(srcDestPtr, instructionData, read); return TRKPPCAccessSpecialReg(srcDestPtr, instructionData, read);
} }
#pragma dont_inline on
DSError TRKPPCAccessFPRegister(void* srcDestPtr, u32 fpr, BOOL read) DSError TRKPPCAccessFPRegister(void* srcDestPtr, u32 fpr, BOOL read)
{ {
DSError error = DS_NoError; DSError error = DS_NoError;
// all nop by default // all nop by default
u32 instructionData1[] u32 instructionData1[] = {
= { INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP }; INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP,
INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP, INSTR_NOP
};
if (fpr < 0x20) { if (fpr < 0x20) {
if (read) { if (read) {
@ -1090,25 +1126,12 @@ DSError TRKPPCAccessFPRegister(void* srcDestPtr, u32 fpr, BOOL read)
error = TRKPPCAccessSpecialReg(srcDestPtr, instructionData1, read); error = TRKPPCAccessSpecialReg(srcDestPtr, instructionData1, read);
} else if (fpr == 0x20) { } else if (fpr == 0x20) {
if (read) {
instructionData1[0] = INSTR_STFD(1, 0, 4); // stfd f1, 0(r4)
instructionData1[1] = 0xfc20048e; // mtfsf 0xff, f1
instructionData1[2] = INSTR_STFD(1, 0, 3); // stfd f1, 0(r3)
instructionData1[3] = INSTR_LFD(1, 0, 4); // lfd f1, 0(r4)
} else {
instructionData1[0] = INSTR_STFD(1, 0, 4); // stfd f1, 0(r4)
instructionData1[1] = INSTR_LFD(1, 0, 3); // lfd f1, 0(r4)
instructionData1[2] = 0xfdfe0d8e; // mtfsf 0xff, f1
instructionData1[3] = INSTR_LFD(1, 0, 4); // lfd f1, 0(r4)
}
error = TRKPPCAccessSpecialReg(srcDestPtr, instructionData1, read);
*(u64*)srcDestPtr &= 0xFFFFFFFF; *(u64*)srcDestPtr &= 0xFFFFFFFF;
} else if (fpr == 0x21) { } else if (fpr == 0x21) {
if (!read) { if (!read) {
*(u32*)srcDestPtr = *((u32*)(srcDestPtr) + 1); *(u32*)srcDestPtr = *((u32*)(srcDestPtr) + 1);
} }
error = TRKPPCAccessSPR(srcDestPtr, 1022, read);
error = TRKPPCAccessSPR(srcDestPtr, SPR_FPECR, read);
if (read) { if (read) {
DSFetch_u64(srcDestPtr) = DSFetch_u32(srcDestPtr) & 0xffffffffLL; DSFetch_u64(srcDestPtr) = DSFetch_u32(srcDestPtr) & 0xffffffffLL;
} }
@ -1116,6 +1139,7 @@ DSError TRKPPCAccessFPRegister(void* srcDestPtr, u32 fpr, BOOL read)
return error; return error;
} }
#pragma dont_inline reset
#define DEBUG_VECTORREG_ACCESS 0 #define DEBUG_VECTORREG_ACCESS 0

View file

@ -2,4 +2,25 @@
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/msghndlr.h" #include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/msghndlr.h"
#include "PowerPC_EABI_Support/MetroTRK/trk.h" #include "PowerPC_EABI_Support/MetroTRK/trk.h"
BOOL usr_puts_serial(const char* msg)
{
BOOL connect_ = FALSE;
char c;
char buf[2];
while (!connect_ && (c = *msg++) != '\0') {
BOOL connect = GetTRKConnected();
buf[0] = c;
buf[1] = '\0';
SetTRKConnected(FALSE);
OSReport(buf);
SetTRKConnected(connect);
connect_ = FALSE;
}
return connect_;
}
void usr_put_initialize(void) { } void usr_put_initialize(void) { }

View file

@ -496,7 +496,7 @@ void HuAudSndGrpSetSet(s16 dataSize) {
sndGroupBak = dataSize; sndGroupBak = dataSize;
err = msmSysDelGroupAll(); err = msmSysDelGroupAll();
buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(1)); buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(1));
err = msmSysLoadGroupSet(dataSize, buf); err = msmSysLoadGroupSet(dataSize, buf);\
OSReport("***********GroupSet Error %d\n", err); OSReport("***********GroupSet Error %d\n", err);
HuMemDirectFree(buf); HuMemDirectFree(buf);
} }

View file

@ -619,7 +619,7 @@ static void CreateBoard(void)
s32 guest_status; s32 guest_status;
GWSystem.mg_next = -1; GWSystem.mg_next = -1;
if(!GWGameStat.field10E_bit5 && GWMGListGet() == 2) { if(!GWGameStat.customPackEnable && GWMGListGet() == 2) {
GWMGListSet(0); GWMGListSet(0);
} }
GWMessSpeedSet(GWMessSpeedGet()); GWMessSpeedSet(GWMessSpeedGet());

View file

@ -905,7 +905,7 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
var_r30 |= 2; var_r30 |= 2;
} }
temp_r29 = CheckPort(arg1->unk04); temp_r29 = CheckPort(arg1->unk04);
if (GWGameStat.field10E_bit4 != 0) { if (GWGameStat.veryHardUnlock != 0) {
var_r27 = 4; var_r27 = 4;
} else { } else {
var_r27 = 3; var_r27 = 3;
@ -962,7 +962,7 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk09 = 0; arg1->unk09 = 0;
} }
arg1->unk05 += var_r28; arg1->unk05 += var_r28;
if (GWGameStat.field10E_bit4 == 0 && arg1->unk05 == 4) { if (GWGameStat.veryHardUnlock == 0 && arg1->unk05 == 4) {
arg1->unk05 += var_r28; arg1->unk05 += var_r28;
} }
if (arg1->unk05 > var_r27) { if (arg1->unk05 > var_r27) {
@ -1100,7 +1100,7 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
u32 temp_r28; u32 temp_r28;
Mtx sp8; Mtx sp8;
if (arg2 == 3 && GWGameStat.field10E_bit5 == 0) { if (arg2 == 3 && GWGameStat.customPackEnable == 0) {
var_r27 = 1; var_r27 = 1;
} else { } else {
var_r27 = 2; var_r27 = 2;

View file

@ -112,9 +112,9 @@ static inline void ResetFlag(GameStat *game_stat)
game_stat->story_continue = 0; game_stat->story_continue = 0;
game_stat->party_continue = 0; game_stat->party_continue = 0;
game_stat->open_w06 = 0; game_stat->open_w06 = 0;
game_stat->field10E_bit4 = 0; game_stat->veryHardUnlock = 0;
game_stat->field10E_bit5 = 0; game_stat->customPackEnable = 0;
game_stat->field10E_bit6 = 0; game_stat->musicAllF = 0;
} }
static inline void ResetPauseConfig(GameStat *game_stat) static inline void ResetPauseConfig(GameStat *game_stat)