mirror of
https://github.com/project-slippi/slippi-ssbm-asm.git
synced 2025-10-05 23:52:43 +02:00
add playback console codes for testing ecb crash
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -221,6 +221,7 @@ pip-log.txt
|
||||
|
||||
.vscode
|
||||
|
||||
Output/Console/install.bat
|
||||
Output/Netplay/install.bat
|
||||
Output/Netplay/build-netplay.bat - Shortcut.lnk
|
||||
Output/Playback/install.bat
|
||||
|
@@ -50,460 +50,88 @@ C225B8BC 00000002 #External/LRAStart From SSS Goes to CSS/LRAStart From SSS Goes
|
||||
88630000 00000000
|
||||
043D4A70 00000000 #External/Rumble Off/Rumble Off.asm
|
||||
|
||||
$Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337, Krohnos]
|
||||
*Used in conjunction with Slippi plugged into PortB to extract game data
|
||||
040679BC 38802600 #Recording/ExtendPlayerBlock.asm
|
||||
C23219EC 0000001D #Recording/FlushFrameBuffer.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
3D808000 618C5604
|
||||
$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan, Krohnos]
|
||||
*Used to play back a .slp file
|
||||
*Will play replay configured in playback.txt
|
||||
C216D298 00000011 #PlaybackConsole/Core/FetchGameFrame.asm
|
||||
881F0008 2C000000
|
||||
40820074 7C0802A6
|
||||
90010004 9421FF20
|
||||
BE8100B0 806DB64C
|
||||
83630000 38600076
|
||||
987B0000 806DB654
|
||||
907B0001 7F63DB78
|
||||
38800005 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
2C030000 418200A8
|
||||
806DB64C 83C30000
|
||||
83ADB650 7F9EEA14
|
||||
2C1D0000 41820090
|
||||
3860003C 987C0000
|
||||
806DB654 907C0001
|
||||
3C608048 80639D30
|
||||
5463443E 2C030208
|
||||
806DB654 4082003C
|
||||
80ADB61C 88850010
|
||||
2C040000 4082002C
|
||||
8885000F 2C040000
|
||||
40820020 80850909
|
||||
3884FF85 80E50916
|
||||
7C872050 7C041800
|
||||
40800008 7C832378
|
||||
907C0005 3BBD0009
|
||||
7FC3F378 7FA4EB78
|
||||
38A00001 3D808000
|
||||
7F63DB78 38800065
|
||||
38A00000 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 38600000
|
||||
906DB650 BA8100B0
|
||||
4E800421 BA8100B0
|
||||
800100E4 382100E0
|
||||
7C0803A6 8001001C
|
||||
7C0803A6 881F0008
|
||||
60000000 00000000
|
||||
C216D884 00000030 #Recording/SendGameEnd.asm
|
||||
C206B0DC 0000001D #PlaybackConsole/Core/RestoreGameFrame.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
3D808000 618C5604
|
||||
8BBF000C 7FA3EB78
|
||||
3D808003 618C1724
|
||||
7D8903A6 4E800421
|
||||
2C030000 41820144
|
||||
3F208046 6339B6A0
|
||||
8B590008 2C1A0000
|
||||
41820130 830DB64C
|
||||
88780004 2C030000
|
||||
40820120 3C608048
|
||||
80639D30 5463443E
|
||||
2C030208 4082001C
|
||||
2C1A0002 40820014
|
||||
806DB61C 8863000F
|
||||
2C030000 418200F4
|
||||
83B80000 38600039
|
||||
987D0000 9B5D0001
|
||||
2C1A0007 4082000C
|
||||
88790001 48000008
|
||||
3860FFFF 987D0002
|
||||
3E808047 62949DA4
|
||||
7E83A378 3C808046
|
||||
6084B8EC 38A02278
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
3C808046 6084B6A0
|
||||
7E83A378 880424D0
|
||||
98030006 88040008
|
||||
98030004 3D808016
|
||||
618C6378 7D8903A6
|
||||
4E800421 3AA00000
|
||||
7EA3AB78 48000041
|
||||
38950003 7C64E9AE
|
||||
3AB50001 2C150003
|
||||
4081FFE8 7FA3EB78
|
||||
38800007 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
38600001 98780004
|
||||
48000030 3D808047
|
||||
618C9DA4 1D6300A8
|
||||
7D6B6214 886B0058
|
||||
2C030003 4182000C
|
||||
886B005E 48000008
|
||||
3860FFFF 4E800020
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
819F2514 00000000
|
||||
C216E74C 000000FC #Recording/SendGameInfo.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
3D808000 618C5604
|
||||
7D8903A6 4E800421
|
||||
2C030000 418207A0
|
||||
38600005 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7B1B78
|
||||
936DB64C 38800005
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
3860072A 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7E1B78
|
||||
93DB0000 38600000
|
||||
906DB650 3C608000
|
||||
60635600 80630000
|
||||
38630008 38800000
|
||||
3D808000 618C55FC
|
||||
7D8903A6 4E800421
|
||||
7C7C1B78 38600035
|
||||
987E0000 3860001C
|
||||
987E0001 38600036
|
||||
987E0002 386002BD
|
||||
B07E0003 38600037
|
||||
987E0005 3860003F
|
||||
B07E0006 38600038
|
||||
987E0008 38600050
|
||||
B07E0009 38600039
|
||||
987E000B 38600006
|
||||
B07E000C 3860003A
|
||||
987E000E 3860000C
|
||||
B07E000F 3860003B
|
||||
987E0011 3860002A
|
||||
B07E0012 3860003C
|
||||
987E0014 38600008
|
||||
B07E0015 3860003D
|
||||
987E0017 B39E0018
|
||||
38600010 987E001A
|
||||
38600204 B07E001B
|
||||
38600036 987E001D
|
||||
3C60030D 60630000
|
||||
907E001E 387E0022
|
||||
7FE4FB78 38A00138
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
387E0062 3880001C
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
387E0022 3AA30060
|
||||
3A800000 1ED40024
|
||||
7ED6AA14 88760001
|
||||
2C030000 40820034
|
||||
88760000 2C030012
|
||||
40820028 3C60804C
|
||||
606320BC 1C940044
|
||||
7C632214 80630000
|
||||
546005EF 4182000C
|
||||
38600013 98760000
|
||||
3A940001 2C140004
|
||||
4180FFB4 387E0022
|
||||
3AA30060 3A800000
|
||||
1ED40024 7ED6AA14
|
||||
88760001 2C030000
|
||||
4082002C 88760000
|
||||
3D808016 618C9238
|
||||
7D8903A6 4E800421
|
||||
88960003 7C041800
|
||||
4081000C 38600000
|
||||
98760003 3A940001
|
||||
2C140004 4180FFBC
|
||||
3C60804D 80635F90
|
||||
907E015A 3A82F228
|
||||
3AA00000 3ADE015E
|
||||
1EF50008 38600001
|
||||
7C76B92E 3AF70004
|
||||
7C76B92E 3AB50001
|
||||
2C150004 4180FFE4
|
||||
3A800000 3ABF0060
|
||||
3AFE017E 1F140010
|
||||
7F18BA14 1ED40024
|
||||
7ED6AA14 88760001
|
||||
2C030000 40820040
|
||||
8876000A 2C030078
|
||||
41820034 3D808023
|
||||
618C754C 7D8903A6
|
||||
4E800421 7C641B78
|
||||
7F03C378 38A00010
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
4800001C 7F03C378
|
||||
38800010 3D808000
|
||||
618CC160 7D8903A6
|
||||
4E800421 3A940001
|
||||
2C140004 4180FF88
|
||||
8862F234 987E01BE
|
||||
8862F23C 987E01BF
|
||||
3C608048 80639D30
|
||||
5463443E B07E01C0
|
||||
3C608048 80639D30
|
||||
5463443E 2C030208
|
||||
40820190 38600000
|
||||
3D808000 618C5610
|
||||
7D8903A6 4E800421
|
||||
7C791B78 3A800000
|
||||
3ABF0060 3AFE01C2
|
||||
3B590034 1C74001F
|
||||
7F03BA14 1ED40024
|
||||
7ED6AA14 88760001
|
||||
2C030000 40820028
|
||||
1C74001F 7C83D214
|
||||
7F03C378 38A0001F
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
4800001C 7F03C378
|
||||
3880001F 3D808000
|
||||
618CC160 7D8903A6
|
||||
4E800421 3A940001
|
||||
2C140004 4180FFA0
|
||||
3A800000 3ABF0060
|
||||
3AFE023E 3B5900CF
|
||||
1C74000A 7F03BA14
|
||||
1ED40024 7ED6AA14
|
||||
88760001 2C030000
|
||||
40820028 1C74000A
|
||||
7C83D214 7F03C378
|
||||
38A0000A 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 4800001C
|
||||
7F03C378 3880000A
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
3A940001 2C140004
|
||||
4180FFA0 3A800000
|
||||
3ABF0060 3AFE0266
|
||||
3B5900F7 1C74001D
|
||||
7F03BA14 1ED40024
|
||||
7ED6AA14 88760001
|
||||
2C030000 40820028
|
||||
1C74001D 7C83D214
|
||||
7F03C378 38A0001D
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
4800001C 7F03C378
|
||||
3880001D 3D808000
|
||||
618CC160 7D8903A6
|
||||
4E800421 3A940001
|
||||
2C140004 4180FFA0
|
||||
7F23CB78 3D808037
|
||||
618CF1B0 7D8903A6
|
||||
4E800421 4800001C
|
||||
387E01C2 38800118
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
3D808000 618CADF4
|
||||
7D8903A6 4E800421
|
||||
987E02DA 7FC3F378
|
||||
388002DB 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
38600205 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C751B78
|
||||
3C608000 60635600
|
||||
80630000 3AE30008
|
||||
38600010 98750000
|
||||
3860003D 98750203
|
||||
38600200 B0750201
|
||||
38600000 98750204
|
||||
3AC00000 7C76E050
|
||||
2C030200 41810010
|
||||
B0750201 38600001
|
||||
98750204 38750001
|
||||
7EE4BB78 7C84B214
|
||||
A0B50201 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 7EA3AB78
|
||||
38800205 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
3AD60200 7C16E000
|
||||
4180FFA4 7EA3AB78
|
||||
3D808037 618CF1B0
|
||||
7D8903A6 4E800421
|
||||
38600004 38800007
|
||||
38A00000 3D808039
|
||||
618C01F0 7D8903A6
|
||||
4E800421 48000021
|
||||
7C8802A6 38A00000
|
||||
3D808038 618CFD54
|
||||
7D8903A6 4E800421
|
||||
48000070 4E800021
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
806DB64C 83A30000
|
||||
838DB650 7FBDE214
|
||||
3860003A 987D0000
|
||||
806DB654 907D0001
|
||||
3C60804D 80635F90
|
||||
907D0005 3C608048
|
||||
80639D60 907D0009
|
||||
838DB650 3B9C000D
|
||||
938DB650 BA8100B0
|
||||
800100E4 382100E0
|
||||
7C0803A6 4E800020
|
||||
38600004 38800007
|
||||
38A00000 3D808039
|
||||
618C01F0 7D8903A6
|
||||
4E800421 48000021
|
||||
7C8802A6 38A0000F
|
||||
3D808038 618CFD54
|
||||
7D8903A6 4E800421
|
||||
48000124 4E800021
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
806DB64C 83E30000
|
||||
83CDB650 7FFFF214
|
||||
3B600000 806DC18C
|
||||
83A30024 2C1D0000
|
||||
418200D8 3B7B0001
|
||||
2C1B000F 418100CC
|
||||
839D002C 3860003B
|
||||
987F0000 806DB654
|
||||
907F0001 807C0010
|
||||
B07F0005 807C0024
|
||||
987F0007 807C002C
|
||||
907F0008 807C0040
|
||||
907F000C 807C0044
|
||||
907F0010 807C004C
|
||||
907F0014 807C0050
|
||||
907F0018 807C0C9C
|
||||
B07F001C 807C0D44
|
||||
907F001E 807C001C
|
||||
907F0022 887C0DD7
|
||||
987F0026 887C0DDB
|
||||
987F0027 887C0DEB
|
||||
987F0028 887C0DEF
|
||||
987F0029 807C0518
|
||||
2C030000 41820018
|
||||
8063002C 2C030000
|
||||
4182000C 8863000C
|
||||
48000008 3860FFFF
|
||||
987F002A 83CDB650
|
||||
3BDE002B 93CDB650
|
||||
3BFF002B 83BD0008
|
||||
2C1D0000 4082FF30
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
4E800020 BA8100B0
|
||||
800100E4 382100E0
|
||||
7C0803A6 3C608017
|
||||
60000000 00000000
|
||||
C206DA34 00000036 #Recording/SendGamePostFrame.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
3D808000 618C5604
|
||||
7D8903A6 4E800421
|
||||
2C030000 41820170
|
||||
887F221F 546306F7
|
||||
40820164 8B7F000C
|
||||
806DB64C 83A30000
|
||||
838DB650 7FBDE214
|
||||
38600038 987D0000
|
||||
806DB654 907D0001
|
||||
9B7D0005 7FE3FB78
|
||||
7C7C1B78 832DB64C
|
||||
83790000 7FE3FB78
|
||||
3D808000 618C55F8
|
||||
7D8903A6 4E800421
|
||||
987D0006 807F0004
|
||||
987D0007 807F0010
|
||||
B07D0008 807F00B0
|
||||
907D000A 807F00B4
|
||||
907D000E 807F002C
|
||||
907D0012 807F1830
|
||||
907D0016 807F1998
|
||||
907D001A 807F208C
|
||||
987D001E A07F2090
|
||||
987D001F 807F18C4
|
||||
987D0020 7F63DB78
|
||||
3D808003 618C3BD8
|
||||
7D8903A6 4E800421
|
||||
987D0021 807F0894
|
||||
907D0022 887F2218
|
||||
987D0026 887F221A
|
||||
987D0027 887F221B
|
||||
987D0028 887F221C
|
||||
987D0029 887F221F
|
||||
987D002A 807F2340
|
||||
907D002B 807F00E0
|
||||
987D002F 807F083C
|
||||
B07D0030 887F1968
|
||||
809F0168 7C632050
|
||||
987D0032 887F25FF
|
||||
987D0033 807F1988
|
||||
2C030000 40820008
|
||||
807F198C 987D0034
|
||||
807F0080 907D0035
|
||||
807F0084 907D0039
|
||||
807F008C 907D003D
|
||||
807F0090 907D0041
|
||||
807F00EC 907D0045
|
||||
807F195C 907D0049
|
||||
807F0014 907D004D
|
||||
838DB650 3B9C0051
|
||||
938DB650 BA8100B0
|
||||
800100E4 382100E0
|
||||
7C0803A6 8001001C
|
||||
60000000 00000000
|
||||
C206B0DC 0000002B #Recording/SendGamePreFrame.asm
|
||||
2C030000 40820084
|
||||
389B0001 88BF000C
|
||||
1CA50019 7F442A14
|
||||
807A0000 907F0620
|
||||
807A0004 907F0624
|
||||
807A0008 907F0638
|
||||
807A000C 907F063C
|
||||
807A0010 907F0650
|
||||
807A0014 907F065C
|
||||
3C608046 6063B108
|
||||
3C80804C 60841F78
|
||||
88840001 3884FFFF
|
||||
2C040000 40A00008
|
||||
38840005 1C840030
|
||||
7C632214 889F0618
|
||||
1C84000C 7E832214
|
||||
887A0018 98740002
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
881F2219 00000000
|
||||
C216E74C 0000001E #PlaybackConsole/Core/RestoreGameInfo.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
3D808000 618C5604
|
||||
386005EC 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7C1B78
|
||||
938DB64C 388005EC
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
2C030000 41820118
|
||||
8B7F000C 806DB64C
|
||||
83A30000 838DB650
|
||||
7FBDE214 38600037
|
||||
987D0000 806DB654
|
||||
907D0001 9B7D0005
|
||||
7FE3FB78 3D808000
|
||||
618C55F8 7D8903A6
|
||||
4E800421 987D0006
|
||||
3C60804D 80635F90
|
||||
907D0007 807F0010
|
||||
B07D000B 807F00B0
|
||||
907D000D 807F00B4
|
||||
907D0011 807F002C
|
||||
907D0015 807F0620
|
||||
907D0019 807F0624
|
||||
907D001D 807F0638
|
||||
907D0021 807F063C
|
||||
907D0025 807F0650
|
||||
907D0029 807F065C
|
||||
907D002D 3C60804C
|
||||
60631FAC 1C9B0044
|
||||
7C832214 A0640002
|
||||
B07D0031 80640030
|
||||
907D0033 80640034
|
||||
907D0037 3C608046
|
||||
6063B108 3C80804C
|
||||
60841F78 88840001
|
||||
3884FFFF 2C040000
|
||||
40A00008 38840005
|
||||
1C840030 7C632214
|
||||
1C9B000C 7C632214
|
||||
88630002 987D003B
|
||||
807F1830 907D003C
|
||||
838DB650 3B9C0040
|
||||
938DB650 BA8100B0
|
||||
800100E4 382100E0
|
||||
7C0803A6 881F2219
|
||||
60000000 00000000
|
||||
C2005604 0000000A #Recording/ShouldRecord.asm
|
||||
3C608048 80639D30
|
||||
5463443E 2C030202
|
||||
4182002C 2C030302
|
||||
41820024 2C030208
|
||||
4182001C 2C03010F
|
||||
41820014 2C030120
|
||||
4182000C 38600000
|
||||
4800000C 38600001
|
||||
48000004 4E800020
|
||||
60000000 00000000
|
||||
C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm
|
||||
7C050000 4080000C
|
||||
38E00001 48000008
|
||||
38E00002 8103002C
|
||||
98E825FF 7C050000
|
||||
60000000 00000000
|
||||
C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm
|
||||
38600000 987E25FF
|
||||
807E00B0 00000000
|
||||
38600221 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7E1B78
|
||||
93DC0000 38600080
|
||||
3D808037 618CF1E4
|
||||
7D8903A6 4E800421
|
||||
907C0004 38600075
|
||||
987E0000 387C001C
|
||||
907E0001 38600553
|
||||
907E0005 38600000
|
||||
907E0009 7FC3F378
|
||||
3880000D 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
7FC3F378 38800221
|
||||
38A00000 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 807E0001
|
||||
3C80804D 90645F90
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
3C608017 00000000
|
||||
C20055F8 0000000F #Common/GetIsFollower.asm
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
@@ -620,41 +248,24 @@ C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
4E800020 00000000
|
||||
C20055FC 00000021 #Common/Gecko/ProcessCodeList.asm
|
||||
C209E090 00000011 #Common/FastForward/DynamicsFix.asm
|
||||
807E0000 80630028
|
||||
48000009 48000074
|
||||
7C0802A6 90010004
|
||||
9421FF20 BE8100B0
|
||||
7C7D1B78 7C7A1B78
|
||||
7C9E2378 3B800000
|
||||
807D0000 5463463C
|
||||
3B600008 3B200000
|
||||
2C0300C0 41820044
|
||||
2C0300C2 4182004C
|
||||
2C030004 41820058
|
||||
2C030006 41820058
|
||||
2C030008 41820068
|
||||
807D0000 5463213E
|
||||
2C03000F 40820010
|
||||
807D0004 2C030000
|
||||
4182007C 4800004C
|
||||
807D0004 1C630008
|
||||
3B630008 4800003C
|
||||
807D0004 1C630008
|
||||
3B630008 3B200004
|
||||
48000028 3B200004
|
||||
48000020 807D0004
|
||||
38630007 54630038
|
||||
3B630008 833D0004
|
||||
48000008 3B600010
|
||||
3B9C0001 2C1E0000
|
||||
4182001C 807D0000
|
||||
5463463C 7FA4EB78
|
||||
7F25CB78 7FC903A6
|
||||
4E800421 7FBDDA14
|
||||
4BFFFF38 7C7AE850
|
||||
BA8100B0 800100E4
|
||||
382100E0 7C0803A6
|
||||
4E800020 00000000
|
||||
04005600 801910E0 #Common/ConsoleOverrides/SetGeckoStart.asm
|
||||
9421FFE8 93E10014
|
||||
7C7F1B78 807F0014
|
||||
54600211 40820020
|
||||
54600673 41820018
|
||||
7FE3FB78 3D808037
|
||||
618C3078 7D8903A6
|
||||
4E800421 807F0010
|
||||
2C030000 41820008
|
||||
4BFFFFB9 807F0008
|
||||
2C030000 41820008
|
||||
4BFFFFA9 83E10014
|
||||
8001001C 38210018
|
||||
7C0803A6 4E800020
|
||||
BB010028 00000000
|
||||
C20AC5B8 00000002 #Common/NanaDeterminism/NanaDeterminism.asm
|
||||
7C7D1B78 3BC00000
|
||||
60000000 00000000
|
||||
|
Binary file not shown.
Binary file not shown.
71
PlaybackConsole/Core/FetchGameFrame.asm
Normal file
71
PlaybackConsole/Core/FetchGameFrame.asm
Normal file
@@ -0,0 +1,71 @@
|
||||
################################################################################
|
||||
# Address: 8016d298
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
# Inject at address 8016d298
|
||||
# Function is SceneThink_VSMode and we're calling FetchGameFrame to update
|
||||
# the EXI buffer.
|
||||
################################################################################
|
||||
.include "Common/Common.s"
|
||||
.include "PlaybackConsole/Playback.s"
|
||||
|
||||
# Register names
|
||||
.set PlayerData,31
|
||||
.set PlayerGObj,30
|
||||
.set PlayerSlot,29
|
||||
.set PlayerDataStatic,28
|
||||
.set BufferPointer,27
|
||||
.set PlayerBackup,26
|
||||
.set FrameNumber,25
|
||||
|
||||
# debug flag
|
||||
.set debugFlag,0
|
||||
|
||||
#First, check if game ended. This isn't really strictly required except that without
|
||||
#it we try to fetch a frame that doesn't exist at the end of the game.
|
||||
#That causes problems when mirroring because we haven't gotten a game
|
||||
#end message yet so the game will have to hang temporarily before GAME can be
|
||||
#shown
|
||||
lbz r0, 0x0008 (r31)
|
||||
cmpwi r0,0x0
|
||||
bne Exit # r0 is 2 on successful game end
|
||||
|
||||
################################################################################
|
||||
# subroutine: FetchGameFrame
|
||||
# description: per frame function that will handle fetching the current frame's
|
||||
# data and storing it to the buffer
|
||||
################################################################################
|
||||
|
||||
FetchGameFrame:
|
||||
|
||||
backup
|
||||
lwz r3,primaryDataBuffer(r13)
|
||||
lwz BufferPointer,PDB_EXI_BUF_ADDR(r3)
|
||||
|
||||
FetchFrameInfo_REQUEST_DATA:
|
||||
# request game information from slippi
|
||||
li r3, CMD_GET_FRAME # store gameframe request ID
|
||||
stb r3,0x0(BufferPointer)
|
||||
lwz r3,frameIndex(r13) #get frame to request
|
||||
stw r3,0x1(BufferPointer)
|
||||
# Transfer buffer over DMA
|
||||
mr r3,BufferPointer #Buffer Pointer
|
||||
li r4,0x5 #Buffer Length
|
||||
li r5,CONST_ExiWrite
|
||||
branchl r12,FN_EXITransferBuffer
|
||||
FetchFrameInfo_RECEIVE_DATA:
|
||||
# Transfer buffer over DMA
|
||||
mr r3,BufferPointer
|
||||
li r4,Buffer_Length #Buffer Length
|
||||
li r5,CONST_ExiRead
|
||||
branchl r12,FN_EXITransferBuffer
|
||||
|
||||
FetchFrameInfo_Exit:
|
||||
|
||||
restore
|
||||
#-----------------------------------------------
|
||||
|
||||
Exit:
|
||||
# Original Codeline
|
||||
lbz r0, 0x0008 (r31)
|
92
PlaybackConsole/Core/RestoreGameFrame.asm
Normal file
92
PlaybackConsole/Core/RestoreGameFrame.asm
Normal file
@@ -0,0 +1,92 @@
|
||||
################################################################################
|
||||
# Address: 8006b0dc
|
||||
################################################################################
|
||||
|
||||
.include "Common/Common.s"
|
||||
.include "PlaybackConsole/Playback.s"
|
||||
|
||||
# Register names
|
||||
.set PlayerData,31
|
||||
.set PlayerGObj,30
|
||||
.set PlayerSlot,29
|
||||
.set PlayerDataStatic,28
|
||||
.set BufferPointer,27
|
||||
.set PlayerBackup,26
|
||||
.set REG_PDB_ADDR,25
|
||||
|
||||
################################################################################
|
||||
# subroutine: readInputs
|
||||
# description: reads inputs from Slippi for a given frame and overwrites
|
||||
# memory locations
|
||||
################################################################################
|
||||
# Create stack frame and store link register
|
||||
backup
|
||||
|
||||
#------------- INITIALIZE -------------
|
||||
# here we want to initalize some variables we plan on using throughout
|
||||
lbz PlayerSlot,0xC(PlayerData) #loads this player slot
|
||||
|
||||
# Get address for static player block
|
||||
mr r3,PlayerSlot
|
||||
branchl r12, PlayerBlock_LoadStaticBlock
|
||||
mr PlayerDataStatic,r3
|
||||
|
||||
# get buffer pointer
|
||||
lwz REG_PDB_ADDR,primaryDataBuffer(r13)
|
||||
lwz BufferPointer,PDB_EXI_BUF_ADDR(REG_PDB_ADDR)
|
||||
|
||||
#Check if this player is a follower
|
||||
mr r3,PlayerData
|
||||
branchl r12,FN_GetIsFollower
|
||||
cmpwi r3, 0
|
||||
bne Injection_Exit # Don't restore follower inputs
|
||||
|
||||
# Get players offset in buffer ()
|
||||
addi r4,BufferPointer, GameFrame_Start #get to player frame data start
|
||||
lbz r5,0xC(PlayerData) #get player number
|
||||
mulli r5,r5,PlayerDataLength #get players offset
|
||||
add PlayerBackup,r4,r5
|
||||
|
||||
CONTINUE_READ_DATA:
|
||||
|
||||
RestoreData:
|
||||
# clogf "[P%d] %08X", "lbz r5,0xC(PlayerData)", "mr r6, PlayerBackup", "li r7, 1"
|
||||
|
||||
# Restore data
|
||||
lwz r3,AnalogX(PlayerBackup)
|
||||
stw r3,0x620(PlayerData) #analog X
|
||||
lwz r3,AnalogY(PlayerBackup)
|
||||
stw r3,0x624(PlayerData) #analog Y
|
||||
lwz r3,CStickX(PlayerBackup)
|
||||
stw r3,0x638(PlayerData) #cstick X
|
||||
lwz r3,CStickY(PlayerBackup)
|
||||
stw r3,0x63C(PlayerData) #cstick Y
|
||||
lwz r3,Trigger(PlayerBackup)
|
||||
stw r3,0x650(PlayerData) #trigger
|
||||
lwz r3,Buttons(PlayerBackup)
|
||||
stw r3,0x65C(PlayerData) #buttons
|
||||
|
||||
# UCF uses raw controller inputs for dashback, restore x analog byte here
|
||||
load r3, 0x8046b108 # start location of circular buffer
|
||||
|
||||
# Get offset in raw controller input buffer
|
||||
load r4, 0x804c1f78
|
||||
lbz r4, 0x0001(r4) # this is the current index in the circular buffer
|
||||
subi r4, r4, 1
|
||||
cmpwi r4, 0
|
||||
bge+ CONTINUE_RAW_X # if our index is already 0 or greater, continue
|
||||
addi r4, r4, 5 # here our index was -1, this should wrap around to be 4
|
||||
CONTINUE_RAW_X:
|
||||
mulli r4, r4, 0x30
|
||||
add r3, r3, r4 # move to the correct start index for this index
|
||||
# Get this players controller port
|
||||
lbz r4,0x618(PlayerData)
|
||||
mulli r4, r4, 0xc
|
||||
add r20, r3, r4 # move to the correct player position
|
||||
# Get backed up input value
|
||||
lbz r3,AnalogRawInput(PlayerBackup)
|
||||
stb r3, 0x2(r20) #store raw x analog
|
||||
|
||||
Injection_Exit:
|
||||
restore #restore registers and lr
|
||||
lbz r0, 0x2219(r31) #execute replaced code line
|
80
PlaybackConsole/Core/RestoreGameInfo.asm
Normal file
80
PlaybackConsole/Core/RestoreGameInfo.asm
Normal file
@@ -0,0 +1,80 @@
|
||||
################################################################################
|
||||
# Address: 8016e74c
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
# Inject at address 8016e74c
|
||||
# Function is StartMelee and we are loading game information right before
|
||||
# it gets read to initialize the match
|
||||
################################################################################
|
||||
.include "Common/Common.s"
|
||||
.include "PlaybackConsole/Playback.s"
|
||||
|
||||
# Register names
|
||||
.set BufferPointer,30
|
||||
.set REG_GeckoBuffer,29
|
||||
.set REG_DirectoryBuffer,28
|
||||
|
||||
################################################################################
|
||||
# subroutine: gameInfoLoad
|
||||
# description: reads game info from slippi and loads those into memory
|
||||
# addresses that will be used
|
||||
################################################################################
|
||||
# create stack frame and store link register
|
||||
backup
|
||||
|
||||
# allocate memory for directory buffer
|
||||
li r3, PDB_SIZE
|
||||
branchl r12, HSD_MemAlloc
|
||||
mr REG_DirectoryBuffer, r3
|
||||
stw REG_DirectoryBuffer, primaryDataBuffer(r13) # Store directory buffer location
|
||||
li r4, PDB_SIZE
|
||||
branchl r12, Zero_AreaLength
|
||||
|
||||
# allocate memory for the gameframe buffer used here and in ReceiveGameFrame
|
||||
li r3,EXIBufferLength
|
||||
branchl r12, HSD_MemAlloc
|
||||
mr BufferPointer,r3
|
||||
stw BufferPointer,PDB_EXI_BUF_ADDR(REG_DirectoryBuffer)
|
||||
|
||||
# allocate memory for the Secondary Buffer used in RestoreStockSteal
|
||||
li r3,128
|
||||
branchl r12, HSD_MemAlloc
|
||||
stw r3,PDB_SECONDARY_EXI_BUF_ADDR(REG_DirectoryBuffer)
|
||||
|
||||
# get the game info data
|
||||
REQUEST_DATA:
|
||||
# request game information from slippi
|
||||
li r3,CMD_GET_GAME_INFO # store game info request ID
|
||||
stb r3,0x0(BufferPointer)
|
||||
|
||||
# write memory locations to preserve when doing mem savestates
|
||||
addi r3, REG_DirectoryBuffer, PDB_SFXDB_START
|
||||
stw r3, 0x1(BufferPointer)
|
||||
li r3, SFXDB_SIZE + 4 # include the latest frame which follows SFXDB
|
||||
stw r3, 0x5(BufferPointer)
|
||||
li r3, 0
|
||||
stw r3, 0x9(BufferPointer)
|
||||
|
||||
# Transfer buffer over DMA
|
||||
mr r3,BufferPointer #Buffer Pointer
|
||||
li r4,0xD #Buffer Length
|
||||
li r5,CONST_ExiWrite
|
||||
branchl r12,FN_EXITransferBuffer
|
||||
RECEIVE_DATA:
|
||||
# Transfer buffer over DMA
|
||||
mr r3,BufferPointer
|
||||
li r4,GameInfoLength #Buffer Length
|
||||
li r5,CONST_ExiRead
|
||||
branchl r12,FN_EXITransferBuffer
|
||||
|
||||
READ_DATA:
|
||||
lwz r3,InfoRNGSeed(BufferPointer)
|
||||
lis r4, 0x804D
|
||||
stw r3, 0x5F90(r4) #store random seed
|
||||
|
||||
# clogf "RNG Seed: %08X\n", "mr r5, 3"
|
||||
|
||||
Injection_Exit:
|
||||
restore
|
||||
lis r3, 0x8017 #execute replaced code line
|
161
PlaybackConsole/Playback.s
Normal file
161
PlaybackConsole/Playback.s
Normal file
@@ -0,0 +1,161 @@
|
||||
################################################################################
|
||||
# Static Function Locations
|
||||
################################################################################
|
||||
# Local functions (added by us). These must not interfere with the Functions
|
||||
# in Common/Common.s
|
||||
|
||||
# None
|
||||
|
||||
################################################################################
|
||||
# Const Definitions
|
||||
################################################################################
|
||||
.set CONST_FrameFetchResult_Wait, 0
|
||||
.set CONST_FrameFetchResult_Continue, 1
|
||||
.set CONST_FrameFetchResult_Terminate, 2
|
||||
.set CONST_FrameFetchResult_FastForward, 3
|
||||
|
||||
################################################################################
|
||||
# Command Bytes
|
||||
################################################################################
|
||||
.set CMD_GET_GAME_INFO, 0x75
|
||||
.set CMD_GET_FRAME, 0x76
|
||||
.set CMD_IS_REPLAY_READY, 0x88
|
||||
.set CMD_IS_STOCK_STEAL,0x89
|
||||
.set CMD_GET_GECKO_CODES,0x8A
|
||||
|
||||
################################################################################
|
||||
# SFX Storage
|
||||
################################################################################
|
||||
.set MAX_SOUNDS_PER_FRAME, 0x10
|
||||
.set SOUND_STORAGE_FRAME_COUNT, 7
|
||||
|
||||
.set SFXS_ENTRY_SOUND_ID, 0 # u16, ID of the sound played
|
||||
.set SFXS_ENTRY_INSTANCE_ID, SFXS_ENTRY_SOUND_ID + 2 # u32
|
||||
.set SFXS_ENTRY_SIZE, SFXS_ENTRY_INSTANCE_ID + 4
|
||||
|
||||
.set SFXS_LOG_INDEX, 0 # u8, Index where we are in the frame
|
||||
.set SFXS_LOG_ENTRIES, SFXS_LOG_INDEX + 1 # SFXS_ENTRY_SIZE * MAX_SOUNDS_PER_FRAME
|
||||
.set SFXS_LOG_SIZE, SFXS_LOG_ENTRIES + SFXS_ENTRY_SIZE * MAX_SOUNDS_PER_FRAME
|
||||
|
||||
.set SFXS_FRAME_PENDING_LOG, 0 # SFXS_LOG_SIZE
|
||||
.set SFXS_FRAME_STABLE_LOG, SFXS_FRAME_PENDING_LOG + SFXS_LOG_SIZE # SFXS_LOG_SIZE
|
||||
.set SFXS_FRAME_SIZE, SFXS_FRAME_STABLE_LOG + SFXS_LOG_SIZE
|
||||
|
||||
.set SFXDB_WRITE_INDEX, 0 # u8
|
||||
.set SFXDB_FRAMES, SFXDB_WRITE_INDEX + 1 # SFXS_FRAME_SIZE * SOUND_STORAGE_FRAME_COUNT
|
||||
.set SFXDB_SIZE, SFXDB_FRAMES + SFXS_FRAME_SIZE * SOUND_STORAGE_FRAME_COUNT
|
||||
|
||||
################################################################################
|
||||
# Playback Directory Buffer
|
||||
################################################################################
|
||||
.set PDB_EXI_BUF_ADDR, 0x0 # u32
|
||||
.set PDB_SECONDARY_EXI_BUF_ADDR, PDB_EXI_BUF_ADDR + 4 # u32
|
||||
.set PDB_DYNAMIC_GECKO_ADDR, PDB_SECONDARY_EXI_BUF_ADDR + 4 # u32
|
||||
.set PDB_RESTORE_BUF_SIZE, PDB_DYNAMIC_GECKO_ADDR + 4 # u32
|
||||
.set PDB_RESTORE_BUF_ADDR, PDB_RESTORE_BUF_SIZE + 4 # u32
|
||||
.set PDB_RESTORE_BUF_WRITE_POS, PDB_RESTORE_BUF_ADDR + 4 # u32
|
||||
.set PDB_RESTORE_C2_BRANCH, PDB_RESTORE_BUF_WRITE_POS + 4 # u32
|
||||
.set PDB_SFXDB_START, PDB_RESTORE_C2_BRANCH + 4 # SFXDB_SIZE
|
||||
.set PDB_LATEST_FRAME, PDB_SFXDB_START + SFXDB_SIZE # u32, must follow SFXDB as it is preserved
|
||||
.set PDB_SHOULD_RESYNC, PDB_LATEST_FRAME + 4 # bool
|
||||
.set PDB_DISPLAY_NAMES, PDB_SHOULD_RESYNC + 1 # string (31)[4]
|
||||
.set PDB_SIZE, PDB_DISPLAY_NAMES + 124
|
||||
|
||||
################################################################################
|
||||
# Buffer Offsets
|
||||
################################################################################
|
||||
# buffer status
|
||||
.set BufferStatus_Start,0x0
|
||||
.set BufferStatus_Length,0x1
|
||||
# buffer status offsets
|
||||
.set BufferStatus_Status,0x0
|
||||
|
||||
# gameframe
|
||||
.set GameFrame_Start, BufferStatus_Start + BufferStatus_Length
|
||||
# per player offsets
|
||||
.set PlayerDataLength,0x19
|
||||
.set AnalogX,0x00
|
||||
.set AnalogY,0x04
|
||||
.set CStickX,0x08
|
||||
.set CStickY,0x0C
|
||||
.set Trigger,0x10
|
||||
.set Buttons,0x14
|
||||
.set AnalogRawInput,0x18
|
||||
|
||||
.set GameFrame_Length, PlayerDataLength * 4
|
||||
|
||||
.set Buffer_Length, GameFrame_Start + GameFrame_Length
|
||||
|
||||
################################################################################
|
||||
# Game Info Buffer Offsets
|
||||
################################################################################
|
||||
.set SuccessBool,0x0
|
||||
.set SuccessBool_Length,0x1
|
||||
.set InfoRNGSeed,0x1
|
||||
.set InfoRNGSeed_Length,0x4
|
||||
.set MatchStruct,0x5
|
||||
.set MatchStruct_Length,0x138
|
||||
.set UCFToggles,0x13D
|
||||
.set UCFToggles_Length,0x20
|
||||
.set NametagData,0x15D
|
||||
.set NametagData_Length,0x40
|
||||
.set PALBool,0x19D
|
||||
.set PALBool_Length,0x1
|
||||
.set PSPreloadBool,0x19E
|
||||
.set PSPreloadBool_Length,0x1
|
||||
.set FrozenPSBool,0x19F
|
||||
.set FrozenPSBool_Length,0x1
|
||||
.set ShouldResyncBool,0x1A0
|
||||
.set ShouldResyncBool_Length,0x1
|
||||
.set DisplayNameData,0x1A1
|
||||
.set DisplayNameData_Length,0x7C
|
||||
.set GeckoListSize,0x21D
|
||||
.set GeckoListSize_Length,0x4
|
||||
|
||||
.set GameInfoLength, SuccessBool_Length + InfoRNGSeed_Length + MatchStruct_Length + UCFToggles_Length + NametagData_Length + PALBool_Length + PSPreloadBool_Length + FrozenPSBool_Length + ShouldResyncBool_Length + DisplayNameData_Length + GeckoListSize_Length
|
||||
|
||||
.if GameInfoLength > Buffer_Length
|
||||
.set EXIBufferLength, GameInfoLength
|
||||
.else
|
||||
.set EXIBufferLength, Buffer_Length
|
||||
.endif
|
||||
|
||||
|
||||
.macro clogf str, arg1="nop", arg2="nop", arg3="nop", arg4="nop", arg5="nop", arg6="nop"
|
||||
b 1f
|
||||
0:
|
||||
blrl
|
||||
.string "\str"
|
||||
.align 2
|
||||
|
||||
1:
|
||||
backupall
|
||||
|
||||
# Set up args to log
|
||||
\arg1
|
||||
\arg2
|
||||
\arg3
|
||||
\arg4
|
||||
\arg5
|
||||
\arg6
|
||||
|
||||
lwz r3,primaryDataBuffer(r13)
|
||||
lwz r3,PDB_SECONDARY_EXI_BUF_ADDR(r3)
|
||||
addi r3, r3, 1
|
||||
bl 0b
|
||||
mflr r4
|
||||
crset 6
|
||||
branchl r12, 0x80323cf4 # sprintf
|
||||
|
||||
lwz r3,primaryDataBuffer(r13)
|
||||
lwz r3,PDB_SECONDARY_EXI_BUF_ADDR(r3)
|
||||
|
||||
li r4, 0xD0
|
||||
stb r4, 0(r3)
|
||||
|
||||
li r4, 128 # Length of buf
|
||||
li r5, CONST_ExiWrite
|
||||
branchl r12, FN_EXITransferBuffer
|
||||
|
||||
restoreall
|
||||
.endm
|
10
build-console.bat
Normal file
10
build-console.bat
Normal file
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
echo Building console_core.json for Port A...
|
||||
gecko build -c console_core.json -defsym "STG_EXIIndex=0" -o "Output/Console/g_core_porta.bin"
|
||||
echo.
|
||||
|
||||
echo Building console_core.json...
|
||||
gecko build -c console_core.json -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin"
|
||||
echo.
|
||||
|
||||
pause
|
@@ -119,24 +119,23 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Slippi Recording",
|
||||
"name": "Required: Slippi Playback",
|
||||
"authors": [
|
||||
"Fizzi",
|
||||
"Achilles",
|
||||
"UnclePunch",
|
||||
"Nikki",
|
||||
"jmlee337",
|
||||
"Achilles",
|
||||
"tauKhan",
|
||||
"Krohnos"
|
||||
],
|
||||
"description": [
|
||||
"Used in conjunction with Slippi plugged into PortB to extract game data"
|
||||
"Used to play back a .slp file",
|
||||
"Will play replay configured in playback.txt"
|
||||
],
|
||||
"build": [
|
||||
{
|
||||
"type": "injectFolder",
|
||||
"sourceFolder": "Recording",
|
||||
"isRecursive": true,
|
||||
"annotation": "Slippi Recording [Fizzi, Achilles, UnclePunch]"
|
||||
"sourceFolder": "PlaybackConsole/Core",
|
||||
"isRecursive": true
|
||||
},
|
||||
{
|
||||
"type": "injectFolder",
|
||||
@@ -168,13 +167,9 @@
|
||||
},
|
||||
{
|
||||
"type": "injectFolder",
|
||||
"sourceFolder": "Common/Gecko",
|
||||
"annotation": "Static function to process Gecko codes [Fizzi]"
|
||||
},
|
||||
{
|
||||
"type": "injectFolder",
|
||||
"sourceFolder": "Common/ConsoleOverrides",
|
||||
"annotation": "Forces values for proper console operation [Fizzi]"
|
||||
"sourceFolder": "Common/FastForward",
|
||||
"isRecursive": true,
|
||||
"annotation": "Functions for supporting FFW [Fizzi, Unclepunch]"
|
||||
},
|
||||
{
|
||||
"type": "injectFolder",
|
||||
|
Reference in New Issue
Block a user