diff --git a/Output/Playback/GALE01r2.ini b/Output/Playback/GALE01r2.ini index 1f08eb15..6efa97bf 100644 --- a/Output/Playback/GALE01r2.ini +++ b/Output/Playback/GALE01r2.ini @@ -10,6 +10,7 @@ FastDiscSpeed = True $Required: General Codes $Required: Slippi Playback $Recommended: Normal Lag Reduction +$Optional: Show Player Names [Gecko] $Required: General Codes [Achilles, Dan Salvato, UnclePunch, tauKhan, Ptomerty, Cilan, Datel, Most] @@ -233,16 +234,16 @@ D0230030 3D808002 800100B4 382100B0 7C0803A6 881F2219 60000000 00000000 -C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm +C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 7C0802A6 90010004 9421FF50 BE810008 -38600570 3D808037 +386005EC 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 38800570 +938DB64C 388005EC 3D808000 618CC160 7D8903A6 4E800421 -386001A5 3D808037 +38600221 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DC0000 38600040 @@ -256,7 +257,7 @@ C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 3880000D 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 388001A5 +7FC3F378 38800221 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887E0000 @@ -301,93 +302,97 @@ C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 9862F234 887E019E 9862F238 887E019F 9862F23C 887E01A0 -987C056F 807E01A1 -3D808037 618CF1E4 +987C056F 387C0570 +389E01A1 38A0007C +3D808000 618C31F4 7D8903A6 4E800421 -7C7D1B78 93BC0008 -3860008A 987D0000 -7FA3EB78 38800001 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 7FA3EB78 -809E01A1 38A00000 +807E021D 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7D1B78 +93BC0008 3860008A +987D0000 7FA3EB78 +38800001 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -38800004 909C000C -7FA3EB78 48000055 -7C8802A6 3D808000 -618C55FC 7D8903A6 -4E800421 807C000C -3D808037 618CF1E4 +7FA3EB78 809E021D +38A00000 3D808000 +618C55F0 7D8903A6 +4E800421 38800004 +909C000C 7FA3EB78 +48000055 7C8802A6 +3D808000 618C55FC 7D8903A6 4E800421 -907C0010 907C0014 -7FA3EB78 48000041 -7C8802A6 3D808000 -618C55FC 7D8903A6 -4E800421 4800013C +807C000C 3D808037 +618CF1E4 7D8903A6 +4E800421 907C0010 +907C0014 7FA3EB78 +48000041 7C8802A6 +3D808000 618C55FC +7D8903A6 4E800421 +4800013C 4E800021 +2C050000 41820018 +80CDB64C 8066000C +38630008 7C632A14 +9066000C 4E800020 4E800021 2C050000 -41820018 80CDB64C -8066000C 38630008 -7C632A14 9066000C -4E800020 4E800021 -2C050000 41820108 -7C0802A6 90010004 -9421FF50 BE810008 -7C9E2378 7CBB2B78 -80BE0000 54A501FE -64BD8000 834DB64C -833A0014 2C030004 -41820014 2C030006 -41820014 2C0300C2 -41820014 3B9E0004 -48000048 3B9E0008 -48000040 389E0008 -7C7D2050 546301BA -64634800 907A0018 -3B9A0018 807E0004 -1C630008 7C83F214 -387D0004 7C641850 +41820108 7C0802A6 +90010004 9421FF50 +BE810008 7C9E2378 +7CBB2B78 80BE0000 +54A501FE 64BD8000 +834DB64C 833A0014 +2C030004 41820014 +2C030006 41820014 +2C0300C2 41820014 +3B9E0004 48000048 +3B9E0008 48000040 +389E0008 7C7D2050 546301BA 64634800 -3863FFFC 90640004 -93B90000 93790004 -38790008 7FA4EB78 -7F65DB78 3D808000 -618C31F4 7D8903A6 -4E800421 3B390008 -7F39DA14 933A0014 -7FA3EB78 7F84E378 -7F65DB78 3D808000 -618C31F4 7D8903A6 -4E800421 7FA3EB78 -7F64DB78 3D808032 -618C8F50 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -38600000 809C0014 -90640000 7FA3EB78 -809E01A1 3D808032 -618C8F50 7D8903A6 -4E800421 38600004 -38800007 38A00000 -3D808039 618C01F0 +907A0018 3B9A0018 +807E0004 1C630008 +7C83F214 387D0004 +7C641850 546301BA +64634800 3863FFFC +90640004 93B90000 +93790004 38790008 +7FA4EB78 7F65DB78 +3D808000 618C31F4 +7D8903A6 4E800421 +3B390008 7F39DA14 +933A0014 7FA3EB78 +7F84E378 7F65DB78 +3D808000 618C31F4 +7D8903A6 4E800421 +7FA3EB78 7F64DB78 +3D808032 618C8F50 7D8903A6 4E800421 -48000021 7C8802A6 -38A00000 3D808038 -618CFD54 7D8903A6 -4E800421 4800004C -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C -83A30000 887D0002 -2C030000 41820010 -807D0003 3C80804D -90645F90 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 BA810008 800100B4 382100B0 7C0803A6 -3C608017 00000000 +4E800020 38600000 +809C0014 90640000 +7FA3EB78 809E021D +3D808032 618C8F50 +7D8903A6 4E800421 +38600004 38800007 +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 48000021 +7C8802A6 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +4800004C 4E800021 +7C0802A6 90010004 +9421FF50 BE810008 +806DB64C 83A30000 +887D0002 2C030000 +41820010 807D0003 +3C80804D 90645F90 +BA810008 800100B4 +382100B0 7C0803A6 +4E800020 BA810008 +800100B4 382100B0 +7C0803A6 3C608017 +60000000 00000000 C216D304 00000009 #Playback/Core/RestoreLRAStart.asm 806DB64C 80630000 88630000 2C030002 @@ -900,6 +905,164 @@ $Recommended: Normal Lag Reduction [Hannes Mann] 043761EC 4800001C 04376238 48000018 +$Optional: Show Player Names [Fizzi, UnclePunch, Enzyme, jmlee337] +*Show players' Slippi Online display names as HUD elements when available +C216E9B4 0000009A #Playback/Show Player Names/InitInGame.asm +48000088 4E800021 +3EA8F5C3 000000FF +3F1EB852 3F466666 +C1C07AE1 3C6F34D7 +3F4CCCCD 41A51EB8 +00000000 3D75C28F +43160000 3F0A3D71 +00000000 4E800021 +7C0802A6 90010004 +9421FF50 BE810008 +7C7F1B78 880DB6CC +2C000001 41820018 +7FE3FB78 3D808039 +618C10D8 7D8903A6 +4E800421 BA810008 +800100B4 382100B0 +7C0803A6 4E800020 +7C0802A6 90010004 +9421FF50 BE810008 +3C60804D 60636D5C +80630000 3C80803F +608494D0 3D808038 +618C0358 7D8903A6 +4E800421 80630004 +80630000 3D808036 +618CA590 7D8903A6 +4E800421 7C7E1B78 +38600013 38800014 +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 7C7D1B78 +7FA3EB78 888DC1AB +7FC5F378 3D808039 +618C0A70 7D8903A6 +4E800421 7FA3EB78 +4BFFFF25 7C8802A6 +38A00008 3D808039 +618C075C 7D8903A6 +4E800421 3C600000 +60631000 907D0024 +38600002 7FA4EB78 +38A00009 38C0000D +38E00000 3900000C +39200050 39400008 +3D80803A 618C611C +7D8903A6 4E800421 +7C7F1B78 4BFFFE91 +7F8802A6 834DB64C +3A800000 3EA0804A +62B50FF0 7E83A378 +3D808003 618C241C +7D8903A6 4E800421 +2C030003 41820308 +387A0570 1C94001F +7F032214 7F03C378 +3D808032 618C5B04 +7D8903A6 4E800421 +2C040000 418202E0 +7E83A378 3D80802F +618C3424 7D8903A6 +4E800421 C0230000 +D0210070 38600002 +7FE4FB78 3D80803A +618C6754 7D8903A6 +4E800421 7C7D1B78 +38800001 989D0048 +989D004A 989D004C +989D0049 C03C0024 +D03D0024 D03D0028 +C0210070 C05C0018 +EC21102A D03D0000 +C03C001C D03D0004 +C03C0020 D03D0008 +C03C0028 D03D000C +D03D0010 4CC63242 +C03C0030 C05C0030 +7FA3EB78 7F04C378 +3D80803A 618C6B98 +7D8903A6 4E800421 +7FA3EB78 38800000 +C03C002C C05C002C +3D80803A 618C7548 +7D8903A6 4E800421 +3860000E 3880000F +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 7C771B78 +3C60804A 60631ED0 +80630000 3D808037 +618C0E44 7D8903A6 +4E800421 7C761B78 +7EE3BB78 888DC1A9 +7EC5B378 3D808039 +618C0A70 7D8903A6 +4E800421 7EE3BB78 +3C808039 60841070 +38A0000C 38C00000 +3D808039 618C069C +7D8903A6 4E800421 +7E83A378 3D80802F +618C3424 7D8903A6 +4E800421 C0230000 +C05C000C EC21102A +D0360038 C03C0010 +D036003C C03C0008 +D0360030 7EC3B378 +38810080 38A00001 +38C0FFFF 3D808001 +618C1E24 7D8903A6 +4E800421 80610080 +38800000 90830040 +80610080 80630018 +80830014 60840001 +90830014 80630004 +80830014 60840001 +90830014 80630004 +80630008 8063000C +C03C0000 D023000C +809C0004 90830004 +3B200000 807D005C +38800000 3D80803A +618C6FEC 7D8903A6 +4E800421 3943000F +3D808040 618CCB00 +887D004F 1C630004 +3C80804D 60841124 +7C63202E 81630004 +886A0000 2C03000B +41820064 2C030020 +4182001C 2C030040 +41820034 886A0000 +2C03000F 41820050 +48000044 886A0001 +1C630002 7C6360AE +38800014 7C632050 +7F391A14 394A0002 +4BFFFFB8 886A0001 +1C630002 7C6358AE +38800014 7C632050 +7F391A14 394A0002 +4BFFFF98 394A0001 +4BFFFF90 2C19003C +40800008 3B20003C +2C190090 40810008 +3B200090 3C004330 +C84298A8 6F238000 +90010080 90610084 +C8210080 EC211028 +C05C0014 EC2100B2 +D036002C 3A940001 +2C140006 4180FCD8 +BA810008 800100B4 +382100B0 7C0803A6 +8001001C 00000000 + $Optional: Game Music OFF [UnclePunch] *Keep checked if you want music OFF. Uncheck "Game Music ON". 04023FFC 38800000 diff --git a/Output/Playback/GALJ01r2.ini b/Output/Playback/GALJ01r2.ini index 00e0ec3d..6e6f20ae 100644 --- a/Output/Playback/GALJ01r2.ini +++ b/Output/Playback/GALJ01r2.ini @@ -10,6 +10,7 @@ FastDiscSpeed = True $Required: General Codes $Required: Slippi Playback $Recommended: Normal Lag Reduction +$Optional: Show Player Names [Gecko] $Required: General Codes [Achilles, Dan Salvato, UnclePunch, tauKhan, Ptomerty, Cilan, Datel, Most] @@ -233,16 +234,16 @@ D0230030 3D808002 800100B4 382100B0 7C0803A6 881F2219 60000000 00000000 -C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm +C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 7C0802A6 90010004 9421FF50 BE810008 -38600570 3D808037 +386005EC 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 38800570 +938DB64C 388005EC 3D808000 618CC160 7D8903A6 4E800421 -386001A5 3D808037 +38600221 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DC0000 38600040 @@ -256,7 +257,7 @@ C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 3880000D 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 388001A5 +7FC3F378 38800221 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887E0000 @@ -301,93 +302,97 @@ C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 9862F234 887E019E 9862F238 887E019F 9862F23C 887E01A0 -987C056F 807E01A1 -3D808037 618CF1E4 +987C056F 387C0570 +389E01A1 38A0007C +3D808000 618C31F4 7D8903A6 4E800421 -7C7D1B78 93BC0008 -3860008A 987D0000 -7FA3EB78 38800001 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 7FA3EB78 -809E01A1 38A00000 +807E021D 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7D1B78 +93BC0008 3860008A +987D0000 7FA3EB78 +38800001 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -38800004 909C000C -7FA3EB78 48000055 -7C8802A6 3D808000 -618C55FC 7D8903A6 -4E800421 807C000C -3D808037 618CF1E4 +7FA3EB78 809E021D +38A00000 3D808000 +618C55F0 7D8903A6 +4E800421 38800004 +909C000C 7FA3EB78 +48000055 7C8802A6 +3D808000 618C55FC 7D8903A6 4E800421 -907C0010 907C0014 -7FA3EB78 48000041 -7C8802A6 3D808000 -618C55FC 7D8903A6 -4E800421 4800013C +807C000C 3D808037 +618CF1E4 7D8903A6 +4E800421 907C0010 +907C0014 7FA3EB78 +48000041 7C8802A6 +3D808000 618C55FC +7D8903A6 4E800421 +4800013C 4E800021 +2C050000 41820018 +80CDB64C 8066000C +38630008 7C632A14 +9066000C 4E800020 4E800021 2C050000 -41820018 80CDB64C -8066000C 38630008 -7C632A14 9066000C -4E800020 4E800021 -2C050000 41820108 -7C0802A6 90010004 -9421FF50 BE810008 -7C9E2378 7CBB2B78 -80BE0000 54A501FE -64BD8000 834DB64C -833A0014 2C030004 -41820014 2C030006 -41820014 2C0300C2 -41820014 3B9E0004 -48000048 3B9E0008 -48000040 389E0008 -7C7D2050 546301BA -64634800 907A0018 -3B9A0018 807E0004 -1C630008 7C83F214 -387D0004 7C641850 +41820108 7C0802A6 +90010004 9421FF50 +BE810008 7C9E2378 +7CBB2B78 80BE0000 +54A501FE 64BD8000 +834DB64C 833A0014 +2C030004 41820014 +2C030006 41820014 +2C0300C2 41820014 +3B9E0004 48000048 +3B9E0008 48000040 +389E0008 7C7D2050 546301BA 64634800 -3863FFFC 90640004 -93B90000 93790004 -38790008 7FA4EB78 -7F65DB78 3D808000 -618C31F4 7D8903A6 -4E800421 3B390008 -7F39DA14 933A0014 -7FA3EB78 7F84E378 -7F65DB78 3D808000 -618C31F4 7D8903A6 -4E800421 7FA3EB78 -7F64DB78 3D808032 -618C8F50 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -38600000 809C0014 -90640000 7FA3EB78 -809E01A1 3D808032 -618C8F50 7D8903A6 -4E800421 38600004 -38800007 38A00000 -3D808039 618C01F0 +907A0018 3B9A0018 +807E0004 1C630008 +7C83F214 387D0004 +7C641850 546301BA +64634800 3863FFFC +90640004 93B90000 +93790004 38790008 +7FA4EB78 7F65DB78 +3D808000 618C31F4 +7D8903A6 4E800421 +3B390008 7F39DA14 +933A0014 7FA3EB78 +7F84E378 7F65DB78 +3D808000 618C31F4 +7D8903A6 4E800421 +7FA3EB78 7F64DB78 +3D808032 618C8F50 7D8903A6 4E800421 -48000021 7C8802A6 -38A00000 3D808038 -618CFD54 7D8903A6 -4E800421 4800004C -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C -83A30000 887D0002 -2C030000 41820010 -807D0003 3C80804D -90645F90 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 BA810008 800100B4 382100B0 7C0803A6 -3C608017 00000000 +4E800020 38600000 +809C0014 90640000 +7FA3EB78 809E021D +3D808032 618C8F50 +7D8903A6 4E800421 +38600004 38800007 +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 48000021 +7C8802A6 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +4800004C 4E800021 +7C0802A6 90010004 +9421FF50 BE810008 +806DB64C 83A30000 +887D0002 2C030000 +41820010 807D0003 +3C80804D 90645F90 +BA810008 800100B4 +382100B0 7C0803A6 +4E800020 BA810008 +800100B4 382100B0 +7C0803A6 3C608017 +60000000 00000000 C216D304 00000009 #Playback/Core/RestoreLRAStart.asm 806DB64C 80630000 88630000 2C030002 @@ -900,6 +905,164 @@ $Recommended: Normal Lag Reduction [Hannes Mann] 043761EC 4800001C 04376238 48000018 +$Optional: Show Player Names [Fizzi, UnclePunch, Enzyme, jmlee337] +*Show players' Slippi Online display names as HUD elements when available +C216E9B4 0000009A #Playback/Show Player Names/InitInGame.asm +48000088 4E800021 +3EA8F5C3 000000FF +3F1EB852 3F466666 +C1C07AE1 3C6F34D7 +3F4CCCCD 41A51EB8 +00000000 3D75C28F +43160000 3F0A3D71 +00000000 4E800021 +7C0802A6 90010004 +9421FF50 BE810008 +7C7F1B78 880DB6CC +2C000001 41820018 +7FE3FB78 3D808039 +618C10D8 7D8903A6 +4E800421 BA810008 +800100B4 382100B0 +7C0803A6 4E800020 +7C0802A6 90010004 +9421FF50 BE810008 +3C60804D 60636D5C +80630000 3C80803F +608494D0 3D808038 +618C0358 7D8903A6 +4E800421 80630004 +80630000 3D808036 +618CA590 7D8903A6 +4E800421 7C7E1B78 +38600013 38800014 +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 7C7D1B78 +7FA3EB78 888DC1AB +7FC5F378 3D808039 +618C0A70 7D8903A6 +4E800421 7FA3EB78 +4BFFFF25 7C8802A6 +38A00008 3D808039 +618C075C 7D8903A6 +4E800421 3C600000 +60631000 907D0024 +38600002 7FA4EB78 +38A00009 38C0000D +38E00000 3900000C +39200050 39400008 +3D80803A 618C611C +7D8903A6 4E800421 +7C7F1B78 4BFFFE91 +7F8802A6 834DB64C +3A800000 3EA0804A +62B50FF0 7E83A378 +3D808003 618C241C +7D8903A6 4E800421 +2C030003 41820308 +387A0570 1C94001F +7F032214 7F03C378 +3D808032 618C5B04 +7D8903A6 4E800421 +2C040000 418202E0 +7E83A378 3D80802F +618C3424 7D8903A6 +4E800421 C0230000 +D0210070 38600002 +7FE4FB78 3D80803A +618C6754 7D8903A6 +4E800421 7C7D1B78 +38800001 989D0048 +989D004A 989D004C +989D0049 C03C0024 +D03D0024 D03D0028 +C0210070 C05C0018 +EC21102A D03D0000 +C03C001C D03D0004 +C03C0020 D03D0008 +C03C0028 D03D000C +D03D0010 4CC63242 +C03C0030 C05C0030 +7FA3EB78 7F04C378 +3D80803A 618C6B98 +7D8903A6 4E800421 +7FA3EB78 38800000 +C03C002C C05C002C +3D80803A 618C7548 +7D8903A6 4E800421 +3860000E 3880000F +38A00000 3D808039 +618C01F0 7D8903A6 +4E800421 7C771B78 +3C60804A 60631ED0 +80630000 3D808037 +618C0E44 7D8903A6 +4E800421 7C761B78 +7EE3BB78 888DC1A9 +7EC5B378 3D808039 +618C0A70 7D8903A6 +4E800421 7EE3BB78 +3C808039 60841070 +38A0000C 38C00000 +3D808039 618C069C +7D8903A6 4E800421 +7E83A378 3D80802F +618C3424 7D8903A6 +4E800421 C0230000 +C05C000C EC21102A +D0360038 C03C0010 +D036003C C03C0008 +D0360030 7EC3B378 +38810080 38A00001 +38C0FFFF 3D808001 +618C1E24 7D8903A6 +4E800421 80610080 +38800000 90830040 +80610080 80630018 +80830014 60840001 +90830014 80630004 +80830014 60840001 +90830014 80630004 +80630008 8063000C +C03C0000 D023000C +809C0004 90830004 +3B200000 807D005C +38800000 3D80803A +618C6FEC 7D8903A6 +4E800421 3943000F +3D808040 618CCB00 +887D004F 1C630004 +3C80804D 60841124 +7C63202E 81630004 +886A0000 2C03000B +41820064 2C030020 +4182001C 2C030040 +41820034 886A0000 +2C03000F 41820050 +48000044 886A0001 +1C630002 7C6360AE +38800014 7C632050 +7F391A14 394A0002 +4BFFFFB8 886A0001 +1C630002 7C6358AE +38800014 7C632050 +7F391A14 394A0002 +4BFFFF98 394A0001 +4BFFFF90 2C19003C +40800008 3B20003C +2C190090 40810008 +3B200090 3C004330 +C84298A8 6F238000 +90010080 90610084 +C8210080 EC211028 +C05C0014 EC2100B2 +D036002C 3A940001 +2C140006 4180FCD8 +BA810008 800100B4 +382100B0 7C0803A6 +8001001C 00000000 + $Optional: Game Music OFF [UnclePunch] *Keep checked if you want music OFF. Uncheck "Game Music ON". 04023FFC 38800000 diff --git a/Playback/Core/RestoreGameInfo.asm b/Playback/Core/RestoreGameInfo.asm index d1e8016b..035b5af5 100644 --- a/Playback/Core/RestoreGameInfo.asm +++ b/Playback/Core/RestoreGameInfo.asm @@ -197,6 +197,12 @@ RESTORE_GAME_INFO_NAMETAG_INC_LOOP: lbz r3,ShouldResyncBool(BufferPointer) stb r3,PDB_SHOULD_RESYNC(REG_DirectoryBuffer) +# Get player display names + addi r3, REG_DirectoryBuffer, PDB_DISPLAY_NAMES # destination + addi r4, BufferPointer, DisplayNameData # source + li r5, DisplayNameData_Length # length + branchl r12, memcpy + #--------------- Apply Dynamic Gecko Codes --------------------- # Step 1: Grab size of gecko code list and create a buffer to store them # TODO: Make sure that returned size includes the termination sequence (8 bytes) diff --git a/Playback/Playback.s b/Playback/Playback.s index 687a2a0c..d53c309c 100644 --- a/Playback/Playback.s +++ b/Playback/Playback.s @@ -63,8 +63,8 @@ lwz \reg, -0x62A0(\reg) .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_SIZE, PDB_SHOULD_RESYNC + 1 +.set PDB_DISPLAY_NAMES, PDB_SHOULD_RESYNC + 1 # string (31)[4] +.set PDB_SIZE, PDB_DISPLAY_NAMES + 124 ################################################################################ # Buffer Offsets @@ -127,16 +127,16 @@ lwz \reg, -0x62A0(\reg) .set PALBool_Length,0x1 .set PSPreloadBool,0x19E .set PSPreloadBool_Length,0x1 - .set PSPreloadBool,0x19E - .set PSPreloadBool_Length,0x1 .set FrozenPSBool,0x19F .set FrozenPSBool_Length,0x1 .set ShouldResyncBool,0x1A0 .set ShouldResyncBool_Length,0x1 - .set GeckoListSize,0x1A1 + .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 + GeckoListSize_Length + .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 diff --git a/Playback/Show Player Names/InitInGame.asm b/Playback/Show Player Names/InitInGame.asm new file mode 100644 index 00000000..26c4481b --- /dev/null +++ b/Playback/Show Player Names/InitInGame.asm @@ -0,0 +1,388 @@ +################################################################################ +# Address: 0x8016e9b4 +################################################################################ + +.include "Common/Common.s" +.include "Playback/Playback.s" + +b CODE_START + +DATA_BLRL: +blrl +# BG values +.set DOFST_PLAYERBG_OPA, 0 +.float 0.33 +.set DOFST_PLAYERBG_COLOR, DOFST_PLAYERBG_OPA + 4 +.byte 0,0,0,255 +.set DOFST_PLAYERBG_YSCALE, DOFST_PLAYERBG_COLOR + 4 +.float 0.62 +.set DOFST_PLAYERBG_XOFST, DOFST_PLAYERBG_YSCALE + 4 +.float 0.775 +.set DOFST_PLAYERBG_YOFST, DOFST_PLAYERBG_XOFST + 4 +.float -24.06 +# BG X scale per letter +.set DOFST_PLAYERBG_XSCALEMULT, DOFST_PLAYERBG_YOFST + 4 +.float 0.0146 + +.set DOFST_PLAYERTEXT_XPOS, DOFST_PLAYERBG_XSCALEMULT + 4 +.float 0.8 #higher values = right +.set DOFST_PLAYERTEXT_YPOS, DOFST_PLAYERTEXT_XPOS + 4 +.float 20.64 #higher values = down +.set DOFST_PLAYERTEXT_ZPOS, DOFST_PLAYERTEXT_YPOS + 4 +.float 0 +.set DOFST_PLAYERTEXT_CANVASSCALE, DOFST_PLAYERTEXT_ZPOS + 4 +.float 0.06 #0.0521 +.set DOFST_PLAYERTEXT_WIDTH, DOFST_PLAYERTEXT_CANVASSCALE + 4 +.float 150 +.set DOFST_PLAYERTEXT_SIZE, DOFST_PLAYERTEXT_WIDTH + 4 +.float 0.54 + +.set DOFST_FLOAT_ZERO, DOFST_PLAYERTEXT_SIZE + 4 +.float 0 + +######################################### +COBJ_CB: +blrl +.set REG_GOBJ,31 + +backup + +mr REG_GOBJ, r3 + +/* +# Check if paused +li r3,1 +branchl r12,0x801a45e8 +cmpwi r3,2 +beq COBJ_CB_Exit +*/ +# Check if paused +lbz r0, -0x4934 (r13) +cmpwi r0,1 +beq COBJ_CB_Exit + +# Draw camera +mr r3, REG_GOBJ +branchl r12,0x803910d8 + +COBJ_CB_Exit: +restore +blr +######################################### + +CODE_START: +backup + +# CObj stuff +.set COBJ_GXPRI, 8 +.set TEXT_GXPRI, 80 +.set TEXT_GXLINK, 12 + +.set REG_Canvas,31 +.set REG_COBJ,30 +.set REG_GOBJ,29 + +# Get HUD CObjDesc +load r3, 0x804d6d5c +lwz r3, 0x0 (r3) +load r4, 0x803f94d0 +branchl r12,0x80380358 +# Create CObj +lwz r3,0x4(r3) +lwz r3,0x0(r3) +branchl r12,0x8036a590 +mr REG_COBJ,r3 +# Create GObj +li r3,19 +li r4,20 +li r5,0 +branchl r12,0x803901f0 +mr REG_GOBJ,r3 +# Add object +mr r3,REG_GOBJ +lbz r4,-0x3E55(r13) +mr r5,REG_COBJ +branchl r12,0x80390a70 +# Init camera +mr r3,REG_GOBJ +bl COBJ_CB +mflr r4 +li r5, COBJ_GXPRI +branchl r12,0x8039075c +# Store COBJs GXLinks +load r3, 1 << TEXT_GXLINK +stw r3, 0x24 (REG_GOBJ) + +# Create canvas +li r3,2 +mr r4,REG_GOBJ +li r5, 9 +li r6, 13 +li r7, 0 +li r8, TEXT_GXLINK +li r9, TEXT_GXPRI +li r10, COBJ_GXPRI +branchl r12, 0x803a611c +mr REG_Canvas, r3 + +.set REG_TEXT_STRUCT, 29 +.set REG_DATA_ADDR, 28 +.set REG_STRING_BUF, 27 +.set REG_PDB_ADDR, 26 + +bl DATA_BLRL +mflr REG_DATA_ADDR + +# get PDB +lwz REG_PDB_ADDR, primaryDataBuffer(r13) + +########################## +## Display Player Names ## +########################## + +# Display all player names +.set REG_COUNT, 20 +.set REG_HUDPOS, 21 +.set REG_BG_JOBJ, 22 +.set REG_BG_GOBJ, 23 +.set REG_DISPLAY_NAME, 24 +li REG_COUNT, 0 +load REG_HUDPOS, 0x804a0ff0 +DISPLAY_NAME_LOOP: +#Check if player exists +mr r3, REG_COUNT +branchl r12, 0x8003241c +cmpwi r3, 3 +beq DISPLAY_NAME_INC_LOOP + +#Check if player display name exists +addi r3, REG_PDB_ADDR, PDB_DISPLAY_NAMES +mulli r4, REG_COUNT, 31 +add REG_DISPLAY_NAME, r3, r4 +mr r3, REG_DISPLAY_NAME +branchl r12,strlen +cmpwi r4, 0 +beq DISPLAY_NAME_INC_LOOP + +# Calculate X Position +#Get HUD Position +mr r3,REG_COUNT +branchl r12,0x802f3424 +# HUD X +lfs f1, 0x0(r3) +stfs f1, 0x70 (sp) + +# Start prepping player text struct +li r3, 2 +mr r4, REG_Canvas +branchl r12, Text_CreateStruct +mr REG_TEXT_STRUCT, r3 + +li r4, 0x1 +stb r4, 0x48(REG_TEXT_STRUCT) # Fixed Width +stb r4, 0x4A(REG_TEXT_STRUCT) # Set text to align center +stb r4, 0x4C(REG_TEXT_STRUCT) # Unk? +stb r4, 0x49(REG_TEXT_STRUCT) # kerning? + +# Scale Canvas Down +lfs f1, DOFST_PLAYERTEXT_CANVASSCALE(REG_DATA_ADDR) +stfs f1, 0x24(REG_TEXT_STRUCT) +stfs f1, 0x28(REG_TEXT_STRUCT) + +# Set struct position +lfs f1, 0x70 (sp) +lfs f2, DOFST_PLAYERTEXT_XPOS (REG_DATA_ADDR) +fadds f1,f1,f2 +stfs f1, 0x0(REG_TEXT_STRUCT) # X pos +lfs f1, DOFST_PLAYERTEXT_YPOS (REG_DATA_ADDR) +stfs f1, 0x4(REG_TEXT_STRUCT) # Y pos +lfs f1, DOFST_PLAYERTEXT_ZPOS (REG_DATA_ADDR) +stfs f1, 0x8(REG_TEXT_STRUCT) # Z pos + +# Set max width for text +lfs f1, DOFST_PLAYERTEXT_WIDTH(REG_DATA_ADDR) +stfs f1, 0xC(REG_TEXT_STRUCT) # Write width +stfs f1, 0x10(REG_TEXT_STRUCT) # I think this is height but I don't think it does anything + +############################# +## Create Player Name Text ## +############################# +# Initialize header +crset 6 # Dunno if this does anything? +lfs f1, DOFST_FLOAT_ZERO(REG_DATA_ADDR) +lfs f2, DOFST_FLOAT_ZERO(REG_DATA_ADDR) +mr r3, REG_TEXT_STRUCT +mr r4, REG_DISPLAY_NAME +branchl r12, Text_InitializeSubtext + +# Set header text size +mr r3, REG_TEXT_STRUCT +li r4, 0 +# Scale text X based on Aspect Ratio +lfs f1, DOFST_PLAYERTEXT_SIZE(REG_DATA_ADDR) +lfs f2, DOFST_PLAYERTEXT_SIZE(REG_DATA_ADDR) +branchl r12, Text_UpdateSubtextSize + +############################ +## Create Text Background ## +############################ + +#Create gobj +li r3,14 +li r4,15 +li r5,0 +branchl r12,0x803901f0 +mr REG_BG_GOBJ,r3 +#Create Background +load r3,0x804a1ed0 +lwz r3,0x0(r3) +branchl r12,0x80370e44 +mr REG_BG_JOBJ,r3 +# Add as object +mr r3,REG_BG_GOBJ +lbz r4, -0x3E57 (r13) +mr r5,REG_BG_JOBJ +branchl r12,0x80390a70 +# Add GX Link +mr r3,REG_BG_GOBJ +load r4,0x80391070 +li r5, TEXT_GXLINK +li r6,0 +branchl r12,0x8039069c + +# Get HUD pos +mr r3,REG_COUNT +branchl r12,0x802f3424 +# Set bg position +lfs f1,0x0 (r3) +lfs f2, DOFST_PLAYERBG_XOFST (REG_DATA_ADDR) +fadds f1,f1,f2 +stfs f1,0x38 (REG_BG_JOBJ) +lfs f1, DOFST_PLAYERBG_YOFST (REG_DATA_ADDR) +stfs f1,0x3C (REG_BG_JOBJ) +# Adjust scale +lfs f1, DOFST_PLAYERBG_YSCALE (REG_DATA_ADDR) +stfs f1, 0x30 (REG_BG_JOBJ) +# Get JOBJ 1 +mr r3,REG_BG_JOBJ +addi r4,sp,0x80 +li r5,1 +li r6,-1 +branchl r12,0x80011e24 +# Z transform = 0 +lwz r3,0x80(sp) +li r4,0 +stw r4,0x40(r3) +# Remove unneccessary dobjs +lwz r3,0x80(sp) +lwz r3,0x18(r3) #first dobj +lwz r4,0x14(r3) +ori r4,r4,0x1 +stw r4,0x14(r3) +lwz r3,0x4(r3) #next dobj +lwz r4,0x14(r3) +ori r4,r4,0x1 +stw r4,0x14(r3) +# Adjust opacity of BG +lwz r3,0x4(r3) #next dobj +lwz r3,0x8(r3) #mobj +lwz r3,0xC(r3) #material +lfs f1, DOFST_PLAYERBG_OPA (REG_DATA_ADDR) +stfs f1, 0xC(r3) +# Adjust color of BG +lwz r4, DOFST_PLAYERBG_COLOR (REG_DATA_ADDR) +stw r4, 0x4(r3) + +# Get total width of characters used in tag +.set CHAR_WIDTH_MAX, 20 +.set TAG_WIDTH_MIN, 60 +.set TAG_WIDTH_MAX, 144 +.set TEXTHEADER_SIZE, 15 +.set REG_WIDTH, 25 +.set REG_CURR, 10 +.set REG_WIDTH_INTERNAL, 12 +.set REG_WIDTH_EXTERNAL, 11 + +li REG_WIDTH,0 +# Get subtext contents +lwz r3, 0x5C(REG_TEXT_STRUCT) +li r4, 0 +branchl r12, 0x803a6fec # Text_GetSubtext +addi REG_CURR, r3, TEXTHEADER_SIZE #skip past header +load REG_WIDTH_INTERNAL, 0x8040cb00 +lbz r3,0x4F(REG_TEXT_STRUCT) +mulli r3,r3,4 +load r4,0x804d1124 +lwzx r3, r3, r4 +lwz REG_WIDTH_EXTERNAL, 0x4 (r3) +DISPLAY_NAME_COUNT_LOOP: +lbz r3,0x0(REG_CURR) +# Check if null character +cmpwi r3,0x0B +beq DISPLAY_NAME_COUNT_NULL +# Check if internal character +cmpwi r3,0x20 +beq DISPLAY_NAME_COUNT_INTERNAL +# Check if external character +cmpwi r3,0x40 +beq DISPLAY_NAME_COUNT_EXTERNAL +# Check if end of text +lbz r3,0x0(REG_CURR) +cmpwi r3,0x0F +beq DISPLAY_NAME_COUNT_EXIT +b DISPLAY_NAME_COUNT_NULL + +DISPLAY_NAME_COUNT_INTERNAL: +lbz r3,0x1(REG_CURR) +mulli r3,r3,2 +lbzx r3,r3,REG_WIDTH_INTERNAL +li r4,CHAR_WIDTH_MAX +sub r3,r4,r3 +add REG_WIDTH,REG_WIDTH,r3 +addi REG_CURR,REG_CURR,2 +b DISPLAY_NAME_COUNT_LOOP +DISPLAY_NAME_COUNT_EXTERNAL: +lbz r3,0x1(REG_CURR) +mulli r3,r3,2 +lbzx r3,r3,REG_WIDTH_EXTERNAL +li r4,CHAR_WIDTH_MAX +sub r3,r4,r3 +add REG_WIDTH,REG_WIDTH,r3 +addi REG_CURR,REG_CURR,2 +b DISPLAY_NAME_COUNT_LOOP + +DISPLAY_NAME_COUNT_NULL: +addi REG_CURR,REG_CURR,1 +b DISPLAY_NAME_COUNT_LOOP +DISPLAY_NAME_COUNT_EXIT: + +# Check if tag is min width +cmpwi REG_WIDTH, TAG_WIDTH_MIN +bge 0x8 +li REG_WIDTH, TAG_WIDTH_MIN +cmpwi REG_WIDTH, TAG_WIDTH_MAX +ble 0x8 +li REG_WIDTH, TAG_WIDTH_MAX +# Cast to float +lis r0, 0x4330 +lfd f2, -0x6758 (rtoc) +xoris r3, REG_WIDTH,0x8000 +stw r0,0x80(sp) +stw r3,0x84(sp) +lfd f1,0x80(sp) +fsubs f1,f1,f2 #Convert To Float +# Multiply width by X to get background size +lfs f2, DOFST_PLAYERBG_XSCALEMULT (REG_DATA_ADDR) +fmuls f1,f1,f2 +stfs f1, 0x2C (REG_BG_JOBJ) + +DISPLAY_NAME_INC_LOOP: +addi REG_COUNT, REG_COUNT, 1 +cmpwi REG_COUNT, 6 +blt DISPLAY_NAME_LOOP + +CODE_END: +restore + +EXIT: +lwz r0, 0x001C (sp) diff --git a/playback.json b/playback.json index e59dbce6..244bafcb 100644 --- a/playback.json +++ b/playback.json @@ -15,6 +15,7 @@ "$Required: General Codes", "$Required: Slippi Playback", "$Recommended: Normal Lag Reduction", + "$Optional: Show Player Names", "", "[Gecko]" ] @@ -34,6 +35,7 @@ "$Required: General Codes", "$Required: Slippi Playback", "$Recommended: Normal Lag Reduction", + "$Optional: Show Player Names", "", "[Gecko]" ] @@ -137,6 +139,26 @@ } ] }, + { + "name": "Optional: Show Player Names", + "authors": [ + "Fizzi", + "UnclePunch", + "Enzyme", + "jmlee337" + ], + "description": [ + "Show players' Slippi Online display names as HUD elements when available" + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "Playback/Show Player Names", + "isRecursive": true, + "annotation": "Show Player Names" + } + ] + }, { "name": "Optional: Game Music OFF", "authors": [