Fix stadium transformation crash/desync during intense rollbacks (#438)

* project update

* preload stadium transformation files
add alt stage to selections and msrb

* Add diff files to data

* update codes

* remove build files

* update codes

* chore: update codeset and injection lists

* chore: update codeset

* chore: update codeset

* chore: update codeset

---------

Co-authored-by: Jas Laferriere <Fizzi36@gmail.com>
This commit is contained in:
KELLZ
2025-07-22 17:17:30 -02:30
committed by GitHub
parent 95b440283b
commit 547a089652
15 changed files with 1599 additions and 967 deletions

View File

@@ -1025,12 +1025,12 @@ C216D884 00000030 #Recording/SendGameEnd.asm
BA8100B0 800100E4
382100E0 7C0803A6
819F2514 00000000
C216E74C 00000111 #Recording/SendGameInfo.asm
C216E74C 00000119 #Recording/SendGameInfo.asm
7C0802A6 90010004
9421FF20 BE8100B0
3D808000 618C5604
7D8903A6 4E800421
2C030000 4182084C
2C030000 41820888
38600005 3D808037
618CF1E4 7D8903A6
4E800421 7C7B1B78
@@ -1129,176 +1129,184 @@ B07E0015 3860003D
4E800421 3A940001
2C140004 4180FF88
8862F234 987E01C7
8862F23C 987E01C8
3C608048 80639D30
5463443E B07E01C9
3B200000 3C608048
3C604BFB 60633EA1
3C80801D 6084457C
80840000 7C032000
38600000 41820024
3C60801D 6063457C
80830000 5485302E
38800040 7C8523D6
7C632214 88630008
987E01C8 3C608048
80639D30 5463443E
2C030208 4082017C
38600000 3D808000
618C5610 7D8903A6
4E800421 7C791B78
3A800000 3ABF0060
3AFE01CB 3B590034
1C74001F 7F03BA14
1ED40024 7ED6AA14
88760001 2C030000
40820028 1C74001F
7C83D214 7F03C378
38A0001F 3D808000
618C31F4 7D8903A6
4E800421 4800001C
7F03C378 3880001F
3D808000 618CC160
B07E01C9 3B200000
3C608048 80639D30
5463443E 2C030208
4082017C 38600000
3D808000 618C5610
7D8903A6 4E800421
3A940001 2C140004
4180FFA0 3A800000
3ABF0060 3AFE0247
3B5900CF 1C74000A
7C791B78 3A800000
3ABF0060 3AFE01CB
3B590034 1C74001F
7F03BA14 1ED40024
7ED6AA14 88760001
2C030000 40820028
1C74000A 7C83D214
7F03C378 38A0000A
1C74001F 7C83D214
7F03C378 38A0001F
3D808000 618C31F4
7D8903A6 4E800421
4800001C 7F03C378
3880000A 3D808000
3880001F 3D808000
618CC160 7D8903A6
4E800421 3A940001
2C140004 4180FFA0
3A800000 3ABF0060
3AFE026F 3B5900F7
1C74001D 7F03BA14
3AFE0247 3B5900CF
1C74000A 7F03BA14
1ED40024 7ED6AA14
88760001 2C030000
40820028 1C74001D
40820028 1C74000A
7C83D214 7F03C378
38A0001D 3D808000
38A0000A 3D808000
618C31F4 7D8903A6
4E800421 4800001C
7F03C378 3880001D
7F03C378 3880000A
3D808000 618CC160
7D8903A6 4E800421
3A940001 2C140004
4180FFA0 4800001C
387E01CB 38800118
4180FFA0 3A800000
3ABF0060 3AFE026F
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
4800001C 387E01CB
38800118 3D808000
618CC160 7D8903A6
4E800421 3D808000
618CADF4 7D8903A6
4E800421 987E02E3
2C190000 41820044
387E02E4 38990394
38A00033 3D808000
618C31F4 7D8903A6
4E800421 3C60803D
6063AD40 80630000
81830088 A06C0001
907E0317 886C0006
907E031B 4800001C
387E02E4 3880003B
3D808000 618CC160
7D8903A6 4E800421
3D808000 618CADF4
2C190000 41820018
7F23CB78 3D808037
618CF1B0 7D8903A6
4E800421 7FC3F378
3880031F 38A00001
3D808000 618C55F0
7D8903A6 4E800421
987E02E3 2C190000
41820044 387E02E4
38990394 38A00033
3D808000 618C31F4
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
3C60803D 6063AD40
80630000 81830088
A06C0001 907E0317
886C0006 907E031B
4800001C 387E02E4
3880003B 3D808000
618CC160 7D8903A6
4E800421 2C190000
41820018 7F23CB78
3AD60200 7C16E000
4180FFA4 7EA3AB78
3D808037 618CF1B0
7D8903A6 4E800421
7FC3F378 3880031F
38A00001 3D808000
618C55F0 7D8903A6
4E800421 38600205
3D808037 618CF1E4
38600004 38800007
38A00000 3D808039
618C01F0 7D8903A6
4E800421 48000021
7C8802A6 38A00000
3D808038 618CFD54
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 4800012C
4E800021 7C0802A6
90010004 9421FF20
BE8100B0 806DB64C
83E30000 83CDB650
7FFFF214 3B600000
806DC18C 83A30024
2C1D0000 418200E0
3B7B0001 2C1B000F
418100D4 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
A07C0DA8 B07F002B
83CDB650 3BDE002D
93CDB650 3BFF002D
83BD0008 2C1D0000
4082FF28 BA8100B0
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
4800012C 4E800021
7C0802A6 90010004
9421FF20 BE8100B0
806DB64C 83E30000
83CDB650 7FFFF214
3B600000 806DC18C
83A30024 2C1D0000
418200E0 3B7B0001
2C1B000F 418100D4
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 A07C0DA8
B07F002B 83CDB650
3BDE002D 93CDB650
3BFF002D 83BD0008
2C1D0000 4082FF28
BA8100B0 800100E4
382100E0 7C0803A6
3C608017 00000000
4E800020 BA8100B0
800100E4 382100E0
7C0803A6 3C608017
60000000 00000000
C206DA34 00000038 #Recording/SendGamePostFrame.asm
7C0802A6 90010004
9421FF20 BE8100B0

View File

@@ -1024,12 +1024,12 @@ C216D884 00000030 #Recording/SendGameEnd.asm
BA8100B0 800100E4
382100E0 7C0803A6
819F2514 00000000
C216E74C 00000111 #Recording/SendGameInfo.asm
C216E74C 00000119 #Recording/SendGameInfo.asm
7C0802A6 90010004
9421FF20 BE8100B0
3D808000 618C5604
7D8903A6 4E800421
2C030000 4182084C
2C030000 41820888
38600005 3D808037
618CF1E4 7D8903A6
4E800421 7C7B1B78
@@ -1128,176 +1128,184 @@ B07E0015 3860003D
4E800421 3A940001
2C140004 4180FF88
8862F234 987E01C7
8862F23C 987E01C8
3C608048 80639D30
5463443E B07E01C9
3B200000 3C608048
3C604BFB 60633EA1
3C80801D 6084457C
80840000 7C032000
38600000 41820024
3C60801D 6063457C
80830000 5485302E
38800040 7C8523D6
7C632214 88630008
987E01C8 3C608048
80639D30 5463443E
2C030208 4082017C
38600000 3D808000
618C5610 7D8903A6
4E800421 7C791B78
3A800000 3ABF0060
3AFE01CB 3B590034
1C74001F 7F03BA14
1ED40024 7ED6AA14
88760001 2C030000
40820028 1C74001F
7C83D214 7F03C378
38A0001F 3D808000
618C31F4 7D8903A6
4E800421 4800001C
7F03C378 3880001F
3D808000 618CC160
B07E01C9 3B200000
3C608048 80639D30
5463443E 2C030208
4082017C 38600000
3D808000 618C5610
7D8903A6 4E800421
3A940001 2C140004
4180FFA0 3A800000
3ABF0060 3AFE0247
3B5900CF 1C74000A
7C791B78 3A800000
3ABF0060 3AFE01CB
3B590034 1C74001F
7F03BA14 1ED40024
7ED6AA14 88760001
2C030000 40820028
1C74000A 7C83D214
7F03C378 38A0000A
1C74001F 7C83D214
7F03C378 38A0001F
3D808000 618C31F4
7D8903A6 4E800421
4800001C 7F03C378
3880000A 3D808000
3880001F 3D808000
618CC160 7D8903A6
4E800421 3A940001
2C140004 4180FFA0
3A800000 3ABF0060
3AFE026F 3B5900F7
1C74001D 7F03BA14
3AFE0247 3B5900CF
1C74000A 7F03BA14
1ED40024 7ED6AA14
88760001 2C030000
40820028 1C74001D
40820028 1C74000A
7C83D214 7F03C378
38A0001D 3D808000
38A0000A 3D808000
618C31F4 7D8903A6
4E800421 4800001C
7F03C378 3880001D
7F03C378 3880000A
3D808000 618CC160
7D8903A6 4E800421
3A940001 2C140004
4180FFA0 4800001C
387E01CB 38800118
4180FFA0 3A800000
3ABF0060 3AFE026F
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
4800001C 387E01CB
38800118 3D808000
618CC160 7D8903A6
4E800421 3D808000
618CADF4 7D8903A6
4E800421 987E02E3
2C190000 41820044
387E02E4 38990394
38A00033 3D808000
618C31F4 7D8903A6
4E800421 3C60803D
6063AD40 80630000
81830088 A06C0001
907E0317 886C0006
907E031B 4800001C
387E02E4 3880003B
3D808000 618CC160
7D8903A6 4E800421
3D808000 618CADF4
2C190000 41820018
7F23CB78 3D808037
618CF1B0 7D8903A6
4E800421 7FC3F378
3880031F 38A00001
3D808000 618C55F0
7D8903A6 4E800421
987E02E3 2C190000
41820044 387E02E4
38990394 38A00033
3D808000 618C31F4
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
3C60803D 6063AD40
80630000 81830088
A06C0001 907E0317
886C0006 907E031B
4800001C 387E02E4
3880003B 3D808000
618CC160 7D8903A6
4E800421 2C190000
41820018 7F23CB78
3AD60200 7C16E000
4180FFA4 7EA3AB78
3D808037 618CF1B0
7D8903A6 4E800421
7FC3F378 3880031F
38A00001 3D808000
618C55F0 7D8903A6
4E800421 38600205
3D808037 618CF1E4
38600004 38800007
38A00000 3D808039
618C01F0 7D8903A6
4E800421 48000021
7C8802A6 38A00000
3D808038 618CFD54
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 4800012C
4E800021 7C0802A6
90010004 9421FF20
BE8100B0 806DB64C
83E30000 83CDB650
7FFFF214 3B600000
806DC18C 83A30024
2C1D0000 418200E0
3B7B0001 2C1B000F
418100D4 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
A07C0DA8 B07F002B
83CDB650 3BDE002D
93CDB650 3BFF002D
83BD0008 2C1D0000
4082FF28 BA8100B0
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
4800012C 4E800021
7C0802A6 90010004
9421FF20 BE8100B0
806DB64C 83E30000
83CDB650 7FFFF214
3B600000 806DC18C
83A30024 2C1D0000
418200E0 3B7B0001
2C1B000F 418100D4
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 A07C0DA8
B07F002B 83CDB650
3BDE002D 93CDB650
3BFF002D 83BD0008
2C1D0000 4082FF28
BA8100B0 800100E4
382100E0 7C0803A6
3C608017 00000000
4E800020 BA8100B0
800100E4 382100E0
7C0803A6 3C608017
60000000 00000000
C206DA34 00000038 #Recording/SendGamePostFrame.asm
7C0802A6 90010004
9421FF20 BE8100B0

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,60 @@
{
"Details": [
{
"Annotation": "Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm",
"Codetype": "Auto",
"InjectionAddress": "801D460C",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm",
"Codetype": "Auto",
"InjectionAddress": "801D14C8",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Core/Load Transformation.asm",
"Codetype": "Auto",
"InjectionAddress": "801D45EC",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Core/Reset isLoaded.asm",
"Codetype": "Auto",
"InjectionAddress": "801D4F14",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm",
"Codetype": "Auto",
"InjectionAddress": "801D4610",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm",
"Codetype": "Auto",
"InjectionAddress": "801D4724",
"Name": "Required: Slippi Recording",
"Tags": "[affects-gameplay]"
},
{
"Annotation": "Common/Preload Stadium Transformations/Toggle/PsPreloadToggleEnable.asm",
"Codetype": "Auto",
"InjectionAddress": "804DEC18",
"Name": "Required: Slippi Recording",
"Tags": ""
},
{
"Annotation": "Online/Core/PreventFileAlarms/FreezeStadium.asm",
"Codetype": "Auto",
"InjectionAddress": "801D4578",
"Name": "Required: Slippi Online",
"Tags": "[affects-gameplay]"
}
]
}

View File

@@ -539,55 +539,6 @@
"Annotation": "Common/IncrementFrameIndex.asm",
"Tags": ""
},
{
"InjectionAddress": "801D460C",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D14C8",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D45EC",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/Load Transformation.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D4F14",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/Reset isLoaded.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D4610",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D4724",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "804DEC18",
"Name": "Required: Slippi Recording",
"Codetype": "Auto",
"Annotation": "Common/Preload Stadium Transformations/Toggle/PsPreloadToggleEnable.asm",
"Tags": ""
},
{
"InjectionAddress": "801C154C",
"Name": "Required: Slippi Recording",
@@ -791,6 +742,34 @@
"Annotation": "Online/Core/Hacks/PreventPadAlarmDuringRollback.asm",
"Tags": ""
},
{
"InjectionAddress": "801D2D38",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Core/Hacks/Stadium/ChangeJumbotronText.asm",
"Tags": ""
},
{
"InjectionAddress": "801D4760",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Core/Hacks/Stadium/GrPsxIsValid.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "801D457C",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Core/Hacks/Stadium/IngameCheckIfFrozen.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "800165AC",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Core/Hacks/Stadium/StadiumFileLoad.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "8038E910",
"Name": "Required: Slippi Online",
@@ -812,13 +791,6 @@
"Annotation": "Online/Core/Music/VolumeChange.asm",
"Tags": ""
},
{
"InjectionAddress": "801D4578",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Core/PreventFileAlarms/FreezeStadium.asm",
"Tags": "[affects-gameplay]"
},
{
"InjectionAddress": "80023FFC",
"Name": "Required: Slippi Online",
@@ -1190,6 +1162,48 @@
"Annotation": "Online/Menus/SSS/ExitSSSUponStageSelect.asm",
"Tags": ""
},
{
"InjectionAddress": "80259E90",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/CheckForFrozenOnStageName.asm",
"Tags": ""
},
{
"InjectionAddress": "80259E34",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/CheckForToggledOnStageName.asm",
"Tags": ""
},
{
"InjectionAddress": "8025A530",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/CursorOnHoverStadium.asm",
"Tags": ""
},
{
"InjectionAddress": "80259FB4",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/IncMaxNames.asm",
"Tags": ""
},
{
"InjectionAddress": "8025AC6C",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/StageSelectTextProc.asm",
"Tags": ""
},
{
"InjectionAddress": "80259FAC",
"Name": "Required: Slippi Online",
"Codetype": "Auto",
"Annotation": "Online/Menus/SSS/FrozenStadiumToggle/StoreNameId.asm",
"Tags": ""
},
{
"InjectionAddress": "8022B044",
"Name": "Required: Slippi Online",

View File

@@ -2053,6 +2053,7 @@ void CEXISlippi::prepareOnlineMatchState()
u8 remotePlayersReady = 0;
auto userInfo = user->GetUserInfo();
u16 alt_stage_mode = 0;
if (mmState == SlippiMatchmaking::ProcessState::CONNECTION_SUCCESS)
{
@@ -2304,6 +2305,7 @@ void CEXISlippi::prepareOnlineMatchState()
// Stage selected by this player, use that selection
stageId = selections->stageId;
alt_stage_mode = selections->alt_stage_mode;
break;
}
@@ -2438,6 +2440,12 @@ void CEXISlippi::prepareOnlineMatchState()
*gameBitField3 = pauseAllowed ? *gameBitField3 & 0xF7 : *gameBitField3 | 0x8;
//*gameBitField3 = *gameBitField3 | 0x8;
// Overwrite alt_stage_mode if in ranked
if (!pauseAllowed)
{
alt_stage_mode = 0;
}
// Group players into left/right side for team splash screen display
for (int i = 0; i < 4; i++)
{
@@ -2579,6 +2587,9 @@ void CEXISlippi::prepareOnlineMatchState()
std::string matchId = recentMmResult.id;
matchId.resize(51);
m_read_queue.insert(m_read_queue.end(), matchId.begin(), matchId.end());
// Add alt stage mode to output
m_read_queue.push_back(static_cast<u8>(alt_stage_mode));
}
u16 CEXISlippi::getRandomStage()
@@ -2613,6 +2624,7 @@ void CEXISlippi::setMatchSelections(u8 *payload)
s.stageId = Common::swap16(&payload[4]);
u8 stageSelectOption = payload[6];
// u8 onlineMode = payload[7];
s.alt_stage_mode = payload[8];
s.isStageSelected = stageSelectOption == 1 || stageSelectOption == 3;
if (stageSelectOption == 3)
@@ -2620,8 +2632,8 @@ void CEXISlippi::setMatchSelections(u8 *payload)
// If stage requested is random, select a random stage
s.stageId = getRandomStage();
}
INFO_LOG(SLIPPI, "LPS set char: %d, iSS: %d, %d, stage: %d, team: %d", s.isCharacterSelected, stageSelectOption,
s.isStageSelected, s.stageId, s.teamId);
INFO_LOG(SLIPPI, "LPS set char: %d, iSS: %d, %d, stage: %d, alt stage: %d, team: %d",
s.isCharacterSelected, stageSelectOption, s.isStageSelected, s.stageId, s.alt_stage_mode, s.teamId);
s.rngOffset = generator() % 0xFFFF;

