diff --git a/Data/Sys/GameSettings/GALE01r2.ini b/Data/Sys/GameSettings/GALE01r2.ini index 99ca42d961..8fcc1237d6 100644 --- a/Data/Sys/GameSettings/GALE01r2.ini +++ b/Data/Sys/GameSettings/GALE01r2.ini @@ -572,8 +572,8 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 80ADB61C 88850010 2C040000 4082002C 8885000F 2C040000 -40820020 80850908 -3884FF85 80E50915 +40820020 80850909 +3884FF85 80E50916 7C872050 7C041800 40800008 7C832378 907C0005 3BBD0009 @@ -1148,15 +1148,15 @@ C21A4DB4 0000001A #Online/Core/ForceEngineOnRollback.asm 7D8903A6 4E800421 7C7A1B78 80ADB61C 2C1B0000 41810014 -888500DE 2C040000 +888500DF 2C040000 4182002C 3B600001 -888500DE 988508FE -808500E0 908508FF -888500DF 98850903 -8085038C 90850904 -48000028 8885090C +888500DF 988508FF +808500E1 90850900 +888500E0 98850904 +8085038D 90850905 +48000028 8885090D 2C040000 4182001C -38800000 9885090C +38800000 9885090D 3D808001 618C95FC 7D8903A6 4E800421 7F43D378 3D808034 @@ -1173,7 +1173,7 @@ C2019614 0000000C #Online/Core/ForceInputRefetchOnAdvance.asm 40820038 3C608047 60639D64 80630000 2C030000 40820024 -80ADB61C 88650013 +80ADB61C 88650014 2C030000 41820014 3D808001 618C95FC 7D8903A6 4E800421 @@ -1201,39 +1201,39 @@ C216E748 0000009E #Online/Core/InitOnlinePlay.asm 9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -408204A8 38600B2E +408204A8 38600B2F 3D808037 618CF1E4 7D8903A6 4E800421 -7C7B1B78 38800B2E +7C7B1B78 38800B2F 3D808000 618CC160 7D8903A6 4E800421 936DB61C 38600001 907B0003 4800028D -7C6802A6 907B08FA +7C6802A6 907B08FB 3860001A 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D6 +4E800421 907B00D7 38600126 3D808037 618CF1E4 7D8903A6 -4E800421 907B00DA +4E800421 907B00DB 7C7A1B78 38800126 3D808000 618CC160 7D8903A6 4E800421 38600021 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 -933B039F 3860009E +933B03A0 3860009E 3D808037 618CF1E4 7D8903A6 4E800421 -907B03A3 3880009E +907B03A4 3880009E 3D808000 618CC160 7D8903A6 4E800421 38800000 98830000 38800007 98830001 -93790005 38600B2E +93790005 38600B2F 90790009 9359000D 38600126 90790011 -807B03A3 90790015 +807B03A4 90790015 3860009E 90790019 38600000 9079001D 38600000 3D808000 @@ -1272,7 +1272,7 @@ C216E748 0000009E #Online/Core/InitOnlinePlay.asm 2C03000F 41810010 48000010 38600001 48000008 3860000F -987B0020 38A00000 +987B0021 38A00000 3C60804C 606320BC 1C850044 7C632214 38800000 90830000 @@ -1327,7 +1327,7 @@ BE8100B0 838DB61C 2C030007 4082000C 88640001 48000008 3860FFFF 987E0010 -809C0B1E 909E0011 +809C0B1F 909E0011 3BE00000 3BBE0015 7FE3FB78 3D808003 618C1724 7D8903A6 @@ -1335,8 +1335,8 @@ BE8100B0 838DB61C 989D0000 8883008E 989D0001 80830D28 909D0002 1CBF0003 -38850B22 7C9C20AE -989D0006 38850B23 +38850B23 7C9C20AE +989D0006 38850B24 7C9C222E B09D0007 3BFF0001 3BBD0009 2C1F0004 4180FFAC @@ -1443,10 +1443,10 @@ C21A5014 0000005C #Online/Core/LoopEngineForRollback.asm BE8100B0 3D808034 618C7364 7D8903A6 4E800421 7C7D1B78 -83EDB61C 3BDF03A7 +83EDB61C 3BDF03A8 8B9E0000 3F008048 83189D60 3B18FFFF -82FF08F6 7C18B800 +82FF08F7 7C18B800 4181009C 7C78B850 38630001 8B9E0000 7F83E051 40800008 @@ -1475,14 +1475,14 @@ A0840001 7C032000 38800061 3D808000 618CC160 7D8903A6 4E800421 7C18B800 -4081001C 931F08F6 +4081001C 931F08F7 3B9C0001 2C1C0007 41800008 3B9CFFF9 -9B9E0000 8B7F08FE +9B9E0000 8B7F08FF 2C1B0001 40820134 -807F08FF 7C181800 +807F0900 7C181800 41800048 38600000 -987F00DE 987F08FE +987F00DF 987F08FF 7FA3EB78 3D808034 618C738C 7D8903A6 4E800421 BA8100B0 @@ -1524,8 +1524,8 @@ BE8100B0 3D808003 800100E4 382100E0 7C0803A6 00000000 C216D26C 00000003 #Online/Core/PauseCounter.asm -808DB61C 80640915 -38630001 90640915 +808DB61C 80640916 +38630001 90640916 387F0000 00000000 C216CD08 0000000A #Online/Core/PreventPauseStranding.asm 3C608048 80639D30 @@ -1549,191 +1549,204 @@ C2376A20 0000000C #Online/Core/SkipNewInputFetchOnRollback.asm 40820044 3C608047 60639D64 80630000 2C030000 40820030 -808DB61C 886400DE +808DB61C 886400DF 2C030000 41820020 -886400DF 2C030000 +886400E0 2C030000 40820014 3D808037 618C6A28 7D8903A6 4E800420 3861002C 60000000 00000000 -C21A4DE4 000000C4 #Online/Core/StartEngineLoop.asm +C21A4DE4 000000D1 #Online/Core/StartEngineLoop.asm 3D808037 618CE214 7D8903A6 4E800421 -48000210 4E800021 -3FA66666 C2340000 -3D8F5C29 FF0000FF +4800022C 4E800021 +41100000 C3220000 +3F333333 FF0000FF 44495343 4F4E4E45 -43544544 003FA666 -66C22C00 003D4CCC -CDFFB800 FF444553 +43544544 00411000 +00C30C00 003F0000 +00FFB800 FF444553 594E4320 44455445 -43544544 00000000 +43544544 00436400 +00434200 003EC28F +5CFFB800 FF446573 +796E6320 5269736B +00000000 7C0802A6 +90010004 9421FFB0 +BE810020 3FE08045 +63FF3080 3FA08045 +63BD5C30 38600000 +90610008 9061000C +38610008 809F00B0 +48000065 38610008 +809F00B4 48000059 +83C10008 889F008E +7FDE2278 93C10008 +3BFF0E90 7C1FE800 +4081FFD0 A0610008 +A081000A 7C632278 +5463803E C021000C +FC20081E D8210010 +A0810016 7C632378 +BA810020 80010054 +38210050 7C0803A6 +4E800020 2C040000 +4182005C 8184002C +7C6B1B78 814B0000 +808C0010 7D4A2278 +808C00B0 7D4A2278 +808C00B4 7D4A2278 +808C1830 7D4A2278 +808C0008 7D4A2278 +914B0000 C18B0004 +C02C00B0 ED8C082A +C02C00B4 ED8C082A +C02C1830 ED8C082A +D18B0004 4E800020 7C0802A6 90010004 9421FF20 BE8100B0 -3FE08045 63FF3080 -3FA08045 63BD5C30 -3BC00000 7FC3F378 -809F00B0 4800003D -809F00B4 48000035 -7C7E1B78 889F008E -7FDE2278 3BFF0E90 -7C1FE800 4081FFD8 +7C7D1B78 4BFFFE91 +7FE802A6 7FFF2214 +C03F0000 C05F0004 +7FA3EB78 389F0010 +3D80803A 618C6B98 +7D8903A6 4E800421 +7C7E1B78 7FA3EB78 +7FC4F378 C03F0008 +C05F0008 3D80803A +618C7548 7D8903A6 +4E800421 7FA3EB78 +7FC4F378 38BF000C +3D80803A 618C74F0 +7D8903A6 4E800421 7FC3F378 BA8100B0 800100E4 382100E0 7C0803A6 4E800020 -7C0802A6 90010004 -9421FFBC BE810014 -7C7E1B78 2C040000 -41820064 83E4002C -3C804120 60840000 -90810000 809F0010 -7FDE2278 C03F00B0 -C0410000 EC2100B2 -FC20081E D8210004 -80810008 7FDE2278 -C03F00B4 C0410000 -EC2100B2 FC20081E -D8210004 80810008 -7FDE2278 809F1830 -7FDE2278 809F0008 -7FDE2278 7FC3F378 -BA810014 80010048 -38210044 7C0803A6 +886DAFA0 2C030000 +40820028 818DB61C +3C608046 6063B6A0 +888C0001 98830001 +38800007 98830008 +38800037 988324D5 4E800020 7C0802A6 90010004 9421FF20 -BE8100B0 7C7D1B78 -4BFFFEAD 7FE802A6 -7FFF2214 C03F0000 -C05F0004 7FA3EB78 -389F0010 3D80803A -618C6B98 7D8903A6 -4E800421 7C7E1B78 -7FA3EB78 7FC4F378 -C03F0008 C05F0008 -3D80803A 618C7548 -7D8903A6 4E800421 -7FA3EB78 7FC4F378 -38BF000C 3D80803A -618C74F0 7D8903A6 -4E800421 7FC3F378 -BA8100B0 800100E4 -382100E0 7C0803A6 -4E800020 886DAFA0 -2C030000 40820028 -818DB61C 3C608046 -6063B6A0 888C0001 -98830001 38800007 -98830008 38800037 -988324D5 4E800020 -7C0802A6 90010004 -9421FF20 BE8100B0 -3C608048 80639D30 -5463443E 2C030208 -408203CC 3C608047 -60639D64 80630000 -2C030000 408203B8 -83CDB61C 3FE08048 -83FF9D60 839E00DA -3D808034 618C7364 -7D8903A6 4E800421 -7C791B78 887E0011 -2C030000 4082003C -887E0010 2C030000 -41820030 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -807E0911 38800000 -4BFFFEA5 38600001 -987E0011 4BFFFF31 -887E08FE 2C030000 -418200B0 887E0903 -2C030000 41820094 -807E0904 7C1F1800 -41820024 41800094 -807E039F 809E0904 -80BE03A3 3D808000 -618C560C 7D8903A6 -4E800421 3D808001 -618C9894 7D8903A6 -4E800421 3CA0804C -60A51F78 88850002 -7C832051 4080000C -88650000 7C841A14 -98850002 38600000 -98650003 3FE08048 -83FF9D60 807E038C -907E0003 38600000 -987E038B 987E039C +BE8100B0 3C608048 +80639D30 5463443E +2C030208 40820418 +3C608047 60639D64 +80630000 2C030000 +40820404 83CDB61C +3FE08048 83FF9D60 +839E00DB 3D808034 +618C7364 7D8903A6 +4E800421 7C791B78 +887E0011 2C030000 +4082003C 887E0010 +2C030000 41820030 +38600003 3D808002 +618C4030 7D8903A6 +4E800421 807E0912 +38800000 4BFFFEA5 +38600001 987E0011 +4BFFFF31 887E08FF +2C030000 418200B0 +887E0904 2C030000 +41820094 807E0905 +7C1F1800 41820024 +41800094 807E03A0 +809E0905 80BE03A4 +3D808000 618C560C +7D8903A6 4E800421 +3D808001 618C9894 +7D8903A6 4E800421 +3CA0804C 60A51F78 +88850002 7C832051 +4080000C 88650000 +7C841A14 98850002 +38600000 98650003 +3FE08048 83FF9D60 +807E038D 907E0003 +38600000 987E038C 987E039D 987E039E -987E00DF 987E0903 -3D808001 618C95FC -7D8903A6 4E800421 -807E0919 7C1F1800 -4181000C 7FE3FB78 -48000004 809E0908 -7C032000 40810008 -907E0908 807E0921 -38630001 7C63F851 -889E0925 41800020 -88DE0925 38C60001 -2C060015 41800008 -38C00000 98DE0925 -93FE0921 38A00015 -7C841A14 7CC42BD6 -7CC629D6 7CC62050 -7C853214 7CC42BD6 -7CC629D6 7C862050 -1C840018 38640926 -7FBE1A14 93FD0000 -4BFFFC59 907D0004 -3C608046 6063B6C8 -80630000 907D0008 -3B000000 7F03C378 -3D808003 618C42B4 -7D8903A6 4E800421 -1C980003 3884000D -7C7D232E 7F03C378 -3D808003 618C3BD8 -7D8903A6 4E800421 -1C980003 3884000C -7C7D21AE 3B180001 -2C180004 4180FFB8 -2C1F0000 418200CC -3BA00000 887E0012 -2C030000 408200E8 -39800000 1C6C0008 -38630002 7D7C1A14 -814B0000 807E0908 -7C0A1800 4181008C -2C0A0054 40810084 -39200000 1C690018 -38630926 7D1E1A14 -80680000 7C0A1800 -4082005C 2C1D0000 -41820010 80680000 -2C0A0003 40800008 -7D1D4378 80680004 -808B0004 7C032000 -41820040 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -807E0911 3880001D -4BFFFC4D 38600001 -987E0012 4BFFFCD9 -4800004C 39290001 -2C090015 4180FF88 -398C0001 887C0001 -7C0C1800 4180FF50 +987E039F 987E00E0 +987E0904 3D808001 +618C95FC 7D8903A6 +4E800421 807E091A +7C1F1800 4181000C +7FE3FB78 48000004 +809E0909 7C032000 +40810008 907E0909 +807E0922 38630001 +7C63F851 889E0926 +41800020 88DE0926 +38C60001 2C060015 +41800008 38C00000 +98DE0926 93FE0922 +38A00015 7C841A14 +7CC42BD6 7CC629D6 +7CC62050 7C853214 +7CC42BD6 7CC629D6 +7C862050 1C840018 +38640927 7FBE1A14 +93FD0000 4BFFFC59 +907D0004 3C608046 +6063B6C8 80630000 +907D0008 3B000000 +7F03C378 3D808003 +618C42B4 7D8903A6 +4E800421 1C980003 +3884000D 7C7D232E +7F03C378 3D808003 +618C3BD8 7D8903A6 +4E800421 1C980003 +3884000C 7C7D21AE +3B180001 2C180004 +4180FFB8 2C1F0000 +41820118 3BA00000 +887E0012 2C030000 +40820134 3B000000 +1C780008 38630002 +7EFC1A14 82D70000 +807E0909 7C161800 +418100D8 2C160054 +408100D0 3AA00000 +1C750018 38630927 +7E9E1A14 80740000 +7C161800 408200A8 +2C1D0000 41820010 +80740000 2C160003 +40800008 7E9DA378 +A0740006 A0970006 +7C630734 7C840734 +7C641850 2C03FFFF +41800010 2C030001 +41810008 48000034 +38600003 3D808002 +618C4030 7D8903A6 +4E800421 807E0912 +3880001D 4BFFFC35 +38600001 987E0012 +4BFFFCC1 48000080 +887E0013 2C030000 +40820028 A0740004 +A0970004 7C032000 +41820018 807E0912 +3880003D 4BFFFBFD +38600001 987E0013 +48000010 3AB50001 +2C150015 4180FF3C +3B180001 887C0001 +7C181800 4180FF04 2C1D0000 41820028 -807D0008 907E0B1E -387E0B22 389D000C +807D0008 907E0B1F +387E0B23 389D000C 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 887E038B +4E800421 887E038C 2C030000 4182002C -807E0908 7C1F1800 -40810020 807E039F -7FE4FB78 80BE03A3 +807E0909 7C1F1800 +40810020 807E03A0 +7FE4FB78 80BE03A4 3D808000 618C5608 7D8903A6 4E800421 887E000F 2C030001 @@ -1746,7 +1759,7 @@ BA8100B0 800100E4 93FE000B 807E000B 7C63F850 2C030007 40810018 38600001 -987E000F 807E08FA +987E000F 807E08FB 7C6903A6 4E800421 7F23CB78 3D808034 618C738C 7D8903A6 @@ -1762,14 +1775,14 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 60639D64 80630000 2C030000 40820740 83C10000 836DB61C -833B00D6 831B00DA -82FB039F 835B0003 +833B00D7 831B00DB +82FB03A0 835B0003 889B0002 1C84000C 3864002C 7FBE1A14 -887B00DE 2C030000 -41820010 887B00DF +887B00DF 2C030000 +41820010 887B00E0 2C030000 4182067C -887B0020 38800054 +887B0021 38800054 7C632050 2C1A0003 4080001C 387E002C 38800030 3D808000 @@ -1787,23 +1800,23 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 4BFFFFB9 887D000A 7C630774 2C03FFFD 40820020 7FA3EB78 -389B0014 38A0000C +389B0015 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -387B0014 7FA4EB78 +387B0015 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 386000B0 98790000 93590001 -807B0908 90790005 -819B0908 39600000 -1C6B0018 38630926 +807B0909 90790005 +819B0909 39600000 +1C6B0018 38630927 7D5B1A14 806A0000 7C036000 40820010 806A0004 90790009 48000010 396B0001 2C0B0015 4180FFD4 -887B0020 9879000D +887B0021 9879000D 3879000E 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 @@ -1815,7 +1828,7 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 38A00000 3D808000 618C55F0 7D8903A6 4E800421 38600000 -987B0013 88780000 +987B0014 88780000 2C030002 41820024 2C030003 41820010 2C030004 41820040 @@ -1827,49 +1840,49 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 7C0803A6 3D808037 618C6CEC 7D8903A6 4E800420 38600001 -987B0013 889B0021 -1C84000C 38840022 +987B0014 889B0022 +1C84000C 38840023 887B0000 1C63000C 3863002C 7C7E1A14 7C9B2214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -887B00E4 1C63000C -386300E5 889B0000 +887B00E5 1C63000C +386300E6 889B0000 1C84000C 3884002C 7C7B1A14 7C9E2214 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 887B00E4 +4E800421 887B00E5 38630001 2C03000E 41800008 38600000 -987B00E4 887B0021 -1C63000C 38630022 +987B00E5 887B0022 +1C63000C 38630023 7C7B1A14 3899000E 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 889B0020 -887B0021 38630001 +4E800421 889B0021 +887B0022 38630001 7C032000 41800008 -38600000 987B0021 -8B9B00DE 887B038B +38600000 987B0022 +8B9B00DF 887B038C 2C030000 40820018 -38600000 987B039C -987B039D 987B039E +38600000 987B039D +987B039E 987B039F 48000264 3A800000 -38D4039C 7C66D8AE +38D4039D 7C66D8AE 2C030001 4082016C 1CD40004 38C6001A 7C66C02E 1CD40004 -38C60390 7C86D82E +38C60391 7C86D82E 7EC41851 4180014C -80DB0908 7C043000 +80DB0909 7C043000 41810010 7C032000 418100AC 48000134 1C76000C 3863002A 1CD40054 7C633214 -38D4018D 7C86D8AE -1C84000C 38840193 +38D4018E 7C86D8AE +1C84000C 38840194 1CB400A8 7C842A14 7CD81A14 7CFB2214 88660000 88870000 @@ -1887,18 +1900,18 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 2C04002A 4081FFE0 7C032000 40820054 4BFFFFD4 1CD40004 -38C60390 7C66D82E +38C60391 7C66D82E 38630001 7C66D92E -38D4018D 7C66D8AE +38D4018E 7C66D8AE 38630001 2C03000E 41800008 3863FFF2 -7C66D9AE 38D4018D -7C66D8AE 38D40190 +7C66D9AE 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 4082FED0 48000044 3B800001 4800003C -38600001 987B00DE -987B00DF 935B00E0 +38600001 987B00DF +987B00E0 935B00E1 3B5A0001 935B0003 BA8100B0 800100E4 382100E0 7C0803A6 @@ -1906,46 +1919,46 @@ BA8100B0 800100E4 7D8903A6 4E800420 3A940001 2C140003 4180FE80 39600000 -3A800000 82BB0908 -38D4039C 7C86D8AE +3A800000 82BB0909 +38D4039D 7C86D8AE 2C040001 40820028 -1CD40004 38C60390 +1CD40004 38C60391 7C86D82E 2C0B0000 4182000C 7C04A800 40800008 7C952378 39600001 3A940001 2C140003 4180FFC4 -92BB038C 92BB0919 +92BB038D 92BB091A 80D80026 7C153000 -40810008 90DB0919 +40810008 90DB091A 2C1C0000 4082FF54 -3A800000 38D4039C +3A800000 38D4039D 7C86D8AE 2C040001 -40820028 38D4018D -7C66D8AE 38D40190 +40820028 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 40820010 38600000 -38D4039C 7C66D9AE +38D4039D 7C66D9AE 3A940001 2C140003 4180FFC4 3A800000 -38D4039C 7C86D8AE +38D4039D 7C86D8AE 2C040001 41820018 3A940001 2C140003 4180FFE8 38600000 -987B038B 3A800000 +987B038C 3A800000 3AA00000 3B800001 887B0000 7C151800 40820008 3AB50001 1CD40004 38C6001A 7C66C02E 7C7A1850 2C030000 408000D8 -887B0020 38800054 +887B0021 38800054 7C632050 7C1A1800 418000C0 887B000F 2C030001 418200B4 -3B800000 38D40190 +3B800000 38D40191 7EC6D8AE 1C76000C -38630193 1CB400A8 +38630194 1CB400A8 7C632A14 1CD40054 38C6002A 7C7B1A14 7C983214 38A0000C @@ -1953,18 +1966,18 @@ BA8100B0 800100E4 7D8903A6 4E800421 38760001 2C03000E 41800008 3863FFF2 -38D40190 7C66D9AE -38D4018D 7C66D8AE -38D40190 7C86D8AE -38D4039C 7C66D8AE +38D40191 7C66D9AE +38D4018E 7C66D8AE +38D40191 7C86D8AE +38D4039D 7C66D8AE 2C030001 4182003C -1CD40004 38C60390 +1CD40004 38C60391 7F46D92E 38600001 -38D4039C 7C66D9AE -38D4018D 7EC6D9AE -887B038B 2C030001 -41820010 935B038C -38600001 987B038B +38D4039D 7C66D9AE +38D4018E 7EC6D9AE +887B038C 2C030001 +41820010 935B038D +38600001 987B038C 38600000 1C63000C 38A3002A 1CD40054 7CA53214 1C75000C @@ -1975,17 +1988,17 @@ BA8100B0 800100E4 3A940001 3AB50001 2C140003 4180FEC4 2C1C0000 41820008 -935B0919 48000080 -807B00E0 7C1A1800 +935B091A 48000080 +807B00E1 7C1A1800 40810024 BA8100B0 800100E4 382100E0 7C0803A6 3D808037 618C6CEC 7D8903A6 -4E800420 807B00E0 +4E800420 807B00E1 7C7A1850 38630001 -889B00E4 7C632051 +889B00E5 7C632051 40800008 3863000E -1C63000C 388300E5 +1C63000C 388300E6 887B0000 1C63000C 3863002C 7C7E1A14 7C9B2214 38A0000C @@ -2141,12 +2154,12 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 3C608047 60639D64 80630000 2C030000 40820044 80ADB61C -38600000 98650013 +38600000 98650014 3C608037 60635E00 2C000003 40820028 -886500DE 2C030000 +886500DF 2C030000 4182001C 38600001 -9865090C 3D808001 +9865090D 3D808001 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 @@ -2165,11 +2178,11 @@ C238D224 00000018 #Online/Core/Sound/AssignSoundInstanceId.asm 40820090 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BDF03A7 8B9E0000 +3BDF03A8 8B9E0000 3C608048 80639D60 -809F08F6 7C032000 +809F08F7 7C032000 41810028 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -2187,12 +2200,12 @@ C2088224 0000001D #Online/Core/Sound/NoDestroyVoice.asm 408200CC 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BBF03A7 57DE043E +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F08F6 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2217,12 +2230,12 @@ C20882B0 0000001D #Online/Core/Sound/NoDestroyVoice2.asm 408200CC 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BBF03A7 57DE043E +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F08F6 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2249,13 +2262,13 @@ C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm 2C030000 40820120 7C0802A6 90010004 9421FF20 BE8100B0 -83EDB61C 3BDF03A7 +83EDB61C 3BDF03A8 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 80639D60 -809F08F6 7C032000 +809F08F7 7C032000 41810070 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -4013,7 +4026,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 5463443E 2C030208 408205C8 480000AC 4E800021 00000000 -3DCCCCCD 3F800000 +3DCCCCCD 3DCCCCCD 43870000 434F0000 3EA8F5C3 3EA8F5C3 000000FF 3F1EB852 @@ -4063,7 +4076,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 3D80803A 618C611C 7D8903A6 4E800421 7C7F1B78 83CDB61C -93FE090D 4BFFFE65 +93FE090E 4BFFFE65 7F8802A6 38600002 7FE4FB78 3D80803A 618C6754 7D8903A6 @@ -4072,7 +4085,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 38800001 989D004A C03C0000 D03D0008 C03C0008 D03D0024 -D03D0028 93BE0911 +D03D0028 93BE0912 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7A1B78 @@ -4086,7 +4099,7 @@ D03D0008 C03C0004 D03D0024 D03D0028 C03C000C C05C0010 7FA3EB78 389C004C -88BE0020 3D80803A +88BE0021 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 38800000 C03C0014 diff --git a/Data/Sys/GameSettings/GALJ01r2.ini b/Data/Sys/GameSettings/GALJ01r2.ini index 4cca92dba5..20c6419904 100644 --- a/Data/Sys/GameSettings/GALJ01r2.ini +++ b/Data/Sys/GameSettings/GALJ01r2.ini @@ -572,8 +572,8 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 80ADB61C 88850010 2C040000 4082002C 8885000F 2C040000 -40820020 80850908 -3884FF85 80E50915 +40820020 80850909 +3884FF85 80E50916 7C872050 7C041800 40800008 7C832378 907C0005 3BBD0009 @@ -1148,15 +1148,15 @@ C21A4DB4 0000001A #Online/Core/ForceEngineOnRollback.asm 7D8903A6 4E800421 7C7A1B78 80ADB61C 2C1B0000 41810014 -888500DE 2C040000 +888500DF 2C040000 4182002C 3B600001 -888500DE 988508FE -808500E0 908508FF -888500DF 98850903 -8085038C 90850904 -48000028 8885090C +888500DF 988508FF +808500E1 90850900 +888500E0 98850904 +8085038D 90850905 +48000028 8885090D 2C040000 4182001C -38800000 9885090C +38800000 9885090D 3D808001 618C95FC 7D8903A6 4E800421 7F43D378 3D808034 @@ -1173,7 +1173,7 @@ C2019614 0000000C #Online/Core/ForceInputRefetchOnAdvance.asm 40820038 3C608047 60639D64 80630000 2C030000 40820024 -80ADB61C 88650013 +80ADB61C 88650014 2C030000 41820014 3D808001 618C95FC 7D8903A6 4E800421 @@ -1201,39 +1201,39 @@ C216E748 0000009E #Online/Core/InitOnlinePlay.asm 9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -408204A8 38600B2E +408204A8 38600B2F 3D808037 618CF1E4 7D8903A6 4E800421 -7C7B1B78 38800B2E +7C7B1B78 38800B2F 3D808000 618CC160 7D8903A6 4E800421 936DB61C 38600001 907B0003 4800028D -7C6802A6 907B08FA +7C6802A6 907B08FB 3860001A 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D6 +4E800421 907B00D7 38600126 3D808037 618CF1E4 7D8903A6 -4E800421 907B00DA +4E800421 907B00DB 7C7A1B78 38800126 3D808000 618CC160 7D8903A6 4E800421 38600021 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 -933B039F 3860009E +933B03A0 3860009E 3D808037 618CF1E4 7D8903A6 4E800421 -907B03A3 3880009E +907B03A4 3880009E 3D808000 618CC160 7D8903A6 4E800421 38800000 98830000 38800007 98830001 -93790005 38600B2E +93790005 38600B2F 90790009 9359000D 38600126 90790011 -807B03A3 90790015 +807B03A4 90790015 3860009E 90790019 38600000 9079001D 38600000 3D808000 @@ -1272,7 +1272,7 @@ C216E748 0000009E #Online/Core/InitOnlinePlay.asm 2C03000F 41810010 48000010 38600001 48000008 3860000F -987B0020 38A00000 +987B0021 38A00000 3C60804C 606320BC 1C850044 7C632214 38800000 90830000 @@ -1327,7 +1327,7 @@ BE8100B0 838DB61C 2C030007 4082000C 88640001 48000008 3860FFFF 987E0010 -809C0B1E 909E0011 +809C0B1F 909E0011 3BE00000 3BBE0015 7FE3FB78 3D808003 618C1724 7D8903A6 @@ -1335,8 +1335,8 @@ BE8100B0 838DB61C 989D0000 8883008E 989D0001 80830D28 909D0002 1CBF0003 -38850B22 7C9C20AE -989D0006 38850B23 +38850B23 7C9C20AE +989D0006 38850B24 7C9C222E B09D0007 3BFF0001 3BBD0009 2C1F0004 4180FFAC @@ -1443,10 +1443,10 @@ C21A5014 0000005C #Online/Core/LoopEngineForRollback.asm BE8100B0 3D808034 618C7364 7D8903A6 4E800421 7C7D1B78 -83EDB61C 3BDF03A7 +83EDB61C 3BDF03A8 8B9E0000 3F008048 83189D60 3B18FFFF -82FF08F6 7C18B800 +82FF08F7 7C18B800 4181009C 7C78B850 38630001 8B9E0000 7F83E051 40800008 @@ -1475,14 +1475,14 @@ A0840001 7C032000 38800061 3D808000 618CC160 7D8903A6 4E800421 7C18B800 -4081001C 931F08F6 +4081001C 931F08F7 3B9C0001 2C1C0007 41800008 3B9CFFF9 -9B9E0000 8B7F08FE +9B9E0000 8B7F08FF 2C1B0001 40820134 -807F08FF 7C181800 +807F0900 7C181800 41800048 38600000 -987F00DE 987F08FE +987F00DF 987F08FF 7FA3EB78 3D808034 618C738C 7D8903A6 4E800421 BA8100B0 @@ -1524,8 +1524,8 @@ BE8100B0 3D808003 800100E4 382100E0 7C0803A6 00000000 C216D26C 00000003 #Online/Core/PauseCounter.asm -808DB61C 80640915 -38630001 90640915 +808DB61C 80640916 +38630001 90640916 387F0000 00000000 C216CD08 0000000A #Online/Core/PreventPauseStranding.asm 3C608048 80639D30 @@ -1549,191 +1549,204 @@ C2376A20 0000000C #Online/Core/SkipNewInputFetchOnRollback.asm 40820044 3C608047 60639D64 80630000 2C030000 40820030 -808DB61C 886400DE +808DB61C 886400DF 2C030000 41820020 -886400DF 2C030000 +886400E0 2C030000 40820014 3D808037 618C6A28 7D8903A6 4E800420 3861002C 60000000 00000000 -C21A4DE4 000000C4 #Online/Core/StartEngineLoop.asm +C21A4DE4 000000D1 #Online/Core/StartEngineLoop.asm 3D808037 618CE214 7D8903A6 4E800421 -48000210 4E800021 -3FA66666 C2340000 -3D8F5C29 FF0000FF +4800022C 4E800021 +41100000 C3220000 +3F333333 FF0000FF 44495343 4F4E4E45 -43544544 003FA666 -66C22C00 003D4CCC -CDFFB800 FF444553 +43544544 00411000 +00C30C00 003F0000 +00FFB800 FF444553 594E4320 44455445 -43544544 00000000 +43544544 00436400 +00434200 003EC28F +5CFFB800 FF446573 +796E6320 5269736B +00000000 7C0802A6 +90010004 9421FFB0 +BE810020 3FE08045 +63FF3080 3FA08045 +63BD5C30 38600000 +90610008 9061000C +38610008 809F00B0 +48000065 38610008 +809F00B4 48000059 +83C10008 889F008E +7FDE2278 93C10008 +3BFF0E90 7C1FE800 +4081FFD0 A0610008 +A081000A 7C632278 +5463803E C021000C +FC20081E D8210010 +A0810016 7C632378 +BA810020 80010054 +38210050 7C0803A6 +4E800020 2C040000 +4182005C 8184002C +7C6B1B78 814B0000 +808C0010 7D4A2278 +808C00B0 7D4A2278 +808C00B4 7D4A2278 +808C1830 7D4A2278 +808C0008 7D4A2278 +914B0000 C18B0004 +C02C00B0 ED8C082A +C02C00B4 ED8C082A +C02C1830 ED8C082A +D18B0004 4E800020 7C0802A6 90010004 9421FF20 BE8100B0 -3FE08045 63FF3080 -3FA08045 63BD5C30 -3BC00000 7FC3F378 -809F00B0 4800003D -809F00B4 48000035 -7C7E1B78 889F008E -7FDE2278 3BFF0E90 -7C1FE800 4081FFD8 +7C7D1B78 4BFFFE91 +7FE802A6 7FFF2214 +C03F0000 C05F0004 +7FA3EB78 389F0010 +3D80803A 618C6B98 +7D8903A6 4E800421 +7C7E1B78 7FA3EB78 +7FC4F378 C03F0008 +C05F0008 3D80803A +618C7548 7D8903A6 +4E800421 7FA3EB78 +7FC4F378 38BF000C +3D80803A 618C74F0 +7D8903A6 4E800421 7FC3F378 BA8100B0 800100E4 382100E0 7C0803A6 4E800020 -7C0802A6 90010004 -9421FFBC BE810014 -7C7E1B78 2C040000 -41820064 83E4002C -3C804120 60840000 -90810000 809F0010 -7FDE2278 C03F00B0 -C0410000 EC2100B2 -FC20081E D8210004 -80810008 7FDE2278 -C03F00B4 C0410000 -EC2100B2 FC20081E -D8210004 80810008 -7FDE2278 809F1830 -7FDE2278 809F0008 -7FDE2278 7FC3F378 -BA810014 80010048 -38210044 7C0803A6 +886DAFA0 2C030000 +40820028 818DB61C +3C608046 6063B6A0 +888C0001 98830001 +38800007 98830008 +38800037 988324D5 4E800020 7C0802A6 90010004 9421FF20 -BE8100B0 7C7D1B78 -4BFFFEAD 7FE802A6 -7FFF2214 C03F0000 -C05F0004 7FA3EB78 -389F0010 3D80803A -618C6B98 7D8903A6 -4E800421 7C7E1B78 -7FA3EB78 7FC4F378 -C03F0008 C05F0008 -3D80803A 618C7548 -7D8903A6 4E800421 -7FA3EB78 7FC4F378 -38BF000C 3D80803A -618C74F0 7D8903A6 -4E800421 7FC3F378 -BA8100B0 800100E4 -382100E0 7C0803A6 -4E800020 886DAFA0 -2C030000 40820028 -818DB61C 3C608046 -6063B6A0 888C0001 -98830001 38800007 -98830008 38800037 -988324D5 4E800020 -7C0802A6 90010004 -9421FF20 BE8100B0 -3C608048 80639D30 -5463443E 2C030208 -408203CC 3C608047 -60639D64 80630000 -2C030000 408203B8 -83CDB61C 3FE08048 -83FF9D60 839E00DA -3D808034 618C7364 -7D8903A6 4E800421 -7C791B78 887E0011 -2C030000 4082003C -887E0010 2C030000 -41820030 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -807E0911 38800000 -4BFFFEA5 38600001 -987E0011 4BFFFF31 -887E08FE 2C030000 -418200B0 887E0903 -2C030000 41820094 -807E0904 7C1F1800 -41820024 41800094 -807E039F 809E0904 -80BE03A3 3D808000 -618C560C 7D8903A6 -4E800421 3D808001 -618C9894 7D8903A6 -4E800421 3CA0804C -60A51F78 88850002 -7C832051 4080000C -88650000 7C841A14 -98850002 38600000 -98650003 3FE08048 -83FF9D60 807E038C -907E0003 38600000 -987E038B 987E039C +BE8100B0 3C608048 +80639D30 5463443E +2C030208 40820418 +3C608047 60639D64 +80630000 2C030000 +40820404 83CDB61C +3FE08048 83FF9D60 +839E00DB 3D808034 +618C7364 7D8903A6 +4E800421 7C791B78 +887E0011 2C030000 +4082003C 887E0010 +2C030000 41820030 +38600003 3D808002 +618C4030 7D8903A6 +4E800421 807E0912 +38800000 4BFFFEA5 +38600001 987E0011 +4BFFFF31 887E08FF +2C030000 418200B0 +887E0904 2C030000 +41820094 807E0905 +7C1F1800 41820024 +41800094 807E03A0 +809E0905 80BE03A4 +3D808000 618C560C +7D8903A6 4E800421 +3D808001 618C9894 +7D8903A6 4E800421 +3CA0804C 60A51F78 +88850002 7C832051 +4080000C 88650000 +7C841A14 98850002 +38600000 98650003 +3FE08048 83FF9D60 +807E038D 907E0003 +38600000 987E038C 987E039D 987E039E -987E00DF 987E0903 -3D808001 618C95FC -7D8903A6 4E800421 -807E0919 7C1F1800 -4181000C 7FE3FB78 -48000004 809E0908 -7C032000 40810008 -907E0908 807E0921 -38630001 7C63F851 -889E0925 41800020 -88DE0925 38C60001 -2C060015 41800008 -38C00000 98DE0925 -93FE0921 38A00015 -7C841A14 7CC42BD6 -7CC629D6 7CC62050 -7C853214 7CC42BD6 -7CC629D6 7C862050 -1C840018 38640926 -7FBE1A14 93FD0000 -4BFFFC59 907D0004 -3C608046 6063B6C8 -80630000 907D0008 -3B000000 7F03C378 -3D808003 618C42B4 -7D8903A6 4E800421 -1C980003 3884000D -7C7D232E 7F03C378 -3D808003 618C3BD8 -7D8903A6 4E800421 -1C980003 3884000C -7C7D21AE 3B180001 -2C180004 4180FFB8 -2C1F0000 418200CC -3BA00000 887E0012 -2C030000 408200E8 -39800000 1C6C0008 -38630002 7D7C1A14 -814B0000 807E0908 -7C0A1800 4181008C -2C0A0054 40810084 -39200000 1C690018 -38630926 7D1E1A14 -80680000 7C0A1800 -4082005C 2C1D0000 -41820010 80680000 -2C0A0003 40800008 -7D1D4378 80680004 -808B0004 7C032000 -41820040 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -807E0911 3880001D -4BFFFC4D 38600001 -987E0012 4BFFFCD9 -4800004C 39290001 -2C090015 4180FF88 -398C0001 887C0001 -7C0C1800 4180FF50 +987E039F 987E00E0 +987E0904 3D808001 +618C95FC 7D8903A6 +4E800421 807E091A +7C1F1800 4181000C +7FE3FB78 48000004 +809E0909 7C032000 +40810008 907E0909 +807E0922 38630001 +7C63F851 889E0926 +41800020 88DE0926 +38C60001 2C060015 +41800008 38C00000 +98DE0926 93FE0922 +38A00015 7C841A14 +7CC42BD6 7CC629D6 +7CC62050 7C853214 +7CC42BD6 7CC629D6 +7C862050 1C840018 +38640927 7FBE1A14 +93FD0000 4BFFFC59 +907D0004 3C608046 +6063B6C8 80630000 +907D0008 3B000000 +7F03C378 3D808003 +618C42B4 7D8903A6 +4E800421 1C980003 +3884000D 7C7D232E +7F03C378 3D808003 +618C3BD8 7D8903A6 +4E800421 1C980003 +3884000C 7C7D21AE +3B180001 2C180004 +4180FFB8 2C1F0000 +41820118 3BA00000 +887E0012 2C030000 +40820134 3B000000 +1C780008 38630002 +7EFC1A14 82D70000 +807E0909 7C161800 +418100D8 2C160054 +408100D0 3AA00000 +1C750018 38630927 +7E9E1A14 80740000 +7C161800 408200A8 +2C1D0000 41820010 +80740000 2C160003 +40800008 7E9DA378 +A0740006 A0970006 +7C630734 7C840734 +7C641850 2C03FFFF +41800010 2C030001 +41810008 48000034 +38600003 3D808002 +618C4030 7D8903A6 +4E800421 807E0912 +3880001D 4BFFFC35 +38600001 987E0012 +4BFFFCC1 48000080 +887E0013 2C030000 +40820028 A0740004 +A0970004 7C032000 +41820018 807E0912 +3880003D 4BFFFBFD +38600001 987E0013 +48000010 3AB50001 +2C150015 4180FF3C +3B180001 887C0001 +7C181800 4180FF04 2C1D0000 41820028 -807D0008 907E0B1E -387E0B22 389D000C +807D0008 907E0B1F +387E0B23 389D000C 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 887E038B +4E800421 887E038C 2C030000 4182002C -807E0908 7C1F1800 -40810020 807E039F -7FE4FB78 80BE03A3 +807E0909 7C1F1800 +40810020 807E03A0 +7FE4FB78 80BE03A4 3D808000 618C5608 7D8903A6 4E800421 887E000F 2C030001 @@ -1746,7 +1759,7 @@ BA8100B0 800100E4 93FE000B 807E000B 7C63F850 2C030007 40810018 38600001 -987E000F 807E08FA +987E000F 807E08FB 7C6903A6 4E800421 7F23CB78 3D808034 618C738C 7D8903A6 @@ -1762,14 +1775,14 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 60639D64 80630000 2C030000 40820740 83C10000 836DB61C -833B00D6 831B00DA -82FB039F 835B0003 +833B00D7 831B00DB +82FB03A0 835B0003 889B0002 1C84000C 3864002C 7FBE1A14 -887B00DE 2C030000 -41820010 887B00DF +887B00DF 2C030000 +41820010 887B00E0 2C030000 4182067C -887B0020 38800054 +887B0021 38800054 7C632050 2C1A0003 4080001C 387E002C 38800030 3D808000 @@ -1787,23 +1800,23 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 4BFFFFB9 887D000A 7C630774 2C03FFFD 40820020 7FA3EB78 -389B0014 38A0000C +389B0015 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -387B0014 7FA4EB78 +387B0015 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 386000B0 98790000 93590001 -807B0908 90790005 -819B0908 39600000 -1C6B0018 38630926 +807B0909 90790005 +819B0909 39600000 +1C6B0018 38630927 7D5B1A14 806A0000 7C036000 40820010 806A0004 90790009 48000010 396B0001 2C0B0015 4180FFD4 -887B0020 9879000D +887B0021 9879000D 3879000E 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 @@ -1815,7 +1828,7 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 38A00000 3D808000 618C55F0 7D8903A6 4E800421 38600000 -987B0013 88780000 +987B0014 88780000 2C030002 41820024 2C030003 41820010 2C030004 41820040 @@ -1827,49 +1840,49 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 7C0803A6 3D808037 618C6CEC 7D8903A6 4E800420 38600001 -987B0013 889B0021 -1C84000C 38840022 +987B0014 889B0022 +1C84000C 38840023 887B0000 1C63000C 3863002C 7C7E1A14 7C9B2214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -887B00E4 1C63000C -386300E5 889B0000 +887B00E5 1C63000C +386300E6 889B0000 1C84000C 3884002C 7C7B1A14 7C9E2214 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 887B00E4 +4E800421 887B00E5 38630001 2C03000E 41800008 38600000 -987B00E4 887B0021 -1C63000C 38630022 +987B00E5 887B0022 +1C63000C 38630023 7C7B1A14 3899000E 38A0000C 3D808000 618C31F4 7D8903A6 -4E800421 889B0020 -887B0021 38630001 +4E800421 889B0021 +887B0022 38630001 7C032000 41800008 -38600000 987B0021 -8B9B00DE 887B038B +38600000 987B0022 +8B9B00DF 887B038C 2C030000 40820018 -38600000 987B039C -987B039D 987B039E +38600000 987B039D +987B039E 987B039F 48000264 3A800000 -38D4039C 7C66D8AE +38D4039D 7C66D8AE 2C030001 4082016C 1CD40004 38C6001A 7C66C02E 1CD40004 -38C60390 7C86D82E +38C60391 7C86D82E 7EC41851 4180014C -80DB0908 7C043000 +80DB0909 7C043000 41810010 7C032000 418100AC 48000134 1C76000C 3863002A 1CD40054 7C633214 -38D4018D 7C86D8AE -1C84000C 38840193 +38D4018E 7C86D8AE +1C84000C 38840194 1CB400A8 7C842A14 7CD81A14 7CFB2214 88660000 88870000 @@ -1887,18 +1900,18 @@ C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 2C04002A 4081FFE0 7C032000 40820054 4BFFFFD4 1CD40004 -38C60390 7C66D82E +38C60391 7C66D82E 38630001 7C66D92E -38D4018D 7C66D8AE +38D4018E 7C66D8AE 38630001 2C03000E 41800008 3863FFF2 -7C66D9AE 38D4018D -7C66D8AE 38D40190 +7C66D9AE 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 4082FED0 48000044 3B800001 4800003C -38600001 987B00DE -987B00DF 935B00E0 +38600001 987B00DF +987B00E0 935B00E1 3B5A0001 935B0003 BA8100B0 800100E4 382100E0 7C0803A6 @@ -1906,46 +1919,46 @@ BA8100B0 800100E4 7D8903A6 4E800420 3A940001 2C140003 4180FE80 39600000 -3A800000 82BB0908 -38D4039C 7C86D8AE +3A800000 82BB0909 +38D4039D 7C86D8AE 2C040001 40820028 -1CD40004 38C60390 +1CD40004 38C60391 7C86D82E 2C0B0000 4182000C 7C04A800 40800008 7C952378 39600001 3A940001 2C140003 4180FFC4 -92BB038C 92BB0919 +92BB038D 92BB091A 80D80026 7C153000 -40810008 90DB0919 +40810008 90DB091A 2C1C0000 4082FF54 -3A800000 38D4039C +3A800000 38D4039D 7C86D8AE 2C040001 -40820028 38D4018D -7C66D8AE 38D40190 +40820028 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 40820010 38600000 -38D4039C 7C66D9AE +38D4039D 7C66D9AE 3A940001 2C140003 4180FFC4 3A800000 -38D4039C 7C86D8AE +38D4039D 7C86D8AE 2C040001 41820018 3A940001 2C140003 4180FFE8 38600000 -987B038B 3A800000 +987B038C 3A800000 3AA00000 3B800001 887B0000 7C151800 40820008 3AB50001 1CD40004 38C6001A 7C66C02E 7C7A1850 2C030000 408000D8 -887B0020 38800054 +887B0021 38800054 7C632050 7C1A1800 418000C0 887B000F 2C030001 418200B4 -3B800000 38D40190 +3B800000 38D40191 7EC6D8AE 1C76000C -38630193 1CB400A8 +38630194 1CB400A8 7C632A14 1CD40054 38C6002A 7C7B1A14 7C983214 38A0000C @@ -1953,18 +1966,18 @@ BA8100B0 800100E4 7D8903A6 4E800421 38760001 2C03000E 41800008 3863FFF2 -38D40190 7C66D9AE -38D4018D 7C66D8AE -38D40190 7C86D8AE -38D4039C 7C66D8AE +38D40191 7C66D9AE +38D4018E 7C66D8AE +38D40191 7C86D8AE +38D4039D 7C66D8AE 2C030001 4182003C -1CD40004 38C60390 +1CD40004 38C60391 7F46D92E 38600001 -38D4039C 7C66D9AE -38D4018D 7EC6D9AE -887B038B 2C030001 -41820010 935B038C -38600001 987B038B +38D4039D 7C66D9AE +38D4018E 7EC6D9AE +887B038C 2C030001 +41820010 935B038D +38600001 987B038C 38600000 1C63000C 38A3002A 1CD40054 7CA53214 1C75000C @@ -1975,17 +1988,17 @@ BA8100B0 800100E4 3A940001 3AB50001 2C140003 4180FEC4 2C1C0000 41820008 -935B0919 48000080 -807B00E0 7C1A1800 +935B091A 48000080 +807B00E1 7C1A1800 40810024 BA8100B0 800100E4 382100E0 7C0803A6 3D808037 618C6CEC 7D8903A6 -4E800420 807B00E0 +4E800420 807B00E1 7C7A1850 38630001 -889B00E4 7C632051 +889B00E5 7C632051 40800008 3863000E -1C63000C 388300E5 +1C63000C 388300E6 887B0000 1C63000C 3863002C 7C7E1A14 7C9B2214 38A0000C @@ -2141,12 +2154,12 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 3C608047 60639D64 80630000 2C030000 40820044 80ADB61C -38600000 98650013 +38600000 98650014 3C608037 60635E00 2C000003 40820028 -886500DE 2C030000 +886500DF 2C030000 4182001C 38600001 -9865090C 3D808001 +9865090D 3D808001 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 @@ -2165,11 +2178,11 @@ C238D224 00000018 #Online/Core/Sound/AssignSoundInstanceId.asm 40820090 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BDF03A7 8B9E0000 +3BDF03A8 8B9E0000 3C608048 80639D60 -809F08F6 7C032000 +809F08F7 7C032000 41810028 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -2187,12 +2200,12 @@ C2088224 0000001D #Online/Core/Sound/NoDestroyVoice.asm 408200CC 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BBF03A7 57DE043E +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F08F6 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2217,12 +2230,12 @@ C20882B0 0000001D #Online/Core/Sound/NoDestroyVoice2.asm 408200CC 7C0802A6 90010004 9421FF20 BE8100B0 83EDB61C -3BBF03A7 57DE043E +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F08F6 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2249,13 +2262,13 @@ C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm 2C030000 40820120 7C0802A6 90010004 9421FF20 BE8100B0 -83EDB61C 3BDF03A7 +83EDB61C 3BDF03A8 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 80639D60 -809F08F6 7C032000 +809F08F7 7C032000 41810070 3C608048 -80639D60 809F08F6 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -4013,7 +4026,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 5463443E 2C030208 408205C8 480000AC 4E800021 00000000 -3DCCCCCD 3F800000 +3DCCCCCD 3DCCCCCD 43870000 434F0000 3EA8F5C3 3EA8F5C3 000000FF 3F1EB852 @@ -4063,7 +4076,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 3D80803A 618C611C 7D8903A6 4E800421 7C7F1B78 83CDB61C -93FE090D 4BFFFE65 +93FE090E 4BFFFE65 7F8802A6 38600002 7FE4FB78 3D80803A 618C6754 7D8903A6 @@ -4072,7 +4085,7 @@ C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 38800001 989D004A C03C0000 D03D0008 C03C0008 D03D0024 -D03D0028 93BE0911 +D03D0028 93BE0912 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7A1B78 @@ -4086,7 +4099,7 @@ D03D0008 C03C0004 D03D0024 D03D0028 C03C000C C05C0010 7FA3EB78 389C004C -88BE0020 3D80803A +88BE0021 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 38800000 C03C0014 diff --git a/Source/Core/Core/HW/EXI_DeviceSlippi.cpp b/Source/Core/Core/HW/EXI_DeviceSlippi.cpp index 63b16f4789..27dc9b106f 100644 --- a/Source/Core/Core/HW/EXI_DeviceSlippi.cpp +++ b/Source/Core/Core/HW/EXI_DeviceSlippi.cpp @@ -3029,6 +3029,8 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) m_slippiserver->startGame(); m_slippiserver->write(&memPtr[0], receiveCommandsLen + 1); + + gameReporter->PushReplayData(&memPtr[0], receiveCommandsLen + 1, "create"); } if (byte == CMD_MENU_FRAME) @@ -3061,6 +3063,7 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, "close"); m_slippiserver->write(&memPtr[bufLoc], payloadLen + 1); m_slippiserver->endGame(); + gameReporter->PushReplayData(&memPtr[bufLoc], payloadLen + 1, "close"); break; case CMD_PREPARE_REPLAY: // log.open("log.txt"); @@ -3073,6 +3076,7 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) g_needInputForFrame = true; writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, ""); m_slippiserver->write(&memPtr[bufLoc], payloadLen + 1); + gameReporter->PushReplayData(&memPtr[bufLoc], payloadLen + 1, ""); break; case CMD_IS_STOCK_STEAL: prepareIsStockSteal(&memPtr[bufLoc + 1]); @@ -3165,6 +3169,7 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) default: writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, ""); m_slippiserver->write(&memPtr[bufLoc], payloadLen + 1); + gameReporter->PushReplayData(&memPtr[bufLoc], payloadLen + 1, ""); break; } diff --git a/Source/Core/Core/Slippi/SlippiGameReporter.cpp b/Source/Core/Core/Slippi/SlippiGameReporter.cpp index d47c4957f9..ab836b9e89 100644 --- a/Source/Core/Core/Slippi/SlippiGameReporter.cpp +++ b/Source/Core/Core/Slippi/SlippiGameReporter.cpp @@ -2,6 +2,7 @@ #include "Common/CommonPaths.h" #include "Common/FileUtil.h" +#include "Common/MD5.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" #include "Common/StringUtil.h" @@ -13,13 +14,15 @@ #include #include +#include +#include #include using json = nlohmann::json; -static size_t receive(char *ptr, size_t size, size_t nmemb, void *rcvBuf) +static size_t curl_receive(char *ptr, size_t size, size_t nmemb, void *rcvBuf) { size_t len = size * nmemb; - INFO_LOG(SLIPPI_ONLINE, "[User] Received data: %d", len); + INFO_LOG(SLIPPI_ONLINE, "[GameReport] Received data: %d", len); std::string *buf = (std::string *)rcvBuf; @@ -28,12 +31,32 @@ static size_t receive(char *ptr, size_t size, size_t nmemb, void *rcvBuf) return len; } +static size_t curl_send(char *ptr, size_t size, size_t nmemb, void *userdata) +{ + std::vector *buf = (std::vector *)userdata; + + INFO_LOG(SLIPPI_ONLINE, "[GameReport] Sending data. Size: %d, Nmemb: %d. Buffer length: %d", size, nmemb, buf->size()); + + size_t copy_size = size * nmemb; + if (copy_size > buf->size()) + copy_size = buf->size(); + + if (copy_size == 0) + return 0; + + // This method of reading from a vector seems so jank, im sure there's better ways to do this + memcpy(ptr, &buf->at(0), copy_size); + buf->erase(buf->begin(), buf->begin() + copy_size); + + return copy_size; +} + SlippiGameReporter::SlippiGameReporter(SlippiUser *user) { CURL *curl = curl_easy_init(); if (curl) { - // curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &receive); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_receive); curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 10000); // Set up HTTP Headers @@ -48,8 +71,42 @@ SlippiGameReporter::SlippiGameReporter(SlippiUser *user) m_curl = curl; } + CURL *curl_upload = curl_easy_init(); + if (curl_upload) + { + curl_easy_setopt(curl_upload, CURLOPT_READFUNCTION, &curl_send); + curl_easy_setopt(curl_upload, CURLOPT_UPLOAD, 1L); + curl_easy_setopt(curl_upload, CURLOPT_WRITEFUNCTION, &curl_receive); + curl_easy_setopt(curl_upload, CURLOPT_TIMEOUT_MS, 10000); + + // Set up HTTP Headers + m_curl_upload_headers = curl_slist_append(m_curl_upload_headers, "Content-Type: application/octet-stream"); + curl_slist_append(m_curl_upload_headers, "Content-Encoding: gzip"); + curl_slist_append(m_curl_upload_headers, "X-Goog-Content-Length-Range: 0,10000000"); + curl_easy_setopt(curl_upload, CURLOPT_HTTPHEADER, m_curl_upload_headers); + +#ifdef _WIN32 + // ALPN support is enabled by default but requires Windows >= 8.1. + curl_easy_setopt(curl_upload, CURLOPT_SSL_ENABLE_ALPN, false); +#endif + + m_curl_upload = curl_upload; + } + m_user = user; + // TODO: For mainline port, ISO file path can't be fetched this way. Look at the following: + // https://github.com/dolphin-emu/dolphin/blob/7f450f1d7e7d37bd2300f3a2134cb443d07251f9/Source/Core/Core/Movie.cpp#L246-L249 + std::string file = SConfig::GetInstance().m_strFilename; + m_md5_thread = std::thread([this, file]() { + this->m_iso_hash = MD5::MD5Sum(file, [&](int progress) { + return true; + }); + + INFO_LOG(SLIPPI_ONLINE, "Md5 Hash: %s", this->m_iso_hash.c_str()); + }); + m_md5_thread.detach(); + runThread = true; reportingThread = std::thread(&SlippiGameReporter::ReportThreadHandler, this); } @@ -66,6 +123,30 @@ SlippiGameReporter::~SlippiGameReporter() curl_slist_free_all(m_curlHeaderList); curl_easy_cleanup(m_curl); } + + if (m_curl_upload) + { + curl_slist_free_all(m_curl_upload_headers); + curl_easy_cleanup(m_curl_upload); + } +} + +void SlippiGameReporter::PushReplayData(u8 *data, u32 length, std::string action) { + if (action == "create") + { + m_replay_write_idx += 1; + } + + // This makes a vector at this index if it doesn't exist + auto &v = m_replay_data[m_replay_write_idx]; + + // Insert new data into vector + v.insert(v.end(), data, data + length); + + if (action == "close") + { + m_replay_last_completed_idx = m_replay_write_idx; + } } void SlippiGameReporter::StartReport(GameReport report) @@ -88,6 +169,8 @@ void SlippiGameReporter::ReportThreadHandler() // Wait for report to come in cv.wait(lck); + auto queueHasData = !gameReportQueue.Empty(); + // Process all messages while (!gameReportQueue.Empty()) { @@ -95,12 +178,6 @@ void SlippiGameReporter::ReportThreadHandler() gameReportQueue.Pop(); auto ranked = SlippiMatchmaking::OnlinePlayMode::RANKED; - auto unranked = SlippiMatchmaking::OnlinePlayMode::UNRANKED; - bool shouldReport = report.onlineMode == ranked || report.onlineMode == unranked; - if (!shouldReport) - { - break; - } auto userInfo = m_user->GetUserInfo(); @@ -120,6 +197,7 @@ void SlippiGameReporter::ReportThreadHandler() request["gameEndMethod"] = report.gameEndMethod; request["lrasInitiator"] = report.lrasInitiator; request["stageId"] = report.stageId; + request["isoHash"] = m_iso_hash; json players = json::array(); for (int i = 0; i < report.players.size(); i++) @@ -142,20 +220,60 @@ void SlippiGameReporter::ReportThreadHandler() auto requestString = request.dump(); // Send report + std::string resp; curl_easy_setopt(m_curl, CURLOPT_POST, true); curl_easy_setopt(m_curl, CURLOPT_URL, REPORT_URL.c_str()); curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, requestString.c_str()); curl_easy_setopt(m_curl, CURLOPT_POSTFIELDSIZE, requestString.length()); + curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, &resp); CURLcode res = curl_easy_perform(m_curl); + // Increment game index even if this fails, because we don't currently retry + gameIndex++; + if (res != 0) { ERROR_LOG(SLIPPI_ONLINE, "[GameReport] Got error executing request. Err code: %d", res); + Common::SleepCurrentThread(0); + continue; } - gameIndex++; + long responseCode; + curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &responseCode); + if (responseCode != 200) + { + ERROR_LOG(SLIPPI, "[GameReport] Server responded with non-success status: %d", responseCode); + Common::SleepCurrentThread(0); + continue; + } + + // Grab resp + auto r = json::parse(resp); + bool success = r.value("success", false); + if (!success) + { + ERROR_LOG(SLIPPI, "[GameReport] Report reached server but failed. %s", resp.c_str()); + Common::SleepCurrentThread(0); + continue; + } + + std::string uploadUrl = r.value("uploadUrl", ""); + UploadReplay(m_replay_last_completed_idx, uploadUrl); + Common::SleepCurrentThread(0); } + + // Clean up replay data for games that are complete + if (queueHasData) + { + auto firstIdx = m_replay_data.begin()->first; + for (int i = firstIdx; i < m_replay_last_completed_idx; i++) + { + INFO_LOG(SLIPPI, "Cleaning index %d in replay data.", i); + m_replay_data[i].clear(); + m_replay_data.erase(i); + } + } } } @@ -182,4 +300,61 @@ void SlippiGameReporter::ReportAbandonment(std::string matchId) { ERROR_LOG(SLIPPI_ONLINE, "[GameReport] Got error executing abandonment request. Err code: %d", res); } +} + +// https://stackoverflow.com/a/57699371/1249024 +int compressToGzip(const char *input, size_t inputSize, char *output, size_t outputSize) +{ + z_stream zs; + zs.zalloc = Z_NULL; + zs.zfree = Z_NULL; + zs.opaque = Z_NULL; + zs.avail_in = (uInt)inputSize; + zs.next_in = (Bytef *)input; + zs.avail_out = (uInt)outputSize; + zs.next_out = (Bytef *)output; + + // hard to believe they don't have a macro for gzip encoding, "Add 16" is the best thing zlib can do: + // "Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib + // wrapper" + deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 | 16, 8, Z_DEFAULT_STRATEGY); + deflate(&zs, Z_FINISH); + deflateEnd(&zs); + return zs.total_out; +} + +void SlippiGameReporter::UploadReplay(int idx, std::string url) +{ + if (url.length() <= 0) + return; + + //INFO_LOG(SLIPPI_ONLINE, "Uploading replay: %d, %s", idx, url.c_str()); + + auto replay_data = m_replay_data[idx]; + u32 raw_data_size = static_cast(replay_data.size()); + u8 *rdbs = reinterpret_cast(&raw_data_size); + + // Add header and footer to replay file + std::vector header({'{', 'U', 3, 'r', 'a', 'w', '[', '$', 'U', '#', 'l', rdbs[3], rdbs[2], rdbs[1], rdbs[0]}); + replay_data.insert(replay_data.begin(), header.begin(), header.end()); + std::vector footer({'U', 8, 'm', 'e', 't', 'a', 'd', 'a', 't', 'a', '{', '}', '}'}); + replay_data.insert(replay_data.end(), footer.begin(), footer.end()); + + std::vector gzipped_data; + gzipped_data.resize(replay_data.size()); + auto res_size = compressToGzip(reinterpret_cast(&replay_data[0]), replay_data.size(), + reinterpret_cast(&gzipped_data[0]), gzipped_data.size()); + gzipped_data.resize(res_size); + + INFO_LOG(SLIPPI, "Pre-compression size: %d. Post compression size: %d", replay_data.size(), res_size); + + curl_easy_setopt(m_curl_upload, CURLOPT_URL, url.c_str()); + curl_easy_setopt(m_curl_upload, CURLOPT_READDATA, &gzipped_data); + curl_easy_setopt(m_curl_upload, CURLOPT_INFILESIZE, res_size); + CURLcode res = curl_easy_perform(m_curl_upload); + + if (res != 0) + { + ERROR_LOG(SLIPPI_ONLINE, "[GameReport] Got error uploading replay file. Err code: %d", res); + } } \ No newline at end of file diff --git a/Source/Core/Core/Slippi/SlippiGameReporter.h b/Source/Core/Core/Slippi/SlippiGameReporter.h index 7933a9ec90..26e5a0814a 100644 --- a/Source/Core/Core/Slippi/SlippiGameReporter.h +++ b/Source/Core/Core/Slippi/SlippiGameReporter.h @@ -11,6 +11,7 @@ #include #include #include +#include class SlippiGameReporter { @@ -36,7 +37,7 @@ class SlippiGameReporter s8 winnerIdx = 0; u8 gameEndMethod = 0; s8 lrasInitiator = 0; - int stageId; + int stageId = 0; std::vector players; }; @@ -47,6 +48,8 @@ class SlippiGameReporter void ReportAbandonment(std::string matchId); void StartNewSession(); void ReportThreadHandler(); + void PushReplayData(u8 *data, u32 length, std::string action); + void UploadReplay(int idx, std::string url); protected: const std::string REPORT_URL = "https://rankings-dot-slippi.uc.r.appspot.com/report"; @@ -54,13 +57,22 @@ class SlippiGameReporter CURL *m_curl = nullptr; struct curl_slist *m_curlHeaderList = nullptr; + CURL *m_curl_upload = nullptr; + struct curl_slist *m_curl_upload_headers = nullptr; + u32 gameIndex = 1; std::vector playerUids; SlippiUser *m_user; + std::string m_iso_hash; Common::FifoQueue gameReportQueue; std::thread reportingThread; std::mutex mtx; std::condition_variable cv; std::atomic runThread; + std::thread m_md5_thread; + + std::map> m_replay_data; + int m_replay_write_idx = 0; + int m_replay_last_completed_idx = -1; };