View File

@@ -136,7 +136,7 @@ class CEXISlippi : public IEXIDevice
{CMD_LOAD_SAVESTATE, 32},
{CMD_GET_MATCH_STATE, 0},
{CMD_FIND_OPPONENT, 19},
{CMD_SET_MATCH_SELECTIONS, 8},
{CMD_SET_MATCH_SELECTIONS, 9},
{CMD_SEND_CHAT_MESSAGE, 2},
{CMD_OPEN_LOGIN, 0},
{CMD_LOGOUT, 0},

View File

@@ -32,6 +32,18 @@ u32 SlippiGameFileLoader::LoadFile(std::string fileName, std::string &data)
return (u32)data.size();
}
if (grpsx_strings.count(fileName))
{
std::vector<u8> buf;
FileMon::ReadFileWithName(fileName, buf);
std::string contents(buf.begin(), buf.end());
fileCache[fileName] = contents;
data = fileCache[fileName];
INFO_LOG(SLIPPI, "Preloaded Transformation: %s -> %d", fileName.c_str(), (u32)data.size());
return (u32)data.size();
}
INFO_LOG(SLIPPI, "Loading file: %s", fileName.c_str());
std::string gameFilePath = getFilePath(fileName);

View File

@@ -5,12 +5,16 @@
#include <string>
#include <unordered_map>
#include <vector>
#include <set>
class SlippiGameFileLoader
{
public:
u32 LoadFile(std::string fileName, std::string &contents);
// static stadium transformation files
std::set<std::string> grpsx_strings = {"GrPs1.dat", "GrPs2.dat", "GrPs3.dat", "GrPs4.dat"};
protected:
std::unordered_map<std::string, std::string> fileCache;
open_vcdiff::VCDiffDecoder decoder;

View File

@@ -534,6 +534,7 @@ void SlippiNetplayClient::writeToPacket(sf::Packet &packet, SlippiPlayerSelectio
packet << s.stageId << s.isStageSelected;
packet << s.rngOffset;
packet << s.teamId;
packet << s.alt_stage_mode;
}
void SlippiNetplayClient::WriteChatMessageToPacket(sf::Packet &packet, int messageId, u8 playerIdx)
@@ -639,6 +640,11 @@ std::unique_ptr<SlippiPlayerSelections> SlippiNetplayClient::readSelectionsFromP
ERROR_LOG(SLIPPI_ONLINE, "Received invalid player selection");
s->error = true;
}
if (!(packet >> s->alt_stage_mode))
{
ERROR_LOG(SLIPPI_ONLINE, "Received invalid player selection");
s->error = true;
}
return std::move(s);
}

View File

@@ -83,6 +83,7 @@ class SlippiPlayerSelections
u16 stageId = 0;
bool isStageSelected = false;
u8 alt_stage_mode{};
u32 rngOffset = 0;
@@ -97,6 +98,7 @@ class SlippiPlayerSelections
{
this->stageId = s.stageId;
this->isStageSelected = true;
this->alt_stage_mode = s.alt_stage_mode;
}
if (s.isCharacterSelected)