diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml new file mode 100644 index 00000000..23eaf3e2 --- /dev/null +++ b/.github/workflows/build_check.yml @@ -0,0 +1,25 @@ +name: Build Check + +on: + push: + branches: + - "**" + pull_request: + branches: + - "**" + +jobs: + ubuntu64: + name: "Build Check" + runs-on: ubuntu-latest + steps: + - name: "Checkout" + uses: actions/checkout@v2 + with: + submodules: recursive + - name: "Build" + if: success() + working-directory: ${{ github.workspace }} + run: | + sudo docker run --volume=${PWD}:/work --workdir=/work nikhilnarayana/devkitpro-slippi:latest make ini list + - uses: numtide/clean-git-action@v1 diff --git a/.gitignore b/.gitignore index adb2c53b..dbe4d61c 100644 --- a/.gitignore +++ b/.gitignore @@ -219,9 +219,14 @@ pip-log.txt .idea/ +.vscode + +Output/Console/install.bat +Output/Console/install-core-only.bat Output/Netplay/install.bat Output/Netplay/build-netplay.bat - Shortcut.lnk Output/Playback/install.bat Output/Playback/build-playback.bat - Shortcut.lnk +Output/Bootloader/build-bootloader.bat - Shortcut.lnk ./build-netplay0.sh ./netplay0.json \ No newline at end of file diff --git a/Binary/FreezeAllStages.bin b/Binary/FreezeAllStages.bin deleted file mode 100644 index 3c246228..00000000 Binary files a/Binary/FreezeAllStages.bin and /dev/null differ diff --git a/Binary/PreventWobbling.bin b/Binary/PreventWobbling.bin deleted file mode 100644 index 36a418e9..00000000 Binary files a/Binary/PreventWobbling.bin and /dev/null differ diff --git a/Binary/UCF_0.84.bin b/Binary/UCF_0.84.bin new file mode 100644 index 00000000..dd2cb0f4 Binary files /dev/null and b/Binary/UCF_0.84.bin differ diff --git a/Binary/m-ex.bin b/Binary/m-ex.bin new file mode 100644 index 00000000..1ae51b97 Binary files /dev/null and b/Binary/m-ex.bin differ diff --git a/Bootloader/AddHeap.asm b/Bootloader/AddHeap.asm new file mode 100644 index 00000000..98911480 --- /dev/null +++ b/Bootloader/AddHeap.asm @@ -0,0 +1,10 @@ +################################################################################ +# Address: 8015ff60 +################################################################################ + +################################################################################ +# Description: adjusts the number of heaps from 4 to 6. +# Slippi uses heap 5 and m-ex uses heap 6. +################################################################################ + +li r4, 6 diff --git a/Bootloader/main.asm b/Bootloader/main.asm index 6238e30f..17ab138f 100644 --- a/Bootloader/main.asm +++ b/Bootloader/main.asm @@ -13,6 +13,7 @@ # r5 = read (0x0) or write (0x1) ################################################################################ .include "Common/Common.s" +.include "Online/Online.s" .set REG_HeapLo,31 .set REG_FileSize,28 @@ -62,7 +63,7 @@ backup rlwinm REG_FileSize, REG_FileSize, 0, 0, 26 #Create heap of this size add r4,REG_HeapLo,REG_FileSize #heap hi = start + filesize - addi r4,r4, 32 #heap hi, 32 bytes padding? + addi r4,r4,32+32+128 #heap hi, 32 bytes per allocation? Also add space for file buffer mr r3,REG_HeapLo #heap lo = start mr REG_HeapLo,r4 #new start = heap hi branchl r12,0x803440e8 @@ -100,6 +101,12 @@ backup mflr r4 branchl r12, FN_ProcessGecko +#Alloc from this heap + mr r3,REG_HeapID + li r4,128 + branchl r12,0x80343ef0 + stw r3,OFST_R13_SB_ADDR(r13) + b Exit Callback_ProcessGeckoCode: diff --git a/Online/Core/EXIFileLoad/AllocBuffer.asm b/Common/AllocBuffer.asm similarity index 100% rename from Online/Core/EXIFileLoad/AllocBuffer.asm rename to Common/AllocBuffer.asm diff --git a/Common/Common.s b/Common/Common.s index e3a2053b..0de8e53f 100644 --- a/Common/Common.s +++ b/Common/Common.s @@ -1,3 +1,5 @@ +.ifndef HEADER_COMMON + ################################################################################ # Macros ################################################################################ @@ -20,13 +22,6 @@ lis \reg, \address @h ori \reg, \reg, \address @l .endm -.macro loadf regf,reg,address -lis \reg, \address @h -ori \reg, \reg, \address @l -stw \reg,-0x4(sp) -lfs \regf,-0x4(sp) -.endm - .macro loadwz reg, address lis \reg, \address @h ori \reg, \reg, \address @l @@ -39,23 +34,184 @@ ori \reg, \reg, \address @l lbz \reg, 0(\reg) .endm +.macro incrementByteInBuf reg, reg_address, offset, limit +lbz \reg, \offset(\reg_address) +addi \reg, \reg, 1 +cmpwi \reg, \limit +blt 0f +li \reg, 0 +0: +stb \reg, \offset(\reg_address) +.endm + +# Compiled from the following: +# int func(int current, int change, int limit) { +# return (((current + change) % limit) + limit) % limit; +# } +.macro adjustCircularIndex reg, reg_current, reg_change, reg_limit, reg_temp=r0 +add \reg, \reg_current, \reg_change +divw \reg_temp, \reg, \reg_limit +mullw \reg_temp, \reg_temp, \reg_limit +subf \reg_temp, \reg_temp, \reg +add \reg, \reg_limit, \reg_temp +divw \reg_temp, \reg, \reg_limit +mullw \reg_temp, \reg_temp, \reg_limit +subf \reg, \reg_temp, \reg +.endm + .macro bp branchl r12, 0x8021b2d8 .endm -.set BKP_FREE_SPACE_OFFSET, 0x38 # This is where the free space in our stack starts +# This is where the free space in our stack frame starts +.set BKP_FREE_SPACE_OFFSET, 8 -.macro backup space=0x78 +# The default free space such that we don't break any legacy codes, includes the location where +# the non-volatile registers were stored as well as the 0x78 of free space that used to exist. +# Now it's all just free space +.set BKP_DEFAULT_FREE_SPACE_SIZE, 0xA8 +.set BKP_DEFAULT_FREG, 0 +.set BKP_DEFAULT_REG, 12 + +# backup is used to set up a stack frame in which LR and non-volatile registers will be stored. +# It also sets up some free space on the stack for the function to use if needed. +# More info: https://docs.google.com/document/d/1QJOQzy933fxpfzIJlq6xopcviZ5tALKQvi_OOqpjehE +.macro backup free_space=BKP_DEFAULT_FREE_SPACE_SIZE, num_freg=BKP_DEFAULT_FREG, num_reg=BKP_DEFAULT_REG mflr r0 stw r0, 0x4(r1) -stwu r1,-(BKP_FREE_SPACE_OFFSET + \space)(r1) # make space for 12 registers -stmw r20,0x8(r1) +# Stack allocation has to be 4-byte aligned otherwise it crashes on console. This section +# makes space for the back chain, LR, non-volatile registers, and free space +.if \free_space % 4 == 0 + .set ALIGNED_FREE_SPACE, \free_space +.else + .set ALIGNED_FREE_SPACE, \free_space + (4 - \free_space % 4) +.endif +stwu r1,-(0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * \num_freg)(r1) +.if \num_reg > 0 + stmw 32 - \num_reg, (0x8 + ALIGNED_FREE_SPACE)(r1) +.endif +.if \num_freg > 0 + stfd f31, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 0)(r1) +.endif +.if \num_freg > 1 + stfd f30, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 1)(r1) +.endif +.if \num_freg > 2 + stfd f29, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 2)(r1) +.endif +.if \num_freg > 3 + stfd f28, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 3)(r1) +.endif +.if \num_freg > 4 + stfd f27, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 4)(r1) +.endif +.if \num_freg > 5 + stfd f26, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 5)(r1) +.endif +.if \num_freg > 6 + stfd f25, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 6)(r1) +.endif +.if \num_freg > 7 + stfd f24, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 7)(r1) +.endif +.if \num_freg > 8 + stfd f23, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 8)(r1) +.endif +.if \num_freg > 9 + stfd f22, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 9)(r1) +.endif +.if \num_freg > 10 + stfd f21, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 10)(r1) +.endif +.if \num_freg > 11 + stfd f20, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 11)(r1) +.endif +.if \num_freg > 12 + stfd f19, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 12)(r1) +.endif +.if \num_freg > 13 + stfd f18, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 13)(r1) +.endif +.if \num_freg > 14 + stfd f17, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 14)(r1) +.endif +.if \num_freg > 15 + stfd f16, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 15)(r1) +.endif +.if \num_freg > 16 + stfd f15, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 16)(r1) +.endif +.if \num_freg > 17 + stfd f14, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 17)(r1) +.endif .endm -.macro restore space=0x78 -lmw r20,0x8(r1) -lwz r0, (BKP_FREE_SPACE_OFFSET + 0x4 + \space)(r1) -addi r1,r1,BKP_FREE_SPACE_OFFSET + \space # release the space +.macro restore free_space=BKP_DEFAULT_FREE_SPACE_SIZE, num_freg=BKP_DEFAULT_FREG, num_reg=BKP_DEFAULT_REG +# Stack allocation has to be 4-byte aligned otherwise it crashes on console +.if \free_space % 4 == 0 + .set ALIGNED_FREE_SPACE, \free_space +.else + .set ALIGNED_FREE_SPACE, \free_space + (4 - \free_space % 4) +.endif +.if \num_reg > 0 + lmw 32 - \num_reg, (0x8 + ALIGNED_FREE_SPACE)(r1) +.endif +.if \num_freg > 0 + lfd f31, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 0)(r1) +.endif +.if \num_freg > 1 + lfd f30, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 1)(r1) +.endif +.if \num_freg > 2 + lfd f29, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 2)(r1) +.endif +.if \num_freg > 3 + lfd f28, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 3)(r1) +.endif +.if \num_freg > 4 + lfd f27, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 4)(r1) +.endif +.if \num_freg > 5 + lfd f26, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 5)(r1) +.endif +.if \num_freg > 6 + lfd f25, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 6)(r1) +.endif +.if \num_freg > 7 + lfd f24, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 7)(r1) +.endif +.if \num_freg > 8 + lfd f23, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 8)(r1) +.endif +.if \num_freg > 9 + lfd f22, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 9)(r1) +.endif +.if \num_freg > 10 + lfd f21, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 10)(r1) +.endif +.if \num_freg > 11 + lfd f20, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 11)(r1) +.endif +.if \num_freg > 12 + lfd f19, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 12)(r1) +.endif +.if \num_freg > 13 + lfd f18, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 13)(r1) +.endif +.if \num_freg > 14 + lfd f17, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 14)(r1) +.endif +.if \num_freg > 15 + lfd f16, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 15)(r1) +.endif +.if \num_freg > 16 + lfd f15, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 16)(r1) +.endif +.if \num_freg > 17 + lfd f14, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * 17)(r1) +.endif +lwz r0, (0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * \num_freg + 0x4)(r1) +addi r1, r1, 0x8 + ALIGNED_FREE_SPACE + 0x4 * \num_reg + 0x8 * \num_freg # release the space mtlr r0 .endm @@ -78,7 +234,7 @@ addi r1,r1,0x100 mtlr r0 .endm -.macro logf level, str, arg1="nop", arg2="nop", arg3="nop", arg4="nop", arg5="nop" +.macro logf level, str, arg1="nop", arg2="nop", arg3="nop", arg4="nop", arg5="nop", arg6="nop" b 1f 0: blrl @@ -94,6 +250,7 @@ backupall \arg3 \arg4 \arg5 +\arg6 lwz r3, OFST_R13_SB_ADDR(r13) # Buf to use as EXI buf addi r3, r3, 3 @@ -118,6 +275,31 @@ branchl r12, FN_EXITransferBuffer restoreall .endm +.macro oslogf str, arg1="nop", arg2="nop", arg3="nop", arg4="nop", arg5="nop" +b 1f +0: +blrl +.string "\str" +.align 2 + +1: +backupall + +# Set up args to log +\arg1 +\arg2 +\arg3 +\arg4 +\arg5 + +# Call OSReport +bl 0b +mflr r3 +branchl r12, 0x803456a8 # OSReport + +restoreall +.endm + .macro getMinorMajor reg lis \reg, 0x8048 # load address to offset from for scene controller lwz \reg, -0x62D0(\reg) # Load from 0x80479D30 (scene controller) @@ -131,7 +313,7 @@ lbz \reg, -0x62D0(\reg) # Load byte from 0x80479D30 (major ID) .macro loadGlobalFrame reg lis \reg, 0x8048 -lwz \reg, -0x62A0(\reg) +lwz \reg, -0x62A0(\reg) # 80479D60 .endm # This macro takes in an address that is expected to have a branch instruction. It will set @@ -140,14 +322,14 @@ lwz \reg, -0x62A0(\reg) load r3, \address lwz r4, 0(r3) # Get branch instruction which contains offset -# Process 3rd byte and extend sign to handle negative branches -rlwinm r5, r4, 16, 0xFF -extsb r5, r5 -rlwinm r5, r5, 16, 0xFFFF0000 - -# Extract last 2 bytes, combine with top half, and then add to base address to get result -rlwinm r4, r4, 0, 0xFFFC # Use 0xFFFC because the last bit is used for link -or r4, r4, r5 +# This extracts the LI portion of the branch instruction and shifts it such +# that the sign bit is all the way left. Then it does a divide instruction to +# shift to the right 6 bits while preserving the sign. After that, add to +# branch instruction location to get result. +# Credit to taukhan for the divw improvement (saves 2 instructions) +rlwinm r5, r4, 6, 0xFFFFFF00 +li r4, 64 +divw r4, r5, r4 add \reg, r3, r4 .endm @@ -169,7 +351,6 @@ add \reg, r3, r4 .set FN_MultiplyRWithF,0x800055ec .set FN_IntToFloat,0x800055f4 .set FG_CreateSubtext,0x800056b4 -.set FN_LoadChatMessageProperties,0x800056ac .set FN_GetTeamCostumeIndex,0x800056b0 .set FN_GetCSSIconData,0x800056b8 .set FN_AdjustNullID,0x80005694 @@ -359,6 +540,7 @@ add \reg, r3, r4 .set CONST_SlippiCmdReportMatch,0xBD .set CONST_SlippiCmdSendNameEntryIndex,0xBE .set CONST_SlippiCmdNameEntryAutoComplete,0xBF +.set CONST_SlippiCmdReportSetCompletion,0xC2 # For Slippi file loads .set CONST_SlippiCmdFileLength, 0xD1 .set CONST_SlippiCmdFileLoad, 0xD2 @@ -367,7 +549,10 @@ add \reg, r3, r4 # Misc .set CONST_SlippiCmdGetDelay, 0xD5 -.set CONST_SlippiCmdOvewriteInputs, 0xD6 +.set CONST_SlippiPlayMusic, 0xD6 +.set CONST_SlippiStopMusic, 0xD7 +.set CONST_SlippiChangeMusicVolume, 0xD8 +.set CONST_SlippiCmdOvewriteInputs, 0xD9 # For Slippi Premade Texts .set CONST_SlippiCmdGetPremadeTextLength, 0xE1 @@ -396,16 +581,37 @@ add \reg, r3, r4 .set CFOptionsAddress, RtocAddress - ControllerFixOptions .set GeckoHeapPtr, 0x80005600 +# Internal scenes +.set SCENE_TRAINING_CSS, 0x001C +.set SCENE_TRAINING_SSS, 0x011C +.set SCENE_TRAINING_IN_GAME, 0x021C + +.set SCENE_VERSUS_CSS, 0x0002 +.set SCENE_VERSUS_SSS, 0x0102 +.set SCENE_VERSUS_IN_GAME, 0x0202 +.set SCENE_VERSUS_SUDDEN_DEATH, 0x0302 + +.set SCENE_TARGETS_CSS, 0x000F +.set SCENE_TARGETS_IN_GAME, 0x010F + +.set SCENE_HOMERUN_CSS, 0x0020 +.set SCENE_HOMERUN_IN_GAME, 0x0120 + +# Playback scene +.set SCENE_PLAYBACK_IN_GAME, 0x010E + ################################################################################ # Offsets from r13 ################################################################################ .set primaryDataBuffer,-0x49b4 +.set playbackDataBuffer,-0x5040 # From tournament mode line 8019b9d4, seems to be only used in one place .set secondaryDmaBuffer,-0x49b0 .set archiveDataBuffer, -0x4AE8 .set bufferOffset,-0x49b0 .set frameIndex,-0x49ac .set textStructDescriptorBuffer,-0x3D24 .set isWidescreen,-0x5020 +.set OFST_R13_SB_ADDR,-0x503C # Scene buffer, persists throughout scenes ################################################################################ # Log levels @@ -414,3 +620,6 @@ add \reg, r3, r4 .set LOG_LEVEL_WARN, 3 .set LOG_LEVEL_ERROR, 2 .set LOG_LEVEL_NOTICE, 1 + +.endif +.set HEADER_COMMON, 1 diff --git a/Common/Initialize Player Data/Init Player Data.asm b/Common/Initialize Player Data/Init Player Data.asm index 971cdbd8..f0df63d2 100644 --- a/Common/Initialize Player Data/Init Player Data.asm +++ b/Common/Initialize Player Data/Init Player Data.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 80068eec +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" diff --git a/Common/Initialize Stage Data/Init Stage Data.asm b/Common/Initialize Stage Data/Init Stage Data.asm index f7ec551e..966bc5d4 100644 --- a/Common/Initialize Stage Data/Init Stage Data.asm +++ b/Common/Initialize Stage Data/Init Stage Data.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 801c154c +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" diff --git a/Common/NanaDeterminism/NanaDeterminism.asm b/Common/NanaDeterminism/NanaDeterminism.asm index e3d911d4..4e4b0af9 100644 --- a/Common/NanaDeterminism/NanaDeterminism.asm +++ b/Common/NanaDeterminism/NanaDeterminism.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 800ac5b8 +# Tags: [affects-gameplay] ################################################################################ mr r29, r3 # replaced code line diff --git a/Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm b/Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm index 1f24bb9d..6c95bbba 100644 --- a/Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm +++ b/Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x801d24fc # PokemonStadium_Main replaces normal function call +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" diff --git a/Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm b/Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm index 58a8861e..9c4392d4 100644 --- a/Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm +++ b/Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x801d460c +# Tags: [affects-gameplay] ################################################################################ .include "Common/Preload Stadium Transformations/Transformation.s" diff --git a/Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm b/Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm index 30720c62..57cb541e 100644 --- a/Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm +++ b/Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 801d14c8 +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" .include "Common/Preload Stadium Transformations/Transformation.s" diff --git a/Common/Preload Stadium Transformations/Core/Load Transformation.asm b/Common/Preload Stadium Transformations/Core/Load Transformation.asm index d43d609f..bf3ec3c2 100644 --- a/Common/Preload Stadium Transformations/Core/Load Transformation.asm +++ b/Common/Preload Stadium Transformations/Core/Load Transformation.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 801d45ec +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" .include "Common/Preload Stadium Transformations/Transformation.s" diff --git a/Common/Preload Stadium Transformations/Core/Reset isLoaded.asm b/Common/Preload Stadium Transformations/Core/Reset isLoaded.asm index 255afdcf..473415c5 100644 --- a/Common/Preload Stadium Transformations/Core/Reset isLoaded.asm +++ b/Common/Preload Stadium Transformations/Core/Reset isLoaded.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 801d4f14 +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" .include "Common/Preload Stadium Transformations/Transformation.s" diff --git a/Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm b/Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm index c3b78dfd..3bc32221 100644 --- a/Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm +++ b/Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm @@ -1,4 +1,5 @@ ################################################################################ # Address: 0x801d4610 +# Tags: [affects-gameplay] ################################################################################ b 0x4C diff --git a/Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm b/Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm index ea326b8d..0db54dbd 100644 --- a/Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm +++ b/Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm @@ -1,4 +1,5 @@ ################################################################################ # Address: 0x801d4724 +# Tags: [affects-gameplay] ################################################################################ b 0x3C diff --git a/Common/UseInGameDelay/ApplyInGameDelay.asm b/Common/UseInGameDelay/ApplyInGameDelay.asm index 5b3c2e0e..b79abffe 100644 --- a/Common/UseInGameDelay/ApplyInGameDelay.asm +++ b/Common/UseInGameDelay/ApplyInGameDelay.asm @@ -31,12 +31,17 @@ bne EXIT ################################################################################ .set REG_IGDB_ADDR, 31 .set REG_CUR_REPORT_IGDB_OFST, 30 +.set REG_PARENT_STACK_FRAME, 29 -.set CONST_BACKUP_BYTES, 0xB0 # Maybe add this to Common.s -.set P1_PAD_OFFSET, CONST_BACKUP_BYTES + 0x2C + +# This is the offset of P1's inputs from the start of the parent's stack frame +.set P1_PAD_OFFSET, 0x2C backup +# Load the address of the parent's stack frame +lwz REG_PARENT_STACK_FRAME, 0(sp) + computeBranchTargetAddress r3, INJ_InitInGameDelay lwz REG_IGDB_ADDR, 0x8(r3) # Loads the address of the buffer @@ -49,7 +54,7 @@ ble RESTORE_EXIT # Copy current inputs to temporary location ################################################################################ addi r3, sp, BKP_FREE_SPACE_OFFSET -addi r4, sp, P1_PAD_OFFSET +addi r4, REG_PARENT_STACK_FRAME, P1_PAD_OFFSET li r5, PADS_REPORT_SIZE branchl r12, memcpy @@ -62,7 +67,7 @@ mulli r3, r3, PADS_REPORT_SIZE addi REG_CUR_REPORT_IGDB_OFST, r3, IGDB_PAD_BUFFER # Overwrite -addi r3, sp, P1_PAD_OFFSET +addi r3, REG_PARENT_STACK_FRAME, P1_PAD_OFFSET add r4, REG_IGDB_ADDR, REG_CUR_REPORT_IGDB_OFST li r5, PADS_REPORT_SIZE branchl r12, memcpy diff --git a/Common/UseInGameDelay/InGameDelay.s b/Common/UseInGameDelay/InGameDelay.s index 5d65b576..cd6aef38 100644 --- a/Common/UseInGameDelay/InGameDelay.s +++ b/Common/UseInGameDelay/InGameDelay.s @@ -1,3 +1,5 @@ +.ifndef HEADER_IN_GAME_DELAY + ################################################################################ # Injection locations ################################################################################ @@ -7,13 +9,16 @@ # Constants ################################################################################ .set PADS_REPORT_SIZE, 0xC * 4 # 4 controller inputs to backup -.set MIN_DELAY_FRAMES, 0 -.set MAX_DELAY_FRAMES, 15 +.set OFFLINE_MIN_DELAY_FRAMES, 0 +.set OFFLINE_MAX_DELAY_FRAMES, 15 ################################################################################ # In Game Delay Buffer ################################################################################ .set IGDB_DELAY_FRAMES, 0 # u8 .set IGDB_PAD_BUFFER_INDEX, IGDB_DELAY_FRAMES + 1 # u8 -.set IGDB_PAD_BUFFER, IGDB_PAD_BUFFER_INDEX + 1 # PADS_REPORT_SIZE * MAX_DELAY_FRAMES -.set IGDB_SIZE, IGDB_PAD_BUFFER + PADS_REPORT_SIZE * MAX_DELAY_FRAMES \ No newline at end of file +.set IGDB_PAD_BUFFER, IGDB_PAD_BUFFER_INDEX + 1 # PADS_REPORT_SIZE * OFFLINE_MAX_DELAY_FRAMES +.set IGDB_SIZE, IGDB_PAD_BUFFER + PADS_REPORT_SIZE * OFFLINE_MAX_DELAY_FRAMES + +.endif +.set HEADER_IN_GAME_DELAY, 1 diff --git a/Common/UseInGameDelay/InitializeInGameDelay.asm b/Common/UseInGameDelay/InitializeInGameDelay.asm index 0c3fd98d..d629a7ce 100644 --- a/Common/UseInGameDelay/InitializeInGameDelay.asm +++ b/Common/UseInGameDelay/InitializeInGameDelay.asm @@ -129,16 +129,16 @@ li r4, IGDB_SIZE branchl r12, Zero_AreaLength # Handle delay limits -cmpwi REG_DELAY_RESULT, MIN_DELAY_FRAMES +cmpwi REG_DELAY_RESULT, OFFLINE_MIN_DELAY_FRAMES blt DELAY_FRAMES_MIN_LIMIT -cmpwi REG_DELAY_RESULT, MAX_DELAY_FRAMES +cmpwi REG_DELAY_RESULT, OFFLINE_MAX_DELAY_FRAMES bgt DELAY_FRAMES_MAX_LIMIT b SET_DELAY_FRAMES DELAY_FRAMES_MIN_LIMIT: -li REG_DELAY_RESULT, MIN_DELAY_FRAMES +li REG_DELAY_RESULT, OFFLINE_MIN_DELAY_FRAMES b SET_DELAY_FRAMES DELAY_FRAMES_MAX_LIMIT: -li REG_DELAY_RESULT, MAX_DELAY_FRAMES +li REG_DELAY_RESULT, OFFLINE_MAX_DELAY_FRAMES # Write delay result to IGDB SET_DELAY_FRAMES: diff --git a/Debugging/AdditionalCrashInfo/AdditionalCrashInfo.asm b/Debugging/AdditionalCrashInfo/AdditionalCrashInfo.asm new file mode 100644 index 00000000..38245362 --- /dev/null +++ b/Debugging/AdditionalCrashInfo/AdditionalCrashInfo.asm @@ -0,0 +1,47 @@ +################################################################################ +# Address: 0x80394a68 +################################################################################ + +.include "Common/Common.s" +.include "Debugging/AdditionalCrashInfo/AdditionalCrashInfoStatic.s" + +b CODE_START + +STATIC_MEMORY_TABLE_BLRL: +blrl +createAdditionalCrashInfoStaticMem + +FN_PRINT_STR_AT_OFFSET: +backup + +# Get string to print, save to r3 +mr r31, r3 +bl STATIC_MEMORY_TABLE_BLRL +mflr r3 +add r3, r3, r31 + +# Call OSReport function, r4+ and f1+ args should have been set by caller +branchl r12, OSReport + +restore +blr + +CODE_START: +addi r27, r4, 0 # replaced code line + +li r3, ACISMO_NEW_LINE_CHAR_STR +bl FN_PRINT_STR_AT_OFFSET +li r3, ACISMO_VERSION_STR +bl FN_PRINT_STR_AT_OFFSET +li r3, ACISMO_NEW_LINE_CHAR_STR +bl FN_PRINT_STR_AT_OFFSET +li r3, ACISMO_CONSOLE_RUNTIME_STR +loadwz r4, 0x804d7420 # Console runtime frame count +bl FN_PRINT_STR_AT_OFFSET +li r3, ACISMO_SCENE_RUNTIME_STR +loadGlobalFrame r4 # Scene runtime frame count +bl FN_PRINT_STR_AT_OFFSET +li r3, ACISMO_NEW_LINE_CHAR_STR +bl FN_PRINT_STR_AT_OFFSET + +EXIT: \ No newline at end of file diff --git a/Debugging/AdditionalCrashInfo/AdditionalCrashInfoStatic.s b/Debugging/AdditionalCrashInfo/AdditionalCrashInfoStatic.s new file mode 100644 index 00000000..758c74e2 --- /dev/null +++ b/Debugging/AdditionalCrashInfo/AdditionalCrashInfoStatic.s @@ -0,0 +1,22 @@ +.ifndef HEADER_ADDITIONAL_CRASH_INFO_STATIC + +# Define additional crash info static mem offsets, these must be synced with the static mem +# defined below +.set ACISMO_VERSION_STR, 0 # char[64] +.set ACISMO_CONSOLE_RUNTIME_STR, ACISMO_VERSION_STR + 64 # char[29] +.set ACISMO_SCENE_RUNTIME_STR, ACISMO_CONSOLE_RUNTIME_STR + 29 # char[27] +.set ACISMO_NEW_LINE_CHAR_STR, ACISMO_SCENE_RUNTIME_STR + 27 # char[2] + +.macro createAdditionalCrashInfoStaticMem +# The string below should be overwritten by the application to provide correct version +# IMPORTANT: The version string should ALWAYS be first +.string "Placeholder for Version and Application: v00.00.00-000-00000000" +.string " Console runtime: %d frames\n" +.string " Scene runtime: %d frames\n" +.string "\n" + +.align 2 +.endm + +.endif +.set HEADER_ADDITIONAL_CRASH_INFO_STATIC, 1 diff --git a/Debugging/CreateFrequentAlarm.asm b/Debugging/CreateFrequentAlarm.asm new file mode 100644 index 00000000..7804cf2d --- /dev/null +++ b/Debugging/CreateFrequentAlarm.asm @@ -0,0 +1,81 @@ +################################################################################ +# Address: 0x80019ba4 +################################################################################ + +.include "Common/Common.s" + +b CODE_START + +STATIC_MEMORY_TABLE_BLRL: +blrl +.long 5000 # Period of the alarm +.fill 0x28, 1, 0 # Alarm struct is 0x28 long (I think) + +ALARM_HANDLER: +blrl +# Backup +mflr r0 +stw r0, 0x4(r1) +stwu r1,-0xB0(r1) # make space for 12 registers +stmw r14,0x8(r1) + +# Overwrite volatile registers +li r3, 0xFF +li r4, 0xFF +li r5, 0xFF +li r6, 0xFF +li r7, 0xFF +li r8, 0xFF +li r9, 0xFF +li r10, 0xFF +li r11, 0xFF +li r12, 0xFF + +# Overwrite non-volatile registers +li r14, 0xFF +li r15, 0xFF +li r16, 0xFF +li r17, 0xFF +li r18, 0xFF +li r19, 0xFF +li r20, 0xFF +li r21, 0xFF +li r22, 0xFF +li r23, 0xFF +li r24, 0xFF +li r25, 0xFF +li r26, 0xFF +li r27, 0xFF +li r28, 0xFF +li r29, 0xFF +li r30, 0xFF +li r31, 0xFF + +# Restore +lmw r14,0x8(r1) +lwz r0, 0xB4(r1) +addi r1,r1,0xB0 # release the space +mtlr r0 +blr + +CODE_START: + +bl STATIC_MEMORY_TABLE_BLRL +mflr r3 +addi r3, r3, 0x4 +branchl r12, 0x8034376c # OSCreateAlarm + +bl STATIC_MEMORY_TABLE_BLRL +mflr r3 +addi r3, r3, 0x4 +li r4, 0 +li r5, 0 +lwz r6, -0x4(r3) +li r7, 0 +lwz r8, -0x4(r3) +bl ALARM_HANDLER +mflr r9 +branchl r12, 0x80343a30 # OSSetPeriodicAlarm + +# replaced code line +lmw r27, 0x0034 (sp) \ No newline at end of file diff --git a/External/59.94Hz Engine/InGameSpeed.asm b/External/59.94Hz Engine/InGameSpeed.asm new file mode 100644 index 00000000..2fe5f56d --- /dev/null +++ b/External/59.94Hz Engine/InGameSpeed.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x804DA2A8 +################################################################################ + +.long 0x3C88AB85 \ No newline at end of file diff --git a/External/59.94Hz Engine/MenuSpeed.asm b/External/59.94Hz Engine/MenuSpeed.asm new file mode 100644 index 00000000..10cfb783 --- /dev/null +++ b/External/59.94Hz Engine/MenuSpeed.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x804DA9E8 +################################################################################ + +.long 0x3C88AB85 \ No newline at end of file diff --git a/External/59.94Hz Engine/SetSpeedOnBoot.asm b/External/59.94Hz Engine/SetSpeedOnBoot.asm new file mode 100644 index 00000000..460a4c38 --- /dev/null +++ b/External/59.94Hz Engine/SetSpeedOnBoot.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x804D7CA0 +################################################################################ + +.long 0x3C88AB85 \ No newline at end of file diff --git a/External/59.94Hz Engine/SyncPollingOnGameStart.asmtemp b/External/59.94Hz Engine/SyncPollingOnGameStart.asmtemp new file mode 100644 index 00000000..2e16c0c7 --- /dev/null +++ b/External/59.94Hz Engine/SyncPollingOnGameStart.asmtemp @@ -0,0 +1,27 @@ +################################################################################ +# Address: 0x80376a8c +################################################################################ + +.include "Common/Common.s" +.include "Online/Online.s" + +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, 0x0202 +bne EXIT + +load r3, 0x80479d64 +lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state +cmpwi r3, 0 # Loading state should be zero when game starts +bne EXIT + +loadGlobalFrame r3 +cmpwi r3, 1 +bne EXIT + +branchl r12, 0x8034f314 # VIWaitForRetrace + +EXIT: +# Replaced code lines +lbz r0, 0x0002 (r31) +lbz r4, 0x0003 (r31) \ No newline at end of file diff --git a/External/59.94Hz Engine/TrainingModeSpeed.asm b/External/59.94Hz Engine/TrainingModeSpeed.asm new file mode 100644 index 00000000..50e3c519 --- /dev/null +++ b/External/59.94Hz Engine/TrainingModeSpeed.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x804DA5F8 +################################################################################ + +.long 0x3C88AB85 \ No newline at end of file diff --git a/External/Debug Inputs/DebugInputs.s b/External/Debug Inputs/DebugInputs.s new file mode 100644 index 00000000..088c0cfa --- /dev/null +++ b/External/Debug Inputs/DebugInputs.s @@ -0,0 +1,53 @@ +.ifndef HEADER_DEBUG_INPUTS + +################################################################################ +# Constants +################################################################################ +.set INJ_InitDebugInputs, 0x8016e774 + +.set CIRCULAR_BUFFER_COUNT, 16 + +.set DIB_ACTIVE_STATE, 0 # u8. 0 = starting, 1 = active, 2 = complete +.set DIB_FETCH_INDEX, DIB_ACTIVE_STATE + 1 # u8 +.set DIB_COLOR_KEY_DTEXT_ADDR, DIB_FETCH_INDEX + 1 # u32 +.set DIB_LAG_DISPLAY_DTEXT_ADDR, DIB_COLOR_KEY_DTEXT_ADDR + 4 # u32 +.set DIB_LAST_POLL_TIME, DIB_LAG_DISPLAY_DTEXT_ADDR + 4 # u32 +.set DIB_LAST_FETCH_TIME, DIB_LAST_POLL_TIME + 4 # u32 +.set DIB_CALLBACK_PTR, DIB_LAST_FETCH_TIME + 4 # u32 +.set DIB_CIRCULAR_BUFFER, DIB_CALLBACK_PTR + 4 # u32 * CIRCULAR_BUFFER_COUNT +.set DIB_INPUT_TO_RENDER_US, DIB_CIRCULAR_BUFFER + (4 * CIRCULAR_BUFFER_COUNT) # u32 +.set DIB_POLL_DIFF_MIN_US, DIB_INPUT_TO_RENDER_US + 4 # u32 +.set DIB_POLL_DIFF_MAX_US, DIB_POLL_DIFF_MIN_US + 4 # u32 +.set DIB_FETCH_DIFF_US, DIB_POLL_DIFF_MAX_US + 4 # u32 +.set DIB_POLL_TO_FETCH_US, DIB_FETCH_DIFF_US + 4 # u32 +.set DIB_POLL_TO_ENGINE_US, DIB_POLL_TO_FETCH_US + 4 # u32 +.set DIB_POLL_COUNT, DIB_POLL_TO_ENGINE_US + 4 # u32 +.set DIB_SIZE, DIB_POLL_COUNT + 4 + +################################################################################ +# Macros +################################################################################ + +# Calculates us difference from two ticks +.macro calcDiffUs reg_now, reg_ref +sub r3, \reg_now, \reg_ref # This works even if ticks overflow +mulli r3, r3, 12 +lis r4, 0x8000 +ori r4, r4, 0x00FC +lwz r4, 0(r4) # Grab CPU speed so that this works on Nintendont (729MHz) and GC/Wii (486MHz) +li r5, 1000 +divwu r4, r4, r5 +divwu r4, r4, r5 # Divide by 1000 twice because I can't li 1000000 +divwu r3, r3, r4 +.endm + +.macro calcDiffFromFetchUs reg_dib, reg_idx +branchl r12, 0x8034c408 # OSGetTick +mulli r4, \reg_idx, 4 +addi r4, r4, DIB_CIRCULAR_BUFFER +lwzx r4, \reg_dib, r4 +calcDiffUs r3, r4 +.endm + +.endif +.set HEADER_DEBUG_INPUTS, 1 diff --git a/External/Debug Inputs/InitOnGameStart.asm b/External/Debug Inputs/InitOnGameStart.asm new file mode 100644 index 00000000..e178e148 --- /dev/null +++ b/External/Debug Inputs/InitOnGameStart.asm @@ -0,0 +1,280 @@ +################################################################################ +# Address: INJ_InitDebugInputs +################################################################################ + +.include "Common/Common.s" +.include "./DebugInputs.s" + +b CODE_START + +DATA_BLRL: +blrl +.set DO_DIB_ADDR, 0 +.long 0 # Buffer +.set DO_CS_X_SCALE, DO_DIB_ADDR + 4 +.float 200 +.set DO_CS_Y_SCALE, DO_CS_X_SCALE + 4 +.float 25 +.set DO_CS_COLOR, DO_CS_Y_SCALE + 4 +.byte 0,0,0,255 +.set DO_LD_COLOR, DO_CS_COLOR + 4 +.byte 0,0,0,180 +.set DO_LD_TEXT_COLOR, DO_LD_COLOR + 4 +.byte 0xE2,0xE2,0xE2,0xFF +.set DO_LD_TEXT_X_SCALE, DO_LD_TEXT_COLOR + 4 +.float 10 +.set DO_LD_TEXT_Y_SCALE, DO_LD_TEXT_X_SCALE + 4 +.float 17 +.set DO_LD_STR_LATENCY, DO_LD_TEXT_Y_SCALE + 4 +.string "Total Game Lag: %u us\n\n" +.set DO_LD_STR_POLL_COUNT, DO_LD_STR_LATENCY + 24 +.string "Poll Count: %u\n" +.set DO_LD_STR_MIN_POLL_DIFF, DO_LD_STR_POLL_COUNT + 16 +.string "Min Poll Diff: %u us\n" +.set DO_LD_STR_MAX_POLL_DIFF, DO_LD_STR_MIN_POLL_DIFF + 22 +.string "Max Poll Diff: %u us\n" +.set DO_LD_STR_FETCH_DIFF, DO_LD_STR_MAX_POLL_DIFF + 22 +.string "Fetch-Fetch: %u us\n" +.set DO_LD_STR_FETCH_TO_POLL_DIFF, DO_LD_STR_FETCH_DIFF + 20 +.string "Poll-Fetch: %u us\n" +.set DO_LD_STR_POLL_TO_ENGINE_DIFF, DO_LD_STR_FETCH_TO_POLL_DIFF + 19 +.string "Poll-Engine: %u us\n" +.align 2 + +################################################################################ +# Function: PollingHandler +################################################################################ +FN_BLRL_PollingHandler: +blrl + +# This is only here to trigger the interrupt. The actual logic will happen in LogPollInterrupt.asm +# I modified it to work this way such that the poll time is logged before any poll handlers +# run in case the PadRenewRaw is called is a side effect of a poll handler such as is the case +# with tau's 0.5f lag reduction code +blr + +################################################################################ +# Function: UpdateLagDisplay +################################################################################ +.set REG_DATA, 31 +.set REG_DIB, 30 +.set REG_DEVELOP_TEXT, 29 + +FN_BLRL_UpdateLagDisplay: +blrl +backup + +bl DATA_BLRL +mflr REG_DATA +lwz REG_DIB, DO_DIB_ADDR(REG_DATA) +lwz REG_DEVELOP_TEXT, DIB_LAG_DISPLAY_DTEXT_ADDR(REG_DIB) + +# Only run update if active, if complete, stop updating +lbz r3, DIB_ACTIVE_STATE(REG_DIB) +cmpwi r3, 1 +bne FN_UpdateLagDisplay_EXIT + +mr r3, REG_DEVELOP_TEXT +branchl r12, 0x80302bb0 # DevelopText_EraseAllText +mr r3, REG_DEVELOP_TEXT +li r4, 0 +li r5, 0 +branchl r12, 0x80302a3c # DevelopMode_Text_ResetCursorXY + +#Set Text +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_LATENCY +lwz r5, DIB_INPUT_TO_RENDER_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_POLL_COUNT +lwz r5, DIB_POLL_COUNT(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_MIN_POLL_DIFF +lwz r5, DIB_POLL_DIFF_MIN_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_MAX_POLL_DIFF +lwz r5, DIB_POLL_DIFF_MAX_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_FETCH_DIFF +lwz r5, DIB_FETCH_DIFF_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_FETCH_TO_POLL_DIFF +lwz r5, DIB_POLL_TO_FETCH_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_STR_POLL_TO_ENGINE_DIFF +lwz r5, DIB_POLL_TO_ENGINE_US(REG_DIB) +branchl r12, 0x80302d4c # DevelopText_FormatAndPrint + +# Check if game over +load r3, 0x8046b6a0 +lbz r3, 0x8(r3) +cmpwi r3, 0 +beq SKIP_GAME_END + +# Here game has ended, so let's do some cleanup. First unregister polling callback +lwz r3, DIB_CALLBACK_PTR(REG_DIB) +branchl r12, 0x80349cbc # SIUnregisterPollingHandler + +# Set active state to game complete +li r3, 2 +stb r3, DIB_ACTIVE_STATE(REG_DIB) +SKIP_GAME_END: + +FN_UpdateLagDisplay_EXIT: +restore +blr + +################################################################################ +# Function: InitColorSquare +################################################################################ +.set REG_DATA, 31 +.set REG_DEVELOP_TEXT, 30 + +FN_InitColorSquare: +backup + +bl DATA_BLRL +mflr REG_DATA + +#Create Rectangle +li r3, 32 +branchl r12, HSD_MemAlloc +mr r8, r3 +li r3, 30 # ID +li r4, -210 # X Pos +li r5, -40 # Y Pos +li r6, 1 +li r7, 1 +branchl r12, 0x80302834 # DevelopText_CreateDataTable +mr REG_DEVELOP_TEXT, r3 +#Activate Text +lwz r3, -0x4884(r13) +mr r4, REG_DEVELOP_TEXT +branchl r12, 0x80302810 # DevelopText_Activate +#Hide blinking cursor +li r3, 0 +stb r3, 0x26(REG_DEVELOP_TEXT) +#Change BG Color +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_CS_COLOR +branchl r12, 0x80302b90 # DevelopText_StoreBGColor +#Set Stretch +lfs f1, DO_CS_X_SCALE(REG_DATA) +stfs f1, 0x8(REG_DEVELOP_TEXT) +lfs f1, DO_CS_Y_SCALE(REG_DATA) +stfs f1, 0xC(REG_DEVELOP_TEXT) +#Store Develop Text Addr +lwz r3, DO_DIB_ADDR(REG_DATA) +stw REG_DEVELOP_TEXT, DIB_COLOR_KEY_DTEXT_ADDR(r3) + +restore +blr + +################################################################################ +# Function: InitLagDisplay +################################################################################ +.set REG_DATA, 31 +.set REG_DEVELOP_TEXT, 30 + +FN_InitLagDisplay: +backup + +bl DATA_BLRL +mflr REG_DATA + +#Create Rectangle +li r3, 1000 +branchl r12, HSD_MemAlloc +mr r8, r3 +li r3, 31 # ID +li r4, 0 # X Pos +li r5, 0 # Y Pos +li r6, 29 # Width +li r7, 9 # Height +branchl r12, 0x80302834 # DevelopText_CreateDataTable +mr REG_DEVELOP_TEXT, r3 +#Activate Text +lwz r3, -0x4884(r13) +mr r4, REG_DEVELOP_TEXT +branchl r12, 0x80302810 # DevelopText_Activate +#Hide blinking cursor +li r3, 0 +stb r3, 0x26(REG_DEVELOP_TEXT) +#Change BG Color +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_COLOR +branchl r12, 0x80302b90 # DevelopText_StoreBGColor +#Store text scale +mr r3, REG_DEVELOP_TEXT +lfs f1, DO_LD_TEXT_X_SCALE(REG_DATA) +lfs f2, DO_LD_TEXT_Y_SCALE(REG_DATA) +branchl r12, 0x80302b10 # DevelopText_StoreTextScale +#Set Text Color +mr r3, REG_DEVELOP_TEXT +addi r4, REG_DATA, DO_LD_TEXT_COLOR +branchl r12, 0x80302b64 # DevelopText_StoreTextColor +#Show text +mr r3, REG_DEVELOP_TEXT +branchl r12, 0x80302af0 # DevelopText_ShowText +#Store Develop Text Addr +lwz r3, DO_LD_DIB_ADDR(REG_DATA) +stw REG_DEVELOP_TEXT, DIB_LAG_DISPLAY_DTEXT_ADDR(r3) + +# Create GObj +li r3, 19 # GObj Type +li r4, 20 +li r5, 0 # some type of priority +branchl r12, GObj_Create + +#Create Proc to update display +bl FN_BLRL_UpdateLagDisplay +mflr r4 # Function +li r5, 7 # Priority +branchl r12, GObj_AddProc + +restore +blr + +CODE_START: + +.set REG_DIB, 30 + +backup +# logf "Init..." + +li r3, DIB_SIZE +branchl r12, HSD_MemAlloc + +bl DATA_BLRL +mflr r4 +stw r3, 0(r4) # Write address to static address +mr REG_DIB, r3 + +li r4, DIB_SIZE +branchl r12, Zero_AreaLength + +bl FN_InitColorSquare +bl FN_InitLagDisplay + +# I thought this would fire twice per frame (same as polling), but it doesn't and idk what it does +bl FN_BLRL_PollingHandler +mflr r3 +stw r3, DIB_CALLBACK_PTR(REG_DIB) # Store so we can unregister later +branchl r12, 0x80349bf0 # SIRegisterPollingHandler + +restore + +EXIT: +lfs f1, -0x5738(rtoc) \ No newline at end of file diff --git a/External/Debug Inputs/LogEngineTime.asm b/External/Debug Inputs/LogEngineTime.asm new file mode 100644 index 00000000..6c69fea0 --- /dev/null +++ b/External/Debug Inputs/LogEngineTime.asm @@ -0,0 +1,70 @@ +################################################################################ +# Address: 0x801a4dec +################################################################################ + +.include "Common/Common.s" +.include "./DebugInputs.s" + +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, 0x0202 +bne EXIT + +loadGlobalFrame r3 +cmpwi r3, 0 +ble EXIT + +.set REG_DIB, 31 +.set REG_INTERRUPTS, 30 +.set REG_DIFF_US, 29 +.set REG_KEY, 28 +.set REG_DEVELOP_TEXT, 27 + +backup + +branchl r12, OSDisableInterrupts +mr REG_INTERRUPTS, r3 + +# Fetch DIB +computeBranchTargetAddress r3, INJ_InitDebugInputs +lwz REG_DIB, 8+0(r3) + +# Check if DIB is ready (poll has happened) +lbz r3, DIB_ACTIVE_STATE(REG_DIB) +cmpwi r3, 0 +beq RESTORE_AND_EXIT + +# Fetch key from controller input and clear d-pad inputs +load r4, 0x804c1fac +lwz r3, 0(r4) +rlwinm REG_KEY, r3, 0, 0xF +rlwinm r3, r3, 0, 0xFFFFFFF0 # clear d-pad inputs +stw r3, 0(r4) + +# Calculate time diff +calcDiffFromFetchUs REG_DIB, REG_KEY +mr REG_DIFF_US, r3 + +stw REG_DIFF_US, DIB_POLL_TO_ENGINE_US(REG_DIB) + +# Adjust develop text BG color +lwz r3, DIB_COLOR_KEY_DTEXT_ADDR(REG_DIB) +stb REG_KEY, BKP_FREE_SPACE_OFFSET+0(sp) +stb REG_KEY, BKP_FREE_SPACE_OFFSET+1(sp) +stb REG_KEY, BKP_FREE_SPACE_OFFSET+2(sp) +lwz r4, BKP_FREE_SPACE_OFFSET(sp) +rlwinm r4, r4, 4, 0xFFFFF000 +ori r4, r4, 0xFF +stw r4, BKP_FREE_SPACE_OFFSET(sp) +addi r4, sp, BKP_FREE_SPACE_OFFSET +branchl r12, 0x80302b90 # DevelopText_StoreBGColor + +RESTORE_AND_EXIT: +# Restore interrupts +mr r3, REG_INTERRUPTS +branchl r12, OSRestoreInterrupts + +restore + +EXIT: +lwz r0, -0x6C98(r13) \ No newline at end of file diff --git a/External/Debug Inputs/LogFetchTime.asm b/External/Debug Inputs/LogFetchTime.asm new file mode 100644 index 00000000..8583bde2 --- /dev/null +++ b/External/Debug Inputs/LogFetchTime.asm @@ -0,0 +1,81 @@ +################################################################################ +# Address: 0x80376a88 +################################################################################ + +.include "Common/Common.s" +.include "./DebugInputs.s" + +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, 0x0202 +bne EXIT + +load r3, 0x80479d64 +lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state +cmpwi r3, 0 # Loading state should be zero when game starts +bne EXIT + +.set CONST_BACKUP_BYTES, 0xE0 # Maybe add this to Common.s +.set P1_PAD_OFFSET, CONST_BACKUP_BYTES + 0x2C + +.set REG_DIB, 31 +.set REG_INTERRUPTS, 30 +.set REG_FETCH_TIME, 29 + +backup + +branchl r12, OSDisableInterrupts +mr REG_INTERRUPTS, r3 + +# Fetch DIB +computeBranchTargetAddress r3, INJ_InitDebugInputs +lwz REG_DIB, 8+0(r3) + +# Store "key" to inputs (sets d-pad inputs) +lwz r3, P1_PAD_OFFSET(sp) # Load P1 inputs +rlwinm r3, r3, 16, 0xFFFFFFF0 # shift inputs to put d-pad lowest, also clear d-pad +lbz r4, DIB_FETCH_INDEX(REG_DIB) +or r3, r3, r4 # set d-pad inputs to key +rlwinm r3, r3, 16, 0xFFFFFFFF # shift inputs back into place +stw r3, P1_PAD_OFFSET(sp) + +# Get and write current tick +lwz r3, DIB_LAST_POLL_TIME(REG_DIB) +lbz r4, DIB_FETCH_INDEX(REG_DIB) +mulli r4, r4, 4 # Get index offset +addi r4, r4, DIB_CIRCULAR_BUFFER +stwx r3, REG_DIB, r4 + +# Increment index +incrementByteInBuf r3, REG_DIB, DIB_FETCH_INDEX, CIRCULAR_BUFFER_COUNT + +# Indicate ready, prevents other functions from running first. Only activate if currently inactive +lbz r3, DIB_ACTIVE_STATE(REG_DIB) +cmpwi r3, 0 +bne SKIP_ACTIVATE +li r3, 1 +stb r3, DIB_ACTIVE_STATE(REG_DIB) +SKIP_ACTIVATE: + +# Store details to print. Start with difference since last fetch +branchl r12, 0x8034c408 # OSGetTick +mr REG_FETCH_TIME, r3 +lwz r4, DIB_LAST_FETCH_TIME(REG_DIB) +stw REG_FETCH_TIME, DIB_LAST_FETCH_TIME(REG_DIB) +calcDiffUs REG_FETCH_TIME, r4 # Calculate difference since last fetch +stw r3, DIB_FETCH_DIFF_US(REG_DIB) + +# Store time since poll +lwz r3, DIB_LAST_POLL_TIME(REG_DIB) +calcDiffUs REG_FETCH_TIME, r3 +stw r3, DIB_POLL_TO_FETCH_US(REG_DIB) + +RESTORE_AND_EXIT: +# Restore interrupts +mr r3, REG_INTERRUPTS +branchl r12, OSRestoreInterrupts + +restore + +EXIT: +lbz r0, 0x0002(r31) # replaced code line \ No newline at end of file diff --git a/External/Debug Inputs/LogPollTime.asm b/External/Debug Inputs/LogPollTime.asm new file mode 100644 index 00000000..de37a00c --- /dev/null +++ b/External/Debug Inputs/LogPollTime.asm @@ -0,0 +1,74 @@ +################################################################################ +# Address: 0x80349a28 # SIInterruptHandler +################################################################################ + +.include "Common/Common.s" +.include "./DebugInputs.s" + +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, 0x0202 +bne EXIT + +load r3, 0x80479d64 +lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state +cmpwi r3, 0 # Loading state should be zero when game starts +bne EXIT + +.set REG_DIB, 31 +.set REG_INTERRUPTS, 30 +.set REG_DIFF_SINCE_LAST, 29 + +backup + +branchl r12, OSDisableInterrupts +mr REG_INTERRUPTS, r3 + +# Fetch DIB +computeBranchTargetAddress r3, INJ_InitDebugInputs +lwz REG_DIB, 8+0(r3) + +lwz r3, DIB_POLL_COUNT(REG_DIB) +addi r3, r3, 1 +stw r3, DIB_POLL_COUNT(REG_DIB) + +# Write poll time +branchl r12, 0x8034c408 # OSGetTick +lwz r4, DIB_LAST_POLL_TIME(REG_DIB) +stw r3, DIB_LAST_POLL_TIME(REG_DIB) +calcDiffUs r3, r4 # Calculate difference since last poll +mr REG_DIFF_SINCE_LAST, r3 + +# Store min/max diff for logging +lwz r3, DIB_POLL_COUNT(REG_DIB) +rlwinm. r3, r3, 0, 0xFF +beq FN_PollingHandler_RESET_MIN_MAX # Reset every 256 polls, 2 seconds? + +lwz r3, DIB_POLL_DIFF_MIN_US(REG_DIB) +cmpw REG_DIFF_SINCE_LAST, r3 +bge FN_PollingHandler_SKIP_ADJUST_MIN +stw REG_DIFF_SINCE_LAST, DIB_POLL_DIFF_MIN_US(REG_DIB) +FN_PollingHandler_SKIP_ADJUST_MIN: + +lwz r3, DIB_POLL_DIFF_MAX_US(REG_DIB) +cmpw REG_DIFF_SINCE_LAST, r3 +ble FN_PollingHandler_SKIP_ADJUST_MAX +stw REG_DIFF_SINCE_LAST, DIB_POLL_DIFF_MAX_US(REG_DIB) +FN_PollingHandler_SKIP_ADJUST_MAX: + +b FN_PollingHandler_MIN_MAX_END + +FN_PollingHandler_RESET_MIN_MAX: +stw REG_DIFF_SINCE_LAST, DIB_POLL_DIFF_MIN_US(REG_DIB) +stw REG_DIFF_SINCE_LAST, DIB_POLL_DIFF_MAX_US(REG_DIB) +FN_PollingHandler_MIN_MAX_END: + +RESTORE_AND_EXIT: +# Restore interrupts +mr r3, REG_INTERRUPTS +branchl r12, OSRestoreInterrupts + +restore + +EXIT: +lwz r5, 0(r24) # Replaced codeline \ No newline at end of file diff --git a/External/Debug Inputs/LogScanoutTime.asm b/External/Debug Inputs/LogScanoutTime.asm new file mode 100644 index 00000000..24aef01a --- /dev/null +++ b/External/Debug Inputs/LogScanoutTime.asm @@ -0,0 +1,110 @@ +################################################################################ +# Address: 0x80375c14 # End of VIPreRetraceCB +################################################################################ + +.include "Common/Common.s" +.include "./DebugInputs.s" + +b CODE_START + +################################################################################ +# Function: GetIndexFromColor +################################################################################ +# Inputs: +# r3 - YUV Color +################################################################################ +# Output: +# r3 - 0-15 or -1 if color does not match +################################################################################ +FN_GetIndexFromColor: +rlwinm r4, r3, 24, 0xFF +rlwinm r3, r3, 8, 0xFF + +cmpw r3, r4 +beq FN_GetIndexFromColor_CALC_INDEX + +li r3, -1 # Color invalid if the two bytes don't match +b FN_GetIndexFromColor_RETURN + +FN_GetIndexFromColor_CALC_INDEX: +# This does some math on the byte to calculate the index from it. See google sheet for examples: +# https://docs.google.com/spreadsheets/d/1EKnVQmAbt5LCipXq_aGCMJ_utsOlPqM_O0UJ3cnWm4c/edit?usp=sharing +subi r3, r3, 15 +mulli r3, r3, 6 +li r4, 5 +divwu r3, r3, r4 +rlwinm r3, r3, 28, 0xF # Extract 4 bits to get key + +FN_GetIndexFromColor_RETURN: +blr + +################################################################################ +# Code start +################################################################################ +CODE_START: +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, 0x0202 +bne EXIT + +load r3, 0x80479d64 +lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state +cmpwi r3, 0 # Loading state should be zero when game starts +bne EXIT + +.set REG_DIB, 31 +.set REG_INTERRUPTS, 30 +.set REG_DIFF_US, 29 +.set REG_KEY, 28 +.set REG_DEVELOP_TEXT, 27 +.set REG_COLOR, 26 + +backup + +branchl r12, OSDisableInterrupts +mr REG_INTERRUPTS, r3 + +# Fetch DIB +computeBranchTargetAddress r3, INJ_InitDebugInputs +lwz REG_DIB, 8+0(r3) + +# Check if DIB is ready (poll has happened) +lbz r3, DIB_ACTIVE_STATE(REG_DIB) +cmpwi r3, 0 +beq RESTORE_AND_EXIT + +# Load ptr to frame that will be scanned out +loadwz r3, 0x804a8b10 # Contains ptr to the current XFB + +# Invalidate the pixel color memory because the GPU will have overwritten it and if that memory +# is still in our cache, we would load a stale color (only on console) +li r4, 0 +dcbi r3, r4 +sync +isync + +# Load 2 pixels and calculate the index from it +lwz REG_COLOR, 0(r3) # Load top left pixels +mr r3, REG_COLOR +bl FN_GetIndexFromColor +cmpwi r3, 0 +blt RESTORE_AND_EXIT # Color is invalid, exit + +mr REG_KEY, r3 + +# Calculate time diff +calcDiffFromFetchUs REG_DIB, REG_KEY +mr REG_DIFF_US, r3 + +# Store latest latency +stw REG_DIFF_US, DIB_INPUT_TO_RENDER_US(REG_DIB) + +RESTORE_AND_EXIT: +# Restore interrupts +mr r3, REG_INTERRUPTS +branchl r12, OSRestoreInterrupts + +restore + +EXIT: +lwz r0, 0x0024(sp) # Replaced codeline \ No newline at end of file diff --git a/External/FreezeGlitchFix/FreezeGlitchFix.asm b/External/FreezeGlitchFix/FreezeGlitchFix.asm index 4da0ee1b..e3e865af 100644 --- a/External/FreezeGlitchFix/FreezeGlitchFix.asm +++ b/External/FreezeGlitchFix/FreezeGlitchFix.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x801239A8 +# Tags: [affects-gameplay] ################################################################################ nop diff --git a/External/Frozen All/Core/1.asm b/External/Frozen All/Core/1.asm index 5edcd952..3fdea658 100644 --- a/External/Frozen All/Core/1.asm +++ b/External/Frozen All/Core/1.asm @@ -1,5 +1,6 @@ ################################################################################ -# Address: 803E67E0 +# Address: 0x803E67E0 +# Tags: [affects-gameplay] ################################################################################ .long 0 \ No newline at end of file diff --git a/External/Frozen All/Core/2.asm b/External/Frozen All/Core/2.asm index 815f0e74..fa0ecc0f 100644 --- a/External/Frozen All/Core/2.asm +++ b/External/Frozen All/Core/2.asm @@ -1,5 +1,6 @@ ################################################################################ -# Address: 8021AAE4 +# Address: 0x8021AAE4 +# Tags: [affects-gameplay] ################################################################################ nop \ No newline at end of file diff --git a/External/Frozen All/Core/3.asm b/External/Frozen All/Core/3.asm index 0f7da816..103aaad4 100644 --- a/External/Frozen All/Core/3.asm +++ b/External/Frozen All/Core/3.asm @@ -1,5 +1,6 @@ ################################################################################ -# Address: 801D1548 +# Address: 0x801D1548 +# Tags: [affects-gameplay] ################################################################################ nop \ No newline at end of file diff --git a/External/Frozen All/Core/4.asm b/External/Frozen All/Core/4.asm index 9b8bc7fe..bcef20fb 100644 --- a/External/Frozen All/Core/4.asm +++ b/External/Frozen All/Core/4.asm @@ -1,5 +1,6 @@ ################################################################################ -# Address: 801E3348 +# Address: 0x801E3348 +# Tags: [affects-gameplay] ################################################################################ nop \ No newline at end of file diff --git a/External/Frozen PS/Core/FreezePokemon.asm b/External/Frozen PS/Core/FreezePokemon.asm index fd3cd4e2..be46b334 100644 --- a/External/Frozen PS/Core/FreezePokemon.asm +++ b/External/Frozen PS/Core/FreezePokemon.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x801d45fc +# Tags: [affects-gameplay] ################################################################################ b 0x9dc diff --git a/External/NeutralSpawn/NeutralSpawn.asm b/External/NeutralSpawn/NeutralSpawn.asm index 68a9b9bf..6c1338a4 100644 --- a/External/NeutralSpawn/NeutralSpawn.asm +++ b/External/NeutralSpawn/NeutralSpawn.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 8016e510 +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" @@ -16,6 +17,14 @@ backup #Don't run for players 5 and 6 cmpwi REG_PlayerSlot,5 bge Exit +#Don't run in Training + getMinorMajor r3 + cmpwi r3, SCENE_TRAINING_IN_GAME + beq Exit +#Don't run in Target Test + getMinorMajor r3 + cmpwi r3, SCENE_TARGETS_IN_GAME + beq Exit #Check if teams lbz r3, 0x24D0 (MatchInfo) diff --git a/External/NormalDevelopMode/Enable.asm b/External/NormalDevelopMode/Enable.asm new file mode 100644 index 00000000..da4a9b92 --- /dev/null +++ b/External/NormalDevelopMode/Enable.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x8015FDBC +################################################################################ + +b 0xAC \ No newline at end of file diff --git a/External/NormalDevelopMode/NormalCStick1.asm b/External/NormalDevelopMode/NormalCStick1.asm new file mode 100644 index 00000000..470cf731 --- /dev/null +++ b/External/NormalDevelopMode/NormalCStick1.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x8006AE90 +################################################################################ + +li r0, 0 \ No newline at end of file diff --git a/External/NormalDevelopMode/NormalCStick2.asm b/External/NormalDevelopMode/NormalCStick2.asm new file mode 100644 index 00000000..3ac14f58 --- /dev/null +++ b/External/NormalDevelopMode/NormalCStick2.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x800300A4 +################################################################################ + +li r0, 0 \ No newline at end of file diff --git a/External/NormalDevelopMode/StaleMoves.asm b/External/NormalDevelopMode/StaleMoves.asm new file mode 100644 index 00000000..d998f128 --- /dev/null +++ b/External/NormalDevelopMode/StaleMoves.asm @@ -0,0 +1,5 @@ +################################################################################ +# Address: 0x80089250 +################################################################################ + +b 0x8 \ No newline at end of file diff --git a/External/PortPriority/FighterGrab/FighterGrab.asm b/External/PortPriority/FighterGrab/FighterGrab.asm new file mode 100644 index 00000000..9bdad4af --- /dev/null +++ b/External/PortPriority/FighterGrab/FighterGrab.asm @@ -0,0 +1,205 @@ +################################################################################ +# Address: 0x80078C04 +# Tags: [affects-gameplay] +################################################################################ +.set HSD_Randi, 0x80380580 +.set CheckPrevHitPlayers, 0x8000ACFC +.set CompareScaleZ, 0x8007F804 +.set GrabCheckOverlap, 0x80007ECC +.set LineCheckObstruct, 0x80084CE4 +.set CheckNextGObj, 0x80078C4C + +stfs f1,0x20(sp) #Backup this fighter's unk grab position var in stack + +addi r3,r29,0 #Current victim's GObj +addi r4,r25,0 #This GObj +bl lbl_GrabCheckVictim + +cmpwi r3,0 #Check if victim is also grabbing this fighter +beq- lbl_Win #If victim is not feeling touchy, this fighter wins the interaction + +lfs f1,0x1830(r30) #This fighter's damage +lfs f0,0x1830(r28) #Victim's damage + +fcmpo cr0,f1,f0 #Compare this fighter's % to victim's +cror 2,0,2 #OR cr0_lt with cr0_eq and put result in cr_eq to dodge NaN edge cases +bne- lbl_Lose #If this fighter has a higher % than the victim, lose the interaction + +fcmpu cr0,f1,f0 #Check if both %s are equal +bne- lbl_Win #If this fighter REALLY has less damage than the victim, win the grab + +li r3,2 #Load 2 into randomizer to get a 50/50 chance to beat victim if %s are equal +branchl r12,HSD_Randi #HSD integer randomizer + +cmpwi r3,0 +beq- lbl_Lose #If result is 0, lose the interaction + +lbl_Win: +lwz r0,0(r28) #Get victim's GObj pointer +b lbl_EXIT #Go to injection exit + +lbl_Lose: + +#Documentation on 0x1A58 and 0x1A5C is conflicting, not entirely sure what their +#true purpose is, but they are both related to attacker/victim logic +#li r0,0 #Set r0 to NULL +#stw r0,0x1A5C(r30) #Store NULL pointer to this fighter's hitlag partner pointer? +#stw r0,0x1A58(r30) #Store NULL pointer to this fighter's victim pointer? +#lbz r3,0x221B(r30) #Load flags at 0x221B +#rlwimi r3,r0,2,29,29 #Move r0 over bit 29 of r3 +#stb r3,0x221B(r30) #Grab bool is now false +#lfs f1,0x20(sp) #Load grab position thingy + +branch r12,CheckNextGObj #Go to line of code that stores grab position thingy + +lbl_EXIT: +lfs f1,0x20(sp) #Load grab position thingy +b lbl_Return + +.set rHitLoop, 31 +.set rThisFP, 30 +.set rVicFP, 29 +.set rLoopHitbox, 28 +.set rHit, 27 +.set rThisObj, 26 +.set rVicHurtbox, 25 +.set rLoopHurtbox, 24 +.set rReturn, 23 + +lbl_GrabCheckVictim: + +mflr r0 #Get return pointer from link register +stw r0,0x4(sp) #Store link register at top of current stack position +stwu sp,-0x40(sp) #Make space for 0x40 bytes in the stack +stfd f31,0x38(sp) #Backup f31 so we can store 0.0F to it +stmw r23,0x14(sp) #Backup all registers from r23 until r31 + +addi rThisObj,r3,0 #Store this GObj +lwz rThisFP,0x2C(rThisObj) #Get this GObjs user_data +lwz rVicFP,0x2C(r4) #Get victim's user_data + +li rLoopHitbox,0 #Init loop counter + +lfs f0,-0x76D0(rtoc) +stfs f0,0x216C(rThisFP) #Get and store maximum single-precision float limit + +addi rHitLoop,rThisFP,0 #Move this fighter's data to temporary hitbox loop register + +li rReturn,0 #Init return value, this stays at "false" unless all checks are passed + +lfs f31,-0x7700(rtoc) #Load 0.0F + +lbl_LoopHitboxStart: +addi r3,rHitLoop,0x914 #Get address of the start of this fighter's hitbox array +lwz r0,0x914(rThisFP) #Load hitbox state +addi rHit,r3,0 #Move hitbox struct address to reserved hitbox register +cmpwi r0,0 #Check if hitbox state is "disabled" +beq- lbl_LoopIncHitbox #If hitbox is disabled, check for the next one + +lwz r0,0x30(r3) #Get hitbox element +cmplwi r0,8 #Check if hitbox's element is "grab" +bne- lbl_LoopIncHitbox #If we're not dealing with a grabbox, check next hitbox + +lbz r0,0x40(r3) #Get hitbox flags +rlwinm. r0,r0,27,31,31 #Check to ignore airborne fighters +beq- lbl_CheckFlagNext +lwz r0,0xE0(rVicFP) #Get ground_or_air +cmpwi r0,1 #Check if fighter is airborne +beq- lbl_SkipToCheckPrevHit +lbl_CheckFlagNext: +lbz r0,0x40(r3) #Get hitbox flags +rlwinm. r0,r0,28,31,31 #Check if fighter is grounded +beq- lbl_LoopIncHitbox +lwz r0,0xE0(rVicFP) #Get grorund_or_air +cmpwi r0,0 #Check if fighter is grounded +bne- lbl_LoopIncHitbox #Check next hitbox if airborne + +lbl_SkipToCheckPrevHit: +addi r3,rVicFP,0 +addi r4,rHit,0 +branchl r12,CheckPrevHitPlayers #Check previously hit players + +cmpwi r3,0 +bne- lbl_LoopIncHitbox #Check next hitbox if victim has already been hit by this one + +addi rVicHurtbox,rVicFP,0 #Move victim's user_data to temporary hurtbox register +li rLoopHurtbox,0 #Init hurtbox loop +b lbl_LoopHurtboxCheck #Go to hurtbox loop count + +lbl_LoopHurtboxStart: +lwz r0,0x11E8(rVicHurtbox) #Get hurtbox's grab enable bool? +cmpwi r0,0 +beq- lbl_LoopIncHitboxHurtbox #If hurtbox cannot be grabbed, check the next one + +mr r3,rVicFP +branchl r12,CompreScaleZ #Compare victim's Z-scale to 0.0F + +lfs f1,0x38(rThisFP) #Get this fighter's Y-scale +mr r5,r3 #Move float* address of Z-scale? +lfs f2,0x38(rVicFP) #Get victim's Y-scale +mr r3,rHit +lfs f3,0xB8(rVicFP) #Get victim's current Z-position +addi r4,rVicHurtbox,4512 #Address of current hurtbox's data +branchl r12,GrabCheckOverlap #Check for grab overlap + +cmpwi r3,0 +beq- lbl_LoopIncHitboxHurtbox #If there is no overlap, check the next hurtbox + +addi r3,rThisFP,0 +addi r4,rVicFP,0 +branchl r12,LineCheckObstruct #Check for obstructions between the two fighters + +cmpwi r3,0 +bne- lbl_END #If there are obstructions, exit the function with FALSE in r23 + +#Series of initializations from original grab logic, to flag the victim as if we've attacked them +#We don't want that in this case, so this block is commented out +#addi r3,rThisFP,0 +#addi r4,rHit,0 +#addi r6,rVicFP,0 +#li r5,0 +#li r7,0 +#bl 0x80076808 + +lfs f1,0xB0(rVicFP) #Get victim's X-position +lfs f0,0xB0(rThisFP) #Get this fighter's X-position + +fsubs f1,f1,f0 #Subtract this fighter's X-pos from victim's X-pos +fcmpo cr0,f1,f31 #Compare to 0.0F +bge- lbl_SkipNeg #If positive, value is already absolute + +fneg f1,f1 #Otherwise, flip the sign bit of the negative result (fabs) + +lbl_SkipNeg: +lfs f0,0x216C(rThisFP) #Get this fighter's grab distance threshold +fcmpo cr0,f1,f0 #Compare position to 0x216C +bge- lbl_END #Return with FALSE in r23 + +li rReturn,1 #Now, all checks have been passed; both players' grabs overlap +b lbl_END #Return with TRUE in r23 + +lbl_LoopIncHitboxHurtbox: +addi rVicHurtbox, rVicHurtbox, 76 #Get address of next hurtbox struct +addi rLoopHurtbox, rLoopHurtbox, 1 #Incremennt hurtbox loop counter + +lbl_LoopHurtboxCheck: +lbz r0,0x119E(rVicFP) #Get victim's hurtbox count +cmplw rLoopHurtbox,r0 #Check if hurtbox loop count has exceeded victim's number of hurtboxes +blt+ lbl_LoopHurtboxStart + +lbl_LoopIncHitbox: +addi rLoopHitbox,rLoopHitbox,1 #Increment hitbox loop count +cmplwi rLoopHitbox,4 #Check if all four hitboxes have been compared +addi rHitLoop, rHitLoop, 0x138 #Add size of hurtbox struct to temporary hitbox register +blt+ lbl_LoopHitboxStart + +lbl_END: +mr r3,rReturn #Return isOverlap bool +lmw r23,0x14(sp) #Restore all non-volatile registers and return +lwz r0,0x44(sp) #Load return pointer into r0 +lfd f31,0x38(sp) #Restore f31 +addi sp,sp,0x40 #Restore stack position +mtlr r0 #Move return pointer from r0 into link register +blr #Return from subroutine + +lbl_Return: \ No newline at end of file diff --git a/External/PortPriority/LedgeGrab/CheckLastGObj.asm b/External/PortPriority/LedgeGrab/CheckLastGObj.asm new file mode 100644 index 00000000..4909e05b --- /dev/null +++ b/External/PortPriority/LedgeGrab/CheckLastGObj.asm @@ -0,0 +1,329 @@ +################################################################################ +# Address: INJ_CheckLastGObj +# Tags: [affects-gameplay] +################################################################################ +.include "Common/Common.s" +.include "./LedgeGrab.s" + +b CODE_START + +_static_vars: +blrl +.long 0, 0, 0, 1 +# allocations for variables +# last word is a flag that enables/disables the code. set to 0 to disable + +b _get_player_GObj_ID # xGetPlayerGObjID + +_get_player_GObj_ID: +# r3 = player GObj +# returns: +# r3 = unchanged +# r4 = first player GObj +# r5 = ID + +mr r4, r3 +li r5, -1 +# r3 = this GObj +# r4 = counted GObj +# r5 = counter + +_while_first_GObj_not_counted: + lwz r0, 0xC(r4) + addi r5, r5, 1 + cmpwi r0, 0 + bge- _return_0 + mr r4, r0 + b _while_first_GObj_not_counted + # once first GObj is reached, this GObj ID will be finalized + +_return_0: +blr + +_recursive_cliffcatch_by_distance: +# r3 = bools (before cleared) +# r4 = first player GObj +# registers: +.set rBools, 3 +.set rThis, 4 +.set rRecords, 5 +.set rAddr, 7 +.set rQuery, 8 + +# loop registers, for epilog: +.set rL, 9 # Left - order of: ledge vertex ID, ECB side +.set rR, 10 # Right - order of: ledge Link ID +.set rI, 11 # Index - uses rL or rR to create index +.set rT, 3 # This - represents value from rThis index +.set rQ, 12 # Query - represents value from rQuery index + +# rB clobbers rR in late part of epilog loop: +.set rB, 10 # Base + +# float registers used to calculate distance for fQuery and comparing to fThis +.set fThis, 1 +.set fQuery, 2 +.set fVert, 3 +.set fECB, 4 +.set fSquare, 3 +.set fSum, 0 +.set fInvRoot, 4 + +# GObj offsets: +.set xNext, 0x8 + +# Player GObjData offsets: +.set xFacing, 0x2C # float, sign = TRUE if facing left; else facing right +.set xTopN, 0xB0 # XY float pair +.set xECB, 0x784 # XY float pairs left and right, 0x8-aligned +.set xLedgeLink, 0x730 # IDs left and right, 0x4-aligned +.set xECBFlags, 0x824 + +# stack offsets: +.set xGObjData, 0xC +.set xStackSize, 0x10 + +# r13 offsets: +.set xColLinks, -0x51E4 # array of 8-byte indexed structures +.set xColVerts, -0x51E8 # array of 0x18-byte indexed structures + +# loop bools: +.set bInitThis, 31 + +_pre_recursion: +li r0, 32 +mtctr r0 +li rRecords, 0 +# rRecords = incrementing counter tracks number of frames to compare at end +# ctr holds number of GObjs to parse for +# -- ctr loop runs simultaneously with recursion loop to check bools +# -- recursion creates a stack frame for every true bit found in bools field + +_recursion: +mflr r0 +stw r0, 0x4(sp) +stwu sp, -xStackSize(sp) + +cmpwi rThis, 0 +bge- _epilog_operation +# if given GObj exists, then continue CTR loop + +_ctr_loop: + andi. r0, rBools, 1 + srwi rBools, rBools, 1 + bne- _iter_recursion + # /if a bool is found, it triggers an iteration in recursion + # /else, we just check for the next bool in iter_ctr + + _iter_ctr: + lwz rThis, xNext(rThis) + cmpwi rThis, 0 + bdnzt+ lt, _ctr_loop + b _epilog_operation + # /if bool was false + # - then load next GObj, and decrement CTR + # /if (new CTR = 0) OR (next GObj is >= 0) + # - then break from CTR loop and begin return operation + # - else, continue CTR loop + + _iter_recursion: + lwz r0, 0x2C(rThis) + addi rRecords, rRecords, 1 + stw r0, xGObjData(sp) + lwz rThis, xNext(rThis) + bl _recursion + # /if bool was true + # then load next GObj and create a new stack frame + +_epilog_operation: +mtctr rRecords +subic. rRecords, rRecords, 1 +blt _return_1 +# /if rRecords-1 is negative, then skip epilog operation. + +# else, CTR = rRecords before decrement +# so it is at least 1; meaning we can use it for a bdnz loop + + _setup_epilog_loop: + crclr bInitThis + addi rAddr, sp, xGObjData + + _epilog_loop: + lwzu rQuery, xStackSize(rAddr) + bt+ bInitThis, _this_initialized + mr. rThis, rQuery + bge- _return_1 + # /if not initialized, rThis = rQuery + # /if rThis is null, then we skip this frame entirely + + _this_initialized: + cmpwi rQuery, 0 + bge- _epilog_iter + # /if rQuery is null (and rThis is not) then we just skip this query + + _compare_ledge_side: + lbz rQ, xECBFlags(rQuery) + lbz rT, xECBFlags(rThis) + rlwinm rQ, rQ, 0, 0x3 + rlwinm rT, rQ, 0, 0x3 + cmpw rQ, rT + bne _epilog_iter + # /if players aren't competing for the same ledge side, + # then skip this query + + _LR_index: + rlwinm rL, rQ, 31, 1 + rlwinm rR, rQ, 0, 1 + # Left Right + # rL = 1 0 -- for order L, R + # rR = 0 1 -- for order R, L + # (boolean index avoids need for conditional branches) + + slwi rI, rR, 2 + addi rI, rI, xLedgeLink + # rI = (rR<<2) + xLedgeLink + # this creates a word-alignment in rI (index) for order R, L + # -- offset xLedgeLink uses the order R, L for memorizing ledge link IDs + + lwzx rT, rThis, rI # load values according to facing index modifier + lwzx rQ, rQuery, rI + cmpw rT, rQ # rThis ledge ID == rQuery Ledge ID? + bne+ _epilog_iter + # skip if players do not share the same ledge + # /else; rQuery and rThis compete for shortest ECB distance + + _calculate_distance: + # calculate distance between rQuery's ECB and the ledge vertex in question, using paired singles + lwz rB, xColLinks(r13) + slwi rI, rT, 3 # index of collision link + lwzx rB, rB, rI + # rB = address of collision link data + + slwi r0, rL, 1 + lhzx rI, rB, r0 + # rI = vertex index + + lwz rB, xColVerts(r13) + mulli rI, rI, 0x18 + addi rI, rI, 8 + psq_lx fVert, rB, rI,0,0 + # fVert = X, Y of stage vertex to measure distance from + + psq_l fECB, xECB(rQuery),0,0 + psq_l f0, xTopN(rQuery),0,0 + ps_add fECB, fECB, f0 + ps_sub f0, fECB, fVert + # f0 = delta between fECB and fVert + + ps_mul fSquare, f0, f0 # square delta pair + ps_sum0 fSum, fSquare, fSquare, fSquare # add pair values together + frsqrte fInvRoot, fSum + fmuls fQuery, fInvRoot, fSum # pythag + # fQuery = square root of (A*A) + (B*B) + + fcmpo cr0, fThis, fQuery + crand lt, lt, bInitThis + blt- _disqualify + fmr fThis, fQuery + mr rThis, rQuery + # /if this is the first player to be measured, + # or if fThis > fQuery (technically >=, but it's a float) + # then fThis = fQuery; continue + + crnot bInitThis, lt + b _epilog_iter + # by using !lt, we're always setting bInitThis to TRUE rather than toggling it + # this is because lt is definitively FALSE for this conditional branch + + _disqualify: + li r0, 0 + stw r0, 0(rAddr) + # /if we've disqualified a GObj, nullify it and continue epilog loop + + _epilog_iter: + bdnz+ _epilog_loop + + + + _break_from_epilog_loop: + # /if remaining number of frames is 0, then run action change for rThis + lwz r3, 0x0(rThis) + stw rRecords, 0x8(sp) + branchl r12, 0x80081370 + lwz rRecords, 0x8(sp) + # call CliffCatch action for winning player + +_return_1: +addi sp, sp, xStackSize +lwz r0, 0x4(sp) +mtlr r0 +blr + + +CODE_START: +# after collision callback event has returned +# -- if this is the final GObj being checked, then +# we select which GObjs actually get to execute cliffcatch action change + +# Gate states: +.set open, 0 # when open, calling cliffcatch action change will behave normally +.set close, 1 # when closed, attempting cliffcatch will log player in xBools field +# -- closed gate will not affect player GObjs with IDs larger than bool field (32) + +# r29 = this player GObj +# r30 = this player data + +lwz r0, 0x8(r29) +cmpwi r0, 0 +bne+ _return +# return immediately if this is not the last player GObj + + _if_last_player: + mr r3, r29 + bl _get_player_GObj_ID + # r4 = first player GObj ID + + _update_GObj_max: + bl _static_vars + mflr r30 + # r30 must now be recovered before returning + # we can use 0x2C(r29) to restore it before returning + + lhz r6, xThisCount(r30) + lwz r3, xBools(r30) + cmpw cr0, r5, r6 + # the new value for xThisCount is in r5 + # /if it's != r6, then a player GObj has been added/destroyed in the chain + + cmpwi cr1, r3, 0 + crorc eq, eq+4, eq + # cr0 eq = cr1 eq | cr0 !eq + + sth r5, xThisCount(r30) + li r0, open + sth r6, xPrevCount(r30) + stw r0, xGate(r30) + # open == 0; so it's also used to nullify bools + + stw r0, xBools(r30) + # updated ID count in variables + # cleared bools + + # r3 = bools (before cleared) + # r4 still = first player GObj + + beq- _end_of_cliffcatch_update + # unlikely case where GObj chain count does not match the previous frame + # -- indicates bool index may be misaligned, so logic is delayed until they can be rechecked + + bl _recursive_cliffcatch_by_distance + # fancy parse function deals with all the dirty details + + _end_of_cliffcatch_update: + li r0, close + stw r0, xGate(r30) + lwz r30, 0x2C(r29) + # close cliffcatch action gate, so that bools can reaccumilate for next check + +_return: +mr r3, r29 \ No newline at end of file diff --git a/External/PortPriority/LedgeGrab/LedgeGrab.s b/External/PortPriority/LedgeGrab/LedgeGrab.s new file mode 100644 index 00000000..0862be74 --- /dev/null +++ b/External/PortPriority/LedgeGrab/LedgeGrab.s @@ -0,0 +1,16 @@ +.ifndef HEADER_LEDGE_GRAB + +# Source: https://smashboards.com/threads/ledge-grab-port-priority-fix.463581/ +# Code converted to work in Slippi by Fizzi + +.set INJ_CheckLastGObj, 0x8006c3a8 + +.set xThisCount, 0x0 +.set xPrevCount, 0x2 +.set xBools, 0x4 +.set xGate, 0x8 # opens/closes access to cliffcatch action changes when called +.set xEnabled, 0xC +.set xGetPlayerGObjID, 0x10 + +.endif +.set HEADER_LEDGE_GRAB, 1 diff --git a/External/PortPriority/LedgeGrab/SkipAction.asm b/External/PortPriority/LedgeGrab/SkipAction.asm new file mode 100644 index 00000000..4b678c14 --- /dev/null +++ b/External/PortPriority/LedgeGrab/SkipAction.asm @@ -0,0 +1,64 @@ +################################################################################ +# Address: 0x80081388 +# Tags: [affects-gameplay] +################################################################################ +.include "Common/Common.s" +.include "./LedgeGrab.s" + +# whenever cliffcatch action is called +# we record it in a 32-bit flag field, indexed by player GObj +# and skip the action for now, so that it can be called later on. +# -- if a GObj is 32nd or higher in the chain, it is not delayed or recorded. +.set open, 0 + +# r30 == r3 +# r3 must be maintained if returning to function + +computeBranchTargetAddress r6, INJ_CheckLastGObj +addi r6, r6, 0x8 +mr r3, r30 +# r3 = unchanged +# r6 = variables base address + +lwz r0, xGate(r6) +lwz r7, xEnabled(r6) +cmpwi cr0, r0, open +cmpwi cr1, r7, 0 +cror eq, eq, eq+4 +beq- _default +# if gate is open, allow call to go through +# otherwise, prevent the call and save it for later as an indexed bool + +# We also treat the code being disabled like having the gate always open. +# this will cause the bools to be blank at te end of collision measurements, +# so it will prevent the code from having any effect. + +addi r7, r6, xGetPlayerGObjID +mtctr r7 +bctrl +# r3 = unchanged +# r5 = player ID +# r6 = unchanged + +cmpwi r5, 32 +bge- _default +# also, don't bother with GObjs that we can't keep track of (32-bit field) +# if for some reason there are that many players, then they won't be affected by the gate logic + + # r5 = player ID + # r6 = variables base address + + li r4, 1 + slw r5, r4, r5 + lwz r0, 0x4(r6) + or r5, r5, r0 + stw r5, 0x4(r6) + # update flagfield to include this ID + + _skip: + branch r12, 0x800814ec + # /if skipping function, return to its epilog + # /else, default returns execution to prolog + +_default: +lwz r3, 0x002C (r3) \ No newline at end of file diff --git a/External/PortPriority/ThrowHitstun/FixThrowHitstun.asm b/External/PortPriority/ThrowHitstun/FixThrowHitstun.asm new file mode 100644 index 00000000..ef46213b --- /dev/null +++ b/External/PortPriority/ThrowHitstun/FixThrowHitstun.asm @@ -0,0 +1,25 @@ +################################################################################ +# Address: 0x8008E25C +# Tags: [affects-gameplay] +################################################################################ + +lwz r4,0x1198(r29) #Get thrower GObj pointer +cmplwi r4,0 +beq- lbl_FrameAdvance #Run original code if NULL +lwz r4,0x2C(r4) +lbz r4,0xC(r4) #Get port ID of thrower +lbz r0,0xC(r29) #Get port ID of victim +cmpw r0,r4 +bgt- lbl_Skip #If victim is lower priority, skip frame advance +lbl_FrameAdvance: +lis r12, 0x8007 +subi r12, r12, 0x145C +mtlr r12 +blrl +b lbl_END #Exit +lbl_Skip: +lfs f1,0x2340(r29) #Load victim's hitstun frames +lfs f0,-0x7508(rtoc) #Load 1.0F +fadds f0,f1,f0 #hitstun += 1.0F; +stfs f0,0x2340(r29) #Store fixed hitstun +lbl_END: \ No newline at end of file diff --git a/External/PortPriority/ThrowHitstun/SetPtrBowser1.asm b/External/PortPriority/ThrowHitstun/SetPtrBowser1.asm new file mode 100644 index 00000000..5642c931 --- /dev/null +++ b/External/PortPriority/ThrowHitstun/SetPtrBowser1.asm @@ -0,0 +1,6 @@ +################################################################################ +# Address: 0x80132ECC +# Tags: [affects-gameplay] +################################################################################ + +addi r4, r29, 0x0 \ No newline at end of file diff --git a/External/PortPriority/ThrowHitstun/SetPtrBowser2.asm b/External/PortPriority/ThrowHitstun/SetPtrBowser2.asm new file mode 100644 index 00000000..960fb2f7 --- /dev/null +++ b/External/PortPriority/ThrowHitstun/SetPtrBowser2.asm @@ -0,0 +1,6 @@ +################################################################################ +# Address: 0x80133A48 +# Tags: [affects-gameplay] +################################################################################ + +addi r4, r29, 0x0 \ No newline at end of file diff --git a/External/PortPriority/ThrowHitstun/SetPtrBowser3.asm b/External/PortPriority/ThrowHitstun/SetPtrBowser3.asm new file mode 100644 index 00000000..2b028c3b --- /dev/null +++ b/External/PortPriority/ThrowHitstun/SetPtrBowser3.asm @@ -0,0 +1,6 @@ +################################################################################ +# Address: 0x80133B68 +# Tags: [affects-gameplay] +################################################################################ + +addi r4, r29, 0x0 \ No newline at end of file diff --git a/External/PortPriority/ThrowHitstun/SetPtrFalconGanon.asm b/External/PortPriority/ThrowHitstun/SetPtrFalconGanon.asm new file mode 100644 index 00000000..d43ea5f0 --- /dev/null +++ b/External/PortPriority/ThrowHitstun/SetPtrFalconGanon.asm @@ -0,0 +1,6 @@ +################################################################################ +# Address: 0x800E52E8 +# Tags: [affects-gameplay] +################################################################################ + +addi r4, r29, 0x0 \ No newline at end of file diff --git a/External/PreventWobbling/Init Wobble Count Air.asm b/External/PreventWobbling/Init Wobble Count Air.asm new file mode 100644 index 00000000..93c59006 --- /dev/null +++ b/External/PreventWobbling/Init Wobble Count Air.asm @@ -0,0 +1,10 @@ +################################################################################ +# Address: 800db880 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" + +Wobbling_InitWobbleCount + +#Original codeline +lwz r0, 0x005C (sp) diff --git a/External/PreventWobbling/Init Wobble Count Ground.asm b/External/PreventWobbling/Init Wobble Count Ground.asm new file mode 100644 index 00000000..1bfd4e32 --- /dev/null +++ b/External/PreventWobbling/Init Wobble Count Ground.asm @@ -0,0 +1,10 @@ +################################################################################ +# Address: 800dbbd4 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" + +Wobbling_InitWobbleCount + +#Original codeline +lwz r0, 0x005C (sp) diff --git a/External/PreventWobbling/PreventWobbling.s b/External/PreventWobbling/PreventWobbling.s new file mode 100644 index 00000000..750e0fdb --- /dev/null +++ b/External/PreventWobbling/PreventWobbling.s @@ -0,0 +1,191 @@ +.ifndef HEADER_PREVENT_WOBBLING + +.macro Wobbling_InitWobbleCount +.include "Common/Common.s" + +.set REG_DefenderData,29 + +.set OFST_WobbleCounter,0x2384 +.set OFST_LastMoveID,0x2386 + +#Init count + li r3,0 + stb r3,OFST_WobbleCounter(REG_DefenderData) +#Init last move ID + li r3,-1 + sth r3,OFST_LastMoveID(REG_DefenderData) +.endm + +.macro Wobbling_Check +.include "Common/Common.s" + +.set REG_DefenderData,27 + +.set ASID_CapturePulledHi, 0xDF +.set ASID_CaptureDamageLw, 0xE4 +.set ASID_CaptureJump, 0xE6 + +.set OFST_IsLeader,0x2222 +.set Bitflag_IsLeader,0x4 +.set OFST_IsDead,0x221f +.set Bitflag_IsDead,0x40 +.set OFST_IsFrozen,0x2219 +.set Bitflag_IsFrozen,0x04 + +.set OFST_WobbleCounter,0x2384 +.set OFST_LastMoveID,0x2386 +.set MaxWobbles,3 + +.set Match_CheckIfTeams,0x8016B168 +.set AS_218_CatchCut,0x800da698 +.set AS_CaptureJump,0x800dc070 +.set ActionStateChange,0x800693ac +.set AirStoreBoolLoseGroundJump,0x8007d5d4 +.set PlayerBlock_LoadDataOffset,0x8003418C +.set IceClimbers_CheckNanaAliveAndActionable, 0x8012300c + +.set Wobbling_Exit,0x8008F0C8 + +# injecting upon entering capturedamage + + #Ensure im being held in a grab (not thrown) + lwz r3,0x10(REG_DefenderData) + cmpwi r3,ASID_CapturePulledHi + blt Original + cmpwi r3,ASID_CaptureDamageLw + bgt Original + #Get grabber data + lwz r3,0x1A58(REG_DefenderData) + cmpwi r3,0 + beq Original + lwz r4,0x2C(r3) + #Ensure grabber has a follower + lbz r4,OFST_IsLeader(r4) + rlwinm. r4,r4,0,Bitflag_IsLeader + beq Original +/* + lbz r3,0xC(r3) + li r4,1 + branchl r12,PlayerBlock_LoadDataOffset + cmpwi r3,0 + beq Original +*/ + #Check if the person who damaged me IS that fighter + lwz r4,0x1868(REG_DefenderData) + cmpw r3,r4 + beq IsFollower + #Check if its an item + lhz r5,0x0(r4) + cmpwi r5,6 + bne Original + IsItem: + #Check if the item belongs to the fighter + lwz r5,0x2C(r4) + lwz r4,0x518(r5) + cmpw r3,r4 + bne Original + #Check if this is the same move i was last hit with + lhz r3,0xDA8(r5) + lhz r4,OFST_LastMoveID(REG_DefenderData) + cmpw r3,r4 + beq Original + #Increment wobble count + b UpdateWobbleCount + IsFollower: + #Check if this is the same move i was last hit with + lwz r5,0x2C(r3) + lhz r3,0x2088(r5) + lhz r4,OFST_LastMoveID(REG_DefenderData) + cmpw r3,r4 + beq Original + UpdateWobbleCount: + #Update last move id + sth r3,OFST_LastMoveID(REG_DefenderData) + #Increment wobble count by 1 + lbz r3,OFST_WobbleCounter(REG_DefenderData) + addi r3,r3,1 + stb r3,OFST_WobbleCounter(REG_DefenderData) + #Only in singles + branchl r12,Match_CheckIfTeams + cmpwi r3,0 + bne Original + #Check if wobble count exceeds max + lbz r3,OFST_WobbleCounter(REG_DefenderData) + cmpwi r3,MaxWobbles + ble Original + + .set REG_GrabberGObj, 20 + .set REG_FollowerGObj, 21 + backup + #Break this grab + lwz REG_GrabberGObj,0x1A58(REG_DefenderData) + mr r3,REG_GrabberGObj + branchl r12,AS_218_CatchCut + #Enter Nana into catchcut as well + lwz r3,0x2C(REG_GrabberGObj) #Get grabber data + lbz r3,0xC(r3) + li r4,1 + branchl r12,PlayerBlock_LoadDataOffset + cmpwi r3,0 + beq SkipBreak + mr REG_FollowerGObj,r3 + #Check if her AI is in follow mode + #lbz r5, 0x1a88 + 0xFA (r4) + #rlwinm. r5,r5,0,0x01 + #beq SkipBreak + #Ensure that she is alive and actionable + lwz r4,0x2c(REG_FollowerGObj) + lbz r0, OFST_IsDead (r4) # dead flag + rlwinm. r0, r0, 0, Bitflag_IsDead + bne SkipBreak + lbz r0, OFST_IsFrozen (r4) # frozen flag + rlwinm. r0, r0, 0, Bitflag_IsFrozen + bne SkipBreak + lbz r0, 0x2071 (r4) # state kind + rlwinm r0, r0, 28, 28, 31 + cmpwi r0, 13 # star and screen KOs + beq SkipBreak +CheckGroundState: + #Check grounded/airborne + lwz r5, 0xE0 (r4) + cmpwi r5,0 + bne AerialBreak + GroundBreak: + #Grounded nana enters catchcut (800da698, r4 is 0) + li r4,0 + branchl r12,AS_218_CatchCut #0x800da698 + b SkipBreak + AerialBreak: + #Aerial nana enters capturejump (800dc070) + lwz r3,0x2c(REG_FollowerGObj) + branchl r12,AirStoreBoolLoseGroundJump #0x8007d5d4 + # give velocity + lwz r3,0x2c(REG_FollowerGObj) + lwz r5, -0x514C (r13) + lfs f0, 0x0374 (r5) + lfs f1,0x2c(r3) + fneg f1,f1 + fmuls f0,f0,f1 + stfs f0, 0x80 (r3) + lfs f0, 0x0378 (r5) + stfs f0, 0x84 (r3) + lfs f0, -0x6900 (rtoc) + stfs f0, 0x2340 (r3) + # change state + lfs f1, -0x6900 (rtoc) + lfs f2, -0x68FC (rtoc) + fmr f3, f1 + mr r3, REG_FollowerGObj + li r4, ASID_CaptureJump + li r5, 0 + li r6, 0 + branchl r12,ActionStateChange #0x800693ac + SkipBreak: + restore + branch r12,Wobbling_Exit + + Original: +.endm + +.endif +.set HEADER_PREVENT_WOBBLING, 1 diff --git a/External/PreventWobbling/Ranked/Init Wobble Count Air.asm b/External/PreventWobbling/Ranked/Init Wobble Count Air.asm new file mode 100644 index 00000000..356174d4 --- /dev/null +++ b/External/PreventWobbling/Ranked/Init Wobble Count Air.asm @@ -0,0 +1,27 @@ +################################################################################ +# Address: 800db880 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" +.include "Online/Online.s" +.include "Common/Common.s" + +# TODO: This doesn't actually work. It would be enabled for all online games when playing but +# TODO: if you went to VS mode to play a local game, it wouldn't be enabled when playing but would +# TODO: be enabled when that replay was played. We will have to pass the scene and mode the game +# TODO: was played to the playback engine to properly decide when to enable this code in a replay + +# Only run this code in ranked and playback +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +beq EXEC_CODE +cmpwi r3, SCENE_PLAYBACK_IN_GAME +beq EXEC_CODE +b WRAPPER_EXIT + +EXEC_CODE: +Wobbling_InitWobbleCount + +WRAPPER_EXIT: +#Original codeline +lwz r0, 0x005C (sp) \ No newline at end of file diff --git a/External/PreventWobbling/Ranked/Init Wobble Count Ground.asm b/External/PreventWobbling/Ranked/Init Wobble Count Ground.asm new file mode 100644 index 00000000..dd5dd16b --- /dev/null +++ b/External/PreventWobbling/Ranked/Init Wobble Count Ground.asm @@ -0,0 +1,27 @@ +################################################################################ +# Address: 800dbbd4 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" +.include "Online/Online.s" +.include "Common/Common.s" + +# TODO: This doesn't actually work. It would be enabled for all online games when playing but +# TODO: if you went to VS mode to play a local game, it wouldn't be enabled when playing but would +# TODO: be enabled when that replay was played. We will have to pass the scene and mode the game +# TODO: was played to the playback engine to properly decide when to enable this code in a replay + +# Only run this code in ranked and playback +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +beq EXEC_CODE +cmpwi r3, SCENE_PLAYBACK_IN_GAME +beq EXEC_CODE +b WRAPPER_EXIT + +EXEC_CODE: +Wobbling_InitWobbleCount + +WRAPPER_EXIT: +#Original codeline +lwz r0, 0x005C (sp) \ No newline at end of file diff --git a/External/PreventWobbling/Ranked/Wobble Check.asm b/External/PreventWobbling/Ranked/Wobble Check.asm new file mode 100644 index 00000000..c75911d9 --- /dev/null +++ b/External/PreventWobbling/Ranked/Wobble Check.asm @@ -0,0 +1,27 @@ +################################################################################ +# Address: 8008F090 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" +.include "Online/Online.s" +.include "Common/Common.s" + +# TODO: This doesn't actually work. It would be enabled for all online games when playing but +# TODO: if you went to VS mode to play a local game, it wouldn't be enabled when playing but would +# TODO: be enabled when that replay was played. We will have to pass the scene and mode the game +# TODO: was played to the playback engine to properly decide when to enable this code in a replay + +# Only run this code in ranked and playback +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +beq EXEC_CODE +cmpwi r3, SCENE_PLAYBACK_IN_GAME +beq EXEC_CODE +b WRAPPER_EXIT + +EXEC_CODE: +Wobbling_Check + +WRAPPER_EXIT: +#Original codeline +lwz r0, 0x0010 (r27) \ No newline at end of file diff --git a/External/PreventWobbling/Wobble Check.asm b/External/PreventWobbling/Wobble Check.asm new file mode 100644 index 00000000..6b7ebbdb --- /dev/null +++ b/External/PreventWobbling/Wobble Check.asm @@ -0,0 +1,10 @@ +################################################################################ +# Address: 8008F090 +# Tags: [affects-gameplay] +################################################################################ +.include "External/PreventWobbling/PreventWobbling.s" + +Wobbling_Check + +# Original codeline +lwz r0, 0x0010 (r27) \ No newline at end of file diff --git a/External/UCF 0.8/Indicator/UCF Text.asm b/External/UCF 0.8/Indicator/UCF Text.asm index 662ecd76..95250199 100644 --- a/External/UCF 0.8/Indicator/UCF Text.asm +++ b/External/UCF 0.8/Indicator/UCF Text.asm @@ -1,4 +1,6 @@ -#To be inserted @ 802662D0 +################################################################################ +# Address: 0x802662D0 +################################################################################ .include "Common/Common.s" .set REG_TextGObj,31 diff --git a/External/UCF 0.8/Logic/UCF DB.asm b/External/UCF 0.8/Logic/UCF DB.asm index c7d1cb06..9fb596d5 100644 --- a/External/UCF 0.8/Logic/UCF DB.asm +++ b/External/UCF 0.8/Logic/UCF DB.asm @@ -1,4 +1,7 @@ -#To be inserted at 800C9A44 +################################################################################ +# Address: 0x800C9A44 +# Tags: [affects-gameplay] +################################################################################ .include "Common/Common.s" .set REG_PlayerData,31 diff --git a/External/UCF 0.8/Logic/UCF SD.asm b/External/UCF 0.8/Logic/UCF SD.asm index 108cf1f9..d820eb98 100644 --- a/External/UCF 0.8/Logic/UCF SD.asm +++ b/External/UCF 0.8/Logic/UCF SD.asm @@ -1,4 +1,7 @@ -#To be inserted at 800998A4 +################################################################################ +# Address: 0x800998A4 +# Tags: [affects-gameplay] +################################################################################ .include "Common/Common.s" .set REG_PlayerData,31 diff --git a/External/UCF 0.8/Logic/UCF Tumble.asm b/External/UCF 0.8/Logic/UCF Tumble.asm index 96d3c33a..4b211ef2 100644 --- a/External/UCF 0.8/Logic/UCF Tumble.asm +++ b/External/UCF 0.8/Logic/UCF Tumble.asm @@ -1,4 +1,7 @@ -#To be inserted at 800908f4 +################################################################################ +# Address: 0x800908f4 +# Tags: [affects-gameplay] +################################################################################ .include "Common/Common.s" .set REG_PlayerData,31 diff --git a/External/UCF 0.84/Indicator/UCF Text.asm b/External/UCF 0.84/Indicator/UCF Text.asm new file mode 100644 index 00000000..bef5acda --- /dev/null +++ b/External/UCF 0.84/Indicator/UCF Text.asm @@ -0,0 +1,104 @@ +################################################################################ +# Address: 0x802662D0 +################################################################################ +.include "Common/Common.s" + +.set REG_TextGObj,31 +.set REG_TextProperties,30 + + +NTSC102: + .set Injection,0x802662D0 + .set Text_CreateTextGObj,0x803a6754 + .set Text_InitializeSubtext,0x803a6b98 + .set Text_UpdateSubtextSize,0x803a7548 +/* +NTSC101: + .set Injection,0x80265B34 + .set Text_CreateTextGObj,0x803A5A74 + .set Text_InitializeSubtext,0x803A5EB8 + .set Text_UpdateSubtextSize,0x803A6868 +NTSC100: + .set Injection,0x80264FB8 + .set Text_CreateTextGObj,0x803A4890 + .set Text_InitializeSubtext,0x803A4CD4 + .set Text_UpdateSubtextSize,0x803A5684 + +PAL100: + .set Injection,0x802669EC + .set Text_CreateTextGObj,0x803A6664 + .set Text_InitializeSubtext,0x803a6b54 + .set Text_UpdateSubtextSize,0x803A74FC +*/ +backup + +#GET PROPERTIES TABLE + bl TEXTPROPERTIES + mflr REG_TextProperties + +######################## +## Create Text Object ## +######################## + +#CREATE TEXT OBJECT, RETURN POINTER TO STRUCT IN r3 + li r3,0 + li r4,0 + branchl r12,Text_CreateTextGObj + +#BACKUP STRUCT POINTER + mr REG_TextGObj,r3 + +#SET TEXT SPACING TO TIGHT + li r4,0x1 + stb r4,0x49(REG_TextGObj) + +#SET TEXT TO CENTER AROUND X LOCATION + li r4,0x1 + stb r4,0x4A(REG_TextGObj) + +#Scale Canvas Down + lfs f1,0xC(REG_TextProperties) + stfs f1,0x24(REG_TextGObj) + stfs f1,0x28(REG_TextGObj) + +#################################### +## INITIALIZE PROPERTIES AND TEXT ## +#################################### + +#Initialize Line of Text + mr r3,REG_TextGObj #struct pointer + bl TEXT + mflr r4 #pointer to ASCII + lfs f1,0x0(REG_TextProperties) #X offset of REG_TextGObj + lfs f2,0x4(REG_TextProperties) #Y offset of REG_TextGObj + branchl r12,Text_InitializeSubtext + +#Set Size/Scaling + mr r4,r3 + mr r3,REG_TextGObj + lfs f1,0x8(REG_TextProperties) #get REG_TextGObj scaling value from table + lfs f2,0x8(REG_TextProperties) #get REG_TextGObj scaling value from table + branchl r12,Text_UpdateSubtextSize + +b end + + +#**************************************************# +TEXTPROPERTIES: +blrl +.float 38 #x offset +.float -275 #y offset +.float 0.45 #REG_TextGObj scaling +.float 0.1 #canvas scaling + + +TEXT: +blrl +.string "UCF 0.84" +.align 2 + +#**************************************************# +end: +restore + +addi r4, r24, 0 diff --git a/External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm b/External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm new file mode 100644 index 00000000..2b04b682 --- /dev/null +++ b/External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm @@ -0,0 +1,35 @@ +################################################################################ +# Address: 800D65EC +# Tags: [affects-gameplay] +################################################################################ + +.long 0x4800003D +.long 0x3F170A3D +.long 0x42A00000 +.long 0x38D1B717 +.long 0x00000000 +.long 0x00000000 +.long 0xFC200A10 +.long 0xC0440004 +.long 0xC0640008 +.long 0xEC2118B8 +.long 0xFC20081E +.long 0xD824000C +.long 0x80C40010 +.long 0x38C60002 +.long 0x4E800020 +.long 0xC0040094 +.long 0x7C8802A6 +.long 0x88C50670 +.long 0x2C060001 +.long 0x4080002C +.long 0xC0250620 +.long 0x4BFFFFC5 +.long 0x7C0631D6 +.long 0xC0250624 +.long 0x4BFFFFB9 +.long 0x7CC631D6 +.long 0x7C003214 +.long 0x2C001900 +.long 0x40810008 +.long 0xC0040000 diff --git a/External/UCF 0.84/UCF/UCF Dashback.asm b/External/UCF 0.84/UCF/UCF Dashback.asm new file mode 100644 index 00000000..dc89a608 --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Dashback.asm @@ -0,0 +1,68 @@ +################################################################################ +# Address: 800C9A44 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x893F221F +.long 0xD01F002C +.long 0x71290008 +.long 0x408200F0 +.long 0x815F0894 +.long 0x3D204000 +.long 0x7C0A4800 +.long 0x408200E0 +.long 0xC19F0620 +.long 0x812DAEB4 +.long 0xEC000332 +.long 0xC189003C +.long 0xFC006000 +.long 0x418000C8 +.long 0x893F0670 +.long 0x28090001 +.long 0x418100BC +.long 0x3D008007 +.long 0x895F0618 +.long 0x3908AD10 +.long 0x85280750 +.long 0x55293032 +.long 0x7D293670 +.long 0x39290004 +.long 0x7D294214 +.long 0x1D0A000C +.long 0x1D4A0006 +.long 0x7D094214 +.long 0x89080008 +.long 0x7CEA4214 +.long 0x3908FFFE +.long 0x550807BE +.long 0x54E7083C +.long 0x7D4A4214 +.long 0x7CE938AE +.long 0x554A083C +.long 0x7D2950AE +.long 0x7CE70774 +.long 0x7D290774 +.long 0x7D293850 +.long 0x7D2949D6 +.long 0x2C0915F9 +.long 0x40810054 +.long 0x9421FFF8 +.long 0x39200001 +.long 0x38800001 +.long 0x913F2340 +.long 0x913F2358 +.long 0x3D208003 +.long 0x3929418C +.long 0x887F000C +.long 0x7D2903A6 +.long 0x4E800421 +.long 0x2C030000 +.long 0x41820020 +.long 0x8123002C +.long 0x81491ECC +.long 0x813F002C +.long 0x912A0018 +.long 0x55290FFE +.long 0x3929007F +.long 0x992A0006 +.long 0x38210008 diff --git a/External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm b/External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm new file mode 100644 index 00000000..98fa94df --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm @@ -0,0 +1,171 @@ +################################################################################ +# Address: 8006B460 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x480000B1 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0x00000000 +.long 0xBF1C0000 +.long 0x38D1B717 +.long 0x42A00000 +.long 0x3923004F +.long 0x5529063E +.long 0x2809009E +.long 0x4081002C +.long 0x38840006 +.long 0x5484063E +.long 0x2804000C +.long 0x4D810020 +.long 0x54630000 +.long 0x39200000 +.long 0x6C633F80 +.long 0x91250004 +.long 0x90650000 +.long 0x4E800020 +.long 0x3924004F +.long 0x5529063E +.long 0x2809009E +.long 0x4C810020 +.long 0x38630006 +.long 0x5463063E +.long 0x2803000C +.long 0x4D810020 +.long 0x54840000 +.long 0x39200000 +.long 0x6C843F80 +.long 0x91250000 +.long 0x90850004 +.long 0x4E800020 +.long 0x9421FFC0 +.long 0xBF210024 +.long 0x93810014 +.long 0x7F8802A6 +.long 0x3D20800A +.long 0x7FE3FB78 +.long 0x39292040 +.long 0x7D2903A6 +.long 0x4E800421 +.long 0x2C030000 +.long 0x408201A0 +.long 0x3D20804C +.long 0x8BDF0618 +.long 0x39291F78 +.long 0x7FFAFB78 +.long 0x89090001 +.long 0x2C080000 +.long 0x3948FFFF +.long 0x40A20008 +.long 0x39400004 +.long 0x1D4A0030 +.long 0x81290008 +.long 0x1F7E000C +.long 0x3BBC0000 +.long 0x7D295214 +.long 0x1FDE0006 +.long 0x7D09DA14 +.long 0x7D49D82E +.long 0x81280008 +.long 0x80E80004 +.long 0x7D1DDA14 +.long 0x91210010 +.long 0x89280008 +.long 0x91410008 +.long 0x39290001 +.long 0x90E1000C +.long 0x552907BE +.long 0x99280008 +.long 0x5539063E +.long 0x7D3E4A14 +.long 0x5529083C +.long 0x7D5D4B2E +.long 0x813A0004 +.long 0x2C090013 +.long 0x40A20010 +.long 0x813A0010 +.long 0x2C09015D +.long 0x41A20034 +.long 0x8881000B +.long 0x38BA0620 +.long 0x8861000A +.long 0x7C840774 +.long 0x7C630774 +.long 0x4BFFFEBD +.long 0x8881000D +.long 0x8861000C +.long 0x38BA0638 +.long 0x7C840774 +.long 0x7C630774 +.long 0x4BFFFEA5 +.long 0xC01A0624 +.long 0x39400000 +.long 0xC19C0030 +.long 0xFC006000 +.long 0x418100C0 +.long 0xC19A0620 +.long 0xFC000210 +.long 0xC15C0038 +.long 0x39210018 +.long 0xFD806210 +.long 0xC17C0034 +.long 0xEC005AB8 +.long 0xED8C5AB8 +.long 0xFC00001E +.long 0xFD80601E +.long 0x7D804FAE +.long 0x3921001C +.long 0x81010018 +.long 0x7C004FAE +.long 0x39080002 +.long 0x8121001C +.long 0x7D0841D6 +.long 0x39290002 +.long 0x7D2949D6 +.long 0x7D294214 +.long 0x2C091900 +.long 0x40810068 +.long 0x7D3DDA14 +.long 0x89490009 +.long 0x5549063E +.long 0x2C090000 +.long 0x40820050 +.long 0x893A0671 +.long 0x28090001 +.long 0x41A10048 +.long 0x3939FFFE +.long 0x7D1ECA14 +.long 0x552907BE +.long 0x5508083C +.long 0x7FDE4A14 +.long 0x7D1D4214 +.long 0x57DE083C +.long 0x89080001 +.long 0x7FDDF214 +.long 0x893E0001 +.long 0x7D080774 +.long 0x7D290774 +.long 0x7D294050 +.long 0x7D2949D6 +.long 0x2C090790 +.long 0x40810008 +.long 0x394A0001 +.long 0x7FBDDA14 +.long 0x995D0009 +.long 0x887F0678 +.long 0x83810014 +.long 0x83210024 +.long 0x83410028 +.long 0x8361002C +.long 0x83A10034 +.long 0x83C10038 +.long 0x38210040 diff --git a/External/UCF 0.84/UCF/UCF SDI.asm b/External/UCF 0.84/UCF/UCF SDI.asm new file mode 100644 index 00000000..7b9426a6 --- /dev/null +++ b/External/UCF 0.84/UCF/UCF SDI.asm @@ -0,0 +1,61 @@ +################################################################################ +# Address: 8008E54C +# Tags: [affects-gameplay] +################################################################################ + +.long 0x7C002800 +.long 0x418000DC +.long 0x89230673 +.long 0x28090001 +.long 0x40810014 +.long 0x89230674 +.long 0x3D406000 +.long 0x28090001 +.long 0x418100BC +.long 0xC183062C +.long 0x3D406000 +.long 0xC0030628 +.long 0xED8C0332 +.long 0xEC00603A +.long 0xC18404B0 +.long 0xED8C0332 +.long 0xFC0C0000 +.long 0x40810098 +.long 0x3D008007 +.long 0x89430618 +.long 0x3908AD10 +.long 0x85280750 +.long 0x55293032 +.long 0x7D293670 +.long 0x39290004 +.long 0x7D294214 +.long 0x1D0A000C +.long 0x1D4A0006 +.long 0x7D094214 +.long 0x89080008 +.long 0x38E8FFFE +.long 0x7D0A4214 +.long 0x54E707BE +.long 0x5508083C +.long 0x7D4A3A14 +.long 0x7CC94214 +.long 0x554A083C +.long 0x7D0940AE +.long 0x7CE95214 +.long 0x7D2950AE +.long 0x7D080774 +.long 0x89470001 +.long 0x7D290774 +.long 0x7D294050 +.long 0x89060001 +.long 0x7D4A0774 +.long 0x7D2949D6 +.long 0x7D080774 +.long 0x7D4A4050 +.long 0x7D4A51D6 +.long 0x7D295214 +.long 0x3D406000 +.long 0x2C090F04 +.long 0x40810008 +.long 0x3D408000 +.long 0x7D580120 diff --git a/External/UCF 0.84/UCF/UCF Shield Drop Extended.asm b/External/UCF 0.84/UCF/UCF Shield Drop Extended.asm new file mode 100644 index 00000000..39d01b1e --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Shield Drop Extended.asm @@ -0,0 +1,23 @@ +################################################################################ +# Address: 8009A0B8 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x4C401382 +.long 0x4182003C +.long 0x3D208007 +.long 0x89040618 +.long 0x3929AD10 +.long 0x81490750 +.long 0x1D08000C +.long 0x39290754 +.long 0x554A3032 +.long 0x7D4A3670 +.long 0x7D295214 +.long 0x7D294214 +.long 0x89290009 +.long 0x28090001 +.long 0x4081000C +.long 0x4C421242 +.long 0x4800000C +.long 0x4C421182 diff --git a/External/UCF 0.84/UCF/UCF Shield Drop.asm b/External/UCF 0.84/UCF/UCF Shield Drop.asm new file mode 100644 index 00000000..9f4f7d59 --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Shield Drop.asm @@ -0,0 +1,54 @@ +################################################################################ +# Address: 800998A4 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x4800003D +.long 0xBF4CCCCD +.long 0x42A00000 +.long 0x38D1B717 +.long 0x00000000 +.long 0x00000000 +.long 0xFC200A10 +.long 0xC0460004 +.long 0xC0660008 +.long 0xEC2118B8 +.long 0xFC20081E +.long 0xD826000C +.long 0x80E60010 +.long 0x38E70002 +.long 0x4E800020 +.long 0x8083002C +.long 0x7CC802A6 +.long 0x80ADAEB4 +.long 0xC004063C +.long 0xC0250314 +.long 0xFC000840 +.long 0x40810070 +.long 0x88040670 +.long 0x80E50320 +.long 0x7C003800 +.long 0x41800060 +.long 0xC0240624 +.long 0xC0060000 +.long 0xFC010040 +.long 0x40810050 +.long 0x8004083C +.long 0x2C00FFFF +.long 0x41820044 +.long 0x80040840 +.long 0x540005EF +.long 0x41820038 +.long 0x4BFFFF89 +.long 0x7C0739D6 +.long 0xC0240620 +.long 0x4BFFFF7D +.long 0x7CE739D6 +.long 0x7C003A14 +.long 0x2C001900 +.long 0x40810018 +.long 0x80E1001C +.long 0x38210018 +.long 0x38E70008 +.long 0x7CE803A6 +.long 0x4E800020 diff --git a/External/UCF 0.84/UCF/UCF Shield SDI.asm b/External/UCF 0.84/UCF/UCF Shield SDI.asm new file mode 100644 index 00000000..b1e15d4e --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Shield SDI.asm @@ -0,0 +1,43 @@ +################################################################################ +# Address: 80093294 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x7C030000 +.long 0x41800094 +.long 0x89240673 +.long 0x3CC06000 +.long 0x28090001 +.long 0x41810080 +.long 0xC1840628 +.long 0xC00504B0 +.long 0xFC0C0000 +.long 0x40800070 +.long 0x3D008007 +.long 0x89440618 +.long 0x3908AD10 +.long 0x85280750 +.long 0x55293032 +.long 0x7D293670 +.long 0x39290004 +.long 0x7D294214 +.long 0x1D0A000C +.long 0x1D4A0006 +.long 0x7D094214 +.long 0x89080008 +.long 0x7CEA4214 +.long 0x3908FFFE +.long 0x550807BE +.long 0x54E7083C +.long 0x7D4A4214 +.long 0x7CE938AE +.long 0x554A083C +.long 0x7D2950AE +.long 0x7CE70774 +.long 0x7D290774 +.long 0x7D293850 +.long 0x7D2949D6 +.long 0x2C090F04 +.long 0x40810008 +.long 0x3CC08000 +.long 0x7CD80120 diff --git a/External/UCF 0.84/UCF/UCF Tumble.asm b/External/UCF 0.84/UCF/UCF Tumble.asm new file mode 100644 index 00000000..6b8a154a --- /dev/null +++ b/External/UCF 0.84/UCF/UCF Tumble.asm @@ -0,0 +1,41 @@ +################################################################################ +# Address: 800908F4 +# Tags: [affects-gameplay] +################################################################################ + +.long 0x2C030001 +.long 0x4082008C +.long 0xC19F0628 +.long 0x3D406000 +.long 0xFD806210 +.long 0xFC0C0000 +.long 0x40800074 +.long 0x3D008007 +.long 0x895F0618 +.long 0x3908AD10 +.long 0x85280750 +.long 0x55293032 +.long 0x7D293670 +.long 0x39290004 +.long 0x7D294214 +.long 0x1D0A000C +.long 0x1D4A0006 +.long 0x7D094214 +.long 0x89080008 +.long 0x7CEA4214 +.long 0x3908FFFE +.long 0x550807BE +.long 0x54E7083C +.long 0x7D4A4214 +.long 0x7CE938AE +.long 0x554A083C +.long 0x7D2950AE +.long 0x7CE70774 +.long 0x3D406000 +.long 0x7D290774 +.long 0x7D293850 +.long 0x7D2949D6 +.long 0x2C0915F9 +.long 0x40810008 +.long 0x3D408000 +.long 0x7D580120 diff --git a/External/WidescreenShutters/Add Shutters.asm b/External/WidescreenShutters/Add Shutters.asm index f69f5b5f..719eb258 100644 --- a/External/WidescreenShutters/Add Shutters.asm +++ b/External/WidescreenShutters/Add Shutters.asm @@ -21,7 +21,7 @@ blrl # r3: isLeft # True if this is the left shutter, False if right ################################################################################ .set REG_DATA, 31 -.set REG_DevelopText, 30 +.set REG_DEVELOP_TEXT, 30 .set REG_X_POS, 29 .set REG_ID, 28 @@ -49,23 +49,23 @@ backup li r6,1 li r7,1 branchl r12, 0x80302834 # DevelopText_CreateDataTable - mr REG_DevelopText,r3 + mr REG_DEVELOP_TEXT,r3 #Activate Text lwz r3, -0x4884 (r13) - mr r4,REG_DevelopText + mr r4,REG_DEVELOP_TEXT branchl r12, 0x80302810 # DevelopText_Activate #Hide blinking cursor li r3,0 - stb r3,0x26(REG_DevelopText) + stb r3,0x26(REG_DEVELOP_TEXT) #Change BG Color - mr r3,REG_DevelopText + mr r3,REG_DEVELOP_TEXT addi r4,REG_DATA,DO_COLOR branchl r12, 0x80302b90 # DevelopText_StoreBGColor #Set Stretch lfs f1,DO_X_SCALE(REG_DATA) - stfs f1,0x8(REG_DevelopText) + stfs f1,0x8(REG_DEVELOP_TEXT) lfs f1,DO_Y_SCALE(REG_DATA) - stfs f1,0xC(REG_DevelopText) + stfs f1,0xC(REG_DEVELOP_TEXT) restore blr diff --git a/Makefile b/Makefile index a98e1511..3f93d9df 100644 --- a/Makefile +++ b/Makefile @@ -1,95 +1,84 @@ # ----------------------------------------------------------------------------- # netplay.json and playback.json also build versions of GALJ01r2.ini for NTSC-J -NETPLAY_INI := Output/Netplay/GALE01r2.ini -PLAYBACK_INI := Output/Playback/GALE01r2.ini -ONLINE_INI := Output/Online/online.txt +NETPLAY := netplay.json +PLAYBACK := playback.json +NETPLAY_INI := Output/Netplay/GALE01r2.ini +PLAYBACK_INI := Output/Playback/GALE01r2.ini +ONLINE_INI := Output/Online/online.txt # GCT output for Nintendont -C_DIR := Output/Console -CONSOLE_CORE := $(C_DIR)/g_core.bin -CONSOLE_CORE_PORTA := $(C_DIR)/g_core_porta.bin -CONSOLE_UCF := $(C_DIR)/g_ucf.bin -CONSOLE_UCF_STEALTH := $(C_DIR)/g_ucf_stealth.bin -CONSOLE_TOGGLES := $(C_DIR)/g_toggles.bin -CONSOLE_MODS_STEALTH := $(C_DIR)/g_mods_stealth.bin -CONSOLE_MODS_TOURNAMENT := $(C_DIR)/g_mods_tournament.bin -CONSOLE_MODS_FRIENDLIES := $(C_DIR)/g_mods_friendlies.bin -CONSOLE_PAL := $(C_DIR)/g_pal.bin -CONSOLE_FROZEN := $(C_DIR)/g_frozen.bin -CONSOLE_LAG_PD := $(C_DIR)/g_lag_pd.bin -CONSOLE_LAG_PDHALFVB := $(C_DIR)/g_lag_pdhalfvb.bin -CONSOLE := $(CONSOLE_CORE) \ - $(CONSOLE_CORE_PORTA) $(CONSOLE_UCF) $(CONSOLE_UCF_STEALTH) \ - $(CONSOLE_TOGGLES) $(CONSOLE_MODS_STEALTH) $(CONSOLE_MODS_TOURNAMENT) \ - $(CONSOLE_MODS_FRIENDLIES) $(CONSOLE_PAL) $(CONSOLE_FROZEN) \ - $(CONSOLE_LAG_PD) $(CONSOLE_LAG_PDHALFVB) - -ALL_TARGETS := $(ONLINE_INI) $(NETPLAY_INI) $(PLAYBACK_INI) $(CONSOLE) -.PHONY: $(ALL_TARGETS) clean -all: $(ALL_TARGETS) +# to add a new json just create a new var with the json name +# and then add it to the CONSOLE list +CONSOLE_CORE := console_core.json +CONSOLE_CORE_PORTB := core +CONSOLE_CORE_PORTA := core_porta +CONSOLE_UCF := console_UCF.json +CONSOLE_UCF_STEALTH := console_UCF_stealth.json +CONSOLE_UCF_084 := console_UCF_084.json +CONSOLE_UCF_084_STEALTH := console_UCF_084_stealth.json +CONSOLE_MODS_STEALTH := console_mods_stealth.json +CONSOLE_MODS_TOURNAMENT := console_mods_tournament.json +CONSOLE_MODS_FRIENDLIES := console_mods_friendlies.json +CONSOLE_PAL := console_PAL.json +CONSOLE_FROZEN_PS := console_stages_stadium.json +CONSOLE_FROZEN_ALL := console_stages_all.json +CONSOLE_GAMEPLAY_LGL := console_gameplay_lgl.json +CONSOLE_GAMEPLAY_WOBBLE := console_gameplay_wobbling.json +CONSOLE_GAMEPLAY_BOTH := console_gameplay_both.json +CONSOLE_LAG_PD := console_lag_pd.json +CONSOLE_LAG_PDHALFVB := console_lag_pdhalfvb.json +CONSOLE_SCREEN_WIDE := console_screen_wide.json +CONSOLE_SCREEN_SHUTTERS := console_screen_wide_shutters.json +CONSOLE_SAFETY := console_safety.json +CONSOLE_CRASH_OUTPUT := console_crash_output.json +CONSOLE := $(CONSOLE_UCF) $(CONSOLE_UCF_STEALTH) $(CONSOLE_UCF_084) \ + $(CONSOLE_UCF_084_STEALTH) $(CONSOLE_MODS_STEALTH) $(CONSOLE_MODS_TOURNAMENT) $(CONSOLE_MODS_FRIENDLIES) \ + $(CONSOLE_PAL) $(CONSOLE_FROZEN_PS) $(CONSOLE_FROZEN_ALL) $(CONSOLE_GAMEPLAY_LGL) \ + $(CONSOLE_GAMEPLAY_WOBBLE) $(CONSOLE_GAMEPLAY_BOTH) $(CONSOLE_LAG_PD) $(CONSOLE_LAG_PDHALFVB) \ + $(CONSOLE_SCREEN_WIDE) $(CONSOLE_SCREEN_SHUTTERS) $(CONSOLE_SAFETY) ${CONSOLE_CRASH_OUTPUT} + +GECKO_INJECTIONS := $(NETPLAY) $(CONSOLE_CORE) $(CONSOLE) +INI_TARGETS := $(ONLINE_INI) $(NETPLAY_INI) $(PLAYBACK_INI) \ + $(CONSOLE_CORE_PORTA) $(CONSOLE_CORE_PORTB) $(CONSOLE) +.PHONY: $(INI_TARGETS) clean +all: $(INI_TARGETS) +ini: $(INI_TARGETS) # ----------------------------------------------------------------------------- # Targets for binaries to-be-included in the Slippi Nintendont tree -$(CONSOLE_CORE): console_core.json - gecko build -defsym "STG_EXIIndex=1" -o "$(CONSOLE_CORE)" -c $< +# PORT B is the general use case, PORT A is for debugging +$(CONSOLE_CORE_PORTB): console_core.json + gecko build -batched -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin" -c $< @echo "" $(CONSOLE_CORE_PORTA): console_core.json - gecko build -defsym "STG_EXIIndex=0" -o "$(CONSOLE_CORE_PORTA)" -c $< - @echo "" - -$(CONSOLE_TOGGLES): console_ControllerFixPlayerToggles.json - gecko build -c $< - @echo "" - -$(CONSOLE_UCF): console_UCF.json - gecko build -c $< - @echo "" - -$(CONSOLE_UCF_STEALTH): console_UCF_stealth.json - gecko build -c $< - @echo "" - -$(CONSOLE_MODS_STEALTH): console_mods_stealth.json - gecko build -c $< - @echo "" - -$(CONSOLE_MODS_TOURNAMENT): console_mods_tournament.json - gecko build -c $< - @echo "" - -$(CONSOLE_MODS_FRIENDLIES): console_mods_friendlies.json - gecko build -c $< + gecko build -batched -defsym "STG_EXIIndex=0" -o "Output/Console/g_core_porta.bin" -c $< @echo "" -$(CONSOLE_PAL): console_PAL.json - gecko build -c $< +$(CONSOLE): + gecko build -batched -c $@ @echo "" -$(CONSOLE_FROZEN): console_frozen.json - gecko build -c $< - @echo "" +# ----------------------------------------------------------------------------- +# Targets for Dolphin's {netplay,playback} .ini configuration files -$(CONSOLE_LAG_PD): console_lag_pd.json - gecko build -c $< +$(NETPLAY_INI): $(NETPLAY) + @gecko build -batched -defsym "STG_EXIIndex=1" -c $< @echo "" - -$(CONSOLE_LAG_PDHALFVB): console_lag_pdhalfvb.json - gecko build -c $< +$(PLAYBACK_INI): $(PLAYBACK) + @gecko build -batched -defsym "STG_EXIIndex=1" -c $< @echo "" # ----------------------------------------------------------------------------- -# Targets for Dolphin's {netplay,playback} .ini configuration files - -$(NETPLAY_INI): netplay.json - @gecko build -defsym "STG_EXIIndex=1" -c $< - @echo "" -$(PLAYBACK_INI): playback.json - @gecko build -defsym "STG_EXIIndex=1" -c $< +# Target for injection lists +list: + for json in $(GECKO_INJECTIONS); do\ + gecko list -i $${json} -o Output/InjectionLists/list_$${json}; \ + done @echo "" # ----------------------------------------------------------------------------- clean: - rm -f $(ALL_TARGETS) + rm -f $(INI_TARGETS) diff --git a/Online/Core/BrawlOffscreenDamage.asm b/Online/Core/BrawlOffscreenDamage.asm index deca28fa..6bf1c31d 100644 --- a/Online/Core/BrawlOffscreenDamage.asm +++ b/Online/Core/BrawlOffscreenDamage.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x8006a880 # PlayerThink_Animation. Function call determines if player is in bubble normally +# Tags: [affects-gameplay] ################################################################################ # This function needs to return 1 or 0 determining whether a player is in the # damage zone for offscreen damage. 1 means we are offscreen @@ -14,6 +15,11 @@ backup +# The Sandbag in vanilla melee doesn't take damage when offscreen +getMinorMajor r3 +cmpwi r3, SCENE_HOMERUN_IN_GAME +beq RETURN_FALSE + # First check if the player is dead lbz r3, 0x221F(REG_FIGHTERDATA) rlwinm. r3,r3,0,0x40 @@ -56,5 +62,3 @@ li r3, 1 RESTORE_AND_EXIT: restore - -EXIT: diff --git a/Online/Core/CustomizeMessageLRAS.asm b/Online/Core/CustomizeMessageLRAS.asm index 1a0a2ee8..9ea5c6eb 100644 --- a/Online/Core/CustomizeMessageLRAS.asm +++ b/Online/Core/CustomizeMessageLRAS.asm @@ -13,11 +13,8 @@ getMinorMajor r7 cmpwi r7, SCENE_ONLINE_IN_GAME bne EXIT -# Ensure that this is an unranked game -# TODO: We could perhaps check for any mode which has local-pausing enabled instead -lbz r7, OFST_R13_ONLINE_MODE(r13) -cmpwi r7, ONLINE_MODE_UNRANKED -bne EXIT +# It seems like on an LRAS where pause is still on/normal, we don't get into this function +# anyway, so we don't have to worry about direct mode's LRAS # Ensure the game ended as an LRAS lbz r7, 0x8(REG_MATCH_INFO) @@ -31,17 +28,31 @@ lbz r10, 0x1(REG_MATCH_INFO) # It's safe to change r3 now cause we are exiting the function ################################################################################ +# If this happens in ranked, it's a disconnect, don't play sound as error sound will have played +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +bne CHECK_LRAS + +# If ranked, play error sound. For some reason the one in StartEngineLoop doesn't play +li r3, 3 +b PLAY_SOUND + +CHECK_LRAS: # Fetch the index of the local player lwz r11, OFST_R13_ODB_ADDR(r13) # data buffer address lbz r3, ODB_LOCAL_PLAYER_INDEX(r11) cmpw r3, r10 # Compare local player index to index of pauser -beq SKIP_PLAY_PAUSE_SOUND +beq SKIP_PLAY_SOUND # Play SFX -li r3, 5 +li r3, 5 +PLAY_SOUND: branchl r12, SFX_Menu_CommonSound -SKIP_PLAY_PAUSE_SOUND: +SKIP_PLAY_SOUND: +# 0: Time, 1: Sudden Death, 2: Success, 3: Ready, 4: GO!, 5: Game!, 6: Failure, 7: Complete, 8: Nothing, 9: Crash +# branch r12, 0x802f70c0 # Time +# branch r12, 0x802f70e8 # Complete # branch r12, 0x802f70fc # Failure # branch r12, 0x802f7110 # Game! branch r12, 0x802f7120 # Exit function, shows nothing and plays no sound diff --git a/Online/Core/ForceEngineOnRollback.asm b/Online/Core/ForceEngineOnRollback.asm index 69aaa74d..4a782535 100644 --- a/Online/Core/ForceEngineOnRollback.asm +++ b/Online/Core/ForceEngineOnRollback.asm @@ -40,7 +40,10 @@ li r27, 1 PREPARE_ENGINE_LOOPS: # Copy the values that get updated in pad alarm to non-volatile locations so -# that they don't change during the loop iteration +# that they don't change during the loop iteration. Keep in mind that on a rollback, +# TriggerSendInput.asm is expected to run and can update certain values. If you need +# values to update after those calls, either use them directly or update a STABLE version +# in StartEngineLoop lbz r4, ODB_ROLLBACK_IS_ACTIVE(r5) stb r4, ODB_STABLE_ROLLBACK_IS_ACTIVE(r5) lwz r4, ODB_ROLLBACK_END_FRAME(r5) @@ -49,9 +52,6 @@ lbz r4, ODB_ROLLBACK_SHOULD_LOAD_STATE(r5) stb r4, ODB_STABLE_ROLLBACK_SHOULD_LOAD_STATE(r5) lwz r4, ODB_SAVESTATE_FRAME(r5) stw r4, ODB_STABLE_SAVESTATE_FRAME(r5) -lwz r4, ODB_RXB_ADDR(r5) -lwz r4, RXB_FINALIZED_FRAME(r4) -stw r4, ODB_STABLE_FINALIZED_FRAME(r5) b RESTORE_AND_EXIT HANDLE_NO_ROLLBACK_NO_INPUTS: @@ -76,3 +76,4 @@ bne EXEC_ENGINE branch r12, 0x801a4da8 # If no pad inputs, loop to keep waiting EXEC_ENGINE: +# logf LOG_LEVEL_NOTICE, "Starting engine loop..." diff --git a/Online/Core/ForceInputRefetchOnAdvance.asm b/Online/Core/ForceInputRefetchOnAdvance.asm new file mode 100644 index 00000000..a3cd3156 --- /dev/null +++ b/Online/Core/ForceInputRefetchOnAdvance.asm @@ -0,0 +1,32 @@ +################################################################################ +# Address: 0x80019614 +################################################################################ + +.include "Common/Common.s" +.include "Online/Online.s" + +branchl r12, 0x8001d2bc # Replaced code line + +# Ensure that this is an online match +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +bne EXIT + +load r3, 0x80479d64 +lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state +cmpwi r3, 0 # Loading state should be zero when game starts +bne EXIT + +# Check if we got the signal to advance a frame +lwz r5, OFST_R13_ODB_ADDR(r13) # data buffer address +lbz r3, ODB_IS_FRAME_ADVANCE(r5) +cmpwi r3, 0 +beq EXIT + +# logf LOG_LEVEL_WARN, "Processing advance request on frame: %d", "lwz r5, ODB_FRAME(5)" + +# Here we got the signal to advance a frame, let's call RenewInputs_Prefunction again. +# This should force the engine to loop twice the next time it runs. +branchl r12, RenewInputs_Prefunction + +EXIT: \ No newline at end of file diff --git a/Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm b/Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm index 29d9a0b0..2fb4115a 100644 --- a/Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm +++ b/Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x800d4c1c +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" diff --git a/Online/Core/FreezeDeadUpFallPhysics/UpdateFallVelocity.asm b/Online/Core/FreezeDeadUpFallPhysics/UpdateFallVelocity.asm index 25474ada..ded2fbdd 100644 --- a/Online/Core/FreezeDeadUpFallPhysics/UpdateFallVelocity.asm +++ b/Online/Core/FreezeDeadUpFallPhysics/UpdateFallVelocity.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x800d4d68 +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" .include "Online/Online.s" diff --git a/Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm b/Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm index 1b1d8230..f307e935 100644 --- a/Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm +++ b/Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x80080e80 +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" .include "Online/Online.s" diff --git a/Online/Core/Hacks/PreventPadAlarmDuringRollback.asm b/Online/Core/Hacks/PreventPadAlarmDuringRollback.asm index 966bef3a..dab02aff 100644 --- a/Online/Core/Hacks/PreventPadAlarmDuringRollback.asm +++ b/Online/Core/Hacks/PreventPadAlarmDuringRollback.asm @@ -18,24 +18,30 @@ lwz r3, 0x0(r3) # 0x80479d64 - Believed to be some loading state cmpwi r3, 0 # Loading state should be zero when game starts bne EXIT +lwz r5, OFST_R13_ODB_ADDR(r13) # data buffer address + +# Reset the frame advance state here just to make sure it never gets stuck on. Might not be +# necessary to be here. +li r3, 0 +stb r3, ODB_IS_FRAME_ADVANCE(r5) + # Check to see if this call came from VI callback, if not, just execute # Kinda jank but it should do the job. Alternative would be creating a wrapper # function for the RenewInputs_Prefunction call and setting that as the # VI callback, but then I'd need to use non-standard lag reduction code load r3, 0x80375e00 -cmpwi r0, r3 +cmpw r0, r3 bne EXIT # Check if a rollback is active, if a rollback is active, do not renew inputs # now as it may mess up the rollback logic. Instead let's store that inputs # should be renewed at the earliest possible time. -lwz r5, OFST_R13_ODB_ADDR(r13) # data buffer address lbz r3, ODB_ROLLBACK_IS_ACTIVE(r5) cmpwi r3, 0 beq EXIT # Here we have gotten a VI retrace callback while executing a rollback -# logf LOG_LEVEL_NOTICE, "VI retrace CB during rollback..." +# logf LOG_LEVEL_NOTICE, "[%d] VI retrace CB during rollback...", "lwz r5, ODB_FRAME(5)" li r3, 1 stb r3, ODB_SHOULD_FORCE_PAD_RENEW(r5) diff --git a/Online/Core/HandleLRAS.asm b/Online/Core/HandleLRAS.asm deleted file mode 100644 index aa2f1e73..00000000 --- a/Online/Core/HandleLRAS.asm +++ /dev/null @@ -1,33 +0,0 @@ -################################################################################ -# Address: 0x8016d310 -################################################################################ - -.include "Common/Common.s" -.include "Online/Online.s" - -.set REG_ODB_ADDRESS, 4 - -# Ensure that this is an online match -getMinorMajor r3 -cmpwi r3, SCENE_ONLINE_IN_GAME -bne EXIT - -################################################################################ -# Handle game completed -################################################################################ -# Load game end ID, check for LRAS. This case will not trigger the game completed -load r3, 0x8046b6a0 -lbz r3, 0x8(r3) -cmpwi r3, 7 # Check for LRAS ID -bne EXIT - -# Call game end handler function -lwz REG_ODB_ADDRESS, OFST_R13_ODB_ADDR(r13) # data buffer address -lwz r3, ODB_FN_HANDLE_GAME_OVER_ADDR(REG_ODB_ADDRESS) -mtctr r3 -bctrl - -EXIT: -# Replaced code lines -lwz r0, 0x003C(sp) -lwz r31, 0x0034(sp) diff --git a/Online/Core/InitOnlinePlay.asm b/Online/Core/InitOnlinePlay.asm index 98156a3b..7d36b9f9 100644 --- a/Online/Core/InitOnlinePlay.asm +++ b/Online/Core/InitOnlinePlay.asm @@ -35,6 +35,21 @@ branchl r12, Zero_AreaLength stw REG_ODB_ADDRESS, OFST_R13_ODB_ADDR(r13) +# We use game prep minor scene data as a convenient place to store game index such that it persists +# between games even when not in ranked +loadwz r3, 0x803dad40 # Load minor scene data array ptr +lwz r12, 0x88(r3) # Load game prep minor scene data + +# If not in ranked mode, let's increment the game index before the game start. Ranked mode manages +# this in its scene logic +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +beq SKIP_GAME_INDEX_INCR +lhz r3, GPDO_CUR_GAME(r12) +addi r3, r3, 1 +sth r3, GPDO_CUR_GAME(r12) +SKIP_GAME_INDEX_INCR: + # Indicate that the first frame is frame 1 li r3, 1 stw r3, ODB_FRAME(REG_ODB_ADDRESS) @@ -121,6 +136,35 @@ addi r4, REG_MSRB_ADDR, MSRB_GAME_INFO_BLOCK li r5, MATCH_STRUCT_LEN branchl r12, memcpy +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +bne SKIP_TIEBREAK_OVERWRITE + +# For ranked, in the case of a tiebreak, overwrite stock count and timer +loadwz r5, 0x803dad40 # Load minor scene data array ptr +lwz r5, 0x88(r5) # Load game prep minor scene data +lbz r3, GPDO_TIEBREAK_GAME_NUM(r5) # Load is_tiebreak +cmpwi r3, 0 +beq SKIP_TIEBREAK_OVERWRITE # If not a tiebreak, do nothing +lbz r3, GPDO_LAST_GAME_END_MODE(r5) +cmpwi r3, 0x7 +beq SKIP_TIEBREAK_OVERWRITE # If last game ended with exit, desync recovery values will be used (set by dolphin) + +li r3, 180 +stw r3, 0x10(REG_GAME_INFO_START) + +li r3, 1 +stb r3, 0x62(REG_GAME_INFO_START) +stb r3, 0x62 + 0x24(REG_GAME_INFO_START) +stb r3, 0x62 + 0x24 * 2(REG_GAME_INFO_START) +stb r3, 0x62 + 0x24 * 3(REG_GAME_INFO_START) + +SKIP_TIEBREAK_OVERWRITE: + +# Test code to force the timer to 15 seconds +# li r3, 15 +# stw r3, 0x10(REG_GAME_INFO_START) + # For teams, overwrite the colors in the game info block with the proper color for the given team ID lbz r3, OFST_R13_ONLINE_MODE(r13) cmpwi r3, ONLINE_MODE_TEAMS @@ -235,7 +279,7 @@ blr ################################################################################ # Routine: HandleGameCompleted # ------------------------------------------------------------------------------ -# Description: Function called when game if confirmed over (no more rollbacks) +# Description: Function called when game is confirmed over (no more rollbacks) ################################################################################ FN_HandleGameCompleted: blrl @@ -244,19 +288,39 @@ blrl .set REG_RGB_ADDR, 30 .set REG_RGPB_ADDR, 29 .set REG_ODB_ADDRESS, 28 +.set REG_GPD_ADDR, 27 +.set REG_GAME_END_STRUCT_ADDR, 26 backup lwz REG_ODB_ADDRESS, OFST_R13_ODB_ADDR(r13) # data buffer address +loadwz r5, 0x803dad40 # Load minor scene data array ptr +lwz REG_GPD_ADDR, 0x88(r5) # Load game prep minor scene data + +load REG_GAME_END_STRUCT_ADDR, 0x80479da4 + ################################################################################ -# Report game results for unranked +# Initialize the MatchEndData early. Normally his happens on scene transition +# around 0x8016ea1c but we need it earlier (now) to determine the result of +# the match ################################################################################ -# Ensure that this is an unranked game -lbz r3, OFST_R13_ONLINE_MODE(r13) -cmpwi r3, ONLINE_MODE_UNRANKED -bne REPORT_GAME_EXIT +mr r3, REG_GAME_END_STRUCT_ADDR # dest +load r4, 0x8046b8ec # source +li r5, 8824 # size +branchl r12, memcpy + +load r4, 0x8046b6a0 +mr r3, REG_GAME_END_STRUCT_ADDR +lbz r0, 0x24D0(r4) +stb r0, 0x6(r3) +lbz r0, 0x0008(r4) +stb r0, 0x4(r3) +branchl r12, 0x80166378 # CreateMatchEndData (struct @ 80479da4) +################################################################################ +# Report game results +################################################################################ # Prepare buffer for EXI transfer li r3, RGB_SIZE branchl r12, HSD_MemAlloc @@ -266,20 +330,65 @@ mr REG_RGB_ADDR, r3 li r3, CONST_SlippiCmdReportMatch stb r3, RGB_COMMAND(REG_RGB_ADDR) -lwz r3, ODB_FRAME(REG_ODB_ADDRESS) +lbz r3, OFST_R13_ONLINE_MODE(r13) +stb r3, RGB_ONLINE_MODE(REG_RGB_ADDR) + +branchl r12, 0x801a4ba8 # MenuController_LoadTimer1 stw r3, RGB_FRAME_LENGTH(REG_RGB_ADDR) # Store frame length +lhz r3, GPDO_CUR_GAME(REG_GPD_ADDR) +stw r3, RGB_GAME_INDEX(REG_RGB_ADDR) + +lbz r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD_ADDR) +stw r3, RGB_TIEBREAKER_INDEX(REG_RGB_ADDR) + +lwz r3, GPDO_FN_COMPUTE_RANKED_WINNER(REG_GPD_ADDR) +mtctr r3 +bctrl +stb r3, RGB_WINNER_IDX(REG_RGB_ADDR) + +# Change winner idx to -3 if disconnect detected, -2 if desync detected +lbz r3, ODB_IS_DISCONNECT_STATE_DISPLAYED(REG_ODB_ADDRESS) +cmpwi r3, 0 +li r4, -3 +bne OVERWRITE_WINNER_IDX +lbz r3, ODB_IS_DESYNC_STATE_DISPLAYED(REG_ODB_ADDRESS) +cmpwi r3, 0 +li r4, -2 +bne OVERWRITE_WINNER_IDX +b SKIP_OVERWRITE_WINNER_IDX +OVERWRITE_WINNER_IDX: +stb r4, RGB_WINNER_IDX(REG_RGB_ADDR) +SKIP_OVERWRITE_WINNER_IDX: + +# Output the game end method and lras initiator +load r4, 0x8046b6a0 +lbz r3, 0x8(r4) +stb r3, RGB_GAME_END_METHOD(REG_RGB_ADDR) +cmpwi r3, 0x7 +bne NO_LRAS +lbz r3, 0x1(r4) +b STORE_LRAS_INITIATOR +NO_LRAS: +li r3, -1 +STORE_LRAS_INITIATOR: +stb r3, RGB_LRAS_INITIATOR(REG_RGB_ADDR) + +# Write synced timer for desync recovery +lwz r4, ODB_DESYNC_RECOVERY_TIMER(REG_ODB_ADDRESS) +stw r4, RGB_SYNCED_TIMER(REG_RGB_ADDR) + PLAYER_LOOP_INIT: li REG_IDX, 0 addi REG_RGPB_ADDR, REG_RGB_ADDR, RGB_P1_RGPB PLAYER_LOOP: mr r3, REG_IDX -branchl r12, 0x80031724 +branchl r12, PlayerBlock_LoadStaticBlock # Store isActive -li r4, 1 -stb r4, RGPB_IS_ACTIVE(REG_RGPB_ADDR) +lwz r4, 0x8(r3) +stb r4, RGPB_SLOT_TYPE(REG_RGPB_ADDR) # Store stocks remaining lbz r4, 0x8E(r3) @@ -289,14 +398,29 @@ stb r4, RGPB_STOCKS_REMAINING(REG_RGPB_ADDR) lwz r4, 0xC6C+188(r3) stw r4, RGPB_DAMAGE_DONE(REG_RGPB_ADDR) +# Write synced stocks and percents for desync recovery +mulli r5, REG_IDX, DFRE_SIZE +addi r4, r5, ODB_DESYNC_RECOVERY_FIGHTER_ARR + DFRE_STOCKS_REMAINING +lbzx r4, REG_ODB_ADDRESS, r4 +stb r4, RGPB_SYNCED_STOCKS(REG_RGPB_ADDR) +addi r4, r5, ODB_DESYNC_RECOVERY_FIGHTER_ARR + DFRE_PERCENT +lhzx r4, REG_ODB_ADDRESS, r4 +sth r4, RGPB_SYNCED_DAMAGE(REG_RGPB_ADDR) + PLAYER_LOOP_INC: addi REG_IDX, REG_IDX, 1 addi REG_RGPB_ADDR, REG_RGPB_ADDR, RGPB_SIZE PLAYER_LOOP_CHECK: -cmpwi REG_IDX, 2 +cmpwi REG_IDX, 4 blt PLAYER_LOOP +# Copy over game info +addi r3, REG_RGB_ADDR, RGB_GAME_INFO_BLOCK # Destination +load r4, 0x80480530 # Game info block source +li r5, MATCH_STRUCT_LEN +branchl r12, memcpy + # Execute match reporting mr r3, REG_RGB_ADDR li r4, RGB_SIZE diff --git a/Online/Core/InitPause.asm b/Online/Core/InitPause.asm index e6707ccb..c17a9726 100644 --- a/Online/Core/InitPause.asm +++ b/Online/Core/InitPause.asm @@ -10,6 +10,11 @@ getMinorMajor r3 cmpwi r3, SCENE_ONLINE_IN_GAME bne INJECTION_EXIT +# Don't enable client pause in ranked +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +beq INJECTION_EXIT + ################################################################################ # Initialize Client Pause ################################################################################ diff --git a/Online/Core/LGLExceededGameEnd.asm b/Online/Core/LGLExceededGameEnd.asm new file mode 100644 index 00000000..dbbcc8a0 --- /dev/null +++ b/Online/Core/LGLExceededGameEnd.asm @@ -0,0 +1,139 @@ +################################################################################ +# Address: 0x802f70c4 # HUD_DisplayEndingExclaimationGraphic +################################################################################ + +.include "Common/Common.s" +.include "Online/Online.s" + +.set REG_P1_LEDGE_GRABS, 28 +.set REG_P2_LEDGE_GRABS, 27 +.set REG_LGL_LOSER, 26 +.set REG_DISPLAY_MESSAGE_ID, 25 +.set REG_DO, 24 +.set REG_FILL_COLOR, 23 +.set REG_FIRST_STRING, 22 + +# This function's main goal is to overwrite the message displayed on an LGL timeout. Here are the options: +# 0: Time, 1: Sudden Death, 2: Success, 3: Ready, 4: GO!, 5: Game!, 6: Failure, 7: Complete, 8: Nothing, 9: Crash + +b CODE_START + +DATA_BLRL: +blrl +.set DO_SCALE, 0 +.float 0.7 +.set DO_POS_X, DO_SCALE + 4 +.float 0 +.set DO_POS_Y_WIN, DO_POS_X + 4 +.float 70 +.set DO_POS_Y_LOSS, DO_POS_Y_WIN + 4 +.float 60 +.set DO_STROKE_OFFSET, DO_POS_Y_LOSS + 4 +.float 1 +.set DO_COLOR_OUTLINE, DO_STROKE_OFFSET + 4 +.byte 0,0,0,255 +.set DO_COLOR_FILL_LOSS, DO_COLOR_OUTLINE + 4 +.byte 215,165,255,255 +.set DO_COLOR_FILL_WIN, DO_COLOR_FILL_LOSS + 4 +.byte 250,250,120,255 +.set DO_STRING_YOU, DO_COLOR_FILL_WIN + 4 +.string "You" +.set DO_STRING_OPP, DO_STRING_YOU + 4 +.string "Opponent" +.set DO_STRING, DO_STRING_OPP + 9 +.string "%s Exceeded Ledge Grab Limit of %d" +.align 2 + + +CODE_START: +backup + +# Store values of r4-r6 so we can restore on exit. They are args to the function that will be called. +# The other args, r3, r7, and r8 are about to be set so we don't need to worry about those +mr r31, r4 +mr r30, r5 +mr r29, r6 +li REG_DISPLAY_MESSAGE_ID, 0 + +# Grab data address +bl DATA_BLRL +mflr REG_DO + +# Ensure that this is an online match +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +bne EXIT + +# Don't run this code for teams +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_TEAMS +beq EXIT + +# Check to see if this is an LGL victory + +# Fetch ledge grab amounts +li r3, 0 +branchl r12, 0x80040af0 # PlayerBlock_GetCliffhangerStat +mr REG_P1_LEDGE_GRABS, r3 +li r3, 1 +branchl r12, 0x80040af0 # PlayerBlock_GetCliffhangerStat +mr REG_P2_LEDGE_GRABS, r3 + +# First handle condition where both players are over LGL +cmpwi REG_P1_LEDGE_GRABS, LGL_LIMIT +ble CHECK_LGL_LOSS +cmpwi REG_P2_LEDGE_GRABS, LGL_LIMIT +bgt EXIT # If we branch here both players have more than 45 so ignore LGL + +CHECK_LGL_LOSS: +cmpwi REG_P1_LEDGE_GRABS, LGL_LIMIT +li REG_LGL_LOSER, 0 +bgt SET_MODIFIED_MESSAGE # If P1 has more than 45 ledge grabs, P2 wins +cmpwi REG_P2_LEDGE_GRABS, LGL_LIMIT +li REG_LGL_LOSER, 1 +bgt SET_MODIFIED_MESSAGE # If P2 has more than 45 ledge grabs, P1 wins +b EXIT # If neither player has more than 45 ledge grabs, exit + +SET_MODIFIED_MESSAGE: +# Check if we won or lost via LGL +lwz r3, OFST_R13_ODB_ADDR(r13) # data buffer address +lbz r3, ODB_LOCAL_PLAYER_INDEX(r3) +cmpw r3, REG_LGL_LOSER # Compare local player index of winner +li REG_DISPLAY_MESSAGE_ID, 2 # Set message to "Success" if we won +addi REG_FILL_COLOR, REG_DO, DO_COLOR_FILL_WIN +addi REG_FIRST_STRING, REG_DO, DO_STRING_OPP +lfs f3, DO_POS_Y_WIN(REG_DO) +bne DISPLAY_LGL_MESSAGE +li REG_DISPLAY_MESSAGE_ID, 6 # Set message to "Failure" if we lost +addi REG_FILL_COLOR, REG_DO, DO_COLOR_FILL_LOSS +addi REG_FIRST_STRING, REG_DO, DO_STRING_YOU +lfs f3, DO_POS_Y_LOSS(REG_DO) + +DISPLAY_LGL_MESSAGE: +# Make game exit transition longer +load r3, 0x8046b6a0 # Some static match state struct +li r4, 0xFD # Default value for this is 0x6e +stb r4, 0x24D5(r3) # Overwrite the GAME! think max time to make it longer + +# Print text on screen indicating what happened +lwz r3, OFST_R13_ODB_ADDR(r13) # data buffer address +lwz r3, ODB_HUD_TEXT_STRUCT(r3) +mr r4, REG_FILL_COLOR +li r5, 1 +addi r6, REG_DO, DO_COLOR_OUTLINE # Outline Color +addi r7, REG_DO, DO_STRING # String +mr r8, REG_FIRST_STRING +li r9, LGL_LIMIT # LGL Limit +lfs f1, DO_SCALE(REG_DO) +lfs f2, DO_POS_X(REG_DO) +lfs f6, DO_STROKE_OFFSET(REG_DO) +branchl r12, FG_CreateSubtext + +EXIT: +# Restore r4-r6 +mr r4, r31 +mr r5, r30 +mr r6, r29 +mr r3, REG_DISPLAY_MESSAGE_ID # Use the message ID we set earlier. 0 if no LGL which is replaced codeline +restore +addi r7, r31, 0 # Line 802f70c0 may have been clobbered, set it again \ No newline at end of file diff --git a/Online/Core/LoopEngineForRollback.asm b/Online/Core/LoopEngineForRollback.asm index 92ed17c1..d52a5910 100644 --- a/Online/Core/LoopEngineForRollback.asm +++ b/Online/Core/LoopEngineForRollback.asm @@ -106,7 +106,7 @@ PENDING_LOOP_CONTINUE: addi r7, r7, 1 PENDING_LOOP_CONDITION: lbz r3, SFXS_LOG_INDEX(r6) -cmpwi r7, r3 +cmpw r7, r3 blt PENDING_LOOP_START # If we exit loop normally, let's stop sound @@ -161,13 +161,36 @@ stb REG_SOUND_WRITE_INDEX, SFXDB_WRITE_INDEX(REG_SFXDB_ADDRESS) SKIP_NEW_FRAME_PROCESSING: +lbz REG_IS_ROLLBACK_ACTIVE, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) +cmpwi REG_IS_ROLLBACK_ACTIVE, 1 +bne RESTORE_AND_EXIT # If no rollback active, continue as normal + +lwz r3, ODB_STABLE_ROLLBACK_END_FRAME(REG_ODB_ADDRESS) +cmpw REG_CURRENT_FRAME, r3 +blt HANDLE_ROLLBACK # If we haven't reached end frame, loop the engine + +# Here we have reached the end frame for the rollback, clear states and don't loop +# Break out of the input loop here because r27 might still have a value that could +# make the loop continue otherwise +# logf LOG_LEVEL_INFO, "[%d] Resetting rollback active state", "mr r5, REG_CURRENT_FRAME" + +# If we have reached the frame, turn off rollback +li r3, 0 +stb r3, ODB_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) +stb r3, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) + # Restore interrupts mr r3, REG_INTERRUPT_IDX branchl r12, OSRestoreInterrupts -lbz REG_IS_ROLLBACK_ACTIVE, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) -cmpwi REG_IS_ROLLBACK_ACTIVE, 1 -bne RESTORE_AND_EXIT # If no rollback active, continue as normal +restore +addi r26, r26, 1 # Probably not necessary +branch r12, 0x801a5024 # Exit input processing loop + +HANDLE_ROLLBACK: +# Restore interrupts +mr r3, REG_INTERRUPT_IDX +branchl r12, OSRestoreInterrupts # Here we have a rollback, we are going to loop back to the start of the # updateFunction loop @@ -175,6 +198,9 @@ bl FN_ExecCameraTasks # Loop back to start of updateFunction loop restore +# Add 1 to r26 to move to the next input in the case of an advance rollback where loading a state +# is not needed. Not 100% sure about whether this is safe +addi r26, r26, 1 branch r12, 0x801a4de4 # Continue rollback, branch to the start of game engine loop # Functions section @@ -182,6 +208,10 @@ FunctionBody_ExecCameraTasks # Terminate code RESTORE_AND_EXIT: +# Restore interrupts +mr r3, REG_INTERRUPT_IDX +branchl r12, OSRestoreInterrupts + restore EXIT: diff --git a/Online/Core/Music/StartSong.asm b/Online/Core/Music/StartSong.asm new file mode 100644 index 00000000..268cc658 --- /dev/null +++ b/Online/Core/Music/StartSong.asm @@ -0,0 +1,79 @@ +################################################################################ +# Address: 0x8038e910 # fileLoad_HPS, after entry num is fetched +################################################################################ + +.include "Common/Common.s" + +.set REG_PMQ, 31 +.set REG_ENTRYNUM, 30 +.set REG_INTERRUPT_IDX, 29 + +# This will contain the DVDFileInfo struct which has length 0x40 +.set SPO_STRUCT_START, BKP_FREE_SPACE_OFFSET +.set SPO_FILE_OFFSET, SPO_STRUCT_START + 0x30 +.set SPO_FILE_SIZE, SPO_FILE_OFFSET + 4 + +# This space will be used to transfer over EXI. EXI buffers must be 32 byte aligned though +# so we don't know exactly where the buffer will start +.set SPO_EXI_SPACE_START, SPO_STRUCT_START + 0x40 + +# PlayMusicQuery args +.set PMQ_COMMAND, 0 +.set PMQ_FILE_OFFSET, PMQ_COMMAND + 1 +.set PMQ_FILE_SIZE, PMQ_FILE_OFFSET + 4 +.set PMQ_SIZE, PMQ_FILE_SIZE + 4 # Confusing but this is the size of the buffer + +# Grab enough space that no matter where we are, we can byteAlign32 and still fit the PMQ data +.set SPACE_NEEDED, SPO_EXI_SPACE_START + PMQ_SIZE + 32 + +backup SPACE_NEEDED + +mr REG_ENTRYNUM, r3 + +branchl r12, OSDisableInterrupts +mr REG_INTERRUPT_IDX, r3 + +mr r3, REG_ENTRYNUM +addi r4, sp, SPO_STRUCT_START +branchl r12, 0x80337c60 # DVDFastOpen + +# TODO: File_GetLength asserts when result = 0, hopefully just ignoring it and doing nothing is fine +cmpwi r3, 0 +beq CLEANUP_AND_EXIT + +# Log +# lwz r5, SPO_FILE_OFFSET(sp) +# lwz r6, SPO_FILE_SIZE(sp) +# logf LOG_LEVEL_WARN, "[Music] Starting song at 0x%x with size %d" + +addi REG_PMQ, sp, SPO_EXI_SPACE_START +byteAlign32 REG_PMQ + +# Write command +li r3, CONST_SlippiPlayMusic +stb r3, PMQ_COMMAND(REG_PMQ) + +# Write file offset and size +lwz r3, SPO_FILE_OFFSET(sp) +stw r3, PMQ_FILE_OFFSET(REG_PMQ) +lwz r3, SPO_FILE_SIZE(sp) +stw r3, PMQ_FILE_SIZE(REG_PMQ) + +# Exec EXI transfer +mr r3, REG_PMQ +li r4, PMQ_SIZE +li r5, CONST_ExiWrite +branchl r12, FN_EXITransferBuffer + +CLEANUP_AND_EXIT: +addi r3, sp, SPO_STRUCT_START +branchl r12, 0x80337cd4 # DVDClose + +mr r3, REG_INTERRUPT_IDX +branchl r12, OSRestoreInterrupts + +mr r3, REG_ENTRYNUM + +restore SPACE_NEEDED + +lwz r0, -0x5668(r13) # replaced code line \ No newline at end of file diff --git a/Online/Core/Music/Stop.asm b/Online/Core/Music/Stop.asm new file mode 100644 index 00000000..fa226879 --- /dev/null +++ b/Online/Core/Music/Stop.asm @@ -0,0 +1,40 @@ +################################################################################ +# Address: 0x800236ec # Music_StopMusic, after function call +################################################################################ + +.include "Common/Common.s" + +.set REG_SMQ, 31 + +# This space will be used to transfer over EXI. EXI buffers must be 32 byte aligned though +# so we don't know exactly where the buffer will start +.set SPO_EXI_SPACE_START, BKP_FREE_SPACE_OFFSET + +# PlayMusicQuery args +.set SMQ_COMMAND, 0 +.set SMQ_SIZE, SMQ_COMMAND + 1 + +# Grab enough space that no matter where we are, we can byteAlign32 and still fit the SMQ data +.set SPACE_NEEDED, SPO_EXI_SPACE_START + SMQ_SIZE + 32 + +backup SPACE_NEEDED + +# logf LOG_LEVEL_WARN, "[Music] Stopping music" + +addi REG_SMQ, sp, SPO_EXI_SPACE_START +byteAlign32 REG_SMQ + +# Write command +li r3, CONST_SlippiStopMusic +stb r3, SMQ_COMMAND(REG_SMQ) + +# Exec EXI transfer +mr r3, REG_SMQ +li r4, SMQ_SIZE +li r5, CONST_ExiWrite +branchl r12, FN_EXITransferBuffer + +CLEANUP_AND_EXIT: +restore SPACE_NEEDED + +li r0, 0 # replaced code line \ No newline at end of file diff --git a/Online/Core/Music/VolumeChange.asm b/Online/Core/Music/VolumeChange.asm new file mode 100644 index 00000000..2726b0f0 --- /dev/null +++ b/Online/Core/Music/VolumeChange.asm @@ -0,0 +1,66 @@ +################################################################################ +# Address: 0x800249f0 # DSP_Process, where volume is written +################################################################################ + +.include "Common/Common.s" + +.set REG_CMVQ, 31 +.set REG_DATA, 30 + +# This space will be used to transfer over EXI. EXI buffers must be 32 byte aligned though +# so we don't know exactly where the buffer will start +.set SPO_EXI_SPACE_START, BKP_FREE_SPACE_OFFSET + +# PlayMusicQuery args +.set CMVQ_COMMAND, 0 +.set CMVQ_VOLUME, CMVQ_COMMAND + 1 +.set CMVQ_SIZE, CMVQ_VOLUME + 1 + +# Grab enough space that no matter where we are, we can byteAlign32 and still fit the CMVQ data +.set SPACE_NEEDED, SPO_EXI_SPACE_START + CMVQ_SIZE + 32 + +b CODE_START + +DATA_BLRL: +blrl +.set DO_PREV_VOLUME, 0 +.long 0x00000000 + +CODE_START: +stw r0, -0x7E18(r13) # replaced code line + +backup SPACE_NEEDED + +bl DATA_BLRL +mflr REG_DATA + +lwz r4, -0x7E18(r13) # load new value +lwz r3, DO_PREV_VOLUME(REG_DATA) # load old value +cmpw r3, r4 +beq CLEANUP_AND_EXIT + +# Update prev value to current +stw r4, DO_PREV_VOLUME(REG_DATA) + +# Here the volume differs from the previous. Let's send the new volume to Dolphin +# mr r5, r4 +# logf LOG_LEVEL_WARN, "[Music] Volume changed: %d" + +addi REG_CMVQ, sp, SPO_EXI_SPACE_START +byteAlign32 REG_CMVQ + +# Write command +li r3, CONST_SlippiChangeMusicVolume +stb r3, CMVQ_COMMAND(REG_CMVQ) + +# Write new volume +stb r4, CMVQ_VOLUME(REG_CMVQ) + +# Exec EXI transfer +mr r3, REG_CMVQ +li r4, CMVQ_SIZE +li r5, CONST_ExiWrite +branchl r12, FN_EXITransferBuffer + +CLEANUP_AND_EXIT: +restore SPACE_NEEDED \ No newline at end of file diff --git a/Online/Core/PreventFileAlarms/FreezeStadium.asm b/Online/Core/PreventFileAlarms/FreezeStadium.asm index c4412017..84e76d45 100644 --- a/Online/Core/PreventFileAlarms/FreezeStadium.asm +++ b/Online/Core/PreventFileAlarms/FreezeStadium.asm @@ -1,5 +1,6 @@ ################################################################################ # Address: 0x801d4578 # PokemonStadium_TransformationDecide +# Tags: [affects-gameplay] ################################################################################ .include "Common/Common.s" diff --git a/Online/Core/ReportNoContestLRAS.asm b/Online/Core/ReportNoContestLRAS.asm new file mode 100644 index 00000000..16fe7546 --- /dev/null +++ b/Online/Core/ReportNoContestLRAS.asm @@ -0,0 +1,33 @@ +################################################################################ +# Address: 0x8016e9e8 +################################################################################ + +.include "Common/Common.s" +.include "Online/Online.s" + +# This code ensures that the game has been reported before leaving the game scene. In direct mode +# on an LRAS, the game wasn't being reported in StartEngineLoop.asm + +# Ensure that this is an online match +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +bne EXIT + +lwz r12, OFST_R13_ODB_ADDR(r13) # data buffer address + +# Check if game is already ended. For everything but direct LRAS this flag should be true already +lbz r3, ODB_IS_GAME_OVER(r12) +cmpwi r3, 0 +bne EXIT + +# Mark game as being over +li r3, 1 +stb r3, ODB_IS_GAME_OVER(r12) + +# Call game end handler function +lwz r3, ODB_FN_HANDLE_GAME_OVER_ADDR(r12) +mtctr r3 +bctrl + +EXIT: +lbz r0, 0x000E(r31) \ No newline at end of file diff --git a/Online/Core/SkipNewInputFetchOnRollback.asm b/Online/Core/SkipNewInputFetchOnRollback.asm index 391836f6..01b10f9f 100644 --- a/Online/Core/SkipNewInputFetchOnRollback.asm +++ b/Online/Core/SkipNewInputFetchOnRollback.asm @@ -22,11 +22,17 @@ bne EXIT ################################################################################ # Check if rollback is active ################################################################################ - -lwz r3, OFST_R13_ODB_ADDR(r13) # data buffer address -lbz r3, ODB_ROLLBACK_IS_ACTIVE(r3) -cmpwi r3, 1 -bne EXIT # If rollback not active, continue as normal +lwz r4, OFST_R13_ODB_ADDR(r13) # data buffer address +lbz r3, ODB_ROLLBACK_IS_ACTIVE(r4) +cmpwi r3, 0 +beq EXIT # If rollback not active, continue as normal to execute pad read + +# We do this check because with frame advance especially, we can get in a state where +# we request a second input before savestate has been processed, we still want to fetch +# a controller input in this case +lbz r3, ODB_ROLLBACK_SHOULD_LOAD_STATE(r4) +cmpwi r3, 0 +bne EXIT # If state should be loaded, continue as normal to execute pad read ################################################################################ # Skip PADRead diff --git a/Online/Core/StartEngineLoop.asm b/Online/Core/StartEngineLoop.asm index 840f1195..31eb2a01 100644 --- a/Online/Core/StartEngineLoop.asm +++ b/Online/Core/StartEngineLoop.asm @@ -5,11 +5,18 @@ .include "Common/Common.s" .include "Online/Online.s" -.set REG_FRAME_INDEX, 27 -.set REG_ODB_ADDRESS, 26 +.set REG_FRAME_INDEX, 31 +.set REG_ODB_ADDRESS, 30 +.set REG_DESYNC_ENTRY_ADDRESS, 29 +.set REG_REMOTE_RXB, 28 +.set REG_INPUTS_TO_PROCESS, 27 # From parent +.set REG_INPUT_PROCESS_COUNTER, 26 # From parent .set REG_INTERRUPT_IDX, 25 -.set REG_TEXT_STRUCT, 24 -.set REG_DATA_ADDR, 23 +.set REG_LOOP_IDX, 24 +.set REG_REMOTE_DESYNC_ENTRY, 23 +.set REG_DESYNC_ENTRY_FRAME, 22 +.set REG_LOOP_IDX_2, 21 +.set REG_LOCAL_DESYNC_ENTRY, 20 # Replaced code branchl r12, HSD_PerfSetStartTime @@ -17,24 +24,231 @@ b CODE_START DATA_BLRL: blrl -.set DOFST_TEXT_BASE_Z, 0 -.float 0 -.set DOFST_TEXT_BASE_CANVAS_SCALING, DOFST_TEXT_BASE_Z + 4 -.float 1 - -.set DOFST_TEXT_X_POS, DOFST_TEXT_BASE_CANVAS_SCALING + 4 -.float 1.3 -.set DOFST_TEXT_Y_POS, DOFST_TEXT_X_POS + 4 -.float -45 -.set DOFST_TEXT_SIZE, DOFST_TEXT_Y_POS + 4 -.float 0.07 -.set DOFST_TEXT_COLOR, DOFST_TEXT_SIZE + 4 -.long 0xFF0000FF - -.set DOFST_TEXT_STRING, DOFST_TEXT_COLOR + 4 -.string "DISCONNECTED" +.set TEXT_ENTRY_X, 0 +.set TEXT_ENTRY_Y, TEXT_ENTRY_X + 4 +.set TEXT_ENTRY_SIZE, TEXT_ENTRY_Y + 4 +.set TEXT_ENTRY_COLOR, TEXT_ENTRY_SIZE + 4 +.set TEXT_ENTRY_STRING, TEXT_ENTRY_COLOR + 4 + +# Text entry for disconnect text +.set DOFST_DISCONNECT_TEXT_ENTRY, 0 +.float 9 # x-pos +.float -162 # y-pos +.float 0.7 # text size +.long 0xFF0000FF # text color +.string "DISCONNECTED" # text +.set DOFST_DISCONNECT_TEXT_ENTRY_SIZE, 16 + 13 + +# Text entry for desync text +.set DOFST_DESYNC_TEXT_ENTRY, DOFST_DISCONNECT_TEXT_ENTRY + DOFST_DISCONNECT_TEXT_ENTRY_SIZE +.float 9 # x-pos +.float -140 # y-pos +.float 0.5 # text size +.long 0xFFB800FF # text color +.string "DESYNC DETECTED" # text +.set DOFST_DISCONNECT_TEXT_ENTRY_SIZE, 16 + 16 + +# Text entry for desync risk +.set DOFST_DESYNC_RISK_TEXT_ENTRY, DOFST_DESYNC_TEXT_ENTRY + DOFST_DISCONNECT_TEXT_ENTRY_SIZE +.float 228 +.float 194 +.float 0.38 # text size +.long 0xFFB800FF # text color +.string "Desync Risk" # text +.set DOFST_DISCONNECT_TEXT_ENTRY_SIZE, 16 + 12 + .align 2 +################################################################################ +# Computes checksum from game state +################################################################################ +.set REG_PLAYER_STATIC_ADDRESS, 31 +.set REG_CHECKSUM, 30 +.set REG_LAST_PLAYER_ADDRESS, 29 + +.set SPO_CHECKSUM, BKP_FREE_SPACE_OFFSET +.set SPO_FLOAT_SUM, SPO_CHECKSUM + 4 +.set SPO_FTI_CAST_HIGH, SPO_FLOAT_SUM + 4 +.set SPO_FTI_CAST_LOW, SPO_FTI_CAST_HIGH + 4 +.set SPACE_NEEDED, SPO_FTI_CAST_LOW + 4 + +FN_COMPUTE_CHECKSUM: +backup SPACE_NEEDED + +load REG_PLAYER_STATIC_ADDRESS, 0x80453080 +load REG_LAST_PLAYER_ADDRESS, 0x80455C30 + +# Initialize checksum and pos to 0 +li r3, 0 +stw r3, SPO_CHECKSUM(sp) +stw r3, SPO_FLOAT_SUM(sp) + +FN_COMPUTE_CHECKSUM_LOOP_START: +# The helper function will do nothing if the player entity obj's are zero, so missing players +# will be ignored correctly in the checksum +addi r3, sp, SPO_CHECKSUM +lwz r4, 0xB0(REG_PLAYER_STATIC_ADDRESS) # Get player entity obj (gobj?) +bl FN_COMPUTE_CHECKSUM_HELPER +addi r3, sp, SPO_CHECKSUM +lwz r4, 0xB4(REG_PLAYER_STATIC_ADDRESS) # Get secondary player entity obj (gobj?) (sheik/nana) +bl FN_COMPUTE_CHECKSUM_HELPER +lwz REG_CHECKSUM, SPO_CHECKSUM(sp) +lbz r4, 0x8E(REG_PLAYER_STATIC_ADDRESS) # Load stocks +xor REG_CHECKSUM, REG_CHECKSUM, r4 # Load stocks in case players start new game with diff values +stw REG_CHECKSUM, SPO_CHECKSUM(sp) +FN_COMPUTE_CHECKSUM_LOOP_CONTINUE: +addi REG_PLAYER_STATIC_ADDRESS, REG_PLAYER_STATIC_ADDRESS, 0xE90 +cmpw REG_PLAYER_STATIC_ADDRESS, REG_LAST_PLAYER_ADDRESS +ble FN_COMPUTE_CHECKSUM_LOOP_START # Loops until we have processed all 4 potential players + +# Now we split the checksum into two parts, the upper two bytes will be the "full" +# checksum that will serve as a warning. The lower two bytes will only contain the +# casted sum of positions and percents which can be subtracted to allow for slight +# tolerances. These lower bytes will be the "hard" desync detection method +lhz r3, SPO_CHECKSUM(sp) +lhz r4, 2+SPO_CHECKSUM(sp) +xor r3, r3, r4 # Combine the first 16 bits and last 16 bits of checksum +rlwinm r3, r3, 16, 0xFFFFFFFF +lfs f1, SPO_FLOAT_SUM(sp) +fctiwz f1, f1 # Casts float to int +stfd f1, SPO_FTI_CAST_HIGH(sp) +lhz r4, 2+SPO_FTI_CAST_LOW(sp) +or r3, r3, r4 # Combined checksum and float sum + +restore SPACE_NEEDED +blr + +################################################################################ +# Helper function for computing checksum +# ------------------------------------------------------------------------------ +# Inputs: [r3] ChecksumAndPosPtr, [r4] PlayerEntityGobj +################################################################################ +.set REG_CHAR_DATA, 12 +.set REG_CHKSM_FSUM_PTR, 11 +.set REG_CHECKSUM, 10 +.set FREG_SUM, 12 + +FN_COMPUTE_CHECKSUM_HELPER: +cmpwi r4, 0 +beq FN_COMPUTE_CHECKSUM_HELPER_EXIT # Exit function if no player ptr +lwz REG_CHAR_DATA, 0x2C(r4) # Fetch char data + +mr REG_CHKSM_FSUM_PTR, r3 + +# Load some character data and xor into the checksum +lwz REG_CHECKSUM, 0x0(REG_CHKSM_FSUM_PTR) +lwz r4, 0x10(REG_CHAR_DATA) # ActionStateID +xor REG_CHECKSUM, REG_CHECKSUM, r4 +lwz r4, 0xB0(REG_CHAR_DATA) # Position X +xor REG_CHECKSUM, REG_CHECKSUM, r4 +lwz r4, 0xB4(REG_CHAR_DATA) # Position Y +xor REG_CHECKSUM, REG_CHECKSUM, r4 +lwz r4, 0x1830(REG_CHAR_DATA) # Percent damage +xor REG_CHECKSUM, REG_CHECKSUM, r4 +lwz r4, 0x8(REG_CHAR_DATA) # Spawn #. Starts as 1 and 2 then after someone respawns they become 3 and so on +xor REG_CHECKSUM, REG_CHECKSUM, r4 +stw REG_CHECKSUM, 0x0(REG_CHKSM_FSUM_PTR) + +# Load positions/percent and sum them all to keep track of a value that can be compared +lfs FREG_SUM, 0x4(REG_CHKSM_FSUM_PTR) +lfs f1, 0xB0(REG_CHAR_DATA) # Position X +fadds FREG_SUM, FREG_SUM, f1 +lfs f1, 0xB4(REG_CHAR_DATA) # Position Y +fadds FREG_SUM, FREG_SUM, f1 +lfs f1, 0x1830(REG_CHAR_DATA) # Percent damage +fadds FREG_SUM, FREG_SUM, f1 +stfs FREG_SUM, 0x4(REG_CHKSM_FSUM_PTR) + +# Logging stuff +# lfs f1, 0xB0(REG_CHAR_DATA) # Pos X full precision +# lfs f2, 0xB4(REG_CHAR_DATA) # Pos Y full precision +# lfs f3, 0x1830(REG_CHAR_DATA) # Percent +# lwz r5, 0x10(REG_CHAR_DATA) # ActionStateId +# lwz r6, 0xB0(REG_CHAR_DATA) # Pos X +# lwz r7, 0xB4(REG_CHAR_DATA) # Pos Y +# lwz r8, 0x8(REG_CHAR_DATA) # Number of spawns +# logf LOG_LEVEL_WARN, "[SEL] Checksum Values: %X | %f (%08X) | %f (%08X) | %f | %d" + +FN_COMPUTE_CHECKSUM_HELPER_EXIT: +blr + +################################################################################ +# Creates a subtext +# ------------------------------------------------------------------------------ +# Inputs: [r3] TextStruct, [r4] DOFST for Text Entry +# ------------------------------------------------------------------------------ +# Output: [r3] SubtextId +################################################################################ +.set REG_TEXT_CONFIG_ADDR, 31 +.set REG_SUBTEXT_ID, 30 +.set REG_TEXT_STRUCT, 29 + +FN_CREATE_HUD_SUBTEXT: +backup + +mr REG_TEXT_STRUCT, r3 + +bl DATA_BLRL +mflr REG_TEXT_CONFIG_ADDR +add REG_TEXT_CONFIG_ADDR, REG_TEXT_CONFIG_ADDR, r4 + +# Initialize header +lfs f1, TEXT_ENTRY_X(REG_TEXT_CONFIG_ADDR) +lfs f2, TEXT_ENTRY_Y(REG_TEXT_CONFIG_ADDR) +mr r3, REG_TEXT_STRUCT +addi r4, REG_TEXT_CONFIG_ADDR, TEXT_ENTRY_STRING +branchl r12, Text_InitializeSubtext +mr REG_SUBTEXT_ID, r3 + +# Set header text size +mr r3, REG_TEXT_STRUCT +mr r4, REG_SUBTEXT_ID +lfs f1, TEXT_ENTRY_SIZE(REG_TEXT_CONFIG_ADDR) +lfs f2, TEXT_ENTRY_SIZE(REG_TEXT_CONFIG_ADDR) +branchl r12, Text_UpdateSubtextSize + +# Set text color +mr r3, REG_TEXT_STRUCT +mr r4, REG_SUBTEXT_ID +addi r5, REG_TEXT_CONFIG_ADDR, TEXT_ENTRY_COLOR +branchl r12, Text_ChangeTextColor + +mr r3, REG_SUBTEXT_ID + +restore +blr + +################################################################################ +# End game if we are in ranked mode +################################################################################ +FN_END_GAME_IF_RANKED: +# Check if we should end game (ranked mode), could maybe check if pause is fully off instead +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +bne FN_END_GAME_IF_RANKED_EXIT + +# ASM Notes. Match struct at 0x8046b6a0 has info about the game. The early values seem to be control +# values. Here are notes on offsets: +# 0x0 (u8): Control byte. 0 during game, 1 during GAME!, 3 to transition to next scene +# 0x1 (u8): Stores index of last person that paused +# 0x8 (u8): Stores type of game exit, instructs which text to show on GAME! screen? +# 0x30 (u8): Counter that counts up during GAME! screen until it is greater than timeout +# 0x24D5 (u8): Max time to stay on GAME! screen + +lwz r12, OFST_R13_ODB_ADDR(r13) # data buffer address + +# Write values which will cause line at 0x8016d2c8 to detect game has ended +load r3, 0x8046b6a0 # Some static match state struct +lbz r4, ODB_ONLINE_PLAYER_INDEX(r12) +stb r4, 0x1(r3) # Write "pauser" index +li r4, 0x7 +stb r4, 0x8(r3) # Write that the game is exiting as an LRAS +li r4, 0x37 # Default value for this is 0x6e +stb r4, 0x24D5(r3) # Overwrite the GAME! think max time to make it shorter + +FN_END_GAME_IF_RANKED_EXIT: +blr + CODE_START: # backup registers and sp backup @@ -58,10 +272,14 @@ bne EXIT # fetch data to use throughout function lwz REG_ODB_ADDRESS, OFST_R13_ODB_ADDR(r13) # data buffer address loadGlobalFrame REG_FRAME_INDEX +lwz REG_REMOTE_RXB, ODB_RXB_ADDR(REG_ODB_ADDRESS) branchl r12, OSDisableInterrupts mr REG_INTERRUPT_IDX, r3 +# Log the frame we are starting +# logf LOG_LEVEL_INFO, "[SEL] [%d] Starting frame processing... r26: %d", "mr r5, REG_FRAME_INDEX", "mr r6, 26" + ################################################################################ # Check if we should display disconnect message ################################################################################ @@ -73,62 +291,31 @@ lbz r3, ODB_IS_DISCONNECTED(REG_ODB_ADDRESS) cmpwi r3, 0 beq DISPLAY_DISCONNECT_END # If not disconnected, do nothing +# Sometimes I think it's possible to get a disconnect signal after the game has ended on both +# games. Atm I'm not sure why but it makes it possible for DISCONNECTED to show up for a frame +# or two on one client before the scene transition. So I added this to make it just not show the +# message if the game is already over +lbz r3, ODB_IS_GAME_OVER(REG_ODB_ADDRESS) +cmpwi r3, 0 +bne DISPLAY_DISCONNECT_END + # We are disconnected, display text and play sound li r3, 3 branchl r12, SFX_Menu_CommonSound -################################################################################ -# Start prepping text display -################################################################################ -bl DATA_BLRL -mflr REG_DATA_ADDR - -li r3, 2 -lwz r4, ODB_HUD_CANVAS(REG_ODB_ADDRESS) # HUD canvas used for names and delay (does not stretch in widescreen) -branchl r12, Text_CreateStruct -mr REG_TEXT_STRUCT, r3 - -# Set text kerning to close -li r4, 0x1 -stb r4, 0x49(REG_TEXT_STRUCT) -# Set text to align center -li r4, 0x1 -stb r4, 0x4A(REG_TEXT_STRUCT) - -# Store Base Z Offset -lfs f1, DOFST_TEXT_BASE_Z(REG_DATA_ADDR) #Z offset -stfs f1, 0x8(REG_TEXT_STRUCT) - -# Scale Canvas Down -lfs f1, DOFST_TEXT_BASE_CANVAS_SCALING(REG_DATA_ADDR) -stfs f1, 0x24(REG_TEXT_STRUCT) -stfs f1, 0x28(REG_TEXT_STRUCT) - -# Initialize header -lfs f1, DOFST_TEXT_X_POS(REG_DATA_ADDR) -lfs f2, DOFST_TEXT_Y_POS(REG_DATA_ADDR) -mr r3, REG_TEXT_STRUCT -addi r4, REG_DATA_ADDR, DOFST_TEXT_STRING -branchl r12, Text_InitializeSubtext - -# Set header text size -mr r3, REG_TEXT_STRUCT -li r4, 0 -lfs f1, DOFST_TEXT_SIZE(REG_DATA_ADDR) -lfs f2, DOFST_TEXT_SIZE(REG_DATA_ADDR) -branchl r12, Text_UpdateSubtextSize - -# Set text color -mr r3, REG_TEXT_STRUCT -li r4, 0 -addi r5, REG_DATA_ADDR, DOFST_TEXT_COLOR -branchl r12, Text_ChangeTextColor +# Create subtext +lwz r3, ODB_HUD_TEXT_STRUCT(REG_ODB_ADDRESS) +li r4, DOFST_DISCONNECT_TEXT_ENTRY +bl FN_CREATE_HUD_SUBTEXT # Indicate we have displayed disconnect message. Dont worry, we can't rollback # if disconnected so we dont have to worry about things getting reset li r3, 1 stb r3, ODB_IS_DISCONNECT_STATE_DISPLAYED(REG_ODB_ADDRESS) +# This will terminate the game if we're in ranked mode +bl FN_END_GAME_IF_RANKED + DISPLAY_DISCONNECT_END: ################################################################################ @@ -137,7 +324,7 @@ DISPLAY_DISCONNECT_END: # Check if a rollback is active lbz r3, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) cmpwi r3, 0 -beq CAPTURE_CHECK # If rollback not active, check if we need to save state +beq HANDLE_ROLLBACK_INPUTS_END # If rollback not active, check if we need to save state # Check if we have a savestate, if so, we need to load state lbz r3, ODB_STABLE_ROLLBACK_SHOULD_LOAD_STATE(REG_ODB_ADDRESS) @@ -147,16 +334,39 @@ beq CONTINUE_ROLLBACK # If we don't need to load state, just continue rollback ################################################################################ # Load state and restore data ################################################################################ +# logf LOG_LEVEL_INFO, "[SEL] [%d] Considering loading state: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_SAVESTATE_FRAME(REG_ODB_ADDRESS)" + +# If we need a load a state but the requested frame is either equal to or greater than the current +# frame, that means that we have advanced some frames and determined a rollback was needed on the +# advanced frames to a frame that has yet been processed. In this case, we don't want to load state. +# Instead, if the frame is greater than the current frame, we let the frame process as normal and +# don't do any roll back logic. If the frame is equal, we process the rollback without loading a +# state +lwz r3, ODB_STABLE_SAVESTATE_FRAME(REG_ODB_ADDRESS) +# cmpw REG_FRAME_INDEX, r3 +# bgt SKIP_LOAD_LOG +# logf LOG_LEVEL_NOTICE, "[SEL] [%d] Surprising state load: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_SAVESTATE_FRAME(REG_ODB_ADDRESS)" +cmpw REG_FRAME_INDEX, r3 +beq SKIP_LOAD_STATE +blt HANDLE_ROLLBACK_INPUTS_END +SKIP_LOAD_LOG: + +# logf LOG_LEVEL_WARN, "[SEL] [%d] Loading state: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_SAVESTATE_FRAME(REG_ODB_ADDRESS)" + # Load state from savestate frame lwz r3, ODB_SAVESTATE_SSRB_ADDR(REG_ODB_ADDRESS) lwz r4, ODB_STABLE_SAVESTATE_FRAME(REG_ODB_ADDRESS) # Stable because we only load one state per iteration lwz r5, ODB_SAVESTATE_SSCB_ADDR(REG_ODB_ADDRESS) branchl r12, FN_LoadSavestate +SKIP_LOAD_STATE: # Unfortunately if we ended up saving a state, it was after predicted inputs # were added to the raw input buffer. This block will rewind the raw controller # data index such that subsequent calls to RenewInputs will add inputs to the -# right places +# right places. +# Update 2/1/22: I'm a bit worried this won't always work with frame advance though I haven't +# seen a desync in testing yet. If frame advance causes UCF desyncs, this section of code could be +# why. Think the code primarily exists to make sure UCF velocity calculations work correctly branchl r12, PadAlarmCheck # This loads the number of inputs into r3 (normally 1), should we just use HSD_PadGetRawQueueCount instead? load r5, 0x804c1f78 # Start of raw controller data section lbz r4, 0x2(r5) # Load the current raw data index @@ -175,32 +385,253 @@ loadGlobalFrame REG_FRAME_INDEX # This might have changed since savestate load lwz r3, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) stw r3, ODB_FRAME(REG_ODB_ADDRESS) +.if DEBUG_INPUTS==1 +logf LOG_LEVEL_WARN, "[Rollback] Finished reverting state to frame: %d", "mr r5, 3" +.endif + # Clear savestate and should load flags flag li r3, 0 -stb r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE+0x0(REG_ODB_ADDRESS) -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE+0x1(REG_ODB_ADDRESS) -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE+0x2(REG_ODB_ADDRESS) +stb r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING+0x0(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING+0x1(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING+0x2(REG_ODB_ADDRESS) stb r3, ODB_ROLLBACK_SHOULD_LOAD_STATE(REG_ODB_ADDRESS) stb r3, ODB_STABLE_ROLLBACK_SHOULD_LOAD_STATE(REG_ODB_ADDRESS) +################################################################################ +# Fetch the next inputs during a rollback +################################################################################ CONTINUE_ROLLBACK: +# logf LOG_LEVEL_INFO, "[SEL] [%d] About to request rollback input. End frame: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_ROLLBACK_END_FRAME(REG_ODB_ADDRESS)" + # If there is an active rollback, trigger a controller status renewal. # This should pick up on the new global frame timer inputs for this game engine # loop and continue the rollback branchl r12, RenewInputs_Prefunction -# Check if we should disable rollback flag if this was the last frame -# Determine whether we should disable rollback if we have reached the target -lwz r3, ODB_STABLE_ROLLBACK_END_FRAME(REG_ODB_ADDRESS) +# logf LOG_LEVEL_INFO, "[SEL] [%d] Finished getting rollback input. End frame: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_ROLLBACK_END_FRAME(REG_ODB_ADDRESS)" + +HANDLE_ROLLBACK_INPUTS_END: + +################################################################################ +# Store stable data that needs to update every time RenewInputs_Prefunction is +# called +################################################################################ +# logf LOG_LEVEL_INFO, "[SEL] [%d] Considering updating stable finalized frame. CurrentStable: %d, Volatile: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS)", "lwz r7, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS)" +lwz r3, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS) cmpw REG_FRAME_INDEX, r3 -blt CAPTURE_CHECK +bgt UPDATE_STABLE_FINALIZED # If cur frame greater than volatile, set stable to volatile +# Here the frame is equal to or less than or equal to the finalized frame. This might happen in +# the case of processing a rollback. Set the stable finalized frame to the current frame +mr r3, REG_FRAME_INDEX +b UPDATE_STABLE_FINALIZED +UPDATE_STABLE_FINALIZED: +lwz r4, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +cmpw r3, r4 +ble SKIP_STABLE_FINALIZED_UPDATE +# logf LOG_LEVEL_WARN, "[SEL] [%d] Stable finalized value updated to %d. Volatile: %d", "mr r5, REG_FRAME_INDEX", "mr r6, 3", "lwz r7, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS)" +stw r3, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +SKIP_STABLE_FINALIZED_UPDATE: + +#################################################################################################### +# Write checksum for this frame, overwrite if there is an existing entry for this frame, +# we won't send any checksums to the opponent that are past the finalized frame +#################################################################################################### +# Start working towards fetching the entry where we are going to write +lwz r3, ODB_LOCAL_DESYNC_LAST_FRAME(REG_ODB_ADDRESS) +addi r3, r3, 1 +sub. r3, REG_FRAME_INDEX, r3 +lbz r4, ODB_LOCAL_DESYNC_WRITE_IDX(REG_ODB_ADDRESS) +blt SKIP_DESYNC_WRITE_IDX_ADJUST +# If we get here, this is a new frame we haven't seen yet, store that frame as the last frame +# and also increment the write index +incrementByteInBuf r6, REG_ODB_ADDRESS, ODB_LOCAL_DESYNC_WRITE_IDX, DESYNC_ENTRY_COUNT +stw REG_FRAME_INDEX, ODB_LOCAL_DESYNC_LAST_FRAME(REG_ODB_ADDRESS) +SKIP_DESYNC_WRITE_IDX_ADJUST: + +# Here r3 is equal to the offset from the write index where we want to write our checksum, r4 is +# equal to the current write index, let's fetch the address to that entry +li r5, DESYNC_ENTRY_COUNT +adjustCircularIndex r4, r4, r3, r5, r6 +# logf LOG_LEVEL_NOTICE, "Writing checksum for frame %d. Write idx: %d", "mr r5, REG_FRAME_INDEX", "mr r6, 4" +mulli r4, r4, DDLE_SIZE +addi r3, r4, ODB_LOCAL_DESYNC_ARR +add REG_DESYNC_ENTRY_ADDRESS, REG_ODB_ADDRESS, r3 + +# Write the frame +stw REG_FRAME_INDEX, DDLE_FRAME(REG_DESYNC_ENTRY_ADDRESS) + +# Compute and write the checksum +bl FN_COMPUTE_CHECKSUM +stw r3, DDLE_CHECKSUM(REG_DESYNC_ENTRY_ADDRESS) +# logf LOG_LEVEL_WARN, "Local checksum value %d: %08x", "mr r5, REG_FRAME_INDEX", "mr r6, 3" + +# Write timer +loadwz r3, 0x8046B6C8 # Seconds remaining +stw r3, DDLE_RECOVERY_TIMER(REG_DESYNC_ENTRY_ADDRESS) + +# Write player percents and stocks +li REG_LOOP_IDX, 0 + +DESYNC_RECOVERY_STORE_FIGHTER_LOOP_START: +mr r3, REG_LOOP_IDX +branchl r12, 0x800342b4 # PlayerBlock_LoadDamage +mulli r4, REG_LOOP_IDX, DFRE_SIZE +addi r4, r4, DDLE_RECOVERY_FIGHTER_ARR + DFRE_PERCENT +sthx r3, REG_DESYNC_ENTRY_ADDRESS, r4 + +mr r3, REG_LOOP_IDX +branchl r12, 0x80033bd8 # PlayerBlock_LoadStocksLeft +mulli r4, REG_LOOP_IDX, DFRE_SIZE +addi r4, r4, DDLE_RECOVERY_FIGHTER_ARR + DFRE_STOCKS_REMAINING +stbx r3, REG_DESYNC_ENTRY_ADDRESS, r4 + +addi REG_LOOP_IDX, REG_LOOP_IDX, 1 +cmpwi REG_LOOP_IDX, 4 +blt DESYNC_RECOVERY_STORE_FIGHTER_LOOP_START + +SKIP_TAKE_CHECKSUM: + +#################################################################################################### +# Check local checksums against the remote checksums to see if we have a desync +#################################################################################################### +# If frame 0, we skip to where desync recovery state is written to ODB using the local state +# that was just written in the previous section. This is here in case inputs never come in +# from the opponent for some reason, we want to still do a desync recovery to something that isn't +# all zeroes +cmpwi REG_FRAME_INDEX, 0 +beq CHECKSUM_CHECK_PLAYER_LOOP_EXIT + +li REG_DESYNC_ENTRY_ADDRESS, 0 # Will be used to store latest confirmed frame + +lbz r3, ODB_IS_DESYNC_STATE_DISPLAYED(REG_ODB_ADDRESS) +cmpwi r3, 0 +bne DESYNC_CHECK_EXIT + +li REG_LOOP_IDX, 0 # Player index +CHECKSUM_CHECK_PLAYER_LOOP_START: +mulli r3, REG_LOOP_IDX, DDRE_SIZE +addi r3, r3, RXB_OPNT_DESYNC_ENTRY +add REG_REMOTE_DESYNC_ENTRY, REG_REMOTE_RXB, r3 # now stores desync entry address for this remote player +lwz REG_DESYNC_ENTRY_FRAME, DDRE_FRAME(REG_REMOTE_DESYNC_ENTRY) # now contains the desync entry frame +lwz r3, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +# logf LOG_LEVEL_ERROR, "[SEL] [%d] Checksum for Idx %d. StableFinalized: %d. Looking for %d -> %08x", "mr r5, REG_FRAME_INDEX", "mr r6, 12", "mr r7, 3", "mr r8, 10", "lwz r9, DDRE_CHECKSUM(REG_REMOTE_DESYNC_ENTRY)" +cmpw REG_DESYNC_ENTRY_FRAME, r3 # If this checksum frame is greater than our stable finalized frame, skip for now +bgt CHECKSUM_CHECK_PLAYER_LOOP_CONTINUE +cmpwi REG_DESYNC_ENTRY_FRAME, UNFREEZE_INPUTS_FRAME +ble CHECKSUM_CHECK_PLAYER_LOOP_CONTINUE + +# Now we loop through all of our local frames to find the entry that matches +li REG_LOOP_IDX_2, 0 +FIND_CHECKSUM_LOOP_START: +mulli r3, REG_LOOP_IDX_2, DDLE_SIZE +addi r3, r3, ODB_LOCAL_DESYNC_ARR +add REG_LOCAL_DESYNC_ENTRY, REG_ODB_ADDRESS, r3 # now contains the desync entry for our local player +lwz r3, DDLE_FRAME(REG_LOCAL_DESYNC_ENTRY) +cmpw REG_DESYNC_ENTRY_FRAME, r3 +bne FIND_CHECKSUM_LOOP_CONTINUE + +# Here we have found the desync entry for the latest finalized frame +# Store this desync entry if it is the first encountered +cmpwi REG_DESYNC_ENTRY_ADDRESS, 0 +beq CONFIRMED_SYNC_SET +lwz r3, DDLE_FRAME(REG_LOCAL_DESYNC_ENTRY) +cmpw REG_DESYNC_ENTRY_FRAME, r3 # If the current frame is later than the stored one, don't switch +bge SKIP_CONFIRMED_SYNC_SET +CONFIRMED_SYNC_SET: +mr REG_DESYNC_ENTRY_ADDRESS, REG_LOCAL_DESYNC_ENTRY +SKIP_CONFIRMED_SYNC_SET: +# Grab float sums from the clients +lhz r3, 2+DDLE_CHECKSUM(REG_LOCAL_DESYNC_ENTRY) +lhz r4, 2+DDRE_CHECKSUM(REG_REMOTE_DESYNC_ENTRY) + +# Subtract the float sums +extsh r3, r3 +extsh r4, r4 +# logf LOG_LEVEL_WARN, "[SEL] [%d] Hard Desync Check Values: %d vs %d", "mr r5, REG_FRAME_INDEX", "mr r6, 3", "mr r7, 4" +sub r3, r3, r4 + +# Check if the sums are off by more than abs(1), if so, this is a hard desync +cmpwi r3, -1 +blt HARD_DESYNC_DETECTED +cmpwi r3, 1 +bgt HARD_DESYNC_DETECTED +b HARD_DESYNC_HANDLER_END +HARD_DESYNC_DETECTED: +# logf LOG_LEVEL_ERROR, "[SEL] [%d] Hard Desync detected on frame %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_DESYNC_ENTRY_FRAME" -# If we have reached the frame, turn off rollback -li r3, 0 -stb r3, ODB_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) -stb r3, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) +# Play error sound +li r3, 3 +branchl r12, SFX_Menu_CommonSound + +# Create subtext +lwz r3, ODB_HUD_TEXT_STRUCT(REG_ODB_ADDRESS) +li r4, DOFST_DESYNC_TEXT_ENTRY +bl FN_CREATE_HUD_SUBTEXT + +# Indicate desync has been detected so we don't continue looking. +li r3, 1 +stb r3, ODB_IS_DESYNC_STATE_DISPLAYED(REG_ODB_ADDRESS) + +# This will terminate the game if we're in ranked mode +bl FN_END_GAME_IF_RANKED + +b DESYNC_CHECK_EXIT +HARD_DESYNC_HANDLER_END: +lbz r3, ODB_IS_DESYNC_RISK_DISPLAYED(REG_ODB_ADDRESS) +cmpwi r3, 0 +bne SOFT_DESYNC_HANDLER_END + +# Grab checksum values +lhz r3, DDLE_CHECKSUM(REG_LOCAL_DESYNC_ENTRY) +lhz r4, DDRE_CHECKSUM(REG_REMOTE_DESYNC_ENTRY) +# logf LOG_LEVEL_WARN, "[SEL] [%d] Soft Desync Check Values: %04X vs %04X", "mr r5, REG_FRAME_INDEX", "mr r6, 3", "mr r7, 4" +cmpw r3, r4 +beq SOFT_DESYNC_HANDLER_END +# logf LOG_LEVEL_ERROR, "[SEL] [%d] Soft Desync detected on frame %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_DESYNC_ENTRY_FRAME" + +# Create subtext +lwz r3, ODB_HUD_TEXT_STRUCT(REG_ODB_ADDRESS) +li r4, DOFST_DESYNC_RISK_TEXT_ENTRY +bl FN_CREATE_HUD_SUBTEXT + +# Indicate desync risk has been displayed so we dont display it again +li r3, 1 +stb r3, ODB_IS_DESYNC_RISK_DISPLAYED(REG_ODB_ADDRESS) + +SOFT_DESYNC_HANDLER_END: +b FIND_CHECKSUM_LOOP_EXIT + +FIND_CHECKSUM_LOOP_CONTINUE: +addi REG_LOOP_IDX_2, REG_LOOP_IDX_2, 1 +cmpwi REG_LOOP_IDX_2, DESYNC_ENTRY_COUNT +blt FIND_CHECKSUM_LOOP_START +FIND_CHECKSUM_LOOP_EXIT: + +CHECKSUM_CHECK_PLAYER_LOOP_CONTINUE: +addi REG_LOOP_IDX, REG_LOOP_IDX, 1 +lbz r3, RXB_OPNT_COUNT(REG_REMOTE_RXB) +cmpw REG_LOOP_IDX, r3 +blt CHECKSUM_CHECK_PLAYER_LOOP_START +CHECKSUM_CHECK_PLAYER_LOOP_EXIT: + +# If we get here, we have not yet desynced, let's then keep track of the latest player damage +# and percent +cmpwi REG_DESYNC_ENTRY_ADDRESS, 0 +beq COPY_RECOVERY_VALUES_EXIT +lwz r3, DDLE_RECOVERY_TIMER(REG_DESYNC_ENTRY_ADDRESS) +stw r3, ODB_DESYNC_RECOVERY_TIMER(REG_ODB_ADDRESS) +addi r3, REG_ODB_ADDRESS, ODB_DESYNC_RECOVERY_FIGHTER_ARR +addi r4, REG_DESYNC_ENTRY_ADDRESS, DDLE_RECOVERY_FIGHTER_ARR +li r5, DFRE_SIZE * 4 +branchl r12, memcpy +# logf LOG_LEVEL_NOTICE, "[SEL] [%d] Stored Synced State from frame %d. Timer: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, DDLE_FRAME(REG_DESYNC_ENTRY_ADDRESS)", "lwz r7, ODB_DESYNC_RECOVERY_TIMER(REG_ODB_ADDRESS)" +# logf LOG_LEVEL_WARN, "[SEL] F1: %d (%d%%), F2: %d (%d%%)", "lbz r5, ODB_DESYNC_RECOVERY_FIGHTER_ARR+0*DFRE_SIZE+DFRE_STOCKS_REMAINING(REG_ODB_ADDRESS)", "lhz r6, ODB_DESYNC_RECOVERY_FIGHTER_ARR+0*DFRE_SIZE+DFRE_PERCENT(REG_ODB_ADDRESS)", "lbz r7, ODB_DESYNC_RECOVERY_FIGHTER_ARR+1*DFRE_SIZE+DFRE_STOCKS_REMAINING(REG_ODB_ADDRESS)", "lhz r8, ODB_DESYNC_RECOVERY_FIGHTER_ARR+1*DFRE_SIZE+DFRE_PERCENT(REG_ODB_ADDRESS)" +# logf LOG_LEVEL_WARN, "[SEL] F3: %d (%d%%), F4: %d (%d%%)", "lbz r5, ODB_DESYNC_RECOVERY_FIGHTER_ARR+2*DFRE_SIZE+DFRE_STOCKS_REMAINING(REG_ODB_ADDRESS)", "lhz r6, ODB_DESYNC_RECOVERY_FIGHTER_ARR+2*DFRE_SIZE+DFRE_PERCENT(REG_ODB_ADDRESS)", "lbz r7, ODB_DESYNC_RECOVERY_FIGHTER_ARR+3*DFRE_SIZE+DFRE_STOCKS_REMAINING(REG_ODB_ADDRESS)", "lhz r8, ODB_DESYNC_RECOVERY_FIGHTER_ARR+3*DFRE_SIZE+DFRE_PERCENT(REG_ODB_ADDRESS)" +COPY_RECOVERY_VALUES_EXIT: + +DESYNC_CHECK_EXIT: ################################################################################ # Check if we should capture state. We need to do this after the rollback @@ -208,15 +639,19 @@ stb r3, ODB_STABLE_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) # even during a rollback ################################################################################ CAPTURE_CHECK: -# First check if a savestate is active -lbz r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) +# logf LOG_LEVEL_INFO, "[SEL] [%d] Considering saving state. Predicting: %d, Finalized: %d", "mr r5, REG_FRAME_INDEX", "lbz r6, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS)", "lwz r7, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS)" + +# First check if a savestate is required (the frame has predicted inputs) +lbz r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) cmpwi r3, 0 beq CAPTURE_END # Next check if this frame is greater than or equal to the frame we need -lwz r3, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) +lwz r3, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) cmpw REG_FRAME_INDEX, r3 -blt CAPTURE_END +ble CAPTURE_END + +# logf LOG_LEVEL_WARN, "[SEL] [%d] Saving state", "mr r5, REG_FRAME_INDEX" # Do savestate lwz r3, ODB_SAVESTATE_SSRB_ADDR(REG_ODB_ADDRESS) @@ -226,7 +661,7 @@ branchl r12, FN_CaptureSavestate CAPTURE_END: ################################################################################ -# Check if game has ended +# Check if game has ended. We give a buffer of ROLLBACK_MAX_FRAME_COUNT ################################################################################ lbz r3, ODB_IS_GAME_OVER(REG_ODB_ADDRESS) cmpwi r3, 1 @@ -236,18 +671,22 @@ beq CHECK_GAME_END_END load r3, 0x8046b6a0 lbz r3, 0x8(r3) cmpwi r3, 0 -bne INCREMENT_GAME_END_COUNTER +bne SKIP_GAME_END_FRAME_RESET -# Game end is 0, that means the game is not over, reset the counter +# Game end is 0, that means the game is not over, reset the end frame li r3, 0 -stb r3, ODB_GAME_OVER_COUNTER(REG_ODB_ADDRESS) +stw r3, ODB_GAME_END_FRAME(REG_ODB_ADDRESS) b CHECK_GAME_END_END +SKIP_GAME_END_FRAME_RESET: -INCREMENT_GAME_END_COUNTER: -lbz r3, ODB_GAME_OVER_COUNTER(REG_ODB_ADDRESS) -addi r3, r3, 1 -stb r3, ODB_GAME_OVER_COUNTER(REG_ODB_ADDRESS) +lwz r3, ODB_GAME_END_FRAME(REG_ODB_ADDRESS) +cmpwi r3, 0 +bne SKIP_SET_GAME_END_FRAME +stw REG_FRAME_INDEX, ODB_GAME_END_FRAME(REG_ODB_ADDRESS) +SKIP_SET_GAME_END_FRAME: +lwz r3, ODB_GAME_END_FRAME(REG_ODB_ADDRESS) +sub r3, REG_FRAME_INDEX, r3 cmpwi r3, ROLLBACK_MAX_FRAME_COUNT ble CHECK_GAME_END_END # Not sure if this could be blt instead... ble is safer diff --git a/Online/Core/TriggerSendInput.asm b/Online/Core/TriggerSendInput.asm index 48f04267..52847705 100644 --- a/Online/Core/TriggerSendInput.asm +++ b/Online/Core/TriggerSendInput.asm @@ -5,9 +5,12 @@ .include "Common/Common.s" .include "Online/Online.s" -.set CONST_BACKUP_BYTES, 0xB0 # Maybe add this to Common.s -.set P1_PAD_OFFSET, CONST_BACKUP_BYTES + 0x2C +# This is the offset of P1's inputs from the start of the parent's stack frame +.set P1_PAD_OFFSET, 0x2C +.set REG_PARENT_STACK_FRAME, 30 +.set REG_LOCAL_SOURCE_INPUT, 29 +.set REG_VARIOUS_3, 28 .set REG_ODB_ADDRESS, 27 .set REG_FRAME_INDEX, 26 .set REG_TXB_ADDRESS, 25 @@ -38,6 +41,9 @@ bne EXIT # Initialize ################################################################################ +# Load the address of the parent's stack frame +lwz REG_PARENT_STACK_FRAME, 0(sp) + # fetch data to use throughout function lwz REG_ODB_ADDRESS, OFST_R13_ODB_ADDR(r13) # data buffer address @@ -49,38 +55,88 @@ lwz REG_SSRB_ADDR, ODB_SAVESTATE_SSRB_ADDR(REG_ODB_ADDRESS) # Load frame index lwz REG_FRAME_INDEX, ODB_FRAME(REG_ODB_ADDRESS) +# Load address in sp of the source input for the local player +lbz r4, ODB_INPUT_SOURCE_INDEX(REG_ODB_ADDRESS) # index to grab inputs from +mulli r4, r4, PAD_REPORT_SIZE +addi r3, r4, P1_PAD_OFFSET # offset from sp where local player pad report is +add REG_LOCAL_SOURCE_INPUT, REG_PARENT_STACK_FRAME, r3 # get ptr to local input + # Check if we have an active rollback, if so, we don't want to fetch # new data from Slippi, we just want to operate on the existing data lbz r3, ODB_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) -cmpwi r3, 1 +cmpwi r3, 0 +beq PROCESS_NOT_ROLLBACK + +# Check to see if we should load state, if so then we actually have yet to process our +# savestate load, in this case we are not ready to call the rollback handler so let's queue +# up another input instead. +lbz r3, ODB_ROLLBACK_SHOULD_LOAD_STATE(REG_ODB_ADDRESS) +cmpwi r3, 0 beq ROLLBACK_HANDLER +PROCESS_NOT_ROLLBACK: + +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] Input Requested (not rollback)", "mr r5, REG_FRAME_INDEX" +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] Local Input: %08X %08X %08X", "mr r5, REG_FRAME_INDEX", "lwz r6, 0(REG_LOCAL_SOURCE_INPUT)", "lwz r7, 4(REG_LOCAL_SOURCE_INPUT)", "lwz r8, 8(REG_LOCAL_SOURCE_INPUT)" ################################################################################ # Section 1: Clear all inputs during freeze time, this is done such that # both replays are identical when considering only finalized frames ################################################################################ lbz r3, ODB_DELAY_FRAMES(REG_ODB_ADDRESS) -li r4, UNFREEZE_INPUTS_FRAME +li r4, START_SYNC_FRAME sub r3, r4, r3 -cmpwi REG_FRAME_INDEX, r3 # Frame 84 +/- 1 (not sure) is first unfrozen frame +cmpw REG_FRAME_INDEX, r3 # Frame 84 +/- 1 (not sure) is first unfrozen frame bge SKIP_FROZEN_INPUT_CLEAR -addi r3, sp, P1_PAD_OFFSET +addi r3, REG_PARENT_STACK_FRAME, P1_PAD_OFFSET li r4, CONTROLLER_COUNT * PAD_REPORT_SIZE branchl r12, Zero_AreaLength SKIP_FROZEN_INPUT_CLEAR: + +################################################################################ +# Section 2: Reduce analog stick resting noise +################################################################################ +b SKIP_STICK_AT_REST_FUNCTION +# Function to clamp a stick if it is at rest (to prevent noise from triggering rollbacks) +# This happens on about 10% of frames as per the testing done: +# https://github.com/project-slippi/slippi-ssbm-asm/commit/5aa07980a1cc27a3b4395e415a97eb8ddbea0b34 +FUNC_CLAMP_STICK_AT_REST: +.set CONST_REST_THRESH, 2 +# Check x-axis between at rest range +lbz r4, 0x0(r3) +extsb r4, r4 +cmpwi r4, -CONST_REST_THRESH +blt FUNC_CLAMP_STICK_AT_REST_EXIT +cmpwi r4, CONST_REST_THRESH +bgt FUNC_CLAMP_STICK_AT_REST_EXIT +# Check y-axis between at rest range +lbz r4, 0x1(r3) +extsb r4, r4 +cmpwi r4, -CONST_REST_THRESH +blt FUNC_CLAMP_STICK_AT_REST_EXIT +cmpwi r4, CONST_REST_THRESH +bgt FUNC_CLAMP_STICK_AT_REST_EXIT +# Clamp stick that is at rest +li r4, 0 +sth r4, 0x0(r3) +FUNC_CLAMP_STICK_AT_REST_EXIT: +blr +SKIP_STICK_AT_REST_FUNCTION: + +addi r3, REG_LOCAL_SOURCE_INPUT, 0x2 +bl FUNC_CLAMP_STICK_AT_REST +addi r3, REG_LOCAL_SOURCE_INPUT, 0x4 +bl FUNC_CLAMP_STICK_AT_REST + ################################################################################ -# Section 2: Deal with stale? controller inputs +# Section 3: Deal with stale? controller inputs ################################################################################ # These seem to happen when Dolphin slows down? Or during big rollbacks? # They are problematic because they usually show up as zero inputs and # are processed differently locally, branch at 803775b4 is hit though # the zero inputs are used remotely. -lbz r4, ODB_INPUT_SOURCE_INDEX(REG_ODB_ADDRESS) # index to grab inputs from -mulli r4, r4, PAD_REPORT_SIZE -addi r3, r4, P1_PAD_OFFSET + 0xA # offset from sp where pad report we want is -lbzx r3, sp, r3 # Load local controller connected state +lbz r3, 0xA(REG_LOCAL_SOURCE_INPUT) # Load status byte for pad extsb r3, r3 cmpwi r3, -3 # This code probably means no new data? Not fully sure but it causes issues bne SKIP_STALE_CONTROLLER_FIX @@ -92,34 +148,28 @@ lbz r12, ODB_DELAY_FRAMES(REG_ODB_ADDRESS) mr r11, REG_FRAME_INDEX add r11, r11, r12 addi r12, r4, P1_PAD_OFFSET -add r12, sp, r12 +add r12, REG_PARENT_STACK_FRAME, r12 bl FN_PrintInputs .endif # Replace the zero inputs with inputs from last frame. I believe this is what # the game does internally on a -3 status code, we need to make sure our remote # client does the same -addi r3, r4, P1_PAD_OFFSET -add r3, sp, r3 # destination +mr r3, REG_LOCAL_SOURCE_INPUT # destination addi r4, REG_ODB_ADDRESS, ODB_LAST_LOCAL_INPUTS # source li r5, PAD_REPORT_SIZE branchl r12, memcpy SKIP_STALE_CONTROLLER_FIX: -# Back up inputs to use for next frame if we get stale inputs -lbz r4, ODB_INPUT_SOURCE_INDEX(REG_ODB_ADDRESS) # index to grab inputs from -mulli r4, r4, PAD_REPORT_SIZE -addi r4, r4, P1_PAD_OFFSET # offset from sp where pad report we want is - # Move over pad data into last inputs storage addi r3, REG_ODB_ADDRESS, ODB_LAST_LOCAL_INPUTS # destination -add r4, sp, r4 # source +mr r4, REG_LOCAL_SOURCE_INPUT # source li r5, PAD_REPORT_SIZE branchl r12, memcpy ################################################################################ -# Section 3: Send this frame's pad data over EXI +# Section 4: Send this frame's pad data over EXI ################################################################################ # Write command byte to transfer buffer @@ -129,18 +179,40 @@ stb r3, TXB_CMD(REG_TXB_ADDRESS) # Load frame index into transfer buffer stw REG_FRAME_INDEX, TXB_FRAME(REG_TXB_ADDRESS) +# Finalized frame is used to decide which old inputs to discard. It is also used to determine +# whether to halt due to rollback limit. We are using STABLE because that ensures the frame +# has actually been processed by the game engine +lwz r3, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +stw r3, TXB_FINALIZED_FRAME(REG_TXB_ADDRESS) + +# Start a for loop to iterate through the DESYNC_ENTRY_ARR values in order to find the checksum +# from the latest finalized frame to send to the opponent +lwz r12, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +li r11, 0 +FIND_CHECKSUM_LOOP_START: +mulli r3, r11, DDLE_SIZE +addi r3, r3, ODB_LOCAL_DESYNC_ARR +add r10, REG_ODB_ADDRESS, r3 +lwz r3, DDLE_FRAME(r10) +cmpw r3, r12 +bne FIND_CHECKSUM_LOOP_CONTINUE +# Here we have found the desync entry for the latest finalized frame +lwz r3, DDLE_CHECKSUM(r10) +stw r3, TXB_FINALIZED_FRAME_CHECKSUM(REG_TXB_ADDRESS) +b FIND_CHECKSUM_LOOP_EXIT +FIND_CHECKSUM_LOOP_CONTINUE: +addi r11, r11, 1 +cmpwi r11, DESYNC_ENTRY_COUNT +blt FIND_CHECKSUM_LOOP_START +FIND_CHECKSUM_LOOP_EXIT: + # Transfer delay amount lbz r3, ODB_DELAY_FRAMES(REG_ODB_ADDRESS) stb r3, TXB_DELAY(REG_TXB_ADDRESS) -# prepare to send local player pad -lbz r4, ODB_INPUT_SOURCE_INDEX(REG_ODB_ADDRESS) # index to grab inputs from -mulli r4, r4, PAD_REPORT_SIZE -addi r4, r4, P1_PAD_OFFSET # offset from sp where pad report we want is - -# Move over pad data into transfer buffer +# Move local pad data into transfer buffer addi r3, REG_TXB_ADDRESS, TXB_PAD # destination -add r4, sp, r4 # source +mr r4, REG_LOCAL_SOURCE_INPUT # source li r5, PAD_REPORT_SIZE branchl r12, memcpy @@ -161,25 +233,31 @@ li r5, CONST_ExiWrite branchl r12, FN_EXITransferBuffer ################################################################################ -# Section 4: Receive response and determine whether this input will be used +# Section 5: Receive response and determine whether this input will be used ################################################################################ # Get response from Slippi and figure out whether this input should be skipped # Skipping an input causes the game to stall one frame and allows the opponent's # client to catch up -# TODO: Is it possible to do something better than skipping an input? Obviously -# TODO: this could throw off the timing of someone that is ahead + # request data from EXI that was prepared when we sent our frame addi r3, REG_RXB_ADDRESS, RXB_RESULT li r4, RXB_SIZE li r5, CONST_ExiRead branchl r12, FN_EXITransferBuffer +# Default to no frame advance +li r3, 0 +stb r3, ODB_IS_FRAME_ADVANCE(REG_ODB_ADDRESS) + +# logf LOG_LEVEL_INFO, "[TSI] [%d] Received results from Dolphin. Result: %d, Latest Frames: %d | %d | %d", "mr r5, REG_FRAME_INDEX", "lbz r6, RXB_RESULT(REG_RXB_ADDRESS)", "lwz r7, RXB_OPNT_FRAME_NUMS(REG_RXB_ADDRESS)", "lwz r8, RXB_OPNT_FRAME_NUMS+4(REG_RXB_ADDRESS)", "lwz r9, RXB_OPNT_FRAME_NUMS+8(REG_RXB_ADDRESS)" lbz r3, RXB_RESULT(REG_RXB_ADDRESS) cmpwi r3, RESP_SKIP beq SKIP_INPUT cmpwi r3, RESP_DISCONNECTED beq HANDLE_DISCONNECT +cmpwi r3, RESP_ADVANCE +beq HANDLE_ADVANCE b RESP_RES_CONTINUE HANDLE_DISCONNECT: @@ -188,16 +266,27 @@ stb r3, ODB_IS_DISCONNECTED(REG_ODB_ADDRESS) b RESP_RES_CONTINUE SKIP_INPUT: +# Don't stall the game if the game has already been confirmed to be over. I'm not sure why but +# sometimes the game end can stall and hopefully this will fix it. Logs look something like: +# Halting for one frame due to rollback limit (frame: 968 | latest: 0 | finalized: 967)... +lbz r3, ODB_IS_GAME_OVER(REG_ODB_ADDRESS) +cmpwi r3, 1 +beq RESP_RES_CONTINUE + # If we get here that means we are skipping this input. Skipping an input # will cause the global frame timer to not increment, allowing for the numbers # to sync up between players restore branch r12, 0x80376cec # branch to restore of parent function to skip handling input +HANDLE_ADVANCE: +li r3, 1 +stb r3, ODB_IS_FRAME_ADVANCE(REG_ODB_ADDRESS) + RESP_RES_CONTINUE: ################################################################################ -# Section 5: Overwrite this frame's pad data with data from x frames ago +# Section 6: Overwrite this frame's pad data with data from x frames ago ################################################################################ # get delayed pad data offset from @@ -211,13 +300,13 @@ mulli r3, r3, PAD_REPORT_SIZE addi r3, r3, P1_PAD_OFFSET # offset from sp where pad report we want is # copy data -add r3, sp, r3 # destination +add r3, REG_PARENT_STACK_FRAME, r3 # destination add r4, REG_ODB_ADDRESS, r4 # source li r5, PAD_REPORT_SIZE branchl r12, memcpy ################################################################################ -# Section 6: Copy local inputs into buffer for use if a rollback happens +# Section 7: Copy local inputs into buffer for use if a rollback happens ################################################################################ # get write location for inputs @@ -234,20 +323,20 @@ addi r4, r4, P1_PAD_OFFSET # offset from sp where pad report we want is # TEMP: Print inputs for debugging li r10, 3 mr r11, REG_FRAME_INDEX -add r12, sp, r4 +add r12, REG_PARENT_STACK_FRAME, r4 bl FN_PrintInputs .endif # copy data add r3, REG_ODB_ADDRESS, r3 # destination -add r4, sp, r4 # source +add r4, REG_PARENT_STACK_FRAME, r4 # source li r5, PAD_REPORT_SIZE branchl r12, memcpy # increment index lbz r3, ODB_ROLLBACK_LOCAL_INPUTS_IDX(REG_ODB_ADDRESS) addi r3, r3, 1 -cmpwi r3, ROLLBACK_MAX_FRAME_COUNT +cmpwi r3, LOCAL_INPUTS_COUNT blt SKIP_LOCAL_INPUT_BUFFER_INDEX_WRAP li r3, 0 @@ -256,7 +345,7 @@ SKIP_LOCAL_INPUT_BUFFER_INDEX_WRAP: stb r3, ODB_ROLLBACK_LOCAL_INPUTS_IDX(REG_ODB_ADDRESS) ################################################################################ -# Section 7: Add this frame's pad data to delay buffer +# Section 8: Add this frame's pad data to delay buffer ################################################################################ # prepare offset of current buffer data location @@ -292,21 +381,31 @@ SKIP_DELAY_BUFFER_INDEX_WRAP: stb r3, ODB_DELAY_BUFFER_INDEX(REG_ODB_ADDRESS) ################################################################################ -# Section 8: Check if we have prepared for rollback and inputs have been received +# Section 9: Check if we have prepared for rollback and inputs have been received ################################################################################ -# If ODB_SAVESTATE_IS_ACTIVE is 0, we either don't have a savestate created +.set REG_ROLLBACK_REQUIRED, REG_VARIOUS_3 +.set REG_RXB_OFFSET, REG_VARIOUS_1 + +# Keep track if rollback is required. We still need to iterate through all the players +# and frames and determine the earliest frame so we can update the SAVESTATE_FRAME before +# triggering a rollback, otherwise we'd always rollback to the oldest frame +# If a rollback is already active, this was an advance frame. In that case, always force the +# rollback again to update the end frame. +lbz REG_ROLLBACK_REQUIRED, ODB_ROLLBACK_IS_ACTIVE(REG_ODB_ADDRESS) + +# If ODB_SAVESTATE_IS_PREDICTING is 0, we either don't have a savestate created # or we're in a rollback, so set the per-player savestate flags to 0 and skip # to section 9. If we're missing inputs for the current frame, they'll get reset # correctly there. -lbz r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) +lbz r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) cmpwi r3, 0 bne COMPARE_PREDICTED_INPUTS li r3, 0 -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE+0x1(REG_ODB_ADDRESS) -stb r3, ODB_PLAYER_SAVESTATE_IS_ACTIVE+0x2(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING+0x1(REG_ODB_ADDRESS) +stb r3, ODB_PLAYER_SAVESTATE_IS_PREDICTING+0x2(REG_ODB_ADDRESS) b LOAD_OPPONENT_INPUTS @@ -318,8 +417,9 @@ COMPARE_PREDICTED_INPUTS: li REG_COUNT, 0 CHECK_WHETHER_TO_ROLL_BACK_LOOP: -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING lbzx r3, r6, REG_ODB_ADDRESS +# logf LOG_LEVEL_INFO, "[TSI] [%d] Opp #%d prediction loop start. isPredicting: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mr r7, 3" cmpwi r3, 1 bne CONTINUE_ROLLBACK_CHECK_LOOP @@ -337,38 +437,54 @@ lwzx r3, r6, REG_RXB_ADDRESS mulli r6, REG_COUNT, 4 addi r6, r6, ODB_PLAYER_SAVESTATE_FRAME lwzx r4, r6, REG_ODB_ADDRESS -sub. r3, r3, r4 # Load offset for RXB, subtract opp frame from savestate frame +# logf LOG_LEVEL_INFO, "[TSI] [%d] Opp #%d comparing savestate frame to latest. savestate: %d, latest: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mr r7, 4", "mr r8, 3" +sub. REG_RXB_OFFSET, r3, r4 # Load offset for RXB, subtract opp frame from savestate frame blt CONTINUE_ROLLBACK_CHECK_LOOP +# logf LOG_LEVEL_INFO, "[TSI] [%d] Checking predictions for opp #%d. SavestateFrame: %d, Finalized: %d, Latest: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mr r7, 4", "lwz r8, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS)", "mr r9, 3" +lwz r6, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) +cmpw r4, r6 # If PLAYER_SAVESTATE_FRAME is greater than the finalized frame, check if inputs matched +bgt HAVE_PLAYER_INPUTS + +cmpw r3, r4 # Compare latest frame to current savestate frame (current index) + +# Advance the savestate frame without checking inputs if the frame we are considering has already +# been finalized +bgt INPUTS_MATCH + +# If the latest frame is equal to current savestate frame but we have +# already finalized that frame (only way we get here), just move on to the next player +b CONTINUE_ROLLBACK_CHECK_LOOP + HAVE_PLAYER_INPUTS: # If we get here, we have a savestate ready and we have received the inputs # required to handle the savestate, so let's check the inputs to see if we need # to roll back -mr REG_VARIOUS_1, r3 -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player -lbzx r3, r6, REG_ODB_ADDRESS -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player -lbzx r4, r6, REG_ODB_ADDRESS -#logf LOG_LEVEL_WARN, "Player %d[%d] r/w indexes when reading next input: %d/%d", "mr r5, 20", "mr r6, 22", "mr r7, 3", "mr r8, 4" -mr r3, REG_VARIOUS_1 - # Compute offset of true inputs for this player on this frame -mulli r3, r3, PAD_REPORT_SIZE +mulli r3, REG_RXB_OFFSET, PAD_REPORT_SIZE addi r3, r3, RXB_OPNT_INPUTS -mulli r6, REG_COUNT, PLAYER_MAX_INPUT_SIZE +mulli r6, REG_COUNT, RXB_INPUTS_COUNT * PAD_REPORT_SIZE add r3, r3, r6 # Get inputs that were predicted for this frame addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player lbzx r4, r6, REG_ODB_ADDRESS # load this player's read idx # r4 = read idx = 0 +# logf LOG_LEVEL_INFO, "[TSI] [%d] Opp #%d reading predicted inputs from idx: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mr r7, 4" mulli r4, r4, PAD_REPORT_SIZE # compute offset within predicted input buffer addi r4, r4, ODB_ROLLBACK_PREDICTED_INPUTS # Offset of inputs -mulli r5, REG_COUNT, PLAYER_MAX_INPUT_SIZE +mulli r5, REG_COUNT, PREDICTED_INPUTS_COUNT * PAD_REPORT_SIZE add r4, r4, r5 -add r6, REG_RXB_ADDRESS, r3 -add r7, REG_ODB_ADDRESS, r4 +add r6, REG_RXB_ADDRESS, r3 # contains actual input for frame +add r7, REG_ODB_ADDRESS, r4 # contains predicted input + +# logf LOG_LEVEL_INFO, "[TSI] [%d] Opp #%d comparing inputs. Predicted: %08X %08X, Actual: %08X %08X", "lwz r8, 4(7)", "lwz r7, 0(7)", "lwz r10, 4(6)", "lwz r9, 0(6)", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT" + +# mulli r3, REG_COUNT, 4 +# addi r3, r3, ODB_PLAYER_SAVESTATE_FRAME +# lwzx r3, r3, REG_ODB_ADDRESS +# logf LOG_LEVEL_NOTICE, "Comparing inputs to predicted for frame: %d", "mr r5, 3" # Check to see if inputs have changed. Start with buttons # ---SYXBA @@ -377,7 +493,7 @@ lbz r4, 0(r7) rlwinm r3, r3, 0, 0x1F rlwinm r4, r4, 0, 0x1F cmpw r3, r4 -bne TRIGGER_ROLLBACK +bne INDICATE_ROLLBACK_REQUIRED # -LRZUDRL lbz r3, 0x1(r6) @@ -385,7 +501,7 @@ lbz r4, 0x1(r7) rlwinm r3, r3, 0, 0x7F rlwinm r4, r4, 0, 0x7F cmpw r3, r4 -bne TRIGGER_ROLLBACK +bne INDICATE_ROLLBACK_REQUIRED # TODO: Sounds like new UCF still uses raw values but if it ever switches # TODO: to processed, consider removing this @@ -394,7 +510,7 @@ bne TRIGGER_ROLLBACK lwz r3, 0x2(r6) lwz r4, 0x2(r7) cmpw r3, r4 -bne TRIGGER_ROLLBACK +bne INDICATE_ROLLBACK_REQUIRED # And finally, the triggers. Use deadzone at 42. 43+ are valid li r5, 5 # Valid indices are 6-7 @@ -410,7 +526,7 @@ cmpwi r4, 42 ble TRIGGER_LOOP_START # If both triggers are 42 or under, they are in deadzone CONTINUE_TRIGGER_CHECK: cmpw r3, r4 -bne TRIGGER_ROLLBACK +bne INDICATE_ROLLBACK_REQUIRED b TRIGGER_LOOP_START INPUTS_MATCH: @@ -422,37 +538,43 @@ lwzx r3, r6, REG_ODB_ADDRESS # get our player-specific savestate frame addi r3, r3, 1 stwx r3, r6, REG_ODB_ADDRESS +# Here we have found one frame of inputs that match, we are going to advance one frame and check +# to see if the next frame's inputs match + # increment read index addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player lbzx r3, r6, REG_ODB_ADDRESS # load this player's read idx addi r3, r3, 1 -cmpwi r3, ROLLBACK_MAX_FRAME_COUNT +cmpwi r3, PREDICTED_INPUTS_COUNT blt SKIP_PREDICTED_INPUTS_READ_IDX_ADJUST -subi r3, r3, ROLLBACK_MAX_FRAME_COUNT +subi r3, r3, PREDICTED_INPUTS_COUNT SKIP_PREDICTED_INPUTS_READ_IDX_ADJUST: stbx r3, r6, REG_ODB_ADDRESS -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player -lbzx r3, r6, REG_ODB_ADDRESS -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player -lbzx r4, r6, REG_ODB_ADDRESS -#logf LOG_LEVEL_WARN, "Player %d r/w indexes after reading: %d/%d", "mr r5, 20", "mr r6, 3", "mr r7, 4" - # Check if we have caught up to the prediction addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player lbzx r3, r6, REG_ODB_ADDRESS addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player lbzx r4, r6, REG_ODB_ADDRESS +#logf LOG_LEVEL_WARN, "Player %d r/w indexes after reading: %d/%d", "mr r5, 20", "mr r6, 3", "mr r7, 4" cmpw r4, r3 bne CHECK_WHETHER_TO_ROLL_BACK_LOOP # Not caught up, try loop again with next frame for this player b CONTINUE_ROLLBACK_CHECK_LOOP +INDICATE_ROLLBACK_REQUIRED: +# This gets called when we determine we will need to rollback for one of the players +# we still need to go through the other players though to determine the earliest frame +# we are allowed to rollback to +# logf LOG_LEVEL_INFO, "[TSI] [%d] Opp #%d marking savestate required. Frame: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mulli r7, REG_COUNT, 4", "addi r7, 7, ODB_PLAYER_SAVESTATE_FRAME", "lwzx r7, 7, REG_ODB_ADDRESS" +li REG_ROLLBACK_REQUIRED, 1 +b CONTINUE_ROLLBACK_CHECK_LOOP # Move on to next player + TRIGGER_ROLLBACK: -mulli r6, REG_COUNT, 4 -addi r6, r6, ODB_PLAYER_SAVESTATE_FRAME -lwzx r3, r6, REG_ODB_ADDRESS # get our player-specific savestate frame -#logf LOG_LEVEL_WARN, "Triggering rollback from player %d input on past frame %d", "mr r5, 20", "mr r6, 3" +# mulli r6, REG_COUNT, 4 +# addi r6, r6, ODB_PLAYER_SAVESTATE_FRAME +# lwzx r3, r6, REG_ODB_ADDRESS # get our player-specific savestate frame +# logf LOG_LEVEL_WARN, "Triggering rollback from player %d input on past frame %d", "mr r5, 20", "mr r6, 3" # Set the is rollback active flag to indicate to the engine to continue # processing inputs until we have completed the rollback process @@ -463,6 +585,16 @@ stb r3, ODB_ROLLBACK_SHOULD_LOAD_STATE(REG_ODB_ADDRESS) # Store the end frame index to remember when to terminate rollback logic stw REG_FRAME_INDEX, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS) +# logf LOG_LEVEL_WARN, "[TSI] [%d] Triggering rollback. Start: %d, End: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS)", "lwz r7, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS)" + +# We have successfully sent inputs to our opponent and preped them to use for rollback +# We still want to increment the frame just in case another input is sent before we have +# a chance to load the savestate. This should be fine because it will get overwritten when +# the state actually gets loaded. Getting a frame advance at the same time as a rollback +# requires this such that we can still ffw to the advanced frame. +addi REG_FRAME_INDEX, REG_FRAME_INDEX, 1 +stw REG_FRAME_INDEX, ODB_FRAME(REG_ODB_ADDRESS) + # We are going to exit the parent function here. We have initiated a rollback # which will cause the engine to loop without rendering frames, our rollback # logic will kick in properly the next time this function is called @@ -474,29 +606,27 @@ addi REG_COUNT, REG_COUNT, 1 cmpwi REG_COUNT, 3 blt CHECK_WHETHER_TO_ROLL_BACK_LOOP -# We've checked past predictions against any new inputs and nothing triggered a rollback; +# We've checked past predictions against any new inputs and know whether a rollback is needed # now determine how far (if at all) to move the savestate frame forward. It should end up as -# the lowest value among players we're tracking a savestate frame for. +# the lowest value among players we're tracking a savestate frame for. This will allow us to +# then roll back (if we need to) to the earliest frame that requires it -.set REG_SAVESTATE_FRAME_SET, REG_VARIOUS_2 -li REG_SAVESTATE_FRAME_SET, 0 +.set REG_SAVESTATE_FRAME, REG_VARIOUS_2 +.set REGV_VALUES_SET, 11 +li REGV_VALUES_SET, 0 li REG_COUNT, 0 -lwz r3, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) # r3 will hold the min savestate frame we see -mr REG_VARIOUS_1, r3 -#logf LOG_LEVEL_WARN, "Attempting to advance savestate frame past %d", "mr r5, 3" -mr r3, REG_VARIOUS_1 +# Minimum savestate should always be equal to the finalized frame, normally it should be +1 but +# in the case where we have not received any new inputs, we don't want to update the finalized +# frame which could cause inputs to get discarded +lwz REG_SAVESTATE_FRAME, ODB_STABLE_FINALIZED_FRAME(REG_ODB_ADDRESS) # will hold the min savestate frame we see +# logf LOG_LEVEL_WARN, "[TSI] [%d] Attempting to advance savestate frame past %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_SAVESTATE_FRAME" COMPUTE_SAVESTATE_FRAME_LOOP: -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE -lbzx r4, r6, REG_ODB_ADDRESS -mr REG_VARIOUS_1, r3 -#logf LOG_LEVEL_WARN, "Player %d savestate flag: %d", "mr r5, 20", "mr r6, 4" -mr r3, REG_VARIOUS_1 - # If this player doesn't have missing inputs, ignore their savestate frame -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING lbzx r4, r6, REG_ODB_ADDRESS +#logf LOG_LEVEL_WARN, "Player %d savestate flag: %d", "mr r5, 20", "mr r6, 4" cmpwi r4, 1 bne CONTINUE_SAVESTATE_FRAME_LOOP @@ -504,20 +634,20 @@ mulli r6, REG_COUNT, 4 addi r6, r6, ODB_PLAYER_SAVESTATE_FRAME lwzx r4, r6, REG_ODB_ADDRESS +# logf LOG_LEVEL_INFO, "[TSI] [%d] Checking savestate frame for opp #%d. Value: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_COUNT", "mr r7, 4" # If we are the first player to bump the savestate frame, do it to set an initial value. -cmpwi REG_SAVESTATE_FRAME_SET, 0 -beq SKIP_SAVESTATE_FRAME_CHECK - +cmpwi REGV_VALUES_SET, 0 +beq UPDATE_SAVESTATE_FRAME_SET # Otherwise only replace it with our frame if we're the new lowest. -cmpw r4, r3 # r4 = this player's savestate frame, r3 = lowest frame seen so far -bge CONTINUE_SAVESTATE_FRAME_LOOP +cmpw r4, REG_SAVESTATE_FRAME # r4 = this player's savestate frame, REG_SAVESTATE_FRAME = lowest frame seen so far +bge UPDATE_SAVESTATE_FRAME_END +UPDATE_SAVESTATE_FRAME_SET: +mr REG_SAVESTATE_FRAME, r4 +UPDATE_SAVESTATE_FRAME_END: -SKIP_SAVESTATE_FRAME_CHECK: -mr r3, r4 -mr REG_VARIOUS_1, r3 #logf LOG_LEVEL_WARN, "Player %d set savestate frame %d", "mr r5, 20", "mr r6, 4" -mr r3, REG_VARIOUS_1 -li REG_SAVESTATE_FRAME_SET, 1 + +li REGV_VALUES_SET, 1 CONTINUE_SAVESTATE_FRAME_LOOP: addi REG_COUNT, REG_COUNT, 1 @@ -525,36 +655,48 @@ cmpwi REG_COUNT, 3 blt COMPUTE_SAVESTATE_FRAME_LOOP # Set the savestate frame to the minimum value among players with missing inputs -stw r3, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) -#logf LOG_LEVEL_WARN, "Set savestate frame to %d, game frame: %d", "mr r5, 3", "loadGlobalFrame r6" +stw REG_SAVESTATE_FRAME, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) + +# Update finalized frame to the earliest frame where our predictions matched +# We don't want finalized frame to be greater than the latest frame though, so make sure +# to not allow that +stw REG_SAVESTATE_FRAME, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS) +lwz r6, RXB_SMALLEST_LATEST_FRAME(REG_RXB_ADDRESS) +cmpw REG_SAVESTATE_FRAME, r6 +ble SKIP_FINALIZED_OVERWRITE +stw r6, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS) +SKIP_FINALIZED_OVERWRITE: + +# logf LOG_LEVEL_WARN, "[TSI] [%d] Setting frames after checking predictions: savestate: %d, volatile finalized: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS)", "lwz r7, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS)" +# logf LOG_LEVEL_NOTICE, "New frame finalized: %d (Prediction)", "lwz r5, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS)" + +# Check if we had determined that a rollback was needed. If so, trigger the rollback now +# that we've updated the frame we need to roll back to. +cmpwi REG_ROLLBACK_REQUIRED, 0 +bne TRIGGER_ROLLBACK # Check if all players inputs have caught up to the prediction so we can set savestate = 0 li REG_COUNT, 0 CHECK_RESET_SAVESTATE_LOOP: # Don't bother checking read/write index match for players without an active savestate. -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING lbzx r4, r6, REG_ODB_ADDRESS cmpwi r4, 1 bne CONTINUE_CHECK_RESET_SAVESTATE_LOOP -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player -lbzx r3, r6, REG_ODB_ADDRESS -addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player -lbzx r4, r6, REG_ODB_ADDRESS -#logf LOG_LEVEL_WARN, "Player %d r/w indexes during reset: %d/%d", "mr r5, 20", "mr r6, 3", "mr r7, 4" - # Check if this player's inputs have caught up to the prediction addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS # compute offset of read idx for this player lbzx r3, r6, REG_ODB_ADDRESS addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player lbzx r4, r6, REG_ODB_ADDRESS +#logf LOG_LEVEL_WARN, "Player %d r/w indexes during reset: %d/%d", "mr r5, 20", "mr r6, 3", "mr r7, 4" # if we're caught up to the prediction, set this player's savestate flag back to 0 cmpw r4, r3 bne CONTINUE_CHECK_RESET_SAVESTATE_LOOP li r3, 0 -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING stbx r3, r6, REG_ODB_ADDRESS CONTINUE_CHECK_RESET_SAVESTATE_LOOP: @@ -567,7 +709,7 @@ blt CHECK_RESET_SAVESTATE_LOOP li REG_COUNT, 0 CHECK_GLOBAL_SAVESTATE_LOOP: # Don't bother checking read/write index match for players without an active savestate. -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING lbzx r4, r6, REG_ODB_ADDRESS cmpwi r4, 1 beq LOAD_OPPONENT_INPUTS @@ -579,20 +721,25 @@ blt CHECK_GLOBAL_SAVESTATE_LOOP # If we made it here, we have caught up to the prediction, clear the savestate flags for everyone li r3, 0 -stb r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) +stb r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) #logf LOG_LEVEL_WARN, "Reset savestate flags to 0" ################################################################################ -# Section 9: Try to read opponent's input for this frame +# Section 10: Try to read opponent's input for this frame ################################################################################ .set REG_REMOTE_PLAYER_IDX, REG_VARIOUS_2 +.set REG_HAS_INPUTS_FROM_ALL, REG_VARIOUS_3 LOAD_OPPONENT_INPUTS: + +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] Reading Inputs...", "mr r5, REG_FRAME_INDEX" + # loop over each remote player li REG_COUNT, 0 li REG_REMOTE_PLAYER_IDX, 0 # port index of the current remote player +li REG_HAS_INPUTS_FROM_ALL, 1 # will get reset if we are predicting for any players LOOP_LOAD_OPPONENT_INPUTS: # skip over the local player's port for inputs @@ -611,12 +758,16 @@ sub r3, r3, REG_FRAME_INDEX cmpwi r3, 0 bge CALC_OPNT_PAD_OFFSET +PREDICT_INPUTS_OPP: # We are predicting inputs, back up the inputs for later comparison +.if DEBUG_INPUTS==1 +logf LOG_LEVEL_NOTICE, "[TSI] [%d] (Opp) P%d Needs Prediction" +.endif # Don't save any states at the start of the game, it's frozen anyway # and there might still be stuff loading lbz r3, ODB_DELAY_FRAMES(REG_ODB_ADDRESS) -li r4, UNFREEZE_INPUTS_FRAME +li r4, START_SYNC_FRAME sub r3, r4, r3 cmpw REG_FRAME_INDEX, r3 # Frame 84 +/- 1 (not sure) is first unfrozen frame blt LOAD_STALE_INPUTS @@ -626,6 +777,14 @@ lbz r3, ODB_IS_GAME_OVER(REG_ODB_ADDRESS) cmpwi r3, 1 beq LOAD_STALE_INPUTS +# Indicate we had to predict some inputs for this frame +li REG_HAS_INPUTS_FROM_ALL, 0 + +# mulli r6, REG_COUNT, 4 +# addi r6, r6, RXB_OPNT_FRAME_NUMS +# lwzx r3, r6, REG_RXB_ADDRESS +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] (Opp) P%d Predicting. Latest: %d", "mr r5, REG_FRAME_INDEX", "mr r6, REG_REMOTE_PLAYER_IDX", "mr r7, 3" + .set REG_PREDICTED_WRITE_IDX, REG_VARIOUS_1 # get offset from sp of online player's pad data @@ -633,12 +792,12 @@ addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of lbzx REG_PREDICTED_WRITE_IDX, r6, REG_ODB_ADDRESS mulli r3, REG_PREDICTED_WRITE_IDX, PAD_REPORT_SIZE addi r3, r3, ODB_ROLLBACK_PREDICTED_INPUTS # offset from REG_ODB_ADDRESS where to write -mulli r5, REG_COUNT, PLAYER_MAX_INPUT_SIZE # Add offset based on which player this is +mulli r5, REG_COUNT, PREDICTED_INPUTS_COUNT * PAD_REPORT_SIZE # Add offset based on which player this is add r3, r3, r5 # copy predicted pad data to predicted input buffer for later comparison # in order to decide whether to roll back -mulli r6, REG_COUNT, PLAYER_MAX_INPUT_SIZE +mulli r6, REG_COUNT, RXB_INPUTS_COUNT * PAD_REPORT_SIZE addi r6, r6, RXB_OPNT_INPUTS add r3, REG_ODB_ADDRESS, r3 # destination add r4, REG_RXB_ADDRESS, r6 # source @@ -647,9 +806,9 @@ branchl r12, memcpy # increment write index addi r3, REG_PREDICTED_WRITE_IDX, 1 -cmpwi r3, ROLLBACK_MAX_FRAME_COUNT +cmpwi r3, PREDICTED_INPUTS_COUNT blt SKIP_PREDICTED_INPUTS_WRITE_IDX_ADJUST -subi r3, r3, ROLLBACK_MAX_FRAME_COUNT +subi r3, r3, PREDICTED_INPUTS_COUNT SKIP_PREDICTED_INPUTS_WRITE_IDX_ADJUST: addi r6, REG_COUNT, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS # compute offset of write idx for this player @@ -663,7 +822,7 @@ lbzx r4, r6, REG_ODB_ADDRESS # in the case where we don't have this opponent's inputs but already have a # savestate location for them, just keep the old savestate location -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE # compute offset of savestate flag for this player +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING # compute offset of savestate flag for this player lbzx r3, r6, REG_ODB_ADDRESS cmpwi r3, 1 beq LOAD_STALE_INPUTS @@ -676,7 +835,7 @@ stwx REG_FRAME_INDEX, r6, REG_ODB_ADDRESS # Indicate we have prepared for a rollback because of this player's missing input li r3, 1 -addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_ACTIVE +addi r6, REG_COUNT, ODB_PLAYER_SAVESTATE_IS_PREDICTING stbx r3, r6, REG_ODB_ADDRESS #logf LOG_LEVEL_WARN, "Setting savestate flag to 1 for player %d", "mr r5, 20" @@ -686,17 +845,17 @@ stbx REG_PREDICTED_WRITE_IDX, r6, REG_ODB_ADDRESS # In the case where we don't have this player's inputs but already have a # savestate because of another player's missing inputs, don't touch the global savestate frame counter -lbz r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) +lbz r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) cmpwi r3, 1 beq LOAD_STALE_INPUTS # Store the rollback frame in the global savestate frame counter stw REG_FRAME_INDEX, ODB_SAVESTATE_FRAME(REG_ODB_ADDRESS) -#logf LOG_LEVEL_WARN, "Setting global savestate frame to %d", "mr r5, 26" +# logf LOG_LEVEL_WARN, "[TSI] [%d] Predicting on this frame and setting the savestate frame", "mr r5, REG_FRAME_INDEX" # Indicate that we have prepared for a rollback li r3, 1 -stb r3, ODB_SAVESTATE_IS_ACTIVE(REG_ODB_ADDRESS) +stb r3, ODB_SAVESTATE_IS_PREDICTING(REG_ODB_ADDRESS) #logf LOG_LEVEL_WARN, "Setting global savestate flag to 1" LOAD_STALE_INPUTS: @@ -707,7 +866,7 @@ CALC_OPNT_PAD_OFFSET: # Slippi should have told us to wait mulli r3, r3, PAD_REPORT_SIZE # offset for index of input frame to look at addi r5, r3, RXB_OPNT_INPUTS # offset from start of RXB -mulli r6, REG_COUNT, PLAYER_MAX_INPUT_SIZE # offset for index of remote player +mulli r6, REG_COUNT, RXB_INPUTS_COUNT * PAD_REPORT_SIZE # offset for index of remote player add r5, r5, r6 # get offset from sp of online player's pad data @@ -715,9 +874,17 @@ mulli r3, REG_REMOTE_PLAYER_IDX, PAD_REPORT_SIZE addi r3, r3, P1_PAD_OFFSET # offset from sp where opponent pad report is # copy opponent pad data to stack -add r3, sp, r3 # destination +add r3, REG_PARENT_STACK_FRAME, r3 # destination add r4, REG_RXB_ADDRESS, r5 # source li r5, PAD_REPORT_SIZE + +.if DEBUG_INPUTS==1 +cmpwi REG_COUNT, 1 +bge SKIP_OPP_LOG +logf LOG_LEVEL_NOTICE, "[TSI] [%d] (Opp) P%d %08X %08X %08X", "mr r5, REG_FRAME_INDEX", "mr r6, REG_REMOTE_PLAYER_IDX", "lwz r7, 0(4)", "lwz r8, 4(4)", "lwz r9, 8(4)" +SKIP_OPP_LOG: +.endif + branchl r12, memcpy addi REG_COUNT, REG_COUNT, 1 @@ -725,6 +892,13 @@ addi REG_REMOTE_PLAYER_IDX, REG_REMOTE_PLAYER_IDX, 1 cmpwi REG_COUNT, 3 blt LOOP_LOAD_OPPONENT_INPUTS +# Overwrite finalized frame if we were not predicting for all the players +cmpwi REG_HAS_INPUTS_FROM_ALL, 0 +beq SKIP_FINALIZED_FRAME_ADJUST +stw REG_FRAME_INDEX, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS) +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] New volatile finalized: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_FINALIZED_FRAME(REG_ODB_ADDRESS)" +SKIP_FINALIZED_FRAME_ADJUST: + b INCREMENT_AND_EXIT ################################################################################ @@ -732,6 +906,8 @@ b INCREMENT_AND_EXIT ################################################################################ ROLLBACK_HANDLER: +# logf LOG_LEVEL_NOTICE, "[TSI] [%d] Input Requested (rollback). End frame: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS)" + # If the frame we want is past the rollback end, just do nothing. This might # happen in the case where we get an interrupt during a rollback lwz r3, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS) @@ -743,6 +919,7 @@ restore branch r12, 0x80376cec # branch to restore of parent function to skip handling input COPY_LOCAL_INPUTS: +# logf LOG_LEVEL_INFO, "[TSI] [%d] Prior to local input copy. END_FRAME: %d, LOCAL_INPUTS_IDX: %d", "mr r5, REG_FRAME_INDEX", "lwz r6, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS)", "lbz r7, ODB_ROLLBACK_LOCAL_INPUTS_IDX(REG_ODB_ADDRESS)" # get local input from history lwz r3, ODB_ROLLBACK_END_FRAME(REG_ODB_ADDRESS) sub r3, r3, REG_FRAME_INDEX @@ -750,8 +927,9 @@ addi r3, r3, 1 lbz r4, ODB_ROLLBACK_LOCAL_INPUTS_IDX(REG_ODB_ADDRESS) sub. r3, r4, r3 bge SKIP_LOCAL_INPUT_IDX_NEG -addi r3, r3, ROLLBACK_MAX_FRAME_COUNT +addi r3, r3, LOCAL_INPUTS_COUNT SKIP_LOCAL_INPUT_IDX_NEG: +# logf LOG_LEVEL_INFO, "[TSI] [%d] Copying local inputs for rollback. Idx: %d, Offset: %d", "mr r5, REG_FRAME_INDEX", "mr r6, 3", "mulli r7, 3, PAD_REPORT_SIZE" mulli r3, r3, PAD_REPORT_SIZE addi r4, r3, ODB_ROLLBACK_LOCAL_INPUTS @@ -769,7 +947,7 @@ bl FN_PrintInputs .endif # copy data -add r3, sp, r3 # destination +add r3, REG_PARENT_STACK_FRAME, r3 # destination add r4, REG_ODB_ADDRESS, r4 # source li r5, PAD_REPORT_SIZE branchl r12, memcpy @@ -784,61 +962,8 @@ b LOAD_OPPONENT_INPUTS ################################################################################ .if DEBUG_INPUTS==1 FN_PrintInputs: -backupall - -mr r31, r11 # Frame -mr r30, r12 # Inputs -mr r28, r10 # Log Num -# r27 is ODB_ADDRESS and should not be used - -bl PrintInputs_STRING -mflr r29 # Data - -lbz r3, ODB_DELAY_FRAMES(REG_ODB_ADDRESS) -addi r3, r3, 1 -cmpw r31, r3 -bgt FN_PrintInputs_SKIP_ALLOC - -# This will actually alloc a few times... but that's fine -li r3, 64 -branchl r12, HSD_MemAlloc -stw r3, 0(r29) - -# Store command byte for logging -li r4, 0xD0 -stb r4, 0(r3) - -# Indicate we don't need to print time -li r4, 0 -stb r4, 1(r3) - -FN_PrintInputs_SKIP_ALLOC: - -# Format input string -lwz r3, 0(r29) -addi r3, r3, 2 # skip to string -addi r4, r29, 4 # Input string -mr r5, r31 -mr r6, r28 -lwz r7, 0(r30) -lwz r8, 4(r30) -lwz r9, 8(r30) -branchl r12, 0x80323cf4 # sprintf - -# Transfer string buffer -lwz r3, 0(r29) # Use the receive buffer to send the command -li r4, 64 -li r5, CONST_ExiWrite -branchl r12, FN_EXITransferBuffer - -restoreall +logf LOG_LEVEL_NOTICE, "[TSI] [%d] (%d) %08X %08X %08X", "mr r5, 11", "mr r6, 10", "lwz r7, 0(12)", "lwz r8, 4(12)", "lwz r9, 8(12)" blr - -PrintInputs_STRING: -blrl -.long 0 # address of buffer -.string "[%d] (%d) %08X %08X %08X" # sprintf input string -.align 2 .endif ################################################################################ diff --git a/Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm b/Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm new file mode 100644 index 00000000..a34fb63c --- /dev/null +++ b/Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm @@ -0,0 +1,27 @@ +################################################################################ +# Address: 8008653c +# Tags: [affects-gameplay] +################################################################################ +.include "Common/Common.s" + +# This was added to prevent a bug where if a fighter is camera KO'd on the same frames that +# whispy decides what direction to blow, whispy would check the fighter bones at 80086538 +# to determine if the character is to the left or right of center. During a fast-forward/rollback, +# however, the bone positions can be wrong. This is likely due to our FreezeDeadUpFallPhysics logic? +# Could be worth taking a look at that some time to see if we can make it behave identically during +# a fast-forward. I'm not super confident though because I think it's dependent on camera position +# which I don't think updates correctly all the time during a FFW? + +lwz r12, 0x2C(r29) +lwz r3, 0x10(r12) +cmpwi r3, 0xB +bgt EXIT + +# If character is in a Dead animation (such as camera KO), we load zero into r0 in order +# to effectively say that the character is on neither side (left or right), skipping the +# character in the logic calculation. +li r0, 0 +branch r12, 0x8008655c + +EXIT: +lfs f1, 0x0020(sp) \ No newline at end of file diff --git a/Online/Debugging/ForceDesyncAfterX.s b/Online/Debugging/ForceDesyncAfterX.s new file mode 100644 index 00000000..82d47c12 --- /dev/null +++ b/Online/Debugging/ForceDesyncAfterX.s @@ -0,0 +1,26 @@ +################################################################################ +# Address: 0x8006d378 # Right after damage to be applied is loaded into f31 +################################################################################ + +# This will force desyncs on hit after 15 seconds since the game started. Keeping this file +# as a .s prevents it from being included into the codeset + +.include "Common/Common.s" +.include "Online/Online.s" + +loadGlobalFrame r3 # Load current frame +cmpwi r3, 15 * 60 # Check for 15 seconds in +blt EXIT + +lwz r11, OFST_R13_ODB_ADDR(r13) # data buffer address +lbz r3, ODB_LOCAL_PLAYER_INDEX(r11) +cmpwi r3, 0 +bne EXIT # Only player 1 + +# Player 1 will see ALL damage applied as doubled +fadds f31, f31, f31 + +EXIT: +# Replaced codeline +mr r3, r30 +fmr f1, f31 diff --git a/Online/Debugging/LogInputOnCopy.asm b/Online/Debugging/LogInputOnCopy.asm new file mode 100644 index 00000000..cf6449f4 --- /dev/null +++ b/Online/Debugging/LogInputOnCopy.asm @@ -0,0 +1,36 @@ +################################################################################ +# Address: 0x803775b0 # Here we are starting the copy +################################################################################ + +.include "Common/Common.s" +.include "Online/Online.s" + +.if DEBUG_INPUTS==1 +# Check if VS Mode +getMinorMajor r3 +cmpwi r3, SCENE_ONLINE_IN_GAME +bne EXIT + +# Only print players 1 and 2 +cmpwi r24, 2 +bge EXIT + +loadGlobalFrame r5 +mr r6, r24 +lwz r7, 0(r25) +lwz r8, 4(r25) +lwz r9, 8(r25) + +logf LOG_LEVEL_NOTICE, "[%d] P%d Using Input: %08X %08X %08X" + +lbz r3, 0x0041(r26) +extsb. r0, r3 +beq EXIT + +logf LOG_LEVEL_ERROR, "Input detected with non-zero status: %d", "extsb r5, 3" + +EXIT: +# Re-loads overwritten data, must run right before extsb. r0, r3 +lbz r3, 0x0041(r26) +.endif +extsb. r0, r3 # replaced codeline diff --git a/Online/Logging/LogInputOnCopy.asm b/Online/Logging/LogInputOnCopy.asm deleted file mode 100644 index 67ae3afb..00000000 --- a/Online/Logging/LogInputOnCopy.asm +++ /dev/null @@ -1,67 +0,0 @@ -################################################################################ -# Address: 0x803775b8 # Here we are starting the copy -################################################################################ - -.include "Common/Common.s" -.include "Online/Online.s" - -.if DEBUG_INPUTS==1 -b START_CODE - -BUFFER_AND_STRING: -blrl -.long 0 # address of buffer -.string "[%d] P%d %08X %08X %08X" # sprintf input string -.align 2 - -START_CODE: -# Check if VS Mode -getMinorMajor r3 -cmpwi r3, SCENE_ONLINE_IN_GAME -bne EXIT - -backup - -# Prepare ref -bl BUFFER_AND_STRING -mflr r31 # Data address - -loadGlobalFrame r3 -cmpwi r3, 1 -bgt SKIP_ALLOC - -# Allocate TX buf -li r3, 64 -branchl r12, HSD_MemAlloc -stw r3, 0(r31) # Store address of TX buf - -# Init TX buf -li r4, 0xD0 -stb r4, 0(r3) # Store command byte for logging -li r4, 0 -stb r4, 1(r3) # Indicate we don't need to print time - -SKIP_ALLOC: - -# Format input string -lwz r3, 0(r31) -addi r3, r3, 2 # skip to string -addi r4, r31, 4 # Input string -loadGlobalFrame r5 -mr r6, r24 -lwz r7, 0(r25) -lwz r8, 4(r25) -lwz r9, 8(r25) -branchl r12, 0x80323cf4 # sprintf - -# Transfer string buffer -lwz r3, 0(r31) # Use the receive buffer to send the command -li r4, 64 -li r5, CONST_ExiWrite -branchl r12, FN_EXITransferBuffer - -restore -.endif - -EXIT: -lhz r0, 0 (r25) diff --git a/Online/Menus/CSS/HandleInputsOnCSS.asm b/Online/Menus/CSS/HandleInputsOnCSS.asm index 397ab0e6..fc967a85 100644 --- a/Online/Menus/CSS/HandleInputsOnCSS.asm +++ b/Online/Menus/CSS/HandleInputsOnCSS.asm @@ -13,13 +13,6 @@ .set DISCONNECT_HOLD_DELAY, 0x30 # 3 seconds -# Controller immediate input values for CSS chat messages -.set PAD_LEFT, 0x01 -.set PAD_RIGHT, 0x02 -.set PAD_DOWN, 0x04 -.set PAD_UP, 0x08 -.set B_BUTTON, 0x200 - # Deal with replaced codeline beq+ START branch r12, 0x80263334 @@ -100,10 +93,6 @@ branchl r12, SFX_Menu_CommonSound SOUND_PLAY_END: - -# uncomment to debug the chat window -bl FN_CHECK_CHAT_INPUTS - ################################################################################ # Fork logic based on current connection state ################################################################################ @@ -124,9 +113,6 @@ b SKIP_START_MATCH ################################################################################ HANDLE_IDLE: -# uncomment to debug the chat window -# bl FN_CHECK_CHAT_INPUTS - # Prevent CSS Actions if chat window is opened lbz r3, CSSDT_CHAT_WINDOW_OPENED(REG_CSSDT_ADDR) cmpwi r3, 0 @@ -159,6 +145,8 @@ beq SKIP_START_MATCH # Check which mode we are playing. direct mode should launch text entry lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +beq HANDLE_IDLE_UNRANKED cmpwi r3, ONLINE_MODE_UNRANKED beq HANDLE_IDLE_UNRANKED cmpwi r3, ONLINE_MODE_DIRECT @@ -309,9 +297,6 @@ b SKIP_START_MATCH # Check to see if both players are ready and start match if they are CHECK_SHOULD_START_MATCH: -# Check if we should open chat window -#bl FN_CHECK_CHAT_INPUTS - lbz r3, MSRB_IS_LOCAL_PLAYER_READY(REG_MSRB_ADDR) lbz r4, MSRB_IS_REMOTE_PLAYER_READY(REG_MSRB_ADDR) and. r3, r3, r4 @@ -338,6 +323,13 @@ b SKIP_START_MATCH FN_TX_FIND_MATCH: backup +# When the player starts looking for a match is a good time to reset the game index +loadwz r3, 0x803dad40 # Load minor scene data array ptr +lwz r12, 0x88(r3) # Load game prep minor scene data +li r3, 0 +sth r3, GPDO_CUR_GAME(r12) +stb r3, GPDO_TIEBREAK_GAME_NUM(r12) + # Prepare buffer for EXI transfer li r3, FMTB_SIZE branchl r12, HSD_MemAlloc @@ -549,521 +541,6 @@ restore blr -################################################################################ -# Function: Check if chat input was pressed and send it to the EXI device -################################################################################ -# skip my test if pad was not pressed -FN_CHECK_CHAT_INPUTS: -backup - -# uncomment this line to disable B press on chat window -# b SKIP_CHAT_WINDOW_B_PRESS - -# if b was pressed, set that as last input -cmpwi REG_INPUTS, B_BUTTON -bne SKIP_CHAT_WINDOW_B_PRESS -sth REG_INPUTS, CSSDT_CHAT_LAST_INPUT(REG_CSSDT_ADDR) - -SKIP_CHAT_WINDOW_B_PRESS: -cmpwi REG_INPUTS, PAD_LEFT -beq HANDLE_CHAT_INPUT_PRESSED -cmpwi REG_INPUTS, PAD_RIGHT -beq HANDLE_CHAT_INPUT_PRESSED -cmpwi REG_INPUTS, PAD_UP -beq HANDLE_CHAT_INPUT_PRESSED -cmpwi REG_INPUTS, PAD_DOWN -bnel HANDLE_SKIP_CHAT_INPUT - -HANDLE_CHAT_INPUT_PRESSED: - -# Store last input in CSS data table if part of the allowed inputs -sth REG_INPUTS, CSSDT_CHAT_LAST_INPUT(REG_CSSDT_ADDR) - -# If chat window is already open, skip -lbz r3, CSSDT_CHAT_WINDOW_OPENED(REG_CSSDT_ADDR) -cmpwi r3, 0 -bne HANDLE_SKIP_CHAT_INPUT - -mr r3, REG_INPUTS -bl FN_OPEN_CHAT_WINDOW - -HANDLE_SKIP_CHAT_INPUT: -restore -blr - -################################################################################ -# Function: Send Chat Commnad -################################################################################ -FN_SEND_CHAT_COMMAND: - -mr r14, r3 # Store Controller Input argument -backup - -# Prepare buffer for EXI transfer -li r3, CMTB_SIZE # Store same bytes as Buffer Size -branchl r12, HSD_MemAlloc -mr REG_TXB_ADDR, r3 # Save the address where the memory has been allocated to - -# Write tx data -li r3, CONST_SlippiCmdSendChatMessage # set command on allocated address -stb r3, CMTB_CMD(REG_TXB_ADDR) - -mr r3, r14 # set message id from controller_input argument -stb r3, CMTB_MESSAGE(REG_TXB_ADDR) - -# transfer the bufffer -mr r3, REG_TXB_ADDR -li r4, CMTB_SIZE # length of buffer -li r5, CONST_ExiWrite -branchl r12, FN_EXITransferBuffer - -# free the allocated memory -mr r3, REG_TXB_ADDR -branchl r12, HSD_Free - -# Play a sound indicating a new message was sent -li r3, 0xb7 -li r4, 127 -li r5, 64 -branchl r12, 0x800237a8 # SFX_PlaySoundAtFullVolume - -mr r3, REG_INPUTS -restore -blr - -################################################################################ -# Function: Starts THINK Function to show the chat window -# r3 holds the input argument which decides the offset of the text messages to show -############################################################################## -FN_OPEN_CHAT_WINDOW: - -.set REG_CHAT_INPUTS, 14 -.set REG_CHAT_GOBJ, 20 -.set REG_CHAT_JOBJ, 21 -.set TEXT_GXLINK, 12 - -mr REG_CHAT_INPUTS, r3 # Store Controller Input argument -backup - - -bl TEXT_PROPERTIES -mflr REG_TEXT_PROPERTIES - -# Play common sound -li r3, 2 -branchl r12, SFX_Menu_CommonSound - -# Save in memory that we have the chat opened and store the pad input -mr r3, REG_CHAT_INPUTS # controller input -stb r3, CSSDT_CHAT_WINDOW_OPENED(REG_CSSDT_ADDR) # Load where buf is stored - -# Get Memory Buffer for Chat Window Data Table -li r3, CSSCWDT_SIZE # Buffer Size -branchl r12, HSD_MemAlloc -mr r23, r3 # save result address into r23 - -# Zero out CSS data table -li r4, CSSCWDT_SIZE -branchl r12, Zero_AreaLength - -# Set Buffer Initial Data -mr r3, REG_CHAT_INPUTS # controller input -stb r3, CSSCWDT_INPUT(r23) # 0x80195424 - -# Set CSS DataTable Address -mr r3, REG_CSSDT_ADDR # store address to CSS Data Table -stw r3, CSSCWDT_CSSDT_ADDR(r23) - -# create gobj for think function -li r3, 0x4 -li r4, 0x5 -li r5, 0x80 -branchl r12, GObj_Create -mr REG_CHAT_GOBJ, r3 # save GOBJ pointer - -# Load JOBJ -lwz r3, CSSDT_SLPCSS_ADDR(REG_CSSDT_ADDR) -lwz r3, SLPCSS_CHATSELECT (r3) # pointer to our custom bg main jobj -lwz r3, 0x0 (r3) # jobj -branchl r12,0x80370e44 #Create jobj -mr REG_CHAT_JOBJ,r3 - -# Move to the left if widescreen is enabled -lfs f1, TPO_CHAT_WINDOW_X(REG_TEXT_PROPERTIES) # X POS -lbz r4, OFST_R13_ISWIDESCREEN(r13) -cmpwi r4, 0 -beq END_SET_CHAT_WINDOW_POS_X -lfs f1, TPO_CHAT_WINDOW_X_WIDESCREEN(REG_TEXT_PROPERTIES) # X POS Widescreen - -END_SET_CHAT_WINDOW_POS_X: -lfs f2, TPO_CHAT_WINDOW_Y(REG_TEXT_PROPERTIES) # Y POS -stfs f1, 0x38(r3) # X POS -stfs f2, 0x3C(r3) # Y POS - -# Add JOBJ To GObj -mr r3,REG_CHAT_GOBJ -li r4, 4 -mr r5,REG_CHAT_JOBJ -branchl r12,0x80390a70 # void GObj_AddObject(GOBJ *gobj, u8 unk, void *object) - -# Add GX Link that draws the background -mr r3,REG_CHAT_GOBJ -load r4,0x80391070 # 80302608, 80391044, 8026407c, 80391070, 803a84bc -li r5, 1 -li r6, 128 -branchl r12,GObj_SetupGXLink # void GObj_AddGXLink(GOBJ *gobj, void *cb, int gx_link, int gx_pri) - -# Add User Data to GOBJ ( Our buffer ) -mr r3, REG_CHAT_GOBJ -li r4, 4 # user data kind -load r5, HSD_Free # destructor -mr r6, r23 # memory pointer of allocated buffer above -branchl r12, GObj_AddUserData - -# Set Think Function that runs every frame -mr r3, REG_CHAT_GOBJ # set r3 to GOBJ pointer -bl CSS_ONLINE_CHAT_WINDOW_THINK -mflr r4 # Function to Run -li r5, 4 # Priority. 4 runs after CSS_LoadButtonInputs (3) -branchl r12, GObj_AddProc - -FN_OPEN_CHAT_WINDOW_END: - - -restore -blr - -################################################################################ -# CHAT MSG THINK Function: Looping function to keep on -# updating the text until timer runs out -################################################################################ -CSS_ONLINE_CHAT_WINDOW_THINK: -blrl -.set REG_CHAT_WINDOW_GOBJ, 14 -.set REG_TEXT_PROPERTIES, 15 -.set REG_CHAT_TEXT_PROPERTIES, 20 -.set REG_CHAT_WINDOW_GOBJ_DATA_ADDR, 16 -.set REG_CHAT_WINDOW_JOBJ_ADDR, 23 -.set REG_CHAT_WINDOW_INPUT, 17 -.set REG_CHAT_WINDOW_SECOND_INPUT, 22 -.set REG_CHAT_WINDOW_TIMER, 18 -.set REG_CHAT_WINDOW_TEXT_STRUCT_ADDR, 19 -.set REG_CHAT_WINDOW_CSSDT_ADDR, 21 - -.set CHAT_JOBJ_OFFSET, 0x28 # offset from GOBJ to HSD Object (Jobj we assigned) -.set CHAT_ENTITY_DATA_OFFSET, 0x2C # offset from GOBJ to entity data -.set CHAT_WINDOW_IDLE_TIMER_TIME, 0x90 # initial idle timer before window disappears -.set CHAT_WINDOW_IDLE_TIMER_DELAY, 0x06 # initial delay before allowing to send messages -.set CHAT_WINDOW_MAX_MESSAGES, 0x03 # Max messages allowed before blocking new ones -.set CHAT_WINDOW_HEADER_MARGIN_LINES, 0x2 # lines away from which to start drawing messages away from header - -mr REG_CHAT_WINDOW_GOBJ, r3 # Store GOBJ pointer 0x801954A4 -backup - -# get gobj and get values for each of the data buffer -lwz REG_CHAT_WINDOW_GOBJ_DATA_ADDR, CHAT_ENTITY_DATA_OFFSET(REG_CHAT_WINDOW_GOBJ) # get address of data buffer -lwz REG_CHAT_WINDOW_JOBJ_ADDR, CHAT_JOBJ_OFFSET(REG_CHAT_WINDOW_GOBJ) # get address of data buffer -lbz REG_CHAT_WINDOW_INPUT, CSSCWDT_INPUT(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -lbz REG_CHAT_WINDOW_TIMER, CSSCWDT_TIMER(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -lwz REG_CHAT_WINDOW_TEXT_STRUCT_ADDR, CSSCWDT_TEXT_STRUCT_ADDR(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -lwz REG_CHAT_WINDOW_CSSDT_ADDR, CSSCWDT_CSSDT_ADDR(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -lhz REG_CHAT_WINDOW_SECOND_INPUT, CSSDT_CHAT_LAST_INPUT(REG_CHAT_WINDOW_CSSDT_ADDR) - -lwz REG_MSRB_ADDR, CSSDT_MSRB_ADDR(REG_CHAT_WINDOW_CSSDT_ADDR) - -# clear last input -li r3, 0 -sth r3, CSSDT_CHAT_LAST_INPUT(REG_CHAT_WINDOW_CSSDT_ADDR) - -# if chat command already sent destroy proc -lbz r3, CSSCWDT_INPUT_SENT(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -cmpwi r3, 0 -bne CSS_ONLINE_CHAT_WINDOW_THINK_REMOVE_PROC - -# if text is not initialized, assume we need to initalize everything -# else skip to idle timer check -cmpwi REG_CHAT_WINDOW_TEXT_STRUCT_ADDR, 0 -bne CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_INPUT - -##### BEGIN: INITIALIZING CHAT WINDOW TIMER ########### -li r3, CHAT_WINDOW_IDLE_TIMER_TIME # idle timer -mr REG_CHAT_WINDOW_TIMER, r3 -stb r3, CSSCWDT_TIMER(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -##### END: INITIALIZING CHAT WINDOW TIMER ########### - -##### BEGIN: INITIALIZING CHAT WINDOW TEXT ########### - -# INIT PROPERTIES -bl TEXT_PROPERTIES -mflr REG_TEXT_PROPERTIES - -# INIT MSG Properties based on input button -mr r3, REG_CHAT_WINDOW_INPUT -branchl r12, FN_LoadChatMessageProperties -mr REG_CHAT_TEXT_PROPERTIES, r3 - -# Create Text Struct -li r3, 0 -li r4, 0 -branchl r12, Text_CreateStruct -# Save Text Struct Address -mr REG_CHAT_WINDOW_TEXT_STRUCT_ADDR, r3 -stw REG_CHAT_WINDOW_TEXT_STRUCT_ADDR, CSSCWDT_TEXT_STRUCT_ADDR(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) - -li r3, 0x1 # Text kerning to close -li r4, 0x0 # Align Left -lfs f1, TPO_BASE_Z(REG_TEXT_PROPERTIES) # Z offset -lfs f2, TPO_BASE_CANVAS_SCALING(REG_TEXT_PROPERTIES) # Scale -stb r3, 0x49(REG_CHAT_WINDOW_TEXT_STRUCT_ADDR) # Set text kerning -stb r4, 0x4A(REG_CHAT_WINDOW_TEXT_STRUCT_ADDR) # Set text alignment -stfs f1, 0x8(REG_CHAT_WINDOW_TEXT_STRUCT_ADDR) # set z offset -stfs f2, 0x24(REG_CHAT_WINDOW_TEXT_STRUCT_ADDR) # set scale -stfs f2, 0x28(REG_CHAT_WINDOW_TEXT_STRUCT_ADDR) # set scale - -# Create Subtext: Header -# Move to the left if widescreen is enabled -lfs f2, TPO_CHAT_HEADER_X(REG_TEXT_PROPERTIES) # X POS -lbz r3, OFST_R13_ISWIDESCREEN(r13) -cmpwi r3, 0 -beq END_SET_CHAT_HEADER_POS_X -lfs f2, TPO_CHAT_HEADER_X_WIDESCREEN(REG_TEXT_PROPERTIES) # X POS Widescreen -END_SET_CHAT_HEADER_POS_X: - -# set a different color if not connected -addi r4, REG_TEXT_PROPERTIES, TPO_COLOR_YELLOW # color when connected -lbz r3, MSRB_CONNECTION_STATE(REG_MSRB_ADDR) -cmpwi r3, MM_STATE_CONNECTION_SUCCESS -beq END_SET_CHAT_HEADER_COLOR - -addi r4, REG_TEXT_PROPERTIES, TPO_COLOR_FAINT_YELLOW # color when not connected -END_SET_CHAT_HEADER_COLOR: - -mr r3, REG_CHAT_WINDOW_TEXT_STRUCT_ADDR # Text Struct Address -# r4 is color -li r5, 0 # no outline -addi r6, REG_TEXT_PROPERTIES, TPO_COLOR_WHITE # Text Color -addi r7, REG_TEXT_PROPERTIES, TPO_STRING_CHAT_SHORTCUTS # String Format pointer -addi r8, REG_CHAT_TEXT_PROPERTIES, 0x4 # String pointer (header starts at 0x4) -lfs f1, TPO_CHAT_LABEL_SIZE(REG_TEXT_PROPERTIES) # Text Size -lfs f3, TPO_CHAT_LABEL_Y(REG_TEXT_PROPERTIES) # Y POS -branchl r12, FG_CreateSubtext -mr r4, r3 # sub text index for next function call - -# Create Subtext: Labels -mr r10, r4 # save sub text index of header # 0x80195520 -mr r11, r4 # initialize looping index -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_START: - -# calculate Y offset by moving it down a bit -addi r3, r11, CHAT_WINDOW_HEADER_MARGIN_LINES -lfs f2, TPO_CHAT_LABEL_MARGIN(REG_TEXT_PROPERTIES) # margin between labels -branchl r12, FN_MultiplyRWithF -lfs f3, TPO_CHAT_LABEL_Y(REG_TEXT_PROPERTIES) # Y POS -fadds f3, f3, f1 -#fmr f3, f1 # 0x80195588 - -# calculate address of label -cmpwi r11, 0x0 -beq CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_UP_LABEL_ADDR -cmpwi r11, 0x1 -beq CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_LEFT_LABEL_ADDR -cmpwi r11, 0x2 -beq CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_RIGHT_LABEL_ADDR -cmpwi r11, 0x3 -beq CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_DOWN_LABEL_ADDR - -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_UP_LABEL_ADDR: -li r4, PAD_UP -b CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_CALC_LABEL_ADDR_END -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_DOWN_LABEL_ADDR: -li r4, PAD_DOWN -b CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_CALC_LABEL_ADDR_END -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_RIGHT_LABEL_ADDR: -li r4, PAD_RIGHT -b CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_CALC_LABEL_ADDR_END -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_SET_LEFT_LABEL_ADDR: -li r4, PAD_LEFT -CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_CALC_LABEL_ADDR_END: - -# calculate address of message -# INIT MSG Properties based on input button -mr r3, REG_CHAT_WINDOW_INPUT -# r4 is selected input -branchl r12, FN_LoadChatMessageProperties -mr r7, r4 # message String pointer - -# Move to the left if widescreen is enabled -lfs f2, TPO_CHAT_LABEL_X(REG_TEXT_PROPERTIES) # X POS -lbz r3, OFST_R13_ISWIDESCREEN(r13) -cmpwi r3, 0 -beq END_SET_CHAT_LABEL_POS_X -lfs f2, TPO_CHAT_LABEL_X_WIDESCREEN(REG_TEXT_PROPERTIES) # X POS Widescreen - -END_SET_CHAT_LABEL_POS_X: -mr r3, REG_CHAT_WINDOW_TEXT_STRUCT_ADDR # Text Struct Address -addi r4, REG_TEXT_PROPERTIES, TPO_COLOR_WHITE # Text Color -li r5, 0 # No outlines -addi r6, REG_TEXT_PROPERTIES, TPO_COLOR_WHITE # Text Color -# r7 message String pointer -lfs f1, TPO_CHAT_LABEL_SIZE(REG_TEXT_PROPERTIES) # Text Size - - -branchl r12, FG_CreateSubtext -mr r11, r3 # save subtext index - -# Loop back if last index has not been reached -addi r3, r10, 4 # Last index we want header + 4 labels -cmpw r11, r3 -bne CSS_ONLINE_CHAT_WINDOW_THINK_CREATE_LABELS_LOOP_START - -##### END: INITIALIZING CHAT WINDOW TEXT ########### -b CSS_ONLINE_CHAT_WINDOW_THINK_EXIT # just initialize on first loop - -CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_INPUT: # 0x8019562C - -# If theres is no chat messages skip timer check -lbz r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CHAT_WINDOW_CSSDT_ADDR) -cmpwi r3, 0 -beq SKIP_CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_IDLE_TIMER - -# prevent spam: Only allow input if a few frames have passed -lbz r3, CSSCWDT_TIMER(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) -cmpwi r3, CHAT_WINDOW_IDLE_TIMER_TIME-CHAT_WINDOW_IDLE_TIMER_DELAY -bgt CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_IDLE_TIMER -SKIP_CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_IDLE_TIMER: - -# logf LOG_LEVEL_WARN, "msg input: %d", "mr r5, REG_CHAT_WINDOW_SECOND_INPUT" - -# if B pressed, close chat window -cmpwi REG_CHAT_WINDOW_SECOND_INPUT, B_BUTTON -bne SKIP_CSS_ONLINE_CHAT_WINDOW_THINK_CLOSE_CHAT_WINDOW - -# Play return SFX -# li r3, 0 -# branchl r12,SFX_Menu_CommonSound -b CSS_ONLINE_CHAT_WINDOW_THINK_REMOVE_PROC - -SKIP_CSS_ONLINE_CHAT_WINDOW_THINK_CLOSE_CHAT_WINDOW: - -# load last input from the CSS Data table -# if there's any input, Send Message -cmpwi REG_CHAT_WINDOW_SECOND_INPUT, 0 -beq CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_IDLE_TIMER - -# if current local message count is X, do not allow to send another -lbz r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CHAT_WINDOW_CSSDT_ADDR) -cmpwi r3, CHAT_WINDOW_MAX_MESSAGES -bge CSS_ONLINE_CHAT_WINDOW_THINK_BLOCK_MESSAGE - -# if current message count is X+2, do not allow to send another -lbz r3, CSSDT_CHAT_MSG_COUNT(REG_CHAT_WINDOW_CSSDT_ADDR) -cmpwi r3, CHAT_WINDOW_MAX_MESSAGES+2 -bge CSS_ONLINE_CHAT_WINDOW_THINK_BLOCK_MESSAGE - -# Clear Timer -li r3, 0 -stb r3, CSSCWDT_TIMER(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) - -# Send Chat command # 0x80195638 -# combine so we get 0x00(first input)(second input) i.e: 0x0024 if first was 2 and second was 4 -mr r3, REG_CHAT_WINDOW_INPUT -mr r4, REG_CHAT_WINDOW_SECOND_INPUT - -li r5, 4 # shift first input 4 bytes to the left -slw r3, r3, r5 -add r3, r3, r4 # add second input to highest byte -bl FN_SEND_CHAT_COMMAND - -# flag as input already sent -li r3, 1 -stb r3, CSSCWDT_INPUT_SENT(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) - -b CSS_ONLINE_CHAT_WINDOW_THINK_EXIT - -CSS_ONLINE_CHAT_WINDOW_THINK_BLOCK_MESSAGE: -# Play SFX -li r3,3 -branchl r12,SFX_Menu_CommonSound - -CSS_ONLINE_CHAT_WINDOW_THINK_CHECK_IDLE_TIMER: -# check timer and decrease until is 0 -cmpwi REG_CHAT_WINDOW_TIMER, 0 -beq CSS_ONLINE_CHAT_WINDOW_THINK_REMOVE_PROC # if timer is 0, then exit and delete think func. - -CSS_ONLINE_CHAT_WINDOW_THINK_DECREASE_IDLE_TIMER: -subi REG_CHAT_WINDOW_TIMER, REG_CHAT_WINDOW_TIMER, 1 -stb REG_CHAT_WINDOW_TIMER, CSSCWDT_TIMER(REG_CHAT_WINDOW_GOBJ_DATA_ADDR) - -b CSS_ONLINE_CHAT_WINDOW_THINK_EXIT - -CSS_ONLINE_CHAT_WINDOW_THINK_REMOVE_PROC: - -# clear out chat window opened flag on the CSS Data Table -li r3, 0 -stb r3, CSSDT_CHAT_WINDOW_OPENED(REG_CHAT_WINDOW_CSSDT_ADDR) - -# destroy gobj -mr r3, REG_CHAT_WINDOW_GOBJ -branchl r12, GObj_Destroy - -# remove text -mr r3, REG_CHAT_WINDOW_TEXT_STRUCT_ADDR -branchl r12, Text_RemoveText - -CSS_ONLINE_CHAT_WINDOW_THINK_EXIT: -restore -blr - - - -################################################################################ -# Properties -################################################################################ -TEXT_PROPERTIES: -blrl -# Base Properties -.set TPO_BASE_Z, 0 -.float 0 -.set TPO_BASE_CANVAS_SCALING, TPO_BASE_Z + 4 -.float 0.1 - -# Chat Labels Propiertes -.set TPO_CHAT_HEADER_X, TPO_BASE_CANVAS_SCALING + 4 -.float -300 -.set TPO_CHAT_HEADER_X_WIDESCREEN, TPO_CHAT_HEADER_X + 4 -.float -452 -.set TPO_CHAT_LABEL_X, TPO_CHAT_HEADER_X_WIDESCREEN + 4 -.float -285 -.set TPO_CHAT_LABEL_X_WIDESCREEN, TPO_CHAT_LABEL_X + 4 -.float -437 -.set TPO_CHAT_LABEL_Y, TPO_CHAT_LABEL_X_WIDESCREEN + 4 -.float 79 -.set TPO_CHAT_LABEL_SIZE, TPO_CHAT_LABEL_Y + 4 -.float 0.45 -.set TPO_CHAT_LABEL_MARGIN, TPO_CHAT_LABEL_SIZE + 4 -.float 25 - -# Chat Window Properties -.set TPO_CHAT_WINDOW_X, TPO_CHAT_LABEL_MARGIN + 4 -.float -20 -.set TPO_CHAT_WINDOW_X_WIDESCREEN, TPO_CHAT_WINDOW_X + 4 -.float -35 -.set TPO_CHAT_WINDOW_Y, TPO_CHAT_WINDOW_X_WIDESCREEN + 4 -.float -16.5 - -# Text colors -.set TPO_COLOR_WHITE, TPO_CHAT_WINDOW_Y + 4 -.long 0xFFFFFFFF # white -.set TPO_COLOR_YELLOW, TPO_COLOR_WHITE + 4 -.long 0xffea2fFF -.set TPO_COLOR_FAINT_YELLOW, TPO_COLOR_YELLOW + 4 -.long 0xc9c387FF - -# String Properties -.set TPO_STRING_CHAT_SHORTCUTS, TPO_COLOR_FAINT_YELLOW + 4 -.string "Chat: %s" -.align 2 - ################################################################################ # Skip starting match ################################################################################ diff --git a/Online/Menus/CSS/LoadCSSText.asm b/Online/Menus/CSS/LoadCSSText.asm index a5468f97..54e90255 100644 --- a/Online/Menus/CSS/LoadCSSText.asm +++ b/Online/Menus/CSS/LoadCSSText.asm @@ -13,13 +13,6 @@ # Text Update Userdata Struct Definition .set TEXTGOBJDATA_SIZE, 0x4 -.set TEXTGOBJDATA_SLPCSS, 0x0 # pointer to slpChat symbol - -# Chat constants -.set MAX_CHAT_MESSAGES, (3*4)+1 # Max messages being displayed at the same time (max messages being set by all team members) -.set MAX_CHAT_MESSAGE_LINES, 9 -.set CHAT_MESSAGE_DISPLAY_TIMER, 0xAA -.set JOBJ_CHILD_OFFSET, 0x38 # Pointer to store Child JOBJ on the SP # Ensure that this is an online CSS getMinorMajor r3 @@ -38,39 +31,8 @@ blrl .set TPO_BASE_CANVAS_SCALING, TPO_BASE_Z + 4 .float 0.1 -# Chat Message Propiertes -.set TPO_CHAT_MSG_MARGIN, TPO_BASE_CANVAS_SCALING + 4 -.float 3.20 - -# Label properties -.set TPO_CHAT_BG_SCALE_X, TPO_CHAT_MSG_MARGIN+4 -.float 11.8 -.set TPO_CHAT_BG_SCALE_Y, TPO_CHAT_BG_SCALE_X+4 -.float 0.8 -.set TPO_CHAT_BG_X_POS_WIDESCREEN, TPO_CHAT_BG_SCALE_Y+4 -.float -14 -.set TPO_CHAT_BG_Y_POS, TPO_CHAT_BG_X_POS_WIDESCREEN+4 -.float 24 -.set TPO_CHAT_BG_FRAME_START, TPO_CHAT_BG_Y_POS+4 -.float 0 -.set TPO_CHAT_BG_FRAME_END, TPO_CHAT_BG_FRAME_START+4 -.float 30 -.set TPO_CHAT_BG_FRAME_REWIND, TPO_CHAT_BG_FRAME_END+4 -.float 50 - -.set TPO_CHATMSG_X_POS_WIDESCREEN, TPO_CHAT_BG_FRAME_REWIND+4 -.float -44.5 -.set TPO_CHATMSG_X_POS, TPO_CHATMSG_X_POS_WIDESCREEN+4 -.float -29.5 -.set TPO_CHATMSG_Y_POS, TPO_CHATMSG_X_POS+4 -.float -23.25 -.set TPO_CHATMSG_Z_POS, TPO_CHATMSG_Y_POS+4 -.float 5 -.set TPO_CHATMSG_CANVAS_SCALE, TPO_CHATMSG_Z_POS+4 -.float 0.04 - # Header properties -.set TPO_HEADER_X, TPO_CHATMSG_CANVAS_SCALE + 4 +.set TPO_HEADER_X, TPO_BASE_CANVAS_SCALING + 4 .float 70 .set TPO_HEADER_Y, TPO_HEADER_X + 4 .float 23 @@ -241,7 +203,10 @@ blrl # FN_InitUserDisplay ################################################################################ # Queue up per-frame CSS text update function ################################################################################ -.set REG_GOBJ, REG_VARIOUS_1 +# Using REG_GOBJ_1 because REG_GOBJ is set to that later in the file. A newer assembler seems +# to be using the last value in the file instead of the most recent... so this will make the +# outputs match +.set REG_GOBJ_1, REG_VARIOUS_1 .set REG_USERDATA, REG_VARIOUS_2 # Create GObj (input values stolen from CSS_BigFunc... GObj) @@ -249,7 +214,7 @@ li r3, 0x4 li r4, 0x5 li r5, 0x80 branchl r12, GObj_Create -mr REG_GOBJ, r3 +mr REG_GOBJ_1, r3 # Alloc userdata li r3, TEXTGOBJDATA_SIZE @@ -257,14 +222,14 @@ branchl r12,HSD_MemAlloc mr REG_USERDATA, r3 # Add userdata -addi r3, REG_GOBJ,0 +addi r3, REG_GOBJ_1,0 li r4, 4 load r5, HSD_Free addi r6, REG_USERDATA, 0 branchl r12, GObj_AddUserData # Schedule Function -addi r3, REG_GOBJ,0 +addi r3, REG_GOBJ_1,0 bl CSS_ONLINE_TEXT_THINK mflr r4 # Function to Run li r5, 4 # Priority. 4 runs after CSS_LoadButtonInputs (3) @@ -382,9 +347,9 @@ b EXIT # Expects f3 to be set to y position of line ################################################################################ INIT_LINE_SUBTEXT: +.set SP_OFST_Y_POS, BKP_FREE_SPACE_OFFSET backup - -fmr f13, f3 +stfs f3, SP_OFST_Y_POS(sp) # Init line text mr r3, REG_TEXT_STRUCT @@ -402,7 +367,7 @@ addi r4, REG_TEXT_PROPERTIES, TPO_COLOR_WHITE li r5, 0 lfs f1, TPO_SPINNER_SIZE(REG_TEXT_PROPERTIES) lfs f2, TPO_HEADER_X(REG_TEXT_PROPERTIES) -fmr f3, f13 +lfs f3, SP_OFST_Y_POS(sp) addi r7, REG_TEXT_PROPERTIES, TPO_EMPTY_STRING branchl r12, FG_CreateSubtext @@ -585,154 +550,6 @@ addi r5, REG_TEXT_PROPERTIES, TPO_STRING_ERROR UPDATE_HEADER: bl FN_UPDATE_TEXT -################################################################################ -# Manage Chat Messages: If there's a new message, then initialize a -# disappearing text -################################################################################ - -.set REG_MSG_ID, REG_VARIOUS_1 # REG_MSG_ID will store chat message id -.set REG_USER_STRING, REG_VARIOUS_2 # REG_USER_STRING will store the user name string memory address - -lbz r3, MSRB_USER_CHATMSG_ID(REG_MSRB_ADDR) -cmpwi r3, 0 -beq CHECK_OPP_CHAT_MESSAGE -addi REG_USER_STRING, REG_MSRB_ADDR, MSRB_LOCAL_NAME # store player name -mr REG_MSG_ID, r3 # store chat message id - -# Store Increased local Message Count -lbz r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CSSDT_ADDR) -addi r3, r3, 1 -stb r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CSSDT_ADDR) - -b UPDATE_CHAT_MESSAGES - -CHECK_OPP_CHAT_MESSAGE: -lbz r3, MSRB_OPP_CHATMSG_ID(REG_MSRB_ADDR) -cmpwi r3, 0 -beq SKIP_CHAT_MESSAGES -mr REG_MSG_ID, r3 # store chat message id - -UPDATE_CHAT_MESSAGES: -# Start at the top after x messages -lbz r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) -cmpwi r3, MAX_CHAT_MESSAGE_LINES -ble CREATE_CHAT_MESSAGE -# if we reached the limit, reset the last message index to 0 -li r3, 0 -stb r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # store the new message index -beq SKIP_CHAT_MESSAGES - -CREATE_CHAT_MESSAGE: -.set REG_BUFFER, REG_VARIOUS_3 - -# Play a sound indicating a new message -li r3, 0xb7 -li r4, 127 -li r5, 64 -branchl r12, 0x800237a8 # SFX_PlaySoundAtFullVolume - -# Store Increased Message Count -lbz r3, CSSDT_CHAT_MSG_COUNT(REG_CSSDT_ADDR) -addi r3, r3, 1 -stb r3, CSSDT_CHAT_MSG_COUNT(REG_CSSDT_ADDR) - -# Get Memory Buffer for Chat Message Data Table -li r3, CSSCMDT_SIZE -branchl r12, HSD_MemAlloc -mr REG_BUFFER, r3 # save result address into REG_BUFFER - -# Zero out CSS data table -li r4, CSSDT_SIZE -branchl r12, Zero_AreaLength - -# initialize timers -li r3, 20 -li r4, 0 # default status is startup -stb r3, CSSCMDT_TIMER(REG_BUFFER) -stb r4, CSSCMDT_TIMER_STATUS(REG_BUFFER) - -# initialize message id -mr r3, REG_MSG_ID -stb r3, CSSCMDT_MSG_ID(REG_BUFFER) - -# Set Message index + increase by 1 -lbz r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) -stb r3, CSSCMDT_MSG_INDEX(REG_BUFFER) # set index in the new buffer -addi r3, r3, 1 # increase message index -stb r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # store the new message index - -# Set player index -lbz r3, MSRB_CHATMSG_PLAYER_INDEX(REG_MSRB_ADDR) -stb r3, CSSCMDT_PLAYER_INDEX(REG_BUFFER) - -# Set CSS DataTable Address -mr r3, REG_CSSDT_ADDR # store address to CSSDT_DT -stw r3, CSSCMDT_CSSDT_ADDR(REG_BUFFER) - -.set REG_GOBJ, REG_VARIOUS_4 -# Create GObj (input values stolen from CSS_BigFunc... GObj) -li r3, 4 -li r4, 5 -li r5, 0x80 -branchl r12, GObj_Create -mr REG_GOBJ, r3 - -# Load JOBJ -lwz r3, CSSDT_SLPCSS_ADDR(REG_CSSDT_ADDR) -lwz r3, SLPCSS_CHATMSG (r3) # pointer to our custom bg main jobj -lwz r3, 0x0 (r3) # jobj -branchl r12,JObj_LoadJoint #Create jobj - -# Add JOBJ -mr r5,r3 -mr r3, REG_GOBJ -lbz r4, -0x3E57 (r13) -branchl r12,0x80390a70 - -# Add GX Link -mr r3, REG_GOBJ -load r4,0x80391070 -li r5, 3 -li r6, 128 -branchl r12,GObj_SetupGXLink - -# Add anim -lwz r3,0x28(REG_GOBJ) -lwz r4, CSSDT_SLPCSS_ADDR(REG_CSSDT_ADDR) -lwz r4, SLPCSS_CHATMSG (r4) -li r5, 0 -branchl r12,0x8016895c - -# Req anim -lwz r3,0x28(REG_GOBJ) -lfs f1, -0x51D8 (rtoc) -branchl r12, JObj_ReqAnimAll - -# Move to the left if widescreen is enabled -lbz r3, OFST_R13_ISWIDESCREEN(r13) -cmpwi r3, 0 -beq SKIP_SET_CHAT_BG_POS_X -# Adjust X Translation -lfs f1, TPO_CHAT_BG_X_POS_WIDESCREEN(REG_TEXT_PROPERTIES) -lwz r3,0x28(REG_GOBJ) -stfs f1, 0x38(r3) -SKIP_SET_CHAT_BG_POS_X: - - -# Add userdata -mr r3, REG_GOBJ -li r4, 4 # user data kind 0x80195b7c -load r5, HSD_Free # destructor -mr r6, REG_BUFFER # memory pointer of allocated buffer above -branchl r12, GObj_AddUserData - -mr r3, REG_GOBJ # set pointer back to GOBJ -bl CSS_ONLINE_CHAT_THINK -mflr r4 # Function to Run -li r5, 4 # Priority. 4 runs after CSS_LoadButtonInputs (3) -branchl r12, GObj_AddProc - -SKIP_CHAT_MESSAGES: ################################################################################ # Manage playing label @@ -1030,10 +847,12 @@ cmpwi r3, MM_STATE_OPPONENT_CONNECTING beq UPDATE_CONNECTING_TO_OPPONENT # Prep "searching" text to use -lbz r5, OFST_R13_ONLINE_MODE(r13) -cmpwi r5, ONLINE_MODE_UNRANKED addi r5, REG_TEXT_PROPERTIES, TPO_STRING_SEARCHING_FOR addi r6, REG_TEXT_PROPERTIES, TPO_STRING_OPPONENT +lbz r11, OFST_R13_ONLINE_MODE(r13) +cmpwi r11, ONLINE_MODE_UNRANKED +beq UPDATE_WAITING +cmpwi r11, ONLINE_MODE_RANKED beq UPDATE_WAITING addi r5, REG_TEXT_PROPERTIES, TPO_STRING_SEARCHING_FOR @@ -1042,10 +861,12 @@ b UPDATE_WAITING UPDATE_CONNECTING_TO_OPPONENT: # Prep "connecting" text to use -lbz r5, OFST_R13_ONLINE_MODE(r13) -cmpwi r5, ONLINE_MODE_UNRANKED addi r5, REG_TEXT_PROPERTIES, TPO_STRING_CONNECTING_TO addi r6, REG_TEXT_PROPERTIES, TPO_STRING_OPPONENT +lbz r11, OFST_R13_ONLINE_MODE(r13) +cmpwi r11, ONLINE_MODE_UNRANKED +beq UPDATE_WAITING +cmpwi r11, ONLINE_MODE_RANKED beq UPDATE_WAITING addi r5, REG_TEXT_PROPERTIES, TPO_STRING_CONNECTING_TO @@ -1135,251 +956,6 @@ sth r3, CSSDT_FRAME_COUNTER(REG_CSSDT_ADDR) restore blr -################################################################################ -# CHAT MSG THINK Function: Looping function to keep on -# updating the text until timer runs out -################################################################################ - -# Registers -.set CHAT_ENTITY_DATA_OFFSET, 0x2C # offset from GOBJ to entity data -.set REG_CHATMSG_GOBJ, 14 -.set REG_CHATMSG_JOBJ, REG_CHATMSG_GOBJ+1 -.set REG_CHATMSG_GOBJ_DATA_ADDR, REG_CHATMSG_JOBJ+1 -.set REG_CHATMSG_TIMER, REG_CHATMSG_GOBJ_DATA_ADDR+1 -.set REG_CHATMSG_TIMER_STATUS, REG_CHATMSG_TIMER+1 -.set REG_CHATMSG_MSG_ID, REG_CHATMSG_TIMER_STATUS+1 -.set REG_CHATMSG_MSG_INDEX, REG_CHATMSG_MSG_ID+1 -.set REG_CHATMSG_MSG_TEXT_STRUCT_ADDR, REG_CHATMSG_MSG_INDEX+1 -.set REG_CHATMSG_MSG_STRING_ADDR, REG_CHATMSG_MSG_TEXT_STRUCT_ADDR+1 -.set REG_CHATMSG_PLAYER_INDEX, REG_CHATMSG_MSG_STRING_ADDR+1 -# float registers -.set REG_CHATMSG_TEXT_X_POS, REG_CHATMSG_GOBJ -.set REG_CHATMSG_TEXT_Y_POS, REG_CHATMSG_TEXT_X_POS+1 - -# offsets -.set JOBJ_OFFSET, 0x28 # offset from GOBJ to HSD Object (Jobj we assigned) - -CSS_ONLINE_CHAT_THINK: -blrl -mr REG_CHATMSG_GOBJ, r3 # Store GOBJ pointer -backup - -# INIT PROPERTIES -bl TEXT_PROPERTIES -mflr REG_TEXT_PROPERTIES - -# get gobj and get values for each of the data buffer -lwz REG_CHATMSG_GOBJ_DATA_ADDR, CHAT_ENTITY_DATA_OFFSET(REG_CHATMSG_GOBJ) # get address of data buffer -lbz REG_CHATMSG_TIMER, CSSCMDT_TIMER(REG_CHATMSG_GOBJ_DATA_ADDR) -lbz REG_CHATMSG_TIMER_STATUS, CSSCMDT_TIMER_STATUS(REG_CHATMSG_GOBJ_DATA_ADDR) -lbz REG_CHATMSG_MSG_ID, CSSCMDT_MSG_ID(REG_CHATMSG_GOBJ_DATA_ADDR) -lbz REG_CHATMSG_MSG_INDEX, CSSCMDT_MSG_INDEX(REG_CHATMSG_GOBJ_DATA_ADDR) -lwz REG_CHATMSG_MSG_TEXT_STRUCT_ADDR, CSSCMDT_MSG_TEXT_STRUCT_ADDR(REG_CHATMSG_GOBJ_DATA_ADDR) -lbz REG_CHATMSG_PLAYER_INDEX, CSSCMDT_PLAYER_INDEX(REG_CHATMSG_GOBJ_DATA_ADDR) -lwz REG_CSSDT_ADDR, CSSCMDT_CSSDT_ADDR(REG_CHATMSG_GOBJ_DATA_ADDR) - -lwz REG_CHATMSG_JOBJ, JOBJ_OFFSET(REG_CHATMSG_GOBJ) # get address of jobj -lwz REG_CHATMSG_JOBJ, 0x10(REG_CHATMSG_JOBJ) # get address of child jobj (bg) - -# Always Animate the bg -mr r3, REG_CHATMSG_JOBJ -branchl r12, JObj_AnimAll - -# if text is not initialized, do it and move to next frame -cmpwi REG_CHATMSG_MSG_TEXT_STRUCT_ADDR, 0x00000000 -bne CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES # already has values means that is set so skip to timer check - -# calculate float locations for message -mr r3,REG_CHATMSG_MSG_INDEX # convert message index to float -branchl r12, FN_IntToFloat # returns f1 (message index) - -# Move Chat Message Background -lfs f2, TPO_CHAT_BG_Y_POS(REG_TEXT_PROPERTIES) -lfs f3, TPO_CHAT_MSG_MARGIN(REG_TEXT_PROPERTIES) # distance between message -fmuls f3, f1, f3 # multiply index by margin -fsubs f2, f2, f3 # add the offset -stfs f2, 0x38+4(REG_CHATMSG_JOBJ) - -cmpwi REG_CHATMSG_TIMER_STATUS, 0 # if on startup move on to timer logic -beq CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES - -CSS_ONLINE_CHAT_INIT_TEXT: -##### BEGIN: INITIALIZING CHAT MSG TEXT ########### - -# if we got here we are initializing text so set timer again -li REG_CHATMSG_TIMER, CHAT_MESSAGE_DISPLAY_TIMER # reset timer -stb REG_CHATMSG_TIMER, CSSCMDT_TIMER(REG_CHATMSG_GOBJ_DATA_ADDR) - -# if we got here we are initializing text so set timer again -li REG_CHATMSG_TIMER_STATUS, 1 # reset timer -stb REG_CHATMSG_TIMER_STATUS, CSSCMDT_TIMER_STATUS(REG_CHATMSG_GOBJ_DATA_ADDR) - -SET_CHATMSG_TEXT_HEADER: -mr REG_CHATMSG_MSG_STRING_ADDR, r4 # store current string pointer - -# calculate float locations for message -mr r3,REG_CHATMSG_MSG_INDEX # convert message index to float -branchl r12, FN_IntToFloat # returns f1 (message index) -# load Y Starting position of text -lfs f2, TPO_CHATMSG_Y_POS(REG_TEXT_PROPERTIES) -lfs f3, TPO_CHAT_MSG_MARGIN(REG_TEXT_PROPERTIES) # distance between message -fmuls f3, f1, f3 # multiply index by margin -fadds f2, f2, f3 # add the offset -fmr REG_CHATMSG_TEXT_Y_POS, f2 # store current position to reuse them - -# Change Text Struct Descriptor to use a higher GX -lwz r3, textStructDescriptorBuffer(r13) # Text Struct Descriptor -li r4, 3 # gx_link we want -stb r4, 0xE(r3) - -lfs f1, TPO_CHATMSG_X_POS(REG_TEXT_PROPERTIES) - -# Move to the left if widescreen is enabled -lbz r3, OFST_R13_ISWIDESCREEN(r13) -cmpwi r3, 0 -beq SKIP_SET_CHAT_MSG_POS_X - -lfs f1, TPO_CHATMSG_X_POS_WIDESCREEN(REG_TEXT_PROPERTIES) -SKIP_SET_CHAT_MSG_POS_X: - - -# Create Text Object -addi r3, REG_CHATMSG_PLAYER_INDEX, 1 -mr r4, REG_CHATMSG_MSG_ID -li r5, 2 # use premade text fn -li r6, 0 # gx_link/pri? - -# f1 = X POS is set up above -# f2 = Y POS is set up above -lfs f3, TPO_CHATMSG_Z_POS(REG_TEXT_PROPERTIES) -lfs f4, TPO_CHATMSG_CANVAS_SCALE(REG_TEXT_PROPERTIES) -branchl r12, FG_CreateSubtext - -# Save Text Struct Address -stw r3, CSSCMDT_MSG_TEXT_STRUCT_ADDR(REG_CHATMSG_GOBJ_DATA_ADDR) - -# restore text struct descriptor -lwz r3, textStructDescriptorBuffer(r13) # Text Struct Descriptor -li r4, 1 # gx_link to restore -stb r4, 0xE(r3) - -b CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES - -##### END: INITIALIZING CHAT MSG TEXT ########### - -CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES: -lbz r3, CSSDT_CHAT_MSG_COUNT(REG_CSSDT_ADDR) # 4 -cmpwi r3, MAX_CHAT_MESSAGES -blt CSS_ONLINE_CHAT_CHECK_TIMER - -# if last chat message index is 0 and my index is max - 1 (if messages are rotating on the top again) -lbz r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # chat message index -cmpw r3, REG_CHATMSG_MSG_INDEX -bge CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES_SKIP_TOP_ROTATION - -cmpwi REG_CHATMSG_MSG_INDEX, MAX_CHAT_MESSAGE_LINES -ble CSS_ONLINE_CHAT_REMOVE_PROC - -CSS_ONLINE_CHAT_CHECK_MAX_MESSAGES_SKIP_TOP_ROTATION: -lbz r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # chat message index -sub r3, r3, REG_CHATMSG_MSG_INDEX -cmpwi r3, MAX_CHAT_MESSAGES -bgt CSS_ONLINE_CHAT_REMOVE_PROC - -CSS_ONLINE_CHAT_CHECK_TIMER: - -# check timer and decrease until is 0 -cmpwi REG_CHATMSG_TIMER, 0 -bne CSS_ONLINE_CHAT_DECREASE_TIMER - -# if timer is 0, do next func based on timer status -cmpwi REG_CHATMSG_TIMER_STATUS, 0 -beq CSS_ONLINE_CHAT_INIT_TEXT -cmpwi REG_CHATMSG_TIMER_STATUS, 1 -beq CSS_ONLINE_CHAT_INIT_CLEANUP -cmpwi REG_CHATMSG_TIMER_STATUS, 2 -beq CSS_ONLINE_CHAT_REMOVE_PROC - - -CSS_ONLINE_CHAT_DECREASE_TIMER: -subi REG_CHATMSG_TIMER, REG_CHATMSG_TIMER, 1 -stb REG_CHATMSG_TIMER, CSSCMDT_TIMER(REG_CHATMSG_GOBJ_DATA_ADDR) - -b CSS_ONLINE_CHAT_CHECK_EXIT - -CSS_ONLINE_CHAT_INIT_CLEANUP: - -li REG_CHATMSG_TIMER_STATUS, 2 # set timer status to cleanup -stb REG_CHATMSG_TIMER_STATUS, CSSCMDT_TIMER_STATUS(REG_CHATMSG_GOBJ_DATA_ADDR) - -li REG_CHATMSG_TIMER, 20 # reset timer -stb REG_CHATMSG_TIMER, CSSCMDT_TIMER(REG_CHATMSG_GOBJ_DATA_ADDR) - -# add end animation -lwz r3, 0x28 (REG_CHATMSG_GOBJ) -lwz r4, CSSDT_SLPCSS_ADDR(REG_CSSDT_ADDR) -lwz r4, SLPCSS_CHATMSG (r4) -li r5, 1 -branchl r12,0x8016895c - -# Req anim -lwz r3, 0x28 (REG_CHATMSG_GOBJ) -lfs f1, -0x51D8 (rtoc) -branchl r12, JObj_ReqAnimAll - -# free up custom slippi text id data -lwz r3, 0x5C(REG_CHATMSG_MSG_TEXT_STRUCT_ADDR) -branchl r12, HSD_Free - -# remove text -mr r3, REG_CHATMSG_MSG_TEXT_STRUCT_ADDR -branchl r12, Text_RemoveText - -b CSS_ONLINE_CHAT_CHECK_EXIT - -CSS_ONLINE_CHAT_REMOVE_PROC: - -# destroy gobj -mr r3, REG_CHATMSG_GOBJ -branchl r12, GObj_Destroy - -# decrease local message count if this message is local -lwz r4, CSSDT_MSRB_ADDR(REG_CSSDT_ADDR) -lbz r4, MSRB_LOCAL_PLAYER_INDEX(r4) - -#logf LOG_LEVEL_INFO, "MSG LOCAL INDEX %d MSG INDEX %d", "mr r5, 4", "mr r6, 23" - -cmpw REG_CHATMSG_PLAYER_INDEX,r4 -bne SKIP_DECREASE_LOCAL_CHAT_MSG_COUNT -# Decrease local chat message count by 1 -lbz r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CSSDT_ADDR) # chat message index -subi r3, r3, 1 -stb r3, CSSDT_CHAT_LOCAL_MSG_COUNT(REG_CSSDT_ADDR) # store the new message count -#logf LOG_LEVEL_WARN, "local msg count: %d", "mr r5, r3" -SKIP_DECREASE_LOCAL_CHAT_MSG_COUNT: - -# Decrease chat message count by 1 -lbz r3, CSSDT_CHAT_MSG_COUNT(REG_CSSDT_ADDR) # chat message index -subi r3, r3, 1 -stb r3, CSSDT_CHAT_MSG_COUNT(REG_CSSDT_ADDR) # store the new message count -#logf LOG_LEVEL_WARN, "msg count: %d", "mr r5, r3" - -# If This is the last message being removed, reset the Last MSG Index to 0 -lbz r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # chat message index -mr r4, REG_CHATMSG_MSG_INDEX -addi r4, r4, 1 # compare with last index + 1 -cmpw r3, r4 -beq CSS_ONLINE_CHAT_RESET_MSG_INDEX -b CSS_ONLINE_CHAT_CHECK_EXIT - -CSS_ONLINE_CHAT_RESET_MSG_INDEX: -li r3, 0 -stb r3, CSSDT_LAST_CHAT_MSG_INDEX(REG_CSSDT_ADDR) # store the new message index - -CSS_ONLINE_CHAT_CHECK_EXIT: -restore -blr - ################################################################################ # Update subtext function for use only by think function diff --git a/Online/Menus/CSS/Teams/InitTeamToggleButton.asm b/Online/Menus/CSS/Teams/InitTeamToggleButton.asm index b28bf68c..244c11b6 100644 --- a/Online/Menus/CSS/Teams/InitTeamToggleButton.asm +++ b/Online/Menus/CSS/Teams/InitTeamToggleButton.asm @@ -75,7 +75,7 @@ INIT_BUTTON: .set REG_ICON_GOBJ, 20 .set REG_ICON_JOBJ, 21 .set REG_DATA_BUFFER, 23 -backup +backup BKP_DEFAULT_FREE_SPACE_SIZE, 2 loadwz REG_CSSDT_ADDR, CSSDT_BUF_ADDR @@ -225,7 +225,8 @@ lwz r3, 0x08(r3) # offset to Dobj's mobj fmr f1, REG_F_0 # float 0.0 branchl r12, 0x80363C2C # HSD_MObjSetAlpha(mobj, float alpha) -restore + +restore BKP_DEFAULT_FREE_SPACE_SIZE, 2 b EXIT ################################################################################ # Function: Handles per frame updates of Custom Team Button diff --git a/Online/Menus/CSS/Teams/Teams.s b/Online/Menus/CSS/Teams/Teams.s index 38b61d4d..edd4edb2 100644 --- a/Online/Menus/CSS/Teams/Teams.s +++ b/Online/Menus/CSS/Teams/Teams.s @@ -1,5 +1,10 @@ +.ifndef HEADER_TEAMS + # The CheckAutoFill injection contains static data related to auto-fill .set INJ_InitTeamToggleButton, 0x802652f4 # Injection Data Offsets -.set IDO_TEAM_IDX, 0x8 # u8 \ No newline at end of file +.set IDO_TEAM_IDX, 0x8 # u8 + +.endif +.set HEADER_TEAMS, 1 diff --git a/Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm b/Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm index ef71d778..420a84cd 100644 --- a/Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm +++ b/Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm @@ -13,7 +13,7 @@ b CODE_START STATIC_MEMORY_TABLE_BLRL: blrl b FN_FetchSuggestion # IDO_FN_FetchSuggestion -.long 0x0, # IDO_ACB_ADDR, address to buffer +.long 0x0 # IDO_ACB_ADDR, address to buffer CODE_START: # Original line - checks for an L or R press. diff --git a/Online/Menus/InGame/InitInGame.asm b/Online/Menus/InGame/InitInGame.asm index 56d25e62..321c255b 100644 --- a/Online/Menus/InGame/InitInGame.asm +++ b/Online/Menus/InGame/InitInGame.asm @@ -1,5 +1,5 @@ ################################################################################ -# Address: 0x8016e9b4 +# Address: 0x802f6694 ################################################################################ .include "Common/Common.s" @@ -20,9 +20,11 @@ blrl .float 0 .set DOFST_TEXT_BASE_CANVAS_SCALING, DOFST_TEXT_BASE_Z + 4 .float 0.1 +.set DOFST_TEXT_BASE_CANVAS_SCALING_1, DOFST_TEXT_BASE_CANVAS_SCALING + 4 +.float 0.1 # delay values -.set DOFST_TEXT_X_POS, DOFST_TEXT_BASE_CANVAS_SCALING + 4 +.set DOFST_TEXT_X_POS, DOFST_TEXT_BASE_CANVAS_SCALING_1 + 4 .float 270 .set DOFST_TEXT_Y_POS, DOFST_TEXT_X_POS + 4 .float 207 @@ -150,7 +152,6 @@ li r10, COBJ_GXPRI branchl r12, 0x803a611c mr REG_Canvas, r3 - .set REG_ODB_ADDRESS, 30 .set REG_TEXT_STRUCT, 29 .set REG_DATA_ADDR, 28 @@ -165,6 +166,30 @@ stw REG_Canvas, ODB_HUD_CANVAS(REG_ODB_ADDRESS) bl DATA_BLRL mflr REG_DATA_ADDR +# Create and store text struct that will be used for disconnect, desync, and other info texts +li r3, 2 +mr r4, REG_Canvas # HUD canvas used for names and delay (does not stretch in widescreen) +branchl r12, Text_CreateStruct +mr REG_TEXT_STRUCT, r3 + +# Set text kerning to close +li r4, 0x1 +stb r4, 0x49(REG_TEXT_STRUCT) +# Set text to align center +li r4, 0x1 +stb r4, 0x4A(REG_TEXT_STRUCT) + +# Store Base Z Offset +lfs f1, DOFST_TEXT_BASE_Z(REG_DATA_ADDR) #Z offset +stfs f1, 0x8(REG_TEXT_STRUCT) + +# Scale Canvas Down +lfs f1, DOFST_TEXT_BASE_CANVAS_SCALING_1(REG_DATA_ADDR) +stfs f1, 0x24(REG_TEXT_STRUCT) +stfs f1, 0x28(REG_TEXT_STRUCT) + +stw REG_TEXT_STRUCT, ODB_HUD_TEXT_STRUCT(REG_ODB_ADDRESS) + # Get player names li r3, 0 branchl r12, FN_LoadMatchState @@ -458,3 +483,4 @@ restore EXIT: lwz r0, 0x001C (sp) +lwz r31, 0x0014 (sp) diff --git a/Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm b/Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm index aa126919..ba2a244a 100644 --- a/Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm +++ b/Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm @@ -48,8 +48,8 @@ beq RETURN_LOCKED b EXIT LOGGED_IN_STATE: -cmpwi r4, OPTION_RANKED_IDX -beq RETURN_LOCKED +# cmpwi r4, OPTION_RANKED_IDX +# beq RETURN_LOCKED cmpwi r4, OPTION_LOGIN_IDX beq RETURN_LOCKED cmpwi r4, OPTION_UPDATE_IDX diff --git a/Online/Menus/TitleMenu/OnMenuPrep.asm b/Online/Menus/TitleMenu/OnMenuPrep.asm index 9af9265b..ef9a769a 100644 --- a/Online/Menus/TitleMenu/OnMenuPrep.asm +++ b/Online/Menus/TitleMenu/OnMenuPrep.asm @@ -26,8 +26,8 @@ .set REG_JOBJ_DESC_SHAPE_JOINT_ADDR, REG_JOBJ_DESC_MAT_JOINT_ADDR+1 # float registers -.set REG_F_0, 22 -.set REG_F_1, 23 +.set REG_F_0, 31 +.set REG_F_1, 30 # Dialog Constants .set DLG_JOBJ_OFFSET, 0x28 # offset from GOBJ to HSD Object (Jobj we assigned) @@ -46,7 +46,7 @@ .set JOBJ_DESC_DLG_ANIM_JOINT, 0x803efa24 # archive memory address of dialog anim joint .set JOBJ_DESC_DLG_MAT_JOINT, 0x803efa40 # archive memory address of dialog mat joint .set JOBJ_DESC_DLG_SHAPE_JOINT, 0x803efa60 # archive memory address of dialog shape joint -.set JOBJ_CHILD_OFFSET, 0x34 # Pointer to store Child JOBJ on the SP +.set JOBJ_CHILD_OFFSET, BKP_FREE_SPACE_OFFSET # Pointer to store Child JOBJ on the SP # Offset from submenu gobj where we are storing dialog user data buffer when # open @@ -234,7 +234,9 @@ blr FN_OnlineSubmenuThink: blrl -backup +.set NUM_FREG, 0 +.set NUM_GPREG, 18 +backup BKP_DEFAULT_FREE_SPACE_SIZE, NUM_FREG, NUM_GPREG ################################################################################ # Check if confirm dialog is open or not, and prevent input if it is @@ -309,9 +311,8 @@ b FN_OnlineSubmenuThink_INPUT_HANDLERS_END # Option Selected Handlers ################################################################################ FN_OnlineSubmenuThink_HANDLE_RANKED: -li r3, 3 -branchl r12, SFX_Menu_CommonSound -b FN_OnlineSubmenuThink_INPUT_HANDLERS_END +li r3, ONLINE_MODE_RANKED +b FN_OnlineSubmenuThink_GO_TO_CSS FN_OnlineSubmenuThink_HANDLE_UNRANKED: li r3, ONLINE_MODE_UNRANKED @@ -494,7 +495,7 @@ mtctr r3 bctrl FN_OnlineSubmenuThink_EXIT: -restore +restore BKP_DEFAULT_FREE_SPACE_SIZE, NUM_FREG, NUM_GPREG ################################################################################ # Data: OnlineSubmenuOptions @@ -523,8 +524,7 @@ blrl .short 0x0000 FN_CREATE_DIALOG: - -backup +backup BKP_DEFAULT_FREE_SPACE_SIZE, 2 # load jobjects in memory lwz r3, archiveDataBuffer(r13) @@ -684,7 +684,7 @@ mflr r4 # Function li r5, 15 # Priority branchl r12, GObj_AddProc -restore +restore BKP_DEFAULT_FREE_SPACE_SIZE, 2 blr @@ -695,7 +695,7 @@ blr ################################################################################ FN_LogoutDialogThink: #801978fc blrl -backup +backup BKP_DEFAULT_FREE_SPACE_SIZE, 2 # INIT PROPERTIES bl TEXT_PROPERTIES @@ -848,7 +848,8 @@ b FN_LogoutDialogThink_Exit FN_LogoutDialogThink_Exit: -restore + +restore BKP_DEFAULT_FREE_SPACE_SIZE, 2 blr ################################################################################ diff --git a/Online/Menus/VSScreen/InitVsSplash.asm b/Online/Menus/VSScreen/InitVsSplash.asm index f2d978dd..c375fe32 100644 --- a/Online/Menus/VSScreen/InitVsSplash.asm +++ b/Online/Menus/VSScreen/InitVsSplash.asm @@ -22,6 +22,7 @@ .set REG_LABEL_STRING, 20 .set REG_CUR_SUBTEXT_IDX, 21 +# float registers .set REG_POS_X_START, 31 .set REG_POS_Y_START, 30 @@ -281,7 +282,7 @@ b EXIT # f1 - X Pos ################################################################################ INIT_PLAYER_TEXT: -backup +backup BKP_DEFAULT_FREE_SPACE_SIZE, 2 fmr REG_POS_X_START, f1 mr REG_LABEL_COLOR, r3 @@ -349,7 +350,7 @@ blt INIT_PLAYER_NAME_LOOP_START INIT_PLAYER_TEXT_EXIT: -restore +restore BKP_DEFAULT_FREE_SPACE_SIZE, 2 blr diff --git a/Online/Online.s b/Online/Online.s index b2423ebb..adab30cf 100644 --- a/Online/Online.s +++ b/Online/Online.s @@ -1,3 +1,5 @@ +.ifndef HEADER_ONLINE + ################################################################################ # TODO List ################################################################################ @@ -8,7 +10,6 @@ # Offsets from r13 ################################################################################ .set OFST_R13_ODB_ADDR,-0x49e4 # Online data buffer -.set OFST_R13_SB_ADDR,-0x503C # Scene buffer, persists throughout scenes .set OFST_R13_ONLINE_MODE,-0x5060 # Byte, Selected online mode .set OFST_R13_APP_STATE,-0x505F # Byte, App state / online status .set OFST_R13_FORCE_MENU_CLEAR,-0x505E # Byte, Force menu clear @@ -22,7 +23,6 @@ .set OFST_R13_USE_PREMADE_TEXT,-0x5014 # bool, used to make Text_CopyPremadeTextDataToStruct load text data from dolphin .set OFST_R13_ISWIDESCREEN,-0x5020 # bool, used to make Text_CopyPremadeTextDataToStruct load text data from dolphin # r13 offsets used in tournament mode (not sure if completely safe though) -# -0x5040 (r13) # -0x5068 (r13) # -0x7510 (r13) @@ -41,10 +41,27 @@ .set MIN_DELAY_FRAMES, 1 .set MAX_DELAY_FRAMES, 15 .set ROLLBACK_MAX_FRAME_COUNT, 7 -.set PLAYER_MAX_INPUT_SIZE, PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT +.set LGL_LIMIT, 45 # Ledge grabs that exceed this number will result in a loss on timeout + +# I don't know exactly how long the local input buffer has to be but in very rare cases with a length +# of ROLLBACK_MAX_FRAME_COUNT we could overflow into the negative indices: +# [3975] Prior to local input copy. END_FRAME: 3983, LOCAL_INPUTS_IDX: 0 +# [3975] Copying local inputs for rollback. Idx: -2, Offset: -24 +.set LOCAL_INPUTS_COUNT, 2 * ROLLBACK_MAX_FRAME_COUNT + +# Predicted input buffer might be able to bet ROLLBACK_MAX_FRAME_COUNT long but I'm not sure +.set PREDICTED_INPUTS_COUNT, 2 * ROLLBACK_MAX_FRAME_COUNT + +# This one should be fine, Dolphin caps how many inputs it sends to the rollback limit +.set RXB_INPUTS_COUNT, ROLLBACK_MAX_FRAME_COUNT .set UNFREEZE_INPUTS_FRAME, 84 +# Inputs before freeze time are important because if they get zero'd out, inputs on the first +# actionable frame will be treated as new inputs rather than held inputs. +# Think 5 should be more than enough (pad buffer size), 6 to be safe +.set START_SYNC_FRAME, UNFREEZE_INPUTS_FRAME - 6 + .set STATIC_PLAYER_BLOCK_P1, 0x80453080 .set STATIC_PLAYER_BLOCK_LEN, 0xE90 @@ -87,7 +104,7 @@ 0x7 = int8, righttrigger value 0x8 = int8, unk 0x9 = int8, unk -0xA = int8, isConnected (0 = connected, -1 = disconnected) +0xA = int8, isConnected (0 = connected, -1 = disconnected, -3 = stale?) 0xB = padding */ @@ -179,6 +196,34 @@ .set SFXDB_FRAMES, SFXDB_WRITE_INDEX + 1 # SFXS_FRAME_SIZE * ROLLBACK_MAX_FRAME_COUNT .set SFXDB_SIZE, SFXDB_FRAMES + SFXS_FRAME_SIZE * ROLLBACK_MAX_FRAME_COUNT +################################################################################ +# Desync Recovery +################################################################################ +# Desync Fighter Recovery Entry +.set DFRE_STOCKS_REMAINING, 0 # byte +.set DFRE_PERCENT, DFRE_STOCKS_REMAINING + 1 # u16 +.set DFRE_SIZE, DFRE_PERCENT + 2 + +################################################################################ +# Desync Detection +################################################################################ +# Desync Detection Remote Entry +.set DDRE_FRAME, 0 # s32, frame of the checksum +.set DDRE_CHECKSUM, DDRE_FRAME + 4 # u32 +.set DDRE_SIZE, DDRE_CHECKSUM + 4 + +# Desync Detection Local Entry +.set DDLE_FRAME, 0 # s32, frame of the checksum +.set DDLE_CHECKSUM, DDLE_FRAME + 4 # u32 +.set DDLE_RECOVERY_TIMER, DDLE_CHECKSUM + 4 # u32. Seconds +.set DDLE_RECOVERY_FIGHTER_ARR, DDLE_RECOVERY_TIMER + 4 # DFRE_SIZE * 4 +.set DDLE_SIZE, DDLE_RECOVERY_FIGHTER_ARR + DFRE_SIZE * 4 + +# I'm not exactly sure how many local entries we need to keep but our local entries will get +# compared with the opponents' last stabilized frame which with a lot of ping can come pretty late. +# My guess would be we could so 2 * ROLLBACK_MAX_FRAME_COUNT but 3 should definitely be safe +.set DESYNC_ENTRY_COUNT, ROLLBACK_MAX_FRAME_COUNT * 3 + ################################################################################ # Online Data Buffer Offsets ################################################################################ @@ -187,11 +232,14 @@ .set ODB_INPUT_SOURCE_INDEX, ODB_ONLINE_PLAYER_INDEX + 1 # u8 .set ODB_FRAME, ODB_INPUT_SOURCE_INDEX + 1 # u32 .set ODB_RNG_OFFSET, ODB_FRAME + 4 # u32 -.set ODB_GAME_OVER_COUNTER, ODB_RNG_OFFSET + 4 # u8 -.set ODB_IS_GAME_OVER, ODB_GAME_OVER_COUNTER + 1 # bool -.set ODB_IS_DISCONNECTED, ODB_IS_GAME_OVER + 1 # bool +.set ODB_GAME_END_FRAME, ODB_RNG_OFFSET + 4 # u32 +.set ODB_IS_GAME_OVER, ODB_GAME_END_FRAME + 4 # bool +.set ODB_IS_DISCONNECTED, ODB_IS_GAME_OVER + 1 # bool .set ODB_IS_DISCONNECT_STATE_DISPLAYED, ODB_IS_DISCONNECTED + 1 # bool -.set ODB_LAST_LOCAL_INPUTS, ODB_IS_DISCONNECT_STATE_DISPLAYED + 1 # PAD_REPORT_SIZE +.set ODB_IS_DESYNC_STATE_DISPLAYED, ODB_IS_DISCONNECT_STATE_DISPLAYED + 1 # bool +.set ODB_IS_DESYNC_RISK_DISPLAYED, ODB_IS_DESYNC_STATE_DISPLAYED + 1 # bool +.set ODB_IS_FRAME_ADVANCE, ODB_IS_DESYNC_RISK_DISPLAYED + 1 # bool +.set ODB_LAST_LOCAL_INPUTS, ODB_IS_FRAME_ADVANCE + 1 # PAD_REPORT_SIZE .set ODB_DELAY_FRAMES, ODB_LAST_LOCAL_INPUTS + PAD_REPORT_SIZE # u8 .set ODB_DELAY_BUFFER_INDEX, ODB_DELAY_FRAMES + 1 # u8 .set ODB_DELAY_BUFFER, ODB_DELAY_BUFFER_INDEX + 1 # PAD_REPORT_SIZE * MAX_DELAY_FRAMES @@ -201,15 +249,16 @@ .set ODB_ROLLBACK_SHOULD_LOAD_STATE, ODB_ROLLBACK_IS_ACTIVE + 1 # bool .set ODB_ROLLBACK_END_FRAME, ODB_ROLLBACK_SHOULD_LOAD_STATE + 1 # s32 .set ODB_ROLLBACK_LOCAL_INPUTS_IDX, ODB_ROLLBACK_END_FRAME + 4 # u8 -.set ODB_ROLLBACK_LOCAL_INPUTS, ODB_ROLLBACK_LOCAL_INPUTS_IDX + 1 # PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT -.set ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS, ODB_ROLLBACK_LOCAL_INPUTS + PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT # u8 -.set ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS + 1*3 # u8 -.set ODB_ROLLBACK_PREDICTED_INPUTS, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS + 1*3 # PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT -.set ODB_SAVESTATE_IS_ACTIVE, ODB_ROLLBACK_PREDICTED_INPUTS + PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT * 3 # bool -.set ODB_SAVESTATE_FRAME, ODB_SAVESTATE_IS_ACTIVE + 1 # s32 +.set ODB_ROLLBACK_LOCAL_INPUTS, ODB_ROLLBACK_LOCAL_INPUTS_IDX + 1 # PAD_REPORT_SIZE * LOCAL_INPUTS_COUNT +.set ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS, ODB_ROLLBACK_LOCAL_INPUTS + PAD_REPORT_SIZE * LOCAL_INPUTS_COUNT # u8[3] +.set ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS, ODB_ROLLBACK_PREDICTED_INPUTS_READ_IDXS + 1*3 # u8[3] +# Note: I think ODB_ROLLBACK_PREDICTED_INPUTS could probably be ROLLBACK_MAX_FRAME_COUNT length but I'm not 100% sure +.set ODB_ROLLBACK_PREDICTED_INPUTS, ODB_ROLLBACK_PREDICTED_INPUTS_WRITE_IDXS + 1*3 # PAD_REPORT_SIZE * PREDICTED_INPUTS_COUNT * 3 +.set ODB_SAVESTATE_IS_PREDICTING, ODB_ROLLBACK_PREDICTED_INPUTS + PAD_REPORT_SIZE * PREDICTED_INPUTS_COUNT * 3 # bool +.set ODB_SAVESTATE_FRAME, ODB_SAVESTATE_IS_PREDICTING + 1 # s32 .set ODB_PLAYER_SAVESTATE_FRAME, ODB_SAVESTATE_FRAME + 4 # u32 -.set ODB_PLAYER_SAVESTATE_IS_ACTIVE, ODB_PLAYER_SAVESTATE_FRAME + 4*3 # u32[3] -.set ODB_SAVESTATE_SSRB_ADDR, ODB_PLAYER_SAVESTATE_IS_ACTIVE + 3 # u32 +.set ODB_PLAYER_SAVESTATE_IS_PREDICTING, ODB_PLAYER_SAVESTATE_FRAME + 4*3 # u32[3] +.set ODB_SAVESTATE_SSRB_ADDR, ODB_PLAYER_SAVESTATE_IS_PREDICTING + 3 # u32 .set ODB_SAVESTATE_SSCB_ADDR, ODB_SAVESTATE_SSRB_ADDR + 4 # u32 .set ODB_SFXDB_START, ODB_SAVESTATE_SSCB_ADDR + 4 # SFXDB_SIZE .set ODB_LATEST_FRAME, ODB_SFXDB_START + SFXDB_SIZE # u32 @@ -221,21 +270,32 @@ .set ODB_STABLE_FINALIZED_FRAME, ODB_STABLE_SAVESTATE_FRAME + 4 # s32 .set ODB_SHOULD_FORCE_PAD_RENEW, ODB_STABLE_FINALIZED_FRAME + 4 # bool .set ODB_HUD_CANVAS, ODB_SHOULD_FORCE_PAD_RENEW + 1 # u32 -.set ODB_PAUSE_COUNTER, ODB_HUD_CANVAS + 4 # u32 -.set ODB_SIZE, ODB_PAUSE_COUNTER + 4 +.set ODB_HUD_TEXT_STRUCT, ODB_HUD_CANVAS + 4 # u32 +.set ODB_PAUSE_COUNTER, ODB_HUD_TEXT_STRUCT + 4 # u32 +.set ODB_FINALIZED_FRAME, ODB_PAUSE_COUNTER + 4 # u32 +.set ODB_REST_STICK_CHANGE_COUNTER, ODB_FINALIZED_FRAME + 4 # u32 +.set ODB_LOCAL_DESYNC_LAST_FRAME, ODB_REST_STICK_CHANGE_COUNTER + 4 # u32 +.set ODB_LOCAL_DESYNC_WRITE_IDX, ODB_LOCAL_DESYNC_LAST_FRAME + 4 # u8 +.set ODB_LOCAL_DESYNC_ARR, ODB_LOCAL_DESYNC_WRITE_IDX + 1 # DDLE_SIZE * DESYNC_ENTRY_COUNT +.set ODB_DESYNC_RECOVERY_TIMER, ODB_LOCAL_DESYNC_ARR + DDLE_SIZE * DESYNC_ENTRY_COUNT # u32 +.set ODB_DESYNC_RECOVERY_FIGHTER_ARR, ODB_DESYNC_RECOVERY_TIMER + 4 # DFRE_SIZE * 4 +.set ODB_SIZE, ODB_DESYNC_RECOVERY_FIGHTER_ARR + DFRE_SIZE * 4 .set TXB_CMD, 0 # u8 .set TXB_FRAME, TXB_CMD + 1 # s32 -.set TXB_DELAY, TXB_FRAME + 4 # u8 TODO: Delay should be part of some init message or something at start of game +.set TXB_FINALIZED_FRAME, TXB_FRAME + 4 # s32 +.set TXB_FINALIZED_FRAME_CHECKSUM, TXB_FINALIZED_FRAME + 4 # u32 +.set TXB_DELAY, TXB_FINALIZED_FRAME_CHECKSUM + 4 # u8 TODO: Delay should be part of some init message or something at start of game .set TXB_PAD, TXB_DELAY + 1 # PAD_REPORT_SIZE .set TXB_SIZE, TXB_PAD + PAD_REPORT_SIZE .set RXB_RESULT, 0 # u8 .set RXB_OPNT_COUNT, RXB_RESULT + 1 # u8 -.set RXB_OPNT_FRAME_NUMS, RXB_OPNT_COUNT + 1 # s32[3] -.set RXB_OPNT_INPUTS, RXB_OPNT_FRAME_NUMS + 4*3 # PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT * 3 -.set RXB_FINALIZED_FRAME, RXB_OPNT_INPUTS + PAD_REPORT_SIZE * ROLLBACK_MAX_FRAME_COUNT * 3 # s32 -.set RXB_SIZE, RXB_FINALIZED_FRAME + 4 +.set RXB_OPNT_DESYNC_ENTRY, RXB_OPNT_COUNT + 1 # DDRE_SIZE[3] +.set RXB_OPNT_FRAME_NUMS, RXB_OPNT_DESYNC_ENTRY + DDRE_SIZE*3 # s32[3] +.set RXB_SMALLEST_LATEST_FRAME, RXB_OPNT_FRAME_NUMS + 4*3 # s32 +.set RXB_OPNT_INPUTS, RXB_SMALLEST_LATEST_FRAME + 4 # PAD_REPORT_SIZE * RXB_INPUTS_COUNT * 3 +.set RXB_SIZE, RXB_OPNT_INPUTS + PAD_REPORT_SIZE * RXB_INPUTS_COUNT * 3 ################################################################################ # Matchmaking States @@ -260,22 +320,27 @@ .set MSRB_USER_CHATMSG_ID, MSRB_DELAY_FRAMES + 1 # u8 .set MSRB_OPP_CHATMSG_ID, MSRB_USER_CHATMSG_ID + 1 # u8 .set MSRB_CHATMSG_PLAYER_INDEX, MSRB_OPP_CHATMSG_ID + 1 # u8 -.set MSRB_VS_LEFT_PLAYERS, MSRB_CHATMSG_PLAYER_INDEX + 1 # u8 player ports 0xP1P2P3PN -.set MSRB_VS_RIGHT_PLAYERS, MSRB_VS_LEFT_PLAYERS + 4 # u8 player ports 0xP1P2P3PN -.set MSRB_LOCAL_NAME, MSRB_VS_RIGHT_PLAYERS + 4 # string (31) -.set MSRB_P1_NAME, MSRB_LOCAL_NAME + 31 # string (31) -.set MSRB_P2_NAME, MSRB_P1_NAME + 31 # string (31) -.set MSRB_P3_NAME, MSRB_P2_NAME + 31 # string (31) -.set MSRB_P4_NAME, MSRB_P3_NAME + 31 # string (31) -.set MSRB_OPP_NAME, MSRB_P4_NAME + 31 # string (63) -.set MSRB_P1_CONNECT_CODE, MSRB_OPP_NAME + 63 # string (10) hashtag is shift-jis -.set MSRB_P2_CONNECT_CODE, MSRB_P1_CONNECT_CODE + 10 # string (10) hashtag is shift-jis -.set MSRB_P3_CONNECT_CODE, MSRB_P2_CONNECT_CODE + 10 # string (10) hashtag is shift-jis -.set MSRB_P4_CONNECT_CODE, MSRB_P3_CONNECT_CODE + 10 # string (10) hashtag is shift-jis -.set MSRB_ERROR_MSG, MSRB_P4_CONNECT_CODE + 10 # string (241) +.set MSRB_VS_LEFT_PLAYERS, MSRB_CHATMSG_PLAYER_INDEX + 1 # u32 player ports 0xP1P2P3PN +.set MSRB_VS_RIGHT_PLAYERS, MSRB_VS_LEFT_PLAYERS + 4 # u32 player ports 0xP1P2P3PN +.set MSRB_LOCAL_NAME, MSRB_VS_RIGHT_PLAYERS + 4 # char[31] +.set MSRB_P1_NAME, MSRB_LOCAL_NAME + 31 # char[31] +.set MSRB_P2_NAME, MSRB_P1_NAME + 31 # char[31] +.set MSRB_P3_NAME, MSRB_P2_NAME + 31 # char[31] +.set MSRB_P4_NAME, MSRB_P3_NAME + 31 # char[31] +.set MSRB_OPP_NAME, MSRB_P4_NAME + 31 # char[31] +.set MSRB_P1_CONNECT_CODE, MSRB_OPP_NAME + 31 # char[10] hashtag is shift-jis +.set MSRB_P2_CONNECT_CODE, MSRB_P1_CONNECT_CODE + 10 # char[10] hashtag is shift-jis +.set MSRB_P3_CONNECT_CODE, MSRB_P2_CONNECT_CODE + 10 # char[10] hashtag is shift-jis +.set MSRB_P4_CONNECT_CODE, MSRB_P3_CONNECT_CODE + 10 # char[10] hashtag is shift-jis +.set MSRB_P1_SLIPPI_UID, MSRB_P4_CONNECT_CODE + 10 # char[29] +.set MSRB_P2_SLIPPI_UID, MSRB_P1_SLIPPI_UID + 29 # char[29] +.set MSRB_P3_SLIPPI_UID, MSRB_P2_SLIPPI_UID + 29 # char[29] +.set MSRB_P4_SLIPPI_UID, MSRB_P3_SLIPPI_UID + 29 # char[29] +.set MSRB_ERROR_MSG, MSRB_P4_SLIPPI_UID + 29 # char[241] .set ERROR_MESSAGE_LEN, 241 .set MSRB_GAME_INFO_BLOCK, MSRB_ERROR_MSG + ERROR_MESSAGE_LEN # MATCH_STRUCT_LEN -.set MSRB_SIZE, MSRB_GAME_INFO_BLOCK + MATCH_STRUCT_LEN +.set MSRB_MATCH_ID, MSRB_GAME_INFO_BLOCK + MATCH_STRUCT_LEN # char[51] +.set MSRB_SIZE, MSRB_MATCH_ID + 51 ################################################################################ # Player Selections Transfer Buffer @@ -303,7 +368,7 @@ ################################################################################ .set FMTB_CMD, 0 # u8 .set FMTB_ONLINE_MODE, FMTB_CMD + 1 # u8 -.set FMTB_OPP_CONNECT_CODE, FMTB_ONLINE_MODE + 1 # string (18) shift-jis +.set FMTB_OPP_CONNECT_CODE, FMTB_ONLINE_MODE + 1 # char[18] shift-jis .set FMTB_SIZE, FMTB_OPP_CONNECT_CODE + 18 ################################################################################ @@ -374,23 +439,71 @@ # Online status buffer offsets ################################################################################ .set OSB_APP_STATE, 0 # 0 = not logged in, 1 = logged in, 2 = update required -.set OSB_PLAYER_NAME, OSB_APP_STATE + 1 # string (31) -.set OSB_CONNECT_CODE, OSB_PLAYER_NAME + 31 # string (10) hashtag is shift-jis +.set OSB_PLAYER_NAME, OSB_APP_STATE + 1 # char[31] +.set OSB_CONNECT_CODE, OSB_PLAYER_NAME + 31 # char[10] hashtag is shift-jis .set OSB_SIZE, OSB_CONNECT_CODE + 10 ################################################################################ # Define report game buffer offsets and length ################################################################################ -.set RGPB_IS_ACTIVE, 0 # bool, is player active -.set RGPB_STOCKS_REMAINING, RGPB_IS_ACTIVE + 1 # byte +.set RGPB_SLOT_TYPE, 0 # u8, 0 = Human, 1 = CPU, 2 = Demo, 3 = Empty +.set RGPB_STOCKS_REMAINING, RGPB_SLOT_TYPE + 1 # byte .set RGPB_DAMAGE_DONE, RGPB_STOCKS_REMAINING + 1 # float -.set RGPB_SIZE, RGPB_DAMAGE_DONE + 4 +.set RGPB_SYNCED_STOCKS, RGPB_DAMAGE_DONE + 4 # byte. confirmed synced frame last stocks +.set RGPB_SYNCED_DAMAGE, RGPB_SYNCED_STOCKS + 1 # u16. confirmed synced frame last damage +.set RGPB_SIZE, RGPB_SYNCED_DAMAGE + 2 .set RGB_COMMAND, 0 # byte -.set RGB_FRAME_LENGTH, RGB_COMMAND + 1 # s32, number of frames in game -.set RGB_P1_RGPB, RGB_FRAME_LENGTH + 4 # RGPB_SIZE +.set RGB_ONLINE_MODE, RGB_COMMAND + 1 # u8 +.set RGB_FRAME_LENGTH, RGB_ONLINE_MODE + 1 # u32, number of frames in game +.set RGB_GAME_INDEX, RGB_FRAME_LENGTH + 4 # u32, 1-indexed +.set RGB_TIEBREAKER_INDEX, RGB_GAME_INDEX + 4 # u32, 1-indexed, 0 = not tiebreak +.set RGB_WINNER_IDX, RGB_TIEBREAKER_INDEX + 4 # s8 +.set RGB_GAME_END_METHOD, RGB_WINNER_IDX + 1 # u8 +.set RGB_LRAS_INITIATOR, RGB_GAME_END_METHOD + 1 # s8 +.set RGB_SYNCED_TIMER, RGB_LRAS_INITIATOR + 1 # u32 +.set RGB_P1_RGPB, RGB_SYNCED_TIMER + 4 # RGPB_SIZE .set RGB_P2_RGPB, RGB_P1_RGPB + RGPB_SIZE # RGPB_SIZE -.set RGB_SIZE, RGB_P2_RGPB + RGPB_SIZE +.set RGB_P3_RGPB, RGB_P2_RGPB + RGPB_SIZE # RGPB_SIZE +.set RGB_P4_RGPB, RGB_P3_RGPB + RGPB_SIZE # RGPB_SIZE +.set RGB_GAME_INFO_BLOCK, RGB_P4_RGPB + RGPB_SIZE # MATCH_STRUCT_LEN +.set RGB_SIZE, RGB_GAME_INFO_BLOCK + MATCH_STRUCT_LEN + +################################################################################ +# Define game prep data and include macro to create static data +################################################################################ +.set GPDO_MAX_GAMES, 0 # u8 +.set GPDO_CUR_GAME, GPDO_MAX_GAMES + 1 # u16 +.set GPDO_SCORE_BY_PLAYER, GPDO_CUR_GAME + 2 # u8[2] +.set GPDO_PREV_WINNER, GPDO_SCORE_BY_PLAYER + 2 * 1 # u8 +.set GPDO_TIEBREAK_GAME_NUM, GPDO_PREV_WINNER + 1 # u8 +.set GAME_PREP_MAX_RESULT_COUNT, 9 +.set GPDO_GAME_RESULTS, GPDO_TIEBREAK_GAME_NUM + 1 # u8[GAME_PREP_MAX_RESULT_COUNT] +.set GPDO_LAST_STAGE_WIN_BY_PLAYER, GPDO_GAME_RESULTS + GAME_PREP_MAX_RESULT_COUNT # u16[2] +.set GPDO_COLOR_BAN_ACTIVE, GPDO_LAST_STAGE_WIN_BY_PLAYER + 2 * 2 # bool +.set GPDO_COLOR_BAN_CHAR, GPDO_COLOR_BAN_ACTIVE + 1 # u8 +.set GPDO_COLOR_BAN_COLOR, GPDO_COLOR_BAN_CHAR + 1 # u8 +.set GPDO_LAST_GAME_END_MODE, GPDO_COLOR_BAN_COLOR + 1 # u8 +.set GPDO_FN_COMPUTE_RANKED_WINNER, GPDO_LAST_GAME_END_MODE + 1 # u32 +.set GPDO_SIZE, GPDO_FN_COMPUTE_RANKED_WINNER + 4 + +# Warning: When making changes, ensure the offsets above are synced with below + +.macro createGamePrepStaticBlock +.byte 0x0 # GPDO_MAX_GAMES, max games +.hword 0x0 # GPDO_CUR_GAME, current game +.fill 2, 1, 0 # GPDO_SCORE_BY_PLAYER +.byte 0x0 # GPDO_PREV_WINNER, previous winner +.byte 0x0 # GPDO_TIEBREAK_GAME_NUM +.fill GAME_PREP_MAX_RESULT_COUNT, 1, 0 # GPDO_GAME_RESULTS, Take space for 9 bytes +.fill 2, 2, 0 # GPDO_LAST_STAGE_WIN_BY_PLAYER +.byte 0x0 # GPDO_COLOR_BAN_ACTIVE +.byte 0x0 # GPDO_COLOR_BAN_CHAR +.byte 0x0 # GPDO_COLOR_BAN_COLOR +.byte 0x0 # GPDO_LAST_GAME_END_MODE +.long 0x0 # GPDO_FN_COMPUTE_RANKED_WINNER +.align 2 +.endm ################################################################################ # slpCSS Symbol Structure @@ -406,3 +519,7 @@ .set RESP_NORMAL, 1 .set RESP_SKIP, 2 .set RESP_DISCONNECTED, 3 +.set RESP_ADVANCE, 4 + +.endif +.set HEADER_ONLINE, 1 diff --git a/Online/Slippi Online Scene/Header.s b/Online/Slippi Online Scene/Header.s index 0a6a5d11..62f6c7c2 100644 --- a/Online/Slippi Online Scene/Header.s +++ b/Online/Slippi Online Scene/Header.s @@ -1,2 +1,7 @@ +.ifndef HEADER_ONLINE_SCENE + .set SlippiMajorID,8 .set InitialSelection,0 + +.endif +.set HEADER_ONLINE_SCENE, 1 diff --git a/Online/Slippi Online Scene/main.asm b/Online/Slippi Online Scene/main.asm index 00650f02..0199dd72 100644 --- a/Online/Slippi Online Scene/main.asm +++ b/Online/Slippi Online Scene/main.asm @@ -131,6 +131,10 @@ InitMinorSceneStruct_Loop: bl PointerConvert addi r3,REG_MinorStructParse,0x8 bl PointerConvert + addi r3,REG_MinorStructParse,0x10 + bl PointerConvert + addi r3,REG_MinorStructParse,0x14 + bl PointerConvert addi REG_MinorStructParse,REG_MinorStructParse,0x18 b InitMinorSceneStruct_Loop InitMinorSceneStruct_Exit: @@ -149,6 +153,13 @@ load r4, 0x8045abf0 lbz r3, -0x5108(r13) # player index stb r3, 0x6(r4) +# Set the callback to determine winner at the end of the match +bl GamePrepData_BLRL +mflr r4 +bl SinglesDetermineWinner_BLRL +mflr r3 +stw r3, GPDO_FN_COMPUTE_RANKED_WINNER(r4) + ################################################################################ # Set up Zelda to select Sheik as default ################################################################################ @@ -253,6 +264,16 @@ bl SplashSceneDecide .align 2 .long 0x80490880 #Minor Data 1 .long 0x804d68d0 #Minor Data 2 +#GameSetup +.byte 5 #Minor Scene ID +.byte 3 #Amount of persistent heaps +.align 2 +bl GamePrepScenePrep #ScenePrep +bl GamePrepSceneDecide #SceneDecide +.byte 80 #Common Minor ID (Game Preparation) +.align 2 +bl GamePrepData #Minor Data 1 +bl GamePrepData #Minor Data 2 #End .byte -1 .align 2 @@ -318,6 +339,11 @@ blrl */ #endregion +GamePrepData_BLRL: +blrl +GamePrepData: +createGamePrepStaticBlock + #region CSSScenePrep CSSScenePrep: backup @@ -345,8 +371,9 @@ blr CSSSceneDecide: .set REG_MSRB_ADDR, 31 .set REG_MINORSCENE, 30 -.set REG_EVENTCSS_DATA,29 +.set REG_EVENTCSS_DATA, 29 .set REG_VS_SSS_DATA, 28 +.set REG_GAME_PREP_DATA, 27 backup mr REG_MINORSCENE,r3 @@ -370,14 +397,14 @@ b CSSSceneDecide_Exit CSSSceneDecide_Advance: # Check for direct mode lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +beq CSSSceneDecide_Adv_IsRanked cmpwi r3, ONLINE_MODE_UNRANKED beq CSSSceneDecide_Adv_IsUnranked cmpwi r3, ONLINE_MODE_DIRECT beq CSSSceneDecide_Adv_IsDirect cmpwi r3, ONLINE_MODE_TEAMS beq CSSSceneDecide_Adv_IsDirect -cmpwi r3, ONLINE_MODE_RANKED -beq CSSSceneDecide_Adv_IsRanked ################################################################################ # Unranked Mode Logic @@ -389,7 +416,33 @@ b CSSSceneDecide_LoadSplash # Ranked Mode Logic ################################################################################ CSSSceneDecide_Adv_IsRanked: -b CSSSceneDecide_LoadSplash +# Initialize ranked mode data +bl GamePrepData_BLRL +mflr REG_GAME_PREP_DATA + +mr r3, REG_GAME_PREP_DATA +li r4, GPDO_SIZE +branchl r12, Zero_AreaLength + +# Set the callback to determine winner at the end of the match, +# we just zero'd it so we have to set it again +bl SinglesDetermineWinner_BLRL +mflr r3 +stw r3, GPDO_FN_COMPUTE_RANKED_WINNER(REG_GAME_PREP_DATA) + +li r3, 3 +stb r3, GPDO_MAX_GAMES(REG_GAME_PREP_DATA) +li r3, 1 +sth r3, GPDO_CUR_GAME(REG_GAME_PREP_DATA) +li r3, 0 +stb r3, GPDO_TIEBREAK_GAME_NUM(REG_GAME_PREP_DATA) +stb r3, GPDO_COLOR_BAN_ACTIVE(REG_GAME_PREP_DATA) + +# Set next scene as game prep +load r4, 0x80479d30 +li r3, 0x06 +stb r3, 0x5(r4) +b CSSSceneDecide_Exit ################################################################################ # Direct Mode Logic @@ -506,11 +559,33 @@ restore blr #endregion +FN_ReportSetCompletion: +backup +mr r31, r3 + +li r3, 2 +branchl r12, HSD_MemAlloc + +# Write tx data +li r4, CONST_SlippiCmdReportSetCompletion +stb r4, 0(r3) +stb r31, 1(r3) + +# Transfer completion +li r4, 1 +li r5, CONST_ExiWrite +branchl r12, FN_EXITransferBuffer + +restore +blr + #region VSSceneDecide VSSceneDecide: .set REG_MSRB_ADDR, 31 .set REG_TXB_ADDR, 30 .set REG_SHOULD_PICK_STAGE, 29 +.set REG_WINNER_IDX, 28 +.set REG_GPD, 27 backup @@ -522,8 +597,139 @@ li r3, 0 branchl r12, FN_LoadMatchState mr REG_MSRB_ADDR, r3 -VSSceneDecide_UpdateWinner: +########################################################################### +# VSSceneDecide: Handle Ranked Mode +########################################################################### +lbz r3, OFST_R13_ONLINE_MODE(r13) +cmpwi r3, ONLINE_MODE_RANKED +bne VSSceneDecide_SkipRankedHandler + +# If connection is not active, just go back to CSS +lbz r3, MSRB_CONNECTION_STATE(REG_MSRB_ADDR) +cmpwi r3, MM_STATE_IDLE +beq VSSceneDecide_Disconnected + +# I think I can access ODB values here since we are still in the VS scene +# If last match ended in a disconnect, return to CSS +lwz r4, OFST_R13_ODB_ADDR(r13) # ODB address +lbz r3, ODB_IS_DISCONNECT_STATE_DISPLAYED(r4) +cmpwi r3, 1 +beq VSSceneDecide_Disconnected + +b VSSceneDecide_ConnectionActive + +VSSceneDecide_Disconnected: +# Report disconnect +li r3, 1 +bl FN_ReportSetCompletion +# We still trigger disconnection calls here because the previous game can end with disconnected message +# while the connection is still technically active +b VSSceneDecide_DisconnectAndReturnToCSS + +VSSceneDecide_ConnectionActive: +bl GamePrepData_BLRL +mflr REG_GPD + +# Store the result of the last game +load r4, 0x8046b6a0 +lbz r3, 0x8(r4) +stb r3, GPDO_LAST_GAME_END_MODE(REG_GPD) + +# Get the winner of last game +bl SinglesDetermineWinner +mr REG_WINNER_IDX, r3 +cmpwi REG_WINNER_IDX, 0 +bge VSSceneDecide_SkipTieHandler # If winner is not -1, it is not a tie + +# Here we have a tie, we want to start a new one-stock, 3 min game +lbz r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD) +addi r3, r3, 1 +stb r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD) + +# Go to the game prep scene, when tiebreak num is greater than zero it will redirect to game +b VSSceneDecide_MoveToGamePrep +VSSceneDecide_SkipTieHandler: + +# Here we have a conclusive game. Increment game prep game count and scores +stb REG_WINNER_IDX, GPDO_PREV_WINNER(REG_GPD) # Store winner index + +# Set winner ID at game index +lhz r4, GPDO_CUR_GAME(REG_GPD) +addi r4, r4, GPDO_GAME_RESULTS - 1 # Move offset to index in array (cur_game is 1-indexed) +stbx REG_WINNER_IDX, REG_GPD, r4 + +# Increment game score +addi r3, REG_WINNER_IDX, GPDO_SCORE_BY_PLAYER # Get offset for winner +lbzx r4, REG_GPD, r3 +addi r5, r4, 1 +stbx r5, REG_GPD, r3 # Store the game score for the winner + +# Store stage win +mulli r4, REG_WINNER_IDX, 2 +addi r4, r4, GPDO_LAST_STAGE_WIN_BY_PLAYER +lhz r3, MSRB_GAME_INFO_BLOCK + 0xE(REG_MSRB_ADDR) # Load last stage played +sthx r3, REG_GPD, r4 + +lbz r4, GPDO_MAX_GAMES(REG_GPD) +addi r4, r4, 1 +li r3, 2 +divwu r4, r4, r3 # Calculate number of wins needed +cmpw r5, r4 +bge VSSceneDecide_RankedSetOver + +lhz r3, GPDO_CUR_GAME(REG_GPD) +addi r3, r3, 1 +sth r3, GPDO_CUR_GAME(REG_GPD) + +li r3, 0 +stb r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD) + +VSSceneDecide_MoveToGamePrep: +# Go back to game prep, there are more games +load r4, 0x80479d30 +li r3, 0x06 +stb r3, 0x5(r4) +b VSSceneDecide_ModeHandlerEnd + +VSSceneDecide_RankedSetOver: +# Report normal set completion +li r3, 0 +bl FN_ReportSetCompletion + +VSSceneDecide_DisconnectAndReturnToCSS: +# Disconnect from opponent +# Prepare buffer for EXI transfer +li r3, 1 +branchl r12, HSD_MemAlloc +mr REG_TXB_ADDR, r3 + +# Write tx data +li r3, CONST_SlippiCmdCleanupConnections +stb r3, 0(REG_TXB_ADDR) +# Reset connections +mr r3, REG_TXB_ADDR +li r4, 1 +li r5, CONST_ExiWrite +branchl r12, FN_EXITransferBuffer + +mr r3, REG_TXB_ADDR +branchl r12, HSD_Free + +# Allow to return to CSS since ranked set is over + +VSSceneDecide_SkipRankedHandler: +# Go back to CSS +load r4, 0x80479d30 +li r3, 0x01 +stb r3, 0x5(r4) + +VSSceneDecide_ModeHandlerEnd: + +########################################################################### +# VSSceneDecide: Handle Non-Ranked Modes +########################################################################### +VSSceneDecide_UpdateWinner: #Update ISWINNER static bool lbz r3,MSRB_LOCAL_PLAYER_INDEX(REG_MSRB_ADDR) bl CheckIfWonLastGame @@ -548,7 +754,6 @@ b SELECTOR_OVERWRITE_END SELECTOR_OVERWRITE_NON_TEAMS: .set REG_Count,20 .set REG_Winners,21 -# todo: add check for teams (if that ever gets added) # Count number of winners li REG_Count,0 li REG_Winners,0 @@ -598,7 +803,10 @@ HACK_GOLD_TEXT_LOSER_END: # For teams, trick the text into never turning gold (Doesn't work for both LRAS and wins easily) lbz r3, OFST_R13_ONLINE_MODE(r13) cmpwi r3, ONLINE_MODE_TEAMS -bne HACK_GOLD_TEXT_END +beq HACK_GOLD_TEXT_FORCE_OFF +cmpwi r3, ONLINE_MODE_RANKED +bne HACK_GOLD_TEXT_END # Also prevent gold text in ranked +HACK_GOLD_TEXT_FORCE_OFF: li r3, 0 stb r3, 0x4(REG_MATCH_END_STRUCT) HACK_GOLD_TEXT_END: @@ -610,6 +818,7 @@ stb r3, OFST_R13_CHOSESTAGE (r13) # Prepare to reset RNG seed. This fixes the issue where both clients would # random the same character following a game +VSSceneDecide_ResetRNG: # Prepare buffer for EXI transfer li r3, 4 branchl r12, HSD_MemAlloc @@ -640,11 +849,6 @@ stw r3, 0x5F90(r4) #RNG seed mr r3, REG_TXB_ADDR branchl r12, HSD_Free -# Go back to CSS -load r4, 0x80479d30 -li r3, 0x01 -stb r3, 0x5(r4) - # Free the buffer we allocated to get match state mr r3, REG_MSRB_ADDR branchl r12, HSD_Free @@ -1000,6 +1204,107 @@ restore blr #endregion +################################################################################ +# Function: SinglesDetermineWinner +# ------------------------------------------------------------------------------ +# Description: Designed to be used only when playing online (only works with +# ports 1 + 2). Will output the winner of the match or -1 if it's a tie. +# +# Does not handle LRAS +# ------------------------------------------------------------------------------ +# Output: +# r3: winnderIndex # Index of the winner, -1 if tie +################################################################################ +SinglesDetermineWinner_BLRL: +blrl +.set REG_MATCH_END, 31 +.set REG_MATCH_END_P1, 30 +.set REG_MATCH_END_P2, 29 +.set REG_TEMP_VAR, 27 +SinglesDetermineWinner: +backup + +load REG_MATCH_END, 0x80479da4 + +# The following may be needed if we add LGL but are not needed right now +# addi REG_MATCH_END_P1, REG_MATCH_END, 0x58 # Start of player array +# addi REG_MATCH_END_P2, REG_MATCH_END_P1, 0xA8 + +lbz r3, 0x4(REG_MATCH_END) +cmpwi r3, 1 +beq SinglesDetermineWinner_HANDLE_TIMEOUT +cmpwi r3, 2 +beq SinglesDetermineWinner_HANDLE_COMPLETION + +# We can only handle GAME and TIME atm. For LRAS (or something else?), return a tie +b SinglesDetermineWinner_TIE + +SinglesDetermineWinner_HANDLE_TIMEOUT: +# Handle ledge grab limit +li r3, 0 +branchl r12, 0x80040af0 # PlayerBlock_GetCliffhangerStat +mr REG_TEMP_VAR, r3 +li r3, 1 +branchl r12, 0x80040af0 # PlayerBlock_GetCliffhangerStat +cmpwi REG_TEMP_VAR, LGL_LIMIT +ble SinglesDetermineWinner_CHECK_LGL_LOSS +cmpwi r3, LGL_LIMIT +bgt SinglesDetermineWinner_LGL_EXIT # If we branch here both players have more than 45 so ignore LGL +SinglesDetermineWinner_CHECK_LGL_LOSS: +cmpwi REG_TEMP_VAR, LGL_LIMIT +bgt SinglesDetermineWinner_P2_WIN # If P1 has more than 45 ledge grabs, P2 wins +cmpwi r3, LGL_LIMIT +bgt SinglesDetermineWinner_P1_WIN # If P2 has more than 45 ledge grabs, P1 wins +SinglesDetermineWinner_LGL_EXIT: + +li r3, 0 +branchl r12, 0x80033bd8 # PlayerBlock_LoadStocksLeft +mr REG_TEMP_VAR, r3 +li r3, 1 +branchl r12, 0x80033bd8 # PlayerBlock_LoadStocksLeft +cmpw REG_TEMP_VAR, r3 +bgt SinglesDetermineWinner_P1_WIN +blt SinglesDetermineWinner_P2_WIN + +li r3, 0 +branchl r12, 0x800342b4 # PlayerBlock_LoadDamage +mr REG_TEMP_VAR, r3 +li r3, 1 +branchl r12, 0x800342b4 # PlayerBlock_LoadDamage +cmpw REG_TEMP_VAR, r3 +blt SinglesDetermineWinner_P1_WIN +bgt SinglesDetermineWinner_P2_WIN + +# We only get here if stock and percent is the same, if so, it's a tie +b SinglesDetermineWinner_TIE + +SinglesDetermineWinner_HANDLE_COMPLETION: +# Here we check who won by looking at stock counts +li r3, 0 +branchl r12, 0x80033bd8 # PlayerBlock_LoadStocksLeft +cmpwi r3, 0 +bne SinglesDetermineWinner_P1_WIN + +li r3, 1 +branchl r12, 0x80033bd8 # PlayerBlock_LoadStocksLeft +cmpwi r3, 0 +bne SinglesDetermineWinner_P2_WIN + +# If we get here, both players have zero stocks which indicates a same-frame double KO, it's a tie +b SinglesDetermineWinner_TIE + +SinglesDetermineWinner_P1_WIN: +li r3, 0 +b SinglesDetermineWinner_RESTORE_AND_EXIT +SinglesDetermineWinner_P2_WIN: +li r3, 1 +b SinglesDetermineWinner_RESTORE_AND_EXIT +SinglesDetermineWinner_TIE: +li r3, -1 +SinglesDetermineWinner_RESTORE_AND_EXIT: +restore +blr + #region CheckIfWonLastGame CheckIfWonLastGame: .set MatchEndStruct,31 @@ -1078,7 +1383,7 @@ CheckIfWonLastGame_CheckForTeams: CheckIfWonLastGame_FFA: #Check If Player Won lbz r3,0x5D(MatchEndPlayerStruct) - #if so return 1, if not return 0 + # . if so return 1, if not return 0 cmpwi r3,0 beq CheckIfWonLastGame_Won b CheckIfWonLastGame_DidNotWin @@ -1093,6 +1398,82 @@ restore blr #endregion +GamePrepScenePrep: +.set REG_GPD, 31 + +backup + +lwz REG_GPD, 0x10(r3) # Grabs load data + +# Check if this is a tiebreak. If it is a tiebreak, we dont want to invalidate since the same +# characters will be loaded +lbz r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD) +cmpwi r3, 0 +bne SKIP_PRELOAD_INVALIDATE + +# Invalidate pre-load cache otherwise changing one character mid-set crashes +branchl r12, 0x800174bc +SKIP_PRELOAD_INVALIDATE: + +restore +blr + +GamePrepSceneDecide: +.set REG_GPD, 31 +.set REG_MSRB_ADDR, 30 + +backup + +lwz REG_GPD, 0x10(r3) # Grabs load data + +# Get match state info +li r3, 0 +branchl r12, FN_LoadMatchState +mr REG_MSRB_ADDR, r3 + +# If connection is active, do the normal execution +lbz r3, MSRB_CONNECTION_STATE(REG_MSRB_ADDR) +cmpwi r3, MM_STATE_CONNECTION_SUCCESS +beq GamePrepSceneDecide_ExecNormal + +# Here we have disconnected from opponent, go back to CSS + +# In theory this should have already been sent by the game setup scene but there's +# no harm in sending a duplicate and this covers our bases in the case of a poorly timed +# disconnect, such as maybe right before the game tries to load +li r3, 1 +bl FN_ReportSetCompletion + +# Go back to CSS +load r4, 0x80479d30 +li r3, 0x01 +stb r3, 0x5(r4) +b GamePrepSceneDecide_RestoreAndExit + +GamePrepSceneDecide_ExecNormal: +# Check if there was a tie last game and a tiebreak is needed +lbz r3, GPDO_TIEBREAK_GAME_NUM(REG_GPD) +cmpwi r3, 0 +beq GamePrepSceneDecide_DisplaySplash + +# On tiebreak, go right back into VS scene +load r4, 0x80479d30 +li r3, 0x03 +stb r3, 0x5(r4) +b GamePrepSceneDecide_RestoreAndExit + +GamePrepSceneDecide_DisplaySplash: +bl SplashSceneInit + +# This will cause the next scene to be the splash screen +load r4, 0x80479d30 +li r3, 0x05 +stb r3, 0x5(r4) + +GamePrepSceneDecide_RestoreAndExit: +restore +blr + Injection_Exit: #Exit Scene restore diff --git a/Online/Static/CSSUpdateCSP.asm b/Online/Static/CSSUpdateCSP.asm index 5afa141e..cc4ea455 100644 --- a/Online/Static/CSSUpdateCSP.asm +++ b/Online/Static/CSSUpdateCSP.asm @@ -26,25 +26,25 @@ mr REG_CostumeID,r5 mr REG_isNull,r6 # get CSS icon data -branchl r12,FN_GetCSSIconData -mr r5,r3 + branchl r12,FN_GetCSSIconData + mr r5,r3 # get port's icon ID -mulli r3,REG_PlayerID,36 # port index -load r4,0x803f0a48 -add r4,r3,r4 -lbz r3, 0x03C2(r4) # get selected icon + mulli r3,REG_PlayerID,36 # port index + load r4,0x803f0a48 + add r4,r3,r4 + lbz r3, 0x03C2(r4) # get selected icon # get icon ID's UI ID -mulli r3, r3, 28 -add r4, r3, r5 -lbz REG_ExternalID, 0x00DC (r4) # UI char id + mulli r3, r3, 28 + add r4, r3, r5 + lbz REG_ExternalID, 0x00DC (r4) # UI char id # Calculate Costume ID from costume Index -mulli r5, REG_CostumeID, 30 -add r4, REG_ExternalID, r5 + mulli r5, REG_CostumeID, 30 + add r4, REG_ExternalID, r5 # -mr r3,REG_PlayerID -mr r5,REG_isNull -branchl r12, 0x8025D5AC # CSS_UpdateCharCostume? + mr r3,REG_PlayerID + mr r5,REG_isNull + branchl r12, 0x8025D5AC # CSS_UpdateCharCostume? EXIT: restore diff --git a/Online/Static/ChatMessages.asm b/Online/Static/ChatMessages.asm deleted file mode 100644 index 81088bf9..00000000 --- a/Online/Static/ChatMessages.asm +++ /dev/null @@ -1,126 +0,0 @@ -################################################################################ -# Address: FN_LoadChatMessageProperties -################################################################################ -# Inputs: -# r3 - Category direction -# r3: 0x08=up, 0x04=down, 0x01=left, 0x02=left -# r4 - Message chosen (PAD_UP/DOWN/RIGHT/LEFT) -# r4: 0x08=PAD_UP 0x04=PAD_DOWN 0x02=PAD_RIGHT 0x01=PAD_LEFT -################################################################################ -# Returns: -# r3: Address to Text Properties -# r4: Address to Message -################################################################################ -# Description: -# Loads Chat Message Properties and chat message for a given category -################################################################################ - -.include "Common/Common.s" -.include "Online/Online.s" - -# backup where we came from -mflr r5 - -cmpwi r3, 0x08 # PAD_UP -beq INIT_UP_CHAT_TEXT_PROPERTIES -cmpwi r3, 0x04 # PAD_DOWN -beq INIT_DOWN_CHAT_TEXT_PROPERTIES -cmpwi r3, 0x02 # PAD_RIGHT -beq INIT_RIGHT_CHAT_TEXT_PROPERTIES -cmpwi r3, 0x01 # PAD_LEFT -beq INIT_LEFT_CHAT_TEXT_PROPERTIES - -INIT_UP_CHAT_TEXT_PROPERTIES: -bl UP_CHAT_TEXT_PROPERTIES -mflr r3 -b CHECK_MSG_INPUT -INIT_DOWN_CHAT_TEXT_PROPERTIES: -bl DOWN_CHAT_TEXT_PROPERTIES -mflr r3 -b CHECK_MSG_INPUT -INIT_RIGHT_CHAT_TEXT_PROPERTIES: -bl RIGHT_CHAT_TEXT_PROPERTIES -mflr r3 -b CHECK_MSG_INPUT -INIT_LEFT_CHAT_TEXT_PROPERTIES: -bl LEFT_CHAT_TEXT_PROPERTIES -mflr r3 - -CHECK_MSG_INPUT: - -lbz r7, 0(r3) # HEADER length -lbz r8, 1(r3) # UP length -lbz r9, 2(r3) # LEFT length -lbz r10, 3(r3) # RIGHT length - -# save target label in r6 -mr r6, r4 -# calculate address of label -addi r4, r3, 0x4 # Skip over lengths -add r4, r4, r7 # skip over header -cmpwi r6, 0x08 # PAD_UP -beq EXIT -add r4, r4, r8 # skip over up -cmpwi r6, 0x01 # PAD_LEFT -beq EXIT -add r4, r4, r9 # skip over left -cmpwi r6, 0x02 # PAD_RIGHT -beq EXIT -add r4, r4, r10 # skip over right - -EXIT: -# go back to where we were -mtctr r5 -bctr - -UP_CHAT_TEXT_PROPERTIES: -blrl -.byte 7 # length of Header -.byte 4 # length of UP -.byte 9 # length of LEFT -.byte 4 # length of RIGHT -.string "Common" -.string "ggs" -.string "one more" -.string "brb" -.string "good luck" -.align 2 - -LEFT_CHAT_TEXT_PROPERTIES: -blrl -.byte 12 # length of Header -.byte 12 # length of UP -.byte 13 # length of LEFT -.byte 7 # length of RIGHT -.string "Compliments" -.string "well played" -.string "that was fun" -.string "thanks" -.string "too good" -.align 2 - -RIGHT_CHAT_TEXT_PROPERTIES: -blrl -.byte 10 # length of Header -.byte 6 # length of UP -.byte 5 # length of LEFT -.byte 4 # length of RIGHT -.string "Reactions" -.string "sorry" -.string "my b" -.string "lol" -.string "wow" -.align 2 - -DOWN_CHAT_TEXT_PROPERTIES: -blrl -.byte 5 # length of Header -.byte 9 # length of UP -.byte 8 # length of LEFT -.byte 23 # length of RIGHT -.string "Misc" -.string "gotta go" -.string "one sec" -.string "let's play again later" -.string "bad connection" -.align 2 diff --git a/Online/Static/LoadState.asm b/Online/Static/LoadState.asm index d76358f9..f3d53b58 100644 --- a/Online/Static/LoadState.asm +++ b/Online/Static/LoadState.asm @@ -34,9 +34,22 @@ mr REG_SSCB_ADDR, r5 # Determine the SSDB Ptr to read from lbz r6, SSCB_WRITE_INDEX(REG_SSCB_ADDR) +.set REG_LOOP_COUNT, REG_VARIOUS_1 + +li REG_LOOP_COUNT, 0 + # This loop will find the savestate we want to load. Currently there really -# isn't anything useful in the ASM-side savestates but eventually there will be +# isn't anything useful in the ASM-side savestates so currently this logic only really exists +# to ensure we saved a state for the frame requested FIND_FRAME_LOOP_START: +addi REG_LOOP_COUNT, REG_LOOP_COUNT, 1 +cmpwi REG_LOOP_COUNT, ROLLBACK_MAX_FRAME_COUNT +ble LIMIT_NOT_REACHED +# If we get here, the frame requested has not been saved. Perhaps the correct thing to do here +# is to end the game similar to DISCONNECTED but for now let's just assert +logf LOG_LEVEL_NOTICE, "Load state requested for frame %d but frame was not found.", "mr r5, REG_FRAME_INDEX" +b 0 +LIMIT_NOT_REACHED: subi r6, r6, 1 cmpwi r6, 0 bge SKIP_IDX_ADJUST diff --git a/Online/Static/SubtextFunctions.asm b/Online/Static/SubtextFunctions.asm index 5b6ff753..7d46212f 100644 --- a/Online/Static/SubtextFunctions.asm +++ b/Online/Static/SubtextFunctions.asm @@ -11,11 +11,10 @@ # r6 = outline color pointer # r7... = string pointers -# f1 = scale size x -# f2 = scale size y -# f3 = x pos -# f4 = y pos -# f5 = inner text y-scale +# f1 = scale size +# f2 = x pos +# f3 = y pos +# f5 = inner text y-scale (unused?) # f6 = outline offset/size ################################################################################ # Output: @@ -38,16 +37,24 @@ .set REG_TEXT_ID, REG_USE_SLIPPI_ID + 1 # float registers -.set REG_SCALE, REG_TEXT_STRUCT_ADDR -.set REG_X, REG_SCALE+1 -.set REG_Y, REG_X+1 -.set REG_Z, REG_Y + 1 -.set REG_OUTLINE_SIZE, REG_Z+1 -.set REG_OUTLINE_OFFSET, REG_OUTLINE_SIZE+1 # outlines offsets to create size +.set REG_SCALE, 31 +.set REG_X, REG_SCALE-1 +.set REG_Y, REG_X-1 +.set REG_Z, REG_Y-1 +.set REG_OUTLINE_SIZE, REG_Z-1 # looks unused? +.set REG_OUTLINE_OFFSET, REG_OUTLINE_SIZE-1 # outlines offsets to create size .set REG_LOOP_INDEX, 15 .set TEXT_LAST_INDEX, 0 +# Stack pointer offsets +.set SPO_STRING_PTR_1, BKP_FREE_SPACE_OFFSET +.set SPO_STRING_PTR_2, SPO_STRING_PTR_1 + 4 +.set SPO_STRING_PTR_3, SPO_STRING_PTR_2 + 4 +.set SPO_STRING_PTR_4, SPO_STRING_PTR_3 + 4 +.set SPO_STRING_PTR_5, SPO_STRING_PTR_4 + 4 +.set SPO_STRING_PTR_6, SPO_STRING_PTR_5 + 4 + # check which function to run cmpwi r5, 2 beq FN_CREATE_PREMADE_TEXT @@ -56,7 +63,9 @@ beq FN_CREATE_PREMADE_TEXT # FN_CREATE_SUBTEXT ################################################################################ FN_CREATE_SUBTEXT: -backup +.set NUM_FREG, 6 +.set NUM_GPREG, 18 +backup BKP_DEFAULT_FREE_SPACE_SIZE, NUM_FREG, NUM_GPREG # Save arguments mr REG_TEXT_STRUCT_ADDR, r3 @@ -65,12 +74,12 @@ mr REG_OUTLINE, r5 mr REG_OUTLINE_COLOR_ADDR, r6 # Save string pointers -stw r7,0x38(sp) -stw r8,0x3C(sp) -stw r9,0x40(sp) -stw r10,0x44(sp) -stw r11,0x48(sp) -stw r12,0x4C(sp) +stw r7,SPO_STRING_PTR_1(sp) +stw r8,SPO_STRING_PTR_2(sp) +stw r9,SPO_STRING_PTR_3(sp) +stw r10,SPO_STRING_PTR_4(sp) +stw r11,SPO_STRING_PTR_5(sp) +stw r12,SPO_STRING_PTR_6(sp) fmr REG_SCALE, f1 fmr REG_X, f2 @@ -118,7 +127,7 @@ b TEXT_LOOP_INITIALIZE_SUBTEXT TEXT_LOOP_INITIALIZE_SUBTEXT: # Initialize subtext mr r3, REG_TEXT_STRUCT_ADDR -lwz r4, 0x38(sp) +lwz r4, SPO_STRING_PTR_1(sp) branchl r12, Text_InitializeSubtext mr REG_SUBTEXT_INDEX, r3 # SubText Index @@ -152,12 +161,12 @@ branchl r12, Text_ChangeTextColor # Update text with passed format if any mr r3, REG_TEXT_STRUCT_ADDR mr r4, REG_SUBTEXT_INDEX -lwz r5,0x38(sp) -lwz r6,0x3C(sp) -lwz r7,0x40(sp) -lwz r8,0x44(sp) -lwz r9,0x48(sp) -lwz r10,0x4C(sp) +lwz r5,SPO_STRING_PTR_1(sp) +lwz r6,SPO_STRING_PTR_2(sp) +lwz r7,SPO_STRING_PTR_3(sp) +lwz r8,SPO_STRING_PTR_4(sp) +lwz r9,SPO_STRING_PTR_5(sp) +lwz r10,SPO_STRING_PTR_6(sp) branchl r12, Text_UpdateSubtextContents # if reached last index, then end the loop, else increment and go back @@ -176,7 +185,7 @@ b FN_CREATE_SUBTEXT_END INIT_SINGLE_TEXT_START: # Initialize subtext mr r3, REG_TEXT_STRUCT_ADDR -lwz r4,0x38(sp) +lwz r4,SPO_STRING_PTR_1(sp) fmr f1, REG_X fmr f2, REG_Y branchl r12, Text_InitializeSubtext @@ -199,12 +208,12 @@ FN_CREATE_SUBTEXT_UPDATE_TEXT: # Update text with passed format if any mr r3, REG_TEXT_STRUCT_ADDR mr r4, REG_SUBTEXT_INDEX -lwz r5,0x38(sp) -lwz r6,0x3C(sp) -lwz r7,0x40(sp) -lwz r8,0x44(sp) -lwz r9,0x48(sp) -lwz r10,0x4C(sp) +lwz r5,SPO_STRING_PTR_1(sp) +lwz r6,SPO_STRING_PTR_2(sp) +lwz r7,SPO_STRING_PTR_3(sp) +lwz r8,SPO_STRING_PTR_4(sp) +lwz r9,SPO_STRING_PTR_5(sp) +lwz r10,SPO_STRING_PTR_6(sp) branchl r12, Text_UpdateSubtextContents INIT_SINGLE_TEXT_END: @@ -212,14 +221,14 @@ FN_CREATE_SUBTEXT_END: # Return subtext index mr r3, REG_SUBTEXT_INDEX -restore +restore BKP_DEFAULT_FREE_SPACE_SIZE, NUM_FREG, NUM_GPREG blr ################################################################################ # FN_CREATE_PREMADE_TEXT ################################################################################ FN_CREATE_PREMADE_TEXT: -backup +backup BKP_DEFAULT_FREE_SPACE_SIZE, 4 # Save arguments mr REG_TEXT_ID, r3 @@ -267,7 +276,7 @@ branchl r12, Text_CopyPremadeTextDataToStruct # return text struct address mr r3, REG_TEXT_STRUCT_ADDR -restore +restore BKP_DEFAULT_FREE_SPACE_SIZE, 4 blr ################################################################################ diff --git a/Online/Static/UserDisplayFunctions.asm b/Online/Static/UserDisplayFunctions.asm index c4186ff1..244c4aa3 100644 --- a/Online/Static/UserDisplayFunctions.asm +++ b/Online/Static/UserDisplayFunctions.asm @@ -448,7 +448,7 @@ backup # Determine index to select, use first non-locked index load r5, 0x803eae68 lbz r5, 0x08F4(r5) # Load number of options -li r4, 0 +li r4, OPTION_UNRANKED_IDX # Start looping from unranked, don't want to select ranked by default LOOP_FIND_FIRST_UNLOCKED_START: # Function call doesn't overwrite r4, safe to just keep using it li r3, 0x8 # Use online menu ID for function calls diff --git a/Output/Bootloader/bootloader.gct b/Output/Bootloader/bootloader.gct index a46c729f..5343b580 100644 Binary files a/Output/Bootloader/bootloader.gct and b/Output/Bootloader/bootloader.gct differ diff --git a/Output/Bootloader/bootloader.txt b/Output/Bootloader/bootloader.txt index ddd6e8ad..9fc575fa 100644 --- a/Output/Bootloader/bootloader.txt +++ b/Output/Bootloader/bootloader.txt @@ -1,10 +1,11 @@ $Slippi Bootloader [] +0415FF60 38800006 #Bootloader/AddHeap.asm 04346314 48000058 #Bootloader/EXISpoof.asm -C2375380 0000004C #Bootloader/main.asm +C2375380 00000050 #Bootloader/main.asm 3D808034 618C44E0 7D8903A6 4E800421 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 389F0040 7FE3FB78 3D808034 618C40E8 7D8903A6 4E800421 @@ -24,7 +25,7 @@ C2375380 0000004C #Bootloader/main.asm 3D808034 618C4154 7D8903A6 4E800421 3B9C001F 579C0034 -7C9FE214 38840020 +7C9FE214 388400C0 7FE3FB78 7C9F2378 3D808034 618C40E8 7D8903A6 4E800421 @@ -43,43 +44,47 @@ C2375380 0000004C #Bootloader/main.asm 4E800421 93EDC018 3C608000 60635600 93230000 38790008 -4800001D 7C8802A6 +48000039 7C8802A6 3D808000 618C55FC 7D8903A6 4E800421 -480000E0 4E800021 -2C050000 418200D0 -7C0802A6 90010004 -9421FF50 BE810008 -7C9E2378 7CBB2B78 -80BE0000 54A501FE -64BD8000 2C030004 -41820014 2C030006 -41820014 2C0300C2 -41820014 3B9E0004 -48000048 3B9E0008 -48000040 389E0008 -7C7D2050 546301BA -64634800 90610038 -3B810038 807E0004 -1C630008 7C83F214 -387D0004 7C641850 +7F43D378 38800080 +3D808034 618C3EF0 +7D8903A6 4E800421 +906DAFC4 480000E0 +4E800021 2C050000 +418200D0 7C0802A6 +90010004 9421FF20 +BE8100B0 7C9E2378 +7CBB2B78 80BE0000 +54A501FE 64BD8000 +2C030004 41820014 +2C030006 41820014 +2C0300C2 41820014 +3B9E0004 48000048 +3B9E0008 48000040 +389E0008 7C7D2050 546301BA 64634800 -3863FFFC 90640004 -7FA3EB78 7F84E378 -7F65DB78 3D808000 -618C31F4 7D8903A6 -4E800421 7FA3EB78 -7F64DB78 3D808032 -618C8F50 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 -83EDC018 00000000 +90610008 3B810008 +807E0004 1C630008 +7C83F214 387D0004 +7C641850 546301BA +64634800 3863FFFC +90640004 7FA3EB78 +7F84E378 7F65DB78 +3D808000 618C31F4 +7D8903A6 4E800421 +7FA3EB78 7F64DB78 +3D808032 618C8F50 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 BA8100B0 +800100E4 382100E0 +7C0803A6 83EDC018 +60000000 00000000 C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 7C9D2378 7CBF2B78 3D808034 618C7364 7D8903A6 @@ -119,12 +124,12 @@ C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm 4C00012C 7F83E378 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 C20055FC 00000021 #Common/Gecko/ProcessCodeList.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7D1B78 7C7A1B78 7C9E2378 3B800000 807D0000 5463463C @@ -153,8 +158,8 @@ C20055FC 00000021 #Common/Gecko/ProcessCodeList.asm 7F25CB78 7FC903A6 4E800421 7FBDDA14 4BFFFF38 7C7AE850 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 $Early Load Codes, Must Run Before Bootloader [] diff --git a/Output/Console/GALE01r2.ini b/Output/Console/GALE01r2.ini index 08b53ca7..ddd19d17 100644 --- a/Output/Console/GALE01r2.ini +++ b/Output/Console/GALE01r2.ini @@ -50,12 +50,12 @@ 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] +$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 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 2C030000 418200A8 @@ -67,11 +67,11 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 3C608048 80639D30 5463443E 2C030208 806DB654 4082003C -80ADB61C 8885000D +80ADB61C 88850010 2C040000 4082002C -8885000C 2C040000 -40820020 808507B3 -3884FF85 80E507BC +8885000F 2C040000 +40820020 80850909 +3884FF85 80E50916 7C872050 7C041800 40800008 7C832378 907C0005 3BBD0009 @@ -79,52 +79,72 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 38600000 -906DB650 BA810008 -800100B4 382100B0 +906DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C216D884 0000001C #Recording/SendGameEnd.asm +C216D884 00000030 #Recording/SendGameEnd.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 418200A0 +2C030000 41820144 3F208046 6339B6A0 8B590008 2C1A0000 -4182008C 830DB64C +41820130 830DB64C 88780004 2C030000 -4082007C 3C608048 +40820120 3C608048 80639D30 5463443E 2C030208 4082001C 2C1A0002 40820014 -806DB61C 8863000C -2C030000 41820050 +806DB61C 8863000F +2C030000 418200F4 83B80000 38600039 987D0000 9B5D0001 2C1A0007 4082000C 88790001 48000008 3860FFFF 987D0002 -7FA3EB78 38800003 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 38600001 -98780004 BA810008 -800100B4 382100B0 -7C0803A6 819F2514 -60000000 00000000 -C216E74C 000000E9 #Recording/SendGameInfo.asm +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 0000010A #Recording/SendGameInfo.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 4182070C +2C030000 41820814 38600005 3D808037 618CF1E4 7D8903A6 4E800421 7C7B1B78 936DB64C 38800005 3D808000 618CC160 7D8903A6 4E800421 -38600702 3D808037 +38600780 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DB0000 38600000 @@ -136,17 +156,17 @@ C216E74C 000000E9 #Recording/SendGameInfo.asm 7C7C1B78 38600035 987E0000 3860001C 987E0001 38600036 -987E0002 38600248 +987E0002 386002F8 B07E0003 38600037 -987E0005 3860003F +987E0005 38600042 B07E0006 38600038 -987E0008 3860004C +987E0008 38600054 B07E0009 38600039 -987E000B 38600002 +987E000B 38600006 B07E000C 3860003A -987E000E 38600008 +987E000E 3860000C B07E000F 3860003B -987E0011 3860002A +987E0011 3860002C B07E0012 3860003C 987E0014 38600008 B07E0015 3860003D @@ -154,7 +174,7 @@ B07E0015 3860003D 38600010 987E001A 38600204 B07E001B 38600036 987E001D -3C600309 60630100 +3C600311 60630000 907E001E 387E0022 7FE4FB78 38A00138 3D808000 618C31F4 @@ -212,93 +232,125 @@ B07E0015 3860003D 8862F23C 987E01BF 3C608048 80639D30 5463443E B07E01C0 -3C608048 80639D30 -5463443E 2C030208 -4082011C 38600000 -3D808000 618C5610 +3B200000 3C608048 +80639D30 5463443E +2C030208 4082017C +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 -7C791B78 3A800000 -3ABF0060 3AFE01C2 -3B590034 1C74001F +3A940001 2C140004 +4180FFA0 3A800000 +3ABF0060 3AFE023E +3B5900CF 1C74000A 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 40820028 -1C74001F 7C83D214 -7F03C378 38A0001F +1C74000A 7C83D214 +7F03C378 38A0000A 3D808000 618C31F4 7D8903A6 4E800421 4800001C 7F03C378 -3880001F 3D808000 +3880000A 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 4180FFA0 3A800000 3ABF0060 -3AFE023E 3B5900EF -1C74000A 7F03BA14 +3AFE0266 3B5900F7 +1C74001D 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 -40820028 1C74000A +40820028 1C74001D 7C83D214 7F03C378 -38A0000A 3D808000 +38A0001D 3D808000 618C31F4 7D8903A6 4E800421 4800001C -7F03C378 3880000A +7F03C378 3880001D 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 -4180FFA0 7F23CB78 -3D808037 618CF1B0 +4180FFA0 4800001C +387E01C2 38800118 +3D808000 618CC160 7D8903A6 4E800421 -4800001C 387E01C2 -388000A4 3D808000 -618CC160 7D8903A6 -4E800421 7FC3F378 -38800266 38A00001 -3D808000 618C55F0 +3D808000 618CADF4 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 +987E02DA 2C190000 +41820044 387E02DB +38990394 38A00033 +3D808000 618C31F4 7D8903A6 4E800421 -3AD60200 7C16E000 -4180FFA4 7EA3AB78 +3C60803D 6063AD40 +80630000 81830088 +A06C0001 907E030E +886C0006 907E0312 +4800001C 387E02DB +3880003B 3D808000 +618CC160 7D8903A6 +4E800421 2C190000 +41820018 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -38600004 38800007 -38A00000 3D808039 -618C01F0 7D8903A6 -4E800421 48000021 -7C8802A6 38A00000 -3D808038 618CFD54 +7FC3F378 38800316 +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 -48000064 4E800021 -7C0802A6 90010004 -9421FF50 BE810008 -806DB64C 83A30000 -838DB650 7FBDE214 -3860003A 987D0000 -806DB654 907D0001 -3C60804D 80635F90 -907D0005 838DB650 -3B9C0009 938DB650 -BA810008 800100B4 -382100B0 7C0803A6 +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 @@ -306,16 +358,16 @@ BA810008 800100B4 48000021 7C8802A6 38A0000F 3D808038 618CFD54 7D8903A6 -4E800421 48000124 +4E800421 4800012C 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C +90010004 9421FF20 +BE8100B0 806DB64C 83E30000 83CDB650 7FFFF214 3B600000 806DC18C 83A30024 -2C1D0000 418200D8 +2C1D0000 418200E0 3B7B0001 2C1B000F -418100CC 839D002C +418100D4 839D002C 3860003B 987F0000 806DB654 907F0001 807C0010 B07F0005 @@ -337,23 +389,24 @@ BE810008 806DB64C 2C030000 4182000C 8863000C 48000008 3860FFFF 987F002A -83CDB650 3BDE002B -93CDB650 3BFF002B +A07C0DA8 B07F002B +83CDB650 3BDE002D +93CDB650 3BFF002D 83BD0008 2C1D0000 -4082FF30 BA810008 -800100B4 382100B0 +4082FF28 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3C608017 00000000 -C206DA34 00000035 #Recording/SendGamePostFrame.asm +C206DA34 00000038 #Recording/SendGamePostFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820168 +2C030000 41820180 887F221F 546306F7 -4082015C 8B7F000C +40820174 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600038 987D0000 @@ -395,17 +448,20 @@ B07D0030 887F1968 807F0090 907D0041 807F00EC 907D0045 807F195C 907D0049 -838DB650 3B9C004D -938DB650 BA810008 -800100B4 382100B0 +807F0014 907D004D +A07F18EC B07D0051 +A07F2088 B07D0053 +838DB650 3B9C0055 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C206B0DC 0000002B #Recording/SendGamePreFrame.asm +C206B0E0 0000002E #Recording/SendGamePreFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820118 +2C030000 41820130 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600037 @@ -436,19 +492,25 @@ B07D0031 80640030 3884FFFF 2C040000 40A00008 38840005 1C840030 7C632214 -1C9B000C 7C632214 -88630002 987D003B +1C9B000C 7C832214 +88640002 987D003B +88640003 987D0040 +88640004 987D0041 +88640005 987D0042 807F1830 907D003C -838DB650 3B9C0040 -938DB650 BA810008 -800100B4 382100B0 +838DB650 3B9C0043 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 881F2219 -60000000 00000000 -C2005604 00000008 #Recording/ShouldRecord.asm +807F065C 00000000 +C2005604 0000000B #Recording/ShouldRecord.asm 3C608048 80639D30 5463443E 2C030202 -4182001C 2C030302 -41820014 2C030208 +41820034 2C030302 +4182002C 2C030208 +41820024 2C03010F +4182001C 2C030120 +41820014 2C03010E 4182000C 38600000 4800000C 38600001 48000004 4E800020 @@ -462,9 +524,14 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 3BE00000 887E221F 5460EFFF 41820038 887E000C @@ -474,8 +541,8 @@ C20055F8 0000000F #Common/GetIsFollower.asm 1C030003 7C640214 88030002 2C000000 40820008 3BE00001 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C216D294 00000006 #Common/IncrementFrameIndex.asm @@ -535,7 +602,7 @@ C2068EEC 00000006 #Common/Initialize Player Data/Init Player Data.asm 60000000 00000000 C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 7C9D2378 7CBF2B78 3D808034 618C7364 7D8903A6 @@ -544,28 +611,28 @@ C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm 38600000 7C1E18AC 38630020 7C03E800 4180FFF4 7C0004AC -4C00012C 38600000 +4C00012C 38600001 38800000 3D808034 618C64C0 7D8903A6 -4E800421 38600000 +4E800421 38600001 3D808034 618C6D80 7D8903A6 4E800421 -38600000 38800000 +38600001 38800000 38A00005 3D808034 618C6688 7D8903A6 -4E800421 38600000 +4E800421 38600001 7FC4F378 7FA5EB78 7FE6FB78 38E00000 3D808034 618C5E60 7D8903A6 4E800421 -38600000 3D808034 +38600001 3D808034 618C5F4C 7D8903A6 -4E800421 38600000 +4E800421 38600001 3D808034 618C67B4 7D8903A6 4E800421 -38600000 3D808034 +38600001 3D808034 618C6E74 7D8903A6 -4E800421 38600000 +4E800421 38600001 3D808034 618C65CC 7D8903A6 4E800421 2C1F0000 40820020 @@ -575,12 +642,12 @@ C20055F0 0000002C #Common/EXITransferBuffer/EXITransferBuffer.asm 4C00012C 7F83E378 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 C20055FC 00000021 #Common/Gecko/ProcessCodeList.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7D1B78 7C7A1B78 7C9E2378 3B800000 807D0000 5463463C @@ -609,8 +676,8 @@ C20055FC 00000021 #Common/Gecko/ProcessCodeList.asm 7F25CB78 7FC903A6 4E800421 7FBDDA14 4BFFFF38 7C7AE850 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 04005600 801910E0 #Common/ConsoleOverrides/SetGeckoStart.asm C20AC5B8 00000002 #Common/NanaDeterminism/NanaDeterminism.asm @@ -621,7 +688,7 @@ C21D24FC 00000018 #Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor. C2F00000 42F00000 42A00000 C1A00000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 4BFFFFD9 7FA802A6 807E002C A86300EE 3D808003 @@ -638,6 +705,6 @@ FC020840 41810018 C03D000C FC020840 4180000C 38600001 48000008 38600000 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 diff --git a/Output/Console/g_core.bin b/Output/Console/g_core.bin index f36f91aa..0181fa60 100644 Binary files a/Output/Console/g_core.bin and b/Output/Console/g_core.bin differ diff --git a/Output/Console/g_core_porta.bin b/Output/Console/g_core_porta.bin index bb95fce5..0fcb63ff 100644 Binary files a/Output/Console/g_core_porta.bin and b/Output/Console/g_core_porta.bin differ diff --git a/Output/Console/g_crash_output.bin b/Output/Console/g_crash_output.bin new file mode 100644 index 00000000..5b914e6f Binary files /dev/null and b/Output/Console/g_crash_output.bin differ diff --git a/Output/Console/g_crash_output.txt b/Output/Console/g_crash_output.txt new file mode 100644 index 00000000..cc7093f2 --- /dev/null +++ b/Output/Console/g_crash_output.txt @@ -0,0 +1,38 @@ +$Crash Output [Fizzi] +*Outputs additional information when the game crashes +C2394A68 00000023 #Debugging/AdditionalCrashInfo/AdditionalCrashInfo.asm +480000C8 4E800021 +506C6163 65686F6C +64657220 666F7220 +56657273 696F6E20 +616E6420 4170706C +69636174 696F6E3A +20763030 2E30302E +30302D30 30302D30 +30303030 30303000 +20436F6E 736F6C65 +2072756E 74696D65 +3A202564 20667261 +6D65730A 00205363 +656E6520 72756E74 +696D653A 20256420 +6672616D 65730A00 +0A000000 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7F1B78 +4BFFFF6D 7C6802A6 +7C63FA14 3D808034 +618C56A8 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +3B640000 38600078 +4BFFFFB5 38600000 +4BFFFFAD 38600078 +4BFFFFA5 38600040 +3C80804D 60847420 +80840000 4BFFFF91 +3860005D 3C808048 +80849D60 4BFFFF81 +38600078 4BFFFF79 +60000000 00000000 diff --git a/Output/Console/g_gameplay_both.bin b/Output/Console/g_gameplay_both.bin index 473f2574..ebdb73a4 100644 Binary files a/Output/Console/g_gameplay_both.bin and b/Output/Console/g_gameplay_both.bin differ diff --git a/Output/Console/g_gameplay_both.txt b/Output/Console/g_gameplay_both.txt new file mode 100644 index 00000000..0fc24724 --- /dev/null +++ b/Output/Console/g_gameplay_both.txt @@ -0,0 +1,185 @@ +$Ledge Grab Limit [UnclePunch] +*Enforces ledge grab limit +C21A5E90 00000002 #Ledge Grab Limit +386000B4 907F0010 +7FE3FB78 00000000 +0416EBD8 60000000 +041B0498 60000000 +041B05CC 38000000 +041B05C8 38C00001 +C2165C48 00000066 +7C0802A6 90010004 +9421FF00 BC610008 +7C7F1B78 887F0004 +2C030001 408202F8 +3BC10080 3BA00000 +38600000 907E0000 +907E0004 1C7D00A8 +7C83FA14 88640058 +2C030003 41820028 +8864005D 2C030000 +4082001C 887E0000 +38630001 987E0000 +389E0001 3863FFFF +7FA321AE 3BBD0001 +2C1D0006 4180FFC0 +887E0000 2C030001 +40810118 3BA00000 +387E0001 7C63E8AE +3D808003 618C42B4 +7D8903A6 4E800421 +7C7C1B78 3B600000 +7C1BE800 4182002C +387E0001 7C63D8AE +3D808003 618C42B4 +7D8903A6 4E800421 +7C03E000 4080000C +7F7DDB78 4BFFFFB4 +3B7B0001 887E0000 +7C1B1800 4180FFC4 +4800000C 3BBD0001 +4BFFFF98 3B600000 +387E0001 7C83D8AE +1C6400A8 7C63FA14 +38BE0001 7CA5E8AE +7C042800 4182000C +38800001 48000008 +38800000 9883005D +9883005E 3B7B0001 +887E0000 7C1B1800 +4180FFC0 3B600000 +387E0001 7F43D8AE +387E0001 7C63E8AE +7C1A1800 41820034 +7F43D378 3D808003 +618C42B4 7D8903A6 +4E800421 7C03E000 +40820018 1C7A00A8 +7C63FA14 38800000 +9883005D 9883005E +3B7B0001 887E0000 +7C1B1800 4180FFAC +807F0008 3880003C +7C6323D6 7C8323D6 +38600000 3D808032 +618C2DA0 7D8903A6 +4E800421 48000151 +7C6802A6 C0430000 +EC2100B2 FC20081E +D8210080 83A10084 +3B800000 3B600000 +1C7C00A8 7C83FA14 +88640058 2C030003 +41820030 8864005D +2C030000 40820024 +7F83E378 3D808004 +618C0AF0 7D8903A6 +4E800421 7C03E800 +40810008 3B7B0001 +3B9C0001 2C1C0006 +4180FFB8 2C1B0001 +418100E4 2C1B0000 +418200DC 3B800000 +1C7C00A8 7C83FA14 +88640058 2C030003 +4182004C 8864005D +2C030000 41820010 +2C030001 41820008 +48000034 7F83E378 +3D808004 618C0AF0 +7D8903A6 4E800421 +7C03E800 41810018 +1C7C00A8 7C83FA14 +38600000 9864005D +9864005E 3B9C0001 +2C1C0006 4180FF9C +3B800000 1C7C00A8 +7C83FA14 88640058 +2C030003 41820040 +8864005D 2C030000 +40820034 7F83E378 +3D808004 618C0AF0 +7D8903A6 4E800421 +7C03E800 40810018 +1C7C00A8 7C83FA14 +38600001 9864005D +9864005E 3B9C0001 +2C1C0006 4180FFA8 +4800000C 4E800021 +40B6DABA B8610008 +80010104 38210100 +7C0803A6 8803000F +60000000 00000000 + +$Disable Wobbling [UnclePunch] +*Break out of grab after three Nana hits +C20DB880 00000003 #External/PreventWobbling/Init Wobble Count Air.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C20DBBD4 00000003 #External/PreventWobbling/Init Wobble Count Ground.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C208F090 0000003D #External/PreventWobbling/Wobble Check.asm +807B0010 2C0300DF +418001D8 2C0300E4 +418101D0 807B1A58 +2C030000 418201C4 +8083002C 88842222 +5484077B 418201B4 +809B1868 7C032000 +41820034 A0A40000 +2C050006 4082019C +80A4002C 80850518 +7C032000 4082018C +A0650DA8 A09B2386 +7C032000 4182017C +48000018 80A3002C +A0652088 A09B2386 +7C032000 41820164 +B07B2386 887B2384 +38630001 987B2384 +3D808016 618CB168 +7D8903A6 4E800421 +2C030000 4082013C +887B2384 2C030003 +40810130 7C0802A6 +90010004 9421FF20 +BE8100B0 829B1A58 +7E83A378 3D80800D +618CA698 7D8903A6 +4E800421 8074002C +8863000C 38800001 +3D808003 618C418C +7D8903A6 4E800421 +2C030000 418200C4 +7C751B78 8095002C +8804221F 54000673 +408200B0 88042219 +5400077B 408200A4 +88042071 5400E73E +2C00000D 41820094 +80A400E0 2C050000 +4082001C 38800000 +3D80800D 618CA698 +7D8903A6 4E800421 +48000070 8075002C +3D808007 618CD5D4 +7D8903A6 4E800421 +8075002C 80ADAEB4 +C0050374 C023002C +FC200850 EC000072 +D0030080 C0050378 +D0030084 C0029700 +D0032340 C0229700 +C0429704 FC600890 +7EA3AB78 388000E6 +38A00000 38C00000 +3D808006 618C93AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808008 618CF0C8 +7D8903A6 4E800420 +801B0010 00000000 diff --git a/Output/Console/g_gameplay_lgl.txt b/Output/Console/g_gameplay_lgl.txt new file mode 100644 index 00000000..ff57b198 --- /dev/null +++ b/Output/Console/g_gameplay_lgl.txt @@ -0,0 +1,112 @@ +$Ledge Grab Limit [UnclePunch] +*Enforces ledge grab limit +C21A5E90 00000002 #Ledge Grab Limit +386000B4 907F0010 +7FE3FB78 00000000 +0416EBD8 60000000 +041B0498 60000000 +041B05CC 38000000 +041B05C8 38C00001 +C2165C48 00000066 +7C0802A6 90010004 +9421FF00 BC610008 +7C7F1B78 887F0004 +2C030001 408202F8 +3BC10080 3BA00000 +38600000 907E0000 +907E0004 1C7D00A8 +7C83FA14 88640058 +2C030003 41820028 +8864005D 2C030000 +4082001C 887E0000 +38630001 987E0000 +389E0001 3863FFFF +7FA321AE 3BBD0001 +2C1D0006 4180FFC0 +887E0000 2C030001 +40810118 3BA00000 +387E0001 7C63E8AE +3D808003 618C42B4 +7D8903A6 4E800421 +7C7C1B78 3B600000 +7C1BE800 4182002C +387E0001 7C63D8AE +3D808003 618C42B4 +7D8903A6 4E800421 +7C03E000 4080000C +7F7DDB78 4BFFFFB4 +3B7B0001 887E0000 +7C1B1800 4180FFC4 +4800000C 3BBD0001 +4BFFFF98 3B600000 +387E0001 7C83D8AE +1C6400A8 7C63FA14 +38BE0001 7CA5E8AE +7C042800 4182000C +38800001 48000008 +38800000 9883005D +9883005E 3B7B0001 +887E0000 7C1B1800 +4180FFC0 3B600000 +387E0001 7F43D8AE +387E0001 7C63E8AE +7C1A1800 41820034 +7F43D378 3D808003 +618C42B4 7D8903A6 +4E800421 7C03E000 +40820018 1C7A00A8 +7C63FA14 38800000 +9883005D 9883005E +3B7B0001 887E0000 +7C1B1800 4180FFAC +807F0008 3880003C +7C6323D6 7C8323D6 +38600000 3D808032 +618C2DA0 7D8903A6 +4E800421 48000151 +7C6802A6 C0430000 +EC2100B2 FC20081E +D8210080 83A10084 +3B800000 3B600000 +1C7C00A8 7C83FA14 +88640058 2C030003 +41820030 8864005D +2C030000 40820024 +7F83E378 3D808004 +618C0AF0 7D8903A6 +4E800421 7C03E800 +40810008 3B7B0001 +3B9C0001 2C1C0006 +4180FFB8 2C1B0001 +418100E4 2C1B0000 +418200DC 3B800000 +1C7C00A8 7C83FA14 +88640058 2C030003 +4182004C 8864005D +2C030000 41820010 +2C030001 41820008 +48000034 7F83E378 +3D808004 618C0AF0 +7D8903A6 4E800421 +7C03E800 41810018 +1C7C00A8 7C83FA14 +38600000 9864005D +9864005E 3B9C0001 +2C1C0006 4180FF9C +3B800000 1C7C00A8 +7C83FA14 88640058 +2C030003 41820040 +8864005D 2C030000 +40820034 7F83E378 +3D808004 618C0AF0 +7D8903A6 4E800421 +7C03E800 40810018 +1C7C00A8 7C83FA14 +38600001 9864005D +9864005E 3B9C0001 +2C1C0006 4180FFA8 +4800000C 4E800021 +40B6DABA B8610008 +80010104 38210100 +7C0803A6 8803000F +60000000 00000000 diff --git a/Output/Console/g_gameplay_wobbling.bin b/Output/Console/g_gameplay_wobbling.bin index 36a418e9..9186834b 100644 Binary files a/Output/Console/g_gameplay_wobbling.bin and b/Output/Console/g_gameplay_wobbling.bin differ diff --git a/Output/Console/g_gameplay_wobbling.txt b/Output/Console/g_gameplay_wobbling.txt new file mode 100644 index 00000000..5dd0a59e --- /dev/null +++ b/Output/Console/g_gameplay_wobbling.txt @@ -0,0 +1,72 @@ +$Disable Wobbling [UnclePunch] +*Breaks Popo's grab after four pummels if the victim has not left hitstun since the first pummel. +C20DB880 00000003 #External/PreventWobbling/Init Wobble Count Air.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C20DBBD4 00000003 #External/PreventWobbling/Init Wobble Count Ground.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C208F090 0000003D #External/PreventWobbling/Wobble Check.asm +807B0010 2C0300DF +418001D8 2C0300E4 +418101D0 807B1A58 +2C030000 418201C4 +8083002C 88842222 +5484077B 418201B4 +809B1868 7C032000 +41820034 A0A40000 +2C050006 4082019C +80A4002C 80850518 +7C032000 4082018C +A0650DA8 A09B2386 +7C032000 4182017C +48000018 80A3002C +A0652088 A09B2386 +7C032000 41820164 +B07B2386 887B2384 +38630001 987B2384 +3D808016 618CB168 +7D8903A6 4E800421 +2C030000 4082013C +887B2384 2C030003 +40810130 7C0802A6 +90010004 9421FF20 +BE8100B0 829B1A58 +7E83A378 3D80800D +618CA698 7D8903A6 +4E800421 8074002C +8863000C 38800001 +3D808003 618C418C +7D8903A6 4E800421 +2C030000 418200C4 +7C751B78 8095002C +8804221F 54000673 +408200B0 88042219 +5400077B 408200A4 +88042071 5400E73E +2C00000D 41820094 +80A400E0 2C050000 +4082001C 38800000 +3D80800D 618CA698 +7D8903A6 4E800421 +48000070 8075002C +3D808007 618CD5D4 +7D8903A6 4E800421 +8075002C 80ADAEB4 +C0050374 C023002C +FC200850 EC000072 +D0030080 C0050378 +D0030084 C0029700 +D0032340 C0229700 +C0429704 FC600890 +7EA3AB78 388000E6 +38A00000 38C00000 +3D808006 618C93AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808008 618CF0C8 +7D8903A6 4E800420 +801B0010 00000000 diff --git a/Output/Console/g_lag_pd.txt b/Output/Console/g_lag_pd.txt new file mode 100644 index 00000000..79cfd3ef --- /dev/null +++ b/Output/Console/g_lag_pd.txt @@ -0,0 +1,8 @@ +$Polling Drift Fix [Dan Salvato] +*Removes polling drift phenomenon causing variable input lag +C21A4DA0 00000003 #Polling Drift Fix [Dan Salvato] +901C0000 3D808001 +618C95FC 7D8903A6 +4E800421 00000000 +041A4DB4 60000000 +04019860 4BFFFD9D diff --git a/Output/Console/g_lag_pdhalfvb.txt b/Output/Console/g_lag_pdhalfvb.txt new file mode 100644 index 00000000..f7b348c3 --- /dev/null +++ b/Output/Console/g_lag_pdhalfvb.txt @@ -0,0 +1,62 @@ +$Polling Drift + Half Visual Buffer Fixes [tauKhan, UnclePunch] +*Removes polling drift phenomenon causing variable input lag +*Prevents visual buffer from accruing 1/2 frame of lag +C21A4D98 00000007 #Polling Drift Fix + Half Visual Buffer [tauKhan] +8062A6F4 2C030001 +40820028 8062A6F0 +2C030002 4182001C +386DBD88 3D808034 +618CBA14 7D8803A6 +4E800021 4BFFFFD4 +60000000 00000000 +C21A5050 0000000B +8062A6F4 2C030001 +40820044 8062A6F0 +2C030002 40820038 +4800001C 8062A6F0 +2C030002 41820028 +8062A6F4 2C030001 +4082001C 386DBD88 +3D808034 618CBA14 +7D8803A6 4E800021 +4BFFFFD4 38600000 +60000000 00000000 +C21A4BEC 00000015 +4800007D 7C0802A6 +90010004 9421FFF8 +386DBD88 8082A6F0 +38840001 9082A6F0 +2C040001 40820014 +3D808001 618C95FC +7D8803A6 4E800021 +8082A6F0 2C040002 +40820014 3D808034 +618CBB00 7D8803A6 +4E800021 38600001 +9062A6F4 38604000 +38635624 3C808043 +B0642A42 8001000C +38210008 7C0803A6 +4E800020 7C6802A6 +3D808034 618CE894 +7D8803A6 4E800021 +3C608048 3C80801A +380446F4 38800000 +60000000 00000000 +04158268 C82280A0 +C234EB60 00000007 +8062A6F0 2C030001 +4080001C 38600000 +9062A6F4 3C608043 +38804000 388455FC +B0832A42 38600000 +9062A6F0 386DBD88 +60000000 00000000 +04397878 4800020C +C21A4570 00000006 #External/Lag Reduction/Force HD/480pDeflickerOff.asm +3C608046 6063B0F0 +38800001 90830008 +38600000 3D808015 +618CF588 7D8903A6 +4E800421 38600000 +60000000 00000000 diff --git a/Output/Console/g_mods_friendlies.bin b/Output/Console/g_mods_friendlies.bin index e78999de..73c7d84f 100644 Binary files a/Output/Console/g_mods_friendlies.bin and b/Output/Console/g_mods_friendlies.bin differ diff --git a/Output/Console/g_mods_friendlies.txt b/Output/Console/g_mods_friendlies.txt new file mode 100644 index 00000000..160332e9 --- /dev/null +++ b/Output/Console/g_mods_friendlies.txt @@ -0,0 +1,333 @@ +$Full friendlies codes [Achilles, UnclePunch] +*Friendlies mods to improve fair competition and speed up sessions +C216E510 00000098 #External/NeutralSpawn/NeutralSpawn.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808016 618CB41C +7D8903A6 4E800421 +2C030000 40820480 +2C1C0005 40800478 +3C608048 80639D30 +5463443E 2C03021C +41820464 3C608048 +80639D30 5463443E +2C03010F 41820450 +887F24D0 2C030001 +41820054 3B200000 +3B400000 7F43D378 +3D808003 618C241C +7D8903A6 4E800421 +2C030003 41820010 +7C1CD000 41820014 +3B390001 3B5A0001 +2C1A0004 4081FFD0 +7F83E378 7F24CB78 +88BF24D0 48000115 +480003F4 3B400000 +3B000000 3B200000 +7F23CB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820024 7F23CB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03D000 40820008 +3B180001 3B390001 +2C190004 4180FFBC +2C180001 41820398 +2C180002 41810390 +3B5A0001 2C1A0003 +4180FF98 3B200000 +3B410080 3B000000 +3AC00000 3AE00000 +7EE3BB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820028 7EE3BB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03C800 4082000C +7EF8D1AE 3B180001 +3AF70001 2C170004 +4180FFB8 3B390001 +2C190003 4180FFA4 +3B200000 7C79D0AE +7C03E000 41820010 +3B390001 2C190004 +4180FFEC 7F83E378 +7F24CB78 88BF24D0 +48000009 480002E8 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7F1B78 7C9E2378 +7CBD2B78 48000121 +7F8802A6 80CD9348 +38A00000 807C0000 +2C03FFFF 4182005C +7C033000 4182000C +3B9C0044 4BFFFFE8 +3B9C0004 1C7D0020 +7F9C1A14 1C7E0008 +7F9C1A14 38810080 +C03C0000 D0240000 +C03C0004 D0240004 +38600000 90640008 +7FE3FB78 3D808003 +618C2768 7D8903A6 +4E800421 48000054 +2C1D0001 4182000C +7FC3F378 48000014 +4800023D 7C6802A6 +7C63F0AE 48000004 +38810080 3D808022 +618C4E64 7D8903A6 +4E800421 7FE3FB78 +38810080 3D808003 +618C2768 7D8903A6 +4E800421 48000004 +7FE3FB78 38810080 +3D808003 618C26CC +7D8903A6 4E800421 +C0210080 C002A8E8 +FC010040 4081000C +C022A8F8 48000008 +C022A8CC 7FE3FB78 +3D808003 618C3094 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +00000020 C2700000 +41200000 42700000 +41200000 C1A00000 +41200000 41A00000 +41200000 C2700000 +41200000 C1A00000 +41200000 42700000 +41200000 41A00000 +41200000 0000001F +C21B3333 420CCCCD +421B3333 420CCCCD +00000000 41000000 +00000000 4279999A +C21B3333 420CCCCD +C21B3333 40A00000 +421B3333 420CCCCD +421B3333 40A00000 +00000008 C2280000 +41D4CCCD 42280000 +41E00000 00000000 +423B999A 00000000 +409CCCCD C2280000 +41D4CCCD C2280000 +40A00000 42280000 +41E00000 42280000 +40A00000 0000001C +C23A6666 4214CCCD +423D999A 42153333 +00000000 40E00000 +00000000 426A0000 +C23A6666 4214CCCD +C23A6666 40A00000 +423D999A 42153333 +423D999A 40A00000 +00000002 C2250000 +41A80000 42250000 +41D80000 00000000 +40A80000 00000000 +42400000 C2250000 +41A80000 C2250000 +40A00000 42250000 +41D80000 42250000 +40A00000 00000003 +C2200000 42000000 +42200000 42000000 +428C0000 40E00000 +C28C0000 40E00000 +C2200000 42000000 +C2200000 40A00000 +42200000 42000000 +42200000 40A00000 +FFFFFFFF 4E800021 +00030102 BA8100B0 +800100E4 382100E0 +7C0803A6 881F24D0 +60000000 00000000 +C22FCCD8 0000000D #External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm +3C608046 6063B6A0 +886324D0 2C030001 +41820050 887F0000 +3D808003 618C4110 +7D8903A6 4E800421 +8083002C 80640004 +2C030010 40820010 +80640010 2C0300EC +41820010 8864221E +54630631 41820014 +3D80802F 618CCCC8 +7D8903A6 4E800420 +281E0000 00000000 +04261B1C 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm +04261B30 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm +042605FC 38C00003 #External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm +044DC47C C0200000 #External/CSS Player Hands Default to HMN Button/Change Default Hand Position.asm +C2261A6C 00000005 #External/CSS Player Hands Default to HMN Button/Fix A Button Buffer When Exiting Name Entry.asm +88BF0005 2C050002 +40820014 3D808026 +618C1B6C 7D8903A6 +4E800420 1C130024 +60000000 00000000 +C2266CE0 0000000C #External/Disable FoD During Doubles/Disable FoD During Doubles.asm +80CD8840 38C61CB0 +80A60018 3C60E700 +606300B0 7C632A79 +41820010 2C030020 +41820008 48000034 +806DB610 88630018 +2C030001 41820014 +38600001 50652EB4 +90A60018 48000014 +38600000 50652EB4 +90A60018 48000004 +38600001 00000000 +C22608D8 0000001D #External/Toggle Rumble From CSS/Toggle Rumble From CSS.asm +887F0007 2C030000 +40820090 889F0004 +7C972378 800D8840 +7C602214 88A31CC0 +57800739 40820010 +5780077B 4082003C +480000AC 28050001 +418200A4 7EE3BB78 +38800000 38A0000E +38C00000 38ED9950 +3D808037 618C8430 +7D8903A6 4E800421 +38800001 48000010 +28050000 41820070 +38800000 7EE3BB78 +3D808015 618CED4C +7D8903A6 4E800421 +38800001 989F0007 +3C80C040 909F0014 +C03F0014 C0428E0C +C01F000C EC01002A +D01F000C FC600850 +FC030840 41810008 +EC6300B2 D07F0014 +4180001C C0828258 +FC032040 41810010 +38800000 909F0014 +989F0007 889F0004 +60000000 00000000 +C2259B84 00000008 #External/Stage Striking/Random_Stage_Fix.asm +5460063F 41820038 +1C9E001C 38040008 +7C1F00AE 2C000000 +40820024 3800001D +7C0903A6 38600000 +389F0000 90640004 +3884001C 4200FFF8 +2C030000 00000000 +C2259C40 0000001F #External/Stage Striking/Stage_Striking.asm +39600000 3D408045 +614AC388 38600000 +3C80803F 608406D0 +28000013 4082000C +39600001 48000010 +28000000 408200C0 +48000034 2C03001D +408000B4 2C0B0002 +4182004C 1CA3001C +7CA52214 88C5000A +80AA0000 7CA53430 +54A507FF 40820088 +4800002C 806DB600 +5460056B 4082001C +546006F7 40820008 +48000074 39600002 +38600000 4BFFFFB0 +886DB60E 2C03001D +4080005C 1CA3001C +7CA52214 38C00000 +2C0B0002 40820008 +38C00002 98C50008 +80A50000 2C030016 +41800008 80A50010 +3CC04400 2C0B0002 +40820008 38C00000 +90C50038 38C0001E +98CDB60E 2C0B0000 +4182000C 38630001 +4BFFFF4C 28000000 +60000000 00000000 +C21A5B14 0000000A #External/Salty Runback/Salty Runback.asm +3BA00000 7FA3EB78 +3D80801A 618C3680 +7D8903A6 4E800421 +548005EF 4182000C +548005AD 40820014 +3BBD0001 2C1D0004 +4180FFD4 4800000C +3B600002 48000008 +3B600000 3BA00000 +60000000 00000000 +C2265220 00000028 #Common/Winners Names are Gold on CSS/Change Name Color.asm +7FA3EB78 48000039 +2C030000 4182012C +807B0000 38800000 +3CA0FFD7 60A50000 +90A10100 38A10100 +3D80803A 618C74F0 +7D8903A6 4E800421 +48000100 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7D1B78 +3FE08047 63FF9DA4 +1FDD00A8 7FDEFA14 +887F0004 2C030000 +418200B0 3C608046 +6063B6A0 886324D0 +889F0006 7C032000 +40820098 887E0058 +2C030003 4182008C +887F0004 2C030007 +40820040 887F0006 +2C030001 40820024 +887F0000 1C6300A8 +7C63FA14 8863005F +889E005F 7C032000 +41820058 4800005C +887F0000 7C03E800 +41820048 4800004C +887F0006 2C030001 +40820028 7FE3FB78 +3D808016 618C54A0 +7D8903A6 4E800421 +889E005F 7C032000 +41820020 48000014 +887E005D 2C030000 +41820010 48000004 +38600000 48000008 +38600001 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +880DB655 00000000 +C216EA30 00000004 #Common/Winners Names are Gold on CSS/Remember Who LRA Started.asm +981E0010 2C000007 +40820014 3C808046 +6084B6A0 88840001 +989E000C 00000000 +C216EBAC 0000000C #Common/CSS KO Stars/Asign KO Stars Upon Exiting Dairantou.asm +3C608047 60639D30 +88630000 2C030002 +40820040 3C60803D +6063DA00 3D80801A +618C5F00 7D8903A6 +4E800421 3C60803D +6063DA00 808D8840 +38840590 38A00001 +3D80801A 618C5F64 +7D8903A6 4E800421 +8001001C 83E10014 +60000000 00000000 diff --git a/Output/Console/g_mods_stealth.bin b/Output/Console/g_mods_stealth.bin index b7ea2c0a..7b544526 100644 Binary files a/Output/Console/g_mods_stealth.bin and b/Output/Console/g_mods_stealth.bin differ diff --git a/Output/Console/g_mods_stealth.txt b/Output/Console/g_mods_stealth.txt new file mode 100644 index 00000000..61fad918 --- /dev/null +++ b/Output/Console/g_mods_stealth.txt @@ -0,0 +1,172 @@ +$Stealth tournament codes [Achilles, UnclePunch] +*Tournament mods to improve fair competition +C216E510 00000098 #External/NeutralSpawn/NeutralSpawn.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808016 618CB41C +7D8903A6 4E800421 +2C030000 40820480 +2C1C0005 40800478 +3C608048 80639D30 +5463443E 2C03021C +41820464 3C608048 +80639D30 5463443E +2C03010F 41820450 +887F24D0 2C030001 +41820054 3B200000 +3B400000 7F43D378 +3D808003 618C241C +7D8903A6 4E800421 +2C030003 41820010 +7C1CD000 41820014 +3B390001 3B5A0001 +2C1A0004 4081FFD0 +7F83E378 7F24CB78 +88BF24D0 48000115 +480003F4 3B400000 +3B000000 3B200000 +7F23CB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820024 7F23CB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03D000 40820008 +3B180001 3B390001 +2C190004 4180FFBC +2C180001 41820398 +2C180002 41810390 +3B5A0001 2C1A0003 +4180FF98 3B200000 +3B410080 3B000000 +3AC00000 3AE00000 +7EE3BB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820028 7EE3BB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03C800 4082000C +7EF8D1AE 3B180001 +3AF70001 2C170004 +4180FFB8 3B390001 +2C190003 4180FFA4 +3B200000 7C79D0AE +7C03E000 41820010 +3B390001 2C190004 +4180FFEC 7F83E378 +7F24CB78 88BF24D0 +48000009 480002E8 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7F1B78 7C9E2378 +7CBD2B78 48000121 +7F8802A6 80CD9348 +38A00000 807C0000 +2C03FFFF 4182005C +7C033000 4182000C +3B9C0044 4BFFFFE8 +3B9C0004 1C7D0020 +7F9C1A14 1C7E0008 +7F9C1A14 38810080 +C03C0000 D0240000 +C03C0004 D0240004 +38600000 90640008 +7FE3FB78 3D808003 +618C2768 7D8903A6 +4E800421 48000054 +2C1D0001 4182000C +7FC3F378 48000014 +4800023D 7C6802A6 +7C63F0AE 48000004 +38810080 3D808022 +618C4E64 7D8903A6 +4E800421 7FE3FB78 +38810080 3D808003 +618C2768 7D8903A6 +4E800421 48000004 +7FE3FB78 38810080 +3D808003 618C26CC +7D8903A6 4E800421 +C0210080 C002A8E8 +FC010040 4081000C +C022A8F8 48000008 +C022A8CC 7FE3FB78 +3D808003 618C3094 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +00000020 C2700000 +41200000 42700000 +41200000 C1A00000 +41200000 41A00000 +41200000 C2700000 +41200000 C1A00000 +41200000 42700000 +41200000 41A00000 +41200000 0000001F +C21B3333 420CCCCD +421B3333 420CCCCD +00000000 41000000 +00000000 4279999A +C21B3333 420CCCCD +C21B3333 40A00000 +421B3333 420CCCCD +421B3333 40A00000 +00000008 C2280000 +41D4CCCD 42280000 +41E00000 00000000 +423B999A 00000000 +409CCCCD C2280000 +41D4CCCD C2280000 +40A00000 42280000 +41E00000 42280000 +40A00000 0000001C +C23A6666 4214CCCD +423D999A 42153333 +00000000 40E00000 +00000000 426A0000 +C23A6666 4214CCCD +C23A6666 40A00000 +423D999A 42153333 +423D999A 40A00000 +00000002 C2250000 +41A80000 42250000 +41D80000 00000000 +40A80000 00000000 +42400000 C2250000 +41A80000 C2250000 +40A00000 42250000 +41D80000 42250000 +40A00000 00000003 +C2200000 42000000 +42200000 42000000 +428C0000 40E00000 +C28C0000 40E00000 +C2200000 42000000 +C2200000 40A00000 +42200000 42000000 +42200000 40A00000 +FFFFFFFF 4E800021 +00030102 BA8100B0 +800100E4 382100E0 +7C0803A6 881F24D0 +60000000 00000000 +C22FCCD8 0000000D #External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm +3C608046 6063B6A0 +886324D0 2C030001 +41820050 887F0000 +3D808003 618C4110 +7D8903A6 4E800421 +8083002C 80640004 +2C030010 40820010 +80640010 2C0300EC +41820010 8864221E +54630631 41820014 +3D80802F 618CCCC8 +7D8903A6 4E800420 +281E0000 00000000 +04261B1C 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm +04261B30 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm +042605FC 38C00003 #External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm diff --git a/Output/Console/g_mods_tournament.bin b/Output/Console/g_mods_tournament.bin index 28913631..bf90ab76 100644 Binary files a/Output/Console/g_mods_tournament.bin and b/Output/Console/g_mods_tournament.bin differ diff --git a/Output/Console/g_mods_tournament.txt b/Output/Console/g_mods_tournament.txt new file mode 100644 index 00000000..74e55da9 --- /dev/null +++ b/Output/Console/g_mods_tournament.txt @@ -0,0 +1,263 @@ +$Full tournament codes [Achilles, UnclePunch] +*Tournament mods to improve fair competition +C216E510 00000098 #External/NeutralSpawn/NeutralSpawn.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808016 618CB41C +7D8903A6 4E800421 +2C030000 40820480 +2C1C0005 40800478 +3C608048 80639D30 +5463443E 2C03021C +41820464 3C608048 +80639D30 5463443E +2C03010F 41820450 +887F24D0 2C030001 +41820054 3B200000 +3B400000 7F43D378 +3D808003 618C241C +7D8903A6 4E800421 +2C030003 41820010 +7C1CD000 41820014 +3B390001 3B5A0001 +2C1A0004 4081FFD0 +7F83E378 7F24CB78 +88BF24D0 48000115 +480003F4 3B400000 +3B000000 3B200000 +7F23CB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820024 7F23CB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03D000 40820008 +3B180001 3B390001 +2C190004 4180FFBC +2C180001 41820398 +2C180002 41810390 +3B5A0001 2C1A0003 +4180FF98 3B200000 +3B410080 3B000000 +3AC00000 3AE00000 +7EE3BB78 3D808003 +618C241C 7D8903A6 +4E800421 2C030003 +41820028 7EE3BB78 +3D808003 618C3370 +7D8903A6 4E800421 +7C03C800 4082000C +7EF8D1AE 3B180001 +3AF70001 2C170004 +4180FFB8 3B390001 +2C190003 4180FFA4 +3B200000 7C79D0AE +7C03E000 41820010 +3B390001 2C190004 +4180FFEC 7F83E378 +7F24CB78 88BF24D0 +48000009 480002E8 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7F1B78 7C9E2378 +7CBD2B78 48000121 +7F8802A6 80CD9348 +38A00000 807C0000 +2C03FFFF 4182005C +7C033000 4182000C +3B9C0044 4BFFFFE8 +3B9C0004 1C7D0020 +7F9C1A14 1C7E0008 +7F9C1A14 38810080 +C03C0000 D0240000 +C03C0004 D0240004 +38600000 90640008 +7FE3FB78 3D808003 +618C2768 7D8903A6 +4E800421 48000054 +2C1D0001 4182000C +7FC3F378 48000014 +4800023D 7C6802A6 +7C63F0AE 48000004 +38810080 3D808022 +618C4E64 7D8903A6 +4E800421 7FE3FB78 +38810080 3D808003 +618C2768 7D8903A6 +4E800421 48000004 +7FE3FB78 38810080 +3D808003 618C26CC +7D8903A6 4E800421 +C0210080 C002A8E8 +FC010040 4081000C +C022A8F8 48000008 +C022A8CC 7FE3FB78 +3D808003 618C3094 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +00000020 C2700000 +41200000 42700000 +41200000 C1A00000 +41200000 41A00000 +41200000 C2700000 +41200000 C1A00000 +41200000 42700000 +41200000 41A00000 +41200000 0000001F +C21B3333 420CCCCD +421B3333 420CCCCD +00000000 41000000 +00000000 4279999A +C21B3333 420CCCCD +C21B3333 40A00000 +421B3333 420CCCCD +421B3333 40A00000 +00000008 C2280000 +41D4CCCD 42280000 +41E00000 00000000 +423B999A 00000000 +409CCCCD C2280000 +41D4CCCD C2280000 +40A00000 42280000 +41E00000 42280000 +40A00000 0000001C +C23A6666 4214CCCD +423D999A 42153333 +00000000 40E00000 +00000000 426A0000 +C23A6666 4214CCCD +C23A6666 40A00000 +423D999A 42153333 +423D999A 40A00000 +00000002 C2250000 +41A80000 42250000 +41D80000 00000000 +40A80000 00000000 +42400000 C2250000 +41A80000 C2250000 +40A00000 42250000 +41D80000 42250000 +40A00000 00000003 +C2200000 42000000 +42200000 42000000 +428C0000 40E00000 +C28C0000 40E00000 +C2200000 42000000 +C2200000 40A00000 +42200000 42000000 +42200000 40A00000 +FFFFFFFF 4E800021 +00030102 BA8100B0 +800100E4 382100E0 +7C0803A6 881F24D0 +60000000 00000000 +C22FCCD8 0000000D #External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm +3C608046 6063B6A0 +886324D0 2C030001 +41820050 887F0000 +3D808003 618C4110 +7D8903A6 4E800421 +8083002C 80640004 +2C030010 40820010 +80640010 2C0300EC +41820010 8864221E +54630631 41820014 +3D80802F 618CCCC8 +7D8903A6 4E800420 +281E0000 00000000 +04261B1C 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm +04261B30 60000000 #External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm +042605FC 38C00003 #External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm +044DC47C C0200000 #External/CSS Player Hands Default to HMN Button/Change Default Hand Position.asm +C2261A6C 00000005 #External/CSS Player Hands Default to HMN Button/Fix A Button Buffer When Exiting Name Entry.asm +88BF0005 2C050002 +40820014 3D808026 +618C1B6C 7D8903A6 +4E800420 1C130024 +60000000 00000000 +C2266CE0 0000000C #External/Disable FoD During Doubles/Disable FoD During Doubles.asm +80CD8840 38C61CB0 +80A60018 3C60E700 +606300B0 7C632A79 +41820010 2C030020 +41820008 48000034 +806DB610 88630018 +2C030001 41820014 +38600001 50652EB4 +90A60018 48000014 +38600000 50652EB4 +90A60018 48000004 +38600001 00000000 +C22608D8 0000001D #External/Toggle Rumble From CSS/Toggle Rumble From CSS.asm +887F0007 2C030000 +40820090 889F0004 +7C972378 800D8840 +7C602214 88A31CC0 +57800739 40820010 +5780077B 4082003C +480000AC 28050001 +418200A4 7EE3BB78 +38800000 38A0000E +38C00000 38ED9950 +3D808037 618C8430 +7D8903A6 4E800421 +38800001 48000010 +28050000 41820070 +38800000 7EE3BB78 +3D808015 618CED4C +7D8903A6 4E800421 +38800001 989F0007 +3C80C040 909F0014 +C03F0014 C0428E0C +C01F000C EC01002A +D01F000C FC600850 +FC030840 41810008 +EC6300B2 D07F0014 +4180001C C0828258 +FC032040 41810010 +38800000 909F0014 +989F0007 889F0004 +60000000 00000000 +C2259B84 00000008 #External/Stage Striking/Random_Stage_Fix.asm +5460063F 41820038 +1C9E001C 38040008 +7C1F00AE 2C000000 +40820024 3800001D +7C0903A6 38600000 +389F0000 90640004 +3884001C 4200FFF8 +2C030000 00000000 +C2259C40 0000001F #External/Stage Striking/Stage_Striking.asm +39600000 3D408045 +614AC388 38600000 +3C80803F 608406D0 +28000013 4082000C +39600001 48000010 +28000000 408200C0 +48000034 2C03001D +408000B4 2C0B0002 +4182004C 1CA3001C +7CA52214 88C5000A +80AA0000 7CA53430 +54A507FF 40820088 +4800002C 806DB600 +5460056B 4082001C +546006F7 40820008 +48000074 39600002 +38600000 4BFFFFB0 +886DB60E 2C03001D +4080005C 1CA3001C +7CA52214 38C00000 +2C0B0002 40820008 +38C00002 98C50008 +80A50000 2C030016 +41800008 80A50010 +3CC04400 2C0B0002 +40820008 38C00000 +90C50038 38C0001E +98CDB60E 2C0B0000 +4182000C 38630001 +4BFFFF4C 28000000 +60000000 00000000 diff --git a/Output/Console/g_pal.bin b/Output/Console/g_pal.bin index e6ab4b5d..11ec37cb 100644 Binary files a/Output/Console/g_pal.bin and b/Output/Console/g_pal.bin differ diff --git a/Output/Console/g_pal.txt b/Output/Console/g_pal.txt new file mode 100644 index 00000000..96281e1c --- /dev/null +++ b/Output/Console/g_pal.txt @@ -0,0 +1,259 @@ +$PAL Toggle [UnclePunch] +*Includes all character balances, Samus Cannot Bomb Jump Out of Zair, Remove Extender, DK Keeps Charge When Hit During Up B, Detection Bubbles Do Not Skip Hurtbox Collision Check, Freeze Glitch Fix, PAL Stock Icons and PAL CSS Indicator +C2068F30 0000009B #External/PAL/Core/Character DAT Patcher.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +83FE010C 83FF0008 +3BFFFFE0 807D0000 +2C03001B 4080049C +48000071 480000A9 +480000B9 48000151 +48000179 48000179 +48000229 48000239 +48000281 480002F9 +48000311 48000311 +48000311 48000311 +48000321 48000321 +48000389 48000389 +48000391 48000391 +480003A9 480003A9 +480003B9 480003B9 +480003C9 480003C9 +480003C9 48000429 +7C8802A6 1C630004 +7C841A14 80A40000 +54A501BA 7CA42A14 +80650000 80850004 +2C0300FF 41820014 +7C63FA14 90830000 +38A50008 4BFFFFE4 +480003F0 00003344 +3F547AE1 00003360 +42C40000 000000FF +0000379C 42920000 +00003908 40000000 +0000390C 40866666 +00003910 3DEA0EA1 +00003928 41A00000 +00003C04 2C01480C +00004720 1B968013 +00004734 1B968013 +0000473C 04000009 +00004A40 2C006811 +00004A4C 281B0013 +00004A50 0D00010B +00004A54 2C806811 +00004A60 281B0013 +00004A64 0D00010B +00004B24 2C00680D +00004B30 0F104013 +00004B38 2C80380D +00004B44 0F104013 +000000FF 0000380C +00000007 00004EF8 +2C003803 00004F08 +0F80000B 00004F0C +2C802003 00004F1C +0F80000B 000000FF +000000FF 00004D10 +3FC00000 00004D70 +42940000 00004DD4 +41900000 00004DE0 +41900000 000083AC +2C000009 000083B8 +348C8011 00008400 +348C8011 00008430 +0500008B 00008438 +041A0500 00008444 +0500008B 000084DC +05780578 000085B8 +1000010B 000085C0 +03E801F4 000085CC +1000010B 000085D4 +038403E8 000085E0 +1000010B 00008818 +0B00010B 0000882C +0B00010B 000088F8 +041A0BB8 0000893C +041A0BB8 00008980 +041A0BB8 000089E0 +04FEF704 000000FF +000036CC 42EC0000 +000037C4 0C000000 +000000FF 00003468 +3F666666 000039D8 +440C0000 00003A44 +B4990011 00003A48 +1B8C008F 00003A58 +B4990011 00003A5C +1B8C008F 00003A6C +B4990011 00003A70 +1B8C008F 00003B30 +440C0000 000000FF +000045C8 2C015010 +000045D4 2D198013 +000045DC 2C80B010 +000045E8 2D198013 +000049C4 2C00680A +000049D0 281B8013 +000049D8 2C80780A +000049E4 281B8013 +000049F0 2C006808 +000049FC 231B8013 +00004A04 2C807808 +00004A10 231B8013 +00005C98 1E0C8080 +00005CF4 B4800C90 +00005D08 B4800C90 +000000FF 00003A1C +B4940013 00003A64 +2C000015 00003A70 +B4928013 000000FF +000000FF 000000FF +000000FF 0000647C +B49A4017 00006480 +64001097 000000FF +000000FF 000033E4 +42DE0000 00004528 +2C013011 00004534 +B4988013 0000453C +2C813011 00004548 +B4988013 00004550 +2D002011 0000455C +B4988013 000045F8 +2C01300F 00004608 +0F00010B 0000460C +2C81280F 0000461C +0F00010B 00004AEC +2C007003 00004B00 +2C803803 000000FF +000000FF 0000485C +2C00000F 000000FF +000000FF 000037B0 +3F59999A 000037CC +42AA0000 00005520 +87118013 000000FF +000000FF 00003B8C +440C0000 00003D0C +440C0000 000000FF +000000FF 000050E4 +B4990013 000050F8 +B4990013 000000FF +000000FF 000000FF +00004EB0 02BCFF38 +00004EBC 14000123 +00004EC4 038401F4 +00004ED0 14000123 +00004ED8 044C04B0 +00004EE4 14000123 +0000505C 2C006815 +0000506C 14080123 +00005070 2C806015 +00005080 14080123 +00005084 2D002015 +00005094 14080123 +000000FF 000000FF +BA8100B0 800100E4 +382100E0 7C0803A6 +3C60803C 00000000 +C22F9A3C 00000007 #External/PAL/Core/PAL Stock Icons.asm +48000021 7C8802A6 +80640000 907D002C +907D0030 80640004 +907D003C 48000010 +4E800021 3F59999A +C1A80000 801D0014 +60000000 00000000 +C210FC44 00000002 #External/PAL/Core/Additional/DK_AerialUpB.asm +3C008011 60000074 +60000000 00000000 +C210FB64 00000002 #External/PAL/Core/Additional/DK_GroundedUpB.asm +3C008011 60000074 +60000000 00000000 +040796E0 60000000 #External/PAL/Core/Additional/DetectionHitboxes.asm +041239A8 60000000 #External/PAL/Core/Additional/ICs_FreezeGlitch.asm +043CE4D4 00240464 #External/PAL/Core/Additional/Samus_BombJump.asm +042B7E54 48000088 #External/PAL/Core/Additional/Samus_Extender1.asm +042B808C 48000084 #External/PAL/Core/Additional/Samus_Extender2.asm +C2266978 00000050 #External/PAL/Indicators/PAL CSS Indicator.asm +7D8802A6 48000031 +7C8802A6 7D8803A6 +3D800035 618C6A60 +7C6C1850 38A00238 +3D808000 618C31F4 +7D8903A6 4E800421 +48000244 4E800021 +00000000 00006FFF +00007FF1 00007FF0 +00007FF0 00007FF0 +00007FFF 00007FF1 +00000000 FFC40002 +17FF3006 00EF800B +00EF801F 04FF404F +FFF7009F 110000EF +00000000 FFF8000D +FEFD000F FBFF300F +F6DF700F F3BFC00F +E07FF10F B14FF60F +00000000 F6000000 +F7000000 F7000000 +F7000000 F7000000 +F7000000 F7000000 +04FF9888 00CFB888 +009FC888 006FD888 +004FE888 002FF888 +000FF888 002FF888 +88888888 88888888 +88888888 88888888 +88888888 88888888 +88888888 88888888 +88888888 88888888 +8888888E 888888DF +88888CFF 8888AFF7 +8889FFA0 888FFC00 +8DFFB100 EFF60000 +FF400000 F3000000 +40000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +88888888 88888888 +88888888 88888888 +88888888 88888888 +88888888 88888888 +8888EF40 8888DF60 +8888CF90 8888BFC0 +88889FF4 88888DF9 +88888BFE 888888EF +00007FF0 00007FF0 +00006FD0 00000000 +00000000 00000000 +30000000 90000000 +000003FF 000008FF +00000BFB 00000000 +00000000 00000000 +00000000 00000000 +EFFFFB0F 200AFF1F +0004FF4D 00000000 +00000000 00000000 +00000000 00000000 +F7000000 F7111100 +FFFFFB00 00000000 +00000000 00000000 +00000000 00000000 +004FE888 006FD888 +009FC888 00CFB888 +04FF9888 09FD8888 +3EFB8888 387F0718 +60000000 00000000 +044DEC14 01000000 #External/PAL/Toggle/PALToggleEnable.asm diff --git a/Output/Console/g_safety.txt b/Output/Console/g_safety.txt new file mode 100644 index 00000000..bdaedd41 --- /dev/null +++ b/Output/Console/g_safety.txt @@ -0,0 +1,13 @@ +$Tournament safety codes [Fizzi] +*Codes to ensure integrity of tournament matches +C222F958 00000004 #External/FixedDamageRatio/SkipInputHandling.asm +2C050003 40820014 +3D808022 618CFB68 +7D8903A6 4E800420 +28050005 00000000 +C2167F40 00000005 #External/PreventPauseSoftLocks/ForcePauseOn.asm +881E0002 2C000001 +40820018 881E0004 +2C000004 4181000C +881E000A 48000008 +38000001 00000000 diff --git a/Output/Console/g_screen_wide.txt b/Output/Console/g_screen_wide.txt new file mode 100644 index 00000000..1fbdaceb --- /dev/null +++ b/Output/Console/g_screen_wide.txt @@ -0,0 +1,27 @@ +$Optional: Widescreen 16:9 [Dan Salvato, mirrorbender, Achilles1515, UnclePunch] +*16:9 codes +*Will not cause desyncs when playing online +043BB05C 3EB00000 #External/Widescreen/Fix Screen Flash.asm +C236A4A8 00000007 #External/Widescreen/Overwrite CObj Values.asm +38600001 986DAFE0 +C03F0034 4800001D +7C6802A6 C0430000 +C0630004 EC2100B2 +EC211824 48000010 +4E800021 43A00000 +435B0000 00000000 +044DDB58 3E4CCCCD #External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm +04086B24 60000000 #External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm +04030C7C 38000064 #External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm +04030C88 3800021C #External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm +044DDB30 3F666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm +044DDB34 BF666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm +044DDB2C C3660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm +044DDB28 43660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm +044DDB4C 3D916873 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm +C22FCFC4 00000004 #External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm +48000011 7C6802A6 +C0030000 4800000C +4E800021 40DC7AE1 +60000000 00000000 +044DDB84 3E89FEFA #External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm diff --git a/Output/Console/g_screen_wide_shutters.bin b/Output/Console/g_screen_wide_shutters.bin index 65b1e85e..b56f57a7 100644 Binary files a/Output/Console/g_screen_wide_shutters.bin and b/Output/Console/g_screen_wide_shutters.bin differ diff --git a/Output/Console/g_screen_wide_shutters.txt b/Output/Console/g_screen_wide_shutters.txt new file mode 100644 index 00000000..2f889616 --- /dev/null +++ b/Output/Console/g_screen_wide_shutters.txt @@ -0,0 +1,58 @@ +$Optional: 16:9 -> 73:60 [Dan Salvato, mirrorbender, Achilles1515, UnclePunch, Fizzi] +*Set Aspect Ratio to "Force 16:9" in Graphics +043BB05C 3EB00000 #External/Widescreen/Fix Screen Flash.asm +C236A4A8 00000007 #External/Widescreen/Overwrite CObj Values.asm +38600001 986DAFE0 +C03F0034 4800001D +7C6802A6 C0430000 +C0630004 EC2100B2 +EC211824 48000010 +4E800021 43A00000 +435B0000 00000000 +044DDB58 3E4CCCCD #External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm +04086B24 60000000 #External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm +04030C7C 38000064 #External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm +04030C88 3800021C #External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm +044DDB30 3F666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm +044DDB34 BF666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm +044DDB2C C3660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm +044DDB28 43660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm +044DDB4C 3D916873 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm +C22FCFC4 00000004 #External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm +48000011 7C6802A6 +C0030000 4800000C +4E800021 40DC7AE1 +60000000 00000000 +044DDB84 3E89FEFA #External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm +C2302784 0000001F #External/WidescreenShutters/Add Shutters.asm +480000E0 4E800021 +42E40000 447A0000 +000000FF 7C0802A6 +90010004 9421FF20 +BE8100B0 3B800014 +3BA0FFE7 2C030000 +4182000C 3B800015 +3BA00231 4BFFFFC9 +7FE802A6 38600020 +3D808037 618CF1E4 +7D8903A6 4E800421 +7C681B78 7F83E378 +7FA4EB78 38A0FFE7 +38C00001 38E00001 +3D808030 618C2834 +7D8903A6 4E800421 +7C7E1B78 806DB77C +7FC4F378 3D808030 +618C2810 7D8903A6 +4E800421 38600000 +987E0026 7FC3F378 +389F0008 3D808030 +618C2B90 7D8903A6 +4E800421 C03F0000 +D03E0008 C03F0004 +D03E000C BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +93EDB77C 38600000 +4BFFFF2D 38600001 +4BFFFF25 00000000 diff --git a/Output/Console/g_stages_all.txt b/Output/Console/g_stages_all.txt new file mode 100644 index 00000000..a025655a --- /dev/null +++ b/Output/Console/g_stages_all.txt @@ -0,0 +1,30 @@ +$Frozen Stages [UnclePunch, Fizzi] +*Disables all stage transformations +C225A530 00000014 #External/Frozen All/Blink SSS/EditColor.asm +886DB60E 7C03F000 +41820090 806DB5F4 +80630020 3C800006 +6084F1E8 7CC32214 +2C1E0012 41820044 +2C1E001A 4182003C +2C1E0006 41820034 +2C1E0019 4182002C +38600080 98660001 +98660021 38600000 +98660015 98660035 +38600033 98660017 +98660037 48000024 +38600000 98660001 +98660021 38600080 +98660015 98660017 +98660035 98660037 +806DB8D4 8063002C +38800009 90830000 +9BCDB60E 00000000 +C225B718 00000002 #External/Frozen All/Blink SSS/SavePointer.asm +906DB8D4 7C771B78 +60000000 00000000 +043E67E0 00000000 #External/Frozen All/Core/1.asm +0421AAE4 60000000 #External/Frozen All/Core/2.asm +041D1548 60000000 #External/Frozen All/Core/3.asm +041E3348 60000000 #External/Frozen All/Core/4.asm diff --git a/Output/Console/g_stages_stadium.txt b/Output/Console/g_stages_stadium.txt new file mode 100644 index 00000000..12c03a18 --- /dev/null +++ b/Output/Console/g_stages_stadium.txt @@ -0,0 +1,25 @@ +$Frozen Stadium [UnclePunch, Fizzi] +*Disables Pokemon Stadium transformations +041D45FC 480009DC #External/Frozen PS/Core/FreezePokemon.asm +C225A530 00000011 #External/Frozen PS/PSBlinkBlue/PSEditColor.asm +886DB60E 7C03F000 +41820078 806DB5F4 +80630020 3C800006 +6084F1E8 7CC32214 +2C1E0012 4182002C +38600080 98660001 +98660021 38600000 +98660015 98660035 +38600033 98660017 +98660037 48000024 +38600000 98660001 +98660021 38600080 +98660015 98660017 +98660035 98660037 +806DB8D4 8063002C +38800009 90830000 +9BCDB60E 00000000 +C225B718 00000002 #External/Frozen PS/PSBlinkBlue/SavePointer.asm +906DB8D4 7C771B78 +60000000 00000000 +044DEC1C 01000000 #External/Frozen PS/Toggle/FrzPkmToggleEnable.asm diff --git a/Output/Console/g_ucf.bin b/Output/Console/g_ucf.bin index 18079fb7..33bb02aa 100644 Binary files a/Output/Console/g_ucf.bin and b/Output/Console/g_ucf.bin differ diff --git a/Output/Console/g_ucf.txt b/Output/Console/g_ucf.txt new file mode 100644 index 00000000..29e7b69e --- /dev/null +++ b/Output/Console/g_ucf.txt @@ -0,0 +1,135 @@ +$UCF Slippi [Dan Salvato, tauKhan, UnclePunch, Fizzi] +C20C9A44 0000002B #External/UCF 0.8/Logic/UCF DB.asm +D01F002C 7C0802A6 +90010004 9421FF20 +BE8100B0 48000121 +7FC802A6 C03F0894 +C05E0000 FC011040 +40820118 808DAEB4 +C03F0620 FC200A10 +C044003C FC011040 +41800100 887F0670 +2C030002 408000F4 +887F221F 54600739 +408200E8 3C60804C +60631F78 8BA30001 +387DFFFE 889F0618 +4800008D 7C7C1B78 +7FA3EB78 889F0618 +4800007D 7C7C1850 +7C6319D6 2C0315F9 +408100B0 38000001 +901F2358 901F2340 +809F0004 2C04000A +40A20098 887F000C +38800001 3D808003 +618C418C 7D8903A6 +4E800421 2C030000 +41820078 8083002C +80841ECC C03F002C +D0240018 C05E0004 +FC011040 4181000C +38600080 48000008 +3860007F 98640006 +48000048 7C852378 +3863FFFF 2C030000 +40800008 38630005 +3C808046 6084B108 +1C630030 7C841A14 +1C65000C 7C841A14 +88640002 7C630774 +4E800020 4E800021 +40000000 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C20998A4 00000026 #External/UCF 0.8/Logic/UCF SD.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7E1B78 83FE002C +480000DD 7FA802A6 +C03F063C 806DAEB4 +C0030314 FC010040 +408100E4 C03F0620 +48000071 D0210090 +C03F0624 48000065 +C0410090 EC4200B2 +EC210072 EC21102A +C05D000C FC011040 +418000B4 889F0670 +2C040003 408100A8 +C01D0010 C03F0624 +FC000840 40800098 +BA8100B0 800100E4 +382100E0 7C0803A6 +8061001C 83E10014 +38210018 38630008 +7C6803A6 4E800020 +FC000A10 C03D0000 +EC000072 C03D0004 +EC000828 FC00001E +D8010080 80610084 +38630002 3C004330 +C85D0014 6C638000 +90010080 90610084 +C8210080 EC011028 +C03D0000 EC200824 +4E800020 4E800021 +42A00000 37270000 +43300000 3F800000 +BF4CCCCD 43300000 +80000000 7FC3F378 +7FE4FB78 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C20908F4 00000017 #External/UCF 0.8/Logic/UCF Tumble.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +2C030001 4082008C +C03F0628 FC200A10 +806DAEB4 C0430210 +FC011040 40800074 +3F80804C 639C1F78 +8BDC0001 387EFFFE +889F0618 48000029 +7C7D1B78 7FC3F378 +889F0618 48000019 +7C7D1850 7C6319D6 +388015F9 7C041800 +48000038 7C852378 +3863FFFF 2C030000 +40800008 38630005 +809C0008 1C630030 +7C841A14 1C65000C +7C841A14 88640002 +7C630774 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C22662D0 0000001A #External/UCF 0.8/Indicator/UCF Text.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +48000089 7FC802A6 +38600000 38800000 +3D80803A 618C6754 +7D8903A6 4E800421 +7C7F1B78 38800001 +989F0049 38800001 +989F004A C03E000C +D03F0024 D03F0028 +7FE3FB78 48000059 +7C8802A6 C03E0000 +C05E0004 3D80803A +618C6B98 7D8903A6 +4E800421 7C641B78 +7FE3FB78 C03E0008 +C05E0008 3D80803A +618C7548 7D8903A6 +4E800421 48000024 +4E800021 42180000 +C3898000 3EE66666 +3DCCCCCD 4E800021 +55434620 302E3800 +BA8100B0 800100E4 +382100E0 7C0803A6 +38980000 00000000 diff --git a/Output/Console/g_ucf_084.bin b/Output/Console/g_ucf_084.bin new file mode 100644 index 00000000..c0ca8513 Binary files /dev/null and b/Output/Console/g_ucf_084.bin differ diff --git a/Output/Console/g_ucf_084.txt b/Output/Console/g_ucf_084.txt new file mode 100644 index 00000000..a250a362 --- /dev/null +++ b/Output/Console/g_ucf_084.txt @@ -0,0 +1,272 @@ +$UCF Slippi [Dan Salvato, tauKhan, UnclePunch, Fizzi, Altimor, PracticalTAS, CarVac, Krohnos] +C20D65EC 00000010 #External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm +4800003D 3F170A3D +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0440004 +C0640008 EC2118B8 +FC20081E D824000C +80C40010 38C60002 +4E800020 C0040094 +7C8802A6 88C50670 +2C060001 4080002C +C0250620 4BFFFFC5 +7C0631D6 C0250624 +4BFFFFB9 7CC631D6 +7C003214 2C001900 +40810008 C0040000 +60000000 00000000 +C20C9A44 00000020 #External/UCF 0.84/UCF/UCF Dashback.asm +893F221F D01F002C +71290008 408200F0 +815F0894 3D204000 +7C0A4800 408200E0 +C19F0620 812DAEB4 +EC000332 C189003C +FC006000 418000C8 +893F0670 28090001 +418100BC 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +7D290774 7D293850 +7D2949D6 2C0915F9 +40810054 9421FFF8 +39200001 38800001 +913F2340 913F2358 +3D208003 3929418C +887F000C 7D2903A6 +4E800421 2C030000 +41820020 8123002C +81491ECC 813F002C +912A0018 55290FFE +3929007F 992A0006 +38210008 00000000 +C206B460 00000054 #External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm +480000B1 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 BF1C0000 +38D1B717 42A00000 +3923004F 5529063E +2809009E 4081002C +38840006 5484063E +2804000C 4D810020 +54630000 39200000 +6C633F80 91250004 +90650000 4E800020 +3924004F 5529063E +2809009E 4C810020 +38630006 5463063E +2803000C 4D810020 +54840000 39200000 +6C843F80 91250000 +90850004 4E800020 +9421FFC0 BF210024 +93810014 7F8802A6 +3D20800A 7FE3FB78 +39292040 7D2903A6 +4E800421 2C030000 +408201A0 3D20804C +8BDF0618 39291F78 +7FFAFB78 89090001 +2C080000 3948FFFF +40A20008 39400004 +1D4A0030 81290008 +1F7E000C 3BBC0000 +7D295214 1FDE0006 +7D09DA14 7D49D82E +81280008 80E80004 +7D1DDA14 91210010 +89280008 91410008 +39290001 90E1000C +552907BE 99280008 +5539063E 7D3E4A14 +5529083C 7D5D4B2E +813A0004 2C090013 +40A20010 813A0010 +2C09015D 41A20034 +8881000B 38BA0620 +8861000A 7C840774 +7C630774 4BFFFEBD +8881000D 8861000C +38BA0638 7C840774 +7C630774 4BFFFEA5 +C01A0624 39400000 +C19C0030 FC006000 +418100C0 C19A0620 +FC000210 C15C0038 +39210018 FD806210 +C17C0034 EC005AB8 +ED8C5AB8 FC00001E +FD80601E 7D804FAE +3921001C 81010018 +7C004FAE 39080002 +8121001C 7D0841D6 +39290002 7D2949D6 +7D294214 2C091900 +40810068 7D3DDA14 +89490009 5549063E +2C090000 40820050 +893A0671 28090001 +41A10048 3939FFFE +7D1ECA14 552907BE +5508083C 7FDE4A14 +7D1D4214 57DE083C +89080001 7FDDF214 +893E0001 7D080774 +7D290774 7D294050 +7D2949D6 2C090790 +40810008 394A0001 +7FBDDA14 995D0009 +887F0678 83810014 +83210024 83410028 +8361002C 83A10034 +83C10038 38210040 +60000000 00000000 +C208E54C 0000001D #External/UCF 0.84/UCF/UCF SDI.asm +7C002800 418000DC +89230673 28090001 +40810014 89230674 +3D406000 28090001 +418100BC C183062C +3D406000 C0030628 +ED8C0332 EC00603A +C18404B0 ED8C0332 +FC0C0000 40810098 +3D008007 89430618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +38E8FFFE 7D0A4214 +54E707BE 5508083C +7D4A3A14 7CC94214 +554A083C 7D0940AE +7CE95214 7D2950AE +7D080774 89470001 +7D290774 7D294050 +89060001 7D4A0774 +7D2949D6 7D080774 +7D4A4050 7D4A51D6 +7D295214 3D406000 +2C090F04 40810008 +3D408000 7D580120 +60000000 00000000 +C209A0B8 0000000A #External/UCF 0.84/UCF/UCF Shield Drop Extended.asm +4C401382 4182003C +3D208007 89040618 +3929AD10 81490750 +1D08000C 39290754 +554A3032 7D4A3670 +7D295214 7D294214 +89290009 28090001 +4081000C 4C421242 +4800000C 4C421182 +60000000 00000000 +C20998A4 00000019 #External/UCF 0.84/UCF/UCF Shield Drop.asm +4800003D BF4CCCCD +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0460004 +C0660008 EC2118B8 +FC20081E D826000C +80E60010 38E70002 +4E800020 8083002C +7CC802A6 80ADAEB4 +C004063C C0250314 +FC000840 40810070 +88040670 80E50320 +7C003800 41800060 +C0240624 C0060000 +FC010040 40810050 +8004083C 2C00FFFF +41820044 80040840 +540005EF 41820038 +4BFFFF89 7C0739D6 +C0240620 4BFFFF7D +7CE739D6 7C003A14 +2C001900 40810018 +80E1001C 38210018 +38E70008 7CE803A6 +4E800020 00000000 +C2093294 00000014 #External/UCF 0.84/UCF/UCF Shield SDI.asm +7C030000 41800094 +89240673 3CC06000 +28090001 41810080 +C1840628 C00504B0 +FC0C0000 40800070 +3D008007 89440618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +7CEA4214 3908FFFE +550807BE 54E7083C +7D4A4214 7CE938AE +554A083C 7D2950AE +7CE70774 7D290774 +7D293850 7D2949D6 +2C090F04 40810008 +3CC08000 7CD80120 +60000000 00000000 +C20908F4 00000013 #External/UCF 0.84/UCF/UCF Tumble.asm +2C030001 4082008C +C19F0628 3D406000 +FD806210 FC0C0000 +40800074 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +3D406000 7D290774 +7D293850 7D2949D6 +2C0915F9 40810008 +3D408000 7D580120 +60000000 00000000 +C22662D0 0000001B #External/UCF 0.84/Indicator/UCF Text.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +48000089 7FC802A6 +38600000 38800000 +3D80803A 618C6754 +7D8903A6 4E800421 +7C7F1B78 38800001 +989F0049 38800001 +989F004A C03E000C +D03F0024 D03F0028 +7FE3FB78 48000059 +7C8802A6 C03E0000 +C05E0004 3D80803A +618C6B98 7D8903A6 +4E800421 7C641B78 +7FE3FB78 C03E0008 +C05E0008 3D80803A +618C7548 7D8903A6 +4E800421 48000028 +4E800021 42180000 +C3898000 3EE66666 +3DCCCCCD 4E800021 +55434620 302E3834 +00000000 BA8100B0 +800100E4 382100E0 +7C0803A6 38980000 +60000000 00000000 diff --git a/Output/Console/g_ucf_084_stealth.bin b/Output/Console/g_ucf_084_stealth.bin new file mode 100644 index 00000000..f078bef7 Binary files /dev/null and b/Output/Console/g_ucf_084_stealth.bin differ diff --git a/Output/Console/g_ucf_084_stealth.txt b/Output/Console/g_ucf_084_stealth.txt new file mode 100644 index 00000000..bc892313 --- /dev/null +++ b/Output/Console/g_ucf_084_stealth.txt @@ -0,0 +1,244 @@ +$UCF 0.84 Slippi [Altimor, PracticalTAS, CarVac, Krohnos] +C20D65EC 00000010 #External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm +4800003D 3F170A3D +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0440004 +C0640008 EC2118B8 +FC20081E D824000C +80C40010 38C60002 +4E800020 C0040094 +7C8802A6 88C50670 +2C060001 4080002C +C0250620 4BFFFFC5 +7C0631D6 C0250624 +4BFFFFB9 7CC631D6 +7C003214 2C001900 +40810008 C0040000 +60000000 00000000 +C20C9A44 00000020 #External/UCF 0.84/UCF/UCF Dashback.asm +893F221F D01F002C +71290008 408200F0 +815F0894 3D204000 +7C0A4800 408200E0 +C19F0620 812DAEB4 +EC000332 C189003C +FC006000 418000C8 +893F0670 28090001 +418100BC 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +7D290774 7D293850 +7D2949D6 2C0915F9 +40810054 9421FFF8 +39200001 38800001 +913F2340 913F2358 +3D208003 3929418C +887F000C 7D2903A6 +4E800421 2C030000 +41820020 8123002C +81491ECC 813F002C +912A0018 55290FFE +3929007F 992A0006 +38210008 00000000 +C206B460 00000054 #External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm +480000B1 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 BF1C0000 +38D1B717 42A00000 +3923004F 5529063E +2809009E 4081002C +38840006 5484063E +2804000C 4D810020 +54630000 39200000 +6C633F80 91250004 +90650000 4E800020 +3924004F 5529063E +2809009E 4C810020 +38630006 5463063E +2803000C 4D810020 +54840000 39200000 +6C843F80 91250000 +90850004 4E800020 +9421FFC0 BF210024 +93810014 7F8802A6 +3D20800A 7FE3FB78 +39292040 7D2903A6 +4E800421 2C030000 +408201A0 3D20804C +8BDF0618 39291F78 +7FFAFB78 89090001 +2C080000 3948FFFF +40A20008 39400004 +1D4A0030 81290008 +1F7E000C 3BBC0000 +7D295214 1FDE0006 +7D09DA14 7D49D82E +81280008 80E80004 +7D1DDA14 91210010 +89280008 91410008 +39290001 90E1000C +552907BE 99280008 +5539063E 7D3E4A14 +5529083C 7D5D4B2E +813A0004 2C090013 +40A20010 813A0010 +2C09015D 41A20034 +8881000B 38BA0620 +8861000A 7C840774 +7C630774 4BFFFEBD +8881000D 8861000C +38BA0638 7C840774 +7C630774 4BFFFEA5 +C01A0624 39400000 +C19C0030 FC006000 +418100C0 C19A0620 +FC000210 C15C0038 +39210018 FD806210 +C17C0034 EC005AB8 +ED8C5AB8 FC00001E +FD80601E 7D804FAE +3921001C 81010018 +7C004FAE 39080002 +8121001C 7D0841D6 +39290002 7D2949D6 +7D294214 2C091900 +40810068 7D3DDA14 +89490009 5549063E +2C090000 40820050 +893A0671 28090001 +41A10048 3939FFFE +7D1ECA14 552907BE +5508083C 7FDE4A14 +7D1D4214 57DE083C +89080001 7FDDF214 +893E0001 7D080774 +7D290774 7D294050 +7D2949D6 2C090790 +40810008 394A0001 +7FBDDA14 995D0009 +887F0678 83810014 +83210024 83410028 +8361002C 83A10034 +83C10038 38210040 +60000000 00000000 +C208E54C 0000001D #External/UCF 0.84/UCF/UCF SDI.asm +7C002800 418000DC +89230673 28090001 +40810014 89230674 +3D406000 28090001 +418100BC C183062C +3D406000 C0030628 +ED8C0332 EC00603A +C18404B0 ED8C0332 +FC0C0000 40810098 +3D008007 89430618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +38E8FFFE 7D0A4214 +54E707BE 5508083C +7D4A3A14 7CC94214 +554A083C 7D0940AE +7CE95214 7D2950AE +7D080774 89470001 +7D290774 7D294050 +89060001 7D4A0774 +7D2949D6 7D080774 +7D4A4050 7D4A51D6 +7D295214 3D406000 +2C090F04 40810008 +3D408000 7D580120 +60000000 00000000 +C209A0B8 0000000A #External/UCF 0.84/UCF/UCF Shield Drop Extended.asm +4C401382 4182003C +3D208007 89040618 +3929AD10 81490750 +1D08000C 39290754 +554A3032 7D4A3670 +7D295214 7D294214 +89290009 28090001 +4081000C 4C421242 +4800000C 4C421182 +60000000 00000000 +C20998A4 00000019 #External/UCF 0.84/UCF/UCF Shield Drop.asm +4800003D BF4CCCCD +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0460004 +C0660008 EC2118B8 +FC20081E D826000C +80E60010 38E70002 +4E800020 8083002C +7CC802A6 80ADAEB4 +C004063C C0250314 +FC000840 40810070 +88040670 80E50320 +7C003800 41800060 +C0240624 C0060000 +FC010040 40810050 +8004083C 2C00FFFF +41820044 80040840 +540005EF 41820038 +4BFFFF89 7C0739D6 +C0240620 4BFFFF7D +7CE739D6 7C003A14 +2C001900 40810018 +80E1001C 38210018 +38E70008 7CE803A6 +4E800020 00000000 +C2093294 00000014 #External/UCF 0.84/UCF/UCF Shield SDI.asm +7C030000 41800094 +89240673 3CC06000 +28090001 41810080 +C1840628 C00504B0 +FC0C0000 40800070 +3D008007 89440618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +7CEA4214 3908FFFE +550807BE 54E7083C +7D4A4214 7CE938AE +554A083C 7D2950AE +7CE70774 7D290774 +7D293850 7D2949D6 +2C090F04 40810008 +3CC08000 7CD80120 +60000000 00000000 +C20908F4 00000013 #External/UCF 0.84/UCF/UCF Tumble.asm +2C030001 4082008C +C19F0628 3D406000 +FD806210 FC0C0000 +40800074 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +3D406000 7D290774 +7D293850 7D2949D6 +2C0915F9 40810008 +3D408000 7D580120 +60000000 00000000 diff --git a/Output/Console/g_ucf_stealth.bin b/Output/Console/g_ucf_stealth.bin index 552a2f05..530c65b2 100644 Binary files a/Output/Console/g_ucf_stealth.bin and b/Output/Console/g_ucf_stealth.bin differ diff --git a/Output/Console/g_ucf_stealth.txt b/Output/Console/g_ucf_stealth.txt new file mode 100644 index 00000000..3264236c --- /dev/null +++ b/Output/Console/g_ucf_stealth.txt @@ -0,0 +1,108 @@ +$UCF Slippi [Dan Salvato, tauKhan, UnclePunch, Fizzi] +C20C9A44 0000002B #External/UCF 0.8/Logic/UCF DB.asm +D01F002C 7C0802A6 +90010004 9421FF20 +BE8100B0 48000121 +7FC802A6 C03F0894 +C05E0000 FC011040 +40820118 808DAEB4 +C03F0620 FC200A10 +C044003C FC011040 +41800100 887F0670 +2C030002 408000F4 +887F221F 54600739 +408200E8 3C60804C +60631F78 8BA30001 +387DFFFE 889F0618 +4800008D 7C7C1B78 +7FA3EB78 889F0618 +4800007D 7C7C1850 +7C6319D6 2C0315F9 +408100B0 38000001 +901F2358 901F2340 +809F0004 2C04000A +40A20098 887F000C +38800001 3D808003 +618C418C 7D8903A6 +4E800421 2C030000 +41820078 8083002C +80841ECC C03F002C +D0240018 C05E0004 +FC011040 4181000C +38600080 48000008 +3860007F 98640006 +48000048 7C852378 +3863FFFF 2C030000 +40800008 38630005 +3C808046 6084B108 +1C630030 7C841A14 +1C65000C 7C841A14 +88640002 7C630774 +4E800020 4E800021 +40000000 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C20998A4 00000026 #External/UCF 0.8/Logic/UCF SD.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7E1B78 83FE002C +480000DD 7FA802A6 +C03F063C 806DAEB4 +C0030314 FC010040 +408100E4 C03F0620 +48000071 D0210090 +C03F0624 48000065 +C0410090 EC4200B2 +EC210072 EC21102A +C05D000C FC011040 +418000B4 889F0670 +2C040003 408100A8 +C01D0010 C03F0624 +FC000840 40800098 +BA8100B0 800100E4 +382100E0 7C0803A6 +8061001C 83E10014 +38210018 38630008 +7C6803A6 4E800020 +FC000A10 C03D0000 +EC000072 C03D0004 +EC000828 FC00001E +D8010080 80610084 +38630002 3C004330 +C85D0014 6C638000 +90010080 90610084 +C8210080 EC011028 +C03D0000 EC200824 +4E800020 4E800021 +42A00000 37270000 +43300000 3F800000 +BF4CCCCD 43300000 +80000000 7FC3F378 +7FE4FB78 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C20908F4 00000017 #External/UCF 0.8/Logic/UCF Tumble.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +2C030001 4082008C +C03F0628 FC200A10 +806DAEB4 C0430210 +FC011040 40800074 +3F80804C 639C1F78 +8BDC0001 387EFFFE +889F0618 48000029 +7C7D1B78 7FC3F378 +889F0618 48000019 +7C7D1850 7C6319D6 +388015F9 7C041800 +48000038 7C852378 +3863FFFF 2C030000 +40800008 38630005 +809C0008 1C630030 +7C841A14 1C65000C +7C841A14 88640002 +7C630774 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 diff --git a/Output/InjectionLists/list_console_PAL.json b/Output/InjectionLists/list_console_PAL.json new file mode 100644 index 00000000..7afcdd25 --- /dev/null +++ b/Output/InjectionLists/list_console_PAL.json @@ -0,0 +1,81 @@ +{ + "Details": [ + { + "InjectionAddress": "80068F30", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Character DAT Patcher.asm", + "Tags": "" + }, + { + "InjectionAddress": "802F9A3C", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/PAL Stock Icons.asm", + "Tags": "" + }, + { + "InjectionAddress": "8010FC44", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/DK_AerialUpB.asm", + "Tags": "" + }, + { + "InjectionAddress": "8010FB64", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/DK_GroundedUpB.asm", + "Tags": "" + }, + { + "InjectionAddress": "800796E0", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/DetectionHitboxes.asm", + "Tags": "" + }, + { + "InjectionAddress": "801239A8", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/ICs_FreezeGlitch.asm", + "Tags": "" + }, + { + "InjectionAddress": "803CE4D4", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/Samus_BombJump.asm", + "Tags": "" + }, + { + "InjectionAddress": "802B7E54", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/Samus_Extender1.asm", + "Tags": "" + }, + { + "InjectionAddress": "802B808C", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Core/Additional/Samus_Extender2.asm", + "Tags": "" + }, + { + "InjectionAddress": "80266978", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Indicators/PAL CSS Indicator.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DEC14", + "Name": "PAL Toggle", + "Codetype": "Auto", + "Annotation": "External/PAL/Toggle/PALToggleEnable.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_UCF.json b/Output/InjectionLists/list_console_UCF.json new file mode 100644 index 00000000..8177a93d --- /dev/null +++ b/Output/InjectionLists/list_console_UCF.json @@ -0,0 +1,32 @@ +{ + "Details": [ + { + "InjectionAddress": "800C9A44", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF DB.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800998A4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF SD.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800908F4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF Tumble.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802662D0", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Indicator/UCF Text.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_UCF_084.json b/Output/InjectionLists/list_console_UCF_084.json new file mode 100644 index 00000000..21ab13d8 --- /dev/null +++ b/Output/InjectionLists/list_console_UCF_084.json @@ -0,0 +1,67 @@ +{ + "Details": [ + { + "InjectionAddress": "800D65EC", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800C9A44", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Dashback.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8006B460", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008E54C", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8009A0B8", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop Extended.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800998A4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80093294", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800908F4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Tumble.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802662D0", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/Indicator/UCF Text.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_UCF_084_stealth.json b/Output/InjectionLists/list_console_UCF_084_stealth.json new file mode 100644 index 00000000..e26703ef --- /dev/null +++ b/Output/InjectionLists/list_console_UCF_084_stealth.json @@ -0,0 +1,60 @@ +{ + "Details": [ + { + "InjectionAddress": "800D65EC", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800C9A44", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Dashback.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8006B460", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008E54C", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8009A0B8", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop Extended.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800998A4", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80093294", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800908F4", + "Name": "UCF 0.84 Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Tumble.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_UCF_stealth.json b/Output/InjectionLists/list_console_UCF_stealth.json new file mode 100644 index 00000000..55a560ce --- /dev/null +++ b/Output/InjectionLists/list_console_UCF_stealth.json @@ -0,0 +1,25 @@ +{ + "Details": [ + { + "InjectionAddress": "800C9A44", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF DB.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800998A4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF SD.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800908F4", + "Name": "UCF Slippi", + "Codetype": "Auto", + "Annotation": "External/UCF 0.8/Logic/UCF Tumble.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_core.json b/Output/InjectionLists/list_console_core.json new file mode 100644 index 00000000..ab58b33e --- /dev/null +++ b/Output/InjectionLists/list_console_core.json @@ -0,0 +1,389 @@ +{ + "Details": [ + { + "InjectionAddress": "801BFA20", + "Name": "General", + "Codetype": "Auto", + "Annotation": "External/Boot to CSS/Boot To CSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "8015EE98", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EDDC", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80164B14", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801648F4", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EE4C", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EE14", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D968", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D9D8", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8017229C", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801737B0", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80164658", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801644E8", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8030490C", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803044F0", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A48", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A4C", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A50", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A60", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A78", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D94C", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D984", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016B480", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B0A14", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "802641B0", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80397878", + "Name": "General", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801AF6F4", + "Name": "General", + "Codetype": "Auto", + "Annotation": "External/Skip Memcard Prompt/Skip Memcard Prompt.asm", + "Tags": "" + }, + { + "InjectionAddress": "8025B8BC", + "Name": "General", + "Codetype": "Auto", + "Annotation": "External/LRAStart From SSS Goes to CSS/LRAStart From SSS Goes to CSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "803D4A70", + "Name": "General", + "Codetype": "Auto", + "Annotation": "External/Rumble Off/Rumble Off.asm", + "Tags": "" + }, + { + "InjectionAddress": "800679BC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/ExtendPlayerBlock.asm", + "Tags": "" + }, + { + "InjectionAddress": "803219EC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/FlushFrameBuffer.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016D884", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGameEnd.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016E74C", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGameInfo.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006DA34", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGamePostFrame.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006B0E0", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGamePreFrame.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005604", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/ShouldRecord.asm", + "Tags": "" + }, + { + "InjectionAddress": "8008D698", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/GetLCancelStatus/GetLCancelStatus.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006C324", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/GetLCancelStatus/ResetLCancelStatus.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A4CB4", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/AllocBuffer.asm", + "Tags": "" + }, + { + "InjectionAddress": "800055F8", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/GetIsFollower.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016D294", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/IncrementFrameIndex.asm", + "Tags": "" + }, + { + "InjectionAddress": "801D460C", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/GetPreloadedTransition.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D14C8", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/Init isLoaded Bool.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D45EC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/Load Transformation.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D4F14", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/Reset isLoaded.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D4610", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision1.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D4724", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Core/SkipNormalDecision2.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "804DEC18", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Preload Stadium Transformations/Toggle/PsPreloadToggleEnable.asm", + "Tags": "" + }, + { + "InjectionAddress": "801C154C", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Initialize Stage Data/Init Stage Data.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80068EEC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Initialize Player Data/Init Player Data.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800055F0", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/EXITransferBuffer/EXITransferBuffer.asm", + "Tags": "" + }, + { + "InjectionAddress": "800055FC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Gecko/ProcessCodeList.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005600", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/ConsoleOverrides/SetGeckoStart.asm", + "Tags": "" + }, + { + "InjectionAddress": "800AC5B8", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/NanaDeterminism/NanaDeterminism.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D24FC", + "Name": "Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_crash_output.json b/Output/InjectionLists/list_console_crash_output.json new file mode 100644 index 00000000..3b38f24f --- /dev/null +++ b/Output/InjectionLists/list_console_crash_output.json @@ -0,0 +1,11 @@ +{ + "Details": [ + { + "InjectionAddress": "80394A68", + "Name": "Crash Output", + "Codetype": "Auto", + "Annotation": "Debugging/AdditionalCrashInfo/AdditionalCrashInfo.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_gameplay_both.json b/Output/InjectionLists/list_console_gameplay_both.json new file mode 100644 index 00000000..630b353a --- /dev/null +++ b/Output/InjectionLists/list_console_gameplay_both.json @@ -0,0 +1,67 @@ +{ + "Details": [ + { + "InjectionAddress": "801A5E90", + "Name": "Ledge Grab Limit", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016EBD8", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B0498", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B05CC", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B05C8", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80165C48", + "Name": "Ledge Grab Limit", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800DB880", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Air.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800DBBD4", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Ground.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008F090", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Wobble Check.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_gameplay_lgl.json b/Output/InjectionLists/list_console_gameplay_lgl.json new file mode 100644 index 00000000..b8205180 --- /dev/null +++ b/Output/InjectionLists/list_console_gameplay_lgl.json @@ -0,0 +1,46 @@ +{ + "Details": [ + { + "InjectionAddress": "801A5E90", + "Name": "Ledge Grab Limit", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016EBD8", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B0498", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B05CC", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B05C8", + "Name": "Ledge Grab Limit", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80165C48", + "Name": "Ledge Grab Limit", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_gameplay_wobbling.json b/Output/InjectionLists/list_console_gameplay_wobbling.json new file mode 100644 index 00000000..5c2ba246 --- /dev/null +++ b/Output/InjectionLists/list_console_gameplay_wobbling.json @@ -0,0 +1,25 @@ +{ + "Details": [ + { + "InjectionAddress": "800DB880", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Air.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800DBBD4", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Ground.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008F090", + "Name": "Disable Wobbling", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Wobble Check.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_lag_pd.json b/Output/InjectionLists/list_console_lag_pd.json new file mode 100644 index 00000000..da380af3 --- /dev/null +++ b/Output/InjectionLists/list_console_lag_pd.json @@ -0,0 +1,25 @@ +{ + "Details": [ + { + "InjectionAddress": "801A4DA0", + "Name": "Polling Drift Fix", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4DB4", + "Name": "Polling Drift Fix", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80019860", + "Name": "Polling Drift Fix", + "Codetype": "04", + "Annotation": "", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_lag_pdhalfvb.json b/Output/InjectionLists/list_console_lag_pdhalfvb.json new file mode 100644 index 00000000..3a882bd7 --- /dev/null +++ b/Output/InjectionLists/list_console_lag_pdhalfvb.json @@ -0,0 +1,53 @@ +{ + "Details": [ + { + "InjectionAddress": "801A4D98", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A5050", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4BEC", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80158268", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8034EB60", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80397878", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4570", + "Name": "Polling Drift + Half Visual Buffer Fixes", + "Codetype": "Auto", + "Annotation": "External/Lag Reduction/Force HD/480pDeflickerOff.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_mods_friendlies.json b/Output/InjectionLists/list_console_mods_friendlies.json new file mode 100644 index 00000000..ec94ca9c --- /dev/null +++ b/Output/InjectionLists/list_console_mods_friendlies.json @@ -0,0 +1,109 @@ +{ + "Details": [ + { + "InjectionAddress": "8016E510", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/NeutralSpawn/NeutralSpawn.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802FCCD8", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B1C", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B30", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "802605FC", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DC47C", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Change Default Hand Position.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261A6C", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Fix A Button Buffer When Exiting Name Entry.asm", + "Tags": "" + }, + { + "InjectionAddress": "80266CE0", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Disable FoD During Doubles/Disable FoD During Doubles.asm", + "Tags": "" + }, + { + "InjectionAddress": "802608D8", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Toggle Rumble From CSS/Toggle Rumble From CSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "80259B84", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Stage Striking/Random_Stage_Fix.asm", + "Tags": "" + }, + { + "InjectionAddress": "80259C40", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Stage Striking/Stage_Striking.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A5B14", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "External/Salty Runback/Salty Runback.asm", + "Tags": "" + }, + { + "InjectionAddress": "80265220", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "Common/Winners Names are Gold on CSS/Change Name Color.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016EA30", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "Common/Winners Names are Gold on CSS/Remember Who LRA Started.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016EBAC", + "Name": "Full friendlies codes", + "Codetype": "Auto", + "Annotation": "Common/CSS KO Stars/Asign KO Stars Upon Exiting Dairantou.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_mods_stealth.json b/Output/InjectionLists/list_console_mods_stealth.json new file mode 100644 index 00000000..e66fa495 --- /dev/null +++ b/Output/InjectionLists/list_console_mods_stealth.json @@ -0,0 +1,39 @@ +{ + "Details": [ + { + "InjectionAddress": "8016E510", + "Name": "Stealth tournament codes", + "Codetype": "Auto", + "Annotation": "External/NeutralSpawn/NeutralSpawn.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802FCCD8", + "Name": "Stealth tournament codes", + "Codetype": "Auto", + "Annotation": "External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B1C", + "Name": "Stealth tournament codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B30", + "Name": "Stealth tournament codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "802605FC", + "Name": "Stealth tournament codes", + "Codetype": "Auto", + "Annotation": "External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_mods_tournament.json b/Output/InjectionLists/list_console_mods_tournament.json new file mode 100644 index 00000000..68b0ce74 --- /dev/null +++ b/Output/InjectionLists/list_console_mods_tournament.json @@ -0,0 +1,81 @@ +{ + "Details": [ + { + "InjectionAddress": "8016E510", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/NeutralSpawn/NeutralSpawn.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802FCCD8", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B1C", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B30", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "802605FC", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DC47C", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Change Default Hand Position.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261A6C", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Fix A Button Buffer When Exiting Name Entry.asm", + "Tags": "" + }, + { + "InjectionAddress": "80266CE0", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Disable FoD During Doubles/Disable FoD During Doubles.asm", + "Tags": "" + }, + { + "InjectionAddress": "802608D8", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Toggle Rumble From CSS/Toggle Rumble From CSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "80259B84", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Stage Striking/Random_Stage_Fix.asm", + "Tags": "" + }, + { + "InjectionAddress": "80259C40", + "Name": "Full tournament codes", + "Codetype": "Auto", + "Annotation": "External/Stage Striking/Stage_Striking.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_safety.json b/Output/InjectionLists/list_console_safety.json new file mode 100644 index 00000000..07ac560f --- /dev/null +++ b/Output/InjectionLists/list_console_safety.json @@ -0,0 +1,18 @@ +{ + "Details": [ + { + "InjectionAddress": "8022F958", + "Name": "Tournament safety codes", + "Codetype": "Auto", + "Annotation": "External/FixedDamageRatio/SkipInputHandling.asm", + "Tags": "" + }, + { + "InjectionAddress": "80167F40", + "Name": "Tournament safety codes", + "Codetype": "Auto", + "Annotation": "External/PreventPauseSoftLocks/ForcePauseOn.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_screen_wide.json b/Output/InjectionLists/list_console_screen_wide.json new file mode 100644 index 00000000..358a92d3 --- /dev/null +++ b/Output/InjectionLists/list_console_screen_wide.json @@ -0,0 +1,95 @@ +{ + "Details": [ + { + "InjectionAddress": "803BB05C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Fix Screen Flash.asm", + "Tags": "" + }, + { + "InjectionAddress": "8036A4A8", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Overwrite CObj Values.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB58", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm", + "Tags": "" + }, + { + "InjectionAddress": "80086B24", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C7C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C88", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB30", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB34", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB2C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB28", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB4C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FCFC4", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB84", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_screen_wide_shutters.json b/Output/InjectionLists/list_console_screen_wide_shutters.json new file mode 100644 index 00000000..27df8f8f --- /dev/null +++ b/Output/InjectionLists/list_console_screen_wide_shutters.json @@ -0,0 +1,102 @@ +{ + "Details": [ + { + "InjectionAddress": "803BB05C", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Fix Screen Flash.asm", + "Tags": "" + }, + { + "InjectionAddress": "8036A4A8", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Overwrite CObj Values.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB58", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm", + "Tags": "" + }, + { + "InjectionAddress": "80086B24", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C7C", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C88", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB30", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB34", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB2C", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB28", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB4C", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FCFC4", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB84", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm", + "Tags": "" + }, + { + "InjectionAddress": "80302784", + "Name": "Optional: 16:9 -\u003e 73:60", + "Codetype": "Auto", + "Annotation": "External/WidescreenShutters/Add Shutters.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_stages_all.json b/Output/InjectionLists/list_console_stages_all.json new file mode 100644 index 00000000..44a7a4e3 --- /dev/null +++ b/Output/InjectionLists/list_console_stages_all.json @@ -0,0 +1,46 @@ +{ + "Details": [ + { + "InjectionAddress": "8025A530", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Blink SSS/EditColor.asm", + "Tags": "" + }, + { + "InjectionAddress": "8025B718", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Blink SSS/SavePointer.asm", + "Tags": "" + }, + { + "InjectionAddress": "803E67E0", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Core/1.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8021AAE4", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Core/2.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D1548", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Core/3.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801E3348", + "Name": "Frozen Stages", + "Codetype": "Auto", + "Annotation": "External/Frozen All/Core/4.asm", + "Tags": "[affects-gameplay]" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_console_stages_stadium.json b/Output/InjectionLists/list_console_stages_stadium.json new file mode 100644 index 00000000..49d61778 --- /dev/null +++ b/Output/InjectionLists/list_console_stages_stadium.json @@ -0,0 +1,32 @@ +{ + "Details": [ + { + "InjectionAddress": "801D45FC", + "Name": "Frozen Stadium", + "Codetype": "Auto", + "Annotation": "External/Frozen PS/Core/FreezePokemon.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8025A530", + "Name": "Frozen Stadium", + "Codetype": "Auto", + "Annotation": "External/Frozen PS/PSBlinkBlue/PSEditColor.asm", + "Tags": "" + }, + { + "InjectionAddress": "8025B718", + "Name": "Frozen Stadium", + "Codetype": "Auto", + "Annotation": "External/Frozen PS/PSBlinkBlue/SavePointer.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DEC1C", + "Name": "Frozen Stadium", + "Codetype": "Auto", + "Annotation": "External/Frozen PS/Toggle/FrzPkmToggleEnable.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_debugging.json b/Output/InjectionLists/list_debugging.json new file mode 100644 index 00000000..05bc07ee --- /dev/null +++ b/Output/InjectionLists/list_debugging.json @@ -0,0 +1,32 @@ +{ + "Details": [ + { + "InjectionAddress": "8015FDBC", + "Name": "Optional: Normal Functionality in Develop Mode (1.02)", + "Codetype": "Auto", + "Annotation": "External/NormalDevelopMode/Enable.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006AE90", + "Name": "Optional: Normal Functionality in Develop Mode (1.02)", + "Codetype": "Auto", + "Annotation": "External/NormalDevelopMode/NormalCStick1.asm", + "Tags": "" + }, + { + "InjectionAddress": "800300A4", + "Name": "Optional: Normal Functionality in Develop Mode (1.02)", + "Codetype": "Auto", + "Annotation": "External/NormalDevelopMode/NormalCStick2.asm", + "Tags": "" + }, + { + "InjectionAddress": "80089250", + "Name": "Optional: Normal Functionality in Develop Mode (1.02)", + "Codetype": "Auto", + "Annotation": "External/NormalDevelopMode/StaleMoves.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/InjectionLists/list_netplay.json b/Output/InjectionLists/list_netplay.json new file mode 100644 index 00000000..a914113e --- /dev/null +++ b/Output/InjectionLists/list_netplay.json @@ -0,0 +1,2097 @@ +{ + "Details": [ + { + "InjectionAddress": "8015EE98", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EDDC", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80164B14", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801648F4", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EE4C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015EE14", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D968", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D9D8", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8017229C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801737B0", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80164658", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801644E8", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8030490C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803044F0", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A48", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A4C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A50", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A60", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D4A78", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801AF6F4", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Skip Memcard Prompt/Skip Memcard Prompt.asm", + "Tags": "" + }, + { + "InjectionAddress": "8015D94C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015D984", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A5B14", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Salty Runback/Salty Runback.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016B480", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8022D638", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801B0A14", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016E510", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/NeutralSpawn/NeutralSpawn.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802641B0", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8021AAE4", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8025B8BC", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80452F54", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80452F58", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80452F5C", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80452F60", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80452F64", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8002CB34", + "Name": "Required: General Codes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800D65EC", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800C9A44", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Dashback.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8006B460", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008E54C", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8009A0B8", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop Extended.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800998A4", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield Drop.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80093294", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Shield SDI.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800908F4", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/UCF/UCF Tumble.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802662D0", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/UCF 0.84/Indicator/UCF Text.asm", + "Tags": "" + }, + { + "InjectionAddress": "8026325C", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/DPad Down at CSS for Random Stage/DPad Down at CSS for Random Stage.asm", + "Tags": "" + }, + { + "InjectionAddress": "801C26B0", + "Name": "Required: General Codes", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8015ECEC", + "Name": "Required: General Codes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016EBA8", + "Name": "Required: General Codes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A45A8", + "Name": "Required: General Codes", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "804DC47C", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Change Default Hand Position.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261A6C", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/CSS Player Hands Default to HMN Button/Fix A Button Buffer When Exiting Name Entry.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FCCD8", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Hide Nametag When Invisible/Hide Nametag When Invisible.asm", + "Tags": "" + }, + { + "InjectionAddress": "80266CE0", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Disable FoD During Doubles/Disable FoD During Doubles.asm", + "Tags": "" + }, + { + "InjectionAddress": "80265220", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "Common/Winners Names are Gold on CSS/Change Name Color.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016EA30", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "Common/Winners Names are Gold on CSS/Remember Who LRA Started.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B1C", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip Nametag ID Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261B30", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Closing CSS Door Preserves Nametag/On Window Close/Skip isUsingNametag Bool Reset.asm", + "Tags": "" + }, + { + "InjectionAddress": "802605FC", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/Unplugging Closes CSS Door/Unplugging Closes CSS Door.asm", + "Tags": "" + }, + { + "InjectionAddress": "801239A8", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "External/FreezeGlitchFix/FreezeGlitchFix.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8013C388", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "Common/CostumeBoundCheck/PuffCostume.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016DED4", + "Name": "Required: General Codes", + "Codetype": "Auto", + "Annotation": "Common/CostumeBoundCheck/main.asm", + "Tags": "" + }, + { + "InjectionAddress": "800679BC", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/ExtendPlayerBlock.asm", + "Tags": "" + }, + { + "InjectionAddress": "803219EC", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/FlushFrameBuffer.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016D884", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGameEnd.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016E74C", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGameInfo.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006DA34", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGamePostFrame.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006B0E0", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/SendGamePreFrame.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005604", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/ShouldRecord.asm", + "Tags": "" + }, + { + "InjectionAddress": "8008D698", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/GetLCancelStatus/GetLCancelStatus.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006C324", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Recording/GetLCancelStatus/ResetLCancelStatus.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A4CB4", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/AllocBuffer.asm", + "Tags": "" + }, + { + "InjectionAddress": "800055F8", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/GetIsFollower.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016D294", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "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", + "Codetype": "Auto", + "Annotation": "Common/Initialize Stage Data/Init Stage Data.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80068EEC", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/Initialize Player Data/Init Player Data.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8016EBAC", + "Name": "Required: Slippi Recording", + "Codetype": "Auto", + "Annotation": "Common/CSS KO Stars/Asign KO Stars Upon Exiting Dairantou.asm", + "Tags": "" + }, + { + "InjectionAddress": "8006A880", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/BrawlOffscreenDamage.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "802F7094", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/CustomizeMessageLRAS.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A4DB4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/ForceEngineOnRollback.asm", + "Tags": "" + }, + { + "InjectionAddress": "80019614", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/ForceInputRefetchOnAdvance.asm", + "Tags": "" + }, + { + "InjectionAddress": "8034DED8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/HandleRumble.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016E748", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/InitOnlinePlay.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016E904", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/InitPause.asm", + "Tags": "" + }, + { + "InjectionAddress": "802F70C4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/LGLExceededGameEnd.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A5014", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/LoopEngineForRollback.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016D26C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/PauseCounter.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016CD08", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/PreventPauseStranding.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016EA30", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Remember Who LRA Started.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016E9E8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/ReportNoContestLRAS.asm", + "Tags": "" + }, + { + "InjectionAddress": "80376A20", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/SkipNewInputFetchOnRollback.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A4DE4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/StartEngineLoop.asm", + "Tags": "" + }, + { + "InjectionAddress": "80376A28", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/TriggerSendInput.asm", + "Tags": "" + }, + { + "InjectionAddress": "800163FC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/EXIFileLoad/GetFileSize.asm", + "Tags": "" + }, + { + "InjectionAddress": "800166B8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/EXIFileLoad/TransferFile.asm", + "Tags": "" + }, + { + "InjectionAddress": "800D4C1C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800D4D68", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/FreezeDeadUpFallPhysics/UpdateFallVelocity.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80080E80", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80019260", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Hacks/ForceNoDiskCrash.asm", + "Tags": "" + }, + { + "InjectionAddress": "80376304", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Hacks/ForceNoVideoAssert.asm", + "Tags": "" + }, + { + "InjectionAddress": "803A63A8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Hacks/LoadPremadeTextDataFromDolphin.asm", + "Tags": "" + }, + { + "InjectionAddress": "80321D70", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Hacks/PreventCharacterCrowdChants.asm", + "Tags": "" + }, + { + "InjectionAddress": "80019608", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Hacks/PreventPadAlarmDuringRollback.asm", + "Tags": "" + }, + { + "InjectionAddress": "8038E910", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Music/StartSong.asm", + "Tags": "" + }, + { + "InjectionAddress": "800236EC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Music/Stop.asm", + "Tags": "" + }, + { + "InjectionAddress": "800249F0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "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", + "Codetype": "Auto", + "Annotation": "Online/Core/PreventFileAlarms/MuteMusic.asm", + "Tags": "" + }, + { + "InjectionAddress": "8038ADD0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/PreventFileAlarms/PreventMusicAlarm.asm", + "Tags": "" + }, + { + "InjectionAddress": "8038D224", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Sound/AssignSoundInstanceId.asm", + "Tags": "" + }, + { + "InjectionAddress": "80088224", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Sound/NoDestroyVoice.asm", + "Tags": "" + }, + { + "InjectionAddress": "800882B0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Sound/NoDestroyVoice2.asm", + "Tags": "" + }, + { + "InjectionAddress": "8038D0B0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Sound/PreventDuplicateSounds.asm", + "Tags": "" + }, + { + "InjectionAddress": "8016BE28", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/Teams/PreventDeadStranding.asm", + "Tags": "" + }, + { + "InjectionAddress": "8008653C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "80266BC4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/DisableLRSTART.asm", + "Tags": "" + }, + { + "InjectionAddress": "80261E5C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/DisableNametagBox.asm", + "Tags": "" + }, + { + "InjectionAddress": "80260310", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/FetchMatchInfo.asm", + "Tags": "" + }, + { + "InjectionAddress": "80263258", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/HandleInputsOnCSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A3F9C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/IncreaseTextHeap.asm", + "Tags": "" + }, + { + "InjectionAddress": "802652F0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/InitSheikSelector.asm", + "Tags": "" + }, + { + "InjectionAddress": "80264534", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/LoadCSSText.asm", + "Tags": "" + }, + { + "InjectionAddress": "80262004", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/PreventAPressCharUnselect.asm", + "Tags": "" + }, + { + "InjectionAddress": "802620AC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/PreventBPressCharUnselect.asm", + "Tags": "" + }, + { + "InjectionAddress": "802600A8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/PreventColorChange.asm", + "Tags": "" + }, + { + "InjectionAddress": "8026699C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/SceneLoadCSS.asm", + "Tags": "" + }, + { + "InjectionAddress": "80264118", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/SkipReturnToCssSound.asm", + "Tags": "" + }, + { + "InjectionAddress": "80262478", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/AnimateCursorPort.asm", + "Tags": "" + }, + { + "InjectionAddress": "80262768", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/AnimateToken.asm", + "Tags": "" + }, + { + "InjectionAddress": "802652F4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/InitTeamToggleButton.asm", + "Tags": "" + }, + { + "InjectionAddress": "80260C28", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/PreventColorResetCharHover.asm", + "Tags": "" + }, + { + "InjectionAddress": "80260E14", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/PreventColorResetLastChar.asm", + "Tags": "" + }, + { + "InjectionAddress": "80260B90", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/PreventColorResetRandomChar.asm", + "Tags": "" + }, + { + "InjectionAddress": "80260C88", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/Teams/PreventWrongCSPOnCharSelect.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C710", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/Allow8Characters.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C320", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/Allow8CharactersJapanese.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023E730", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/AlwaysUseEnglishWhenDirect.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023E924", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/AlwaysUseEnglishWhenDirect2.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023E290", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/AlwaysUseEnglishWhenDirect3.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CCA4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CF9C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/Display8Characters.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CF80", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/HandleAutocompleteText.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023B3D0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/HandleDescriptionText.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C6C0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/HandleJpSpace.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023E994", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C588", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/NameEntryThinkOneShot.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CD74", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnBPressAutoComplete.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CA50", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnConfirmButtonAPress.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CC14", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnConfirmButtonHandler.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C33C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C72C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnEnterText.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C81C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnErasePress.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CCBC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnLPress.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023CCE0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnRPress.asm", + "Tags": "" + }, + { + "InjectionAddress": "8023C928", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/CSS/TextEntryScreen/OnRandomPress.asm", + "Tags": "" + }, + { + "InjectionAddress": "803786A4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/Hacks/VsSplashRumbleHack.asm", + "Tags": "" + }, + { + "InjectionAddress": "802F6694", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/InGame/InitInGame.asm", + "Tags": "" + }, + { + "InjectionAddress": "803A69C0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/InGame/ParseNumbersBetter.asm", + "Tags": "" + }, + { + "InjectionAddress": "8025B8A4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/SSS/DisableLRSTART.asm", + "Tags": "" + }, + { + "InjectionAddress": "80259CC8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/SSS/ExitSSSUponStageSelect.asm", + "Tags": "" + }, + { + "InjectionAddress": "8022B044", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/AllowSwapToSameSubmenu.asm", + "Tags": "" + }, + { + "InjectionAddress": "802299F0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm", + "Tags": "" + }, + { + "InjectionAddress": "8022E93C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/OnMenuLoad.asm", + "Tags": "" + }, + { + "InjectionAddress": "801B1040", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/OnMenuPrep.asm", + "Tags": "" + }, + { + "InjectionAddress": "8022D88C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/OnlineModeOptionSelected.asm", + "Tags": "" + }, + { + "InjectionAddress": "802299C4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/TitleMenu/ShowHidden1pOption.asm", + "Tags": "" + }, + { + "InjectionAddress": "801B3668", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/AllowP2ColorDuplicate.asm", + "Tags": "" + }, + { + "InjectionAddress": "80186EC4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/InitVsSplash.asm", + "Tags": "" + }, + { + "InjectionAddress": "80184DE4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/PlayOpponentCharAnnouncer.asm", + "Tags": "" + }, + { + "InjectionAddress": "801B3650", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/PreventP2Color.asm", + "Tags": "" + }, + { + "InjectionAddress": "80185060", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/HideStageDisplay/HideAllJObjs.asm", + "Tags": "" + }, + { + "InjectionAddress": "80185050", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/HideStageDisplay/PreventEarlyR3Overwrite.asm", + "Tags": "" + }, + { + "InjectionAddress": "80184ADC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/HideStageText/HideLetterJObjs.asm", + "Tags": "" + }, + { + "InjectionAddress": "80184B1C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Menus/VSScreen/HideStageText/SkipStageNumberShow.asm", + "Tags": "" + }, + { + "InjectionAddress": "801BFA20", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Slippi Online Scene/boot.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A45B8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Slippi Online Scene/main.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005694", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/AdjustNullCharID.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056BC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/CSSUpdateCSP.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005690", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/CheckAltStageName.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056B8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/GetCSSIconData.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005698", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/GetCSSIconNum.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056B0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/GetTeamCostumeIndex.asm", + "Tags": "" + }, + { + "InjectionAddress": "800055F4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/IntToFloat.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005610", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/LoadMatchState.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056A4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/LoadPremadeText.asm", + "Tags": "" + }, + { + "InjectionAddress": "8000560C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/LoadState.asm", + "Tags": "" + }, + { + "InjectionAddress": "800055EC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/MultiplyRWithF.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005608", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/SaveState.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056B4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/SubtextFunctions.asm", + "Tags": "" + }, + { + "InjectionAddress": "80005618", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Static/UserDisplayFunctions.asm", + "Tags": "" + }, + { + "InjectionAddress": "803775B0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Online/Debugging/LogInputOnCopy.asm", + "Tags": "" + }, + { + "InjectionAddress": "801A4C24", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8001985C", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80019860", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80376200", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A5018", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80218D68", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8009E090", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/FastForward/DynamicsFix.asm", + "Tags": "" + }, + { + "InjectionAddress": "8000569C", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/CompatibilityHooks/GetFighterNum.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056A0", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/CompatibilityHooks/GetSSMIndex.asm", + "Tags": "" + }, + { + "InjectionAddress": "800056A8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/CompatibilityHooks/RequestSSMLoad.asm", + "Tags": "" + }, + { + "InjectionAddress": "803753B4", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800186A8", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015D9C", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015C00", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015BC0", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80018D80", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800158F0", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80016138", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015F50", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015F88", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800158D8", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015E18", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015CD4", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800159B4", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015984", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015B94", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80015914", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A50AC", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A45BC", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4444", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8001CEAC", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4568", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A43E0", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A448C", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A3F2C", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4560", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A43D8", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4484", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A3F24", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4D14", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A50A0", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4D0C", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A43EC", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A40C8", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D709C", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D7090", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D7074", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D7060", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803D706C", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8035E6E4", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8035E6E0", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8035ECFC", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8035ECE0", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80360A38", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80360A3C", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8035E918", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801A4C98", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80228C10", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80228BFC", + "Name": "Required: Slippi Online", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80228AF8", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80394BD4", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80397838", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80394A74", + "Name": "Required: Slippi Online", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "800AC5B8", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/NanaDeterminism/NanaDeterminism.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "801D24FC", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800DB880", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Air.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "800DBBD4", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Init Wobble Count Ground.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "8008F090", + "Name": "Required: Slippi Online", + "Codetype": "Auto", + "Annotation": "External/PreventWobbling/Wobble Check.asm", + "Tags": "[affects-gameplay]" + }, + { + "InjectionAddress": "803761EC", + "Name": "Recommended: Normal Lag Reduction", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80376238", + "Name": "Recommended: Normal Lag Reduction", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80376A24", + "Name": "Recommended: Apply Delay to all In-Game Scenes", + "Codetype": "Auto", + "Annotation": "Common/UseInGameDelay/ApplyInGameDelay.asm", + "Tags": "" + }, + { + "InjectionAddress": "802F666C", + "Name": "Recommended: Apply Delay to all In-Game Scenes", + "Codetype": "Auto", + "Annotation": "Common/UseInGameDelay/InitializeInGameDelay.asm", + "Tags": "" + }, + { + "InjectionAddress": "8000561C", + "Name": "Recommended: Apply Delay to all In-Game Scenes", + "Codetype": "Auto", + "Annotation": "Common/GetCommonMinorID/GetCommonMinorID.asm", + "Tags": "" + }, + { + "InjectionAddress": "801CBB90", + "Name": "Recommended: Lagless FoD", + "Codetype": "C2", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CC8AC", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CBE9C", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CBEF0", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CBF54", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "80390838", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CD250", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "801CCDCC", + "Name": "Recommended: Lagless FoD", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "803BB05C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Fix Screen Flash.asm", + "Tags": "" + }, + { + "InjectionAddress": "8036A4A8", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Overwrite CObj Values.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB58", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm", + "Tags": "" + }, + { + "InjectionAddress": "80086B24", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C7C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030C88", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB30", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB34", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB2C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB28", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB4C", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FCFC4", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm", + "Tags": "" + }, + { + "InjectionAddress": "804DDB84", + "Name": "Optional: Widescreen 16:9", + "Codetype": "Auto", + "Annotation": "External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm", + "Tags": "" + }, + { + "InjectionAddress": "80030E44", + "Name": "Optional: Disable Screen Shake", + "Codetype": "04", + "Annotation": "", + "Tags": "" + }, + { + "InjectionAddress": "8016E9AC", + "Name": "Optional: Center Align 2P HUD", + "Codetype": "Auto", + "Annotation": "External/Force2PCenterHud/Force2PCenterHud.asm", + "Tags": "" + }, + { + "InjectionAddress": "800C0148", + "Name": "Optional: Flash Red on Failed L-Cancel", + "Codetype": "Auto", + "Annotation": "External/FlashRedFailedLCancel/ChangeColor.asm", + "Tags": "" + }, + { + "InjectionAddress": "8008D690", + "Name": "Optional: Flash Red on Failed L-Cancel", + "Codetype": "Auto", + "Annotation": "External/FlashRedFailedLCancel/TriggerColor.asm", + "Tags": "" + }, + { + "InjectionAddress": "800355B4", + "Name": "Optional: Show Friendly Player Indicators", + "Codetype": "Auto", + "Annotation": "Online/Optional/IndicateLocalPlayer/ForceLocalPlayerTag.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FD1EC", + "Name": "Optional: Show Friendly Player Indicators", + "Codetype": "Auto", + "Annotation": "Online/Optional/IndicateLocalPlayer/SetLocalPlayerTag.asm", + "Tags": "" + }, + { + "InjectionAddress": "802FC9E4", + "Name": "Optional: Show Friendly Player Indicators", + "Codetype": "Auto", + "Annotation": "Online/Optional/ShowAllyIndicator/ShowAllyIndicator.asm", + "Tags": "" + } + ] +} \ No newline at end of file diff --git a/Output/Netplay/GALE01r2.ini b/Output/Netplay/GALE01r2.ini index 6c1a83e2..27196433 100644 --- a/Output/Netplay/GALE01r2.ini +++ b/Output/Netplay/GALE01r2.ini @@ -1,4 +1,5 @@ # GALE01 - Super Smash Bros. Melee NTSC-U 1.02 +# DO NOT EDIT - generated by gecko [Core] CPUThread = True @@ -12,6 +13,7 @@ $Required: Slippi Recording $Required: Slippi Online $Recommended: Normal Lag Reduction $Recommended: Apply Delay to all In-Game Scenes +$Recommended: Lagless FoD [Gecko] $Required: General Codes [Achilles, Dan Salvato, Magus, UnclePunch, tauKhan, Ptomerty, Cilan, Zauron, Datel, donny2112, Jorgasms, strikebowler585, Myougi] @@ -57,13 +59,18 @@ C21A5B14 0000000A #External/Salty Runback/Salty Runback.asm 0416B480 60000000 #C-Stick in Single Player [Zauron] 0422D638 38000006 #Debug Menu [Magus, donny2112] 041B0A14 38600002 #Exiting Debug Menu Returns to CSS [Achilles] -C216E510 00000093 #External/NeutralSpawn/NeutralSpawn.asm +C216E510 00000098 #External/NeutralSpawn/NeutralSpawn.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808016 618CB41C 7D8903A6 4E800421 -2C030000 40820458 -2C1C0005 40800450 +2C030000 40820480 +2C1C0005 40800478 +3C608048 80639D30 +5463443E 2C03021C +41820464 3C608048 +80639D30 5463443E +2C03010F 41820450 887F24D0 2C030001 41820054 3B200000 3B400000 7F43D378 @@ -110,7 +117,7 @@ C216E510 00000093 #External/NeutralSpawn/NeutralSpawn.asm 7F24CB78 88BF24D0 48000009 480002E8 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7CBD2B78 48000121 7F8802A6 80CD9348 @@ -146,8 +153,8 @@ C022A8F8 48000008 C022A8CC 7FE3FB78 3D808003 618C3094 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 00000020 C2700000 41200000 42700000 @@ -201,8 +208,8 @@ C2200000 40A00000 42200000 42000000 42200000 40A00000 FFFFFFFF 4E800021 -00030102 BA810008 -800100B4 382100B0 +00030102 BA8100B0 +800100E4 382100E0 7C0803A6 881F24D0 60000000 00000000 042641B0 38000001 #Faster CSS Load [UnclePunch] @@ -226,116 +233,252 @@ FC0F0840 4081000C FC0F8840 41800010 C21F0318 FE0F802A D21F0318 00000000 -C20C9A44 0000002B #External/UCF 0.8/Logic/UCF DB.asm -D01F002C 7C0802A6 -90010004 9421FF50 -BE810008 48000121 -7FC802A6 C03F0894 -C05E0000 FC011040 -40820118 808DAEB4 -C03F0620 FC200A10 -C044003C FC011040 -41800100 887F0670 -2C030002 408000F4 -887F221F 54600739 -408200E8 3C60804C -60631F78 8BA30001 -387DFFFE 889F0618 -4800008D 7C7C1B78 -7FA3EB78 889F0618 -4800007D 7C7C1850 -7C6319D6 2C0315F9 -408100B0 38000001 -901F2358 901F2340 -809F0004 2C04000A -40A20098 887F000C -38800001 3D808003 -618C418C 7D8903A6 +C20D65EC 00000010 #External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm +4800003D 3F170A3D +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0440004 +C0640008 EC2118B8 +FC20081E D824000C +80C40010 38C60002 +4E800020 C0040094 +7C8802A6 88C50670 +2C060001 4080002C +C0250620 4BFFFFC5 +7C0631D6 C0250624 +4BFFFFB9 7CC631D6 +7C003214 2C001900 +40810008 C0040000 +60000000 00000000 +C20C9A44 00000020 #External/UCF 0.84/UCF/UCF Dashback.asm +893F221F D01F002C +71290008 408200F0 +815F0894 3D204000 +7C0A4800 408200E0 +C19F0620 812DAEB4 +EC000332 C189003C +FC006000 418000C8 +893F0670 28090001 +418100BC 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +7D290774 7D293850 +7D2949D6 2C0915F9 +40810054 9421FFF8 +39200001 38800001 +913F2340 913F2358 +3D208003 3929418C +887F000C 7D2903A6 4E800421 2C030000 -41820078 8083002C -80841ECC C03F002C -D0240018 C05E0004 -FC011040 4181000C -38600080 48000008 -3860007F 98640006 -48000048 7C852378 -3863FFFF 2C030000 -40800008 38630005 -3C808046 6084B108 -1C630030 7C841A14 -1C65000C 7C841A14 -88640002 7C630774 -4E800020 4E800021 -40000000 00000000 -BA810008 800100B4 -382100B0 7C0803A6 +41820020 8123002C +81491ECC 813F002C +912A0018 55290FFE +3929007F 992A0006 +38210008 00000000 +C206B460 00000054 #External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm +480000B1 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 BF1C0000 +38D1B717 42A00000 +3923004F 5529063E +2809009E 4081002C +38840006 5484063E +2804000C 4D810020 +54630000 39200000 +6C633F80 91250004 +90650000 4E800020 +3924004F 5529063E +2809009E 4C810020 +38630006 5463063E +2803000C 4D810020 +54840000 39200000 +6C843F80 91250000 +90850004 4E800020 +9421FFC0 BF210024 +93810014 7F8802A6 +3D20800A 7FE3FB78 +39292040 7D2903A6 +4E800421 2C030000 +408201A0 3D20804C +8BDF0618 39291F78 +7FFAFB78 89090001 +2C080000 3948FFFF +40A20008 39400004 +1D4A0030 81290008 +1F7E000C 3BBC0000 +7D295214 1FDE0006 +7D09DA14 7D49D82E +81280008 80E80004 +7D1DDA14 91210010 +89280008 91410008 +39290001 90E1000C +552907BE 99280008 +5539063E 7D3E4A14 +5529083C 7D5D4B2E +813A0004 2C090013 +40A20010 813A0010 +2C09015D 41A20034 +8881000B 38BA0620 +8861000A 7C840774 +7C630774 4BFFFEBD +8881000D 8861000C +38BA0638 7C840774 +7C630774 4BFFFEA5 +C01A0624 39400000 +C19C0030 FC006000 +418100C0 C19A0620 +FC000210 C15C0038 +39210018 FD806210 +C17C0034 EC005AB8 +ED8C5AB8 FC00001E +FD80601E 7D804FAE +3921001C 81010018 +7C004FAE 39080002 +8121001C 7D0841D6 +39290002 7D2949D6 +7D294214 2C091900 +40810068 7D3DDA14 +89490009 5549063E +2C090000 40820050 +893A0671 28090001 +41A10048 3939FFFE +7D1ECA14 552907BE +5508083C 7FDE4A14 +7D1D4214 57DE083C +89080001 7FDDF214 +893E0001 7D080774 +7D290774 7D294050 +7D2949D6 2C090790 +40810008 394A0001 +7FBDDA14 995D0009 +887F0678 83810014 +83210024 83410028 +8361002C 83A10034 +83C10038 38210040 60000000 00000000 -C20998A4 00000026 #External/UCF 0.8/Logic/UCF SD.asm -7C0802A6 90010004 -9421FF50 BE810008 -7C7E1B78 83FE002C -480000DD 7FA802A6 -C03F063C 806DAEB4 -C0030314 FC010040 -408100E4 C03F0620 -48000071 D0210090 -C03F0624 48000065 -C0410090 EC4200B2 -EC210072 EC21102A -C05D000C FC011040 -418000B4 889F0670 -2C040003 408100A8 -C01D0010 C03F0624 -FC000840 40800098 -BA810008 800100B4 -382100B0 7C0803A6 -8061001C 83E10014 -38210018 38630008 -7C6803A6 4E800020 -FC000A10 C03D0000 -EC000072 C03D0004 -EC000828 FC00001E -D8010080 80610084 -38630002 3C004330 -C85D0014 6C638000 -90010080 90610084 -C8210080 EC011028 -C03D0000 EC200824 -4E800020 4E800021 -42A00000 37270000 -43300000 3F800000 -BF4CCCCD 43300000 -80000000 7FC3F378 -7FE4FB78 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C20908F4 00000017 #External/UCF 0.8/Logic/UCF Tumble.asm -7C0802A6 90010004 -9421FF50 BE810008 +C208E54C 0000001D #External/UCF 0.84/UCF/UCF SDI.asm +7C002800 418000DC +89230673 28090001 +40810014 89230674 +3D406000 28090001 +418100BC C183062C +3D406000 C0030628 +ED8C0332 EC00603A +C18404B0 ED8C0332 +FC0C0000 40810098 +3D008007 89430618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +38E8FFFE 7D0A4214 +54E707BE 5508083C +7D4A3A14 7CC94214 +554A083C 7D0940AE +7CE95214 7D2950AE +7D080774 89470001 +7D290774 7D294050 +89060001 7D4A0774 +7D2949D6 7D080774 +7D4A4050 7D4A51D6 +7D295214 3D406000 +2C090F04 40810008 +3D408000 7D580120 +60000000 00000000 +C209A0B8 0000000A #External/UCF 0.84/UCF/UCF Shield Drop Extended.asm +4C401382 4182003C +3D208007 89040618 +3929AD10 81490750 +1D08000C 39290754 +554A3032 7D4A3670 +7D295214 7D294214 +89290009 28090001 +4081000C 4C421242 +4800000C 4C421182 +60000000 00000000 +C20998A4 00000019 #External/UCF 0.84/UCF/UCF Shield Drop.asm +4800003D BF4CCCCD +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0460004 +C0660008 EC2118B8 +FC20081E D826000C +80E60010 38E70002 +4E800020 8083002C +7CC802A6 80ADAEB4 +C004063C C0250314 +FC000840 40810070 +88040670 80E50320 +7C003800 41800060 +C0240624 C0060000 +FC010040 40810050 +8004083C 2C00FFFF +41820044 80040840 +540005EF 41820038 +4BFFFF89 7C0739D6 +C0240620 4BFFFF7D +7CE739D6 7C003A14 +2C001900 40810018 +80E1001C 38210018 +38E70008 7CE803A6 +4E800020 00000000 +C2093294 00000014 #External/UCF 0.84/UCF/UCF Shield SDI.asm +7C030000 41800094 +89240673 3CC06000 +28090001 41810080 +C1840628 C00504B0 +FC0C0000 40800070 +3D008007 89440618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +7CEA4214 3908FFFE +550807BE 54E7083C +7D4A4214 7CE938AE +554A083C 7D2950AE +7CE70774 7D290774 +7D293850 7D2949D6 +2C090F04 40810008 +3CC08000 7CD80120 +60000000 00000000 +C20908F4 00000013 #External/UCF 0.84/UCF/UCF Tumble.asm 2C030001 4082008C -C03F0628 FC200A10 -806DAEB4 C0430210 -FC011040 40800074 -3F80804C 639C1F78 -8BDC0001 387EFFFE -889F0618 48000029 -7C7D1B78 7FC3F378 -889F0618 48000019 -7C7D1850 7C6319D6 -388015F9 7C041800 -48000038 7C852378 -3863FFFF 2C030000 -40800008 38630005 -809C0008 1C630030 -7C841A14 1C65000C -7C841A14 88640002 -7C630774 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +C19F0628 3D406000 +FD806210 FC0C0000 +40800074 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +3D406000 7D290774 +7D293850 7D2949D6 +2C0915F9 40810008 +3D408000 7D580120 60000000 00000000 -C22662D0 0000001A #External/UCF 0.8/Indicator/UCF Text.asm +C22662D0 0000001B #External/UCF 0.84/Indicator/UCF Text.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 48000089 7FC802A6 38600000 38800000 3D80803A 618C6754 @@ -352,14 +495,15 @@ C05E0004 3D80803A 7FE3FB78 C03E0008 C05E0008 3D80803A 618C7548 7D8903A6 -4E800421 48000024 +4E800421 48000028 4E800021 42180000 C3898000 3EE66666 3DCCCCCD 4E800021 -55434620 302E3800 -BA810008 800100B4 -382100B0 7C0803A6 -38980000 00000000 +55434620 302E3834 +00000000 BA8100B0 +800100E4 382100E0 +7C0803A6 38980000 +60000000 00000000 C226325C 00000008 #External/DPad Down at CSS for Random Stage/DPad Down at CSS for Random Stage.asm 3C808045 6084BF17 54E0077B 4182001C @@ -369,19 +513,6 @@ C226325C 00000008 #External/DPad Down at CSS for Random Stage/DPad Down at CSS f 54E004E7 4182000C 38600000 98640000 54E004E7 00000000 -C21CBB90 00000005 #Lagless FoD [Achilles, Myougi, Dan Salvato] -9421FFF8 3CC0804A -80C6ED78 3CA00002 -60A5AE44 7CA53050 -88C50000 60C60004 -98C50000 00000000 -041CC8AC FC000028 -041CBE9C 60000000 -041CBEF0 60000000 -041CBF54 60000000 -04390838 60000000 -041CD250 60000000 -041CCDCC 480000B4 041C26B0 38000032 #Random Stage Music [UnclePunch] C215ECEC 0000000C #Random CSS Music v3 [UnclePunch] 38600003 3DC08038 @@ -447,8 +578,8 @@ C2265220 00000028 #Common/Winners Names are Gold on CSS/Change Name Color.asm 3D80803A 618C74F0 7D8903A6 4E800421 48000100 7C0802A6 -90010004 9421FF50 -BE810008 7C7D1B78 +90010004 9421FF20 +BE8100B0 7C7D1B78 3FE08047 63FF9DA4 1FDD00A8 7FDEFA14 887F0004 2C030000 @@ -475,8 +606,8 @@ BE810008 7C7D1B78 887E005D 2C030000 41820010 48000004 38600000 48000008 -38600001 BA810008 -800100B4 382100B0 +38600001 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 880DB655 00000000 C216EA30 00000004 #Common/Winners Names are Gold on CSS/Remember Who LRA Started.asm @@ -501,7 +632,7 @@ C213C388 0000000A #Common/CostumeBoundCheck/PuffCostume.asm 809C002C 00000000 C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3BE00000 7FE3FB78 3D808003 618C241C 7D8903A6 4E800421 @@ -553,18 +684,18 @@ C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 4E800421 3B7B0001 2C1B0006 4180FF68 3BFF0001 2C1F0006 -4180FEF4 BA810008 -800100B4 382100B0 +4180FEF4 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -$Required: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337] +$Required: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337, Krohnos] *Saves replays, Slippi device must be in Slot B. *To disable saving replays, visit the Slippi settings in Config > GameCube 040679BC 38802600 #Recording/ExtendPlayerBlock.asm C23219EC 0000001D #Recording/FlushFrameBuffer.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 2C030000 418200A8 @@ -576,11 +707,11 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 3C608048 80639D30 5463443E 2C030208 806DB654 4082003C -80ADB61C 8885000D +80ADB61C 88850010 2C040000 4082002C -8885000C 2C040000 -40820020 808507B3 -3884FF85 80E507BC +8885000F 2C040000 +40820020 80850909 +3884FF85 80E50916 7C872050 7C041800 40800008 7C832378 907C0005 3BBD0009 @@ -588,52 +719,72 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 38600000 -906DB650 BA810008 -800100B4 382100B0 +906DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C216D884 0000001C #Recording/SendGameEnd.asm +C216D884 00000030 #Recording/SendGameEnd.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 418200A0 +2C030000 41820144 3F208046 6339B6A0 8B590008 2C1A0000 -4182008C 830DB64C +41820130 830DB64C 88780004 2C030000 -4082007C 3C608048 +40820120 3C608048 80639D30 5463443E 2C030208 4082001C 2C1A0002 40820014 -806DB61C 8863000C -2C030000 41820050 +806DB61C 8863000F +2C030000 418200F4 83B80000 38600039 987D0000 9B5D0001 2C1A0007 4082000C 88790001 48000008 3860FFFF 987D0002 -7FA3EB78 38800003 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 38600001 -98780004 BA810008 -800100B4 382100B0 -7C0803A6 819F2514 -60000000 00000000 -C216E74C 000000E9 #Recording/SendGameInfo.asm +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 0000010A #Recording/SendGameInfo.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 4182070C +2C030000 41820814 38600005 3D808037 618CF1E4 7D8903A6 4E800421 7C7B1B78 936DB64C 38800005 3D808000 618CC160 7D8903A6 4E800421 -38600702 3D808037 +38600780 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DB0000 38600000 @@ -645,17 +796,17 @@ C216E74C 000000E9 #Recording/SendGameInfo.asm 7C7C1B78 38600035 987E0000 3860001C 987E0001 38600036 -987E0002 38600248 +987E0002 386002F8 B07E0003 38600037 -987E0005 3860003F +987E0005 38600042 B07E0006 38600038 -987E0008 3860004C +987E0008 38600054 B07E0009 38600039 -987E000B 38600002 +987E000B 38600006 B07E000C 3860003A -987E000E 38600008 +987E000E 3860000C B07E000F 3860003B -987E0011 3860002A +987E0011 3860002C B07E0012 3860003C 987E0014 38600008 B07E0015 3860003D @@ -663,7 +814,7 @@ B07E0015 3860003D 38600010 987E001A 38600204 B07E001B 38600036 987E001D -3C600309 60630100 +3C600311 60630000 907E001E 387E0022 7FE4FB78 38A00138 3D808000 618C31F4 @@ -721,93 +872,125 @@ B07E0015 3860003D 8862F23C 987E01BF 3C608048 80639D30 5463443E B07E01C0 -3C608048 80639D30 -5463443E 2C030208 -4082011C 38600000 -3D808000 618C5610 +3B200000 3C608048 +80639D30 5463443E +2C030208 4082017C +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 -7C791B78 3A800000 -3ABF0060 3AFE01C2 -3B590034 1C74001F +3A940001 2C140004 +4180FFA0 3A800000 +3ABF0060 3AFE023E +3B5900CF 1C74000A 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 40820028 -1C74001F 7C83D214 -7F03C378 38A0001F +1C74000A 7C83D214 +7F03C378 38A0000A 3D808000 618C31F4 7D8903A6 4E800421 4800001C 7F03C378 -3880001F 3D808000 +3880000A 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 4180FFA0 3A800000 3ABF0060 -3AFE023E 3B5900EF -1C74000A 7F03BA14 +3AFE0266 3B5900F7 +1C74001D 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 -40820028 1C74000A +40820028 1C74001D 7C83D214 7F03C378 -38A0000A 3D808000 +38A0001D 3D808000 618C31F4 7D8903A6 4E800421 4800001C -7F03C378 3880000A +7F03C378 3880001D 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 -4180FFA0 7F23CB78 -3D808037 618CF1B0 +4180FFA0 4800001C +387E01C2 38800118 +3D808000 618CC160 7D8903A6 4E800421 -4800001C 387E01C2 -388000A4 3D808000 -618CC160 7D8903A6 -4E800421 7FC3F378 -38800266 38A00001 -3D808000 618C55F0 +3D808000 618CADF4 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 +987E02DA 2C190000 +41820044 387E02DB +38990394 38A00033 +3D808000 618C31F4 7D8903A6 4E800421 -3AD60200 7C16E000 -4180FFA4 7EA3AB78 +3C60803D 6063AD40 +80630000 81830088 +A06C0001 907E030E +886C0006 907E0312 +4800001C 387E02DB +3880003B 3D808000 +618CC160 7D8903A6 +4E800421 2C190000 +41820018 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -38600004 38800007 -38A00000 3D808039 -618C01F0 7D8903A6 -4E800421 48000021 -7C8802A6 38A00000 -3D808038 618CFD54 +7FC3F378 38800316 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 38600205 +3D808037 618CF1E4 7D8903A6 4E800421 -48000064 4E800021 -7C0802A6 90010004 -9421FF50 BE810008 -806DB64C 83A30000 -838DB650 7FBDE214 -3860003A 987D0000 -806DB654 907D0001 -3C60804D 80635F90 -907D0005 838DB650 -3B9C0009 938DB650 -BA810008 800100B4 -382100B0 7C0803A6 +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 @@ -815,16 +998,16 @@ BA810008 800100B4 48000021 7C8802A6 38A0000F 3D808038 618CFD54 7D8903A6 -4E800421 48000124 +4E800421 4800012C 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C +90010004 9421FF20 +BE8100B0 806DB64C 83E30000 83CDB650 7FFFF214 3B600000 806DC18C 83A30024 -2C1D0000 418200D8 +2C1D0000 418200E0 3B7B0001 2C1B000F -418100CC 839D002C +418100D4 839D002C 3860003B 987F0000 806DB654 907F0001 807C0010 B07F0005 @@ -846,23 +1029,24 @@ BE810008 806DB64C 2C030000 4182000C 8863000C 48000008 3860FFFF 987F002A -83CDB650 3BDE002B -93CDB650 3BFF002B +A07C0DA8 B07F002B +83CDB650 3BDE002D +93CDB650 3BFF002D 83BD0008 2C1D0000 -4082FF30 BA810008 -800100B4 382100B0 +4082FF28 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3C608017 00000000 -C206DA34 00000035 #Recording/SendGamePostFrame.asm +C206DA34 00000038 #Recording/SendGamePostFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820168 +2C030000 41820180 887F221F 546306F7 -4082015C 8B7F000C +40820174 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600038 987D0000 @@ -904,17 +1088,20 @@ B07D0030 887F1968 807F0090 907D0041 807F00EC 907D0045 807F195C 907D0049 -838DB650 3B9C004D -938DB650 BA810008 -800100B4 382100B0 +807F0014 907D004D +A07F18EC B07D0051 +A07F2088 B07D0053 +838DB650 3B9C0055 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C206B0DC 0000002B #Recording/SendGamePreFrame.asm +C206B0E0 0000002E #Recording/SendGamePreFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820118 +2C030000 41820130 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600037 @@ -945,19 +1132,25 @@ B07D0031 80640030 3884FFFF 2C040000 40A00008 38840005 1C840030 7C632214 -1C9B000C 7C632214 -88630002 987D003B +1C9B000C 7C832214 +88640002 987D003B +88640003 987D0040 +88640004 987D0041 +88640005 987D0042 807F1830 907D003C -838DB650 3B9C0040 -938DB650 BA810008 -800100B4 382100B0 +838DB650 3B9C0043 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 881F2219 -60000000 00000000 -C2005604 00000008 #Recording/ShouldRecord.asm +807F065C 00000000 +C2005604 0000000B #Recording/ShouldRecord.asm 3C608048 80639D30 5463443E 2C030202 -4182001C 2C030302 -41820014 2C030208 +41820034 2C030302 +4182002C 2C030208 +41820024 2C03010F +4182001C 2C030120 +41820014 2C03010E 4182000C 38600000 4800000C 38600001 48000004 4E800020 @@ -971,9 +1164,14 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 3BE00000 887E221F 5460EFFF 41820038 887E000C @@ -983,8 +1181,8 @@ C20055F8 0000000F #Common/GetIsFollower.asm 1C030003 7C640214 88030002 2C000000 40820008 3BE00001 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C216D294 00000006 #Common/IncrementFrameIndex.asm @@ -1059,38 +1257,42 @@ C216EBAC 0000000C #Common/CSS KO Stars/Asign KO Stars Upon Exiting Dairantou.asm $Required: Slippi Online [Fizzi, UnclePunch] *Adds online mode, Slippi device must be in Slot B. *Change settings in Config > GameCube -C206A880 00000018 #Online/Core/BrawlOffscreenDamage.asm +C206A880 0000001B #Online/Core/BrawlOffscreenDamage.asm 7C0802A6 90010004 -9421FF50 BE810008 -887F221F 54630673 -40820088 807F0010 -2C030004 4182007C -2C030006 41820074 -3D808022 618C4A54 +9421FF20 BE8100B0 +3C608048 80639D30 +5463443E 2C030120 +41820094 887F221F +54630673 40820088 +807F0010 2C030004 +4182007C 2C030006 +41820074 3D808022 +618C4A54 7D8903A6 +4E800421 C05F00B0 +FC020840 41800060 +3D808022 618C4A68 7D8903A6 4E800421 C05F00B0 FC020840 -41800060 3D808022 -618C4A68 7D8903A6 -4E800421 C05F00B0 -FC020840 41810044 -3D808022 618C4A80 +41810044 3D808022 +618C4A80 7D8903A6 +4E800421 C05F00B4 +FC020840 41810028 +3D808022 618C4A98 7D8903A6 4E800421 C05F00B4 FC020840 -41810028 3D808022 -618C4A98 7D8903A6 -4E800421 C05F00B4 -FC020840 4180000C -38600000 48000008 -38600001 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C22F7094 0000000E #Online/Core/CustomizeMessageLRAS.asm +4180000C 38600000 +48000008 38600001 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C22F7094 0000000F #Online/Core/CustomizeMessageLRAS.asm 3CE08048 80E79D30 54E7443E 2C070208 -40820054 88EDAFA0 -2C070001 40820048 -88E30008 2C070007 -4082003C 89430001 +4082005C 88E30008 +2C070007 40820050 +89430001 886DAFA0 +2C030000 4082000C +38600003 48000018 816DB61C 886B0000 7C035000 41820018 38600005 3D808002 @@ -1099,101 +1301,107 @@ C22F7094 0000000E #Online/Core/CustomizeMessageLRAS.asm 618C7120 7D8903A6 4E800420 8903000B 60000000 00000000 -C21A4DB4 0000001C #Online/Core/ForceEngineOnRollback.asm +C21A4DB4 0000001A #Online/Core/ForceEngineOnRollback.asm 3C608048 80639D30 5463443E 2C030208 -408200B0 3C608047 +408200A4 3C608047 60639D64 80630000 -2C030000 4082009C +2C030000 40820090 3D808034 618C7364 7D8903A6 4E800421 7C7A1B78 80ADB61C 2C1B0000 41810014 -888500D9 2C040000 -41820038 3B600001 -888500D9 988507A9 -808500DB 908507AA -888500DA 988507AE -80850237 908507AF -808500D5 8084010A -908507B3 48000028 -888507B7 2C040000 -4182001C 38800000 -988507B7 3D808001 -618C95FC 7D8903A6 -4E800421 7F43D378 -3D808034 618C738C +888500DF 2C040000 +4182002C 3B600001 +888500DF 988508FF +808500E1 90850900 +888500E0 98850904 +8085038D 90850905 +48000028 8885090D +2C040000 4182001C +38800000 9885090D +3D808001 618C95FC +7D8903A6 4E800421 +7F43D378 3D808034 +618C738C 7D8903A6 +4E800421 2C1B0000 +40820014 3D80801A +618C4DA8 7D8903A6 +4E800420 00000000 +C2019614 0000000C #Online/Core/ForceInputRefetchOnAdvance.asm +3D808001 618CD2BC 7D8903A6 4E800421 -2C1B0000 40820014 -3D80801A 618C4DA8 -7D8903A6 4E800420 -60000000 00000000 -C216D310 00000009 #Online/Core/HandleLRAS.asm 3C608048 80639D30 5463443E 2C030208 -40820028 3C608046 -6063B6A0 88630008 -2C030007 40820014 -808DB61C 806407A5 -7C6903A6 4E800421 -8001003C 83E10034 +40820038 3C608047 +60639D64 80630000 +2C030000 40820024 +80ADB61C 88650014 +2C030000 41820014 +3D808001 618C95FC +7D8903A6 4E800421 60000000 00000000 C234DED8 0000000F #Online/Core/HandleRumble.asm 3BA30000 3C608048 80639D30 5463443E 2C030208 4082005C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 83EDB61C 887F0000 7C03E800 41820024 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808034 618CDF44 7D8903A6 4E800420 -887F0002 BA810008 -800100B4 382100B0 +887F0002 BA8100B0 +800100E4 382100E0 7C0803A6 7C7D1B78 60000000 00000000 -C216E748 00000070 #Online/Core/InitOnlinePlay.asm +C216E748 000000A3 #Online/Core/InitOnlinePlay.asm 3D808022 618C54B8 7D8903A6 4E800421 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -40820338 386007C0 +408204D0 38600B2F 3D808037 618CF1E4 7D8903A6 4E800421 -7C7B1B78 388007C0 +7C7B1B78 38800B2F 3D808000 618CC160 7D8903A6 4E800421 -936DB61C 38600001 -907B0003 4800023D -7C6802A6 907B07A5 -38600012 3D808037 +936DB61C 3C60803D +6063AD40 80630000 +81830088 886DAFA0 +2C030000 41820010 +A06C0001 38630001 +B06C0001 38600001 +907B0003 4800028D +7C6802A6 907B08FB +3860001A 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D1 -3860010E 3D808037 +4E800421 907B00D7 +38600126 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D5 -7C7A1B78 3880010E +4E800421 907B00DB +7C7A1B78 38800126 3D808000 618CC160 7D8903A6 4E800421 38600021 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 -933B024A 3860009E +933B03A0 3860009E 3D808037 618CF1E4 7D8903A6 4E800421 -907B024E 3880009E +907B03A4 3880009E 3D808000 618CC160 7D8903A6 4E800421 38800000 98830000 38800007 98830001 -93790005 386007C0 +93790005 38600B2F 90790009 9359000D -3860010E 90790011 -807B024E 90790015 +38600126 90790011 +807B03A4 90790015 3860009E 90790019 38600000 9079001D 38600000 3D808000 @@ -1204,10 +1412,20 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 88780004 987B0001 80780005 907B0007 3C80804D 90645F90 -7FE3FB78 38980208 +7FE3FB78 3898025C 38A00138 3D808000 618C31F4 7D8903A6 4E800421 886DAFA0 +2C030000 40820048 +3CA0803D 60A5AD40 +80A50000 80A50088 +88650006 2C030000 +4182002C 88650017 +2C030007 41820020 +386000B4 907F0010 +38600001 987F0062 +987F0086 987F00AA +987F00CE 886DAFA0 2C030003 40820048 3AE00000 1CB70024 38650069 7C7F18AE @@ -1222,7 +1440,7 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 2C03000F 41810010 48000010 38600001 48000008 3860000F -987B001B 38A00000 +987B0021 38A00000 3C60804C 606320BC 1C850044 7C632214 38800000 90830000 @@ -1234,132 +1452,222 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 48000021 7C8802A6 38A00000 3D808038 618CFD54 7D8903A6 -4E800421 480000EC +4E800421 4800020C 4E800021 3C608048 80639D60 5464803E 806DB61C 80630007 7C841A14 3C60804D 90835F90 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 838DB61C -886DAFA0 2C030001 -4082008C 38600011 +90010004 9421FF20 +BE8100B0 838DB61C +3CA0803D 60A5AD40 +80A50000 83650088 +3F408047 635A9DA4 +7F43D378 3C808046 +6084B8EC 38A02278 +3D808000 618C31F4 +7D8903A6 4E800421 +3C808046 6084B6A0 +7F43D378 880424D0 +98030006 88040008 +98030004 3D808016 +618C6378 7D8903A6 +4E800421 38600171 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 386000BD -987E0000 807C0003 -907E0001 3BE00000 -3BBE0005 7FE3FB78 -3D808003 618C1724 -7D8903A6 4E800421 -38800001 989D0000 -8883008E 989D0001 -80830D28 909D0002 -3BFF0001 3BBD0006 -2C1F0002 4180FFC8 -7FC3F378 38800011 +987E0000 886DAFA0 +987E0001 3D80801A +618C4BA8 7D8903A6 +4E800421 907E0002 +A07B0001 907E0006 +887B0006 907E000A +807B0018 7C6903A6 +4E800421 987E000E +887C0011 2C030000 +3880FFFD 40820018 +887C0012 2C030000 +3880FFFE 40820008 +48000008 989E000E +3C808046 6084B6A0 +88640008 987E000F +2C030007 4082000C +88640001 48000008 +3860FFFF 987E0010 +809C0B1F 909E0011 +3BE00000 3BBE0015 +7FE3FB78 3D808003 +618C1724 7D8903A6 +4E800421 80830008 +989D0000 8883008E +989D0001 80830D28 +909D0002 1CBF0003 +38850B23 7C9C20AE +989D0006 38850B24 +7C9C222E B09D0007 +3BFF0001 3BBD0009 +2C1F0004 4180FFAC +387E0039 3C808048 +60840530 38A00138 +3D808000 618C31F4 +7D8903A6 4E800421 +7FC3F378 38800171 38A00001 3D808000 618C55F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 -C216E904 0000004B #Online/Core/InitPause.asm +C216E904 0000004C #Online/Core/InitPause.asm 3C608048 80639D30 5463443E 2C030208 -4082023C 3D808046 -618CDB68 886C0002 -54630739 41820028 -48000029 7C6802A6 -906C0040 38600000 -986DAFC8 886C0002 -38800000 50831F38 -986C0002 48000200 -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 83ADB61C -3BC00000 7FC3F378 -3D808003 618C241C -7D8903A6 4E800421 -2C030000 40820060 -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 -7D8903A6 4E800421 -2C030000 41820038 -3C80804C 60841FAC -1C7E0044 7C632214 -80630000 54600673 -4182001C 546006B5 -41820014 546005EF -4182000C 546004E7 -40820068 3BDE0001 -2C1E0004 4180FF80 -8BDD0000 3C80804C -60841FAC 1C7E0044 -7FE32214 886DAFC8 -2C030000 418200AC -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 -7D8903A6 4E800421 -2C030000 41820054 -807F0008 546004E7 -40820048 480000F0 -3C608046 6063B6A0 -9BC30001 38800007 -98830008 3880001E -988324D5 3D80802F -618C3394 7D8903A6 -4E800421 3D80801A -618C10FC 7D8903A6 -4E800421 480000B0 +40820248 886DAFA0 +2C030000 4182023C +3D808046 618CDB68 +886C0002 54630739 +41820028 48000029 +7C6802A6 906C0040 38600000 986DAFC8 -3D80802F 618C33CC +886C0002 38800000 +50831F38 986C0002 +48000200 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +83ADB61C 3BC00000 +7FC3F378 3D808003 +618C241C 7D8903A6 +4E800421 2C030000 +40820060 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820038 3C80804C +60841FAC 1C7E0044 +7C632214 80630000 +54600673 4182001C +546006B5 41820014 +546005EF 4182000C +546004E7 40820068 +3BDE0001 2C1E0004 +4180FF80 8BDD0000 +3C80804C 60841FAC +1C7E0044 7FE32214 +886DAFC8 2C030000 +418200AC 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820054 807F0008 +546004E7 40820048 +480000F0 3C608046 +6063B6A0 9BC30001 +38800007 98830008 +3880001E 988324D5 +3D80802F 618C3394 7D8903A6 4E800421 -7FC3F378 3D80801A -618C10FC 7D8903A6 -4E800421 48000080 -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 +3D80801A 618C10FC 7D8903A6 4E800421 -2C030000 41820058 -807F0008 546004E7 -4182004C 38600001 +480000B0 38600000 986DAFC8 3D80802F -618C3394 7D8903A6 +618C33CC 7D8903A6 4E800421 7FC3F378 -38800005 3D80801A -618C0FEC 7D8903A6 -4E800421 38600005 -3D808002 618C4030 +3D80801A 618C10FC 7D8903A6 4E800421 -48000004 3860FFFF -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 881F0001 -60000000 00000000 -C21A5014 0000004F #Online/Core/LoopEngineForRollback.asm +48000080 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820058 807F0008 +546004E7 4182004C +38600001 986DAFC8 +3D80802F 618C3394 +7D8903A6 4E800421 +7FC3F378 38800005 +3D80801A 618C0FEC +7D8903A6 4E800421 +38600005 3D808002 +618C4030 7D8903A6 +4E800421 48000004 +3860FFFF BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +881F0001 00000000 +C22F70C4 00000034 #Online/Core/LGLExceededGameEnd.asm +48000058 4E800021 +3F333333 00000000 +428C0000 42700000 +3F800000 000000FF +D7A5FFFF FAFA78FF +596F7500 4F70706F +6E656E74 00257320 +45786365 65646564 +204C6564 67652047 +72616220 4C696D69 +74206F66 20256400 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C9F2378 7CBE2B78 +7CDD3378 3B200000 +4BFFFF8D 7F0802A6 +3C608048 80639D30 +5463443E 2C030208 +408200E8 886DAFA0 +2C030003 418200DC +38600000 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7C1B78 +38600001 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7B1B78 +2C1C002D 4081000C +2C1B002D 4181009C +2C1C002D 3B400000 +41810014 2C1B002D +3B400001 41810008 +48000080 806DB61C +88630000 7C03D000 +3B200002 3AF8001C +3AD80024 C0780008 +40820014 3B200006 +3AF80018 3AD80020 +C078000C 3C608046 +6063B6A0 388000FD +988324D5 806DB61C +80630912 7EE4BB78 +38A00001 38D80014 +38F8002D 7EC8B378 +3920002D C0380000 +C0580004 C0D80010 +3D808000 618C56B4 +7D8903A6 4E800421 +7FE4FB78 7FC5F378 +7FA6EB78 7F23CB78 +BA8100B0 800100E4 +382100E0 7C0803A6 +38FF0000 00000000 +C21A5014 0000005C #Online/Core/LoopEngineForRollback.asm 41A20014 3D80801A 618C5024 7D8903A6 4E800420 3C608048 80639D30 5463443E -2C030208 40820250 +2C030208 408202B8 3C608047 60639D64 80630000 2C030000 -4082023C 7C0802A6 -90010004 9421FF50 -BE810008 3D808034 +408202A4 7C0802A6 +90010004 9421FF20 +BE8100B0 3D808034 618C7364 7D8903A6 4E800421 7C7D1B78 -83EDB61C 3BDF0252 +83EDB61C 3BDF03A8 8B9E0000 3F008048 83189D60 3B18FFFF -82FF07A1 7C18B800 +82FF08F7 7C18B800 4181009C 7C78B850 38630001 8B9E0000 7F83E051 40800008 @@ -1372,7 +1680,7 @@ BE810008 3D808034 1C870006 7C862214 A0840001 7C032000 41820030 38E70001 -88660000 2C070003 +88660000 7C071800 4180FFD4 1C790006 7C651A14 80630003 3D808002 618C36B8 @@ -1388,50 +1696,63 @@ A0840001 7C032000 38800061 3D808000 618CC160 7D8903A6 4E800421 7C18B800 -4081001C 931F07A1 +4081001C 931F08F7 3B9C0001 2C1C0007 41800008 3B9CFFF9 -9B9E0000 7FA3EB78 -3D808034 618C738C -7D8903A6 4E800421 -8B7F07A9 2C1B0001 -408200CC 48000025 -BA810008 800100B4 -382100B0 7C0803A6 -3D80801A 618C4DE4 +9B9E0000 8B7F08FF +2C1B0001 40820134 +807F0900 7C181800 +41800048 38600000 +987F00DF 987F08FF +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 3B5A0001 +3D80801A 618C5024 7D8903A6 4E800420 -7C0802A6 90010004 -9421FF50 BE810008 -3D808003 618C0A50 -7D8903A6 4E800421 -3D808002 618CA4AC -7D8903A6 4E800421 -3D808003 618C0A50 -7D8903A6 4E800421 -80630028 3D808036 -618C8458 7D8903A6 -4E800421 806DC18C -82830020 4800002C -82B4002C 8875221F -546006F7 40820018 -7E83A378 3D808008 -618C6A8C 7D8903A6 -4E800421 82940008 -2C140000 4082FFD4 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C216D26C 00000003 #Online/Core/PauseCounter.asm -808DB61C 806407BC -38630001 906407BC -387F0000 00000000 -C216CD08 0000000A #Online/Core/PreventPauseStranding.asm -3C608048 80639D30 -5463443E 2C030208 +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 48000029 +BA8100B0 800100E4 +382100E0 7C0803A6 +3B5A0001 3D80801A +618C4DE4 7D8903A6 +4E800420 7C0802A6 +90010004 9421FF20 +BE8100B0 3D808003 +618C0A50 7D8903A6 +4E800421 3D808002 +618CA4AC 7D8903A6 +4E800421 3D808003 +618C0A50 7D8903A6 +4E800421 80630028 +3D808036 618C8458 +7D8903A6 4E800421 +806DC18C 82830020 +4800002C 82B4002C +8875221F 546006F7 +40820018 7E83A378 +3D808008 618C6A8C +7D8903A6 4E800421 +82940008 2C140000 +4082FFD4 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C216D26C 00000003 #Online/Core/PauseCounter.asm +808DB61C 80640916 +38630001 90640916 +387F0000 00000000 +C216CD08 0000000A #Online/Core/PreventPauseStranding.asm +3C608048 80639D30 +5463443E 2C030208 40820038 83ADB61C -887D000D 2C030001 +887D0010 2C030001 40820028 889D0000 887E0001 7C630774 7C032000 41820014 @@ -1443,69 +1764,129 @@ C216EA30 00000004 #Online/Core/Remember Who LRA Started.asm 40820014 3C808046 6084B6A0 88840001 989E000C 00000000 -C2376A20 0000000A #Online/Core/SkipNewInputFetchOnRollback.asm +C216E9E8 00000008 #Online/Core/ReportNoContestLRAS.asm 3C608048 80639D30 5463443E 2C030208 -40820038 3C608047 +40820028 818DB61C +886C000F 2C030000 +40820018 38600001 +986C000F 806C08FB +7C6903A6 4E800421 +881F000E 00000000 +C2376A20 0000000C #Online/Core/SkipNewInputFetchOnRollback.asm +3C608048 80639D30 +5463443E 2C030208 +40820044 3C608047 60639D64 80630000 -2C030000 40820024 -806DB61C 886300D9 -2C030001 40820014 -3D808037 618C6A28 -7D8903A6 4E800420 -3861002C 00000000 -C21A4DE4 0000005C #Online/Core/StartEngineLoop.asm +2C030000 40820030 +808DB61C 886400DF +2C030000 41820020 +886400E0 2C030000 +40820014 3D808037 +618C6A28 7D8903A6 +4E800420 3861002C +60000000 00000000 +C21A4DE4 000000D3 #Online/Core/StartEngineLoop.asm 3D808037 618CE214 7D8903A6 4E800421 -48000030 4E800021 -00000000 3F800000 -3FA66666 C2340000 -3D8F5C29 FF0000FF +4800022C 4E800021 +41100000 C3220000 +3F333333 FF0000FF 44495343 4F4E4E45 -43544544 00000000 +43544544 00411000 +00C30C00 003F0000 +00FFB800 FF444553 +594E4320 44455445 +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 -9421FF50 BE810008 -3C608048 80639D30 -5463443E 2C030208 -4082026C 3C608047 -60639D64 80630000 -2C030000 40820258 -834DB61C 3F608048 -837B9D60 3D808034 -618C7364 7D8903A6 -4E800421 7C791B78 -887A000E 2C030000 -408200D0 887A000D -2C030000 418200C4 -38600003 3D808002 -618C4030 7D8903A6 -4E800421 4BFFFF51 -7EE802A6 38600002 -809A07B8 3D80803A -618C6754 7D8903A6 -4E800421 7C781B78 -38800001 98980049 -38800001 9898004A -C0370000 D0380008 -C0370004 D0380024 -D0380028 C0370008 -C057000C 7F03C378 -38970018 3D80803A -618C6B98 7D8903A6 -4E800421 7F03C378 -38800000 C0370010 -C0570010 3D80803A +9421FF20 BE8100B0 +7C7D1B78 4BFFFE91 +7FE802A6 7FFF2214 +C03F0000 C05F0004 +7FA3EB78 389F0010 +3D80803A 618C6B98 +7D8903A6 4E800421 +7C7E1B78 7FA3EB78 +7FC4F378 C03F0008 +C05F0008 3D80803A 618C7548 7D8903A6 -4E800421 7F03C378 -38800000 38B70014 +4E800421 7FA3EB78 +7FC4F378 38BF000C 3D80803A 618C74F0 7D8903A6 4E800421 -38600001 987A000E -887A07A9 2C030000 -418200B8 887A07AE -2C030000 41820084 -807A024A 809A07AF -80BA024E 3D808000 +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 40820424 +3C608047 60639D64 +80630000 2C030000 +40820410 83CDB61C +3FE08048 83FF9D60 +839E00DB 3D808034 +618C7364 7D8903A6 +4E800421 7C791B78 +887E0011 2C030000 +40820048 887E0010 +2C030000 4182003C +887E000F 2C030000 +40820030 38600003 +3D808002 618C4030 +7D8903A6 4E800421 +807E0912 38800000 +4BFFFE99 38600001 +987E0011 4BFFFF25 +887E08FF 2C030000 +418200B0 887E0904 +2C030000 41820094 +807E0905 7C1F1800 +41820024 41800094 +807E03A0 809E0905 +80BE03A4 3D808000 618C560C 7D8903A6 4E800421 3D808001 618C9894 7D8903A6 @@ -1514,273 +1895,359 @@ C0570010 3D80803A 7C832051 4080000C 88650000 7C841A14 98850002 38600000 -98650003 3F608048 -837B9D60 807A0237 -907A0003 38600000 -987A0236 987A0247 -987A0248 987A0249 -987A00DA 987A07AE +98650003 3FE08048 +83FF9D60 807E038D +907E0003 38600000 +987E038C 987E039D +987E039E 987E039F +987E00E0 987E0904 3D808001 618C95FC 7D8903A6 4E800421 -807A07AA 7C1B1800 -41800010 38600000 -987A00D9 987A07A9 -887A0236 2C030000 -4182002C 807A0237 -7C1B1800 41800020 -807A024A 7F64DB78 -80BA024E 3D808000 +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 +4BFFFC4D 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 +7C161800 40800008 +7E9DA378 A0740006 +A0970006 7C630734 +7C840734 7C641850 +2C03FFFF 41800010 +2C030001 41810008 +48000034 38600003 +3D808002 618C4030 +7D8903A6 4E800421 +807E0912 3880001D +4BFFFC29 38600001 +987E0012 4BFFFCB5 +48000080 887E0013 +2C030000 40820028 +A0740004 A0970004 +7C032000 41820018 +807E0912 3880003D +4BFFFBF1 38600001 +987E0013 48000010 +3AB50001 2C150015 +4180FF3C 3B180001 +887C0001 7C181800 +4180FF04 2C1D0000 +41820028 807D0008 +907E0B1F 387E0B23 +389D000C 38A0000C +3D808000 618C31F4 +7D8903A6 4E800421 +887E038C 2C030000 +4182002C 807E0909 +7C1F1800 40810020 +807E03A0 7FE4FB78 +80BE03A4 3D808000 618C5608 7D8903A6 -4E800421 887A000C -2C030001 4182004C +4E800421 887E000F +2C030001 41820058 3C608046 6063B6A0 88630008 2C030000 40820010 38600000 -987A000B 4800002C -887A000B 38630001 -987A000B 2C030007 -40810018 38600001 -987A000C 807A07A5 -7C6903A6 4E800421 -7F23CB78 3D808034 -618C738C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C2376A28 000000DD #Online/Core/TriggerSendInput.asm +907E000B 48000038 +807E000B 2C030000 +40820008 93FE000B +807E000B 7C63F850 +2C030007 40810018 +38600001 987E000F +807E08FB 7C6903A6 +4E800421 7F23CB78 +3D808034 618C738C +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -408206B0 3C608047 +40820754 3C608047 60639D64 80630000 -2C030000 4082069C -836DB61C 833B00D1 -831B00D5 82FB024A -835B0003 887B00D9 -2C030001 418205F8 -887B001B 38800054 -7C632050 2C1A0003 -4080001C 386100DC +2C030000 40820740 +83C10000 836DB61C +833B00D7 831B00DB +82FB03A0 835B0003 +889B0002 1C84000C +3864002C 7FBE1A14 +887B00DF 2C030000 +41820010 887B00E0 +2C030000 4182067C +887B0021 3880004E +7C632050 7C1A1800 +4080001C 387E002C 38800030 3D808000 618CC160 7D8903A6 -4E800421 889B0002 -1C84000C 386400E6 -7C6118AE 7C630774 -2C03FFFD 40820024 -386400DC 7C611A14 -389B000F 38A0000C +4E800421 48000040 +88830000 7C840774 +2C04FFFE 4180002C +2C040002 41810024 +88830001 7C840774 +2C04FFFE 41800014 +2C040002 4181000C +38800000 B0830000 +4E800020 387D0002 +4BFFFFC1 387D0004 +4BFFFFB9 887D000A +7C630774 2C03FFFD +40820020 7FA3EB78 +389B0015 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -889B0002 1C84000C -388400DC 387B000F -7C812214 38A0000C -3D808000 618C31F4 -7D8903A6 4E800421 -386000B0 98790000 -93590001 887B001B -98790005 889B0002 -1C84000C 388400DC -38790006 7C812214 +387B0015 7FA4EB78 +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 386000B0 +98790000 93590001 +807B0909 90790005 +819B0909 39600000 +1C6B0018 38630927 +7D5B1A14 806A0000 +7C036000 40820010 +806A0004 90790009 +48000010 396B0001 +2C0B0015 4180FFD4 +887B0021 9879000D +3879000E 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 7F23CB78 -38800012 38A00001 +3880001A 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -38780000 3880010E +38780000 38800126 38A00000 3D808000 618C55F0 7D8903A6 -4E800421 88780000 -2C030002 4182001C -2C030003 41820008 -48000030 38600001 -987B000D 48000024 -BA810008 800100B4 -382100B0 7C0803A6 -3D808037 618C6CEC -7D8903A6 4E800420 -889B001C 1C84000C -3884001D 887B0000 -1C63000C 386300DC -7C611A14 7C9B2214 -38A0000C 3D808000 -618C31F4 7D8903A6 -4E800421 887B00DF -1C63000C 386300E0 -889B0000 1C84000C -388400DC 7C7B1A14 -7C812214 38A0000C -3D808000 618C31F4 -7D8903A6 4E800421 -887B00DF 38630001 -2C030007 41800008 -38600000 987B00DF -887B001C 1C63000C -3863001D 7C7B1A14 -38990006 38A0000C +4E800421 38600000 +987B0014 88780000 +2C030002 41820024 +2C030003 41820010 +2C030004 41820040 +48000044 38600001 +987B0010 48000038 +887B000F 2C030001 +4182002C BA8100B0 +800100E4 382100E0 +7C0803A6 3D808037 +618C6CEC 7D8903A6 +4E800420 38600001 +987B0014 889B0022 +1C84000C 38840023 +887B0000 1C63000C +3863002C 7C7E1A14 +7C9B2214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -889B001B 887B001C -38630001 7C032000 +887B00E5 1C63000C +386300E6 889B0000 +1C84000C 3884002C +7C7B1A14 7C9E2214 +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 887B00E5 +38630001 2C03000E 41800008 38600000 -987B001C 887B0236 +987B00E5 887B0022 +1C63000C 38630023 +7C7B1A14 3899000E +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 889B0021 +887B0022 38630001 +7C032000 41800008 +38600000 987B0022 +8B9B00DF 887B038C 2C030000 40820018 -38600000 987B0247 -987B0248 987B0249 -48000284 3A800000 -38D40247 7C66D8AE -2C030001 40820178 -1CD40004 38C60002 +38600000 987B039D +987B039E 987B039F +48000264 3A800000 +38D4039D 7C66D8AE +2C030001 4082016C +1CD40004 38C6001A 7C66C02E 1CD40004 -38C6023B 7C86D82E -7C641851 41800158 -7C761B78 38D40134 -7C66D8AE 38D40137 -7C86D8AE 7EC3B378 -1C63000C 3863000E +38C60391 7C86D82E +7EC41851 4180014C +80DB0909 7C043000 +41810010 7C032000 +418100AC 48000134 +1C76000C 3863002A 1CD40054 7C633214 -38D40134 7C86D8AE -1C84000C 3884013A -1CB40054 7C842A14 +38D4018E 7C86D8AE +1C84000C 38840194 +1CB400A8 7C842A14 7CD81A14 7CFB2214 88660000 88870000 546306FE 548406FE -7C032000 408200BC +7C032000 408200AC 88660001 88870001 5463067E 5484067E -7C032000 408200A4 -80660002 80870002 7C032000 40820094 +80660002 80870002 +7C032000 40820084 38A00005 38A50001 2C050008 40800028 7C6530AE 7C8538AE 2C03002A 4181000C 2C04002A 4081FFE0 -7C032000 40820064 +7C032000 40820054 4BFFFFD4 1CD40004 -38C6023B 7C66D82E +38C60391 7C66D82E 38630001 7C66D92E -38D40134 7C66D8AE -38630001 2C030007 -41800008 3863FFF9 -7C66D9AE 38D40134 -7C66D8AE 38D40137 -7C86D8AE 38D40134 -7C66D8AE 38D40137 +38D4018E 7C66D8AE +38630001 2C03000E +41800008 3863FFF2 +7C66D9AE 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 -4082FEC0 48000040 -1CD40004 38C6023B -7C66D82E 38600001 -987B00D9 987B00DA -935B00DB BA810008 -800100B4 382100B0 -7C0803A6 3D808037 -618C6CEC 7D8903A6 -4E800420 3A940001 -2C140003 4180FE74 -3AA00000 3A800000 -807B0237 7C761B78 -7EC3B378 38D40247 -7C86D8AE 7C761B78 -7EC3B378 38D40247 -7C86D8AE 2C040001 -40820030 1CD40004 -38C6023B 7C86D82E -2C150000 4182000C -7C041800 40800014 -7C832378 7C761B78 -7EC3B378 3AA00001 +4082FED0 48000044 +3B800001 4800003C +38600001 987B00DF +987B00E0 935B00E1 +3B5A0001 935B0003 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808037 618C6CEC +7D8903A6 4E800420 3A940001 2C140003 -4180FFAC 907B0237 -3A800000 38D40247 +4180FE80 39600000 +3A800000 82BB0909 +38D4039D 7C86D8AE +2C040001 40820028 +1CD40004 38C60391 +7C86D82E 2C0B0000 +4182000C 7C04A800 +40800008 7C952378 +39600001 3A940001 +2C140003 4180FFC4 +92BB038D 92BB091A +80D80026 7C153000 +40810008 90DB091A +2C1C0000 4082FF54 +3A800000 38D4039D 7C86D8AE 2C040001 -40820038 38D40134 -7C66D8AE 38D40137 -7C86D8AE 38D40134 -7C66D8AE 38D40137 +40820028 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 40820010 38600000 -38D40247 7C66D9AE +38D4039D 7C66D9AE 3A940001 2C140003 -4180FFB4 3A800000 -38D40247 7C86D8AE +4180FFC4 3A800000 +38D4039D 7C86D8AE 2C040001 41820018 3A940001 2C140003 4180FFE8 38600000 -987B0236 3A800000 -3AA00000 887B0000 -7C151800 40820008 -3AB50001 1CD40004 -38C60002 7C66C02E -7C7A1850 2C030000 -408000D4 887B001B -38800054 7C632050 -7C1A1800 418000BC -887B000C 2C030001 -418200B0 38D40137 +987B038C 3A800000 +3AA00000 3B800001 +887B0000 7C151800 +40820008 3AB50001 +1CD40004 38C6001A +7C66C02E 7C7A1850 +2C030000 408000D8 +887B0021 3880004E +7C632050 7C1A1800 +418000C0 887B000F +2C030001 418200B4 +3B800000 38D40191 7EC6D8AE 1C76000C -3863013A 1CB40054 +38630194 1CB400A8 7C632A14 1CD40054 -38C6000E 7C7B1A14 +38C6002A 7C7B1A14 7C983214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -38760001 2C030007 -41800008 3863FFF9 -38D40137 7C66D9AE -38D40134 7C66D8AE -38D40137 7C86D8AE -38D40247 7C66D8AE +38760001 2C03000E +41800008 3863FFF2 +38D40191 7C66D9AE +38D4018E 7C66D8AE +38D40191 7C86D8AE +38D4039D 7C66D8AE 2C030001 4182003C -1CD40004 38C6023B +1CD40004 38C60391 7F46D92E 38600001 -38D40247 7C66D9AE -38D40134 7EC6D9AE -887B0236 2C030001 -41820010 935B0237 -38600001 987B0236 +38D4039D 7C66D9AE +38D4018E 7EC6D9AE +887B038C 2C030001 +41820010 935B038D +38600001 987B038C 38600000 1C63000C -38A3000E 1CD40054 +38A3002A 1CD40054 7CA53214 1C75000C -386300DC 7C611A14 +3863002C 7C7E1A14 7C982A14 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 3A940001 3AB50001 -2C140003 4180FEC8 -48000080 807B00DB -7C1A1800 40810024 -BA810008 800100B4 -382100B0 7C0803A6 -3D808037 618C6CEC -7D8903A6 4E800420 -807B00DB 7C7A1850 -38630001 889B00DF -7C632051 40800008 -38630007 1C63000C -388300E0 887B0000 -1C63000C 386300DC -7C611A14 7C9B2214 -38A0000C 3D808000 -618C31F4 7D8903A6 -4E800421 4BFFFE40 -3B5A0001 935B0003 -BA810008 800100B4 -382100B0 7C0803A6 -2C1E0000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 +2C140003 4180FEC4 +2C1C0000 41820008 +935B091A 48000080 +807B00E1 7C1A1800 +40810024 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808037 +618C6CEC 7D8903A6 +4E800420 807B00E1 +7C7A1850 38630001 +889B00E5 7C632051 +40800008 3863000E +1C63000C 388300E6 +887B0000 1C63000C +3863002C 7C7E1A14 +7C9B2214 38A0000C +3D808000 618C31F4 +7D8903A6 4E800421 +4BFFFE2C 3B5A0001 +935B0003 BA8100B0 +800100E4 382100E0 +7C0803A6 2C1E0000 +60000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 -90010004 9421FF50 -BE810008 83EDAFC4 +90010004 9421FF20 +BE8100B0 83EDAFC4 2C1F0000 40820018 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 480000A0 386000D1 987F0000 387F0001 7FC4F378 3D808032 @@ -1795,8 +2262,8 @@ BA810008 800100B4 38800004 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 80630000 2C030000 40810014 3D808001 618C6488 @@ -1804,8 +2271,8 @@ BA810008 800100B4 7FC3F378 00000000 C20166B8 00000029 #Online/Core/EXIFileLoad/TransferFile.asm 7C7E1B78 7C0802A6 -90010004 9421FF50 -BE810008 83EDAFC4 +90010004 9421FF20 +BE8100B0 83EDAFC4 2C1F0000 41820110 386000D1 987F0000 387F0001 7FC4F378 @@ -1836,12 +2303,12 @@ BE810008 83EDAFC4 7FA4EB78 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 38600001 3D808001 618C674C 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 7FC3F378 60000000 00000000 C20D4C1C 00000005 #Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm @@ -1864,7 +2331,7 @@ D03F2364 3D80800D 4E800420 00000000 C2080E80 00000011 #Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808003 618C10B8 7D8903A6 4E800421 3D808036 618C9808 @@ -1875,8 +2342,8 @@ C2080E80 00000011 #Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm 80610080 907F0038 80610084 907F003C 80610088 907F0040 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808008 618C0EE4 7D8903A6 4E800420 60000000 00000000 @@ -1895,33 +2362,91 @@ C2376304 0000000B #Online/Core/Hacks/ForceNoVideoAssert.asm 25640A00 00000000 C23A63A8 0000000C #Online/Core/Hacks/LoadPremadeTextDataFromDolphin.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C9D2378 7CDC3378 886DAFEC 2C030000 41820024 7FA3EB78 7F84E378 3D808000 618C56A4 7D8903A6 4E800421 7C7E1B78 -93DF005C BA810008 -800100B4 382100B0 +93DF005C BA8100B0 +800100E4 382100E0 7C0803A6 38600000 986DAFEC 00000000 04321D70 38600000 #Online/Core/Hacks/PreventCharacterCrowdChants.asm -C2019608 0000000E #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm +C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 9421FFF8 3C608048 80639D30 5463443E -2C030208 40820050 +2C030208 40820058 3C608047 60639D64 80630000 2C030000 -4082003C 3C608037 -60635E00 2C000003 -4082002C 80ADB61C -886500D9 2C030000 +40820044 80ADB61C +38600000 98650014 +3C608037 60635E00 +7C001800 40820028 +886500DF 2C030000 4182001C 38600001 -986507B7 3D808001 +9865090D 3D808001 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 @@ -1935,13 +2460,13 @@ C238D224 00000018 #Online/Core/Sound/AssignSoundInstanceId.asm 3C608047 60639D64 80630000 2C030000 40820090 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BDF0252 8B9E0000 +90010004 9421FF20 +BE8100B0 83EDB61C +3BDF03A8 8B9E0000 3C608048 80639D60 -809F07A1 7C032000 +809F08F7 7C032000 41810028 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -1950,21 +2475,21 @@ BE810008 83EDB61C 3863FFFF 1C630006 38A60001 7CA51A14 807D000C 90650002 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 C2088224 0000001D #Online/Core/Sound/NoDestroyVoice.asm 3C608048 80639D30 5463443E 2C030208 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BBF0252 57DE043E +90010004 9421FF20 +BE8100B0 83EDB61C +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F07A1 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -1975,26 +2500,26 @@ BE810008 83EDB61C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C8244 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C20882B0 0000001D #Online/Core/Sound/NoDestroyVoice2.asm 3C608048 80639D30 5463443E 2C030208 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BBF0252 57DE043E +90010004 9421FF20 +BE8100B0 83EDB61C +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F07A1 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2005,12 +2530,12 @@ BE810008 83EDB61C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C82D0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm @@ -2020,14 +2545,14 @@ C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm 60639D64 80630000 2C030000 40820120 7C0802A6 90010004 -9421FF50 BE810008 -83EDB61C 3BDF0252 +9421FF20 BE8100B0 +83EDB61C 3BDF03A8 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 80639D60 -809F07A1 7C032000 +809F08F7 7C032000 41810070 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -2048,12 +2573,12 @@ A0650000 7C1B1800 93450002 88660000 38630001 98660000 2C1D0000 41820028 -7F43D378 BA810008 -800100B4 382100B0 +7F43D378 BA8100B0 +800100E4 382100E0 7C0803A6 3D808038 618CD2A0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 2C1A0000 60000000 00000000 C216BE28 0000000A #Online/Core/Teams/PreventDeadStranding.asm @@ -2062,11 +2587,18 @@ C216BE28 0000000A #Online/Core/Teams/PreventDeadStranding.asm 5484443E 2C040208 4082002C 888DAFA0 2C040003 40820020 -808DB61C 8884000D +808DB61C 88840010 2C040001 41820008 4800000C 38600000 48000004 2C030000 60000000 00000000 +C208653C 00000006 #Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm +819D002C 806C0010 +2C03000B 41810018 +38000000 3D808008 +618C655C 7D8903A6 +4E800420 C0210020 +60000000 00000000 C2266BC4 00000006 #Online/Menus/CSS/DisableLRSTART.asm 3C608048 80639D30 5463443E 2C030008 @@ -2090,14 +2622,14 @@ C2260310 00000008 #Online/Menus/CSS/FetchMatchInfo.asm 618C5610 7D8903A6 4E800421 38000000 60000000 00000000 -C2263258 00000168 #Online/Menus/CSS/HandleInputsOnCSS.asm +C2263258 000000BC #Online/Menus/CSS/HandleInputsOnCSS.asm 41A20014 3D808026 618C3334 7D8903A6 4E800420 7C0802A6 -90010004 9421FF50 -BE810008 3C608048 +90010004 9421FF20 +BE8100B0 3C608048 80639D30 5463443E -2C030008 40820AF8 +2C030008 40820598 7CFB3B78 3F008000 63185614 83180000 83580000 3B800000 @@ -2115,75 +2647,79 @@ BE810008 3C608048 38600000 48000008 38600003 3D808002 618C4030 7D8903A6 -4E800421 480004C9 -887A0000 2C030000 -40810020 2C030003 -40810084 2C030004 -41820088 2C030005 -418201E0 48000A20 -88780014 2C030000 -40820A14 576004E7 -41820A0C 3C608048 -80639D60 2C030000 -418209FC 3860FFFF -986DAFC9 38600000 -986DAFCA 886DB657 -2C030000 418209E0 -886DAFA0 2C030001 -41820010 2C030002 -40800014 48000000 -3860FFFE 48000355 -480009BC 4800037D -480009B4 576006F7 -408203B9 480009A8 -3D80801A 618C3680 -7D8903A6 4E800421 -548006F7 41820024 -88780013 38630001 -98780013 2C030030 -40810014 9B980013 -48000381 48000970 -9B980013 887A0001 -2C030000 408200EC -576004E7 4082002C -886DAFA0 2C030002 -418000D8 886DAFC9 -2C030000 408200CC -886DAFCA 2C030001 -408200C0 48000004 +4E800421 887A0000 +2C030000 40810020 +2C030003 4081008C +2C030004 41820090 +2C030005 418201E8 +480004C4 88780014 +2C030000 408204B8 +576004E7 418204B0 +3C608048 80639D60 +2C030000 418204A0 +3860FFFF 986DAFC9 +38600000 986DAFCA 886DB657 2C030000 -418200B0 3C608048 -80639D60 2C030000 -418200A0 886DAFA0 +41820484 886DAFA0 +2C030000 41820018 2C030001 41820010 2C030002 40800014 48000000 3860FFFE -48000169 4800007C +48000371 48000458 +48000399 48000450 +576006F7 408203D5 +48000444 3D80801A +618C3680 7D8903A6 +4E800421 548006F7 +41820024 88780013 +38630001 98780013 +2C030030 40810014 +9B980013 4800039D +4800040C 9B980013 +887A0001 2C030000 +408200EC 576004E7 +4082002C 886DAFA0 +2C030002 418000D8 886DAFC9 2C030000 -4182001C 2C030001 -41820008 48000000 -3860FFFF 48000145 -48000058 886DAFCA -2C030000 41820018 -806D8840 38630598 -A063001E 48000125 -48000038 888DAFA0 -2C040003 38600000 -40820008 38600001 -808DB610 98640018 -38600001 986DB656 -480000F5 7C6802A6 -906DAFE8 48000878 -887A0001 889A0002 -7C632039 41820868 -BA810008 800100B4 -382100B0 7C0803A6 -3D808026 618C3264 -7D8903A6 4E800420 -576006F7 4082024D -4800083C 7C0802A6 -90010004 9421FF50 -BE810008 38600014 +408200CC 886DAFCA +2C030001 408200C0 +48000004 886DB657 +2C030000 418200B0 +3C608048 80639D60 +2C030000 418200A0 +886DAFA0 2C030001 +41820010 2C030002 +40800014 48000000 +3860FFFE 48000185 +4800007C 886DAFC9 +2C030000 4182001C +2C030001 41820008 +48000000 3860FFFF +48000161 48000058 +886DAFCA 2C030000 +41820018 806D8840 +38630598 A063001E +48000141 48000038 +888DAFA0 2C040003 +38600000 40820008 +38600001 808DB610 +98640018 38600001 +986DB656 48000111 +7C6802A6 906DAFE8 +48000314 887A0001 +889A0002 7C632039 +41820304 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808026 +618C3264 7D8903A6 +4E800420 576006F7 +40820269 480002D8 +7C0802A6 90010004 +9421FF20 BE8100B0 +3C60803D 6063AD40 +80630000 81830088 +38600000 B06C0001 +986C0006 38600014 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 386000B4 @@ -2200,11 +2736,11 @@ BE810008 38600014 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 38600009 3D808037 618CF1E4 7D8903A6 4E800421 @@ -2236,26 +2772,26 @@ B0790005 98990007 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 8A98001A 4BFFFECD -4BFFFE1D BA810008 -800100B4 382100B0 +4BFFFE01 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38600001 986DAFA3 4BFFFFB5 7C6802A6 906DAFE8 880DB650 980DB659 38000004 -980DB656 BA810008 -800100B4 382100B0 +980DB656 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38600001 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 @@ -2266,216 +2802,40 @@ BA810008 800100B4 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 2C1B0200 -40820008 B3780015 -2C1B0001 4182001C -2C1B0002 41820014 -2C1B0008 4182000C -2C1B0004 4082001D -B3780015 88780014 -2C030000 4082000C -7F63DB78 480000B9 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -38600002 3D808037 -618CF1E4 7D8903A6 -4E800421 7C791B78 -386000BB 98790000 -7DC37378 98790001 -7F23CB78 38800002 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 7F23CB78 -3D808037 618CF1B0 -7D8903A6 4E800421 -386000B7 3880007F -38A00040 3D808002 -618C37A8 7D8903A6 -4E800421 7F63DB78 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -48000419 7DE802A6 -38600002 3D808002 -618C4030 7D8903A6 -4E800421 7DC37378 -98780014 3860000B -3D808037 618CF1E4 -7D8903A6 4E800421 -7C771B78 3880000B -3D808000 618CC160 -7D8903A6 4E800421 -7DC37378 98770000 -7F03C378 90770007 -38600004 38800005 -38A00080 3D808039 -618C01F0 7D8903A6 -4E800421 7C741B78 -80780004 80630000 -80630000 3D808037 -618C0E44 7D8903A6 -4E800421 7C751B78 -C02F0024 888DAFE0 -2C040000 41820008 -C02F0028 C04F002C -D0230038 D043003C -7E83A378 38800004 -7EA5AB78 3D808039 -618C0A70 7D8903A6 -4E800421 7E83A378 -3C808039 60841070 -38A00001 38C00080 -3D808039 618C069C -7D8903A6 4E800421 -7E83A378 38800004 -3CA08037 60A5F1B0 -7EE6BB78 3D808039 -618C0B68 7D8903A6 -4E800421 7E83A378 -48000031 7C8802A6 -38A00004 3D808038 -618CFD54 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -820E002C 82EE0028 -8A300000 8A500002 -82700003 82B00007 -A2D50015 83550000 -38600000 B0750015 -88700001 2C030000 -40820234 2C130000 -40820194 38600090 -7C721B78 98700002 -48000261 7DE802A6 -7E238B78 3D808000 -618C56AC 7D8903A6 -4E800421 7C741B78 -38600000 38800000 -3D80803A 618C6754 -7D8903A6 4E800421 -7C731B78 92700003 -38600001 38800000 -C02F0000 C04F0004 -98730049 9893004A -D0330008 D0530024 -D0530028 C04F0008 -886DAFE0 2C030000 -41820008 C04F000C -388F0034 887A0000 -2C030004 41820008 -388F0038 7E639B78 -38A00000 38CF0030 -38EF003C 39140004 -C02F001C C06F0018 -3D808000 618C56B4 -7D8903A6 4E800421 -7C641B78 7C8A2378 -7C8B2378 386B0002 -C04F0020 3D808000 -618C55EC 7D8903A6 -4E800421 C06F0018 -EC63082A 2C0B0000 -4182001C 2C0B0001 -4182002C 2C0B0002 -4182001C 2C0B0003 -4182000C 38800008 -48000018 38800004 -48000010 38800002 -48000008 38800001 -7E238B78 3D808000 -618C56AC 7D8903A6 -4E800421 7C872378 -C04F0010 886DAFE0 -2C030000 41820008 -C04F0014 7E639B78 -388F0030 38A00000 -38CF0030 C02F001C -3D808000 618C56B4 -7D8903A6 4E800421 -7C6B1B78 386A0004 -7C0B1800 4082FF48 -480000CC 88750018 -2C030000 41820010 -88700002 2C03008A -41810070 2C160200 -40820008 48000078 -2C160000 4182005C -88750018 2C030003 -4080003C 88750017 -2C030005 40800030 -38600000 98700002 -7E238B78 7EC4B378 -38A00004 7C632830 -7C632214 4BFFFBB1 -38600001 98700001 -4800005C 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -2C120000 41820010 -3A52FFFF 9A500002 -48000034 38600000 -98750014 7DC37378 -3D808039 618C0228 -7D8903A6 4E800421 -7E639B78 3D80803A -618C5CC4 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 00000000 -3DCCCCCD C3960000 -C3E20000 C38E8000 -C3DA8000 429E0000 -3EE66666 41C80000 -C1A00000 C20C0000 -C1840000 FFFFFFFF -FFEA2FFF C9C387FF -43686174 3A202573 -00000000 BA810008 -800100B4 382100B0 -7C0803A6 3D808026 -618C3334 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C21A3F9C 00000005 #Online/Menus/CSS/IncreaseTextHeap.asm -3C608048 80639D30 -5463443E 2C030008 -4082000C 38604800 -48000008 38602400 -60000000 00000000 -C22652F0 0000007C #Online/Menus/CSS/InitSheikSelector.asm -3C608048 80639D30 -5463443E 2C030008 -408203C0 48000058 -4E800021 00000000 -00000000 3DCCCCCD -C2C80000 43340000 -43520000 3F19999A -3ECCCCCD C0400000 -33FF2FFF FFFFFFFF -8E9196FF C193999A -C1AAE148 3FE3D70A -C1823D71 C15BAE14 -81692081 6A005300 -5A000000 7C0802A6 -90010004 9421FF50 -BE810008 38600004 -38800005 38A00080 -3D808039 618C01F0 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808026 +618C3334 7D8903A6 +4E800420 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C21A3F9C 00000005 #Online/Menus/CSS/IncreaseTextHeap.asm +3C608048 80639D30 +5463443E 2C030008 +4082000C 38604800 +48000008 38602400 +60000000 00000000 +C22652F0 0000007C #Online/Menus/CSS/InitSheikSelector.asm +3C608048 80639D30 +5463443E 2C030008 +408203C0 48000058 +4E800021 00000000 +00000000 3DCCCCCD +C2C80000 43340000 +43520000 3F19999A +3ECCCCCD C0400000 +33FF2FFF FFFFFFFF +8E9196FF C193999A +C1AAE148 3FE3D70A +C1823D71 C15BAE14 +81692081 6A005300 +5A000000 7C0802A6 +90010004 9421FF20 +BE8100B0 38600004 +38800005 38A00080 +3D808039 618C01F0 7D8903A6 4E800421 48000131 7C8802A6 38A00004 3D808038 @@ -2493,8 +2853,8 @@ C03F0008 D03E0024 D03E0028 3860004A C03F0010 48000025 3860004C C03F0014 -48000019 BA810008 -800100B4 382100B0 +48000019 BA8100B0 +800100E4 382100E0 7C0803A6 480002A4 7EE802A6 7C7A1B78 FC600890 C03F000C @@ -2516,8 +2876,8 @@ C03F001C C05F001C 7D8903A6 4E800421 7EE803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFE3D +90010004 9421FF20 +BE8100B0 4BFFFE3D 7FE802A6 83DF0000 3C608043 6063208F 88630000 2C030012 @@ -2577,486 +2937,343 @@ C05F0040 FC011040 7FC3F378 38990001 7F05C378 3D80803A 618C74F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 38600000 38980000 60000000 00000000 -C2264534 000001DC #Online/Menus/CSS/LoadCSSText.asm +C2264534 0000014D #Online/Menus/CSS/LoadCSSText.asm 3C608048 80639D30 5463443E 2C030008 -40820EC4 480001F8 +40820A4C 480001C4 4E800021 00000000 -3DCCCCCD 404CCCCD -413CCCCD 3F4CCCCD -C1600000 41C00000 -00000000 41F00000 -42480000 C2320000 -C1EC0000 C1BA0000 -40A00000 3D23D70A -428C0000 41B80000 -3F000000 42B40000 -42500000 42960000 -42C40000 42500000 -428C0000 42B00000 -42D40000 3ECCCCCD -43048000 43188000 -C3760000 C3020000 -C2480000 3EE66666 -33FF2FFF 3CBCFFFF -8E9196FF FFFFFFFF -FF0000FF 00556E72 -616E6B65 64004469 -72656374 0052616E -6B656400 5465616D -73002573 204D6F64 -65005365 6C656374 -20796F75 72206368 -61726163 74657200 -43686172 61637465 -72207365 6C656374 -65640050 72657373 -20535441 52542074 -6F202573 006C6F63 -6B20696E 00656E74 -65722063 6F646500 -73656172 63680073 -656C6563 74207374 -61676500 4C6F636B -65642069 6E005365 -61726368 696E6720 -666F7220 25730043 -6F6E6E65 6374696E -6720746F 20257300 -57616974 696E6720 -6F6E2025 73006F70 -706F6E65 6E74002D +3DCCCCCD 428C0000 +41B80000 3F000000 +42B40000 42500000 +42960000 42C40000 +42500000 428C0000 +42B00000 42D40000 +3ECCCCCD 43048000 +43188000 C3760000 +C3020000 C2480000 +3EE66666 33FF2FFF +3CBCFFFF 8E9196FF +FFFFFFFF FF0000FF +00556E72 616E6B65 +64004469 72656374 +0052616E 6B656400 +5465616D 73002573 +204D6F64 65005365 +6C656374 20796F75 +72206368 61726163 +74657200 43686172 +61637465 72207365 +6C656374 65640050 +72657373 20535441 +52542074 6F202573 +006C6F63 6B20696E +00656E74 65722063 +6F646500 73656172 +63680073 656C6563 +74207374 61676500 +4C6F636B 65642069 +6E005365 61726368 +696E6720 666F7220 +25730043 6F6E6E65 +6374696E 6720746F +20257300 57616974 +696E6720 6F6E2025 +73006F70 706F6E65 +6E74002D 2D2F2F2D 2D2F2F2D 2D2F2F2D -2D2F2F2D 2D2F2F30 -30004572 726F7200 -506C6179 696E673A -00557365 20442D50 -61642074 6F204368 -61740050 72657373 -205A2074 6F202573 -00486F6C 64205A20 -746F2025 73006469 -73636F6E 6E656374 -0063616E 63656C00 -636C6561 72206572 -726F7200 817B0081 -7E00817C 00000000 -4E800021 C2E00000 -41A00000 00000000 -3DCCCCCD 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFDFD -7FA802A6 3C60804D -606350D8 3C800200 -60840801 90830000 -888DAFA0 2C040002 -38800001 41800008 -38800002 4BFFFFAD -7C6802A6 3D808000 -618C5618 7D8903A6 -4E800421 38A00000 -4E800021 38600004 -38800005 38A00080 -3D808039 618C01F0 -7D8903A6 4E800421 -7C761B78 38600004 -3D808037 618CF1E4 -7D8903A6 4E800421 -7C781B78 38760000 -38800004 3CA08037 -60A5F1B0 38D80000 -3D808039 618C0B68 +2D2F2F30 30004572 +726F7200 506C6179 +696E673A 00557365 +20442D50 61642074 +6F204368 61740050 +72657373 205A2074 +6F202573 00486F6C +64205A20 746F2025 +73006469 73636F6E +6E656374 0063616E +63656C00 636C6561 +72206572 726F7200 +817B0081 7E00817C +00000000 4E800021 +C2E00000 41A00000 +00000000 3DCCCCCD +7C0802A6 90010004 +9421FF20 BE8100B0 +4BFFFE31 7FA802A6 +3C60804D 606350D8 +3C800200 60840801 +90830000 888DAFA0 +2C040002 38800001 +41800008 38800002 +4BFFFFAD 7C6802A6 +3D808000 618C5618 7D8903A6 4E800421 -38760000 48000261 -7C8802A6 38A00004 -3D808038 618CFD54 +38A00000 4E800021 +38600004 38800005 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 7C791B78 +38600004 3D808037 +618CF1E4 7D8903A6 +4E800421 7C781B78 +38790000 38800004 +3CA08037 60A5F1B0 +38D80000 3D808039 +618C0B68 7D8903A6 +4E800421 38790000 +48000261 7C8802A6 +38A00004 3D808038 +618CFD54 7D8903A6 +4E800421 3FE08000 +63FF5614 83FF0000 +38600000 38800000 +3D80803A 618C6754 7D8903A6 4E800421 -3FE08000 63FF5614 -83FF0000 38600000 -38800000 3D80803A -618C6754 7D8903A6 -4E800421 7C7C1B78 -939F0008 38800001 -989C0049 38800000 -989C004A C03D0000 -D03C0008 C03D0004 -D03C0024 D03C0028 -7F83E378 389D0090 -38A00000 C03D0044 -C05D003C C07D0040 -38FD0098 3D808000 -618C56B4 7D8903A6 -4E800421 C07D004C -480000F9 C07D0050 -480000F1 C07D0054 -480000E9 7F83E378 -389D008C 38A00000 -C03D0068 C05D003C -C07D006C 38FD0098 +7C7C1B78 939F0008 +38800001 989C0049 +38800000 989C004A +C03D0000 D03C0008 +C03D0004 D03C0024 +D03C0028 7F83E378 +389D005C 38A00000 +C03D0010 C05D0008 +C07D000C 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -7F83E378 389D008C -38A00000 C03D0068 -C05D003C C07D0070 -38FD0098 3D808000 +C07D0018 480000F9 +C07D001C 480000F1 +C07D0020 480000E9 +7F83E378 389D0058 +38A00000 C03D0034 +C05D0008 C07D0038 +38FD0064 3D808000 618C56B4 7D8903A6 4E800421 7F83E378 -389D008C 38A00000 -C03D0044 C05D0078 -C07D0074 38FD0098 +389D0058 38A00000 +C03D0034 C05D0008 +C07D003C 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -7F83E378 389D0090 -38A00000 C03D0044 -C05D007C C07D0074 -38FD0098 3D808000 -618C56B4 7D8903A6 -4E800421 C07D0058 -480000AD C07D005C -480000A5 C07D0060 -4800009D C07D0064 -48000095 BA810008 -800100B4 382100B0 -7C0803A6 48000A78 -7C0802A6 90010004 -9421FF50 BE810008 -FDA01890 7F83E378 -389D0090 38A00000 -C03D0068 C05D0048 -38FD0098 3D808000 +7F83E378 389D0058 +38A00000 C03D0010 +C05D0044 C07D0040 +38FD0064 3D808000 618C56B4 7D8903A6 4E800421 7F83E378 -389D0090 38A00000 -C03D0080 C05D003C -FC606890 38FD0098 +389D005C 38A00000 +C03D0010 C05D0048 +C07D0040 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7F83E378 -389D0094 38A00000 -C03D0068 C05D003C -38FD0098 3D808000 +C07D0024 480000AD +C07D0028 480000A5 +C07D002C 4800009D +C07D0030 48000095 +BA8100B0 800100E4 +382100E0 7C0803A6 +48000634 7C0802A6 +90010004 9421FF20 +BE8100B0 D0610008 +7F83E378 389D005C +38A00000 C03D0034 +C05D0014 38FD0064 +3D808000 618C56B4 +7D8903A6 4E800421 +7F83E378 389D005C +38A00000 C03D004C +C05D0008 C0610008 +38FD0064 3D808000 618C56B4 7D8903A6 -4E800421 7C7B1B78 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 4E800021 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -8363002C 4BFFFAD5 -7FA802A6 3F808000 -639C5614 839C0000 -83DC0000 835C0008 -38FD0163 3CC0804A -60C60740 38800000 -38A00000 7C66222E -7C672B2E 38840003 -38A50002 2C050012 -4180FFEC 806DB620 -38810080 38A00024 -38C0FFFF 3D808001 -618C1E24 7D8903A6 -4E800421 80610080 -3D808036 618CF644 +9421FF20 BE8100B0 +7F83E378 389D0060 +38A00000 C03D0034 +C05D0008 38FD0064 +3D808000 618C56B4 +7D8903A6 4E800421 +7C7B1B78 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +4E800021 7C0802A6 +90010004 9421FF20 +BE8100B0 8363002C +4BFFFB09 7FA802A6 +3F808000 639C5614 +839C0000 83DC0000 +835C0008 38FD012F +3CC0804A 60C60740 +38800000 38A00000 +7C66222E 7C672B2E +38840003 38A50002 +2C050012 4180FFEC +806DB620 38810080 +38A00024 38C0FFFF +3D808001 618C1E24 7D8903A6 4E800421 -80610080 38800000 -80BC0004 80A50008 -38C00000 3D808036 -618CFA10 7D8903A6 -4E800421 C022AEC4 -886DAFA0 2C030003 -40820008 C022AEC8 80610080 3D808036 -618CF934 7D8903A6 +618CF644 7D8903A6 4E800421 80610080 -3D808037 618C0780 -7D8903A6 4E800421 -38800000 38BD00B6 +38800000 80BC0004 +80A50008 38C00000 +3D808036 618CFA10 +7D8903A6 4E800421 +C022AEC4 886DAFA0 +2C030003 40820008 +C022AEC8 80610080 +3D808036 618CF934 +7D8903A6 4E800421 +80610080 3D808037 +618C0780 7D8903A6 +4E800421 38800000 +38BD0082 887E0000 +2C030004 4181004C +886DAFA0 2C030001 +41820020 2C030002 +41820020 2C030000 +41820020 2C030003 +41820020 48000024 +38DD0065 48000020 +38DD006E 48000018 +38DD0075 48000010 +38DD007C 48000008 +38BD0142 480003D9 887E0000 2C030004 -4181004C 886DAFA0 -2C030001 41820020 -2C030002 41820020 -2C030000 41820020 -2C030003 41820020 -48000024 38DD0099 -48000020 38DD00A2 -48000018 38DD00A9 -48000010 38DD00B0 -48000008 38BD0176 -4800081D 887E000A -2C030000 4182001C -3B1E0015 7C791B78 -887C0018 38630001 -987C0018 48000014 -887E000B 2C030000 -418201BC 7C791B78 -887C0019 2C030009 -40810010 38600000 -987C0019 418201A0 -386000B7 3880007F -38A00040 3D808002 -618C37A8 7D8903A6 -4E800421 887C0017 -38630001 987C0017 -3860000D 3D808037 -618CF1E4 7D8903A6 -4E800421 7C771B78 -3880001C 3D808000 -618CC160 7D8903A6 -4E800421 38600014 -38800000 98770000 -98970001 7F23CB78 -98770002 887C0019 -98770003 38630001 -987C0019 887E000C -98770008 7F83E378 -90770009 38600004 -38800005 38A00080 -3D808039 618C01F0 -7D8903A6 4E800421 -7C761B78 807C0004 -80630004 80630000 -3D808037 618C0E44 -7D8903A6 4E800421 -7C651B78 7EC3B378 -888DC1A9 3D808039 -618C0A70 7D8903A6 -4E800421 7EC3B378 -3C808039 60841070 -38A00003 38C00080 -3D808039 618C069C -7D8903A6 4E800421 -80760028 809C0004 -80840004 38A00000 -3D808016 618C895C -7D8903A6 4E800421 -80760028 C022AE28 -3D808036 618CF8BC -7D8903A6 4E800421 -886DAFE0 2C030000 -41820010 C03D0014 -80760028 D0230038 -7EC3B378 38800004 -3CA08037 60A5F1B0 -7EE6BB78 3D808039 -618C0B68 7D8903A6 -4E800421 7EC3B378 -480003E1 7C8802A6 -38A00004 3D808038 -618CFD54 7D8903A6 -4E800421 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BD017C 38800009 -48000615 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BE00B0 3880000A -480005F5 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BD0185 38800008 -480005D5 887E0000 -2C030004 41820034 -2C030005 41820020 -2C030000 4181000C -38BD0098 48000024 -38BD0197 38DD01BD -48000018 38BD0197 -38DD01C4 4800000C -38BD01A5 38DD01B2 -38800007 48000589 -3B600001 7F64DB78 -38BD0098 48000579 -3B7B0002 2C1B0005 -4081FFEC 3880000C -38600000 7C7C21AE -38840001 2C04000E -4081FFF4 3B60000B -7F64DB78 38BD0098 -48000545 3B7B0001 -2C1B000E 4081FFEC -887E0000 2C030005 -408200A8 3B60000B -3B200000 3B000000 -3AE00000 3ADE0117 -7EB6C8AE 56A00631 -41820010 3B390002 -3B180001 48000018 -2C150020 40820008 -7F37CB78 3B390001 -3B180001 2C150000 -41820018 2C18001E -41810008 4800002C -38800000 7C96B9AE -7F64DB78 7EC5B378 -480004C5 3B7B0001 -7ED6BA14 3AD60001 -3B200000 3B000000 -2C150000 41820020 -387E0208 7C96CA14 -7C041800 40800010 -2C1B000E 41810008 -4BFFFF78 4800014C -3B600001 886DB657 -7F64DB78 2C030000 -40820018 38BD00BE -4800046D 38600001 -987C000C 48000124 -38BD00D4 48000459 -3B7B0002 38600002 -987C000C 887E0001 -7F64DB78 2C030000 -40820080 886DAFA0 -2C030002 41800034 +4182000C 38BD0064 +48000008 38BD0148 +38800009 480003B9 887E0000 2C030004 -40820028 886DAFC9 -2C030000 4082001C -886DAFCA 2C030000 -40820010 38BD00E7 -38DD0113 48000034 -38BD00E7 38DD00F9 +4182000C 38BD0064 +48000008 38BE00B0 +3880000A 48000399 887E0000 2C030004 -41820020 38BD00E7 -38DD010C 886DAFA0 -2C030002 4180000C -38BD00E7 38DD0101 -480003CD 38600001 -987C000D 48000084 -38BD0120 480003B9 -3B7B0002 38600002 -987C000D 887E0000 -7F64DB78 2C030004 -4182004C 2C030003 -41820024 88ADAFA0 -2C050001 38BD012A -38DD015A 41820038 -38BD012A 38DD0163 -4800002C 88ADAFA0 -2C050001 38BD013B -38DD015A 41820018 -38BD013B 38DD0163 -4800000C 38BD014C -38DD015A 48000349 -38600001 987C000E -3B20000C 3B600002 -7C7CC8AE 2C030001 -40820044 A07C000F -3880000F 7C632396 -1C630003 386301D0 -7CBD1A14 7F64DB78 -4800030D 7F43D378 -7F64DB78 38BD0088 -3D80803A 618C74F0 -7D8903A6 4E800421 -48000044 2C030002 -40820030 7F64DB78 -38BD01D6 480002D9 +4182000C 38BD0064 +48000008 38BD0151 +38800008 48000379 +887E0000 2C030004 +41820034 2C030005 +41820020 2C030000 +4181000C 38BD0064 +48000024 38BD0163 +38DD0189 48000018 +38BD0163 38DD0190 +4800000C 38BD0171 +38DD017E 38800007 +4800032D 3B600001 +7F64DB78 38BD0064 +4800031D 3B7B0002 +2C1B0005 4081FFEC +3880000C 38600000 +7C7C21AE 38840001 +2C04000E 4081FFF4 +3B60000B 7F64DB78 +38BD0064 480002E9 +3B7B0001 2C1B000E +4081FFEC 887E0000 +2C030005 408200A8 +3B60000B 3B200000 +3B000000 3AE00000 +3ADE016B 7EB6C8AE +56A00631 41820010 +3B390002 3B180001 +48000018 2C150020 +40820008 7F37CB78 +3B390001 3B180001 +2C150000 41820018 +2C18001E 41810008 +4800002C 38800000 +7C96B9AE 7F64DB78 +7EC5B378 48000269 +3B7B0001 7ED6BA14 +3AD60001 3B200000 +3B000000 2C150000 +41820020 387E025C +7C96CA14 7C041800 +40800010 2C1B000E +41810008 4BFFFF78 +4800015C 3B600001 +886DB657 7F64DB78 +2C030000 40820018 +38BD008A 48000211 +38600001 987C000C +48000134 38BD00A0 +480001FD 3B7B0002 +38600002 987C000C +887E0001 7F64DB78 +2C030000 40820080 +886DAFA0 2C030002 +41800034 887E0000 +2C030004 40820028 +886DAFC9 2C030000 +4082001C 886DAFCA +2C030000 40820010 +38BD00B3 38DD00DF +48000034 38BD00B3 +38DD00C5 887E0000 +2C030004 41820020 +38BD00B3 38DD00D8 +886DAFA0 2C030002 +4180000C 38BD00B3 +38DD00CD 48000171 +38600001 987C000D +48000094 38BD00EC +4800015D 3B7B0002 +38600002 987C000D +887E0000 7F64DB78 +2C030004 4182005C +2C030003 4182002C +38BD00F6 38DD0126 +896DAFA0 2C0B0001 +41820048 2C0B0000 +41820040 38BD00F6 +38DD012F 48000034 +38BD0107 38DD0126 +896DAFA0 2C0B0001 +41820020 2C0B0000 +41820018 38BD0107 +38DD012F 4800000C +38BD0118 38DD0126 +480000DD 38600001 +987C000E 3B20000C +3B600002 7C7CC8AE +2C030001 40820044 +A07C000F 3880000F +7C632396 1C630003 +3863019C 7CBD1A14 +7F64DB78 480000A1 7F43D378 7F64DB78 -38BD0084 3D80803A +38BD0054 3D80803A 618C74F0 7D8903A6 -4E800421 48000010 -7F64DB78 38BD0098 -480002AD 3B7B0002 -3B390001 2C19000E -4081FF68 A07C000F -38630001 2C03001E -41800008 38600000 -B07C000F BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -4BFFF3D1 7FA802A6 -820E002C 8A300000 -8A500001 8A700002 -8A900003 82B00004 -8AF00008 83900009 -81EE0028 81EF0010 -7DE37B78 3D808037 -618C0928 7D8903A6 -4E800421 2C150000 -408200CC 7E83A378 -3D808000 618C55F4 -7D8903A6 4E800421 -C05D0018 C07D0008 -EC6100F2 EC421828 -D04F003C 2C120000 -4182009C 3A2000AA -9A300000 3A400001 -9A500001 7C962378 -7E83A378 3D808000 -618C55F4 7D8903A6 -4E800421 C05D0030 -C07D0008 EC6100F2 -EC42182A FDE01090 -806DC2DC 38800003 -9883000E C03D002C -886DAFE0 2C030000 -41820008 C03D0028 -38770001 7E649B78 -38A00002 38C00000 -C07D0034 C09D0038 -3D808000 618C56B4 -7D8903A6 4E800421 -90700004 806DC2DC -38800001 9883000E -48000004 887C0017 -2C03000D 41800028 -887C0019 7C03A000 -4080000C 2C140009 -408100B4 887C0019 -7C741850 2C03000D -418100A4 2C110000 -4082001C 2C120000 -4182FF2C 2C120001 -41820018 2C120002 -41820084 3A31FFFF -9A300000 480000D4 -3A400002 9A500001 -3A200014 9A300000 -806E0028 809C0004 -80840004 38A00001 -3D808016 618C895C -7D8903A6 4E800421 -806E0028 C022AE28 -3D808036 618CF8BC -7D8903A6 4E800421 -8075005C 3D808037 -618CF1B0 7D8903A6 -4E800421 7EA3AB78 -3D80803A 618C5CC4 -7D8903A6 4E800421 -48000060 7DC37378 -3D808039 618C0228 +4E800421 48000044 +2C030002 40820030 +7F64DB78 38BD01A2 +4800006D 7F43D378 +7F64DB78 38BD0050 +3D80803A 618C74F0 7D8903A6 4E800421 -809C0000 88840003 -7C172000 40820010 -887C0018 3863FFFF -987C0018 887C0017 -3863FFFF 987C0017 -887C0019 7E84A378 -38840001 7C032000 -41820008 4800000C -38600000 987C0019 -BA810008 800100B4 -382100B0 7C0803A6 +48000010 7F64DB78 +38BD0064 48000041 +3B7B0002 3B390001 +2C19000E 4081FF68 +A07C000F 38630001 +2C03001E 41800008 +38600000 B07C000F +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7F43D378 +90010004 9421FF20 +BE8100B0 7F43D378 3D80803A 618C70A0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 80CDB638 60000000 00000000 C2262004 0000000B #Online/Menus/CSS/PreventAPressCharUnselect.asm @@ -3095,7 +3312,7 @@ C22600A8 0000000B #Online/Menus/CSS/PreventColorChange.asm 618C028C 7D8903A6 4E800420 3C60803F 60000000 00000000 -C226699C 00000029 #Online/Menus/CSS/SceneLoadCSS.asm +C226699C 00000028 #Online/Menus/CSS/SceneLoadCSS.asm 4800002C 4E800021 C2E00000 41A00000 00000000 3DCCCCCD @@ -3104,9 +3321,9 @@ C2E00000 41A00000 53000000 900DB638 3C608048 80639D30 5463443E 2C030008 -40820100 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFFB1 +408200F8 7C0802A6 +90010004 9421FF20 +BE8100B0 4BFFFFB1 7FC802A6 3D808000 618C5618 7D8903A6 4E800421 7C6802A6 @@ -3118,15 +3335,14 @@ BE810008 4BFFFFB1 3D808000 618CC160 7D8903A6 4E800421 3C608000 60635614 -93E30000 38600340 +93E30000 386003C7 3D808037 618CF1E4 7D8903A6 4E800421 907F0000 886DAFA0 -2C030003 40820030 +2C030003 40820028 3C608026 606352F4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7C632214 88630008 987F001A 387E0010 3D808001 618C6BE0 @@ -3134,10 +3350,10 @@ BE810008 4BFFFFB1 389E001B 3D808038 618C0358 7D8903A6 4E800421 907F0004 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 -C2264118 0000001C #Online/Menus/CSS/SkipReturnToCssSound.asm +C2264118 0000001B #Online/Menus/CSS/SkipReturnToCssSound.asm 7C0802A6 90010004 9421FF00 BC610008 886DAFA3 2C030000 @@ -3147,12 +3363,11 @@ C2264118 0000001C #Online/Menus/CSS/SkipReturnToCssSound.asm 8BC30001 3D808037 618CF1B0 7D8903A6 4E800421 2C1E0000 -40820060 4800007C +40820058 48000074 38600000 986DAFA3 3C608023 6063CCA4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7C632214 83E3000C 807F0006 3D808037 618CF1B0 7D8903A6 @@ -3168,7 +3383,7 @@ B8610008 80010104 80630020 00000000 C2262478 00000014 #Online/Menus/CSS/Teams/AnimateCursorPort.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FC08000 63DE5614 83DE0000 3C608048 80639D30 5463443E @@ -3181,15 +3396,15 @@ C2262478 00000014 #Online/Menus/CSS/Teams/AnimateCursorPort.asm 7FE3FB78 3D808000 618C55F4 7D8903A6 4E800421 48000004 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 8061003C 38800006 38A00400 3CC08036 60C6410C 38E00001 60000000 00000000 C2262768 0000000D #Online/Menus/CSS/Teams/AnimateToken.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3F808000 639C5614 839C0000 3C608048 80639D30 5463443E @@ -3198,10 +3413,10 @@ C2262768 0000000D #Online/Menus/CSS/Teams/AnimateToken.asm 40820018 8B7C001A 2C1B0003 41820008 3B7BFFFF 9B7D0006 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 387C0000 00000000 -C22652F4 000000B6 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm +C22652F4 000000B8 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm 48000030 4E800021 01C02000 00C0A000 00C1BC00 00C18C00 @@ -3210,12 +3425,13 @@ C22652F4 000000B6 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm 003DCCCC CD000000 3C608048 80639D30 5463443E 2C030008 -40820550 888DAFA0 -2C040003 40820544 +40820560 888DAFA0 +2C040003 40820554 7C0802A6 90010004 -9421FF50 BE810008 +9421FF10 BE8100B0 +DBE100E0 DBC100E8 3FC08000 63DE5614 -83DE0000 4BFFFF99 +83DE0000 4BFFFF91 7FE802A6 C3FF0011 C3DF0015 38600004 3D808037 618CF1E4 @@ -3265,10 +3481,10 @@ FC20F890 3D808036 7EE6BB78 3D808039 618C0B68 7D8903A6 4E800421 7E83A378 -480000B5 7C8802A6 +480000BD 7C8802A6 38A00004 3D808038 618CFD54 7D8903A6 -4E800421 480001F9 +4E800421 48000201 806DB620 38810034 38A0002B 38C0FFFF 3D808001 618C1E24 @@ -3285,18 +3501,19 @@ FC20F890 3D808036 80630008 FC20F890 3D808036 618C3C2C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 CBE100E0 +CBC100E8 800100F4 +382100F0 7C0803A6 480002E8 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C741B78 82B40028 886DB656 2C030000 40820098 3FC08000 63DE5614 83DE0000 807E0000 88630001 2C030000 4082007C -4BFFFD15 7FE802A6 +4BFFFD05 7FE802A6 3BA00000 3C80804A 60840BC0 80840000 C024000C C0440010 @@ -3311,11 +3528,11 @@ FC013040 4181002C 1C630044 7C641A14 80630008 546305EF 41820008 48000019 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 3D808000 +90010004 9421FF20 +BE8100B0 3D808000 618C56B8 7D8903A6 4E800421 7C651B78 38600000 1C630024 @@ -3329,11 +3546,11 @@ BE810008 3D808000 4800002D 38600002 3D808002 618C4030 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 808DB610 +90010004 9421FF20 +BE8100B0 808DB610 886DB650 1C630024 7F841A14 887C0070 7C7B1B78 8B3E001A @@ -3362,11 +3579,11 @@ BE810008 808DB610 7F05C378 38C00000 3D808000 618C56BC 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7C791B78 +90010004 9421FF20 +BE8100B0 7C791B78 2C190003 4182001C 2C190002 4182000C 2C190001 41820014 @@ -3377,8 +3594,8 @@ BE810008 7C791B78 7C632A14 98830000 38600000 3D808025 618CDB34 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 38600000 38980000 3D80803A 618C6754 @@ -3386,7 +3603,7 @@ BE810008 7C791B78 60000000 00000000 C2260C28 0000001C #Online/Menus/CSS/Teams/PreventColorResetCharHover.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FE08000 63FF5614 83FF0000 3C608048 80639D30 5463443E @@ -3409,8 +3626,8 @@ C2260C28 0000001C #Online/Menus/CSS/Teams/PreventColorResetCharHover.asm 7C7B1B78 80ADB610 9B650073 3CA0803F 60A50E09 9B650000 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 9E9803C2 60000000 00000000 C2260E14 00000003 #Online/Menus/CSS/Teams/PreventColorResetLastChar.asm @@ -3419,7 +3636,7 @@ C2260E14 00000003 #Online/Menus/CSS/Teams/PreventColorResetLastChar.asm 60000000 00000000 C2260B90 0000001A #Online/Menus/CSS/Teams/PreventColorResetRandomChar.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FE08000 63FF5614 83FF0000 3C608048 80639D30 5463443E @@ -3440,13 +3657,13 @@ C2260B90 0000001A #Online/Menus/CSS/Teams/PreventColorResetRandomChar.asm 7F65DB78 38C00000 3D808000 618C56BC 7D8903A6 4E800421 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 38000000 60000000 00000000 C2260C88 00000018 #Online/Menus/CSS/Teams/PreventWrongCSPOnCharSelect.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C9D2378 7C7B1B78 3FE08000 63FF5614 83FF0000 3C608048 @@ -3465,8 +3682,8 @@ C2260C88 00000018 #Online/Menus/CSS/Teams/PreventWrongCSPOnCharSelect.asm 3D808000 618C56BC 7D8903A6 4E800421 48000004 7FA4EB78 -7F63DB78 BA810008 -800100B4 382100B0 +7F63DB78 BA8100B0 +800100E4 382100E0 7C0803A6 98830070 60000000 00000000 0423C710 28030007 #Online/Menus/CSS/TextEntryScreen/Allow8Characters.asm @@ -3493,86 +3710,85 @@ C223E290 00000006 #Online/Menus/CSS/TextEntryScreen/AlwaysUseEnglishWhenDirect3. 618CAE90 7D8903A6 4E800421 00000000 C223CCA4 00000045 #Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm -48000014 4E800021 -48000100 00000000 -00000000 57400633 -41820014 3D808023 -618CCCAC 7D8903A6 -4E800420 7C0802A6 -90010004 9421FF50 -BE810008 7C9A2378 -4BFFFFC5 7C6802A6 -83E30004 83DF0006 -886DB56C 5463063E -3D80801A 618C36A0 +48000010 4E800021 +480000FC 00000000 +57400633 41820014 +3D808023 618CCCAC +7D8903A6 4E800420 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C9A2378 4BFFFFC9 +7C6802A6 83E30004 +83DF0006 886DB56C +5463063E 3D80801A +618C36A0 7D8903A6 +4E800421 548006F7 +41820194 7F44D378 +889C0058 1C840003 +7C64F22E 2C030000 +4082001C 38600003 +3D808002 618C4030 7D8903A6 4E800421 -548006F7 41820194 -7F44D378 889C0058 -1C840003 7C64F22E -2C030000 4082001C -38600003 3D808002 -618C4030 7D8903A6 -4E800421 48000048 -38600001 3D808002 -618C4030 7D8903A6 -4E800421 887E0019 -987F0004 2C030007 -40810008 38600007 -987C0058 38600039 -B07A0002 3D808023 -618CCE4C 7D8903A6 -4E800421 7F44D378 -BA810008 800100B4 -382100B0 7C0803A6 -3D808023 618CCCFC -7D8903A6 4E800420 -7C0802A6 90010004 -9421FF50 BE810008 -7C7D1B78 886DAFA3 -2C030000 418200C8 -4BFFFEDD 7C6802A6 -83E30004 83DF0006 -386000BE 987E0000 -387E0001 3C80804A -60840740 38A00018 -3D808000 618C31F4 +48000048 38600001 +3D808002 618C4030 7D8903A6 4E800421 -887F0004 987E0019 -807F0000 907E001A -9BBE001E 886DAFA0 -987E001F 7FC3F378 -38800020 38A00001 -3D808000 618C55F0 +887E0019 987F0004 +2C030007 40810008 +38600007 987C0058 +38600039 B07A0002 +3D808023 618CCE4C 7D8903A6 4E800421 -7FC3F378 3880001E -38A00000 3D808000 -618C55F0 7D8903A6 -4E800421 3C60804A -60630740 389E0001 +7F44D378 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808023 +618CCCFC 7D8903A6 +4E800420 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7D1B78 +886DAFA3 2C030000 +418200C8 4BFFFEE1 +7C6802A6 83E30004 +83DF0006 386000BE +987E0000 387E0001 +3C80804A 60840740 38A00018 3D808000 618C31F4 7D8903A6 -4E800421 807E001A -907F0000 3D808023 -618CCE4C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -7F44D378 BA810008 -800100B4 382100B0 -7C0803A6 3D808023 -618CCD34 7D8903A6 -4E800420 00000000 +4E800421 887F0004 +987E0019 807F0000 +907E001A 9BBE001E +886DAFA0 987E001F +7FC3F378 38800020 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 7FC3F378 +3880001E 38A00000 +3D808000 618C55F0 +7D8903A6 4E800421 +3C60804A 60630740 +389E0001 38A00018 +3D808000 618C31F4 +7D8903A6 4E800421 +807E001A 907F0000 +3D808023 618CCE4C +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7F44D378 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808023 618CCD34 +7D8903A6 4E800420 +60000000 00000000 0423CF9C 2C1B0008 #Online/Menus/CSS/TextEntryScreen/Display8Characters.asm -C223CF80 0000000E #Online/Menus/CSS/TextEntryScreen/HandleAutocompleteText.asm +C223CF80 0000000D #Online/Menus/CSS/TextEntryScreen/HandleAutocompleteText.asm 48000010 4E800021 00000000 8E9196FF 88CDAFA3 2C060000 -4182004C 4BFFFFE9 +41820044 4BFFFFE9 7CC802A6 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7CE32214 +5485302E 38800040 +7C8523D6 7CE32214 80E7000C 88E70004 7C1B3800 4180000C 3BA60004 48000008 @@ -3586,16 +3802,15 @@ C223B3D0 00000006 #Online/Menus/CSS/TextEntryScreen/HandleDescriptionText.asm 48000008 7FE4FB78 60000000 00000000 0423C6C0 4800004C #Online/Menus/CSS/TextEntryScreen/HandleJpSpace.asm -C223E994 00000027 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm +C223E994 00000026 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm 886DAFA3 2C030000 -41820128 38600001 +41820120 38600001 986DAFCB 48000004 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608023 6063CCA4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7F232214 3860000A 3D808037 618CF1E4 7D8903A6 4E800421 @@ -3622,30 +3837,28 @@ C223E994 00000027 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm 60841070 38A00004 38C00080 3D808039 618C069C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 48000004 38600000 00000000 -C223C588 0000000C #Online/Menus/CSS/TextEntryScreen/NameEntryThinkOneShot.asm +C223C588 0000000B #Online/Menus/CSS/TextEntryScreen/NameEntryThinkOneShot.asm 886DAFA3 2C030000 -41820050 3C608023 +41820048 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7CC32214 +5485302E 38800040 +7C8523D6 7CC32214 80E6000C 88670005 2C030000 4082001C 38600001 98670005 38660008 7C6903A6 38600003 4E800421 886DB56C 00000000 -C223CD74 00000011 #Online/Menus/CSS/TextEntryScreen/OnBPressAutoComplete.asm +C223CD74 00000010 #Online/Menus/CSS/TextEntryScreen/OnBPressAutoComplete.asm 886DAFA3 2C030000 -41820074 3C608023 +4182006C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050000 40810030 38A5FFFF 98A40004 @@ -3661,21 +3874,20 @@ C223CA50 00000003 #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonAPress.asm 3D808023 618CCC14 7D8903A6 4E800420 60000000 00000000 -C223CC14 0000001D #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonHandler.asm +C223CC14 0000001C #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonHandler.asm 886DAFA3 2C030000 -418200D8 7C0802A6 -90010004 9421FF50 -BE810008 3C608023 +418200D0 7C0802A6 +90010004 9421FF20 +BE8100B0 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 83E3000C 887F0004 2C030000 40820038 38600003 3D808002 618C4030 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 3D808023 618CCE38 7D8903A6 4E800420 887F0004 @@ -3686,18 +3898,17 @@ BE810008 3C608023 7D8903A6 4E800421 3860FFFE 818DAFE8 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808023 618CCC80 7D8903A6 4E800420 38000000 00000000 -C223C33C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm +C223C33C 0000000D #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm 886DAFA3 2C030000 -41820054 3C608023 +4182004C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050008 4080000C 38A50001 98A40004 @@ -3706,13 +3917,12 @@ C223C33C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm 48000014 3D808023 618CCE4C 7D8903A6 4E800421 00000000 -C223C72C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterText.asm +C223C72C 0000000D #Online/Menus/CSS/TextEntryScreen/OnEnterText.asm 886DAFA3 2C030000 -41820054 3C608023 +4182004C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050008 4080000C 38A50001 98A40004 @@ -3725,37 +3935,34 @@ C223C81C 00000003 #Online/Menus/CSS/TextEntryScreen/OnErasePress.asm 3D808023 618CCD3C 7D8903A6 4E800420 60000000 00000000 -C223CCBC 0000000B #Online/Menus/CSS/TextEntryScreen/OnLPress.asm +C223CCBC 0000000A #Online/Menus/CSS/TextEntryScreen/OnLPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 38630008 7C6903A6 38600001 4E800421 3D808023 618CCE38 7D8903A6 4E800420 887C0050 00000000 -C223CCE0 0000000B #Online/Menus/CSS/TextEntryScreen/OnRPress.asm +C223CCE0 0000000A #Online/Menus/CSS/TextEntryScreen/OnRPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 38630008 7C6903A6 38600002 4E800421 3D808023 618CCE38 7D8903A6 4E800420 887C0050 00000000 -C223C928 0000000D #Online/Menus/CSS/TextEntryScreen/OnRandomPress.asm +C223C928 0000000C #Online/Menus/CSS/TextEntryScreen/OnRandomPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 9BA40004 9BBC0058 38830008 7C8903A6 38600003 @@ -3773,62 +3980,71 @@ C23786A4 00000009 #Online/Menus/Hacks/VsSplashRumbleHack.asm 618C86AC 7D8903A6 4E800420 28000000 60000000 00000000 -C216E9B4 000000B3 #Online/Menus/InGame/InitInGame.asm +C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 3C608048 80639D30 5463443E 2C030208 -40820580 480000A8 +408205C8 480000AC 4E800021 00000000 -3DCCCCCD 43870000 -434F0000 3EA8F5C3 -3EA8F5C3 000000FF -3F1EB852 3F466666 -C1C07AE1 3C6F34D7 -3F4CCCCD 41A51EB8 -00000000 3D75C28F -43160000 3F0A3D71 -00000000 44656C61 -793A2025 64660000 -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 +3DCCCCCD 3DCCCCCD +43870000 434F0000 +3EA8F5C3 3EA8F5C3 +000000FF 3F1EB852 +3F466666 C1C07AE1 +3C6F34D7 3F4CCCCD +41A51EB8 00000000 +3D75C28F 43160000 +3F0A3D71 00000000 +44656C61 793A2025 +64660000 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7F1B78 880DB6CC +2C000001 41820018 +7FE3FB78 3D808039 +618C10D8 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +7C0802A6 90010004 +9421FF20 BE8100B0 +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 -7FA3EB78 4BFFFF25 -7C8802A6 38A00008 -3D808039 618C075C -7D8903A6 4E800421 -3C600000 60631000 -907D0024 38600002 -7FA4EB78 38A00009 -38C0000D 38E00000 -3900000C 39200050 -39400008 3D80803A -618C611C 7D8903A6 -4E800421 7C7F1B78 -83CDB61C 93FE07B8 -4BFFFE69 7F8802A6 +7C7F1B78 83CDB61C +93FE090E 4BFFFE65 +7F8802A6 38600002 +7FE4FB78 3D80803A +618C6754 7D8903A6 +4E800421 7C7D1B78 +38800001 989D0049 +38800001 989D004A +C03C0000 D03D0008 +C03C0008 D03D0024 +D03D0028 93BE0912 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7A1B78 @@ -3840,13 +4056,13 @@ BE810008 3C60804D 989D004A C03C0000 D03D0008 C03C0004 D03D0024 D03D0028 -C03C0008 C05C000C -7FA3EB78 389C0048 -88BE001B 3D80803A +C03C000C C05C0010 +7FA3EB78 389C004C +88BE0021 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 -38800000 C03C0010 -C05C0010 3D80803A +38800000 C03C0014 +C05C0014 3D80803A 618C7548 7D8903A6 4E800421 3A800000 3EA0804A 62B50FF0 @@ -3863,21 +4079,21 @@ C0230000 D0210070 7C7D1B78 38800001 989D0048 989D004A 989D004C 989D0049 -C03C0038 D03D0024 +C03C003C D03D0024 D03D0028 C0210070 -C05C002C EC21102A -D03D0000 C03C0030 -D03D0004 C03C0034 -D03D0008 C03C003C +C05C0030 EC21102A +D03D0000 C03C0034 +D03D0004 C03C0038 +D03D0008 C03C0040 D03D000C D03D0010 -4CC63242 C03C0044 -C05C0044 7FA3EB78 +4CC63242 C03C0048 +C05C0048 7FA3EB78 389A0034 1CB4001F 7C842A14 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 -38800000 C03C0040 -C05C0040 3D80803A +38800000 C03C0044 +C05C0044 3D80803A 618C7548 7D8903A6 4E800421 3860000E 3880000F 38A00000 @@ -3898,10 +4114,10 @@ C05C0040 3D80803A 4E800421 7E83A378 3D80802F 618C3424 7D8903A6 4E800421 -C0230000 C05C0020 +C0230000 C05C0024 EC21102A D0360038 -C03C0024 D036003C -C03C001C D0360030 +C03C0028 D036003C +C03C0020 D0360030 7EC3B378 38810080 38A00001 38C0FFFF 3D808001 618C1E24 @@ -3913,8 +4129,8 @@ C03C001C D0360030 80630004 80830014 60840001 90830014 80630004 80630008 -8063000C C03C0014 -D023000C 809C0018 +8063000C C03C0018 +D023000C 809C001C 90830004 3B200000 807D005C 38800000 3D80803A 618C6FEC @@ -3944,15 +4160,16 @@ D023000C 809C0018 3C004330 C84298A8 6F238000 90010080 90610084 C8210080 -EC211028 C05C0028 +EC211028 C05C002C EC2100B2 D036002C 3A940001 2C140006 4180FCF8 7F43D378 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -8001001C 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +8001001C 83E10014 +60000000 00000000 043A69C0 4800003C #Online/Menus/InGame/ParseNumbersBetter.asm C225B8A4 00000006 #Online/Menus/SSS/DisableLRSTART.asm 3C608048 80639D30 @@ -3982,19 +4199,18 @@ C222B044 00000006 #Online/Menus/TitleMenu/AllowSwapToSameSubmenu.asm 7D8903A6 4E800420 38600000 986DAFA2 60000000 00000000 -C22299F0 00000019 #Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm -2C030008 408200B8 +C22299F0 00000018 #Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm +2C030008 408200B0 886DAFA1 2C030000 41820014 2C030001 41820040 2C030002 -41820054 2C040000 -41820080 2C040001 -41820078 2C040002 -41820070 2C040003 -41820068 2C040005 -41820060 2C040006 -41820058 48000068 -2C040000 4182004C +4182004C 2C040000 +41820078 2C040001 +41820070 2C040002 +41820068 2C040003 +41820060 2C040005 +41820058 2C040006 +41820050 48000060 2C040004 41820044 2C040006 4182003C 4800004C 2C040000 @@ -4014,7 +4230,7 @@ C34C0000 C31D0000 41880000 3D75C28F 4E800021 01000000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFFD5 7C6802A6 38800001 3D808000 618C5618 7D8903A6 @@ -4046,23 +4262,23 @@ C34C0000 C31D0000 7D8903A6 4E800421 7F83E378 3D808037 618CF1B0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 B9C10408 60000000 00000000 -C21B1040 00000165 #Online/Menus/TitleMenu/OnMenuPrep.asm +C21B1040 00000167 #Online/Menus/TitleMenu/OnMenuPrep.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 480000B5 7C6802A6 3C80803D 6084D908 90640000 3C60803E 6063B750 48000209 7C8802A6 90830010 -480005AD 7C8802A6 +4800059D 7C8802A6 38A00010 3D808000 618C31F4 7D8903A6 4E800421 3C60803E -6063B750 4800059D +6063B750 4800058D 7C8802A6 90830008 3C60803E 6063B66C 38800644 B0830004 @@ -4073,9 +4289,9 @@ C21B1040 00000165 #Online/Menus/TitleMenu/OnMenuPrep.asm 39950014 7D8903A6 4E800421 3995000C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -48000A5C 4E800021 +BA8100B0 800100E4 +382100E0 7C0803A6 +48000A6C 4E800021 3D808000 618C5618 7D8903A6 4E800421 7FC802A6 38000008 @@ -4089,8 +4305,8 @@ BA810008 800100B4 3D80801B 618C136C 7D8903A6 4E800420 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 3FE0804A +90010004 9421FF20 +BE8100B0 3FE0804A 63FF04F0 3FC0803E 63DEAE68 38000005 B00DB528 3D808000 @@ -4119,19 +4335,19 @@ B00DB528 3D808000 8803000D 508026B6 9803000D 38600001 986DAFA2 7F63DB78 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF08 BDC100B0 7C731B78 80730008 -2C030000 40820354 +2C030000 40820344 3C60804A 3BA304F0 38600004 3D808022 618C9624 7D8903A6 4E800421 907D000C 3BC00000 93DD0008 -546006F7 4182018C +546006F7 4182017C 38000005 B00DB528 3BE00001 3B9E0000 9BFD0011 5783063E @@ -4147,15 +4363,13 @@ BA810008 800100B4 7D8903A6 4E800421 A01D0002 2C000000 41820038 2C000001 -41820048 2C000002 -41820048 2C000003 -41820048 2C000004 -41820048 2C000005 -4182005C 2C000006 -41820078 4800027C -38600003 3D808002 -618C4030 7D8903A6 -4E800421 48000264 +41820038 2C000002 +41820038 2C000003 +41820038 2C000004 +41820038 2C000005 +4182004C 2C000006 +41820068 4800026C +38600000 48000078 38600001 48000070 38600002 48000068 38600003 48000060 @@ -4237,16 +4451,17 @@ A09C0000 3D808022 7F6802A6 387B0004 7C6903A6 4E800421 387B0008 7C6903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 B9C100B0 +800100FC 382100F8 7C0803A6 4E800021 803EB57C 430C0000 803EB684 07000000 4E800021 06450646 0647064B 06480649 064A0000 7C0802A6 -90010004 9421FF50 -BE810008 806DB518 +90010004 9421FF10 +BE8100B0 DBE100E0 +DBC100E8 806DB518 3C80803E 6084FA0C 3D808038 618C0358 7D8903A6 4E800421 @@ -4262,9 +4477,9 @@ BE810008 806DB518 3C80803E 6084FA60 3D808038 618C0358 7D8903A6 4E800421 -7C7D1B78 48000465 -7FC802A6 C2DE0010 -C2FE0014 3AC00016 +7C7D1B78 4800047D +7FC802A6 C3FE0010 +C3DE0014 3AC00016 7EC3B378 3D808037 618CF1E4 7D8903A6 4E800421 7C771B78 @@ -4284,17 +4499,17 @@ C2FE0014 3AC00016 7F25CB78 3D808039 618C0A70 7D8903A6 4E800421 7F23CB78 -38810034 38A0000A +38810008 38A0000A 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 38800010 3D808037 618C1D9C 7D8903A6 4E800421 7F23CB78 -38810034 38A0000B +38810008 38A0000B 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 38800010 3D808037 618C1D9C 7D8903A6 4E800421 7F23CB78 @@ -4302,19 +4517,19 @@ C2FE0014 3AC00016 7FA6EB78 3D808036 618CFB5C 7D8903A6 4E800421 7F23CB78 -FC20B090 3D808036 +FC20F890 3D808036 618CF8BC 7D8903A6 4E800421 7F23CB78 -38810034 38A00006 +38810008 38A00006 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 3C80C060 60840000 90830038 7F23CB78 -38810034 38A00007 +38810008 38A00007 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 3C80405C 60840000 90830038 7F03C378 3C808039 60841070 @@ -4326,17 +4541,19 @@ FC20B090 3D808036 7EE6BB78 3D808039 618C0B68 7D8903A6 4E800421 7F03C378 -48000031 7C8802A6 +48000039 7C8802A6 38A0000F 3D808038 618CFD54 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 48000225 -7FC802A6 C2DE0010 -C2FE0014 7C781B78 +90010004 9421FF10 +BE8100B0 DBE100E0 +DBC100E8 4800022D +7FC802A6 C3FE0010 +C3DE0014 7C781B78 83380028 8358002C 8B7A0000 839A0001 83BA0005 7F23CB78 @@ -4350,26 +4567,26 @@ C07E0008 C09E000C 3D808000 618C56B4 7D8903A6 4E800421 907A0005 48000198 -7F23CB78 38810034 +7F23CB78 38810008 38A00007 38C0FFFF 3D808001 618C1E24 7D8903A6 4E800421 -FC20B090 2C1B0000 -40820008 FC20B890 -80610034 3D808036 +FC20F890 2C1B0000 +40820008 FC20F090 +80610008 3D808036 618CF8BC 7D8903A6 -4E800421 80610034 +4E800421 80610008 3D808037 618C0928 7D8903A6 4E800421 -7F23CB78 38810034 +7F23CB78 38810008 38A00006 38C0FFFF 3D808001 618C1E24 7D8903A6 4E800421 -FC20B090 2C1B0001 -40820008 FC20B890 -80610034 3D808036 +FC20F890 2C1B0001 +40820008 FC20F090 +80610008 3D808036 618CF8BC 7D8903A6 -4E800421 80610034 +4E800421 80610008 3D808037 618C0928 7D8903A6 4E800421 39C00000 7DC37378 @@ -4400,8 +4617,9 @@ FC20B090 2C1B0001 618C5CC4 7D8903A6 4E800421 3C600000 60630000 907C0008 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 4E800021 C0B00000 C0333333 41B80000 @@ -4424,10 +4642,10 @@ C21B3668 00000005 #Online/Menus/VSScreen/AllowP2ColorDuplicate.asm 41820014 3D808017 618CBEC8 7D8903A6 4E800421 00000000 -C2186EC4 0000007D #Online/Menus/VSScreen/InitVsSplash.asm +C2186EC4 0000007F #Online/Menus/VSScreen/InitVsSplash.asm 3C608048 80639D30 5463443E 2C030408 -408203D0 48000060 +408203E0 48000060 4E800021 00000000 3F800000 3F000000 3F19999A F15959FF @@ -4440,8 +4658,8 @@ C2186EC4 0000007D #Online/Menus/VSScreen/InitVsSplash.asm 5465616D 20310054 65616D20 32005031 00503200 7C0802A6 -90010004 9421FF50 -BE810008 38600000 +90010004 9421FF20 +BE8100B0 38600000 3C80803F 608411A4 3CA0803F 60A51194 3D80803A 618C62A0 @@ -4458,7 +4676,7 @@ BE810008 38600000 989E004A C03F0000 D03E0008 C03F0004 D03E0024 D03E0028 -887D0210 2C030001 +887D0264 2C030001 41820038 387F0010 389F0052 38BD0034 38C00000 C03F001C @@ -4466,10 +4684,10 @@ D03E0024 D03E0028 389F0055 38BD0053 38C00000 C03F0020 48000129 48000038 -807D000D 4800021D +807D000D 4800022D 387F0010 389F0044 C03F001C 4800010D -807D0011 48000205 +807D0011 48000215 387F0014 389F004B C03F0020 480000F5 48000004 38600000 @@ -4485,12 +4703,12 @@ C03F0004 D03E0024 D03E0028 38800001 989E004A 989E0049 C03F0000 D03E0008 -7FC3F378 A09D0216 +7FC3F378 A09D026A 3D808000 618C5690 7D8903A6 4E800421 2C030001 41820058 3CA0803B 60A57808 -A0DD0216 38600000 +A0DD026A 38600000 1C830002 7C85222E 7C043000 41820014 38630001 2C03001D @@ -4499,11 +4717,12 @@ A0DD0216 38600000 7C841A14 8884005C 7FC3F378 3D80803A 618C6368 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4800017C +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4800018C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF10 BE8100B0 +DBE100E0 DBC100E8 FFE00890 7C761B78 7C942378 7CB92B78 7CDA3378 7CF83B78 @@ -4531,11 +4750,12 @@ FC60F090 3D808000 618C56B4 7D8903A6 4E800421 39CE0004 39EF0001 7C0FD000 -4180FFAC BA810008 -800100B4 382100B0 +4180FFAC BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38A00008 38C000FF 7C7A3039 7C632C30 38E00008 39200000 @@ -4546,25 +4766,25 @@ FC60F090 3D808000 39290001 2C090003 4180FFD8 7F46D378 80A10010 80E1000C -81010008 BA810008 -800100B4 382100B0 +81010008 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 3800FFFF 00000000 C2184DE4 00000010 #Online/Menus/VSScreen/PlayOpponentCharAnnouncer.asm 3D808048 818C9D30 558C443E 2C0C0408 40820068 7C0802A6 -90010004 9421FF50 -BE810008 38600000 +90010004 9421FF20 +BE8100B0 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7F1B78 887F0004 -1C630024 389F0268 +1C630024 389F02BC 7FC418AE 7FE3FB78 3D808037 618CF1B0 7D8903A6 4E800421 -7FC3F378 BA810008 -800100B4 382100B0 +7FC3F378 BA8100B0 +800100E4 382100E0 7C0803A6 48000008 887E00F4 00000000 C21B3650 00000004 #Online/Menus/VSScreen/PreventP2Color.asm @@ -4576,8 +4796,8 @@ C2185060 00000013 #Online/Menus/VSScreen/HideStageDisplay/HideAllJObjs.asm 3D808048 818C9D30 558C443E 2C0C0408 40820078 7C0802A6 -90010004 9421FF50 -BE810008 83E30028 +90010004 9421FF20 +BE8100B0 83E30028 3BC00000 7FE3FB78 38810080 7FC5F378 38C0FFFF 3D808001 @@ -4586,8 +4806,8 @@ BE810008 83E30028 80640014 60630010 90640014 3BDE0001 2C1E001B 4180FFC8 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808018 618C51AC 7D8903A6 4E800420 3C608047 3BE335A8 @@ -4597,8 +4817,8 @@ C2184ADC 00000010 #Online/Menus/VSScreen/HideStageText/HideLetterJObjs.asm 3D808048 818C9D30 558C443E 2C0C0408 40820068 7C0802A6 -90010004 9421FF50 -BE810008 3BE00009 +90010004 9421FF20 +BE8100B0 3BE00009 7F63DB78 38810080 7FE5FB78 38C0FFFF 3D808001 618C1E24 @@ -4607,8 +4827,8 @@ BE810008 3BE00009 618CF6B4 7D8903A6 4E800421 3BFF0001 2C1F000E 4180FFC4 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3BBE0038 00000000 04184B1C 480001D8 #Online/Menus/VSScreen/HideStageText/SkipStageNumberShow.asm C21BFA20 00000012 #Online/Slippi Online Scene/boot.asm @@ -4630,28 +4850,28 @@ C21BFA20 00000012 #Online/Slippi Online Scene/boot.asm 3D80801B 618C136C 7D8903A6 4E800420 38600001 00000000 -C21A45B8 0000017A #Online/Slippi Online Scene/main.asm +C21A45B8 0000020C #Online/Slippi Online Scene/main.asm 3BA30004 7C0802A6 -90010004 9421FF50 -BE810008 3C80803E -6084DC1C 48000245 +90010004 9421FF20 +BE8100B0 3C80803E +6084DC1C 48000281 7C6802A6 38630000 90640008 38600000 986DAFA3 986DAFC8 986DAFEC 986DAFE0 -38600008 4800019D +38600008 480001C1 7C8802A6 4800002D -48000B64 80830000 +48000FF0 80830000 5485467A 2C050048 40820014 548401BA 7C840734 7C841A14 90830000 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 3C80803D 6084AD30 -48000081 7C6802A6 -90640004 48000105 +48000091 7C6802A6 +90640004 48000129 7C6802A6 90640008 38600001 98640000 3C60803D 6063ACA4 @@ -4660,359 +4880,505 @@ BE810008 3C80803E 4BFFFFF0 93C30010 7FD4F378 88740000 7C630774 2C03FFFF -4182001C 38740004 +4182002C 38740004 4BFFFF65 38740008 -4BFFFF5D 3A940018 -4BFFFFDC BA810008 -800100B4 382100B0 +4BFFFF5D 38740010 +4BFFFF55 38740014 +4BFFFF4D 3A940018 +4BFFFFCC BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 3C808045 +90010004 9421FF20 +BE8100B0 3C808045 6084ABF0 886DAEF8 -98640006 3D808000 -618C56B8 7D8903A6 -4E800421 7C741B78 -3D808000 618C5698 -7D8903A6 4E800421 -7C751B78 3AC00000 -48000024 887400DD -2C030012 40820010 -38600013 987400DD -48000014 3AD60001 -3A94001C 7C16A800 -4180FFDC BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 38600012 -3C80803F 60840CC8 -98640001 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 00030000 -48000081 480000F5 -08000000 80497758 -80497758 01030000 -480001B5 480001E5 -09000000 80480668 -80480668 02030000 -801B1588 4800027D -02000000 80480530 -80479D98 03030000 -00000000 00000000 -05000000 00000000 -00000000 04030000 -48000411 4800074D -20000000 80490880 -804D68D0 FF000000 -4E800021 81940000 -7C0802A6 90010004 -9421FF50 BE810008 -808D8840 3BE40530 -3D80801A 618C427C -7D8903A6 4E800421 -88BF0002 3880000E -88FF0003 38C00000 -891F0004 895F0006 -39200000 3D80801B -618C06B0 7D8903A6 -4E800421 3D808001 -618C74BC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 +98640006 48000159 +7C8802A6 48000BB9 +7C6802A6 90640018 +3D808000 618C56B8 +7D8903A6 4E800421 +7C741B78 3D808000 +618C5698 7D8903A6 +4E800421 7C751B78 +3AC00000 48000024 +887400DD 2C030012 +40820010 38600013 +987400DD 48000014 +3AD60001 3A94001C +7C16A800 4180FFDC +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 -7C7E1B78 3D80801B -618CAAD0 7D8903A6 -4E800421 809E0014 -88840003 2C040002 -40820008 4800008C -886DAFA0 2C030001 -4182001C 2C030002 -4182001C 2C030003 -41820014 2C030000 -41820008 48000038 -48000034 886DAFC9 -7C630774 2C03FFFF -41820024 2C030001 -4182001C 2C030000 -40820000 886DAFCA -2C030000 41820020 -48000004 48000659 -3C808047 60849D30 -38600005 98640005 -48000018 3C808047 -60849D30 38600002 -98640005 48000004 -BA810008 800100B4 -382100B0 7C0803A6 +9421FF20 BE8100B0 +38600012 3C80803F +60840CC8 98640001 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +00030000 480000B9 +4800012D 08000000 +80497758 80497758 +01030000 48000245 +48000275 09000000 +80480668 80480668 +02030000 801B1588 +4800036D 02000000 +80480530 80479D98 +03030000 00000000 +00000000 05000000 +00000000 00000000 +04030000 48000641 +4800097D 20000000 +80490880 804D68D0 +05030000 48000CDD +48000D1D 50000000 +48000019 48000015 +FF000000 4E800021 +81940000 4E800021 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 7C0802A6 +90010004 9421FF20 +BE8100B0 808D8840 +3BE40530 3D80801A +618C427C 7D8903A6 +4E800421 88BF0002 +3880000E 88FF0003 +38C00000 891F0004 +895F0006 39200000 +3D80801B 618C06B0 +7D8903A6 4E800421 +3D808001 618C74BC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 3D80801B -618C1514 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -7C0802A6 90010004 -9421FF50 BE810008 -7C7F1B78 809F0014 -88840004 2C040000 -4082001C 38600000 -3D80801A 618C42A0 +90010004 9421FF20 +BE8100B0 7C7E1B78 +3D80801B 618CAAD0 7D8903A6 4E800421 -48000064 38600001 -986DAFCA 38600000 -3D808000 618C5610 -7D8903A6 4E800421 -7C7E1B78 887E0001 -889E0002 7C032000 -4082001C 48000579 +809E0014 88840003 +2C040002 40820008 +480000E4 886DAFA0 +2C030000 41820020 +2C030001 41820014 +2C030002 4182006C +2C030003 41820064 +48000090 4BFFFF09 +7F6802A6 7F63DB78 +3880001C 3D808000 +618CC160 7D8903A6 +4E800421 48000951 +7C6802A6 907B0018 +38600003 987B0000 +38600001 B07B0001 +38600000 987B0006 +987B0014 3C808047 +60849D30 38600006 +98640005 48000060 +886DAFC9 7C630774 +2C03FFFF 41820024 +2C030001 4182001C +2C030000 40820000 +886DAFCA 2C030000 +41820020 48000004 +480007F9 3C808047 +60849D30 38600005 +98640005 48000018 3C808047 60849D30 -38600005 98640005 -4800001C 38600000 -3D80801A 618C42A0 -7D8903A6 4E800421 -48000004 BA810008 -800100B4 382100B0 +38600002 98640005 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -3D80801B 618C15C8 +9421FF20 BE8100B0 +3D80801B 618C1514 7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7F1B78 +809F0014 88840004 +2C040000 4082001C +38600000 3D80801A +618C42A0 7D8903A6 +4E800421 48000064 +38600001 986DAFCA 38600000 3D808000 618C5610 7D8903A6 -4E800421 7C7F1B78 -887F0003 480005E5 -986DAFC9 886DAFA0 -2C030003 40820020 -887F0003 38800001 -2C030000 40820008 -38800000 988DAFC9 -4800003C 3A800000 -3AA00000 7E83A378 -480005A9 2C030000 -41820008 3AB50001 -3A940001 2C140004 -4180FFE4 2C150001 -4182000C 38600000 -986DAFC9 3E808047 -62949DA4 887F0003 -48000571 2C030000 -41820018 38600001 -98740000 38600000 -9874005D 48000014 -38600000 98740000 -38600001 9874005D -886DAFA0 2C030003 -4082000C 38600000 -98740004 38600000 -986DAFCA 38600004 +4E800421 7C7E1B78 +887E0001 889E0002 +7C032000 4082001C +48000719 3C808047 +60849D30 38600005 +98640005 4800001C +38600000 3D80801A +618C42A0 7D8903A6 +4E800421 48000004 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7F1B78 +38600002 3D808037 +618CF1E4 7D8903A6 +4E800421 388000C2 +98830000 9BE30001 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 3D80801B +618C15C8 7D8903A6 +4E800421 38600000 +3D808000 618C5610 +7D8903A6 4E800421 +7C7F1B78 886DAFA0 +2C030000 40820130 +887F0000 2C030000 +41820018 808DB61C +88640011 2C030001 +41820008 48000010 +38600001 4BFFFF39 +480000B4 4BFFFC89 +7F6802A6 3C808046 +6084B6A0 88640008 +987B0017 480006DD +7C7C1B78 2C1C0000 +40800014 887B0006 +38630001 987B0006 +48000060 9B9B0005 +A09B0001 38840006 +7F9B21AE 387C0003 +7C9B18AE 38A40001 +7CBB19AE 1C9C0002 +38840010 A07F026A +7C7B232E 889B0000 +38840001 38600002 +7C841B96 7C052000 +4080002C A07B0001 +38630001 B07B0001 +38600000 987B0006 +3C808047 60849D30 +38600006 98640005 +4800006C 38600000 +4BFFFE85 38600001 3D808037 618CF1E4 7D8903A6 4E800421 -7C7E1B78 386000BC +7C7E1B78 386000BA 987E0000 7FC3F378 38800001 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 38800004 -38A00000 3D808000 -618C55F0 7D8903A6 -4E800421 3C80804D -807E0000 90645F90 7FC3F378 3D808037 618CF1B0 7D8903A6 4E800421 3C808047 60849D30 38600001 -98640005 7FE3FB78 +98640005 887F0003 +48000735 986DAFC9 +886DAFA0 2C030003 +40820020 887F0003 +38800001 2C030000 +40820008 38800000 +988DAFC9 4800003C +3A800000 3AA00000 +7E83A378 480006F9 +2C030000 41820008 +3AB50001 3A940001 +2C140004 4180FFE4 +2C150001 4182000C +38600000 986DAFC9 +3E808047 62949DA4 +887F0003 480006C1 +2C030000 41820018 +38600001 98740000 +38600000 9874005D +48000014 38600000 +98740000 38600001 +9874005D 886DAFA0 +2C030003 4182000C +2C030000 4082000C +38600000 98740004 +38600000 986DAFCA +38600004 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +386000BC 987E0000 +7FC3F378 38800001 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 7FC3F378 +38800004 38A00000 +3D808000 618C55F0 +7D8903A6 4E800421 +3C80804D 807E0000 +90645F90 7FC3F378 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 4E800021 -01780101 01FF2121 -FF2121EE 0000EE00 -7C0802A6 90010004 -9421FF50 BE810008 -38600000 3D808000 -618C5610 7D8903A6 -4E800421 7C7E1B78 -83ED8840 3BFF0598 -886DAFA0 2C030003 -40820048 3BA00000 -1CBD0024 38650069 -7C7F18AE 38630001 -38850060 7C9F20AE -3D808000 618C56B0 +7FE3FB78 3D808037 +618CF1B0 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +4E800021 01780101 +01FF2121 FF2121EE +0000EE00 7C0802A6 +90010004 9421FF20 +BE8100B0 38600000 +3D808000 618C5610 7D8903A6 4E800421 -1C9D0024 38840063 -7C7F21AE 3BBD0001 -2C1D0004 4180FFC4 -3C608049 60630888 -4BFFFF65 7C8802A6 -38A00010 3D808000 -618C31F4 7D8903A6 -4E800421 3C808049 -60840888 887F0060 -98640005 887F0063 -9864000B 887F0084 -98640008 887F0087 -9864000E 38600000 -9864FFFF 9864FFFB -887E0210 2C030000 -418200F4 887E0003 -1C630024 38630271 -7F7E18AE 38600002 -98640002 38600001 -9864FFFB 98640006 -98640007 98640009 -9864000A 9864000C -9864000D 9864000F -98640010 3BA00000 -3B800000 1C7D0024 -38630069 7C7F18AE -7C03D800 40820030 -1CBD0024 38A50060 -7CBF28AE 38DC0005 -7CA621AE 1CBD0024 -38A50063 7CBF28AE -38DC000B 7CA621AE -3B9C0001 3BBD0001 -2C1D0004 4180FFB8 -9B840003 3BA00000 -3B800000 1C7D0024 -38630069 7C7F18AE -7C03D800 41820030 -1CBD0024 38A50060 -7CBF28AE 38DC0008 -7CA621AE 1CBD0024 -38A50063 7CBF28AE -38DC000E 7CA621AE -3B9C0001 3BBD0001 -2C1D0004 4180FFB8 -9B840004 3C808043 -60842078 887F0060 -90640014 887F0063 -98640018 887F0084 -9064001C 887F0087 -98640020 887E0210 -2C030000 41820024 -887F00A8 90640024 -887F00AB 98640028 -887F00CC 9064002C -887F00CF 98640030 -A07F000E 9064000C -3D808001 618C8254 -7D8903A6 4E800421 -386000C7 3D808001 -618C8C2C 7D8903A6 -4E800421 38600004 -3D808001 618C7700 +7C7E1B78 83ED8840 +3BFF0598 886DAFA0 +2C030003 40820048 +3BA00000 1CBD0024 +38650069 7C7F18AE +38630001 38850060 +7C9F20AE 3D808000 +618C56B0 7D8903A6 +4E800421 1C9D0024 +38840063 7C7F21AE +3BBD0001 2C1D0004 +4180FFC4 3C608049 +60630888 4BFFFF65 +7C8802A6 38A00010 +3D808000 618C31F4 7D8903A6 4E800421 -3860001C 3D808002 -618C6F2C 7D8903A6 -4E800421 3A800000 -1C140024 7FF5FB78 -7EB50214 3D808000 -618C569C 7D8903A6 -4E800421 88950060 -7C840774 7C041800 -41820028 38600000 -3D808000 618C56A0 +3C808049 60840888 +887F0060 98640005 +887F0063 9864000B +887F0084 98640008 +887F0087 9864000E +38600000 9864FFFF +9864FFFB 887E0264 +2C030000 418200F4 +887E0003 1C630024 +386302C5 7F7E18AE +38600002 98640002 +38600001 9864FFFB +98640006 98640007 +98640009 9864000A +9864000C 9864000D +9864000F 98640010 +3BA00000 3B800000 +1C7D0024 38630069 +7C7F18AE 7C03D800 +40820030 1CBD0024 +38A50060 7CBF28AE +38DC0005 7CA621AE +1CBD0024 38A50063 +7CBF28AE 38DC000B +7CA621AE 3B9C0001 +3BBD0001 2C1D0004 +4180FFB8 9B840003 +3BA00000 3B800000 +1C7D0024 38630069 +7C7F18AE 7C03D800 +41820030 1CBD0024 +38A50060 7CBF28AE +38DC0008 7CA621AE +1CBD0024 38A50063 +7CBF28AE 38DC000E +7CA621AE 3B9C0001 +3BBD0001 2C1D0004 +4180FFB8 9B840004 +3C808043 60842078 +887F0060 90640014 +887F0063 98640018 +887F0084 9064001C +887F0087 98640020 +887E0264 2C030000 +41820024 887F00A8 +90640024 887F00AB +98640028 887F00CC +9064002C 887F00CF +98640030 A07F000E +9064000C 3D808001 +618C8254 7D8903A6 +4E800421 386000C7 +3D808001 618C8C2C +7D8903A6 4E800421 +38600004 3D808001 +618C7700 7D8903A6 +4E800421 3860001C +3D808002 618C6F2C 7D8903A6 4E800421 -3D808000 618C56A8 +3A800000 1C140024 +7FF5FB78 7EB50214 +3D808000 618C569C 7D8903A6 4E800421 -3A940001 2C140006 -3AB50024 4180FFB0 -A07F000E 3D808022 -618C519C 7D8903A6 -4E800421 7C641B78 -38600001 3D808000 +88950060 7C840774 +7C041800 41820028 +38600000 3D808000 618C56A0 7D8903A6 4E800421 3D808000 618C56A8 7D8903A6 -4E800421 3D808002 -618C7168 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 3A940001 +2C140006 3AB50024 +4180FFB0 A07F000E +3D808022 618C519C +7D8903A6 4E800421 +7C641B78 38600001 +3D808000 618C56A0 +7D8903A6 4E800421 +3D808000 618C56A8 +7D8903A6 4E800421 +3D808002 618C7168 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 3C808047 +60849D30 38600003 +98640005 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -3C808047 60849D30 -38600003 98640005 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 38600000 -3D808000 618C5610 +9421FF20 BE8100B0 +38600000 3D808000 +618C5610 7D8903A6 +4E800421 7C7F1B78 +83CD8840 3BDE0598 +7FC3F378 389F025C +38A00138 3D808000 +618C31F4 7D8903A6 +4E800421 7FC3F378 +3D808000 618C5694 +7D8903A6 4E800421 +3D808017 618CEB30 +7D8903A6 4E800421 +889F02BC 98830000 +889F02BF 98830001 +38800000 98830002 +38800003 98830005 +38800078 98830004 +3C80803D 6084DEC8 +8084000C 887F02E0 +98640002 38602121 +B0640003 3C808049 +60840880 887F02E3 +98640016 7FE3FB78 +3D808037 618CF1B0 7D8903A6 4E800421 -7C7F1B78 83CD8840 -3BDE0598 7FC3F378 -389F0208 38A00138 -3D808000 618C31F4 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +3FE08047 63FF9DA4 +887F0004 2C030001 +41820010 2C030002 +418200C8 48000110 +38600000 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7B1B78 +38600001 3D808004 +618C0AF0 7D8903A6 +4E800421 2C1B002D +4081000C 2C03002D +41810014 2C1B002D +418100C4 2C03002D +418100B4 38600000 +3D808003 618C3BD8 7D8903A6 4E800421 -7FC3F378 3D808000 -618C5694 7D8903A6 -4E800421 3D808017 -618CEB30 7D8903A6 -4E800421 889F0268 -98830000 889F026B -98830001 38800000 -98830002 38800003 -98830005 38800078 -98830004 3C80803D -6084DEC8 8084000C -887F028C 98640002 -38602121 B0640003 -3C808049 60840880 -887F028F 98640016 -7FE3FB78 3D808037 -618CF1B0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +7C7B1B78 38600001 +3D808003 618C3BD8 +7D8903A6 4E800421 +7C1B1800 41810080 +41800084 38600000 +3D808003 618C42B4 +7D8903A6 4E800421 +7C7B1B78 38600001 +3D808003 618C42B4 +7D8903A6 4E800421 +7C1B1800 41800048 +4181004C 48000050 +38600000 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +40820024 38600001 +3D808003 618C3BD8 +7D8903A6 4E800421 +2C030000 40820010 +48000014 38600000 +48000010 38600001 +48000008 3860FFFF +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7D1B78 +3FE08047 63FF9DA4 +1FDD00A8 7FDEFA14 +887F0004 2C030000 +418200B0 3C608046 +6063B6A0 886324D0 +889F0006 7C032000 +40820098 887E0058 +2C030003 4182008C +887F0004 2C030007 +40820040 887F0006 +2C030001 40820024 +887F0000 1C6300A8 +7C63FA14 8863005F +889E005F 7C032000 +41820058 4800005C +887F0000 7C03E800 +41820048 4800004C +887F0006 2C030001 +40820028 7FE3FB78 +3D808016 618C54A0 +7D8903A6 4E800421 +889E005F 7C032000 +41820020 48000014 +887E005D 2C030000 +41820010 48000004 +38600000 48000008 +38600001 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -7C7D1B78 3FE08047 -63FF9DA4 1FDD00A8 -7FDEFA14 887F0004 -2C030000 418200B0 -3C608046 6063B6A0 -886324D0 889F0006 -7C032000 40820098 -887E0058 2C030003 -4182008C 887F0004 -2C030007 40820040 -887F0006 2C030001 -40820024 887F0000 -1C6300A8 7C63FA14 -8863005F 889E005F -7C032000 41820058 -4800005C 887F0000 -7C03E800 41820048 -4800004C 887F0006 -2C030001 40820028 -7FE3FB78 3D808016 -618C54A0 7D8903A6 -4E800421 889E005F -7C032000 41820020 -48000014 887E005D -2C030000 41820010 -48000004 38600000 -48000008 38600001 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 38600028 -987E0000 00000000 +9421FF20 BE8100B0 +83E30010 887F0006 +2C030000 40820014 +3D808001 618C74BC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 83E30010 +38600000 3D808000 +618C5610 7D8903A6 +4E800421 7C7E1B78 +887E0000 2C030004 +41820020 38600001 +4BFFF56D 3C808047 +60849D30 38600001 +98640005 48000038 +887F0006 2C030000 +41820018 3C808047 +60849D30 38600003 +98640005 48000018 +4BFFFC09 3C808047 +60849D30 38600005 +98640005 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +38600028 987E0000 +60000000 00000000 04005694 4E800020 #Online/Static/AdjustNullCharID.asm C20056BC 00000012 #Online/Static/CSSUpdateCSP.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7CBD2B78 7CDC3378 3D808000 618C56B8 @@ -5025,58 +5391,10 @@ C20056BC 00000012 #Online/Static/CSSUpdateCSP.asm 7C9E2A14 7FE3FB78 7F85E378 3D808025 618CD5AC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -C20056AC 0000002F #Online/Static/ChatMessages.asm -7CA802A6 2C030008 -4182001C 2C030004 -41820020 2C030002 -41820024 2C030001 -41820028 48000075 -7C6802A6 48000024 -480000FD 7C6802A6 -48000018 480000C9 -7C6802A6 4800000C -4800007D 7C6802A6 -88E30000 89030001 -89230002 89430003 -7C862378 38830004 -7C843A14 2C060008 -41820020 7C844214 -2C060001 41820014 -7C844A14 2C060002 -41820008 7C845214 -7CA903A6 4E800420 -4E800021 07040904 -436F6D6D 6F6E0067 -6773006F 6E65206D -6F726500 62726200 -676F6F64 206C7563 -6B000000 4E800021 -0C0C0D07 436F6D70 -6C696D65 6E747300 -77656C6C 20706C61 -79656400 74686174 -20776173 2066756E -00746861 6E6B7300 -746F6F20 676F6F64 -00000000 4E800021 -0A060504 52656163 -74696F6E 7300736F -72727900 6D792062 -006C6F6C 00776F77 -00000000 4E800021 -05090817 4D697363 -00676F74 74612067 -6F006F6E 65207365 -63006C65 74277320 -706C6179 20616761 -696E206C 61746572 -00626164 20636F6E -6E656374 696F6E00 -60000000 00000000 C2005690 00000002 #Online/Static/CheckAltStageName.asm 38600000 4E800020 60000000 00000000 @@ -5088,7 +5406,7 @@ C2005698 00000002 #Online/Static/GetCSSIconNum.asm 60000000 00000000 C20056B0 00000011 #Online/Static/GetTeamCostumeIndex.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7FC3F378 2C1F0003 41820028 2C1F0002 @@ -5100,8 +5418,8 @@ C20056B0 00000011 #Online/Static/GetTeamCostumeIndex.asm 7D8903A6 4E800421 48000014 3D808016 618C9264 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C20055F4 00000007 #Online/Static/IntToFloat.asm @@ -5114,9 +5432,9 @@ EC211028 C0410008 60000000 00000000 C2005610 00000012 #Online/Static/LoadMatchState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 2C030000 40820018 -38600340 3D808037 +386003C7 3D808037 618CF1E4 7D8903A6 4E800421 7C7F1B78 386000B3 987F0000 @@ -5124,16 +5442,16 @@ C2005610 00000012 #Online/Static/LoadMatchState.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 7FE3FB78 -38800340 38A00000 +388003C7 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C20056A4 00000022 #Online/Static/LoadPremadeText.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 3B800004 7F83E378 3D808037 618CF1E4 @@ -5149,11 +5467,11 @@ C20056A4 00000022 #Online/Static/LoadPremadeText.asm 618CF1E4 7D8903A6 4E800421 7C7D1B78 386000E2 4800001D -7FA3EB78 BA810008 -800100B4 382100B0 +7FA3EB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 987D0000 9BFD0001 9BDD0002 7FA3EB78 38800003 38A00001 @@ -5162,20 +5480,49 @@ C20056A4 00000022 #Online/Static/LoadPremadeText.asm 7FA3EB78 7F84E378 38A00000 3D808000 618C55F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -C200560C 00000016 #Online/Static/LoadState.asm +C200560C 00000033 #Online/Static/LoadState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7B1B78 7C982378 7CBA2B78 88DA0000 +3AC00000 3AD60001 +2C160007 408100DC +48000044 4E800021 +4C6F6164 20737461 +74652072 65717565 +73746564 20666F72 +20667261 6D652025 +64206275 74206672 +616D6520 77617320 +6E6F7420 666F756E +642E0000 7C0802A6 +90010004 9421FF00 +BC610008 7F05C378 +60000000 60000000 +60000000 60000000 +60000000 806DAFC4 +38630003 4BFFFF91 +7C8802A6 4CC63242 +3D808032 618C3CF4 +7D8903A6 4E800421 +806DAFC4 388000D0 +98830000 38800000 +98830001 38800001 +98830002 38800080 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 B8610008 +80010104 38210100 +7C0803A6 48000000 38C6FFFF 2C060000 40800008 38C60007 1C660004 38630002 7F3A1A14 80790000 -7C03C000 4082FFDC +7C03C000 4082FEF8 3D808034 618C7364 7D8903A6 4E800421 7C771B78 386000B2 @@ -5186,21 +5533,21 @@ C200560C 00000016 #Online/Static/LoadState.asm 4E800421 7EE3BB78 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 C20055EC 00000008 #Online/Static/MultiplyRWithF.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C55F4 7D8903A6 4E800421 -EC2100B2 BA810008 -800100B4 382100B0 +EC2100B2 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C2005608 00000016 #Online/Static/SaveState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7B1B78 7C982378 7CBA2B78 887A0000 1C630004 389A0002 @@ -5218,23 +5565,26 @@ C2005608 00000016 #Online/Static/SaveState.asm 4E800421 7EE3BB78 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 -C20056B4 00000059 #Online/Static/SubtextFunctions.asm -2C050002 418201F8 +C20056B4 00000063 #Online/Static/SubtextFunctions.asm +2C050002 41820228 7C0802A6 90010004 -9421FF50 BE810008 +9421FED8 BDC100B0 +DBE100F8 DBC10100 +DBA10108 DB810110 +DB610118 DB410120 7C751B78 7C962378 7CB82B78 7CD93378 -90E10038 9101003C -91210040 91410044 -91610048 9181004C -FEA00890 FEC01090 -FEE01890 FF202890 +90E10008 9101000C +91210010 91410014 +91610018 9181001C +FFE00890 FFC01090 +FFA01890 FF602890 FF403090 2C180001 418000FC 39E00004 -FC20B090 FC40B890 +FC20F090 FC40E890 2C0F0001 41820020 2C0F0002 41820020 2C0F0003 41820020 @@ -5244,11 +5594,11 @@ FC20B090 FC40B890 48000014 EC42D028 4800000C EC42D02A 48000004 7EA3AB78 -80810038 3D80803A +80810008 3D80803A 618C6B98 7D8903A6 4E800421 7C771B78 7EA3AB78 7EE4BB78 -FC20A890 FC40A890 +FC20F890 FC40F890 3D80803A 618C7548 7D8903A6 4E800421 7F25CB78 2C0F0000 @@ -5257,44 +5607,49 @@ FC20A890 FC40A890 3D80803A 618C74F0 7D8903A6 4E800421 7EA3AB78 7EE4BB78 -80A10038 80C1003C -80E10040 81010044 -81210048 8141004C +80A10008 80C1000C +80E10010 81010014 +81210018 8141001C 3D80803A 618C70A0 7D8903A6 4E800421 2C0F0000 4182000C 39EFFFFF 4BFFFF14 48000094 7EA3AB78 -80810038 FC20B090 -FC40B890 3D80803A +80810008 FC20F090 +FC40E890 3D80803A 618C6B98 7D8903A6 4E800421 7C771B78 7EA3AB78 7EE4BB78 -FC20A890 FC40A890 +FC20F890 FC40F890 3D80803A 618C7548 7D8903A6 4E800421 7EA3AB78 7EE4BB78 7EC5B378 3D80803A 618C74F0 7D8903A6 4E800421 7EA3AB78 -7EE4BB78 80A10038 -80C1003C 80E10040 -81010044 81210048 -8141004C 3D80803A +7EE4BB78 80A10008 +80C1000C 80E10010 +81010014 81210018 +8141001C 3D80803A 618C70A0 7D8903A6 4E800421 7EE3BB78 -BA810008 800100B4 -382100B0 7C0803A6 +B9C100B0 CBE100F8 +CBC10100 CBA10108 +CB810110 CB610118 +CB410120 8001012C +38210128 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7C7D1B78 +90010004 9421FF00 +BE8100B0 DBE100E0 +DBC100E8 DBA100F0 +DB8100F8 7C7D1B78 7C9C2378 7CDB3378 -FEC00890 FEE01090 -FF001890 FEA02090 -4800008D 7F4802A6 +FFC00890 FFA01090 +FF801890 FFE02090 +4800009D 7F4802A6 38600000 7F64DB78 -C01A0000 FC20B090 -FC40B890 FC60C090 +C01A0000 FC20F090 +FC40E890 FC60E090 C09A0004 C0BA0008 3D80803A 618C5ACC 7D8903A6 4E800421 @@ -5302,12 +5657,14 @@ C09A0004 C0BA0008 41820010 38600001 986DAFEC 7F86E378 7EA3AB78 7FA4EB78 -FC00A890 D0030024 +FC00F890 D0030024 D0030028 3D80803A 618C6368 7D8903A6 4E800421 7EA3AB78 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 CBE100E0 +CBC100E8 CBA100F0 +CB8100F8 80010104 +38210100 7C0803A6 4E800020 4E800021 41100000 44160000 41A00000 00000000 @@ -5323,7 +5680,7 @@ FFFFFFFF 3ECCCCCD 7200436F 6E6E6563 7420436F 64650000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C791B78 7C9B2378 2C050000 41820008 480003D1 4BFFFFA9 @@ -5348,11 +5705,11 @@ D03C0028 38600001 480000D1 38600000 48000029 480000D5 886DAFA1 987E0004 -7FA3EB78 BA810008 -800100B4 382100B0 +7FA3EB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7A1B78 C03E000A C05E000E 7F83E378 389F001C 3D80803A @@ -5368,13 +5725,13 @@ FC400890 7F83E378 38BF000C 7F83E378 7F04C378 3D80803A 618C74F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 C05E000E EC42082A D05E000E 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFE25 7FE802A6 83DF0000 83BE0000 839E0005 48000159 @@ -5405,11 +5762,11 @@ D05E000E 4E800020 7F83E378 38800003 38BD0020 3D80803A 618C70A0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFD0D 7FE802A6 83DF0000 889E0004 886DAFA1 7C041800 @@ -5418,11 +5775,11 @@ D05E000E 4E800020 618C4030 7D8903A6 4E800421 806DB614 7C6903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFCA9 +90010004 9421FF20 +BE8100B0 4BFFFCA9 7FE802A6 83DF0000 83BE0000 386000B9 987D0000 7FA3EB78 @@ -5433,23 +5790,23 @@ BE810008 4BFFFCA9 38A00000 3D808000 618C55F0 7D8903A6 4E800421 889D0000 -988DAFA1 BA810008 -800100B4 382100B0 +988DAFA1 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3CA0803E 60A5AE68 -88A508F4 38800000 +88A508F4 38800001 38600008 3D808022 618C9938 7D8903A6 4E800421 2C030001 41820010 38840001 7C042800 4180FFDC -7C832378 BA810008 -800100B4 382100B0 +7C832378 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFBCD 7FE802A6 38600012 3D808037 618CF1E4 7D8903A6 @@ -5457,11 +5814,11 @@ BE810008 4BFFFCA9 907F0000 3860002A 3D808037 618CF1E4 7D8903A6 4E800421 -907E0000 BA810008 -800100B4 382100B0 +907E0000 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -043775B8 A0190000 #Online/Logging/LogInputOnCopy.asm +043775B0 7C600775 #Online/Debugging/LogInputOnCopy.asm 041A4C24 C0429A7C #Polling Drift Fix + VB [tauKhan] 0401985C 3C60804C 04019860 91231F5C @@ -5511,6 +5868,880 @@ C20056A8 00000005 #Common/CompatibilityHooks/RequestSSMLoad.asm 38800001 1C630004 7C83612E 4E800020 60000000 00000000 +C23753B4 0000005C #m-ex codeset generated from https://github.com/JLaferri/m-ex/tree/support%2Fslippi +7C0802A6 90010004 +9421FF00 BE810008 +48000281 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +3B830000 3B9C001F +579C0034 7C9FE214 +388400A0 7FE3FB78 +7C9F2378 3D808034 +618C40E8 7D8903A6 +4E800421 7C7A1B78 +38800044 3D808034 +618C3EF0 7D8903A6 +4E800421 7C791B78 +7F43D378 7F84E378 +3D808034 618C3EF0 +7D8903A6 4E800421 +7C7B1B78 48000205 +7C6802A6 7F64DB78 +38A10080 3D808001 +618C668C 7D8903A6 +4E800421 80A10080 +7F23CB78 7F64DB78 +3D808001 618C6A54 +7D8903A6 4E800421 +7F23CB78 480001D5 +7C8802A6 3D808038 +618C0358 7D8903A6 +4E800421 7C781B78 +80780000 906200D4 +80780004 906200D8 +3860002D 90620164 +90620168 7F63DB78 +7F84E378 3D808032 +618C8F50 7D8903A6 +4E800421 4800001D +7C6802A6 90620184 +480000E9 7C6802A6 +906200F8 48000184 +4E800021 00000000 +00000000 00000000 +00000000 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +4E800021 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +4E800021 4D785363 +6E2E6461 74000000 +4E800021 4D785363 +656E6500 4E800021 +6D2D6578 00000000 +7FE3FB78 BA810008 +80010104 38210100 +7C0803A6 7C7F1B78 +93EDC018 7FE3FB78 +7FA4EB78 00000000 +C20186A8 0000000C +90010054 38610028 +48000021 7C8802A6 +38A00030 3D808000 +618C31F4 7D8903A6 +4E800421 48000038 +4E800021 02000000 +804D37EC 00000000 +03000000 803BA6C8 +0000001F 03000000 +803BA6D8 00000000 +02000000 804D37E4 +00000000 00000000 +04015D9C 80020184 +04015C00 80020184 +04015BC0 80620184 +C2018D80 00000007 +801E0000 2C000002 +41820010 2C000003 +41820008 4800001C +38600006 38800000 +3D808001 618C58D0 +7D8903A6 4E800421 +801E0000 00000000 +040158F0 80620184 +04016138 2C000007 +04015F50 83E20184 +C2015F88 00000015 +48000039 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +3C800041 6084C644 +7C632214 48000025 +7C8802A6 9064001C +7C802378 4800006C +4E800021 4966416C +6C2E7573 64000000 +4E800021 00000002 +00000001 00000006 +00000800 00000003 +00000001 00000002 +004FA690 00000004 +00000002 00000006 +0064B400 00000005 +00000004 00000006 +0096C800 00000006 +00000001 00000003 +00000020 00000007 +60000000 00000000 +040158D8 80620184 +04015E18 83C20184 +04015CD4 80020184 +C20159B4 00000018 +39800000 1C6C001C +389F0048 7D632214 +806B0014 2C030000 +40820084 806B0010 +2C030000 41820078 +2C030001 41820024 +2C030002 41820038 +2C030003 41820060 +2C030004 4182003C +2C030005 41820050 +806B0008 800B000C +7C030214 7C1D0040 +4080003C 7C1D0378 +48000034 800B0008 +7C1A0040 40810028 +7C1A0378 48000020 +806B0008 800B000C +7C030214 7C1C0040 +4080000C 7C1C0378 +48000004 398C0001 +2C0C0005 4180FF60 +3D808001 618C5ACC +7D8903A6 4E800420 +60000000 00000000 +04015984 2C190007 +04015B94 2C1C0007 +04015914 83E20184 +C21A50AC 00000002 +806200D4 4E800020 +60000000 00000000 +C21A45BC 0000001D +7C0802A6 90010004 +9421FF00 BE810008 +3FE0803D 63FFACA4 +3D80801A 618C50AC +7D8903A6 4E800421 +7C7E1B78 7FFDFB78 +7FDCF378 889D0001 +2C040008 4182000C +3BBD0014 4BFFFFF0 +889C0001 2C040008 +4182000C 3B9C0018 +4BFFFFF0 807D0004 +907C0004 807D0008 +907C0008 807D000C +907C000C 807D0010 +907C0010 7FFDFB78 +7FDCF378 889D0001 +2C04000E 4182000C +3BBD0014 4BFFFFF0 +889C0001 2C04000E +4182000C 3B9C0018 +4BFFFFF0 807D0004 +907C0004 807D0008 +907C0008 807D000C +907C000C 807D0010 +907C0010 BA810008 +80010104 38210100 +7C0803A6 3BE00000 +60000000 00000000 +C21A4444 00000002 +81820164 7C1B6040 +60000000 00000000 +0401CEAC 80620164 +C21A4568 00000002 +81820164 7C006040 +60000000 00000000 +C21A43E0 00000002 +81820164 7C046040 +60000000 00000000 +C21A448C 00000002 +81820164 7C006040 +60000000 00000000 +C21A3F2C 00000002 +81820164 7C006040 +60000000 00000000 +041A4560 3BFF0018 +041A43D8 38630018 +041A4484 38630018 +041A3F24 3BFF0018 +C21A4D14 00000002 +81820168 7C006040 +60000000 00000000 +C21A50A0 00000002 +806200D8 4E800020 +60000000 00000000 +041A4D0C 38630014 +C21A43EC 00000046 +7C0802A6 90010004 +9421FF00 BE810008 +807E0014 2C030000 +418201EC 3D808033 +618C796C 7D8903A6 +4E800421 7C741B79 +418201D4 807E0014 +3D808001 618C63D8 +7D8903A6 4E800421 +7C7C1B78 80620184 +806300C0 3863001F +54630034 7C7B1B78 +387C001F 54630034 +7FBB1A14 38600063 +54630034 7C7D1A14 +80A20184 808500C0 +7C641850 906500C4 +38000000 900DAD28 +7E83A378 38800000 +7F65DB78 38DC001F +54C60034 38E00021 +39000001 3D208001 +6129615C 39400000 +3D808038 618CF6D4 +7D8903A6 4E800421 +3D808001 618C61A0 +7D8903A6 4E800421 +2C030000 4182FFEC +7FA3EB78 7F64DB78 +7F85E378 3D808001 +618C6A54 7D8903A6 +4E800421 7FA3EB78 +480000F5 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +7C7A1B79 418200F8 +7F43D378 3D80803D +618C7074 7D8903A6 +4E800421 38610080 +38800000 38A00014 +3D808000 618C3100 +7D8903A6 4E800421 +7F43D378 38810080 +48000051 80610080 +2C030000 41820008 +907E0010 80610084 +2C030000 41820008 +907E0004 80610088 +2C030000 41820008 +907E0008 807D0020 +809D0000 3D808032 +618C8F50 7D8903A6 +4E800421 48000070 +7C6C1B78 7C892378 +80EC000C 814C0000 +39000000 48000028 +1C680008 7D633A14 +806B0004 7C635214 +808B0000 1C840004 +7C64492E 48000004 +39080001 806C0010 +7C081800 4180FFD4 +4E800020 4E800021 +6D6A4675 6E637469 +6F6E0000 80620184 +38630010 38800000 +908300B4 BA810008 +80010104 38210100 +7C0803A6 38000000 +60000000 00000000 +C21A40C8 0000002B +7C0802A6 90010004 +9421FF00 BE810008 +807A0010 2C030000 +41820124 807A0010 +3D808001 618C6BE0 +7D8903A6 4E800421 +7C7D1B78 7FA3EB78 +480000F5 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +7C7E1B79 418200E8 +7FC3F378 3D80803D +618C7074 7D8903A6 +4E800421 38610080 +38800000 38A0000F +3D808000 618C3100 +7D8903A6 4E800421 +7FC3F378 38810080 +48000051 80610080 +2C030000 41820008 +907A0004 80610084 +2C030000 41820008 +907A0008 80610088 +2C030000 41820008 +907A000C 807D0020 +809D0000 3D808032 +618C8F50 7D8903A6 +4E800421 48000060 +7C6C1B78 7C892378 +80EC000C 814C0000 +39000000 48000028 +1C680008 7D633A14 +806B0004 7C635214 +808B0000 1C840004 +7C64492E 48000004 +39080001 806C0010 +7C081800 4180FFD4 +4E800020 4E800021 +6D6E4675 6E637469 +6F6E0000 BA810008 +80010104 38210100 +7C0803A6 7F23CB78 +60000000 00000000 +C23D709C 0000001E +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 7C9E2378 +7CBD2B78 7FE3FB78 +38810080 7FA5EB78 +38C00000 3D808001 +618C6C64 7D8903A6 +4E800421 7C7A1B78 +83210080 2C190000 +41820024 7F23CB78 +3D80803D 618C7074 +7D8903A6 4E800421 +7F23CB78 7FC4F378 +48000035 807A0020 +809A0000 3D808032 +618C8F50 7D8903A6 +4E800421 7F43D378 +BA810008 80010104 +38210100 7C0803A6 +4E800020 7C6C1B78 +7C892378 80EC000C +814C0000 39000000 +48000028 1C680008 +7D633A14 806B0004 +7C635214 808B0000 +1C840004 7C64492E +48000004 39080001 +806C0010 7C081800 +4180FFD4 4E800020 +60000000 00000000 +C23D7090 000000A4 +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 3FC0804A +63DE04F0 806DB8E0 +80630004 881E0000 +1C000014 7F830214 +837C0008 A06DB528 +2C030000 40810010 +3863FFFF B06DB528 +480004C0 38600004 +3D808022 618C9624 +7D8903A6 4E800421 +7C7D1B78 93BE000C +38600000 907E0008 +57A006F7 4182028C +3A800000 4800003C +7E83A378 3D80801A +618C36A0 7D8903A6 +4E800421 5460063F +4182001C 7E83A378 +3D808016 618C77E8 +7D8903A6 4E800421 +48000010 3A940001 +2C140004 4180FFC4 +38600001 3D808002 +618C4030 7D8903A6 +4E800421 38600005 +B06DB528 38600001 +987E0011 A07E0002 +1C630008 7F43DA14 +887A0000 2C030000 +41820010 2C030001 +418201D4 48000404 +806DB8E0 80630004 +881A0001 1C000014 +7F230214 887A0001 +2C030007 40820038 +81990010 2C0C0000 +418200AC 7D8903A6 +38600000 38800001 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +480003B0 887A0001 +2C030008 40820014 +818DB614 7D8903A6 +4E800421 48000394 +887A0001 2C030021 +40820030 38600000 +3D808024 618CCD64 +7D8903A6 4E800421 +7FE3FB78 3D808039 +618C0228 7D8903A6 +4E800421 4800035C +80790010 2C030000 +41820024 7C6903A6 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +48000330 887E0000 +987E0001 887A0001 +987E0000 3A800000 +806DB8E0 80630004 +881E0000 1C000014 +7C630214 8963000C +887E0000 7E84A378 +3D808022 618C9938 +7D8903A6 4E800421 +2C030000 4182000C +B29E0002 48000010 +3A940001 7C145800 +4180FFD0 38600001 +3D808022 618CB3A0 +7D8903A6 4E800421 +3D808039 618C0CD4 +7D8903A6 4E800421 +7FE3FB78 3D808039 +618C0228 7D8903A6 +4E800421 806DB8E0 +80630004 881E0000 +1C000014 7F830214 +38600000 38800001 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 3C80803D +60847090 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +808DC19C 8803000D +508026B6 9803000D +48000238 3D80801A +618C4B9C 7D8903A6 +4E800421 881A0001 +98030000 3D80801A +618C4B60 7D8903A6 +4E800421 4800020C +57A006B5 41820148 +38600000 3D808002 +618C4030 7D8903A6 +4E800421 887C000D +7C630774 2C03FFFF +40820030 3D80801A +618C4B9C 7D8903A6 +4E800421 38000000 +98030000 3D80801A +618C4B60 7D8903A6 +4E800421 480001B4 +38600000 987E0011 +887E0000 987E0001 +887C000D 987E0000 +39800000 893E0001 +806DB8E0 80630004 +881E0000 1C000014 +7C630214 8963000C +81430008 1C0C0008 +7C6A0214 88030000 +2C000000 40820018 +88030001 7C004800 +4082000C B19E0002 +48000010 398C0001 +7C0C5800 4180FFD0 +38600003 3D808022 +618CB3A0 7D8903A6 +4E800421 3D808039 +618C0CD4 7D8903A6 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +38600000 38800001 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 3C80803D +60847090 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +808DC19C 8803000D +508026B6 9803000D +480000C0 57A007FF +4182005C 38600002 +3D808002 618C4030 +7D8903A6 4E800421 +A29E0002 3A94FFFF +7E800734 2C00FFFF +4181000C 887C000C +3A83FFFF 887E0000 +7E84A378 3D808022 +618C9938 7D8903A6 +4E800421 2C030000 +4182FFCC B29E0002 +48000060 57A007BD +41820058 38600002 +3D808002 618C4030 +7D8903A6 4E800421 +A29E0002 3A940001 +889C000C 7C142000 +41800008 3A800000 +887E0000 7E84A378 +3D808022 618C9938 +7D8903A6 4E800421 +2C030000 4182FFD0 +B29E0002 48000004 +BA810008 80010104 +38210100 7C0803A6 +4E800020 00000000 +C23D7074 0000003C +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 83DF0008 +83BF0000 839F0004 +836200F8 807B0000 +2C03001E 4080013C +3B400000 833B0000 +3B1B0004 48000018 +80780000 7C03F800 +4182010C 3B5A0001 +3B180004 7C1AC800 +4180FFE8 807B0000 +1C630004 38BB0004 +7FE3292E 807B0000 +38630001 907B0000 +807C0000 5479463E +5463023E 7F63EA14 +807C0004 54604636 +2C000080 4182000C +7F43EA14 48000008 +835C0004 2C190001 +41820028 2C190004 +41820028 2C190006 +41820020 2C19000A +41820060 2C19001A +41820070 48000078 +935B0000 48000070 +57438FFF 4182001C +5743843E 38630001 +5466801E 7C66D050 +5465043E 7CDA2B78 +2C190004 41820014 +2C190006 41820004 +5743843E 4800000C +5743043E 48000004 +B07B0000 48000028 +7C7BD050 546301BA +809B0000 7C632378 +907B0000 48000010 +7C7BD050 907B0000 +48000004 3B9C0008 +3BDEFFFF 2C1E0000 +4181FF28 BA810008 +80010104 38210100 +7C0803A6 4E800020 +48000049 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +48000025 7C6802A6 +38800000 3CA0804D +60A53940 3D808038 +618C8220 7D8903A6 +4E800421 4E800021 +6D2D6578 00000000 +4E800021 6572726F +723A206F 76657220 +32302078 46756E63 +74696F6E 7320696E +64657865 640A0000 +60000000 00000000 +C23D7060 00000016 +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 7C9E2378 +83ADB8DC 2C1D0000 +41820078 83820148 +387CFFFA 7C1F1800 +41800028 387CFFFF +7C1F1800 4181001C +387CFFFA 7C63F850 +48000045 7C8802A6 +7C6320AE 48000018 +A07D0000 A09D0002 +7C84F1D6 7C632214 +7C63FA14 6C638000 +C822CA08 90610084 +3C604330 90610080 +C8410080 EC220828 +48000010 4E800021 +03020101 05060000 +BA810008 80010104 +38210100 7C0803A6 +4E800020 00000000 +C23D706C 0000000C +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +38800000 7FE5FB78 +3D808000 618C3100 +7D8903A6 4E800421 +7FC3F378 BA810008 +80010104 38210100 +7C0803A6 4E800020 +60000000 00000000 +0435E6E4 901F0070 +0435E6E0 3800FFFF +0435ECFC 901E0070 +0435ECE0 3800FFFF +04360A38 80160070 +04360A3C 2C00FFFF +0435E918 901F0070 +C21A4C98 00000011 +818200F8 816DC018 +39400000 38E00000 +812C0000 390C0004 +48000028 80680000 +7C035800 40800014 +38AC0004 1C870004 +7C64292E 38E70001 +394A0001 39080004 +7C0A4800 4180FFD8 +90EC0000 818200F8 +386C0004 1C870004 +7C632214 38800000 +38A00078 1CC70004 +7CA62850 3D808000 +618C3100 7D8903A6 +4E800421 806DB08C +60000000 00000000 +C2228C10 00000003 +60000000 906DAFF8 +908DAFF4 90ADAFF0 +90CDAFEC 00000000 +04228BFC 60000000 +C2228AF8 00000004 +60000000 906DAFEC +3860FFFF 906DAFF8 +906DAFF4 906DAFF0 +60000000 00000000 +C2394BD4 0000003E +7C0802A6 90010004 +9421FF00 BE810008 +838200F8 3B600000 +835C0000 3B3C0004 +48000088 83190000 +80780000 809E0198 +7C041800 4180006C +80B80014 7C632A14 +7C041800 4181005C +3AE00000 82D80018 +8078001C 1C97000C +7D832214 80780000 +808C0000 7C632214 +809E0198 7C041800 +41800024 80780000 +808C0004 7C632214 +809E0198 7C041800 +4181000C 83AC0008 +480000D0 3AF70001 +7C17B000 4BFFFFB4 +3B7B0001 3B390004 +7C1BD000 4180FF78 +806DAFFC 2C030000 +418200A0 3B800000 +3B000000 83630000 +83430004 7F630E70 +7F230194 1C79000C +7D83D214 806C0000 +809E0198 7C041800 +40800028 7F3BCB78 +7C7CC850 2C030001 +40820008 3B000001 +7C630E70 7C630194 +7F23E214 4BFFFFC8 +806C0004 7C041800 +41800030 2C180001 +41820038 7F3CCB78 +7C7CD850 2C030001 +40820008 3B000001 +7C630E70 7C630194 +7F23E214 4BFFFF90 +83AC0008 2C1D0000 +41820008 4800000C +48000075 7FA802A6 +7FA3EB78 3D808032 +618C5B04 7D8903A6 +4E800421 2C03002D +40810024 38610080 +7FA4EB78 38A0002D +3D808000 618C31F4 +7D8903A6 4E800421 +3BA10080 48000021 +7C6802A6 7FA4EB78 +3D808034 618C56A8 +7D8903A6 4E800421 +4800001C 4E800021 +53796D62 6F6C3A20 +25730A00 4E800021 +4E2F4100 BA810008 +80010104 38210100 +7C0803A6 5760018D +60000000 00000000 +C2397838 00000037 +7C0802A6 90010004 +9421FF00 BE810008 +480000DD 7C6802A6 +3D808033 618C796C +7D8903A6 4E800421 +2C03FFFF 4182009C +480000BD 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +7C7F1B78 3D808037 +618C5404 7D8903A6 +4E800421 2C03FFFF +41820080 3D808034 +618C4168 7D8903A6 +4E800421 389F0044 +7C041800 40800064 +80620184 80630028 +2C030000 40820054 +4800005D 7C6802A6 +3D808001 618C6BE0 +7D8903A6 4E800421 +48000055 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +906DAFFC 48000094 +48000045 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +38600000 906DAFFC +48000070 4E800021 +4D784462 2E646174 +00000000 4E800021 +6D657844 65627567 +00000000 4E800021 +5761726E 696E673A +204D7844 622E6461 +74206E6F 7420666F +756E6420 6F6E2064 +6973630A 646F6C20 +73796D62 6F6C7320 +77696C6C 206E6F74 +20626520 6964656E +74696669 65642E00 +806DAFEC 38800010 +3D808039 618C4A48 +7D8903A6 4E800421 +806DAFF8 2C03FFFF +41820024 806DAFF8 +808DAFF4 80ADAFF0 +80CDAFEC 3D808039 +618C4B18 7D8903A6 +4E800421 BA810008 +80010104 38210100 +7C0803A6 38600000 +60000000 00000000 +C2394A74 0000004E +7C0802A6 90010004 +9421FF00 BE810008 +48000209 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +3BE00000 83DC0004 +480001B8 838200F8 +3B600000 835C0000 +3B3C0004 48000088 +83190000 80780000 +809E0004 7C041800 +4180006C 80B80014 +7C632A14 7C041800 +4181005C 3AE00000 +82D80018 8078001C +1C97000C 7D832214 +80780000 808C0000 +7C632214 809E0004 +7C041800 41800024 +80780000 808C0004 +7C632214 809E0004 +7C041800 4181000C +83AC0008 480000D0 +3AF70001 7C17B000 +4BFFFFB4 3B7B0001 +3B390004 7C1BD000 +4180FF78 806DAFFC +2C030000 418200A0 +3B800000 3B000000 +83630000 83430004 +7F630E70 7F230194 +1C79000C 7D83D214 +806C0000 809E0004 +7C041800 40800028 +7F3BCB78 7C7CC850 +2C030001 40820008 +3B000001 7C630E70 +7C630194 7F23E214 +4BFFFFC8 806C0004 +7C041800 41800030 +2C180001 41820038 +7F3CCB78 7C7CD850 +2C030001 40820008 +3B000001 7C630E70 +7C630194 7F23E214 +4BFFFF90 83AC0008 +2C1D0000 41820008 +4800000C 480000C5 +7FA802A6 7FA3EB78 +3D808032 618C5B04 +7D8903A6 4E800421 +2C03002A 40810024 +38610080 7FA4EB78 +38A0002A 3D808000 +618C31F4 7D8903A6 +4E800421 3BA10080 +48000071 7C6802A6 +809E0004 7FA5EB78 +3D808034 618C56A8 +7D8903A6 4E800421 +83DE0000 3BFF0001 +2C1F000A 4080005C +2C1EFFFF 4082FE40 +48000050 48000001 +7C6802A6 3D808034 +618C56A8 7D8903A6 +4E800421 48000000 +4E800021 204C5220 +53617665 3A202053 +796D626F 6C0A0000 +4E800021 25583A20 +2025730A 00000000 +4E800021 4E2F4100 +BA810008 80010104 +38210100 7C0803A6 +3D808039 618C4B04 +7D8903A6 4E800420 +60000000 00000000 C20AC5B8 00000002 #Common/NanaDeterminism/NanaDeterminism.asm 7C7D1B78 3BC00000 60000000 00000000 @@ -5519,7 +6750,7 @@ C21D24FC 00000018 #Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor. C2F00000 42F00000 42A00000 C1A00000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 4BFFFFD9 7FA802A6 807E002C A86300EE 3D808003 @@ -5536,9 +6767,79 @@ FC020840 41810018 C03D000C FC020840 4180000C 38600001 48000008 38600000 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 +C20DB880 00000003 #External/PreventWobbling/Init Wobble Count Air.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C20DBBD4 00000003 #External/PreventWobbling/Init Wobble Count Ground.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C208F090 0000003D #External/PreventWobbling/Wobble Check.asm +807B0010 2C0300DF +418001D8 2C0300E4 +418101D0 807B1A58 +2C030000 418201C4 +8083002C 88842222 +5484077B 418201B4 +809B1868 7C032000 +41820034 A0A40000 +2C050006 4082019C +80A4002C 80850518 +7C032000 4082018C +A0650DA8 A09B2386 +7C032000 4182017C +48000018 80A3002C +A0652088 A09B2386 +7C032000 41820164 +B07B2386 887B2384 +38630001 987B2384 +3D808016 618CB168 +7D8903A6 4E800421 +2C030000 4082013C +887B2384 2C030003 +40810130 7C0802A6 +90010004 9421FF20 +BE8100B0 829B1A58 +7E83A378 3D80800D +618CA698 7D8903A6 +4E800421 8074002C +8863000C 38800001 +3D808003 618C418C +7D8903A6 4E800421 +2C030000 418200C4 +7C751B78 8095002C +8804221F 54000673 +408200B0 88042219 +5400077B 408200A4 +88042071 5400E73E +2C00000D 41820094 +80A400E0 2C050000 +4082001C 38800000 +3D80800D 618CA698 +7D8903A6 4E800421 +48000070 8075002C +3D808007 618CD5D4 +7D8903A6 4E800421 +8075002C 80ADAEB4 +C0050374 C023002C +FC200850 EC000072 +D0030080 C0050378 +D0030084 C0029700 +D0032340 C0229700 +C0429704 FC600890 +7EA3AB78 388000E6 +38A00000 38C00000 +3D808006 618C93AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808008 618CF0C8 +7D8903A6 4E800420 +801B0010 00000000 $Recommended: Normal Lag Reduction [Hannes Mann] *Reduces input lag @@ -5555,38 +6856,38 @@ C2376A24 00000026 #Common/UseInGameDelay/ApplyInGameDelay.asm 7D8903A6 4E800421 2C030002 41820014 2C030003 4182000C -2C030004 408200F8 +2C030004 408200F4 3C608048 88639D30 -2C030008 418200E8 +2C030008 418200E4 3C608047 60639D64 80630000 2C030000 -408200D4 7C0802A6 -90010004 9421FF50 -BE810008 3C60802F -6063666C 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 -83E30008 887F0000 -2C030000 40810080 -38610038 388100DC -38A00030 3D808000 -618C31F4 7D8903A6 -4E800421 887F0001 -1C630030 3BC30002 -386100DC 7C9FF214 -38A00030 3D808000 -618C31F4 7D8903A6 -4E800421 7C7FF214 -38810038 38A00030 +408200D0 7C0802A6 +90010004 9421FF20 +BE8100B0 83A10000 +3C60802F 6063666C +80830000 5485302E +38800040 7C8523D6 +7C632214 83E30008 +887F0000 2C030000 +40810080 38610008 +389D002C 38A00030 3D808000 618C31F4 7D8903A6 4E800421 -889F0000 887F0001 -38630001 7C032000 -41800008 38600000 -987F0001 BA810008 -800100B4 382100B0 -7C0803A6 00000000 +887F0001 1C630030 +3BC30002 387D002C +7C9FF214 38A00030 +3D808000 618C31F4 +7D8903A6 4E800421 +7C7FF214 38810008 +38A00030 3D808000 +618C31F4 7D8903A6 +4E800421 889F0000 +887F0001 38630001 +7C032000 41800008 +38600000 987F0001 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 C22F666C 0000005C #Common/UseInGameDelay/InitializeInGameDelay.asm 4800007C 4E800021 80000000 4E800021 @@ -5595,19 +6896,19 @@ C22F666C 0000005C #Common/UseInGameDelay/InitializeInGameDelay.asm 3EA8F5C3 44656C61 793A2025 64660000 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 7C7F1B78 +90010004 9421FF20 +BE8100B0 7C7F1B78 880DB6CC 2C000001 41820018 7FE3FB78 3D808039 618C10D8 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C7F1B78 3C608048 88639D30 2C030008 4182024C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 386002D2 3D808037 618CF1E4 7D8903A6 4E800421 7C7F1B78 @@ -5677,12 +6978,12 @@ C05D000C 7F83E378 C03D0010 C05D0010 3D80803A 618C7548 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 7FE3FB78 00000000 C200561C 00000013 #Common/GetCommonMinorID/GetCommonMinorID.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3CA08048 8BC59D30 8BE59D33 3FA0803D 63BDACA4 38800000 @@ -5696,11 +6997,27 @@ C200561C 00000013 #Common/GetCommonMinorID/GetCommonMinorID.asm 7C06F800 4082000C 8865000C 48000010 38840001 2C0600FF -4082FFDC BA810008 -800100B4 382100B0 +4082FFDC BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 +$Recommended: Lagless FoD [Achilles, Myougi, Dan Salvato] +*Disables particles and reflection on FoD to improve performance +C21CBB90 00000005 #Lagless FoD +9421FFF8 3CC0804A +80C6ED78 3CA00002 +60A5AE44 7CA53050 +88C50000 60C60004 +98C50000 00000000 +041CC8AC FC000028 +041CBE9C 60000000 +041CBEF0 60000000 +041CBF54 60000000 +04390838 60000000 +041CD250 60000000 +041CCDCC 480000B4 + $Optional: Widescreen 16:9 [Dan Salvato, mirrorbender, Achilles1515, UnclePunch] *Set Aspect Ratio to "Force 16:9" in Graphics for 16:9 monitors ---------------------- *Will not cause desyncs when playing online diff --git a/Output/Netplay/GALJ01r2.ini b/Output/Netplay/GALJ01r2.ini index df61604f..4d36ac78 100644 --- a/Output/Netplay/GALJ01r2.ini +++ b/Output/Netplay/GALJ01r2.ini @@ -12,6 +12,7 @@ $Required: Slippi Recording $Required: Slippi Online $Recommended: Normal Lag Reduction $Recommended: Apply Delay to all In-Game Scenes +$Recommended: Lagless FoD [Gecko] $Required: General Codes [Achilles, Dan Salvato, Magus, UnclePunch, tauKhan, Ptomerty, Cilan, Zauron, Datel, donny2112, Jorgasms, strikebowler585, Myougi] @@ -57,13 +58,18 @@ C21A5B14 0000000A #External/Salty Runback/Salty Runback.asm 0416B480 60000000 #C-Stick in Single Player [Zauron] 0422D638 38000006 #Debug Menu [Magus, donny2112] 041B0A14 38600002 #Exiting Debug Menu Returns to CSS [Achilles] -C216E510 00000093 #External/NeutralSpawn/NeutralSpawn.asm +C216E510 00000098 #External/NeutralSpawn/NeutralSpawn.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808016 618CB41C 7D8903A6 4E800421 -2C030000 40820458 -2C1C0005 40800450 +2C030000 40820480 +2C1C0005 40800478 +3C608048 80639D30 +5463443E 2C03021C +41820464 3C608048 +80639D30 5463443E +2C03010F 41820450 887F24D0 2C030001 41820054 3B200000 3B400000 7F43D378 @@ -110,7 +116,7 @@ C216E510 00000093 #External/NeutralSpawn/NeutralSpawn.asm 7F24CB78 88BF24D0 48000009 480002E8 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7CBD2B78 48000121 7F8802A6 80CD9348 @@ -146,8 +152,8 @@ C022A8F8 48000008 C022A8CC 7FE3FB78 3D808003 618C3094 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 00000020 C2700000 41200000 42700000 @@ -201,8 +207,8 @@ C2200000 40A00000 42200000 42000000 42200000 40A00000 FFFFFFFF 4E800021 -00030102 BA810008 -800100B4 382100B0 +00030102 BA8100B0 +800100E4 382100E0 7C0803A6 881F24D0 60000000 00000000 042641B0 38000001 #Faster CSS Load [UnclePunch] @@ -226,116 +232,252 @@ FC0F0840 4081000C FC0F8840 41800010 C21F0318 FE0F802A D21F0318 00000000 -C20C9A44 0000002B #External/UCF 0.8/Logic/UCF DB.asm -D01F002C 7C0802A6 -90010004 9421FF50 -BE810008 48000121 -7FC802A6 C03F0894 -C05E0000 FC011040 -40820118 808DAEB4 -C03F0620 FC200A10 -C044003C FC011040 -41800100 887F0670 -2C030002 408000F4 -887F221F 54600739 -408200E8 3C60804C -60631F78 8BA30001 -387DFFFE 889F0618 -4800008D 7C7C1B78 -7FA3EB78 889F0618 -4800007D 7C7C1850 -7C6319D6 2C0315F9 -408100B0 38000001 -901F2358 901F2340 -809F0004 2C04000A -40A20098 887F000C -38800001 3D808003 -618C418C 7D8903A6 +C20D65EC 00000010 #External/UCF 0.84/UCF/UCF DBOOC SquatRv Fix.asm +4800003D 3F170A3D +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0440004 +C0640008 EC2118B8 +FC20081E D824000C +80C40010 38C60002 +4E800020 C0040094 +7C8802A6 88C50670 +2C060001 4080002C +C0250620 4BFFFFC5 +7C0631D6 C0250624 +4BFFFFB9 7CC631D6 +7C003214 2C001900 +40810008 C0040000 +60000000 00000000 +C20C9A44 00000020 #External/UCF 0.84/UCF/UCF Dashback.asm +893F221F D01F002C +71290008 408200F0 +815F0894 3D204000 +7C0A4800 408200E0 +C19F0620 812DAEB4 +EC000332 C189003C +FC006000 418000C8 +893F0670 28090001 +418100BC 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +7D290774 7D293850 +7D2949D6 2C0915F9 +40810054 9421FFF8 +39200001 38800001 +913F2340 913F2358 +3D208003 3929418C +887F000C 7D2903A6 4E800421 2C030000 -41820078 8083002C -80841ECC C03F002C -D0240018 C05E0004 -FC011040 4181000C -38600080 48000008 -3860007F 98640006 -48000048 7C852378 -3863FFFF 2C030000 -40800008 38630005 -3C808046 6084B108 -1C630030 7C841A14 -1C65000C 7C841A14 -88640002 7C630774 -4E800020 4E800021 -40000000 00000000 -BA810008 800100B4 -382100B0 7C0803A6 +41820020 8123002C +81491ECC 813F002C +912A0018 55290FFE +3929007F 992A0006 +38210008 00000000 +C206B460 00000054 #External/UCF 0.84/UCF/UCF Pad Buffer + 1.0 Cardinals.asm +480000B1 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 BF1C0000 +38D1B717 42A00000 +3923004F 5529063E +2809009E 4081002C +38840006 5484063E +2804000C 4D810020 +54630000 39200000 +6C633F80 91250004 +90650000 4E800020 +3924004F 5529063E +2809009E 4C810020 +38630006 5463063E +2803000C 4D810020 +54840000 39200000 +6C843F80 91250000 +90850004 4E800020 +9421FFC0 BF210024 +93810014 7F8802A6 +3D20800A 7FE3FB78 +39292040 7D2903A6 +4E800421 2C030000 +408201A0 3D20804C +8BDF0618 39291F78 +7FFAFB78 89090001 +2C080000 3948FFFF +40A20008 39400004 +1D4A0030 81290008 +1F7E000C 3BBC0000 +7D295214 1FDE0006 +7D09DA14 7D49D82E +81280008 80E80004 +7D1DDA14 91210010 +89280008 91410008 +39290001 90E1000C +552907BE 99280008 +5539063E 7D3E4A14 +5529083C 7D5D4B2E +813A0004 2C090013 +40A20010 813A0010 +2C09015D 41A20034 +8881000B 38BA0620 +8861000A 7C840774 +7C630774 4BFFFEBD +8881000D 8861000C +38BA0638 7C840774 +7C630774 4BFFFEA5 +C01A0624 39400000 +C19C0030 FC006000 +418100C0 C19A0620 +FC000210 C15C0038 +39210018 FD806210 +C17C0034 EC005AB8 +ED8C5AB8 FC00001E +FD80601E 7D804FAE +3921001C 81010018 +7C004FAE 39080002 +8121001C 7D0841D6 +39290002 7D2949D6 +7D294214 2C091900 +40810068 7D3DDA14 +89490009 5549063E +2C090000 40820050 +893A0671 28090001 +41A10048 3939FFFE +7D1ECA14 552907BE +5508083C 7FDE4A14 +7D1D4214 57DE083C +89080001 7FDDF214 +893E0001 7D080774 +7D290774 7D294050 +7D2949D6 2C090790 +40810008 394A0001 +7FBDDA14 995D0009 +887F0678 83810014 +83210024 83410028 +8361002C 83A10034 +83C10038 38210040 60000000 00000000 -C20998A4 00000026 #External/UCF 0.8/Logic/UCF SD.asm -7C0802A6 90010004 -9421FF50 BE810008 -7C7E1B78 83FE002C -480000DD 7FA802A6 -C03F063C 806DAEB4 -C0030314 FC010040 -408100E4 C03F0620 -48000071 D0210090 -C03F0624 48000065 -C0410090 EC4200B2 -EC210072 EC21102A -C05D000C FC011040 -418000B4 889F0670 -2C040003 408100A8 -C01D0010 C03F0624 -FC000840 40800098 -BA810008 800100B4 -382100B0 7C0803A6 -8061001C 83E10014 -38210018 38630008 -7C6803A6 4E800020 -FC000A10 C03D0000 -EC000072 C03D0004 -EC000828 FC00001E -D8010080 80610084 -38630002 3C004330 -C85D0014 6C638000 -90010080 90610084 -C8210080 EC011028 -C03D0000 EC200824 -4E800020 4E800021 -42A00000 37270000 -43300000 3F800000 -BF4CCCCD 43300000 -80000000 7FC3F378 -7FE4FB78 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C20908F4 00000017 #External/UCF 0.8/Logic/UCF Tumble.asm -7C0802A6 90010004 -9421FF50 BE810008 +C208E54C 0000001D #External/UCF 0.84/UCF/UCF SDI.asm +7C002800 418000DC +89230673 28090001 +40810014 89230674 +3D406000 28090001 +418100BC C183062C +3D406000 C0030628 +ED8C0332 EC00603A +C18404B0 ED8C0332 +FC0C0000 40810098 +3D008007 89430618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +38E8FFFE 7D0A4214 +54E707BE 5508083C +7D4A3A14 7CC94214 +554A083C 7D0940AE +7CE95214 7D2950AE +7D080774 89470001 +7D290774 7D294050 +89060001 7D4A0774 +7D2949D6 7D080774 +7D4A4050 7D4A51D6 +7D295214 3D406000 +2C090F04 40810008 +3D408000 7D580120 +60000000 00000000 +C209A0B8 0000000A #External/UCF 0.84/UCF/UCF Shield Drop Extended.asm +4C401382 4182003C +3D208007 89040618 +3929AD10 81490750 +1D08000C 39290754 +554A3032 7D4A3670 +7D295214 7D294214 +89290009 28090001 +4081000C 4C421242 +4800000C 4C421182 +60000000 00000000 +C20998A4 00000019 #External/UCF 0.84/UCF/UCF Shield Drop.asm +4800003D BF4CCCCD +42A00000 38D1B717 +00000000 00000000 +FC200A10 C0460004 +C0660008 EC2118B8 +FC20081E D826000C +80E60010 38E70002 +4E800020 8083002C +7CC802A6 80ADAEB4 +C004063C C0250314 +FC000840 40810070 +88040670 80E50320 +7C003800 41800060 +C0240624 C0060000 +FC010040 40810050 +8004083C 2C00FFFF +41820044 80040840 +540005EF 41820038 +4BFFFF89 7C0739D6 +C0240620 4BFFFF7D +7CE739D6 7C003A14 +2C001900 40810018 +80E1001C 38210018 +38E70008 7CE803A6 +4E800020 00000000 +C2093294 00000014 #External/UCF 0.84/UCF/UCF Shield SDI.asm +7C030000 41800094 +89240673 3CC06000 +28090001 41810080 +C1840628 C00504B0 +FC0C0000 40800070 +3D008007 89440618 +3908AD10 85280750 +55293032 7D293670 +39290004 7D294214 +1D0A000C 1D4A0006 +7D094214 89080008 +7CEA4214 3908FFFE +550807BE 54E7083C +7D4A4214 7CE938AE +554A083C 7D2950AE +7CE70774 7D290774 +7D293850 7D2949D6 +2C090F04 40810008 +3CC08000 7CD80120 +60000000 00000000 +C20908F4 00000013 #External/UCF 0.84/UCF/UCF Tumble.asm 2C030001 4082008C -C03F0628 FC200A10 -806DAEB4 C0430210 -FC011040 40800074 -3F80804C 639C1F78 -8BDC0001 387EFFFE -889F0618 48000029 -7C7D1B78 7FC3F378 -889F0618 48000019 -7C7D1850 7C6319D6 -388015F9 7C041800 -48000038 7C852378 -3863FFFF 2C030000 -40800008 38630005 -809C0008 1C630030 -7C841A14 1C65000C -7C841A14 88640002 -7C630774 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +C19F0628 3D406000 +FD806210 FC0C0000 +40800074 3D008007 +895F0618 3908AD10 +85280750 55293032 +7D293670 39290004 +7D294214 1D0A000C +1D4A0006 7D094214 +89080008 7CEA4214 +3908FFFE 550807BE +54E7083C 7D4A4214 +7CE938AE 554A083C +7D2950AE 7CE70774 +3D406000 7D290774 +7D293850 7D2949D6 +2C0915F9 40810008 +3D408000 7D580120 60000000 00000000 -C22662D0 0000001A #External/UCF 0.8/Indicator/UCF Text.asm +C22662D0 0000001B #External/UCF 0.84/Indicator/UCF Text.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 48000089 7FC802A6 38600000 38800000 3D80803A 618C6754 @@ -352,14 +494,15 @@ C05E0004 3D80803A 7FE3FB78 C03E0008 C05E0008 3D80803A 618C7548 7D8903A6 -4E800421 48000024 +4E800421 48000028 4E800021 42180000 C3898000 3EE66666 3DCCCCCD 4E800021 -55434620 302E3800 -BA810008 800100B4 -382100B0 7C0803A6 -38980000 00000000 +55434620 302E3834 +00000000 BA8100B0 +800100E4 382100E0 +7C0803A6 38980000 +60000000 00000000 C226325C 00000008 #External/DPad Down at CSS for Random Stage/DPad Down at CSS for Random Stage.asm 3C808045 6084BF17 54E0077B 4182001C @@ -369,19 +512,6 @@ C226325C 00000008 #External/DPad Down at CSS for Random Stage/DPad Down at CSS f 54E004E7 4182000C 38600000 98640000 54E004E7 00000000 -C21CBB90 00000005 #Lagless FoD [Achilles, Myougi, Dan Salvato] -9421FFF8 3CC0804A -80C6ED78 3CA00002 -60A5AE44 7CA53050 -88C50000 60C60004 -98C50000 00000000 -041CC8AC FC000028 -041CBE9C 60000000 -041CBEF0 60000000 -041CBF54 60000000 -04390838 60000000 -041CD250 60000000 -041CCDCC 480000B4 041C26B0 38000032 #Random Stage Music [UnclePunch] C215ECEC 0000000C #Random CSS Music v3 [UnclePunch] 38600003 3DC08038 @@ -447,8 +577,8 @@ C2265220 00000028 #Common/Winners Names are Gold on CSS/Change Name Color.asm 3D80803A 618C74F0 7D8903A6 4E800421 48000100 7C0802A6 -90010004 9421FF50 -BE810008 7C7D1B78 +90010004 9421FF20 +BE8100B0 7C7D1B78 3FE08047 63FF9DA4 1FDD00A8 7FDEFA14 887F0004 2C030000 @@ -475,8 +605,8 @@ BE810008 7C7D1B78 887E005D 2C030000 41820010 48000004 38600000 48000008 -38600001 BA810008 -800100B4 382100B0 +38600001 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 880DB655 00000000 C216EA30 00000004 #Common/Winners Names are Gold on CSS/Remember Who LRA Started.asm @@ -501,7 +631,7 @@ C213C388 0000000A #Common/CostumeBoundCheck/PuffCostume.asm 809C002C 00000000 C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3BE00000 7FE3FB78 3D808003 618C241C 7D8903A6 4E800421 @@ -553,18 +683,18 @@ C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 4E800421 3B7B0001 2C1B0006 4180FF68 3BFF0001 2C1F0006 -4180FEF4 BA810008 -800100B4 382100B0 +4180FEF4 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -$Required: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337] +$Required: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337, Krohnos] *Saves replays, Slippi device must be in Slot B. *To disable saving replays, visit the Slippi settings in Config > GameCube 040679BC 38802600 #Recording/ExtendPlayerBlock.asm C23219EC 0000001D #Recording/FlushFrameBuffer.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 2C030000 418200A8 @@ -576,11 +706,11 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 3C608048 80639D30 5463443E 2C030208 806DB654 4082003C -80ADB61C 8885000D +80ADB61C 88850010 2C040000 4082002C -8885000C 2C040000 -40820020 808507B3 -3884FF85 80E507BC +8885000F 2C040000 +40820020 80850909 +3884FF85 80E50916 7C872050 7C041800 40800008 7C832378 907C0005 3BBD0009 @@ -588,52 +718,72 @@ C23219EC 0000001D #Recording/FlushFrameBuffer.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 38600000 -906DB650 BA810008 -800100B4 382100B0 +906DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C216D884 0000001C #Recording/SendGameEnd.asm +C216D884 00000030 #Recording/SendGameEnd.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 418200A0 +2C030000 41820144 3F208046 6339B6A0 8B590008 2C1A0000 -4182008C 830DB64C +41820130 830DB64C 88780004 2C030000 -4082007C 3C608048 +40820120 3C608048 80639D30 5463443E 2C030208 4082001C 2C1A0002 40820014 -806DB61C 8863000C -2C030000 41820050 +806DB61C 8863000F +2C030000 418200F4 83B80000 38600039 987D0000 9B5D0001 2C1A0007 4082000C 88790001 48000008 3860FFFF 987D0002 -7FA3EB78 38800003 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 38600001 -98780004 BA810008 -800100B4 382100B0 -7C0803A6 819F2514 -60000000 00000000 -C216E74C 000000E9 #Recording/SendGameInfo.asm +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 0000010A #Recording/SendGameInfo.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 4182070C +2C030000 41820814 38600005 3D808037 618CF1E4 7D8903A6 4E800421 7C7B1B78 936DB64C 38800005 3D808000 618CC160 7D8903A6 4E800421 -38600702 3D808037 +38600780 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DB0000 38600000 @@ -645,17 +795,17 @@ C216E74C 000000E9 #Recording/SendGameInfo.asm 7C7C1B78 38600035 987E0000 3860001C 987E0001 38600036 -987E0002 38600248 +987E0002 386002F8 B07E0003 38600037 -987E0005 3860003F +987E0005 38600042 B07E0006 38600038 -987E0008 3860004C +987E0008 38600054 B07E0009 38600039 -987E000B 38600002 +987E000B 38600006 B07E000C 3860003A -987E000E 38600008 +987E000E 3860000C B07E000F 3860003B -987E0011 3860002A +987E0011 3860002C B07E0012 3860003C 987E0014 38600008 B07E0015 3860003D @@ -663,7 +813,7 @@ B07E0015 3860003D 38600010 987E001A 38600204 B07E001B 38600036 987E001D -3C600309 60630100 +3C600311 60630000 907E001E 387E0022 7FE4FB78 38A00138 3D808000 618C31F4 @@ -721,93 +871,125 @@ B07E0015 3860003D 8862F23C 987E01BF 3C608048 80639D30 5463443E B07E01C0 -3C608048 80639D30 -5463443E 2C030208 -4082011C 38600000 -3D808000 618C5610 +3B200000 3C608048 +80639D30 5463443E +2C030208 4082017C +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 -7C791B78 3A800000 -3ABF0060 3AFE01C2 -3B590034 1C74001F +3A940001 2C140004 +4180FFA0 3A800000 +3ABF0060 3AFE023E +3B5900CF 1C74000A 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 40820028 -1C74001F 7C83D214 -7F03C378 38A0001F +1C74000A 7C83D214 +7F03C378 38A0000A 3D808000 618C31F4 7D8903A6 4E800421 4800001C 7F03C378 -3880001F 3D808000 +3880000A 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 4180FFA0 3A800000 3ABF0060 -3AFE023E 3B5900EF -1C74000A 7F03BA14 +3AFE0266 3B5900F7 +1C74001D 7F03BA14 1ED40024 7ED6AA14 88760001 2C030000 -40820028 1C74000A +40820028 1C74001D 7C83D214 7F03C378 -38A0000A 3D808000 +38A0001D 3D808000 618C31F4 7D8903A6 4E800421 4800001C -7F03C378 3880000A +7F03C378 3880001D 3D808000 618CC160 7D8903A6 4E800421 3A940001 2C140004 -4180FFA0 7F23CB78 -3D808037 618CF1B0 +4180FFA0 4800001C +387E01C2 38800118 +3D808000 618CC160 7D8903A6 4E800421 -4800001C 387E01C2 -388000A4 3D808000 -618CC160 7D8903A6 -4E800421 7FC3F378 -38800266 38A00001 -3D808000 618C55F0 +3D808000 618CADF4 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 +987E02DA 2C190000 +41820044 387E02DB +38990394 38A00033 +3D808000 618C31F4 7D8903A6 4E800421 -3AD60200 7C16E000 -4180FFA4 7EA3AB78 +3C60803D 6063AD40 +80630000 81830088 +A06C0001 907E030E +886C0006 907E0312 +4800001C 387E02DB +3880003B 3D808000 +618CC160 7D8903A6 +4E800421 2C190000 +41820018 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -38600004 38800007 -38A00000 3D808039 -618C01F0 7D8903A6 -4E800421 48000021 -7C8802A6 38A00000 -3D808038 618CFD54 +7FC3F378 38800316 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 38600205 +3D808037 618CF1E4 7D8903A6 4E800421 -48000064 4E800021 -7C0802A6 90010004 -9421FF50 BE810008 -806DB64C 83A30000 -838DB650 7FBDE214 -3860003A 987D0000 -806DB654 907D0001 -3C60804D 80635F90 -907D0005 838DB650 -3B9C0009 938DB650 -BA810008 800100B4 -382100B0 7C0803A6 +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 @@ -815,16 +997,16 @@ BA810008 800100B4 48000021 7C8802A6 38A0000F 3D808038 618CFD54 7D8903A6 -4E800421 48000124 +4E800421 4800012C 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C +90010004 9421FF20 +BE8100B0 806DB64C 83E30000 83CDB650 7FFFF214 3B600000 806DC18C 83A30024 -2C1D0000 418200D8 +2C1D0000 418200E0 3B7B0001 2C1B000F -418100CC 839D002C +418100D4 839D002C 3860003B 987F0000 806DB654 907F0001 807C0010 B07F0005 @@ -846,23 +1028,24 @@ BE810008 806DB64C 2C030000 4182000C 8863000C 48000008 3860FFFF 987F002A -83CDB650 3BDE002B -93CDB650 3BFF002B +A07C0DA8 B07F002B +83CDB650 3BDE002D +93CDB650 3BFF002D 83BD0008 2C1D0000 -4082FF30 BA810008 -800100B4 382100B0 +4082FF28 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3C608017 00000000 -C206DA34 00000035 #Recording/SendGamePostFrame.asm +C206DA34 00000038 #Recording/SendGamePostFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820168 +2C030000 41820180 887F221F 546306F7 -4082015C 8B7F000C +40820174 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600038 987D0000 @@ -904,17 +1087,20 @@ B07D0030 887F1968 807F0090 907D0041 807F00EC 907D0045 807F195C 907D0049 -838DB650 3B9C004D -938DB650 BA810008 -800100B4 382100B0 +807F0014 907D004D +A07F18EC B07D0051 +A07F2088 B07D0053 +838DB650 3B9C0055 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -C206B0DC 0000002B #Recording/SendGamePreFrame.asm +C206B0E0 0000002E #Recording/SendGamePreFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C5604 7D8903A6 4E800421 -2C030000 41820118 +2C030000 41820130 8B7F000C 806DB64C 83A30000 838DB650 7FBDE214 38600037 @@ -945,19 +1131,25 @@ B07D0031 80640030 3884FFFF 2C040000 40A00008 38840005 1C840030 7C632214 -1C9B000C 7C632214 -88630002 987D003B +1C9B000C 7C832214 +88640002 987D003B +88640003 987D0040 +88640004 987D0041 +88640005 987D0042 807F1830 907D003C -838DB650 3B9C0040 -938DB650 BA810008 -800100B4 382100B0 +838DB650 3B9C0043 +938DB650 BA8100B0 +800100E4 382100E0 7C0803A6 881F2219 -60000000 00000000 -C2005604 00000008 #Recording/ShouldRecord.asm +807F065C 00000000 +C2005604 0000000B #Recording/ShouldRecord.asm 3C608048 80639D30 5463443E 2C030202 -4182001C 2C030302 -41820014 2C030208 +41820034 2C030302 +4182002C 2C030208 +41820024 2C03010F +4182001C 2C030120 +41820014 2C03010E 4182000C 38600000 4800000C 38600001 48000004 4E800020 @@ -971,9 +1163,14 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 3BE00000 887E221F 5460EFFF 41820038 887E000C @@ -983,8 +1180,8 @@ C20055F8 0000000F #Common/GetIsFollower.asm 1C030003 7C640214 88030002 2C000000 40820008 3BE00001 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C216D294 00000006 #Common/IncrementFrameIndex.asm @@ -1059,38 +1256,42 @@ C216EBAC 0000000C #Common/CSS KO Stars/Asign KO Stars Upon Exiting Dairantou.asm $Required: Slippi Online [Fizzi, UnclePunch] *Adds online mode, Slippi device must be in Slot B. *Change settings in Config > GameCube -C206A880 00000018 #Online/Core/BrawlOffscreenDamage.asm +C206A880 0000001B #Online/Core/BrawlOffscreenDamage.asm 7C0802A6 90010004 -9421FF50 BE810008 -887F221F 54630673 -40820088 807F0010 -2C030004 4182007C -2C030006 41820074 -3D808022 618C4A54 +9421FF20 BE8100B0 +3C608048 80639D30 +5463443E 2C030120 +41820094 887F221F +54630673 40820088 +807F0010 2C030004 +4182007C 2C030006 +41820074 3D808022 +618C4A54 7D8903A6 +4E800421 C05F00B0 +FC020840 41800060 +3D808022 618C4A68 7D8903A6 4E800421 C05F00B0 FC020840 -41800060 3D808022 -618C4A68 7D8903A6 -4E800421 C05F00B0 -FC020840 41810044 -3D808022 618C4A80 +41810044 3D808022 +618C4A80 7D8903A6 +4E800421 C05F00B4 +FC020840 41810028 +3D808022 618C4A98 7D8903A6 4E800421 C05F00B4 FC020840 -41810028 3D808022 -618C4A98 7D8903A6 -4E800421 C05F00B4 -FC020840 4180000C -38600000 48000008 -38600001 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C22F7094 0000000E #Online/Core/CustomizeMessageLRAS.asm +4180000C 38600000 +48000008 38600001 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C22F7094 0000000F #Online/Core/CustomizeMessageLRAS.asm 3CE08048 80E79D30 54E7443E 2C070208 -40820054 88EDAFA0 -2C070001 40820048 -88E30008 2C070007 -4082003C 89430001 +4082005C 88E30008 +2C070007 40820050 +89430001 886DAFA0 +2C030000 4082000C +38600003 48000018 816DB61C 886B0000 7C035000 41820018 38600005 3D808002 @@ -1099,101 +1300,107 @@ C22F7094 0000000E #Online/Core/CustomizeMessageLRAS.asm 618C7120 7D8903A6 4E800420 8903000B 60000000 00000000 -C21A4DB4 0000001C #Online/Core/ForceEngineOnRollback.asm +C21A4DB4 0000001A #Online/Core/ForceEngineOnRollback.asm 3C608048 80639D30 5463443E 2C030208 -408200B0 3C608047 +408200A4 3C608047 60639D64 80630000 -2C030000 4082009C +2C030000 40820090 3D808034 618C7364 7D8903A6 4E800421 7C7A1B78 80ADB61C 2C1B0000 41810014 -888500D9 2C040000 -41820038 3B600001 -888500D9 988507A9 -808500DB 908507AA -888500DA 988507AE -80850237 908507AF -808500D5 8084010A -908507B3 48000028 -888507B7 2C040000 -4182001C 38800000 -988507B7 3D808001 -618C95FC 7D8903A6 -4E800421 7F43D378 -3D808034 618C738C +888500DF 2C040000 +4182002C 3B600001 +888500DF 988508FF +808500E1 90850900 +888500E0 98850904 +8085038D 90850905 +48000028 8885090D +2C040000 4182001C +38800000 9885090D +3D808001 618C95FC +7D8903A6 4E800421 +7F43D378 3D808034 +618C738C 7D8903A6 +4E800421 2C1B0000 +40820014 3D80801A +618C4DA8 7D8903A6 +4E800420 00000000 +C2019614 0000000C #Online/Core/ForceInputRefetchOnAdvance.asm +3D808001 618CD2BC 7D8903A6 4E800421 -2C1B0000 40820014 -3D80801A 618C4DA8 -7D8903A6 4E800420 -60000000 00000000 -C216D310 00000009 #Online/Core/HandleLRAS.asm 3C608048 80639D30 5463443E 2C030208 -40820028 3C608046 -6063B6A0 88630008 -2C030007 40820014 -808DB61C 806407A5 -7C6903A6 4E800421 -8001003C 83E10034 +40820038 3C608047 +60639D64 80630000 +2C030000 40820024 +80ADB61C 88650014 +2C030000 41820014 +3D808001 618C95FC +7D8903A6 4E800421 60000000 00000000 C234DED8 0000000F #Online/Core/HandleRumble.asm 3BA30000 3C608048 80639D30 5463443E 2C030208 4082005C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 83EDB61C 887F0000 7C03E800 41820024 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808034 618CDF44 7D8903A6 4E800420 -887F0002 BA810008 -800100B4 382100B0 +887F0002 BA8100B0 +800100E4 382100E0 7C0803A6 7C7D1B78 60000000 00000000 -C216E748 00000070 #Online/Core/InitOnlinePlay.asm +C216E748 000000A3 #Online/Core/InitOnlinePlay.asm 3D808022 618C54B8 7D8903A6 4E800421 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -40820338 386007C0 +408204D0 38600B2F 3D808037 618CF1E4 7D8903A6 4E800421 -7C7B1B78 388007C0 +7C7B1B78 38800B2F 3D808000 618CC160 7D8903A6 4E800421 -936DB61C 38600001 -907B0003 4800023D -7C6802A6 907B07A5 -38600012 3D808037 +936DB61C 3C60803D +6063AD40 80630000 +81830088 886DAFA0 +2C030000 41820010 +A06C0001 38630001 +B06C0001 38600001 +907B0003 4800028D +7C6802A6 907B08FB +3860001A 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D1 -3860010E 3D808037 +4E800421 907B00D7 +38600126 3D808037 618CF1E4 7D8903A6 -4E800421 907B00D5 -7C7A1B78 3880010E +4E800421 907B00DB +7C7A1B78 38800126 3D808000 618CC160 7D8903A6 4E800421 38600021 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 -933B024A 3860009E +933B03A0 3860009E 3D808037 618CF1E4 7D8903A6 4E800421 -907B024E 3880009E +907B03A4 3880009E 3D808000 618CC160 7D8903A6 4E800421 38800000 98830000 38800007 98830001 -93790005 386007C0 +93790005 38600B2F 90790009 9359000D -3860010E 90790011 -807B024E 90790015 +38600126 90790011 +807B03A4 90790015 3860009E 90790019 38600000 9079001D 38600000 3D808000 @@ -1204,10 +1411,20 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 88780004 987B0001 80780005 907B0007 3C80804D 90645F90 -7FE3FB78 38980208 +7FE3FB78 3898025C 38A00138 3D808000 618C31F4 7D8903A6 4E800421 886DAFA0 +2C030000 40820048 +3CA0803D 60A5AD40 +80A50000 80A50088 +88650006 2C030000 +4182002C 88650017 +2C030007 41820020 +386000B4 907F0010 +38600001 987F0062 +987F0086 987F00AA +987F00CE 886DAFA0 2C030003 40820048 3AE00000 1CB70024 38650069 7C7F18AE @@ -1222,7 +1439,7 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 2C03000F 41810010 48000010 38600001 48000008 3860000F -987B001B 38A00000 +987B0021 38A00000 3C60804C 606320BC 1C850044 7C632214 38800000 90830000 @@ -1234,132 +1451,222 @@ C216E748 00000070 #Online/Core/InitOnlinePlay.asm 48000021 7C8802A6 38A00000 3D808038 618CFD54 7D8903A6 -4E800421 480000EC +4E800421 4800020C 4E800021 3C608048 80639D60 5464803E 806DB61C 80630007 7C841A14 3C60804D 90835F90 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 838DB61C -886DAFA0 2C030001 -4082008C 38600011 +90010004 9421FF20 +BE8100B0 838DB61C +3CA0803D 60A5AD40 +80A50000 83650088 +3F408047 635A9DA4 +7F43D378 3C808046 +6084B8EC 38A02278 +3D808000 618C31F4 +7D8903A6 4E800421 +3C808046 6084B6A0 +7F43D378 880424D0 +98030006 88040008 +98030004 3D808016 +618C6378 7D8903A6 +4E800421 38600171 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 386000BD -987E0000 807C0003 -907E0001 3BE00000 -3BBE0005 7FE3FB78 -3D808003 618C1724 -7D8903A6 4E800421 -38800001 989D0000 -8883008E 989D0001 -80830D28 909D0002 -3BFF0001 3BBD0006 -2C1F0002 4180FFC8 -7FC3F378 38800011 +987E0000 886DAFA0 +987E0001 3D80801A +618C4BA8 7D8903A6 +4E800421 907E0002 +A07B0001 907E0006 +887B0006 907E000A +807B0018 7C6903A6 +4E800421 987E000E +887C0011 2C030000 +3880FFFD 40820018 +887C0012 2C030000 +3880FFFE 40820008 +48000008 989E000E +3C808046 6084B6A0 +88640008 987E000F +2C030007 4082000C +88640001 48000008 +3860FFFF 987E0010 +809C0B1F 909E0011 +3BE00000 3BBE0015 +7FE3FB78 3D808003 +618C1724 7D8903A6 +4E800421 80830008 +989D0000 8883008E +989D0001 80830D28 +909D0002 1CBF0003 +38850B23 7C9C20AE +989D0006 38850B24 +7C9C222E B09D0007 +3BFF0001 3BBD0009 +2C1F0004 4180FFAC +387E0039 3C808048 +60840530 38A00138 +3D808000 618C31F4 +7D8903A6 4E800421 +7FC3F378 38800171 38A00001 3D808000 618C55F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 -C216E904 0000004B #Online/Core/InitPause.asm +C216E904 0000004C #Online/Core/InitPause.asm 3C608048 80639D30 5463443E 2C030208 -4082023C 3D808046 -618CDB68 886C0002 -54630739 41820028 -48000029 7C6802A6 -906C0040 38600000 -986DAFC8 886C0002 -38800000 50831F38 -986C0002 48000200 -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 83ADB61C -3BC00000 7FC3F378 -3D808003 618C241C -7D8903A6 4E800421 -2C030000 40820060 -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 -7D8903A6 4E800421 -2C030000 41820038 -3C80804C 60841FAC -1C7E0044 7C632214 -80630000 54600673 -4182001C 546006B5 -41820014 546005EF -4182000C 546004E7 -40820068 3BDE0001 -2C1E0004 4180FF80 -8BDD0000 3C80804C -60841FAC 1C7E0044 -7FE32214 886DAFC8 -2C030000 418200AC -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 -7D8903A6 4E800421 -2C030000 41820054 -807F0008 546004E7 -40820048 480000F0 -3C608046 6063B6A0 -9BC30001 38800007 -98830008 3880001E -988324D5 3D80802F -618C3394 7D8903A6 -4E800421 3D80801A -618C10FC 7D8903A6 -4E800421 480000B0 +40820248 886DAFA0 +2C030000 4182023C +3D808046 618CDB68 +886C0002 54630739 +41820028 48000029 +7C6802A6 906C0040 38600000 986DAFC8 -3D80802F 618C33CC +886C0002 38800000 +50831F38 986C0002 +48000200 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +83ADB61C 3BC00000 +7FC3F378 3D808003 +618C241C 7D8903A6 +4E800421 2C030000 +40820060 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820038 3C80804C +60841FAC 1C7E0044 +7C632214 80630000 +54600673 4182001C +546006B5 41820014 +546005EF 4182000C +546004E7 40820068 +3BDE0001 2C1E0004 +4180FF80 8BDD0000 +3C80804C 60841FAC +1C7E0044 7FE32214 +886DAFC8 2C030000 +418200AC 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820054 807F0008 +546004E7 40820048 +480000F0 3C608046 +6063B6A0 9BC30001 +38800007 98830008 +3880001E 988324D5 +3D80802F 618C3394 7D8903A6 4E800421 -7FC3F378 3D80801A -618C10FC 7D8903A6 -4E800421 48000080 -887D000D 2C030000 -40820020 7FC3F378 -3D808003 618C3BD8 +3D80801A 618C10FC 7D8903A6 4E800421 -2C030000 41820058 -807F0008 546004E7 -4182004C 38600001 +480000B0 38600000 986DAFC8 3D80802F -618C3394 7D8903A6 +618C33CC 7D8903A6 4E800421 7FC3F378 -38800005 3D80801A -618C0FEC 7D8903A6 -4E800421 38600005 -3D808002 618C4030 +3D80801A 618C10FC 7D8903A6 4E800421 -48000004 3860FFFF -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 881F0001 -60000000 00000000 -C21A5014 0000004F #Online/Core/LoopEngineForRollback.asm +48000080 887D0010 +2C030000 40820020 +7FC3F378 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +41820058 807F0008 +546004E7 4182004C +38600001 986DAFC8 +3D80802F 618C3394 +7D8903A6 4E800421 +7FC3F378 38800005 +3D80801A 618C0FEC +7D8903A6 4E800421 +38600005 3D808002 +618C4030 7D8903A6 +4E800421 48000004 +3860FFFF BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +881F0001 00000000 +C22F70C4 00000034 #Online/Core/LGLExceededGameEnd.asm +48000058 4E800021 +3F333333 00000000 +428C0000 42700000 +3F800000 000000FF +D7A5FFFF FAFA78FF +596F7500 4F70706F +6E656E74 00257320 +45786365 65646564 +204C6564 67652047 +72616220 4C696D69 +74206F66 20256400 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C9F2378 7CBE2B78 +7CDD3378 3B200000 +4BFFFF8D 7F0802A6 +3C608048 80639D30 +5463443E 2C030208 +408200E8 886DAFA0 +2C030003 418200DC +38600000 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7C1B78 +38600001 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7B1B78 +2C1C002D 4081000C +2C1B002D 4181009C +2C1C002D 3B400000 +41810014 2C1B002D +3B400001 41810008 +48000080 806DB61C +88630000 7C03D000 +3B200002 3AF8001C +3AD80024 C0780008 +40820014 3B200006 +3AF80018 3AD80020 +C078000C 3C608046 +6063B6A0 388000FD +988324D5 806DB61C +80630912 7EE4BB78 +38A00001 38D80014 +38F8002D 7EC8B378 +3920002D C0380000 +C0580004 C0D80010 +3D808000 618C56B4 +7D8903A6 4E800421 +7FE4FB78 7FC5F378 +7FA6EB78 7F23CB78 +BA8100B0 800100E4 +382100E0 7C0803A6 +38FF0000 00000000 +C21A5014 0000005C #Online/Core/LoopEngineForRollback.asm 41A20014 3D80801A 618C5024 7D8903A6 4E800420 3C608048 80639D30 5463443E -2C030208 40820250 +2C030208 408202B8 3C608047 60639D64 80630000 2C030000 -4082023C 7C0802A6 -90010004 9421FF50 -BE810008 3D808034 +408202A4 7C0802A6 +90010004 9421FF20 +BE8100B0 3D808034 618C7364 7D8903A6 4E800421 7C7D1B78 -83EDB61C 3BDF0252 +83EDB61C 3BDF03A8 8B9E0000 3F008048 83189D60 3B18FFFF -82FF07A1 7C18B800 +82FF08F7 7C18B800 4181009C 7C78B850 38630001 8B9E0000 7F83E051 40800008 @@ -1372,7 +1679,7 @@ BE810008 3D808034 1C870006 7C862214 A0840001 7C032000 41820030 38E70001 -88660000 2C070003 +88660000 7C071800 4180FFD4 1C790006 7C651A14 80630003 3D808002 618C36B8 @@ -1388,50 +1695,63 @@ A0840001 7C032000 38800061 3D808000 618CC160 7D8903A6 4E800421 7C18B800 -4081001C 931F07A1 +4081001C 931F08F7 3B9C0001 2C1C0007 41800008 3B9CFFF9 -9B9E0000 7FA3EB78 -3D808034 618C738C -7D8903A6 4E800421 -8B7F07A9 2C1B0001 -408200CC 48000025 -BA810008 800100B4 -382100B0 7C0803A6 -3D80801A 618C4DE4 +9B9E0000 8B7F08FF +2C1B0001 40820134 +807F0900 7C181800 +41800048 38600000 +987F00DF 987F08FF +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 3B5A0001 +3D80801A 618C5024 7D8903A6 4E800420 -7C0802A6 90010004 -9421FF50 BE810008 -3D808003 618C0A50 -7D8903A6 4E800421 -3D808002 618CA4AC -7D8903A6 4E800421 -3D808003 618C0A50 -7D8903A6 4E800421 -80630028 3D808036 -618C8458 7D8903A6 -4E800421 806DC18C -82830020 4800002C -82B4002C 8875221F -546006F7 40820018 -7E83A378 3D808008 -618C6A8C 7D8903A6 -4E800421 82940008 -2C140000 4082FFD4 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C216D26C 00000003 #Online/Core/PauseCounter.asm -808DB61C 806407BC -38630001 906407BC -387F0000 00000000 -C216CD08 0000000A #Online/Core/PreventPauseStranding.asm -3C608048 80639D30 -5463443E 2C030208 +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 48000029 +BA8100B0 800100E4 +382100E0 7C0803A6 +3B5A0001 3D80801A +618C4DE4 7D8903A6 +4E800420 7C0802A6 +90010004 9421FF20 +BE8100B0 3D808003 +618C0A50 7D8903A6 +4E800421 3D808002 +618CA4AC 7D8903A6 +4E800421 3D808003 +618C0A50 7D8903A6 +4E800421 80630028 +3D808036 618C8458 +7D8903A6 4E800421 +806DC18C 82830020 +4800002C 82B4002C +8875221F 546006F7 +40820018 7E83A378 +3D808008 618C6A8C +7D8903A6 4E800421 +82940008 2C140000 +4082FFD4 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +7FA3EB78 3D808034 +618C738C 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C216D26C 00000003 #Online/Core/PauseCounter.asm +808DB61C 80640916 +38630001 90640916 +387F0000 00000000 +C216CD08 0000000A #Online/Core/PreventPauseStranding.asm +3C608048 80639D30 +5463443E 2C030208 40820038 83ADB61C -887D000D 2C030001 +887D0010 2C030001 40820028 889D0000 887E0001 7C630774 7C032000 41820014 @@ -1443,69 +1763,129 @@ C216EA30 00000004 #Online/Core/Remember Who LRA Started.asm 40820014 3C808046 6084B6A0 88840001 989E000C 00000000 -C2376A20 0000000A #Online/Core/SkipNewInputFetchOnRollback.asm +C216E9E8 00000008 #Online/Core/ReportNoContestLRAS.asm 3C608048 80639D30 5463443E 2C030208 -40820038 3C608047 +40820028 818DB61C +886C000F 2C030000 +40820018 38600001 +986C000F 806C08FB +7C6903A6 4E800421 +881F000E 00000000 +C2376A20 0000000C #Online/Core/SkipNewInputFetchOnRollback.asm +3C608048 80639D30 +5463443E 2C030208 +40820044 3C608047 60639D64 80630000 -2C030000 40820024 -806DB61C 886300D9 -2C030001 40820014 -3D808037 618C6A28 -7D8903A6 4E800420 -3861002C 00000000 -C21A4DE4 0000005C #Online/Core/StartEngineLoop.asm +2C030000 40820030 +808DB61C 886400DF +2C030000 41820020 +886400E0 2C030000 +40820014 3D808037 +618C6A28 7D8903A6 +4E800420 3861002C +60000000 00000000 +C21A4DE4 000000D3 #Online/Core/StartEngineLoop.asm 3D808037 618CE214 7D8903A6 4E800421 -48000030 4E800021 -00000000 3F800000 -3FA66666 C2340000 -3D8F5C29 FF0000FF +4800022C 4E800021 +41100000 C3220000 +3F333333 FF0000FF 44495343 4F4E4E45 -43544544 00000000 +43544544 00411000 +00C30C00 003F0000 +00FFB800 FF444553 +594E4320 44455445 +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 -9421FF50 BE810008 -3C608048 80639D30 -5463443E 2C030208 -4082026C 3C608047 -60639D64 80630000 -2C030000 40820258 -834DB61C 3F608048 -837B9D60 3D808034 -618C7364 7D8903A6 -4E800421 7C791B78 -887A000E 2C030000 -408200D0 887A000D -2C030000 418200C4 -38600003 3D808002 -618C4030 7D8903A6 -4E800421 4BFFFF51 -7EE802A6 38600002 -809A07B8 3D80803A -618C6754 7D8903A6 -4E800421 7C781B78 -38800001 98980049 -38800001 9898004A -C0370000 D0380008 -C0370004 D0380024 -D0380028 C0370008 -C057000C 7F03C378 -38970018 3D80803A -618C6B98 7D8903A6 -4E800421 7F03C378 -38800000 C0370010 -C0570010 3D80803A +9421FF20 BE8100B0 +7C7D1B78 4BFFFE91 +7FE802A6 7FFF2214 +C03F0000 C05F0004 +7FA3EB78 389F0010 +3D80803A 618C6B98 +7D8903A6 4E800421 +7C7E1B78 7FA3EB78 +7FC4F378 C03F0008 +C05F0008 3D80803A 618C7548 7D8903A6 -4E800421 7F03C378 -38800000 38B70014 +4E800421 7FA3EB78 +7FC4F378 38BF000C 3D80803A 618C74F0 7D8903A6 4E800421 -38600001 987A000E -887A07A9 2C030000 -418200B8 887A07AE -2C030000 41820084 -807A024A 809A07AF -80BA024E 3D808000 +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 40820424 +3C608047 60639D64 +80630000 2C030000 +40820410 83CDB61C +3FE08048 83FF9D60 +839E00DB 3D808034 +618C7364 7D8903A6 +4E800421 7C791B78 +887E0011 2C030000 +40820048 887E0010 +2C030000 4182003C +887E000F 2C030000 +40820030 38600003 +3D808002 618C4030 +7D8903A6 4E800421 +807E0912 38800000 +4BFFFE99 38600001 +987E0011 4BFFFF25 +887E08FF 2C030000 +418200B0 887E0904 +2C030000 41820094 +807E0905 7C1F1800 +41820024 41800094 +807E03A0 809E0905 +80BE03A4 3D808000 618C560C 7D8903A6 4E800421 3D808001 618C9894 7D8903A6 @@ -1514,273 +1894,359 @@ C0570010 3D80803A 7C832051 4080000C 88650000 7C841A14 98850002 38600000 -98650003 3F608048 -837B9D60 807A0237 -907A0003 38600000 -987A0236 987A0247 -987A0248 987A0249 -987A00DA 987A07AE +98650003 3FE08048 +83FF9D60 807E038D +907E0003 38600000 +987E038C 987E039D +987E039E 987E039F +987E00E0 987E0904 3D808001 618C95FC 7D8903A6 4E800421 -807A07AA 7C1B1800 -41800010 38600000 -987A00D9 987A07A9 -887A0236 2C030000 -4182002C 807A0237 -7C1B1800 41800020 -807A024A 7F64DB78 -80BA024E 3D808000 +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 +4BFFFC4D 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 +7C161800 40800008 +7E9DA378 A0740006 +A0970006 7C630734 +7C840734 7C641850 +2C03FFFF 41800010 +2C030001 41810008 +48000034 38600003 +3D808002 618C4030 +7D8903A6 4E800421 +807E0912 3880001D +4BFFFC29 38600001 +987E0012 4BFFFCB5 +48000080 887E0013 +2C030000 40820028 +A0740004 A0970004 +7C032000 41820018 +807E0912 3880003D +4BFFFBF1 38600001 +987E0013 48000010 +3AB50001 2C150015 +4180FF3C 3B180001 +887C0001 7C181800 +4180FF04 2C1D0000 +41820028 807D0008 +907E0B1F 387E0B23 +389D000C 38A0000C +3D808000 618C31F4 +7D8903A6 4E800421 +887E038C 2C030000 +4182002C 807E0909 +7C1F1800 40810020 +807E03A0 7FE4FB78 +80BE03A4 3D808000 618C5608 7D8903A6 -4E800421 887A000C -2C030001 4182004C +4E800421 887E000F +2C030001 41820058 3C608046 6063B6A0 88630008 2C030000 40820010 38600000 -987A000B 4800002C -887A000B 38630001 -987A000B 2C030007 -40810018 38600001 -987A000C 807A07A5 -7C6903A6 4E800421 -7F23CB78 3D808034 -618C738C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C2376A28 000000DD #Online/Core/TriggerSendInput.asm +907E000B 48000038 +807E000B 2C030000 +40820008 93FE000B +807E000B 7C63F850 +2C030007 40810018 +38600001 987E000F +807E08FB 7C6903A6 +4E800421 7F23CB78 +3D808034 618C738C +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 +C2376A28 000000F2 #Online/Core/TriggerSendInput.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608048 80639D30 5463443E 2C030208 -408206B0 3C608047 +40820754 3C608047 60639D64 80630000 -2C030000 4082069C -836DB61C 833B00D1 -831B00D5 82FB024A -835B0003 887B00D9 -2C030001 418205F8 -887B001B 38800054 -7C632050 2C1A0003 -4080001C 386100DC +2C030000 40820740 +83C10000 836DB61C +833B00D7 831B00DB +82FB03A0 835B0003 +889B0002 1C84000C +3864002C 7FBE1A14 +887B00DF 2C030000 +41820010 887B00E0 +2C030000 4182067C +887B0021 3880004E +7C632050 7C1A1800 +4080001C 387E002C 38800030 3D808000 618CC160 7D8903A6 -4E800421 889B0002 -1C84000C 386400E6 -7C6118AE 7C630774 -2C03FFFD 40820024 -386400DC 7C611A14 -389B000F 38A0000C +4E800421 48000040 +88830000 7C840774 +2C04FFFE 4180002C +2C040002 41810024 +88830001 7C840774 +2C04FFFE 41800014 +2C040002 4181000C +38800000 B0830000 +4E800020 387D0002 +4BFFFFC1 387D0004 +4BFFFFB9 887D000A +7C630774 2C03FFFD +40820020 7FA3EB78 +389B0015 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -889B0002 1C84000C -388400DC 387B000F -7C812214 38A0000C -3D808000 618C31F4 -7D8903A6 4E800421 -386000B0 98790000 -93590001 887B001B -98790005 889B0002 -1C84000C 388400DC -38790006 7C812214 +387B0015 7FA4EB78 +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 386000B0 +98790000 93590001 +807B0909 90790005 +819B0909 39600000 +1C6B0018 38630927 +7D5B1A14 806A0000 +7C036000 40820010 +806A0004 90790009 +48000010 396B0001 +2C0B0015 4180FFD4 +887B0021 9879000D +3879000E 7FA4EB78 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 7F23CB78 -38800012 38A00001 +3880001A 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -38780000 3880010E +38780000 38800126 38A00000 3D808000 618C55F0 7D8903A6 -4E800421 88780000 -2C030002 4182001C -2C030003 41820008 -48000030 38600001 -987B000D 48000024 -BA810008 800100B4 -382100B0 7C0803A6 -3D808037 618C6CEC -7D8903A6 4E800420 -889B001C 1C84000C -3884001D 887B0000 -1C63000C 386300DC -7C611A14 7C9B2214 -38A0000C 3D808000 -618C31F4 7D8903A6 -4E800421 887B00DF -1C63000C 386300E0 -889B0000 1C84000C -388400DC 7C7B1A14 -7C812214 38A0000C -3D808000 618C31F4 -7D8903A6 4E800421 -887B00DF 38630001 -2C030007 41800008 -38600000 987B00DF -887B001C 1C63000C -3863001D 7C7B1A14 -38990006 38A0000C +4E800421 38600000 +987B0014 88780000 +2C030002 41820024 +2C030003 41820010 +2C030004 41820040 +48000044 38600001 +987B0010 48000038 +887B000F 2C030001 +4182002C BA8100B0 +800100E4 382100E0 +7C0803A6 3D808037 +618C6CEC 7D8903A6 +4E800420 38600001 +987B0014 889B0022 +1C84000C 38840023 +887B0000 1C63000C +3863002C 7C7E1A14 +7C9B2214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -889B001B 887B001C -38630001 7C032000 +887B00E5 1C63000C +386300E6 889B0000 +1C84000C 3884002C +7C7B1A14 7C9E2214 +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 887B00E5 +38630001 2C03000E 41800008 38600000 -987B001C 887B0236 +987B00E5 887B0022 +1C63000C 38630023 +7C7B1A14 3899000E +38A0000C 3D808000 +618C31F4 7D8903A6 +4E800421 889B0021 +887B0022 38630001 +7C032000 41800008 +38600000 987B0022 +8B9B00DF 887B038C 2C030000 40820018 -38600000 987B0247 -987B0248 987B0249 -48000284 3A800000 -38D40247 7C66D8AE -2C030001 40820178 -1CD40004 38C60002 +38600000 987B039D +987B039E 987B039F +48000264 3A800000 +38D4039D 7C66D8AE +2C030001 4082016C +1CD40004 38C6001A 7C66C02E 1CD40004 -38C6023B 7C86D82E -7C641851 41800158 -7C761B78 38D40134 -7C66D8AE 38D40137 -7C86D8AE 7EC3B378 -1C63000C 3863000E +38C60391 7C86D82E +7EC41851 4180014C +80DB0909 7C043000 +41810010 7C032000 +418100AC 48000134 +1C76000C 3863002A 1CD40054 7C633214 -38D40134 7C86D8AE -1C84000C 3884013A -1CB40054 7C842A14 +38D4018E 7C86D8AE +1C84000C 38840194 +1CB400A8 7C842A14 7CD81A14 7CFB2214 88660000 88870000 546306FE 548406FE -7C032000 408200BC +7C032000 408200AC 88660001 88870001 5463067E 5484067E -7C032000 408200A4 -80660002 80870002 7C032000 40820094 +80660002 80870002 +7C032000 40820084 38A00005 38A50001 2C050008 40800028 7C6530AE 7C8538AE 2C03002A 4181000C 2C04002A 4081FFE0 -7C032000 40820064 +7C032000 40820054 4BFFFFD4 1CD40004 -38C6023B 7C66D82E +38C60391 7C66D82E 38630001 7C66D92E -38D40134 7C66D8AE -38630001 2C030007 -41800008 3863FFF9 -7C66D9AE 38D40134 -7C66D8AE 38D40137 -7C86D8AE 38D40134 -7C66D8AE 38D40137 +38D4018E 7C66D8AE +38630001 2C03000E +41800008 3863FFF2 +7C66D9AE 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 -4082FEC0 48000040 -1CD40004 38C6023B -7C66D82E 38600001 -987B00D9 987B00DA -935B00DB BA810008 -800100B4 382100B0 -7C0803A6 3D808037 -618C6CEC 7D8903A6 -4E800420 3A940001 -2C140003 4180FE74 -3AA00000 3A800000 -807B0237 7C761B78 -7EC3B378 38D40247 -7C86D8AE 7C761B78 -7EC3B378 38D40247 -7C86D8AE 2C040001 -40820030 1CD40004 -38C6023B 7C86D82E -2C150000 4182000C -7C041800 40800014 -7C832378 7C761B78 -7EC3B378 3AA00001 +4082FED0 48000044 +3B800001 4800003C +38600001 987B00DF +987B00E0 935B00E1 +3B5A0001 935B0003 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808037 618C6CEC +7D8903A6 4E800420 3A940001 2C140003 -4180FFAC 907B0237 -3A800000 38D40247 +4180FE80 39600000 +3A800000 82BB0909 +38D4039D 7C86D8AE +2C040001 40820028 +1CD40004 38C60391 +7C86D82E 2C0B0000 +4182000C 7C04A800 +40800008 7C952378 +39600001 3A940001 +2C140003 4180FFC4 +92BB038D 92BB091A +80D80026 7C153000 +40810008 90DB091A +2C1C0000 4082FF54 +3A800000 38D4039D 7C86D8AE 2C040001 -40820038 38D40134 -7C66D8AE 38D40137 -7C86D8AE 38D40134 -7C66D8AE 38D40137 +40820028 38D4018E +7C66D8AE 38D40191 7C86D8AE 7C041800 40820010 38600000 -38D40247 7C66D9AE +38D4039D 7C66D9AE 3A940001 2C140003 -4180FFB4 3A800000 -38D40247 7C86D8AE +4180FFC4 3A800000 +38D4039D 7C86D8AE 2C040001 41820018 3A940001 2C140003 4180FFE8 38600000 -987B0236 3A800000 -3AA00000 887B0000 -7C151800 40820008 -3AB50001 1CD40004 -38C60002 7C66C02E -7C7A1850 2C030000 -408000D4 887B001B -38800054 7C632050 -7C1A1800 418000BC -887B000C 2C030001 -418200B0 38D40137 +987B038C 3A800000 +3AA00000 3B800001 +887B0000 7C151800 +40820008 3AB50001 +1CD40004 38C6001A +7C66C02E 7C7A1850 +2C030000 408000D8 +887B0021 3880004E +7C632050 7C1A1800 +418000C0 887B000F +2C030001 418200B4 +3B800000 38D40191 7EC6D8AE 1C76000C -3863013A 1CB40054 +38630194 1CB400A8 7C632A14 1CD40054 -38C6000E 7C7B1A14 +38C6002A 7C7B1A14 7C983214 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 -38760001 2C030007 -41800008 3863FFF9 -38D40137 7C66D9AE -38D40134 7C66D8AE -38D40137 7C86D8AE -38D40247 7C66D8AE +38760001 2C03000E +41800008 3863FFF2 +38D40191 7C66D9AE +38D4018E 7C66D8AE +38D40191 7C86D8AE +38D4039D 7C66D8AE 2C030001 4182003C -1CD40004 38C6023B +1CD40004 38C60391 7F46D92E 38600001 -38D40247 7C66D9AE -38D40134 7EC6D9AE -887B0236 2C030001 -41820010 935B0237 -38600001 987B0236 +38D4039D 7C66D9AE +38D4018E 7EC6D9AE +887B038C 2C030001 +41820010 935B038D +38600001 987B038C 38600000 1C63000C -38A3000E 1CD40054 +38A3002A 1CD40054 7CA53214 1C75000C -386300DC 7C611A14 +3863002C 7C7E1A14 7C982A14 38A0000C 3D808000 618C31F4 7D8903A6 4E800421 3A940001 3AB50001 -2C140003 4180FEC8 -48000080 807B00DB -7C1A1800 40810024 -BA810008 800100B4 -382100B0 7C0803A6 -3D808037 618C6CEC -7D8903A6 4E800420 -807B00DB 7C7A1850 -38630001 889B00DF -7C632051 40800008 -38630007 1C63000C -388300E0 887B0000 -1C63000C 386300DC -7C611A14 7C9B2214 -38A0000C 3D808000 -618C31F4 7D8903A6 -4E800421 4BFFFE40 -3B5A0001 935B0003 -BA810008 800100B4 -382100B0 7C0803A6 -2C1E0000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 +2C140003 4180FEC4 +2C1C0000 41820008 +935B091A 48000080 +807B00E1 7C1A1800 +40810024 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808037 +618C6CEC 7D8903A6 +4E800420 807B00E1 +7C7A1850 38630001 +889B00E5 7C632051 +40800008 3863000E +1C63000C 388300E6 +887B0000 1C63000C +3863002C 7C7E1A14 +7C9B2214 38A0000C +3D808000 618C31F4 +7D8903A6 4E800421 +4BFFFE2C 3B5A0001 +935B0003 BA8100B0 +800100E4 382100E0 +7C0803A6 2C1E0000 +60000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 -90010004 9421FF50 -BE810008 83EDAFC4 +90010004 9421FF20 +BE8100B0 83EDAFC4 2C1F0000 40820018 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 480000A0 386000D1 987F0000 387F0001 7FC4F378 3D808032 @@ -1795,8 +2261,8 @@ BA810008 800100B4 38800004 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 80630000 2C030000 40810014 3D808001 618C6488 @@ -1804,8 +2270,8 @@ BA810008 800100B4 7FC3F378 00000000 C20166B8 00000029 #Online/Core/EXIFileLoad/TransferFile.asm 7C7E1B78 7C0802A6 -90010004 9421FF50 -BE810008 83EDAFC4 +90010004 9421FF20 +BE8100B0 83EDAFC4 2C1F0000 41820110 386000D1 987F0000 387F0001 7FC4F378 @@ -1836,12 +2302,12 @@ BE810008 83EDAFC4 7FA4EB78 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 38600001 3D808001 618C674C 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 7FC3F378 60000000 00000000 C20D4C1C 00000005 #Online/Core/FreezeDeadUpFallPhysics/InitHitVelocity.asm @@ -1864,7 +2330,7 @@ D03F2364 3D80800D 4E800420 00000000 C2080E80 00000011 #Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808003 618C10B8 7D8903A6 4E800421 3D808036 618C9808 @@ -1875,8 +2341,8 @@ C2080E80 00000011 #Online/Core/FreezeDeadUpFallPhysics/UpdateModelPos.asm 80610080 907F0038 80610084 907F003C 80610088 907F0040 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808008 618C0EE4 7D8903A6 4E800420 60000000 00000000 @@ -1895,33 +2361,91 @@ C2376304 0000000B #Online/Core/Hacks/ForceNoVideoAssert.asm 25640A00 00000000 C23A63A8 0000000C #Online/Core/Hacks/LoadPremadeTextDataFromDolphin.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C9D2378 7CDC3378 886DAFEC 2C030000 41820024 7FA3EB78 7F84E378 3D808000 618C56A4 7D8903A6 4E800421 7C7E1B78 -93DF005C BA810008 -800100B4 382100B0 +93DF005C BA8100B0 +800100E4 382100E0 7C0803A6 38600000 986DAFEC 00000000 04321D70 38600000 #Online/Core/Hacks/PreventCharacterCrowdChants.asm -C2019608 0000000E #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm +C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 9421FFF8 3C608048 80639D30 5463443E -2C030208 40820050 +2C030208 40820058 3C608047 60639D64 80630000 2C030000 -4082003C 3C608037 -60635E00 2C000003 -4082002C 80ADB61C -886500D9 2C030000 +40820044 80ADB61C +38600000 98650014 +3C608037 60635E00 +7C001800 40820028 +886500DF 2C030000 4182001C 38600001 -986507B7 3D808001 +9865090D 3D808001 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 @@ -1935,13 +2459,13 @@ C238D224 00000018 #Online/Core/Sound/AssignSoundInstanceId.asm 3C608047 60639D64 80630000 2C030000 40820090 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BDF0252 8B9E0000 +90010004 9421FF20 +BE8100B0 83EDB61C +3BDF03A8 8B9E0000 3C608048 80639D60 -809F07A1 7C032000 +809F08F7 7C032000 41810028 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -1950,21 +2474,21 @@ BE810008 83EDB61C 3863FFFF 1C630006 38A60001 7CA51A14 807D000C 90650002 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 C2088224 0000001D #Online/Core/Sound/NoDestroyVoice.asm 3C608048 80639D30 5463443E 2C030208 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BBF0252 57DE043E +90010004 9421FF20 +BE8100B0 83EDB61C +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F07A1 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -1975,26 +2499,26 @@ BE810008 83EDB61C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C8244 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C20882B0 0000001D #Online/Core/Sound/NoDestroyVoice2.asm 3C608048 80639D30 5463443E 2C030208 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB61C -3BBF0252 57DE043E +90010004 9421FF20 +BE8100B0 83EDB61C +3BBF03A8 57DE043E 8B9D0000 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C032000 41810088 3C608048 80639D60 -809F07A1 7C632050 +809F08F7 7C632050 38630001 8B9D0000 7F83E051 40800008 3B9C0007 1C7C00C2 @@ -2005,12 +2529,12 @@ BE810008 83EDB61C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C82D0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm @@ -2020,14 +2544,14 @@ C238D0B0 0000002A #Online/Core/Sound/PreventDuplicateSounds.asm 60639D64 80630000 2C030000 40820120 7C0802A6 90010004 -9421FF50 BE810008 -83EDB61C 3BDF0252 +9421FF20 BE8100B0 +83EDB61C 3BDF03A8 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 80639D60 -809F07A1 7C032000 +809F08F7 7C032000 41810070 3C608048 -80639D60 809F07A1 +80639D60 809F08F7 7C632050 38630001 8B9E0000 7F83E051 40800008 3B9C0007 @@ -2048,12 +2572,12 @@ A0650000 7C1B1800 93450002 88660000 38630001 98660000 2C1D0000 41820028 -7F43D378 BA810008 -800100B4 382100B0 +7F43D378 BA8100B0 +800100E4 382100E0 7C0803A6 3D808038 618CD2A0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 2C1A0000 60000000 00000000 C216BE28 0000000A #Online/Core/Teams/PreventDeadStranding.asm @@ -2062,11 +2586,18 @@ C216BE28 0000000A #Online/Core/Teams/PreventDeadStranding.asm 5484443E 2C040208 4082002C 888DAFA0 2C040003 40820020 -808DB61C 8884000D +808DB61C 88840010 2C040001 41820008 4800000C 38600000 48000004 2C030000 60000000 00000000 +C208653C 00000006 #Online/Core/WhispyBlowDirFix/WhispyBlowDirFix.asm +819D002C 806C0010 +2C03000B 41810018 +38000000 3D808008 +618C655C 7D8903A6 +4E800420 C0210020 +60000000 00000000 C2266BC4 00000006 #Online/Menus/CSS/DisableLRSTART.asm 3C608048 80639D30 5463443E 2C030008 @@ -2090,14 +2621,14 @@ C2260310 00000008 #Online/Menus/CSS/FetchMatchInfo.asm 618C5610 7D8903A6 4E800421 38000000 60000000 00000000 -C2263258 00000168 #Online/Menus/CSS/HandleInputsOnCSS.asm +C2263258 000000BC #Online/Menus/CSS/HandleInputsOnCSS.asm 41A20014 3D808026 618C3334 7D8903A6 4E800420 7C0802A6 -90010004 9421FF50 -BE810008 3C608048 +90010004 9421FF20 +BE8100B0 3C608048 80639D30 5463443E -2C030008 40820AF8 +2C030008 40820598 7CFB3B78 3F008000 63185614 83180000 83580000 3B800000 @@ -2115,75 +2646,79 @@ BE810008 3C608048 38600000 48000008 38600003 3D808002 618C4030 7D8903A6 -4E800421 480004C9 -887A0000 2C030000 -40810020 2C030003 -40810084 2C030004 -41820088 2C030005 -418201E0 48000A20 -88780014 2C030000 -40820A14 576004E7 -41820A0C 3C608048 -80639D60 2C030000 -418209FC 3860FFFF -986DAFC9 38600000 -986DAFCA 886DB657 -2C030000 418209E0 -886DAFA0 2C030001 -41820010 2C030002 -40800014 48000000 -3860FFFE 48000355 -480009BC 4800037D -480009B4 576006F7 -408203B9 480009A8 -3D80801A 618C3680 -7D8903A6 4E800421 -548006F7 41820024 -88780013 38630001 -98780013 2C030030 -40810014 9B980013 -48000381 48000970 -9B980013 887A0001 -2C030000 408200EC -576004E7 4082002C -886DAFA0 2C030002 -418000D8 886DAFC9 -2C030000 408200CC -886DAFCA 2C030001 -408200C0 48000004 +4E800421 887A0000 +2C030000 40810020 +2C030003 4081008C +2C030004 41820090 +2C030005 418201E8 +480004C4 88780014 +2C030000 408204B8 +576004E7 418204B0 +3C608048 80639D60 +2C030000 418204A0 +3860FFFF 986DAFC9 +38600000 986DAFCA 886DB657 2C030000 -418200B0 3C608048 -80639D60 2C030000 -418200A0 886DAFA0 +41820484 886DAFA0 +2C030000 41820018 2C030001 41820010 2C030002 40800014 48000000 3860FFFE -48000169 4800007C +48000371 48000458 +48000399 48000450 +576006F7 408203D5 +48000444 3D80801A +618C3680 7D8903A6 +4E800421 548006F7 +41820024 88780013 +38630001 98780013 +2C030030 40810014 +9B980013 4800039D +4800040C 9B980013 +887A0001 2C030000 +408200EC 576004E7 +4082002C 886DAFA0 +2C030002 418000D8 886DAFC9 2C030000 -4182001C 2C030001 -41820008 48000000 -3860FFFF 48000145 -48000058 886DAFCA -2C030000 41820018 -806D8840 38630598 -A063001E 48000125 -48000038 888DAFA0 -2C040003 38600000 -40820008 38600001 -808DB610 98640018 -38600001 986DB656 -480000F5 7C6802A6 -906DAFE8 48000878 -887A0001 889A0002 -7C632039 41820868 -BA810008 800100B4 -382100B0 7C0803A6 -3D808026 618C3264 -7D8903A6 4E800420 -576006F7 4082024D -4800083C 7C0802A6 -90010004 9421FF50 -BE810008 38600014 +408200CC 886DAFCA +2C030001 408200C0 +48000004 886DB657 +2C030000 418200B0 +3C608048 80639D60 +2C030000 418200A0 +886DAFA0 2C030001 +41820010 2C030002 +40800014 48000000 +3860FFFE 48000185 +4800007C 886DAFC9 +2C030000 4182001C +2C030001 41820008 +48000000 3860FFFF +48000161 48000058 +886DAFCA 2C030000 +41820018 806D8840 +38630598 A063001E +48000141 48000038 +888DAFA0 2C040003 +38600000 40820008 +38600001 808DB610 +98640018 38600001 +986DB656 48000111 +7C6802A6 906DAFE8 +48000314 887A0001 +889A0002 7C632039 +41820304 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808026 +618C3264 7D8903A6 +4E800420 576006F7 +40820269 480002D8 +7C0802A6 90010004 +9421FF20 BE8100B0 +3C60803D 6063AD40 +80630000 81830088 +38600000 B06C0001 +986C0006 38600014 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 386000B4 @@ -2200,11 +2735,11 @@ BE810008 38600014 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 38600009 3D808037 618CF1E4 7D8903A6 4E800421 @@ -2236,26 +2771,26 @@ B0790005 98990007 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 8A98001A 4BFFFECD -4BFFFE1D BA810008 -800100B4 382100B0 +4BFFFE01 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38600001 986DAFA3 4BFFFFB5 7C6802A6 906DAFE8 880DB650 980DB659 38000004 -980DB656 BA810008 -800100B4 382100B0 +980DB656 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38600001 3D808037 618CF1E4 7D8903A6 4E800421 7C791B78 @@ -2266,216 +2801,40 @@ BA810008 800100B4 4E800421 7F23CB78 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 2C1B0200 -40820008 B3780015 -2C1B0001 4182001C -2C1B0002 41820014 -2C1B0008 4182000C -2C1B0004 4082001D -B3780015 88780014 -2C030000 4082000C -7F63DB78 480000B9 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -38600002 3D808037 -618CF1E4 7D8903A6 -4E800421 7C791B78 -386000BB 98790000 -7DC37378 98790001 -7F23CB78 38800002 -38A00001 3D808000 -618C55F0 7D8903A6 -4E800421 7F23CB78 -3D808037 618CF1B0 -7D8903A6 4E800421 -386000B7 3880007F -38A00040 3D808002 -618C37A8 7D8903A6 -4E800421 7F63DB78 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -48000419 7DE802A6 -38600002 3D808002 -618C4030 7D8903A6 -4E800421 7DC37378 -98780014 3860000B -3D808037 618CF1E4 -7D8903A6 4E800421 -7C771B78 3880000B -3D808000 618CC160 -7D8903A6 4E800421 -7DC37378 98770000 -7F03C378 90770007 -38600004 38800005 -38A00080 3D808039 -618C01F0 7D8903A6 -4E800421 7C741B78 -80780004 80630000 -80630000 3D808037 -618C0E44 7D8903A6 -4E800421 7C751B78 -C02F0024 888DAFE0 -2C040000 41820008 -C02F0028 C04F002C -D0230038 D043003C -7E83A378 38800004 -7EA5AB78 3D808039 -618C0A70 7D8903A6 -4E800421 7E83A378 -3C808039 60841070 -38A00001 38C00080 -3D808039 618C069C -7D8903A6 4E800421 -7E83A378 38800004 -3CA08037 60A5F1B0 -7EE6BB78 3D808039 -618C0B68 7D8903A6 -4E800421 7E83A378 -48000031 7C8802A6 -38A00004 3D808038 -618CFD54 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -820E002C 82EE0028 -8A300000 8A500002 -82700003 82B00007 -A2D50015 83550000 -38600000 B0750015 -88700001 2C030000 -40820234 2C130000 -40820194 38600090 -7C721B78 98700002 -48000261 7DE802A6 -7E238B78 3D808000 -618C56AC 7D8903A6 -4E800421 7C741B78 -38600000 38800000 -3D80803A 618C6754 -7D8903A6 4E800421 -7C731B78 92700003 -38600001 38800000 -C02F0000 C04F0004 -98730049 9893004A -D0330008 D0530024 -D0530028 C04F0008 -886DAFE0 2C030000 -41820008 C04F000C -388F0034 887A0000 -2C030004 41820008 -388F0038 7E639B78 -38A00000 38CF0030 -38EF003C 39140004 -C02F001C C06F0018 -3D808000 618C56B4 -7D8903A6 4E800421 -7C641B78 7C8A2378 -7C8B2378 386B0002 -C04F0020 3D808000 -618C55EC 7D8903A6 -4E800421 C06F0018 -EC63082A 2C0B0000 -4182001C 2C0B0001 -4182002C 2C0B0002 -4182001C 2C0B0003 -4182000C 38800008 -48000018 38800004 -48000010 38800002 -48000008 38800001 -7E238B78 3D808000 -618C56AC 7D8903A6 -4E800421 7C872378 -C04F0010 886DAFE0 -2C030000 41820008 -C04F0014 7E639B78 -388F0030 38A00000 -38CF0030 C02F001C -3D808000 618C56B4 -7D8903A6 4E800421 -7C6B1B78 386A0004 -7C0B1800 4082FF48 -480000CC 88750018 -2C030000 41820010 -88700002 2C03008A -41810070 2C160200 -40820008 48000078 -2C160000 4182005C -88750018 2C030003 -4080003C 88750017 -2C030005 40800030 -38600000 98700002 -7E238B78 7EC4B378 -38A00004 7C632830 -7C632214 4BFFFBB1 -38600001 98700001 -4800005C 38600003 -3D808002 618C4030 -7D8903A6 4E800421 -2C120000 41820010 -3A52FFFF 9A500002 -48000034 38600000 -98750014 7DC37378 -3D808039 618C0228 -7D8903A6 4E800421 -7E639B78 3D80803A -618C5CC4 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 00000000 -3DCCCCCD C3960000 -C3E20000 C38E8000 -C3DA8000 429E0000 -3EE66666 41C80000 -C1A00000 C20C0000 -C1840000 FFFFFFFF -FFEA2FFF C9C387FF -43686174 3A202573 -00000000 BA810008 -800100B4 382100B0 -7C0803A6 3D808026 -618C3334 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 -7C0803A6 00000000 -C21A3F9C 00000005 #Online/Menus/CSS/IncreaseTextHeap.asm -3C608048 80639D30 -5463443E 2C030008 -4082000C 38604800 -48000008 38602400 -60000000 00000000 -C22652F0 0000007C #Online/Menus/CSS/InitSheikSelector.asm -3C608048 80639D30 -5463443E 2C030008 -408203C0 48000058 -4E800021 00000000 -00000000 3DCCCCCD -C2C80000 43340000 -43520000 3F19999A -3ECCCCCD C0400000 -33FF2FFF FFFFFFFF -8E9196FF C193999A -C1AAE148 3FE3D70A -C1823D71 C15BAE14 -81692081 6A005300 -5A000000 7C0802A6 -90010004 9421FF50 -BE810008 38600004 -38800005 38A00080 -3D808039 618C01F0 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808026 +618C3334 7D8903A6 +4E800420 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 +C21A3F9C 00000005 #Online/Menus/CSS/IncreaseTextHeap.asm +3C608048 80639D30 +5463443E 2C030008 +4082000C 38604800 +48000008 38602400 +60000000 00000000 +C22652F0 0000007C #Online/Menus/CSS/InitSheikSelector.asm +3C608048 80639D30 +5463443E 2C030008 +408203C0 48000058 +4E800021 00000000 +00000000 3DCCCCCD +C2C80000 43340000 +43520000 3F19999A +3ECCCCCD C0400000 +33FF2FFF FFFFFFFF +8E9196FF C193999A +C1AAE148 3FE3D70A +C1823D71 C15BAE14 +81692081 6A005300 +5A000000 7C0802A6 +90010004 9421FF20 +BE8100B0 38600004 +38800005 38A00080 +3D808039 618C01F0 7D8903A6 4E800421 48000131 7C8802A6 38A00004 3D808038 @@ -2493,8 +2852,8 @@ C03F0008 D03E0024 D03E0028 3860004A C03F0010 48000025 3860004C C03F0014 -48000019 BA810008 -800100B4 382100B0 +48000019 BA8100B0 +800100E4 382100E0 7C0803A6 480002A4 7EE802A6 7C7A1B78 FC600890 C03F000C @@ -2516,8 +2875,8 @@ C03F001C C05F001C 7D8903A6 4E800421 7EE803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFE3D +90010004 9421FF20 +BE8100B0 4BFFFE3D 7FE802A6 83DF0000 3C608043 6063208F 88630000 2C030012 @@ -2577,486 +2936,343 @@ C05F0040 FC011040 7FC3F378 38990001 7F05C378 3D80803A 618C74F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 38600000 38980000 60000000 00000000 -C2264534 000001DC #Online/Menus/CSS/LoadCSSText.asm +C2264534 0000014D #Online/Menus/CSS/LoadCSSText.asm 3C608048 80639D30 5463443E 2C030008 -40820EC4 480001F8 +40820A4C 480001C4 4E800021 00000000 -3DCCCCCD 404CCCCD -413CCCCD 3F4CCCCD -C1600000 41C00000 -00000000 41F00000 -42480000 C2320000 -C1EC0000 C1BA0000 -40A00000 3D23D70A -428C0000 41B80000 -3F000000 42B40000 -42500000 42960000 -42C40000 42500000 -428C0000 42B00000 -42D40000 3ECCCCCD -43048000 43188000 -C3760000 C3020000 -C2480000 3EE66666 -33FF2FFF 3CBCFFFF -8E9196FF FFFFFFFF -FF0000FF 00556E72 -616E6B65 64004469 -72656374 0052616E -6B656400 5465616D -73002573 204D6F64 -65005365 6C656374 -20796F75 72206368 -61726163 74657200 -43686172 61637465 -72207365 6C656374 -65640050 72657373 -20535441 52542074 -6F202573 006C6F63 -6B20696E 00656E74 -65722063 6F646500 -73656172 63680073 -656C6563 74207374 -61676500 4C6F636B -65642069 6E005365 -61726368 696E6720 -666F7220 25730043 -6F6E6E65 6374696E -6720746F 20257300 -57616974 696E6720 -6F6E2025 73006F70 -706F6E65 6E74002D +3DCCCCCD 428C0000 +41B80000 3F000000 +42B40000 42500000 +42960000 42C40000 +42500000 428C0000 +42B00000 42D40000 +3ECCCCCD 43048000 +43188000 C3760000 +C3020000 C2480000 +3EE66666 33FF2FFF +3CBCFFFF 8E9196FF +FFFFFFFF FF0000FF +00556E72 616E6B65 +64004469 72656374 +0052616E 6B656400 +5465616D 73002573 +204D6F64 65005365 +6C656374 20796F75 +72206368 61726163 +74657200 43686172 +61637465 72207365 +6C656374 65640050 +72657373 20535441 +52542074 6F202573 +006C6F63 6B20696E +00656E74 65722063 +6F646500 73656172 +63680073 656C6563 +74207374 61676500 +4C6F636B 65642069 +6E005365 61726368 +696E6720 666F7220 +25730043 6F6E6E65 +6374696E 6720746F +20257300 57616974 +696E6720 6F6E2025 +73006F70 706F6E65 +6E74002D 2D2F2F2D 2D2F2F2D 2D2F2F2D -2D2F2F2D 2D2F2F30 -30004572 726F7200 -506C6179 696E673A -00557365 20442D50 -61642074 6F204368 -61740050 72657373 -205A2074 6F202573 -00486F6C 64205A20 -746F2025 73006469 -73636F6E 6E656374 -0063616E 63656C00 -636C6561 72206572 -726F7200 817B0081 -7E00817C 00000000 -4E800021 C2E00000 -41A00000 00000000 -3DCCCCCD 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFDFD -7FA802A6 3C60804D -606350D8 3C800200 -60840801 90830000 -888DAFA0 2C040002 -38800001 41800008 -38800002 4BFFFFAD -7C6802A6 3D808000 -618C5618 7D8903A6 -4E800421 38A00000 -4E800021 38600004 -38800005 38A00080 -3D808039 618C01F0 -7D8903A6 4E800421 -7C761B78 38600004 -3D808037 618CF1E4 -7D8903A6 4E800421 -7C781B78 38760000 -38800004 3CA08037 -60A5F1B0 38D80000 -3D808039 618C0B68 +2D2F2F30 30004572 +726F7200 506C6179 +696E673A 00557365 +20442D50 61642074 +6F204368 61740050 +72657373 205A2074 +6F202573 00486F6C +64205A20 746F2025 +73006469 73636F6E +6E656374 0063616E +63656C00 636C6561 +72206572 726F7200 +817B0081 7E00817C +00000000 4E800021 +C2E00000 41A00000 +00000000 3DCCCCCD +7C0802A6 90010004 +9421FF20 BE8100B0 +4BFFFE31 7FA802A6 +3C60804D 606350D8 +3C800200 60840801 +90830000 888DAFA0 +2C040002 38800001 +41800008 38800002 +4BFFFFAD 7C6802A6 +3D808000 618C5618 7D8903A6 4E800421 -38760000 48000261 -7C8802A6 38A00004 -3D808038 618CFD54 +38A00000 4E800021 +38600004 38800005 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 7C791B78 +38600004 3D808037 +618CF1E4 7D8903A6 +4E800421 7C781B78 +38790000 38800004 +3CA08037 60A5F1B0 +38D80000 3D808039 +618C0B68 7D8903A6 +4E800421 38790000 +48000261 7C8802A6 +38A00004 3D808038 +618CFD54 7D8903A6 +4E800421 3FE08000 +63FF5614 83FF0000 +38600000 38800000 +3D80803A 618C6754 7D8903A6 4E800421 -3FE08000 63FF5614 -83FF0000 38600000 -38800000 3D80803A -618C6754 7D8903A6 -4E800421 7C7C1B78 -939F0008 38800001 -989C0049 38800000 -989C004A C03D0000 -D03C0008 C03D0004 -D03C0024 D03C0028 -7F83E378 389D0090 -38A00000 C03D0044 -C05D003C C07D0040 -38FD0098 3D808000 -618C56B4 7D8903A6 -4E800421 C07D004C -480000F9 C07D0050 -480000F1 C07D0054 -480000E9 7F83E378 -389D008C 38A00000 -C03D0068 C05D003C -C07D006C 38FD0098 +7C7C1B78 939F0008 +38800001 989C0049 +38800000 989C004A +C03D0000 D03C0008 +C03D0004 D03C0024 +D03C0028 7F83E378 +389D005C 38A00000 +C03D0010 C05D0008 +C07D000C 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -7F83E378 389D008C -38A00000 C03D0068 -C05D003C C07D0070 -38FD0098 3D808000 +C07D0018 480000F9 +C07D001C 480000F1 +C07D0020 480000E9 +7F83E378 389D0058 +38A00000 C03D0034 +C05D0008 C07D0038 +38FD0064 3D808000 618C56B4 7D8903A6 4E800421 7F83E378 -389D008C 38A00000 -C03D0044 C05D0078 -C07D0074 38FD0098 +389D0058 38A00000 +C03D0034 C05D0008 +C07D003C 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -7F83E378 389D0090 -38A00000 C03D0044 -C05D007C C07D0074 -38FD0098 3D808000 -618C56B4 7D8903A6 -4E800421 C07D0058 -480000AD C07D005C -480000A5 C07D0060 -4800009D C07D0064 -48000095 BA810008 -800100B4 382100B0 -7C0803A6 48000A78 -7C0802A6 90010004 -9421FF50 BE810008 -FDA01890 7F83E378 -389D0090 38A00000 -C03D0068 C05D0048 -38FD0098 3D808000 +7F83E378 389D0058 +38A00000 C03D0010 +C05D0044 C07D0040 +38FD0064 3D808000 618C56B4 7D8903A6 4E800421 7F83E378 -389D0090 38A00000 -C03D0080 C05D003C -FC606890 38FD0098 +389D005C 38A00000 +C03D0010 C05D0048 +C07D0040 38FD0064 3D808000 618C56B4 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7F83E378 -389D0094 38A00000 -C03D0068 C05D003C -38FD0098 3D808000 +C07D0024 480000AD +C07D0028 480000A5 +C07D002C 4800009D +C07D0030 48000095 +BA8100B0 800100E4 +382100E0 7C0803A6 +48000634 7C0802A6 +90010004 9421FF20 +BE8100B0 D0610008 +7F83E378 389D005C +38A00000 C03D0034 +C05D0014 38FD0064 +3D808000 618C56B4 +7D8903A6 4E800421 +7F83E378 389D005C +38A00000 C03D004C +C05D0008 C0610008 +38FD0064 3D808000 618C56B4 7D8903A6 -4E800421 7C7B1B78 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 4E800021 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -8363002C 4BFFFAD5 -7FA802A6 3F808000 -639C5614 839C0000 -83DC0000 835C0008 -38FD0163 3CC0804A -60C60740 38800000 -38A00000 7C66222E -7C672B2E 38840003 -38A50002 2C050012 -4180FFEC 806DB620 -38810080 38A00024 -38C0FFFF 3D808001 -618C1E24 7D8903A6 -4E800421 80610080 -3D808036 618CF644 +9421FF20 BE8100B0 +7F83E378 389D0060 +38A00000 C03D0034 +C05D0008 38FD0064 +3D808000 618C56B4 +7D8903A6 4E800421 +7C7B1B78 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +4E800021 7C0802A6 +90010004 9421FF20 +BE8100B0 8363002C +4BFFFB09 7FA802A6 +3F808000 639C5614 +839C0000 83DC0000 +835C0008 38FD012F +3CC0804A 60C60740 +38800000 38A00000 +7C66222E 7C672B2E +38840003 38A50002 +2C050012 4180FFEC +806DB620 38810080 +38A00024 38C0FFFF +3D808001 618C1E24 7D8903A6 4E800421 -80610080 38800000 -80BC0004 80A50008 -38C00000 3D808036 -618CFA10 7D8903A6 -4E800421 C022AEC4 -886DAFA0 2C030003 -40820008 C022AEC8 80610080 3D808036 -618CF934 7D8903A6 +618CF644 7D8903A6 4E800421 80610080 -3D808037 618C0780 -7D8903A6 4E800421 -38800000 38BD00B6 +38800000 80BC0004 +80A50008 38C00000 +3D808036 618CFA10 +7D8903A6 4E800421 +C022AEC4 886DAFA0 +2C030003 40820008 +C022AEC8 80610080 +3D808036 618CF934 +7D8903A6 4E800421 +80610080 3D808037 +618C0780 7D8903A6 +4E800421 38800000 +38BD0082 887E0000 +2C030004 4181004C +886DAFA0 2C030001 +41820020 2C030002 +41820020 2C030000 +41820020 2C030003 +41820020 48000024 +38DD0065 48000020 +38DD006E 48000018 +38DD0075 48000010 +38DD007C 48000008 +38BD0142 480003D9 887E0000 2C030004 -4181004C 886DAFA0 -2C030001 41820020 -2C030002 41820020 -2C030000 41820020 -2C030003 41820020 -48000024 38DD0099 -48000020 38DD00A2 -48000018 38DD00A9 -48000010 38DD00B0 -48000008 38BD0176 -4800081D 887E000A -2C030000 4182001C -3B1E0015 7C791B78 -887C0018 38630001 -987C0018 48000014 -887E000B 2C030000 -418201BC 7C791B78 -887C0019 2C030009 -40810010 38600000 -987C0019 418201A0 -386000B7 3880007F -38A00040 3D808002 -618C37A8 7D8903A6 -4E800421 887C0017 -38630001 987C0017 -3860000D 3D808037 -618CF1E4 7D8903A6 -4E800421 7C771B78 -3880001C 3D808000 -618CC160 7D8903A6 -4E800421 38600014 -38800000 98770000 -98970001 7F23CB78 -98770002 887C0019 -98770003 38630001 -987C0019 887E000C -98770008 7F83E378 -90770009 38600004 -38800005 38A00080 -3D808039 618C01F0 -7D8903A6 4E800421 -7C761B78 807C0004 -80630004 80630000 -3D808037 618C0E44 -7D8903A6 4E800421 -7C651B78 7EC3B378 -888DC1A9 3D808039 -618C0A70 7D8903A6 -4E800421 7EC3B378 -3C808039 60841070 -38A00003 38C00080 -3D808039 618C069C -7D8903A6 4E800421 -80760028 809C0004 -80840004 38A00000 -3D808016 618C895C -7D8903A6 4E800421 -80760028 C022AE28 -3D808036 618CF8BC -7D8903A6 4E800421 -886DAFE0 2C030000 -41820010 C03D0014 -80760028 D0230038 -7EC3B378 38800004 -3CA08037 60A5F1B0 -7EE6BB78 3D808039 -618C0B68 7D8903A6 -4E800421 7EC3B378 -480003E1 7C8802A6 -38A00004 3D808038 -618CFD54 7D8903A6 -4E800421 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BD017C 38800009 -48000615 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BE00B0 3880000A -480005F5 887E0000 -2C030004 4182000C -38BD0098 48000008 -38BD0185 38800008 -480005D5 887E0000 -2C030004 41820034 -2C030005 41820020 -2C030000 4181000C -38BD0098 48000024 -38BD0197 38DD01BD -48000018 38BD0197 -38DD01C4 4800000C -38BD01A5 38DD01B2 -38800007 48000589 -3B600001 7F64DB78 -38BD0098 48000579 -3B7B0002 2C1B0005 -4081FFEC 3880000C -38600000 7C7C21AE -38840001 2C04000E -4081FFF4 3B60000B -7F64DB78 38BD0098 -48000545 3B7B0001 -2C1B000E 4081FFEC -887E0000 2C030005 -408200A8 3B60000B -3B200000 3B000000 -3AE00000 3ADE0117 -7EB6C8AE 56A00631 -41820010 3B390002 -3B180001 48000018 -2C150020 40820008 -7F37CB78 3B390001 -3B180001 2C150000 -41820018 2C18001E -41810008 4800002C -38800000 7C96B9AE -7F64DB78 7EC5B378 -480004C5 3B7B0001 -7ED6BA14 3AD60001 -3B200000 3B000000 -2C150000 41820020 -387E0208 7C96CA14 -7C041800 40800010 -2C1B000E 41810008 -4BFFFF78 4800014C -3B600001 886DB657 -7F64DB78 2C030000 -40820018 38BD00BE -4800046D 38600001 -987C000C 48000124 -38BD00D4 48000459 -3B7B0002 38600002 -987C000C 887E0001 -7F64DB78 2C030000 -40820080 886DAFA0 -2C030002 41800034 +4182000C 38BD0064 +48000008 38BD0148 +38800009 480003B9 887E0000 2C030004 -40820028 886DAFC9 -2C030000 4082001C -886DAFCA 2C030000 -40820010 38BD00E7 -38DD0113 48000034 -38BD00E7 38DD00F9 +4182000C 38BD0064 +48000008 38BE00B0 +3880000A 48000399 887E0000 2C030004 -41820020 38BD00E7 -38DD010C 886DAFA0 -2C030002 4180000C -38BD00E7 38DD0101 -480003CD 38600001 -987C000D 48000084 -38BD0120 480003B9 -3B7B0002 38600002 -987C000D 887E0000 -7F64DB78 2C030004 -4182004C 2C030003 -41820024 88ADAFA0 -2C050001 38BD012A -38DD015A 41820038 -38BD012A 38DD0163 -4800002C 88ADAFA0 -2C050001 38BD013B -38DD015A 41820018 -38BD013B 38DD0163 -4800000C 38BD014C -38DD015A 48000349 -38600001 987C000E -3B20000C 3B600002 -7C7CC8AE 2C030001 -40820044 A07C000F -3880000F 7C632396 -1C630003 386301D0 -7CBD1A14 7F64DB78 -4800030D 7F43D378 -7F64DB78 38BD0088 -3D80803A 618C74F0 -7D8903A6 4E800421 -48000044 2C030002 -40820030 7F64DB78 -38BD01D6 480002D9 +4182000C 38BD0064 +48000008 38BD0151 +38800008 48000379 +887E0000 2C030004 +41820034 2C030005 +41820020 2C030000 +4181000C 38BD0064 +48000024 38BD0163 +38DD0189 48000018 +38BD0163 38DD0190 +4800000C 38BD0171 +38DD017E 38800007 +4800032D 3B600001 +7F64DB78 38BD0064 +4800031D 3B7B0002 +2C1B0005 4081FFEC +3880000C 38600000 +7C7C21AE 38840001 +2C04000E 4081FFF4 +3B60000B 7F64DB78 +38BD0064 480002E9 +3B7B0001 2C1B000E +4081FFEC 887E0000 +2C030005 408200A8 +3B60000B 3B200000 +3B000000 3AE00000 +3ADE016B 7EB6C8AE +56A00631 41820010 +3B390002 3B180001 +48000018 2C150020 +40820008 7F37CB78 +3B390001 3B180001 +2C150000 41820018 +2C18001E 41810008 +4800002C 38800000 +7C96B9AE 7F64DB78 +7EC5B378 48000269 +3B7B0001 7ED6BA14 +3AD60001 3B200000 +3B000000 2C150000 +41820020 387E025C +7C96CA14 7C041800 +40800010 2C1B000E +41810008 4BFFFF78 +4800015C 3B600001 +886DB657 7F64DB78 +2C030000 40820018 +38BD008A 48000211 +38600001 987C000C +48000134 38BD00A0 +480001FD 3B7B0002 +38600002 987C000C +887E0001 7F64DB78 +2C030000 40820080 +886DAFA0 2C030002 +41800034 887E0000 +2C030004 40820028 +886DAFC9 2C030000 +4082001C 886DAFCA +2C030000 40820010 +38BD00B3 38DD00DF +48000034 38BD00B3 +38DD00C5 887E0000 +2C030004 41820020 +38BD00B3 38DD00D8 +886DAFA0 2C030002 +4180000C 38BD00B3 +38DD00CD 48000171 +38600001 987C000D +48000094 38BD00EC +4800015D 3B7B0002 +38600002 987C000D +887E0000 7F64DB78 +2C030004 4182005C +2C030003 4182002C +38BD00F6 38DD0126 +896DAFA0 2C0B0001 +41820048 2C0B0000 +41820040 38BD00F6 +38DD012F 48000034 +38BD0107 38DD0126 +896DAFA0 2C0B0001 +41820020 2C0B0000 +41820018 38BD0107 +38DD012F 4800000C +38BD0118 38DD0126 +480000DD 38600001 +987C000E 3B20000C +3B600002 7C7CC8AE +2C030001 40820044 +A07C000F 3880000F +7C632396 1C630003 +3863019C 7CBD1A14 +7F64DB78 480000A1 7F43D378 7F64DB78 -38BD0084 3D80803A +38BD0054 3D80803A 618C74F0 7D8903A6 -4E800421 48000010 -7F64DB78 38BD0098 -480002AD 3B7B0002 -3B390001 2C19000E -4081FF68 A07C000F -38630001 2C03001E -41800008 38600000 -B07C000F BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C6E1B78 -7C0802A6 90010004 -9421FF50 BE810008 -4BFFF3D1 7FA802A6 -820E002C 8A300000 -8A500001 8A700002 -8A900003 82B00004 -8AF00008 83900009 -81EE0028 81EF0010 -7DE37B78 3D808037 -618C0928 7D8903A6 -4E800421 2C150000 -408200CC 7E83A378 -3D808000 618C55F4 -7D8903A6 4E800421 -C05D0018 C07D0008 -EC6100F2 EC421828 -D04F003C 2C120000 -4182009C 3A2000AA -9A300000 3A400001 -9A500001 7C962378 -7E83A378 3D808000 -618C55F4 7D8903A6 -4E800421 C05D0030 -C07D0008 EC6100F2 -EC42182A FDE01090 -806DC2DC 38800003 -9883000E C03D002C -886DAFE0 2C030000 -41820008 C03D0028 -38770001 7E649B78 -38A00002 38C00000 -C07D0034 C09D0038 -3D808000 618C56B4 -7D8903A6 4E800421 -90700004 806DC2DC -38800001 9883000E -48000004 887C0017 -2C03000D 41800028 -887C0019 7C03A000 -4080000C 2C140009 -408100B4 887C0019 -7C741850 2C03000D -418100A4 2C110000 -4082001C 2C120000 -4182FF2C 2C120001 -41820018 2C120002 -41820084 3A31FFFF -9A300000 480000D4 -3A400002 9A500001 -3A200014 9A300000 -806E0028 809C0004 -80840004 38A00001 -3D808016 618C895C -7D8903A6 4E800421 -806E0028 C022AE28 -3D808036 618CF8BC -7D8903A6 4E800421 -8075005C 3D808037 -618CF1B0 7D8903A6 -4E800421 7EA3AB78 -3D80803A 618C5CC4 -7D8903A6 4E800421 -48000060 7DC37378 -3D808039 618C0228 +4E800421 48000044 +2C030002 40820030 +7F64DB78 38BD01A2 +4800006D 7F43D378 +7F64DB78 38BD0050 +3D80803A 618C74F0 7D8903A6 4E800421 -809C0000 88840003 -7C172000 40820010 -887C0018 3863FFFF -987C0018 887C0017 -3863FFFF 987C0017 -887C0019 7E84A378 -38840001 7C032000 -41820008 4800000C -38600000 987C0019 -BA810008 800100B4 -382100B0 7C0803A6 +48000010 7F64DB78 +38BD0064 48000041 +3B7B0002 3B390001 +2C19000E 4081FF68 +A07C000F 38630001 +2C03001E 41800008 +38600000 B07C000F +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7F43D378 +90010004 9421FF20 +BE8100B0 7F43D378 3D80803A 618C70A0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 80CDB638 60000000 00000000 C2262004 0000000B #Online/Menus/CSS/PreventAPressCharUnselect.asm @@ -3095,7 +3311,7 @@ C22600A8 0000000B #Online/Menus/CSS/PreventColorChange.asm 618C028C 7D8903A6 4E800420 3C60803F 60000000 00000000 -C226699C 00000029 #Online/Menus/CSS/SceneLoadCSS.asm +C226699C 00000028 #Online/Menus/CSS/SceneLoadCSS.asm 4800002C 4E800021 C2E00000 41A00000 00000000 3DCCCCCD @@ -3104,9 +3320,9 @@ C2E00000 41A00000 53000000 900DB638 3C608048 80639D30 5463443E 2C030008 -40820100 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFFB1 +408200F8 7C0802A6 +90010004 9421FF20 +BE8100B0 4BFFFFB1 7FC802A6 3D808000 618C5618 7D8903A6 4E800421 7C6802A6 @@ -3118,15 +3334,14 @@ BE810008 4BFFFFB1 3D808000 618CC160 7D8903A6 4E800421 3C608000 60635614 -93E30000 38600340 +93E30000 386003C7 3D808037 618CF1E4 7D8903A6 4E800421 907F0000 886DAFA0 -2C030003 40820030 +2C030003 40820028 3C608026 606352F4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7C632214 88630008 987F001A 387E0010 3D808001 618C6BE0 @@ -3134,10 +3349,10 @@ BE810008 4BFFFFB1 389E001B 3D808038 618C0358 7D8903A6 4E800421 907F0004 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 -C2264118 0000001C #Online/Menus/CSS/SkipReturnToCssSound.asm +C2264118 0000001B #Online/Menus/CSS/SkipReturnToCssSound.asm 7C0802A6 90010004 9421FF00 BC610008 886DAFA3 2C030000 @@ -3147,12 +3362,11 @@ C2264118 0000001C #Online/Menus/CSS/SkipReturnToCssSound.asm 8BC30001 3D808037 618CF1B0 7D8903A6 4E800421 2C1E0000 -40820060 4800007C +40820058 48000074 38600000 986DAFA3 3C608023 6063CCA4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7C632214 83E3000C 807F0006 3D808037 618CF1B0 7D8903A6 @@ -3168,7 +3382,7 @@ B8610008 80010104 80630020 00000000 C2262478 00000014 #Online/Menus/CSS/Teams/AnimateCursorPort.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FC08000 63DE5614 83DE0000 3C608048 80639D30 5463443E @@ -3181,15 +3395,15 @@ C2262478 00000014 #Online/Menus/CSS/Teams/AnimateCursorPort.asm 7FE3FB78 3D808000 618C55F4 7D8903A6 4E800421 48000004 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 8061003C 38800006 38A00400 3CC08036 60C6410C 38E00001 60000000 00000000 C2262768 0000000D #Online/Menus/CSS/Teams/AnimateToken.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3F808000 639C5614 839C0000 3C608048 80639D30 5463443E @@ -3198,10 +3412,10 @@ C2262768 0000000D #Online/Menus/CSS/Teams/AnimateToken.asm 40820018 8B7C001A 2C1B0003 41820008 3B7BFFFF 9B7D0006 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 387C0000 00000000 -C22652F4 000000B6 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm +C22652F4 000000B8 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm 48000030 4E800021 01C02000 00C0A000 00C1BC00 00C18C00 @@ -3210,12 +3424,13 @@ C22652F4 000000B6 #Online/Menus/CSS/Teams/InitTeamToggleButton.asm 003DCCCC CD000000 3C608048 80639D30 5463443E 2C030008 -40820550 888DAFA0 -2C040003 40820544 +40820560 888DAFA0 +2C040003 40820554 7C0802A6 90010004 -9421FF50 BE810008 +9421FF10 BE8100B0 +DBE100E0 DBC100E8 3FC08000 63DE5614 -83DE0000 4BFFFF99 +83DE0000 4BFFFF91 7FE802A6 C3FF0011 C3DF0015 38600004 3D808037 618CF1E4 @@ -3265,10 +3480,10 @@ FC20F890 3D808036 7EE6BB78 3D808039 618C0B68 7D8903A6 4E800421 7E83A378 -480000B5 7C8802A6 +480000BD 7C8802A6 38A00004 3D808038 618CFD54 7D8903A6 -4E800421 480001F9 +4E800421 48000201 806DB620 38810034 38A0002B 38C0FFFF 3D808001 618C1E24 @@ -3285,18 +3500,19 @@ FC20F890 3D808036 80630008 FC20F890 3D808036 618C3C2C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 CBE100E0 +CBC100E8 800100F4 +382100F0 7C0803A6 480002E8 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C741B78 82B40028 886DB656 2C030000 40820098 3FC08000 63DE5614 83DE0000 807E0000 88630001 2C030000 4082007C -4BFFFD15 7FE802A6 +4BFFFD05 7FE802A6 3BA00000 3C80804A 60840BC0 80840000 C024000C C0440010 @@ -3311,11 +3527,11 @@ FC013040 4181002C 1C630044 7C641A14 80630008 546305EF 41820008 48000019 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 3D808000 +90010004 9421FF20 +BE8100B0 3D808000 618C56B8 7D8903A6 4E800421 7C651B78 38600000 1C630024 @@ -3329,11 +3545,11 @@ BE810008 3D808000 4800002D 38600002 3D808002 618C4030 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 808DB610 +90010004 9421FF20 +BE8100B0 808DB610 886DB650 1C630024 7F841A14 887C0070 7C7B1B78 8B3E001A @@ -3362,11 +3578,11 @@ BE810008 808DB610 7F05C378 38C00000 3D808000 618C56BC 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7C791B78 +90010004 9421FF20 +BE8100B0 7C791B78 2C190003 4182001C 2C190002 4182000C 2C190001 41820014 @@ -3377,8 +3593,8 @@ BE810008 7C791B78 7C632A14 98830000 38600000 3D808025 618CDB34 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 38600000 38980000 3D80803A 618C6754 @@ -3386,7 +3602,7 @@ BE810008 7C791B78 60000000 00000000 C2260C28 0000001C #Online/Menus/CSS/Teams/PreventColorResetCharHover.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FE08000 63FF5614 83FF0000 3C608048 80639D30 5463443E @@ -3409,8 +3625,8 @@ C2260C28 0000001C #Online/Menus/CSS/Teams/PreventColorResetCharHover.asm 7C7B1B78 80ADB610 9B650073 3CA0803F 60A50E09 9B650000 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 9E9803C2 60000000 00000000 C2260E14 00000003 #Online/Menus/CSS/Teams/PreventColorResetLastChar.asm @@ -3419,7 +3635,7 @@ C2260E14 00000003 #Online/Menus/CSS/Teams/PreventColorResetLastChar.asm 60000000 00000000 C2260B90 0000001A #Online/Menus/CSS/Teams/PreventColorResetRandomChar.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3FE08000 63FF5614 83FF0000 3C608048 80639D30 5463443E @@ -3440,13 +3656,13 @@ C2260B90 0000001A #Online/Menus/CSS/Teams/PreventColorResetRandomChar.asm 7F65DB78 38C00000 3D808000 618C56BC 7D8903A6 4E800421 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 38000000 60000000 00000000 C2260C88 00000018 #Online/Menus/CSS/Teams/PreventWrongCSPOnCharSelect.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C9D2378 7C7B1B78 3FE08000 63FF5614 83FF0000 3C608048 @@ -3465,8 +3681,8 @@ C2260C88 00000018 #Online/Menus/CSS/Teams/PreventWrongCSPOnCharSelect.asm 3D808000 618C56BC 7D8903A6 4E800421 48000004 7FA4EB78 -7F63DB78 BA810008 -800100B4 382100B0 +7F63DB78 BA8100B0 +800100E4 382100E0 7C0803A6 98830070 60000000 00000000 0423C710 28030007 #Online/Menus/CSS/TextEntryScreen/Allow8Characters.asm @@ -3493,86 +3709,85 @@ C223E290 00000006 #Online/Menus/CSS/TextEntryScreen/AlwaysUseEnglishWhenDirect3. 618CAE90 7D8903A6 4E800421 00000000 C223CCA4 00000045 #Online/Menus/CSS/TextEntryScreen/CheckTriggersAndZ.asm -48000014 4E800021 -48000100 00000000 -00000000 57400633 -41820014 3D808023 -618CCCAC 7D8903A6 -4E800420 7C0802A6 -90010004 9421FF50 -BE810008 7C9A2378 -4BFFFFC5 7C6802A6 -83E30004 83DF0006 -886DB56C 5463063E -3D80801A 618C36A0 +48000010 4E800021 +480000FC 00000000 +57400633 41820014 +3D808023 618CCCAC +7D8903A6 4E800420 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C9A2378 4BFFFFC9 +7C6802A6 83E30004 +83DF0006 886DB56C +5463063E 3D80801A +618C36A0 7D8903A6 +4E800421 548006F7 +41820194 7F44D378 +889C0058 1C840003 +7C64F22E 2C030000 +4082001C 38600003 +3D808002 618C4030 7D8903A6 4E800421 -548006F7 41820194 -7F44D378 889C0058 -1C840003 7C64F22E -2C030000 4082001C -38600003 3D808002 -618C4030 7D8903A6 -4E800421 48000048 -38600001 3D808002 -618C4030 7D8903A6 -4E800421 887E0019 -987F0004 2C030007 -40810008 38600007 -987C0058 38600039 -B07A0002 3D808023 -618CCE4C 7D8903A6 -4E800421 7F44D378 -BA810008 800100B4 -382100B0 7C0803A6 -3D808023 618CCCFC -7D8903A6 4E800420 -7C0802A6 90010004 -9421FF50 BE810008 -7C7D1B78 886DAFA3 -2C030000 418200C8 -4BFFFEDD 7C6802A6 -83E30004 83DF0006 -386000BE 987E0000 -387E0001 3C80804A -60840740 38A00018 -3D808000 618C31F4 +48000048 38600001 +3D808002 618C4030 7D8903A6 4E800421 -887F0004 987E0019 -807F0000 907E001A -9BBE001E 886DAFA0 -987E001F 7FC3F378 -38800020 38A00001 -3D808000 618C55F0 +887E0019 987F0004 +2C030007 40810008 +38600007 987C0058 +38600039 B07A0002 +3D808023 618CCE4C 7D8903A6 4E800421 -7FC3F378 3880001E -38A00000 3D808000 -618C55F0 7D8903A6 -4E800421 3C60804A -60630740 389E0001 +7F44D378 BA8100B0 +800100E4 382100E0 +7C0803A6 3D808023 +618CCCFC 7D8903A6 +4E800420 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7D1B78 +886DAFA3 2C030000 +418200C8 4BFFFEE1 +7C6802A6 83E30004 +83DF0006 386000BE +987E0000 387E0001 +3C80804A 60840740 38A00018 3D808000 618C31F4 7D8903A6 -4E800421 807E001A -907F0000 3D808023 -618CCE4C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -7F44D378 BA810008 -800100B4 382100B0 -7C0803A6 3D808023 -618CCD34 7D8903A6 -4E800420 00000000 +4E800421 887F0004 +987E0019 807F0000 +907E001A 9BBE001E +886DAFA0 987E001F +7FC3F378 38800020 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 7FC3F378 +3880001E 38A00000 +3D808000 618C55F0 +7D8903A6 4E800421 +3C60804A 60630740 +389E0001 38A00018 +3D808000 618C31F4 +7D8903A6 4E800421 +807E001A 907F0000 +3D808023 618CCE4C +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7F44D378 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808023 618CCD34 +7D8903A6 4E800420 +60000000 00000000 0423CF9C 2C1B0008 #Online/Menus/CSS/TextEntryScreen/Display8Characters.asm -C223CF80 0000000E #Online/Menus/CSS/TextEntryScreen/HandleAutocompleteText.asm +C223CF80 0000000D #Online/Menus/CSS/TextEntryScreen/HandleAutocompleteText.asm 48000010 4E800021 00000000 8E9196FF 88CDAFA3 2C060000 -4182004C 4BFFFFE9 +41820044 4BFFFFE9 7CC802A6 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7CE32214 +5485302E 38800040 +7C8523D6 7CE32214 80E7000C 88E70004 7C1B3800 4180000C 3BA60004 48000008 @@ -3586,16 +3801,15 @@ C223B3D0 00000006 #Online/Menus/CSS/TextEntryScreen/HandleDescriptionText.asm 48000008 7FE4FB78 60000000 00000000 0423C6C0 4800004C #Online/Menus/CSS/TextEntryScreen/HandleJpSpace.asm -C223E994 00000027 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm +C223E994 00000026 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm 886DAFA3 2C030000 -41820128 38600001 +41820120 38600001 986DAFCB 48000004 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C608023 6063CCA4 -80830000 5485863E -7CA50774 54A5801E -5484043A 7C842B78 +80830000 5485302E +38800040 7C8523D6 7F232214 3860000A 3D808037 618CF1E4 7D8903A6 4E800421 @@ -3622,30 +3836,28 @@ C223E994 00000027 #Online/Menus/CSS/TextEntryScreen/InitNameEntry.asm 60841070 38A00004 38C00080 3D808039 618C069C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 48000004 38600000 00000000 -C223C588 0000000C #Online/Menus/CSS/TextEntryScreen/NameEntryThinkOneShot.asm +C223C588 0000000B #Online/Menus/CSS/TextEntryScreen/NameEntryThinkOneShot.asm 886DAFA3 2C030000 -41820050 3C608023 +41820048 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7CC32214 +5485302E 38800040 +7C8523D6 7CC32214 80E6000C 88670005 2C030000 4082001C 38600001 98670005 38660008 7C6903A6 38600003 4E800421 886DB56C 00000000 -C223CD74 00000011 #Online/Menus/CSS/TextEntryScreen/OnBPressAutoComplete.asm +C223CD74 00000010 #Online/Menus/CSS/TextEntryScreen/OnBPressAutoComplete.asm 886DAFA3 2C030000 -41820074 3C608023 +4182006C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050000 40810030 38A5FFFF 98A40004 @@ -3661,21 +3873,20 @@ C223CA50 00000003 #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonAPress.asm 3D808023 618CCC14 7D8903A6 4E800420 60000000 00000000 -C223CC14 0000001D #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonHandler.asm +C223CC14 0000001C #Online/Menus/CSS/TextEntryScreen/OnConfirmButtonHandler.asm 886DAFA3 2C030000 -418200D8 7C0802A6 -90010004 9421FF50 -BE810008 3C608023 +418200D0 7C0802A6 +90010004 9421FF20 +BE8100B0 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 83E3000C 887F0004 2C030000 40820038 38600003 3D808002 618C4030 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 3D808023 618CCE38 7D8903A6 4E800420 887F0004 @@ -3686,18 +3897,17 @@ BE810008 3C608023 7D8903A6 4E800421 3860FFFE 818DAFE8 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808023 618CCC80 7D8903A6 4E800420 38000000 00000000 -C223C33C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm +C223C33C 0000000D #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm 886DAFA3 2C030000 -41820054 3C608023 +4182004C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050008 4080000C 38A50001 98A40004 @@ -3706,13 +3916,12 @@ C223C33C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterJpText.asm 48000014 3D808023 618CCE4C 7D8903A6 4E800421 00000000 -C223C72C 0000000E #Online/Menus/CSS/TextEntryScreen/OnEnterText.asm +C223C72C 0000000D #Online/Menus/CSS/TextEntryScreen/OnEnterText.asm 886DAFA3 2C030000 -41820054 3C608023 +4182004C 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 88A40004 2C050008 4080000C 38A50001 98A40004 @@ -3725,37 +3934,34 @@ C223C81C 00000003 #Online/Menus/CSS/TextEntryScreen/OnErasePress.asm 3D808023 618CCD3C 7D8903A6 4E800420 60000000 00000000 -C223CCBC 0000000B #Online/Menus/CSS/TextEntryScreen/OnLPress.asm +C223CCBC 0000000A #Online/Menus/CSS/TextEntryScreen/OnLPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 38630008 7C6903A6 38600001 4E800421 3D808023 618CCE38 7D8903A6 4E800420 887C0050 00000000 -C223CCE0 0000000B #Online/Menus/CSS/TextEntryScreen/OnRPress.asm +C223CCE0 0000000A #Online/Menus/CSS/TextEntryScreen/OnRPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 38630008 7C6903A6 38600002 4E800421 3D808023 618CCE38 7D8903A6 4E800420 887C0050 00000000 -C223C928 0000000D #Online/Menus/CSS/TextEntryScreen/OnRandomPress.asm +C223C928 0000000C #Online/Menus/CSS/TextEntryScreen/OnRandomPress.asm 886DAFA3 2C030000 -41820048 3C608023 +41820040 3C608023 6063CCA4 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 +5485302E 38800040 +7C8523D6 7C632214 8083000C 9BA40004 9BBC0058 38830008 7C8903A6 38600003 @@ -3773,62 +3979,71 @@ C23786A4 00000009 #Online/Menus/Hacks/VsSplashRumbleHack.asm 618C86AC 7D8903A6 4E800420 28000000 60000000 00000000 -C216E9B4 000000B3 #Online/Menus/InGame/InitInGame.asm +C22F6694 000000BD #Online/Menus/InGame/InitInGame.asm 3C608048 80639D30 5463443E 2C030208 -40820580 480000A8 +408205C8 480000AC 4E800021 00000000 -3DCCCCCD 43870000 -434F0000 3EA8F5C3 -3EA8F5C3 000000FF -3F1EB852 3F466666 -C1C07AE1 3C6F34D7 -3F4CCCCD 41A51EB8 -00000000 3D75C28F -43160000 3F0A3D71 -00000000 44656C61 -793A2025 64660000 -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 +3DCCCCCD 3DCCCCCD +43870000 434F0000 +3EA8F5C3 3EA8F5C3 +000000FF 3F1EB852 +3F466666 C1C07AE1 +3C6F34D7 3F4CCCCD +41A51EB8 00000000 +3D75C28F 43160000 +3F0A3D71 00000000 +44656C61 793A2025 +64660000 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +7C7F1B78 880DB6CC +2C000001 41820018 +7FE3FB78 3D808039 +618C10D8 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +7C0802A6 90010004 +9421FF20 BE8100B0 +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 -7FA3EB78 4BFFFF25 -7C8802A6 38A00008 -3D808039 618C075C -7D8903A6 4E800421 -3C600000 60631000 -907D0024 38600002 -7FA4EB78 38A00009 -38C0000D 38E00000 -3900000C 39200050 -39400008 3D80803A -618C611C 7D8903A6 -4E800421 7C7F1B78 -83CDB61C 93FE07B8 -4BFFFE69 7F8802A6 +7C7F1B78 83CDB61C +93FE090E 4BFFFE65 +7F8802A6 38600002 +7FE4FB78 3D80803A +618C6754 7D8903A6 +4E800421 7C7D1B78 +38800001 989D0049 +38800001 989D004A +C03C0000 D03D0008 +C03C0008 D03D0024 +D03D0028 93BE0912 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7A1B78 @@ -3840,13 +4055,13 @@ BE810008 3C60804D 989D004A C03C0000 D03D0008 C03C0004 D03D0024 D03D0028 -C03C0008 C05C000C -7FA3EB78 389C0048 -88BE001B 3D80803A +C03C000C C05C0010 +7FA3EB78 389C004C +88BE0021 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 -38800000 C03C0010 -C05C0010 3D80803A +38800000 C03C0014 +C05C0014 3D80803A 618C7548 7D8903A6 4E800421 3A800000 3EA0804A 62B50FF0 @@ -3863,21 +4078,21 @@ C0230000 D0210070 7C7D1B78 38800001 989D0048 989D004A 989D004C 989D0049 -C03C0038 D03D0024 +C03C003C D03D0024 D03D0028 C0210070 -C05C002C EC21102A -D03D0000 C03C0030 -D03D0004 C03C0034 -D03D0008 C03C003C +C05C0030 EC21102A +D03D0000 C03C0034 +D03D0004 C03C0038 +D03D0008 C03C0040 D03D000C D03D0010 -4CC63242 C03C0044 -C05C0044 7FA3EB78 +4CC63242 C03C0048 +C05C0048 7FA3EB78 389A0034 1CB4001F 7C842A14 3D80803A 618C6B98 7D8903A6 4E800421 7FA3EB78 -38800000 C03C0040 -C05C0040 3D80803A +38800000 C03C0044 +C05C0044 3D80803A 618C7548 7D8903A6 4E800421 3860000E 3880000F 38A00000 @@ -3898,10 +4113,10 @@ C05C0040 3D80803A 4E800421 7E83A378 3D80802F 618C3424 7D8903A6 4E800421 -C0230000 C05C0020 +C0230000 C05C0024 EC21102A D0360038 -C03C0024 D036003C -C03C001C D0360030 +C03C0028 D036003C +C03C0020 D0360030 7EC3B378 38810080 38A00001 38C0FFFF 3D808001 618C1E24 @@ -3913,8 +4128,8 @@ C03C001C D0360030 80630004 80830014 60840001 90830014 80630004 80630008 -8063000C C03C0014 -D023000C 809C0018 +8063000C C03C0018 +D023000C 809C001C 90830004 3B200000 807D005C 38800000 3D80803A 618C6FEC @@ -3944,15 +4159,16 @@ D023000C 809C0018 3C004330 C84298A8 6F238000 90010080 90610084 C8210080 -EC211028 C05C0028 +EC211028 C05C002C EC2100B2 D036002C 3A940001 2C140006 4180FCF8 7F43D378 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -8001001C 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +8001001C 83E10014 +60000000 00000000 043A69C0 4800003C #Online/Menus/InGame/ParseNumbersBetter.asm C225B8A4 00000006 #Online/Menus/SSS/DisableLRSTART.asm 3C608048 80639D30 @@ -3982,19 +4198,18 @@ C222B044 00000006 #Online/Menus/TitleMenu/AllowSwapToSameSubmenu.asm 7D8903A6 4E800420 38600000 986DAFA2 60000000 00000000 -C22299F0 00000019 #Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm -2C030008 408200B8 +C22299F0 00000018 #Online/Menus/TitleMenu/HandleOnlineLockedOptions.asm +2C030008 408200B0 886DAFA1 2C030000 41820014 2C030001 41820040 2C030002 -41820054 2C040000 -41820080 2C040001 -41820078 2C040002 -41820070 2C040003 -41820068 2C040005 -41820060 2C040006 -41820058 48000068 -2C040000 4182004C +4182004C 2C040000 +41820078 2C040001 +41820070 2C040002 +41820068 2C040003 +41820060 2C040005 +41820058 2C040006 +41820050 48000060 2C040004 41820044 2C040006 4182003C 4800004C 2C040000 @@ -4014,7 +4229,7 @@ C34C0000 C31D0000 41880000 3D75C28F 4E800021 01000000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFFD5 7C6802A6 38800001 3D808000 618C5618 7D8903A6 @@ -4046,23 +4261,23 @@ C34C0000 C31D0000 7D8903A6 4E800421 7F83E378 3D808037 618CF1B0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 B9C10408 60000000 00000000 -C21B1040 00000165 #Online/Menus/TitleMenu/OnMenuPrep.asm +C21B1040 00000167 #Online/Menus/TitleMenu/OnMenuPrep.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 480000B5 7C6802A6 3C80803D 6084D908 90640000 3C60803E 6063B750 48000209 7C8802A6 90830010 -480005AD 7C8802A6 +4800059D 7C8802A6 38A00010 3D808000 618C31F4 7D8903A6 4E800421 3C60803E -6063B750 4800059D +6063B750 4800058D 7C8802A6 90830008 3C60803E 6063B66C 38800644 B0830004 @@ -4073,9 +4288,9 @@ C21B1040 00000165 #Online/Menus/TitleMenu/OnMenuPrep.asm 39950014 7D8903A6 4E800421 3995000C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -48000A5C 4E800021 +BA8100B0 800100E4 +382100E0 7C0803A6 +48000A6C 4E800021 3D808000 618C5618 7D8903A6 4E800421 7FC802A6 38000008 @@ -4089,8 +4304,8 @@ BA810008 800100B4 3D80801B 618C136C 7D8903A6 4E800420 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 3FE0804A +90010004 9421FF20 +BE8100B0 3FE0804A 63FF04F0 3FC0803E 63DEAE68 38000005 B00DB528 3D808000 @@ -4119,19 +4334,19 @@ B00DB528 3D808000 8803000D 508026B6 9803000D 38600001 986DAFA2 7F63DB78 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF08 BDC100B0 7C731B78 80730008 -2C030000 40820354 +2C030000 40820344 3C60804A 3BA304F0 38600004 3D808022 618C9624 7D8903A6 4E800421 907D000C 3BC00000 93DD0008 -546006F7 4182018C +546006F7 4182017C 38000005 B00DB528 3BE00001 3B9E0000 9BFD0011 5783063E @@ -4147,15 +4362,13 @@ BA810008 800100B4 7D8903A6 4E800421 A01D0002 2C000000 41820038 2C000001 -41820048 2C000002 -41820048 2C000003 -41820048 2C000004 -41820048 2C000005 -4182005C 2C000006 -41820078 4800027C -38600003 3D808002 -618C4030 7D8903A6 -4E800421 48000264 +41820038 2C000002 +41820038 2C000003 +41820038 2C000004 +41820038 2C000005 +4182004C 2C000006 +41820068 4800026C +38600000 48000078 38600001 48000070 38600002 48000068 38600003 48000060 @@ -4237,16 +4450,17 @@ A09C0000 3D808022 7F6802A6 387B0004 7C6903A6 4E800421 387B0008 7C6903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 B9C100B0 +800100FC 382100F8 7C0803A6 4E800021 803EB57C 430C0000 803EB684 07000000 4E800021 06450646 0647064B 06480649 064A0000 7C0802A6 -90010004 9421FF50 -BE810008 806DB518 +90010004 9421FF10 +BE8100B0 DBE100E0 +DBC100E8 806DB518 3C80803E 6084FA0C 3D808038 618C0358 7D8903A6 4E800421 @@ -4262,9 +4476,9 @@ BE810008 806DB518 3C80803E 6084FA60 3D808038 618C0358 7D8903A6 4E800421 -7C7D1B78 48000465 -7FC802A6 C2DE0010 -C2FE0014 3AC00016 +7C7D1B78 4800047D +7FC802A6 C3FE0010 +C3DE0014 3AC00016 7EC3B378 3D808037 618CF1E4 7D8903A6 4E800421 7C771B78 @@ -4284,17 +4498,17 @@ C2FE0014 3AC00016 7F25CB78 3D808039 618C0A70 7D8903A6 4E800421 7F23CB78 -38810034 38A0000A +38810008 38A0000A 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 38800010 3D808037 618C1D9C 7D8903A6 4E800421 7F23CB78 -38810034 38A0000B +38810008 38A0000B 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 38800010 3D808037 618C1D9C 7D8903A6 4E800421 7F23CB78 @@ -4302,19 +4516,19 @@ C2FE0014 3AC00016 7FA6EB78 3D808036 618CFB5C 7D8903A6 4E800421 7F23CB78 -FC20B090 3D808036 +FC20F890 3D808036 618CF8BC 7D8903A6 4E800421 7F23CB78 -38810034 38A00006 +38810008 38A00006 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 3C80C060 60840000 90830038 7F23CB78 -38810034 38A00007 +38810008 38A00007 38C0FFFF 3D808001 618C1E24 7D8903A6 -4E800421 80610034 +4E800421 80610008 3C80405C 60840000 90830038 7F03C378 3C808039 60841070 @@ -4326,17 +4540,19 @@ FC20B090 3D808036 7EE6BB78 3D808039 618C0B68 7D8903A6 4E800421 7F03C378 -48000031 7C8802A6 +48000039 7C8802A6 38A0000F 3D808038 618CFD54 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 48000225 -7FC802A6 C2DE0010 -C2FE0014 7C781B78 +90010004 9421FF10 +BE8100B0 DBE100E0 +DBC100E8 4800022D +7FC802A6 C3FE0010 +C3DE0014 7C781B78 83380028 8358002C 8B7A0000 839A0001 83BA0005 7F23CB78 @@ -4350,26 +4566,26 @@ C07E0008 C09E000C 3D808000 618C56B4 7D8903A6 4E800421 907A0005 48000198 -7F23CB78 38810034 +7F23CB78 38810008 38A00007 38C0FFFF 3D808001 618C1E24 7D8903A6 4E800421 -FC20B090 2C1B0000 -40820008 FC20B890 -80610034 3D808036 +FC20F890 2C1B0000 +40820008 FC20F090 +80610008 3D808036 618CF8BC 7D8903A6 -4E800421 80610034 +4E800421 80610008 3D808037 618C0928 7D8903A6 4E800421 -7F23CB78 38810034 +7F23CB78 38810008 38A00006 38C0FFFF 3D808001 618C1E24 7D8903A6 4E800421 -FC20B090 2C1B0001 -40820008 FC20B890 -80610034 3D808036 +FC20F890 2C1B0001 +40820008 FC20F090 +80610008 3D808036 618CF8BC 7D8903A6 -4E800421 80610034 +4E800421 80610008 3D808037 618C0928 7D8903A6 4E800421 39C00000 7DC37378 @@ -4400,8 +4616,9 @@ FC20B090 2C1B0001 618C5CC4 7D8903A6 4E800421 3C600000 60630000 907C0008 -48000004 BA810008 -800100B4 382100B0 +48000004 BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 4E800021 C0B00000 C0333333 41B80000 @@ -4424,10 +4641,10 @@ C21B3668 00000005 #Online/Menus/VSScreen/AllowP2ColorDuplicate.asm 41820014 3D808017 618CBEC8 7D8903A6 4E800421 00000000 -C2186EC4 0000007D #Online/Menus/VSScreen/InitVsSplash.asm +C2186EC4 0000007F #Online/Menus/VSScreen/InitVsSplash.asm 3C608048 80639D30 5463443E 2C030408 -408203D0 48000060 +408203E0 48000060 4E800021 00000000 3F800000 3F000000 3F19999A F15959FF @@ -4440,8 +4657,8 @@ C2186EC4 0000007D #Online/Menus/VSScreen/InitVsSplash.asm 5465616D 20310054 65616D20 32005031 00503200 7C0802A6 -90010004 9421FF50 -BE810008 38600000 +90010004 9421FF20 +BE8100B0 38600000 3C80803F 608411A4 3CA0803F 60A51194 3D80803A 618C62A0 @@ -4458,7 +4675,7 @@ BE810008 38600000 989E004A C03F0000 D03E0008 C03F0004 D03E0024 D03E0028 -887D0210 2C030001 +887D0264 2C030001 41820038 387F0010 389F0052 38BD0034 38C00000 C03F001C @@ -4466,10 +4683,10 @@ D03E0024 D03E0028 389F0055 38BD0053 38C00000 C03F0020 48000129 48000038 -807D000D 4800021D +807D000D 4800022D 387F0010 389F0044 C03F001C 4800010D -807D0011 48000205 +807D0011 48000215 387F0014 389F004B C03F0020 480000F5 48000004 38600000 @@ -4485,12 +4702,12 @@ C03F0004 D03E0024 D03E0028 38800001 989E004A 989E0049 C03F0000 D03E0008 -7FC3F378 A09D0216 +7FC3F378 A09D026A 3D808000 618C5690 7D8903A6 4E800421 2C030001 41820058 3CA0803B 60A57808 -A0DD0216 38600000 +A0DD026A 38600000 1C830002 7C85222E 7C043000 41820014 38630001 2C03001D @@ -4499,11 +4716,12 @@ A0DD0216 38600000 7C841A14 8884005C 7FC3F378 3D80803A 618C6368 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4800017C +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4800018C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF10 BE8100B0 +DBE100E0 DBC100E8 FFE00890 7C761B78 7C942378 7CB92B78 7CDA3378 7CF83B78 @@ -4531,11 +4749,12 @@ FC60F090 3D808000 618C56B4 7D8903A6 4E800421 39CE0004 39EF0001 7C0FD000 -4180FFAC BA810008 -800100B4 382100B0 +4180FFAC BA8100B0 +CBE100E0 CBC100E8 +800100F4 382100F0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 38A00008 38C000FF 7C7A3039 7C632C30 38E00008 39200000 @@ -4546,25 +4765,25 @@ FC60F090 3D808000 39290001 2C090003 4180FFD8 7F46D378 80A10010 80E1000C -81010008 BA810008 -800100B4 382100B0 +81010008 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 3800FFFF 00000000 C2184DE4 00000010 #Online/Menus/VSScreen/PlayOpponentCharAnnouncer.asm 3D808048 818C9D30 558C443E 2C0C0408 40820068 7C0802A6 -90010004 9421FF50 -BE810008 38600000 +90010004 9421FF20 +BE8100B0 38600000 3D808000 618C5610 7D8903A6 4E800421 7C7F1B78 887F0004 -1C630024 389F0268 +1C630024 389F02BC 7FC418AE 7FE3FB78 3D808037 618CF1B0 7D8903A6 4E800421 -7FC3F378 BA810008 -800100B4 382100B0 +7FC3F378 BA8100B0 +800100E4 382100E0 7C0803A6 48000008 887E00F4 00000000 C21B3650 00000004 #Online/Menus/VSScreen/PreventP2Color.asm @@ -4576,8 +4795,8 @@ C2185060 00000013 #Online/Menus/VSScreen/HideStageDisplay/HideAllJObjs.asm 3D808048 818C9D30 558C443E 2C0C0408 40820078 7C0802A6 -90010004 9421FF50 -BE810008 83E30028 +90010004 9421FF20 +BE8100B0 83E30028 3BC00000 7FE3FB78 38810080 7FC5F378 38C0FFFF 3D808001 @@ -4586,8 +4805,8 @@ BE810008 83E30028 80640014 60630010 90640014 3BDE0001 2C1E001B 4180FFC8 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808018 618C51AC 7D8903A6 4E800420 3C608047 3BE335A8 @@ -4597,8 +4816,8 @@ C2184ADC 00000010 #Online/Menus/VSScreen/HideStageText/HideLetterJObjs.asm 3D808048 818C9D30 558C443E 2C0C0408 40820068 7C0802A6 -90010004 9421FF50 -BE810008 3BE00009 +90010004 9421FF20 +BE8100B0 3BE00009 7F63DB78 38810080 7FE5FB78 38C0FFFF 3D808001 618C1E24 @@ -4607,8 +4826,8 @@ BE810008 3BE00009 618CF6B4 7D8903A6 4E800421 3BFF0001 2C1F000E 4180FFC4 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3BBE0038 00000000 04184B1C 480001D8 #Online/Menus/VSScreen/HideStageText/SkipStageNumberShow.asm C21BFA20 00000012 #Online/Slippi Online Scene/boot.asm @@ -4630,28 +4849,28 @@ C21BFA20 00000012 #Online/Slippi Online Scene/boot.asm 3D80801B 618C136C 7D8903A6 4E800420 38600001 00000000 -C21A45B8 0000017A #Online/Slippi Online Scene/main.asm +C21A45B8 0000020C #Online/Slippi Online Scene/main.asm 3BA30004 7C0802A6 -90010004 9421FF50 -BE810008 3C80803E -6084DC1C 48000245 +90010004 9421FF20 +BE8100B0 3C80803E +6084DC1C 48000281 7C6802A6 38630000 90640008 38600000 986DAFA3 986DAFC8 986DAFEC 986DAFE0 -38600008 4800019D +38600008 480001C1 7C8802A6 4800002D -48000B64 80830000 +48000FF0 80830000 5485467A 2C050048 40820014 548401BA 7C840734 7C841A14 90830000 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 3C80803D 6084AD30 -48000081 7C6802A6 -90640004 48000105 +48000091 7C6802A6 +90640004 48000129 7C6802A6 90640008 38600001 98640000 3C60803D 6063ACA4 @@ -4660,359 +4879,505 @@ BE810008 3C80803E 4BFFFFF0 93C30010 7FD4F378 88740000 7C630774 2C03FFFF -4182001C 38740004 +4182002C 38740004 4BFFFF65 38740008 -4BFFFF5D 3A940018 -4BFFFFDC BA810008 -800100B4 382100B0 +4BFFFF5D 38740010 +4BFFFF55 38740014 +4BFFFF4D 3A940018 +4BFFFFCC BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 3C808045 +90010004 9421FF20 +BE8100B0 3C808045 6084ABF0 886DAEF8 -98640006 3D808000 -618C56B8 7D8903A6 -4E800421 7C741B78 -3D808000 618C5698 -7D8903A6 4E800421 -7C751B78 3AC00000 -48000024 887400DD -2C030012 40820010 -38600013 987400DD -48000014 3AD60001 -3A94001C 7C16A800 -4180FFDC BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 7C0802A6 -90010004 9421FF50 -BE810008 38600012 -3C80803F 60840CC8 -98640001 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -4E800021 00030000 -48000081 480000F5 -08000000 80497758 -80497758 01030000 -480001B5 480001E5 -09000000 80480668 -80480668 02030000 -801B1588 4800027D -02000000 80480530 -80479D98 03030000 -00000000 00000000 -05000000 00000000 -00000000 04030000 -48000411 4800074D -20000000 80490880 -804D68D0 FF000000 -4E800021 81940000 -7C0802A6 90010004 -9421FF50 BE810008 -808D8840 3BE40530 -3D80801A 618C427C -7D8903A6 4E800421 -88BF0002 3880000E -88FF0003 38C00000 -891F0004 895F0006 -39200000 3D80801B -618C06B0 7D8903A6 -4E800421 3D808001 -618C74BC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 +98640006 48000159 +7C8802A6 48000BB9 +7C6802A6 90640018 +3D808000 618C56B8 +7D8903A6 4E800421 +7C741B78 3D808000 +618C5698 7D8903A6 +4E800421 7C751B78 +3AC00000 48000024 +887400DD 2C030012 +40820010 38600013 +987400DD 48000014 +3AD60001 3A94001C +7C16A800 4180FFDC +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 7C0802A6 90010004 -9421FF50 BE810008 -7C7E1B78 3D80801B -618CAAD0 7D8903A6 -4E800421 809E0014 -88840003 2C040002 -40820008 4800008C -886DAFA0 2C030001 -4182001C 2C030002 -4182001C 2C030003 -41820014 2C030000 -41820008 48000038 -48000034 886DAFC9 -7C630774 2C03FFFF -41820024 2C030001 -4182001C 2C030000 -40820000 886DAFCA -2C030000 41820020 -48000004 48000659 -3C808047 60849D30 -38600005 98640005 -48000018 3C808047 -60849D30 38600002 -98640005 48000004 -BA810008 800100B4 -382100B0 7C0803A6 +9421FF20 BE8100B0 +38600012 3C80803F +60840CC8 98640001 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +00030000 480000B9 +4800012D 08000000 +80497758 80497758 +01030000 48000245 +48000275 09000000 +80480668 80480668 +02030000 801B1588 +4800036D 02000000 +80480530 80479D98 +03030000 00000000 +00000000 05000000 +00000000 00000000 +04030000 48000641 +4800097D 20000000 +80490880 804D68D0 +05030000 48000CDD +48000D1D 50000000 +48000019 48000015 +FF000000 4E800021 +81940000 4E800021 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 7C0802A6 +90010004 9421FF20 +BE8100B0 808D8840 +3BE40530 3D80801A +618C427C 7D8903A6 +4E800421 88BF0002 +3880000E 88FF0003 +38C00000 891F0004 +895F0006 39200000 +3D80801B 618C06B0 +7D8903A6 4E800421 +3D808001 618C74BC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 3D80801B -618C1514 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 4E800020 -7C0802A6 90010004 -9421FF50 BE810008 -7C7F1B78 809F0014 -88840004 2C040000 -4082001C 38600000 -3D80801A 618C42A0 +90010004 9421FF20 +BE8100B0 7C7E1B78 +3D80801B 618CAAD0 7D8903A6 4E800421 -48000064 38600001 -986DAFCA 38600000 -3D808000 618C5610 -7D8903A6 4E800421 -7C7E1B78 887E0001 -889E0002 7C032000 -4082001C 48000579 +809E0014 88840003 +2C040002 40820008 +480000E4 886DAFA0 +2C030000 41820020 +2C030001 41820014 +2C030002 4182006C +2C030003 41820064 +48000090 4BFFFF09 +7F6802A6 7F63DB78 +3880001C 3D808000 +618CC160 7D8903A6 +4E800421 48000951 +7C6802A6 907B0018 +38600003 987B0000 +38600001 B07B0001 +38600000 987B0006 +987B0014 3C808047 +60849D30 38600006 +98640005 48000060 +886DAFC9 7C630774 +2C03FFFF 41820024 +2C030001 4182001C +2C030000 40820000 +886DAFCA 2C030000 +41820020 48000004 +480007F9 3C808047 +60849D30 38600005 +98640005 48000018 3C808047 60849D30 -38600005 98640005 -4800001C 38600000 -3D80801A 618C42A0 -7D8903A6 4E800421 -48000004 BA810008 -800100B4 382100B0 +38600002 98640005 +48000004 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -3D80801B 618C15C8 +9421FF20 BE8100B0 +3D80801B 618C1514 7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7F1B78 +809F0014 88840004 +2C040000 4082001C +38600000 3D80801A +618C42A0 7D8903A6 +4E800421 48000064 +38600001 986DAFCA 38600000 3D808000 618C5610 7D8903A6 -4E800421 7C7F1B78 -887F0003 480005E5 -986DAFC9 886DAFA0 -2C030003 40820020 -887F0003 38800001 -2C030000 40820008 -38800000 988DAFC9 -4800003C 3A800000 -3AA00000 7E83A378 -480005A9 2C030000 -41820008 3AB50001 -3A940001 2C140004 -4180FFE4 2C150001 -4182000C 38600000 -986DAFC9 3E808047 -62949DA4 887F0003 -48000571 2C030000 -41820018 38600001 -98740000 38600000 -9874005D 48000014 -38600000 98740000 -38600001 9874005D -886DAFA0 2C030003 -4082000C 38600000 -98740004 38600000 -986DAFCA 38600004 +4E800421 7C7E1B78 +887E0001 889E0002 +7C032000 4082001C +48000719 3C808047 +60849D30 38600005 +98640005 4800001C +38600000 3D80801A +618C42A0 7D8903A6 +4E800421 48000004 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7F1B78 +38600002 3D808037 +618CF1E4 7D8903A6 +4E800421 388000C2 +98830000 9BE30001 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 3D80801B +618C15C8 7D8903A6 +4E800421 38600000 +3D808000 618C5610 +7D8903A6 4E800421 +7C7F1B78 886DAFA0 +2C030000 40820130 +887F0000 2C030000 +41820018 808DB61C +88640011 2C030001 +41820008 48000010 +38600001 4BFFFF39 +480000B4 4BFFFC89 +7F6802A6 3C808046 +6084B6A0 88640008 +987B0017 480006DD +7C7C1B78 2C1C0000 +40800014 887B0006 +38630001 987B0006 +48000060 9B9B0005 +A09B0001 38840006 +7F9B21AE 387C0003 +7C9B18AE 38A40001 +7CBB19AE 1C9C0002 +38840010 A07F026A +7C7B232E 889B0000 +38840001 38600002 +7C841B96 7C052000 +4080002C A07B0001 +38630001 B07B0001 +38600000 987B0006 +3C808047 60849D30 +38600006 98640005 +4800006C 38600000 +4BFFFE85 38600001 3D808037 618CF1E4 7D8903A6 4E800421 -7C7E1B78 386000BC +7C7E1B78 386000BA 987E0000 7FC3F378 38800001 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 38800004 -38A00000 3D808000 -618C55F0 7D8903A6 -4E800421 3C80804D -807E0000 90645F90 7FC3F378 3D808037 618CF1B0 7D8903A6 4E800421 3C808047 60849D30 38600001 -98640005 7FE3FB78 +98640005 887F0003 +48000735 986DAFC9 +886DAFA0 2C030003 +40820020 887F0003 +38800001 2C030000 +40820008 38800000 +988DAFC9 4800003C +3A800000 3AA00000 +7E83A378 480006F9 +2C030000 41820008 +3AB50001 3A940001 +2C140004 4180FFE4 +2C150001 4182000C +38600000 986DAFC9 +3E808047 62949DA4 +887F0003 480006C1 +2C030000 41820018 +38600001 98740000 +38600000 9874005D +48000014 38600000 +98740000 38600001 +9874005D 886DAFA0 +2C030003 4182000C +2C030000 4082000C +38600000 98740004 +38600000 986DAFCA +38600004 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +386000BC 987E0000 +7FC3F378 38800001 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 7FC3F378 +38800004 38A00000 +3D808000 618C55F0 +7D8903A6 4E800421 +3C80804D 807E0000 +90645F90 7FC3F378 3D808037 618CF1B0 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 4E800021 -01780101 01FF2121 -FF2121EE 0000EE00 -7C0802A6 90010004 -9421FF50 BE810008 -38600000 3D808000 -618C5610 7D8903A6 -4E800421 7C7E1B78 -83ED8840 3BFF0598 -886DAFA0 2C030003 -40820048 3BA00000 -1CBD0024 38650069 -7C7F18AE 38630001 -38850060 7C9F20AE -3D808000 618C56B0 +7FE3FB78 3D808037 +618CF1B0 7D8903A6 +4E800421 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +4E800021 01780101 +01FF2121 FF2121EE +0000EE00 7C0802A6 +90010004 9421FF20 +BE8100B0 38600000 +3D808000 618C5610 7D8903A6 4E800421 -1C9D0024 38840063 -7C7F21AE 3BBD0001 -2C1D0004 4180FFC4 -3C608049 60630888 -4BFFFF65 7C8802A6 -38A00010 3D808000 -618C31F4 7D8903A6 -4E800421 3C808049 -60840888 887F0060 -98640005 887F0063 -9864000B 887F0084 -98640008 887F0087 -9864000E 38600000 -9864FFFF 9864FFFB -887E0210 2C030000 -418200F4 887E0003 -1C630024 38630271 -7F7E18AE 38600002 -98640002 38600001 -9864FFFB 98640006 -98640007 98640009 -9864000A 9864000C -9864000D 9864000F -98640010 3BA00000 -3B800000 1C7D0024 -38630069 7C7F18AE -7C03D800 40820030 -1CBD0024 38A50060 -7CBF28AE 38DC0005 -7CA621AE 1CBD0024 -38A50063 7CBF28AE -38DC000B 7CA621AE -3B9C0001 3BBD0001 -2C1D0004 4180FFB8 -9B840003 3BA00000 -3B800000 1C7D0024 -38630069 7C7F18AE -7C03D800 41820030 -1CBD0024 38A50060 -7CBF28AE 38DC0008 -7CA621AE 1CBD0024 -38A50063 7CBF28AE -38DC000E 7CA621AE -3B9C0001 3BBD0001 -2C1D0004 4180FFB8 -9B840004 3C808043 -60842078 887F0060 -90640014 887F0063 -98640018 887F0084 -9064001C 887F0087 -98640020 887E0210 -2C030000 41820024 -887F00A8 90640024 -887F00AB 98640028 -887F00CC 9064002C -887F00CF 98640030 -A07F000E 9064000C -3D808001 618C8254 -7D8903A6 4E800421 -386000C7 3D808001 -618C8C2C 7D8903A6 -4E800421 38600004 -3D808001 618C7700 +7C7E1B78 83ED8840 +3BFF0598 886DAFA0 +2C030003 40820048 +3BA00000 1CBD0024 +38650069 7C7F18AE +38630001 38850060 +7C9F20AE 3D808000 +618C56B0 7D8903A6 +4E800421 1C9D0024 +38840063 7C7F21AE +3BBD0001 2C1D0004 +4180FFC4 3C608049 +60630888 4BFFFF65 +7C8802A6 38A00010 +3D808000 618C31F4 7D8903A6 4E800421 -3860001C 3D808002 -618C6F2C 7D8903A6 -4E800421 3A800000 -1C140024 7FF5FB78 -7EB50214 3D808000 -618C569C 7D8903A6 -4E800421 88950060 -7C840774 7C041800 -41820028 38600000 -3D808000 618C56A0 +3C808049 60840888 +887F0060 98640005 +887F0063 9864000B +887F0084 98640008 +887F0087 9864000E +38600000 9864FFFF +9864FFFB 887E0264 +2C030000 418200F4 +887E0003 1C630024 +386302C5 7F7E18AE +38600002 98640002 +38600001 9864FFFB +98640006 98640007 +98640009 9864000A +9864000C 9864000D +9864000F 98640010 +3BA00000 3B800000 +1C7D0024 38630069 +7C7F18AE 7C03D800 +40820030 1CBD0024 +38A50060 7CBF28AE +38DC0005 7CA621AE +1CBD0024 38A50063 +7CBF28AE 38DC000B +7CA621AE 3B9C0001 +3BBD0001 2C1D0004 +4180FFB8 9B840003 +3BA00000 3B800000 +1C7D0024 38630069 +7C7F18AE 7C03D800 +41820030 1CBD0024 +38A50060 7CBF28AE +38DC0008 7CA621AE +1CBD0024 38A50063 +7CBF28AE 38DC000E +7CA621AE 3B9C0001 +3BBD0001 2C1D0004 +4180FFB8 9B840004 +3C808043 60842078 +887F0060 90640014 +887F0063 98640018 +887F0084 9064001C +887F0087 98640020 +887E0264 2C030000 +41820024 887F00A8 +90640024 887F00AB +98640028 887F00CC +9064002C 887F00CF +98640030 A07F000E +9064000C 3D808001 +618C8254 7D8903A6 +4E800421 386000C7 +3D808001 618C8C2C +7D8903A6 4E800421 +38600004 3D808001 +618C7700 7D8903A6 +4E800421 3860001C +3D808002 618C6F2C 7D8903A6 4E800421 -3D808000 618C56A8 +3A800000 1C140024 +7FF5FB78 7EB50214 +3D808000 618C569C 7D8903A6 4E800421 -3A940001 2C140006 -3AB50024 4180FFB0 -A07F000E 3D808022 -618C519C 7D8903A6 -4E800421 7C641B78 -38600001 3D808000 +88950060 7C840774 +7C041800 41820028 +38600000 3D808000 618C56A0 7D8903A6 4E800421 3D808000 618C56A8 7D8903A6 -4E800421 3D808002 -618C7168 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 3A940001 +2C140006 3AB50024 +4180FFB0 A07F000E +3D808022 618C519C +7D8903A6 4E800421 +7C641B78 38600001 +3D808000 618C56A0 +7D8903A6 4E800421 +3D808000 618C56A8 +7D8903A6 4E800421 +3D808002 618C7168 +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 3C808047 +60849D30 38600003 +98640005 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -3C808047 60849D30 -38600003 98640005 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 7C0802A6 -90010004 9421FF50 -BE810008 38600000 -3D808000 618C5610 +9421FF20 BE8100B0 +38600000 3D808000 +618C5610 7D8903A6 +4E800421 7C7F1B78 +83CD8840 3BDE0598 +7FC3F378 389F025C +38A00138 3D808000 +618C31F4 7D8903A6 +4E800421 7FC3F378 +3D808000 618C5694 +7D8903A6 4E800421 +3D808017 618CEB30 +7D8903A6 4E800421 +889F02BC 98830000 +889F02BF 98830001 +38800000 98830002 +38800003 98830005 +38800078 98830004 +3C80803D 6084DEC8 +8084000C 887F02E0 +98640002 38602121 +B0640003 3C808049 +60840880 887F02E3 +98640016 7FE3FB78 +3D808037 618CF1B0 7D8903A6 4E800421 -7C7F1B78 83CD8840 -3BDE0598 7FC3F378 -389F0208 38A00138 -3D808000 618C31F4 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 4E800021 +7C0802A6 90010004 +9421FF20 BE8100B0 +3FE08047 63FF9DA4 +887F0004 2C030001 +41820010 2C030002 +418200C8 48000110 +38600000 3D808004 +618C0AF0 7D8903A6 +4E800421 7C7B1B78 +38600001 3D808004 +618C0AF0 7D8903A6 +4E800421 2C1B002D +4081000C 2C03002D +41810014 2C1B002D +418100C4 2C03002D +418100B4 38600000 +3D808003 618C3BD8 7D8903A6 4E800421 -7FC3F378 3D808000 -618C5694 7D8903A6 -4E800421 3D808017 -618CEB30 7D8903A6 -4E800421 889F0268 -98830000 889F026B -98830001 38800000 -98830002 38800003 -98830005 38800078 -98830004 3C80803D -6084DEC8 8084000C -887F028C 98640002 -38602121 B0640003 -3C808049 60840880 -887F028F 98640016 -7FE3FB78 3D808037 -618CF1B0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +7C7B1B78 38600001 +3D808003 618C3BD8 +7D8903A6 4E800421 +7C1B1800 41810080 +41800084 38600000 +3D808003 618C42B4 +7D8903A6 4E800421 +7C7B1B78 38600001 +3D808003 618C42B4 +7D8903A6 4E800421 +7C1B1800 41800048 +4181004C 48000050 +38600000 3D808003 +618C3BD8 7D8903A6 +4E800421 2C030000 +40820024 38600001 +3D808003 618C3BD8 +7D8903A6 4E800421 +2C030000 40820010 +48000014 38600000 +48000010 38600001 +48000008 3860FFFF +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 7C7D1B78 +3FE08047 63FF9DA4 +1FDD00A8 7FDEFA14 +887F0004 2C030000 +418200B0 3C608046 +6063B6A0 886324D0 +889F0006 7C032000 +40820098 887E0058 +2C030003 4182008C +887F0004 2C030007 +40820040 887F0006 +2C030001 40820024 +887F0000 1C6300A8 +7C63FA14 8863005F +889E005F 7C032000 +41820058 4800005C +887F0000 7C03E800 +41820048 4800004C +887F0006 2C030001 +40820028 7FE3FB78 +3D808016 618C54A0 +7D8903A6 4E800421 +889E005F 7C032000 +41820020 48000014 +887E005D 2C030000 +41820010 48000004 +38600000 48000008 +38600001 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 -7C7D1B78 3FE08047 -63FF9DA4 1FDD00A8 -7FDEFA14 887F0004 -2C030000 418200B0 -3C608046 6063B6A0 -886324D0 889F0006 -7C032000 40820098 -887E0058 2C030003 -4182008C 887F0004 -2C030007 40820040 -887F0006 2C030001 -40820024 887F0000 -1C6300A8 7C63FA14 -8863005F 889E005F -7C032000 41820058 -4800005C 887F0000 -7C03E800 41820048 -4800004C 887F0006 -2C030001 40820028 -7FE3FB78 3D808016 -618C54A0 7D8903A6 -4E800421 889E005F -7C032000 41820020 -48000014 887E005D -2C030000 41820010 -48000004 38600000 -48000008 38600001 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 38600028 -987E0000 00000000 +9421FF20 BE8100B0 +83E30010 887F0006 +2C030000 40820014 +3D808001 618C74BC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 7C0802A6 +90010004 9421FF20 +BE8100B0 83E30010 +38600000 3D808000 +618C5610 7D8903A6 +4E800421 7C7E1B78 +887E0000 2C030004 +41820020 38600001 +4BFFF56D 3C808047 +60849D30 38600001 +98640005 48000038 +887F0006 2C030000 +41820018 3C808047 +60849D30 38600003 +98640005 48000018 +4BFFFC09 3C808047 +60849D30 38600005 +98640005 BA8100B0 +800100E4 382100E0 +7C0803A6 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +38600028 987E0000 +60000000 00000000 04005694 4E800020 #Online/Static/AdjustNullCharID.asm C20056BC 00000012 #Online/Static/CSSUpdateCSP.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7CBD2B78 7CDC3378 3D808000 618C56B8 @@ -5025,58 +5390,10 @@ C20056BC 00000012 #Online/Static/CSSUpdateCSP.asm 7C9E2A14 7FE3FB78 7F85E378 3D808025 618CD5AC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -C20056AC 0000002F #Online/Static/ChatMessages.asm -7CA802A6 2C030008 -4182001C 2C030004 -41820020 2C030002 -41820024 2C030001 -41820028 48000075 -7C6802A6 48000024 -480000FD 7C6802A6 -48000018 480000C9 -7C6802A6 4800000C -4800007D 7C6802A6 -88E30000 89030001 -89230002 89430003 -7C862378 38830004 -7C843A14 2C060008 -41820020 7C844214 -2C060001 41820014 -7C844A14 2C060002 -41820008 7C845214 -7CA903A6 4E800420 -4E800021 07040904 -436F6D6D 6F6E0067 -6773006F 6E65206D -6F726500 62726200 -676F6F64 206C7563 -6B000000 4E800021 -0C0C0D07 436F6D70 -6C696D65 6E747300 -77656C6C 20706C61 -79656400 74686174 -20776173 2066756E -00746861 6E6B7300 -746F6F20 676F6F64 -00000000 4E800021 -0A060504 52656163 -74696F6E 7300736F -72727900 6D792062 -006C6F6C 00776F77 -00000000 4E800021 -05090817 4D697363 -00676F74 74612067 -6F006F6E 65207365 -63006C65 74277320 -706C6179 20616761 -696E206C 61746572 -00626164 20636F6E -6E656374 696F6E00 -60000000 00000000 C2005690 00000002 #Online/Static/CheckAltStageName.asm 38600000 4E800020 60000000 00000000 @@ -5088,7 +5405,7 @@ C2005698 00000002 #Online/Static/GetCSSIconNum.asm 60000000 00000000 C20056B0 00000011 #Online/Static/GetTeamCostumeIndex.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 7FC3F378 2C1F0003 41820028 2C1F0002 @@ -5100,8 +5417,8 @@ C20056B0 00000011 #Online/Static/GetTeamCostumeIndex.asm 7D8903A6 4E800421 48000014 3D808016 618C9264 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C20055F4 00000007 #Online/Static/IntToFloat.asm @@ -5114,9 +5431,9 @@ EC211028 C0410008 60000000 00000000 C2005610 00000012 #Online/Static/LoadMatchState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 2C030000 40820018 -38600340 3D808037 +386003C7 3D808037 618CF1E4 7D8903A6 4E800421 7C7F1B78 386000B3 987F0000 @@ -5124,16 +5441,16 @@ C2005610 00000012 #Online/Static/LoadMatchState.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 7FE3FB78 -38800340 38A00000 +388003C7 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C20056A4 00000022 #Online/Static/LoadPremadeText.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 7C9E2378 3B800004 7F83E378 3D808037 618CF1E4 @@ -5149,11 +5466,11 @@ C20056A4 00000022 #Online/Static/LoadPremadeText.asm 618CF1E4 7D8903A6 4E800421 7C7D1B78 386000E2 4800001D -7FA3EB78 BA810008 -800100B4 382100B0 +7FA3EB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 987D0000 9BFD0001 9BDD0002 7FA3EB78 38800003 38A00001 @@ -5162,20 +5479,49 @@ C20056A4 00000022 #Online/Static/LoadPremadeText.asm 7FA3EB78 7F84E378 38A00000 3D808000 618C55F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -C200560C 00000016 #Online/Static/LoadState.asm +C200560C 00000033 #Online/Static/LoadState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7B1B78 7C982378 7CBA2B78 88DA0000 +3AC00000 3AD60001 +2C160007 408100DC +48000044 4E800021 +4C6F6164 20737461 +74652072 65717565 +73746564 20666F72 +20667261 6D652025 +64206275 74206672 +616D6520 77617320 +6E6F7420 666F756E +642E0000 7C0802A6 +90010004 9421FF00 +BC610008 7F05C378 +60000000 60000000 +60000000 60000000 +60000000 806DAFC4 +38630003 4BFFFF91 +7C8802A6 4CC63242 +3D808032 618C3CF4 +7D8903A6 4E800421 +806DAFC4 388000D0 +98830000 38800000 +98830001 38800001 +98830002 38800080 +38A00001 3D808000 +618C55F0 7D8903A6 +4E800421 B8610008 +80010104 38210100 +7C0803A6 48000000 38C6FFFF 2C060000 40800008 38C60007 1C660004 38630002 7F3A1A14 80790000 -7C03C000 4082FFDC +7C03C000 4082FEF8 3D808034 618C7364 7D8903A6 4E800421 7C771B78 386000B2 @@ -5186,21 +5532,21 @@ C200560C 00000016 #Online/Static/LoadState.asm 4E800421 7EE3BB78 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 C20055EC 00000008 #Online/Static/MultiplyRWithF.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808000 618C55F4 7D8903A6 4E800421 -EC2100B2 BA810008 -800100B4 382100B0 +EC2100B2 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C2005608 00000016 #Online/Static/SaveState.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7B1B78 7C982378 7CBA2B78 887A0000 1C630004 389A0002 @@ -5218,23 +5564,26 @@ C2005608 00000016 #Online/Static/SaveState.asm 4E800421 7EE3BB78 3D808034 618C738C 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 00000000 -C20056B4 00000059 #Online/Static/SubtextFunctions.asm -2C050002 418201F8 +C20056B4 00000063 #Online/Static/SubtextFunctions.asm +2C050002 41820228 7C0802A6 90010004 -9421FF50 BE810008 +9421FED8 BDC100B0 +DBE100F8 DBC10100 +DBA10108 DB810110 +DB610118 DB410120 7C751B78 7C962378 7CB82B78 7CD93378 -90E10038 9101003C -91210040 91410044 -91610048 9181004C -FEA00890 FEC01090 -FEE01890 FF202890 +90E10008 9101000C +91210010 91410014 +91610018 9181001C +FFE00890 FFC01090 +FFA01890 FF602890 FF403090 2C180001 418000FC 39E00004 -FC20B090 FC40B890 +FC20F090 FC40E890 2C0F0001 41820020 2C0F0002 41820020 2C0F0003 41820020 @@ -5244,11 +5593,11 @@ FC20B090 FC40B890 48000014 EC42D028 4800000C EC42D02A 48000004 7EA3AB78 -80810038 3D80803A +80810008 3D80803A 618C6B98 7D8903A6 4E800421 7C771B78 7EA3AB78 7EE4BB78 -FC20A890 FC40A890 +FC20F890 FC40F890 3D80803A 618C7548 7D8903A6 4E800421 7F25CB78 2C0F0000 @@ -5257,44 +5606,49 @@ FC20A890 FC40A890 3D80803A 618C74F0 7D8903A6 4E800421 7EA3AB78 7EE4BB78 -80A10038 80C1003C -80E10040 81010044 -81210048 8141004C +80A10008 80C1000C +80E10010 81010014 +81210018 8141001C 3D80803A 618C70A0 7D8903A6 4E800421 2C0F0000 4182000C 39EFFFFF 4BFFFF14 48000094 7EA3AB78 -80810038 FC20B090 -FC40B890 3D80803A +80810008 FC20F090 +FC40E890 3D80803A 618C6B98 7D8903A6 4E800421 7C771B78 7EA3AB78 7EE4BB78 -FC20A890 FC40A890 +FC20F890 FC40F890 3D80803A 618C7548 7D8903A6 4E800421 7EA3AB78 7EE4BB78 7EC5B378 3D80803A 618C74F0 7D8903A6 4E800421 7EA3AB78 -7EE4BB78 80A10038 -80C1003C 80E10040 -81010044 81210048 -8141004C 3D80803A +7EE4BB78 80A10008 +80C1000C 80E10010 +81010014 81210018 +8141001C 3D80803A 618C70A0 7D8903A6 4E800421 7EE3BB78 -BA810008 800100B4 -382100B0 7C0803A6 +B9C100B0 CBE100F8 +CBC10100 CBA10108 +CB810110 CB610118 +CB410120 8001012C +38210128 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 7C7D1B78 +90010004 9421FF00 +BE8100B0 DBE100E0 +DBC100E8 DBA100F0 +DB8100F8 7C7D1B78 7C9C2378 7CDB3378 -FEC00890 FEE01090 -FF001890 FEA02090 -4800008D 7F4802A6 +FFC00890 FFA01090 +FF801890 FFE02090 +4800009D 7F4802A6 38600000 7F64DB78 -C01A0000 FC20B090 -FC40B890 FC60C090 +C01A0000 FC20F090 +FC40E890 FC60E090 C09A0004 C0BA0008 3D80803A 618C5ACC 7D8903A6 4E800421 @@ -5302,12 +5656,14 @@ C09A0004 C0BA0008 41820010 38600001 986DAFEC 7F86E378 7EA3AB78 7FA4EB78 -FC00A890 D0030024 +FC00F890 D0030024 D0030028 3D80803A 618C6368 7D8903A6 4E800421 7EA3AB78 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 CBE100E0 +CBC100E8 CBA100F0 +CB8100F8 80010104 +38210100 7C0803A6 4E800020 4E800021 41100000 44160000 41A00000 00000000 @@ -5323,7 +5679,7 @@ FFFFFFFF 3ECCCCCD 7200436F 6E6E6563 7420436F 64650000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C791B78 7C9B2378 2C050000 41820008 480003D1 4BFFFFA9 @@ -5348,11 +5704,11 @@ D03C0028 38600001 480000D1 38600000 48000029 480000D5 886DAFA1 987E0004 -7FA3EB78 BA810008 -800100B4 382100B0 +7FA3EB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7A1B78 C03E000A C05E000E 7F83E378 389F001C 3D80803A @@ -5368,13 +5724,13 @@ FC400890 7F83E378 38BF000C 7F83E378 7F04C378 3D80803A 618C74F0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 C05E000E EC42082A D05E000E 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFE25 7FE802A6 83DF0000 83BE0000 839E0005 48000159 @@ -5405,11 +5761,11 @@ D05E000E 4E800020 7F83E378 38800003 38BD0020 3D80803A 618C70A0 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFD0D 7FE802A6 83DF0000 889E0004 886DAFA1 7C041800 @@ -5418,11 +5774,11 @@ D05E000E 4E800020 618C4030 7D8903A6 4E800421 806DB614 7C6903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C0802A6 -90010004 9421FF50 -BE810008 4BFFFCA9 +90010004 9421FF20 +BE8100B0 4BFFFCA9 7FE802A6 83DF0000 83BE0000 386000B9 987D0000 7FA3EB78 @@ -5433,23 +5789,23 @@ BE810008 4BFFFCA9 38A00000 3D808000 618C55F0 7D8903A6 4E800421 889D0000 -988DAFA1 BA810008 -800100B4 382100B0 +988DAFA1 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3CA0803E 60A5AE68 -88A508F4 38800000 +88A508F4 38800001 38600008 3D808022 618C9938 7D8903A6 4E800421 2C030001 41820010 38840001 7C042800 4180FFDC -7C832378 BA810008 -800100B4 382100B0 +7C832378 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 4BFFFBCD 7FE802A6 38600012 3D808037 618CF1E4 7D8903A6 @@ -5457,11 +5813,11 @@ BE810008 4BFFFCA9 907F0000 3860002A 3D808037 618CF1E4 7D8903A6 4E800421 -907E0000 BA810008 -800100B4 382100B0 +907E0000 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 -043775B8 A0190000 #Online/Logging/LogInputOnCopy.asm +043775B0 7C600775 #Online/Debugging/LogInputOnCopy.asm 041A4C24 C0429A7C #Polling Drift Fix + VB [tauKhan] 0401985C 3C60804C 04019860 91231F5C @@ -5511,6 +5867,880 @@ C20056A8 00000005 #Common/CompatibilityHooks/RequestSSMLoad.asm 38800001 1C630004 7C83612E 4E800020 60000000 00000000 +C23753B4 0000005C #m-ex codeset generated from https://github.com/JLaferri/m-ex/tree/support%2Fslippi +7C0802A6 90010004 +9421FF00 BE810008 +48000281 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +3B830000 3B9C001F +579C0034 7C9FE214 +388400A0 7FE3FB78 +7C9F2378 3D808034 +618C40E8 7D8903A6 +4E800421 7C7A1B78 +38800044 3D808034 +618C3EF0 7D8903A6 +4E800421 7C791B78 +7F43D378 7F84E378 +3D808034 618C3EF0 +7D8903A6 4E800421 +7C7B1B78 48000205 +7C6802A6 7F64DB78 +38A10080 3D808001 +618C668C 7D8903A6 +4E800421 80A10080 +7F23CB78 7F64DB78 +3D808001 618C6A54 +7D8903A6 4E800421 +7F23CB78 480001D5 +7C8802A6 3D808038 +618C0358 7D8903A6 +4E800421 7C781B78 +80780000 906200D4 +80780004 906200D8 +3860002D 90620164 +90620168 7F63DB78 +7F84E378 3D808032 +618C8F50 7D8903A6 +4E800421 4800001D +7C6802A6 90620184 +480000E9 7C6802A6 +906200F8 48000184 +4E800021 00000000 +00000000 00000000 +00000000 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +FFFFFFFF FFFFFFFF +00000000 00000000 +00000001 00000001 +00000001 FFFFFFFF +FFFFFFFF 00000000 +00000000 00000001 +00000001 00000001 +4E800021 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +00000000 00000000 +4E800021 4D785363 +6E2E6461 74000000 +4E800021 4D785363 +656E6500 4E800021 +6D2D6578 00000000 +7FE3FB78 BA810008 +80010104 38210100 +7C0803A6 7C7F1B78 +93EDC018 7FE3FB78 +7FA4EB78 00000000 +C20186A8 0000000C +90010054 38610028 +48000021 7C8802A6 +38A00030 3D808000 +618C31F4 7D8903A6 +4E800421 48000038 +4E800021 02000000 +804D37EC 00000000 +03000000 803BA6C8 +0000001F 03000000 +803BA6D8 00000000 +02000000 804D37E4 +00000000 00000000 +04015D9C 80020184 +04015C00 80020184 +04015BC0 80620184 +C2018D80 00000007 +801E0000 2C000002 +41820010 2C000003 +41820008 4800001C +38600006 38800000 +3D808001 618C58D0 +7D8903A6 4E800421 +801E0000 00000000 +040158F0 80620184 +04016138 2C000007 +04015F50 83E20184 +C2015F88 00000015 +48000039 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +3C800041 6084C644 +7C632214 48000025 +7C8802A6 9064001C +7C802378 4800006C +4E800021 4966416C +6C2E7573 64000000 +4E800021 00000002 +00000001 00000006 +00000800 00000003 +00000001 00000002 +004FA690 00000004 +00000002 00000006 +0064B400 00000005 +00000004 00000006 +0096C800 00000006 +00000001 00000003 +00000020 00000007 +60000000 00000000 +040158D8 80620184 +04015E18 83C20184 +04015CD4 80020184 +C20159B4 00000018 +39800000 1C6C001C +389F0048 7D632214 +806B0014 2C030000 +40820084 806B0010 +2C030000 41820078 +2C030001 41820024 +2C030002 41820038 +2C030003 41820060 +2C030004 4182003C +2C030005 41820050 +806B0008 800B000C +7C030214 7C1D0040 +4080003C 7C1D0378 +48000034 800B0008 +7C1A0040 40810028 +7C1A0378 48000020 +806B0008 800B000C +7C030214 7C1C0040 +4080000C 7C1C0378 +48000004 398C0001 +2C0C0005 4180FF60 +3D808001 618C5ACC +7D8903A6 4E800420 +60000000 00000000 +04015984 2C190007 +04015B94 2C1C0007 +04015914 83E20184 +C21A50AC 00000002 +806200D4 4E800020 +60000000 00000000 +C21A45BC 0000001D +7C0802A6 90010004 +9421FF00 BE810008 +3FE0803D 63FFACA4 +3D80801A 618C50AC +7D8903A6 4E800421 +7C7E1B78 7FFDFB78 +7FDCF378 889D0001 +2C040008 4182000C +3BBD0014 4BFFFFF0 +889C0001 2C040008 +4182000C 3B9C0018 +4BFFFFF0 807D0004 +907C0004 807D0008 +907C0008 807D000C +907C000C 807D0010 +907C0010 7FFDFB78 +7FDCF378 889D0001 +2C04000E 4182000C +3BBD0014 4BFFFFF0 +889C0001 2C04000E +4182000C 3B9C0018 +4BFFFFF0 807D0004 +907C0004 807D0008 +907C0008 807D000C +907C000C 807D0010 +907C0010 BA810008 +80010104 38210100 +7C0803A6 3BE00000 +60000000 00000000 +C21A4444 00000002 +81820164 7C1B6040 +60000000 00000000 +0401CEAC 80620164 +C21A4568 00000002 +81820164 7C006040 +60000000 00000000 +C21A43E0 00000002 +81820164 7C046040 +60000000 00000000 +C21A448C 00000002 +81820164 7C006040 +60000000 00000000 +C21A3F2C 00000002 +81820164 7C006040 +60000000 00000000 +041A4560 3BFF0018 +041A43D8 38630018 +041A4484 38630018 +041A3F24 3BFF0018 +C21A4D14 00000002 +81820168 7C006040 +60000000 00000000 +C21A50A0 00000002 +806200D8 4E800020 +60000000 00000000 +041A4D0C 38630014 +C21A43EC 00000046 +7C0802A6 90010004 +9421FF00 BE810008 +807E0014 2C030000 +418201EC 3D808033 +618C796C 7D8903A6 +4E800421 7C741B79 +418201D4 807E0014 +3D808001 618C63D8 +7D8903A6 4E800421 +7C7C1B78 80620184 +806300C0 3863001F +54630034 7C7B1B78 +387C001F 54630034 +7FBB1A14 38600063 +54630034 7C7D1A14 +80A20184 808500C0 +7C641850 906500C4 +38000000 900DAD28 +7E83A378 38800000 +7F65DB78 38DC001F +54C60034 38E00021 +39000001 3D208001 +6129615C 39400000 +3D808038 618CF6D4 +7D8903A6 4E800421 +3D808001 618C61A0 +7D8903A6 4E800421 +2C030000 4182FFEC +7FA3EB78 7F64DB78 +7F85E378 3D808001 +618C6A54 7D8903A6 +4E800421 7FA3EB78 +480000F5 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +7C7A1B79 418200F8 +7F43D378 3D80803D +618C7074 7D8903A6 +4E800421 38610080 +38800000 38A00014 +3D808000 618C3100 +7D8903A6 4E800421 +7F43D378 38810080 +48000051 80610080 +2C030000 41820008 +907E0010 80610084 +2C030000 41820008 +907E0004 80610088 +2C030000 41820008 +907E0008 807D0020 +809D0000 3D808032 +618C8F50 7D8903A6 +4E800421 48000070 +7C6C1B78 7C892378 +80EC000C 814C0000 +39000000 48000028 +1C680008 7D633A14 +806B0004 7C635214 +808B0000 1C840004 +7C64492E 48000004 +39080001 806C0010 +7C081800 4180FFD4 +4E800020 4E800021 +6D6A4675 6E637469 +6F6E0000 80620184 +38630010 38800000 +908300B4 BA810008 +80010104 38210100 +7C0803A6 38000000 +60000000 00000000 +C21A40C8 0000002B +7C0802A6 90010004 +9421FF00 BE810008 +807A0010 2C030000 +41820124 807A0010 +3D808001 618C6BE0 +7D8903A6 4E800421 +7C7D1B78 7FA3EB78 +480000F5 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +7C7E1B79 418200E8 +7FC3F378 3D80803D +618C7074 7D8903A6 +4E800421 38610080 +38800000 38A0000F +3D808000 618C3100 +7D8903A6 4E800421 +7FC3F378 38810080 +48000051 80610080 +2C030000 41820008 +907A0004 80610084 +2C030000 41820008 +907A0008 80610088 +2C030000 41820008 +907A000C 807D0020 +809D0000 3D808032 +618C8F50 7D8903A6 +4E800421 48000060 +7C6C1B78 7C892378 +80EC000C 814C0000 +39000000 48000028 +1C680008 7D633A14 +806B0004 7C635214 +808B0000 1C840004 +7C64492E 48000004 +39080001 806C0010 +7C081800 4180FFD4 +4E800020 4E800021 +6D6E4675 6E637469 +6F6E0000 BA810008 +80010104 38210100 +7C0803A6 7F23CB78 +60000000 00000000 +C23D709C 0000001E +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 7C9E2378 +7CBD2B78 7FE3FB78 +38810080 7FA5EB78 +38C00000 3D808001 +618C6C64 7D8903A6 +4E800421 7C7A1B78 +83210080 2C190000 +41820024 7F23CB78 +3D80803D 618C7074 +7D8903A6 4E800421 +7F23CB78 7FC4F378 +48000035 807A0020 +809A0000 3D808032 +618C8F50 7D8903A6 +4E800421 7F43D378 +BA810008 80010104 +38210100 7C0803A6 +4E800020 7C6C1B78 +7C892378 80EC000C +814C0000 39000000 +48000028 1C680008 +7D633A14 806B0004 +7C635214 808B0000 +1C840004 7C64492E +48000004 39080001 +806C0010 7C081800 +4180FFD4 4E800020 +60000000 00000000 +C23D7090 000000A4 +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 3FC0804A +63DE04F0 806DB8E0 +80630004 881E0000 +1C000014 7F830214 +837C0008 A06DB528 +2C030000 40810010 +3863FFFF B06DB528 +480004C0 38600004 +3D808022 618C9624 +7D8903A6 4E800421 +7C7D1B78 93BE000C +38600000 907E0008 +57A006F7 4182028C +3A800000 4800003C +7E83A378 3D80801A +618C36A0 7D8903A6 +4E800421 5460063F +4182001C 7E83A378 +3D808016 618C77E8 +7D8903A6 4E800421 +48000010 3A940001 +2C140004 4180FFC4 +38600001 3D808002 +618C4030 7D8903A6 +4E800421 38600005 +B06DB528 38600001 +987E0011 A07E0002 +1C630008 7F43DA14 +887A0000 2C030000 +41820010 2C030001 +418201D4 48000404 +806DB8E0 80630004 +881A0001 1C000014 +7F230214 887A0001 +2C030007 40820038 +81990010 2C0C0000 +418200AC 7D8903A6 +38600000 38800001 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +480003B0 887A0001 +2C030008 40820014 +818DB614 7D8903A6 +4E800421 48000394 +887A0001 2C030021 +40820030 38600000 +3D808024 618CCD64 +7D8903A6 4E800421 +7FE3FB78 3D808039 +618C0228 7D8903A6 +4E800421 4800035C +80790010 2C030000 +41820024 7C6903A6 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +48000330 887E0000 +987E0001 887A0001 +987E0000 3A800000 +806DB8E0 80630004 +881E0000 1C000014 +7C630214 8963000C +887E0000 7E84A378 +3D808022 618C9938 +7D8903A6 4E800421 +2C030000 4182000C +B29E0002 48000010 +3A940001 7C145800 +4180FFD0 38600001 +3D808022 618CB3A0 +7D8903A6 4E800421 +3D808039 618C0CD4 +7D8903A6 4E800421 +7FE3FB78 3D808039 +618C0228 7D8903A6 +4E800421 806DB8E0 +80630004 881E0000 +1C000014 7F830214 +38600000 38800001 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 3C80803D +60847090 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +808DC19C 8803000D +508026B6 9803000D +48000238 3D80801A +618C4B9C 7D8903A6 +4E800421 881A0001 +98030000 3D80801A +618C4B60 7D8903A6 +4E800421 4800020C +57A006B5 41820148 +38600000 3D808002 +618C4030 7D8903A6 +4E800421 887C000D +7C630774 2C03FFFF +40820030 3D80801A +618C4B9C 7D8903A6 +4E800421 38000000 +98030000 3D80801A +618C4B60 7D8903A6 +4E800421 480001B4 +38600000 987E0011 +887E0000 987E0001 +887C000D 987E0000 +39800000 893E0001 +806DB8E0 80630004 +881E0000 1C000014 +7C630214 8963000C +81430008 1C0C0008 +7C6A0214 88030000 +2C000000 40820018 +88030001 7C004800 +4082000C B19E0002 +48000010 398C0001 +7C0C5800 4180FFD0 +38600003 3D808022 +618CB3A0 7D8903A6 +4E800421 3D808039 +618C0CD4 7D8903A6 +4E800421 7FE3FB78 +3D808039 618C0228 +7D8903A6 4E800421 +38600000 38800001 +38A00080 3D808039 +618C01F0 7D8903A6 +4E800421 3C80803D +60847090 38A00000 +3D808038 618CFD54 +7D8903A6 4E800421 +808DC19C 8803000D +508026B6 9803000D +480000C0 57A007FF +4182005C 38600002 +3D808002 618C4030 +7D8903A6 4E800421 +A29E0002 3A94FFFF +7E800734 2C00FFFF +4181000C 887C000C +3A83FFFF 887E0000 +7E84A378 3D808022 +618C9938 7D8903A6 +4E800421 2C030000 +4182FFCC B29E0002 +48000060 57A007BD +41820058 38600002 +3D808002 618C4030 +7D8903A6 4E800421 +A29E0002 3A940001 +889C000C 7C142000 +41800008 3A800000 +887E0000 7E84A378 +3D808022 618C9938 +7D8903A6 4E800421 +2C030000 4182FFD0 +B29E0002 48000004 +BA810008 80010104 +38210100 7C0803A6 +4E800020 00000000 +C23D7074 0000003C +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 83DF0008 +83BF0000 839F0004 +836200F8 807B0000 +2C03001E 4080013C +3B400000 833B0000 +3B1B0004 48000018 +80780000 7C03F800 +4182010C 3B5A0001 +3B180004 7C1AC800 +4180FFE8 807B0000 +1C630004 38BB0004 +7FE3292E 807B0000 +38630001 907B0000 +807C0000 5479463E +5463023E 7F63EA14 +807C0004 54604636 +2C000080 4182000C +7F43EA14 48000008 +835C0004 2C190001 +41820028 2C190004 +41820028 2C190006 +41820020 2C19000A +41820060 2C19001A +41820070 48000078 +935B0000 48000070 +57438FFF 4182001C +5743843E 38630001 +5466801E 7C66D050 +5465043E 7CDA2B78 +2C190004 41820014 +2C190006 41820004 +5743843E 4800000C +5743043E 48000004 +B07B0000 48000028 +7C7BD050 546301BA +809B0000 7C632378 +907B0000 48000010 +7C7BD050 907B0000 +48000004 3B9C0008 +3BDEFFFF 2C1E0000 +4181FF28 BA810008 +80010104 38210100 +7C0803A6 4E800020 +48000049 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +48000025 7C6802A6 +38800000 3CA0804D +60A53940 3D808038 +618C8220 7D8903A6 +4E800421 4E800021 +6D2D6578 00000000 +4E800021 6572726F +723A206F 76657220 +32302078 46756E63 +74696F6E 7320696E +64657865 640A0000 +60000000 00000000 +C23D7060 00000016 +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 7C9E2378 +83ADB8DC 2C1D0000 +41820078 83820148 +387CFFFA 7C1F1800 +41800028 387CFFFF +7C1F1800 4181001C +387CFFFA 7C63F850 +48000045 7C8802A6 +7C6320AE 48000018 +A07D0000 A09D0002 +7C84F1D6 7C632214 +7C63FA14 6C638000 +C822CA08 90610084 +3C604330 90610080 +C8410080 EC220828 +48000010 4E800021 +03020101 05060000 +BA810008 80010104 +38210100 7C0803A6 +4E800020 00000000 +C23D706C 0000000C +7C0802A6 90010004 +9421FF00 BE810008 +7C7F1B78 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +38800000 7FE5FB78 +3D808000 618C3100 +7D8903A6 4E800421 +7FC3F378 BA810008 +80010104 38210100 +7C0803A6 4E800020 +60000000 00000000 +0435E6E4 901F0070 +0435E6E0 3800FFFF +0435ECFC 901E0070 +0435ECE0 3800FFFF +04360A38 80160070 +04360A3C 2C00FFFF +0435E918 901F0070 +C21A4C98 00000011 +818200F8 816DC018 +39400000 38E00000 +812C0000 390C0004 +48000028 80680000 +7C035800 40800014 +38AC0004 1C870004 +7C64292E 38E70001 +394A0001 39080004 +7C0A4800 4180FFD8 +90EC0000 818200F8 +386C0004 1C870004 +7C632214 38800000 +38A00078 1CC70004 +7CA62850 3D808000 +618C3100 7D8903A6 +4E800421 806DB08C +60000000 00000000 +C2228C10 00000003 +60000000 906DAFF8 +908DAFF4 90ADAFF0 +90CDAFEC 00000000 +04228BFC 60000000 +C2228AF8 00000004 +60000000 906DAFEC +3860FFFF 906DAFF8 +906DAFF4 906DAFF0 +60000000 00000000 +C2394BD4 0000003E +7C0802A6 90010004 +9421FF00 BE810008 +838200F8 3B600000 +835C0000 3B3C0004 +48000088 83190000 +80780000 809E0198 +7C041800 4180006C +80B80014 7C632A14 +7C041800 4181005C +3AE00000 82D80018 +8078001C 1C97000C +7D832214 80780000 +808C0000 7C632214 +809E0198 7C041800 +41800024 80780000 +808C0004 7C632214 +809E0198 7C041800 +4181000C 83AC0008 +480000D0 3AF70001 +7C17B000 4BFFFFB4 +3B7B0001 3B390004 +7C1BD000 4180FF78 +806DAFFC 2C030000 +418200A0 3B800000 +3B000000 83630000 +83430004 7F630E70 +7F230194 1C79000C +7D83D214 806C0000 +809E0198 7C041800 +40800028 7F3BCB78 +7C7CC850 2C030001 +40820008 3B000001 +7C630E70 7C630194 +7F23E214 4BFFFFC8 +806C0004 7C041800 +41800030 2C180001 +41820038 7F3CCB78 +7C7CD850 2C030001 +40820008 3B000001 +7C630E70 7C630194 +7F23E214 4BFFFF90 +83AC0008 2C1D0000 +41820008 4800000C +48000075 7FA802A6 +7FA3EB78 3D808032 +618C5B04 7D8903A6 +4E800421 2C03002D +40810024 38610080 +7FA4EB78 38A0002D +3D808000 618C31F4 +7D8903A6 4E800421 +3BA10080 48000021 +7C6802A6 7FA4EB78 +3D808034 618C56A8 +7D8903A6 4E800421 +4800001C 4E800021 +53796D62 6F6C3A20 +25730A00 4E800021 +4E2F4100 BA810008 +80010104 38210100 +7C0803A6 5760018D +60000000 00000000 +C2397838 00000037 +7C0802A6 90010004 +9421FF00 BE810008 +480000DD 7C6802A6 +3D808033 618C796C +7D8903A6 4E800421 +2C03FFFF 4182009C +480000BD 7C6802A6 +3D808001 618C63D8 +7D8903A6 4E800421 +7C7F1B78 3D808037 +618C5404 7D8903A6 +4E800421 2C03FFFF +41820080 3D808034 +618C4168 7D8903A6 +4E800421 389F0044 +7C041800 40800064 +80620184 80630028 +2C030000 40820054 +4800005D 7C6802A6 +3D808001 618C6BE0 +7D8903A6 4E800421 +48000055 7C8802A6 +3D808038 618C0358 +7D8903A6 4E800421 +906DAFFC 48000094 +48000045 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +38600000 906DAFFC +48000070 4E800021 +4D784462 2E646174 +00000000 4E800021 +6D657844 65627567 +00000000 4E800021 +5761726E 696E673A +204D7844 622E6461 +74206E6F 7420666F +756E6420 6F6E2064 +6973630A 646F6C20 +73796D62 6F6C7320 +77696C6C 206E6F74 +20626520 6964656E +74696669 65642E00 +806DAFEC 38800010 +3D808039 618C4A48 +7D8903A6 4E800421 +806DAFF8 2C03FFFF +41820024 806DAFF8 +808DAFF4 80ADAFF0 +80CDAFEC 3D808039 +618C4B18 7D8903A6 +4E800421 BA810008 +80010104 38210100 +7C0803A6 38600000 +60000000 00000000 +C2394A74 0000004E +7C0802A6 90010004 +9421FF00 BE810008 +48000209 7C6802A6 +3D808034 618C56A8 +7D8903A6 4E800421 +3BE00000 83DC0004 +480001B8 838200F8 +3B600000 835C0000 +3B3C0004 48000088 +83190000 80780000 +809E0004 7C041800 +4180006C 80B80014 +7C632A14 7C041800 +4181005C 3AE00000 +82D80018 8078001C +1C97000C 7D832214 +80780000 808C0000 +7C632214 809E0004 +7C041800 41800024 +80780000 808C0004 +7C632214 809E0004 +7C041800 4181000C +83AC0008 480000D0 +3AF70001 7C17B000 +4BFFFFB4 3B7B0001 +3B390004 7C1BD000 +4180FF78 806DAFFC +2C030000 418200A0 +3B800000 3B000000 +83630000 83430004 +7F630E70 7F230194 +1C79000C 7D83D214 +806C0000 809E0004 +7C041800 40800028 +7F3BCB78 7C7CC850 +2C030001 40820008 +3B000001 7C630E70 +7C630194 7F23E214 +4BFFFFC8 806C0004 +7C041800 41800030 +2C180001 41820038 +7F3CCB78 7C7CD850 +2C030001 40820008 +3B000001 7C630E70 +7C630194 7F23E214 +4BFFFF90 83AC0008 +2C1D0000 41820008 +4800000C 480000C5 +7FA802A6 7FA3EB78 +3D808032 618C5B04 +7D8903A6 4E800421 +2C03002A 40810024 +38610080 7FA4EB78 +38A0002A 3D808000 +618C31F4 7D8903A6 +4E800421 3BA10080 +48000071 7C6802A6 +809E0004 7FA5EB78 +3D808034 618C56A8 +7D8903A6 4E800421 +83DE0000 3BFF0001 +2C1F000A 4080005C +2C1EFFFF 4082FE40 +48000050 48000001 +7C6802A6 3D808034 +618C56A8 7D8903A6 +4E800421 48000000 +4E800021 204C5220 +53617665 3A202053 +796D626F 6C0A0000 +4E800021 25583A20 +2025730A 00000000 +4E800021 4E2F4100 +BA810008 80010104 +38210100 7C0803A6 +3D808039 618C4B04 +7D8903A6 4E800420 +60000000 00000000 C20AC5B8 00000002 #Common/NanaDeterminism/NanaDeterminism.asm 7C7D1B78 3BC00000 60000000 00000000 @@ -5519,7 +6749,7 @@ C21D24FC 00000018 #Common/PSCameraIndependentMonitor/PSCameraIndependentMonitor. C2F00000 42F00000 42A00000 C1A00000 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 4BFFFFD9 7FA802A6 807E002C A86300EE 3D808003 @@ -5536,9 +6766,79 @@ FC020840 41810018 C03D000C FC020840 4180000C 38600001 48000008 38600000 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 60000000 00000000 +C20DB880 00000003 #External/PreventWobbling/Init Wobble Count Air.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C20DBBD4 00000003 #External/PreventWobbling/Init Wobble Count Ground.asm +38600000 987D2384 +3860FFFF B07D2386 +8001005C 00000000 +C208F090 0000003D #External/PreventWobbling/Wobble Check.asm +807B0010 2C0300DF +418001D8 2C0300E4 +418101D0 807B1A58 +2C030000 418201C4 +8083002C 88842222 +5484077B 418201B4 +809B1868 7C032000 +41820034 A0A40000 +2C050006 4082019C +80A4002C 80850518 +7C032000 4082018C +A0650DA8 A09B2386 +7C032000 4182017C +48000018 80A3002C +A0652088 A09B2386 +7C032000 41820164 +B07B2386 887B2384 +38630001 987B2384 +3D808016 618CB168 +7D8903A6 4E800421 +2C030000 4082013C +887B2384 2C030003 +40810130 7C0802A6 +90010004 9421FF20 +BE8100B0 829B1A58 +7E83A378 3D80800D +618CA698 7D8903A6 +4E800421 8074002C +8863000C 38800001 +3D808003 618C418C +7D8903A6 4E800421 +2C030000 418200C4 +7C751B78 8095002C +8804221F 54000673 +408200B0 88042219 +5400077B 408200A4 +88042071 5400E73E +2C00000D 41820094 +80A400E0 2C050000 +4082001C 38800000 +3D80800D 618CA698 +7D8903A6 4E800421 +48000070 8075002C +3D808007 618CD5D4 +7D8903A6 4E800421 +8075002C 80ADAEB4 +C0050374 C023002C +FC200850 EC000072 +D0030080 C0050378 +D0030084 C0029700 +D0032340 C0229700 +C0429704 FC600890 +7EA3AB78 388000E6 +38A00000 38C00000 +3D808006 618C93AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +3D808008 618CF0C8 +7D8903A6 4E800420 +801B0010 00000000 $Recommended: Normal Lag Reduction [Hannes Mann] *Reduces input lag @@ -5555,38 +6855,38 @@ C2376A24 00000026 #Common/UseInGameDelay/ApplyInGameDelay.asm 7D8903A6 4E800421 2C030002 41820014 2C030003 4182000C -2C030004 408200F8 +2C030004 408200F4 3C608048 88639D30 -2C030008 418200E8 +2C030008 418200E4 3C608047 60639D64 80630000 2C030000 -408200D4 7C0802A6 -90010004 9421FF50 -BE810008 3C60802F -6063666C 80830000 -5485863E 7CA50774 -54A5801E 5484043A -7C842B78 7C632214 -83E30008 887F0000 -2C030000 40810080 -38610038 388100DC -38A00030 3D808000 -618C31F4 7D8903A6 -4E800421 887F0001 -1C630030 3BC30002 -386100DC 7C9FF214 -38A00030 3D808000 -618C31F4 7D8903A6 -4E800421 7C7FF214 -38810038 38A00030 +408200D0 7C0802A6 +90010004 9421FF20 +BE8100B0 83A10000 +3C60802F 6063666C +80830000 5485302E +38800040 7C8523D6 +7C632214 83E30008 +887F0000 2C030000 +40810080 38610008 +389D002C 38A00030 3D808000 618C31F4 7D8903A6 4E800421 -889F0000 887F0001 -38630001 7C032000 -41800008 38600000 -987F0001 BA810008 -800100B4 382100B0 -7C0803A6 00000000 +887F0001 1C630030 +3BC30002 387D002C +7C9FF214 38A00030 +3D808000 618C31F4 +7D8903A6 4E800421 +7C7FF214 38810008 +38A00030 3D808000 +618C31F4 7D8903A6 +4E800421 889F0000 +887F0001 38630001 +7C032000 41800008 +38600000 987F0001 +BA8100B0 800100E4 +382100E0 7C0803A6 +60000000 00000000 C22F666C 0000005C #Common/UseInGameDelay/InitializeInGameDelay.asm 4800007C 4E800021 80000000 4E800021 @@ -5595,19 +6895,19 @@ C22F666C 0000005C #Common/UseInGameDelay/InitializeInGameDelay.asm 3EA8F5C3 44656C61 793A2025 64660000 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 7C7F1B78 +90010004 9421FF20 +BE8100B0 7C7F1B78 880DB6CC 2C000001 41820018 7FE3FB78 3D808039 618C10D8 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 7C7F1B78 3C608048 88639D30 2C030008 4182024C 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 386002D2 3D808037 618CF1E4 7D8903A6 4E800421 7C7F1B78 @@ -5677,12 +6977,12 @@ C05D000C 7F83E378 C03D0010 C05D0010 3D80803A 618C7548 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 7FE3FB78 00000000 C200561C 00000013 #Common/GetCommonMinorID/GetCommonMinorID.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3CA08048 8BC59D30 8BE59D33 3FA0803D 63BDACA4 38800000 @@ -5696,11 +6996,27 @@ C200561C 00000013 #Common/GetCommonMinorID/GetCommonMinorID.asm 7C06F800 4082000C 8865000C 48000010 38840001 2C0600FF -4082FFDC BA810008 -800100B4 382100B0 +4082FFDC BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 +$Recommended: Lagless FoD [Achilles, Myougi, Dan Salvato] +*Disables particles and reflection on FoD to improve performance +C21CBB90 00000005 #Lagless FoD +9421FFF8 3CC0804A +80C6ED78 3CA00002 +60A5AE44 7CA53050 +88C50000 60C60004 +98C50000 00000000 +041CC8AC FC000028 +041CBE9C 60000000 +041CBEF0 60000000 +041CBF54 60000000 +04390838 60000000 +041CD250 60000000 +041CCDCC 480000B4 + $Optional: Widescreen 16:9 [Dan Salvato, mirrorbender, Achilles1515, UnclePunch] *Set Aspect Ratio to "Force 16:9" in Graphics for 16:9 monitors ---------------------- *Will not cause desyncs when playing online diff --git a/Output/Playback/GALE01r2.ini b/Output/Playback/GALE01r2.ini index 15def90f..94f05bdb 100644 --- a/Output/Playback/GALE01r2.ini +++ b/Output/Playback/GALE01r2.ini @@ -1,4 +1,5 @@ # GALE01 - Super Smash Bros. Melee NTSC-U 1.02 +# DO NOT EDIT - generated by gecko [Core] CPUThread = False @@ -9,6 +10,7 @@ FastDiscSpeed = True [Gecko_Enabled] $Required: General Codes $Required: Slippi Playback +$Recommended: Slippi Recording $Optional: Show Player Names [Gecko] @@ -62,7 +64,7 @@ C213C388 0000000A #Common/CostumeBoundCheck/PuffCostume.asm 809C002C 00000000 C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3BE00000 7FE3FB78 3D808003 618C241C 7D8903A6 4E800421 @@ -114,18 +116,18 @@ C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 4E800421 3B7B0001 2C1B0006 4180FF68 3BFF0001 2C1F0006 -4180FEF4 BA810008 -800100B4 382100B0 +4180FEF4 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan] +$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan, Krohnos] *Used to play back a .slp file *Will play replay configured in playback.txt C216E9E4 0000001D #Playback/Core/CleanDynamicGeckos.asm 3BC30000 7C0802A6 -90010004 9421FF50 -BE810008 83CDB64C +90010004 9421FF20 +BE8100B0 83CDAFC0 83BE0010 3B800000 807D0000 2C030000 41820018 3B9C0001 @@ -149,21 +151,21 @@ BE810008 83CDB64C 809D0004 3D808032 618C8F50 7D8903A6 4E800421 3B5AFFFC -4BFFFFBC BA810008 -800100B4 382100B0 +4BFFFFBC BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C216D298 00000016 #Playback/Core/FetchGameFrame.asm 881F0008 2C000000 408200A0 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C +90010004 9421FF20 +BE8100B0 806DAFC0 83630000 38600076 987B0000 806DB654 907B0001 7F63DB78 38800005 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7F63DB78 3880018F +7F63DB78 388001A7 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887B0000 @@ -172,24 +174,25 @@ BE810008 806DB64C 7D8903A6 4E800421 3C60804C 38000000 98031F7B 4BFFFF90 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 881F0008 00000000 -C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm +C206B0DC 0000004B #Playback/Core/RestoreGameFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 8BBF000C 7FA3EB78 3D808003 618C1724 7D8903A6 4E800421 -7C7C1B78 832DB64C +7C7C1B78 832DAFC0 83790000 7FE3FB78 3D808000 618C55F8 7D8903A6 4E800421 -7C741B78 389B0007 -88BF000C 1CA50062 -7C842A14 1CB40031 -7F442A14 3C80804D -807A0000 90645F90 +7C741B78 2C140000 +41820010 8879056F +2C030000 418201E4 +389B0007 88BF000C +1CA50068 7C842A14 +1CB40034 7F442A14 807A0004 907F0620 807A0008 907F0624 807A000C 907F0638 @@ -197,62 +200,68 @@ C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm 807A0014 907F0650 807A0018 907F065C 8879056F 2C030000 -41820024 807A001C -907F00B0 807A0020 -907F00B4 807A0024 -907F002C 807A0028 -907F0010 3C608046 -6063B108 3C80804C -60841F78 88840001 -3884FFFF 2C040000 -40A00008 38840005 -1C840030 7C632214 -889F0618 1C84000C -7E832214 887A002C -98740002 8879056F -2C030000 4182004C -807A002D 2C03FFFF -41820040 90610040 -C0210040 C05F1830 -EC211028 C0429500 -FC011040 41820024 -7FE3FB78 C0210040 +41820030 3C80804D +807A0000 90645F90 +807A001C 907F00B0 +807A0020 907F00B4 +807A0024 907F002C +807A0028 907F0010 +3C608046 6063B108 +3C80804C 60841F78 +88840001 3884FFFF +2C040000 40A00008 +38840005 1C840030 +7C632214 889F0618 +1C84000C 7E832214 +887A002C 98740002 +887A002D 98740003 +887A0032 98740004 +887A0033 98740005 +8879056F 2C030000 +4182004C 807A002E +2C03FFFF 41820040 +90610040 C0210040 C05F1830 EC211028 -3D808006 618CCC7C -7D8903A6 4E800421 -806DB654 2C03FF85 -408200AC 7FE3FB78 -38800000 C0228874 -3D808007 618C592C -7D8903A6 4E800421 -807F00B0 907F06F4 -907F070C 807F00B4 -907F06F8 907F0710 -807F00B8 907F06FC -907F0714 C03F00B4 -D03F2344 806DAE0C -907F0728 887F000C -889F221F 5484EFFE -38BF00B0 3D808003 -618C2828 7D8903A6 -4E800421 7FC3F378 -3D808007 618C61C8 -7D8903A6 4E800421 -807F0890 C0230040 -D023002C C0230044 -D0230030 3D808002 -618CF3AC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 881F2219 -60000000 00000000 -C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm +C0429500 FC011040 +41820024 7FE3FB78 +C0210040 C05F1830 +EC211028 3D808006 +618CCC7C 7D8903A6 +4E800421 806DB654 +2C03FF85 408200AC +7FE3FB78 38800000 +C0228874 3D808007 +618C592C 7D8903A6 +4E800421 807F00B0 +907F06F4 907F070C +807F00B4 907F06F8 +907F0710 807F00B8 +907F06FC 907F0714 +C03F00B4 D03F2344 +806DAE0C 907F0728 +887F000C 889F221F +5484EFFE 38BF00B0 +3D808003 618C2828 +7D8903A6 4E800421 +7FC3F378 3D808007 +618C61C8 7D8903A6 +4E800421 807F0890 +C0230040 D023002C +C0230044 D0230030 +3D808002 618CF3AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +881F2219 00000000 +C216E748 000000A1 #Playback/Core/RestoreGameInfo.asm +3D808022 618C54B8 +7D8903A6 4E800421 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 386005EC 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 388005EC +938DAFC0 388005EC 3D808000 618CC160 7D8903A6 4E800421 38600221 3D808037 @@ -321,7 +330,9 @@ C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 807E021D 3D808037 618CF1E4 7D8903A6 4E800421 7C7D1B78 -93BC0008 3860008A +93BC0008 3C808000 +60845600 387DFFF8 +90640000 3860008A 987D0000 7FA3EB78 38800001 38A00001 3D808000 618C55F0 @@ -343,16 +354,16 @@ C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 7D8903A6 4E800421 4800013C 4E800021 2C050000 41820018 -80CDB64C 8066000C +80CDAFC0 8066000C 38630008 7C632A14 9066000C 4E800020 4E800021 2C050000 41820108 7C0802A6 -90010004 9421FF50 -BE810008 7C9E2378 +90010004 9421FF20 +BE8100B0 7C9E2378 7CBB2B78 80BE0000 54A501FE 64BD8000 -834DB64C 833A0014 +834DAFC0 833A0014 2C030004 41820014 2C030006 41820014 2C0300C2 41820014 @@ -378,8 +389,8 @@ BE810008 7C9E2378 7FA3EB78 7F64DB78 3D808032 618C8F50 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 38600000 809C0014 90640000 7FA3EB78 809E021D @@ -394,19 +405,18 @@ BA810008 800100B4 7D8903A6 4E800421 4800004C 4E800021 7C0802A6 90010004 -9421FF50 BE810008 -806DB64C 83A30000 +9421FF20 BE8100B0 +806DAFC0 83A30000 887D0002 2C030000 41820010 807D0003 3C80804D 90645F90 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 3C608017 -60000000 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 C216D304 00000009 #Playback/Core/RestoreLRAStart.asm -806DB64C 80630000 +806DAFC0 80630000 88630000 2C030002 4082002C 3860FFFF 38800007 3D808016 @@ -416,18 +426,18 @@ C216D304 00000009 #Playback/Core/RestoreLRAStart.asm 4E800420 7FE3FB78 60000000 00000000 C216B9C0 00000012 #Playback/Core/RestoreStockSteal.asm -80ADB64C 80A50004 +80ADAFC0 80A50004 38800089 98850000 808DB654 90850001 98650005 7CA32B78 38800006 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -806DB64C 80630004 +806DAFC0 80630004 38800001 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -806DB64C 80630004 +806DAFC0 80630004 88630000 2C030000 41820014 3D808016 618CBA1C 7D8903A6 @@ -442,13 +452,13 @@ C21A501C 0000002A #Playback/Core/FastForward/FastForward.asm 3D80801A 618C45E8 7D8903A6 4E800421 2C030002 41820018 -806DB64C 80630000 +806DAFC0 80630000 88630000 2C030003 41820024 38600001 38800002 3D808002 618C5064 7D8903A6 4E800421 7C1AD800 -480000E0 806DB64C +480000E0 806DAFC0 80630000 88630001 2C030001 4182001C 38600000 38800000 @@ -456,8 +466,8 @@ C21A501C 0000002A #Playback/Core/FastForward/FastForward.asm 7D8903A6 4E800421 4800000D 2C0300FF 480000A8 7C0802A6 -90010004 9421FF50 -BE810008 3D808003 +90010004 9421FF20 +BE8100B0 3D808003 618C0A50 7D8903A6 4E800421 3D808002 618CA4AC 7D8903A6 @@ -473,8 +483,8 @@ BE810008 3D808003 3D808008 618C6A8C 7D8903A6 4E800421 82940008 2C140000 -4082FFD4 BA810008 -800100B4 382100B0 +4082FFD4 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C2377544 00000002 #Playback/Core/FastForward/IncrementPadIndex.asm @@ -501,8 +511,8 @@ C21A6348 000000AB #Playback/Core/Scene/SceneThink_Playback.asm 618CFD54 7D8903A6 4E800421 480004F0 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 48000461 +90010004 9421FF20 +BE8100B0 48000461 7FC802A6 38600000 3880FFFF 3D80803A 618C6754 7D8903A6 @@ -655,8 +665,8 @@ C33E0000 00000000 2E2E0000 2E2E2E00 4E800021 736C6970 70692E67 67000000 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 3D80801A 618C6368 7D8903A6 4E800420 807F0000 @@ -668,8 +678,8 @@ C238D224 00000015 #Playback/Core/Sounds/AssignSoundInstanceId.asm 80639D30 5463443E 2C03010E 40820090 7C0802A6 90010004 -9421FF50 BE810008 -83EDB64C 3BDF001C +9421FF20 BE8100B0 +83EDAFC0 3BDF001C 8B9E0000 3C608048 80639D60 809F056B 7C032000 41810028 @@ -682,8 +692,8 @@ C238D224 00000015 #Playback/Core/Sounds/AssignSoundInstanceId.asm 88660000 3863FFFF 1C630006 38A60001 7CA51A14 807D000C -90650002 BA810008 -800100B4 382100B0 +90650002 BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C21A5014 00000032 #Playback/Core/Sounds/HandleFrameSoundLog.asm 41A20014 3D80801A @@ -692,10 +702,10 @@ C21A5014 00000032 #Playback/Core/Sounds/HandleFrameSoundLog.asm 80639D30 5463443E 2C03010E 40820168 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808034 618C7364 7D8903A6 4E800421 -7C7D1B78 83EDB64C +7C7D1B78 83EDAFC0 3BDF001C 8B9E0000 3F008048 83189D60 3B18FFFF 82FF056B @@ -712,7 +722,7 @@ A0630001 1C870006 7C862214 A0840001 7C032000 41820030 38E70001 88660000 -2C070003 4180FFD4 +7C071800 4180FFD4 1C790006 7C651A14 80630003 3D808002 618C36B8 7D8903A6 @@ -733,15 +743,15 @@ A0630001 1C870006 3B9CFFF9 9B9E0000 7FA3EB78 3D808034 618C738C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C2088224 0000001D #Playback/Core/Sounds/NoDestroyVoice.asm 3C608048 80639D30 5463443E 2C03010E 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BBF001C 57DE043E 8B9D0000 3C608048 80639D60 809F056B @@ -758,20 +768,20 @@ BE810008 83EDB64C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C8244 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C20882B0 0000001D #Playback/Core/Sounds/NoDestroyVoice2.asm 3C608048 80639D30 5463443E 2C03010E 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BBF001C 57DE043E 8B9D0000 3C608048 80639D60 809F056B @@ -788,20 +798,20 @@ BE810008 83EDB64C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C82D0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C238D0B0 00000027 #Playback/Core/Sounds/PreventDuplicateSounds.asm 3C608048 80639D30 5463443E 2C03010E 40820120 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BDF001C 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 @@ -829,16 +839,27 @@ B3650000 93450002 88660000 38630001 98660000 2C1D0000 41820028 7F43D378 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808038 618CD2A0 7D8903A6 4E800420 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 2C1A0000 00000000 +C216E8C8 00000005 #Playback/Core/Stadium/Enable Home Run Contest Distance.asm +3D808046 618CDB77 +898C0000 2C0C0054 +4182000C 819F0044 +4800000C 3D808018 +618C1998 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 3BE00000 887E221F 5460EFFF 41820038 887E000C @@ -848,8 +869,8 @@ C20055F8 0000000F #Common/GetIsFollower.asm 1C030003 7C640214 88030002 2C000000 40820008 3BE00001 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C216D294 00000006 #Common/IncrementFrameIndex.asm @@ -907,6 +928,482 @@ C20056A8 00000005 #Common/CompatibilityHooks/RequestSSMLoad.asm 7C83612E 4E800020 60000000 00000000 +$Recommended: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337, Krohnos] +*Allows for outputting new replay data during playback. +*Used to power spectator service and upgrading replay versions. +040679BC 38802600 #Recording/ExtendPlayerBlock.asm +C23219EC 0000001D #Recording/FlushFrameBuffer.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +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 +618C55F0 7D8903A6 +4E800421 38600000 +906DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 8001001C +60000000 00000000 +C216D884 00000030 #Recording/SendGameEnd.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +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 0000010A #Recording/SendGameInfo.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820814 +38600005 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7B1B78 +936DB64C 38800005 +3D808000 618CC160 +7D8903A6 4E800421 +38600780 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +93DB0000 38600000 +906DB650 3C608000 +60635600 80630000 +38630008 38800000 +3D808000 618C55FC +7D8903A6 4E800421 +7C7C1B78 38600035 +987E0000 3860001C +987E0001 38600036 +987E0002 386002F8 +B07E0003 38600037 +987E0005 38600042 +B07E0006 38600038 +987E0008 38600054 +B07E0009 38600039 +987E000B 38600006 +B07E000C 3860003A +987E000E 3860000C +B07E000F 3860003B +987E0011 3860002C +B07E0012 3860003C +987E0014 38600008 +B07E0015 3860003D +987E0017 B39E0018 +38600010 987E001A +38600204 B07E001B +38600036 987E001D +3C600311 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 +3B200000 3C608048 +80639D30 5463443E +2C030208 4082017C +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 4800001C +387E01C2 38800118 +3D808000 618CC160 +7D8903A6 4E800421 +3D808000 618CADF4 +7D8903A6 4E800421 +987E02DA 2C190000 +41820044 387E02DB +38990394 38A00033 +3D808000 618C31F4 +7D8903A6 4E800421 +3C60803D 6063AD40 +80630000 81830088 +A06C0001 907E030E +886C0006 907E0312 +4800001C 387E02DB +3880003B 3D808000 +618CC160 7D8903A6 +4E800421 2C190000 +41820018 7F23CB78 +3D808037 618CF1B0 +7D8903A6 4E800421 +7FC3F378 38800316 +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 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 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +3C608017 00000000 +C206DA34 00000038 #Recording/SendGamePostFrame.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820180 +887F221F 546306F7 +40820174 8B7F000C +806DB64C 83A30000 +838DB650 7FBDE214 +38600038 987D0000 +806DB654 907D0001 +9B7D0005 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 +A07F18EC B07D0051 +A07F2088 B07D0053 +838DB650 3B9C0055 +938DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 8001001C +60000000 00000000 +C206B0E0 0000002E #Recording/SendGamePreFrame.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820130 +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 7C832214 +88640002 987D003B +88640003 987D0040 +88640004 987D0041 +88640005 987D0042 +807F1830 907D003C +838DB650 3B9C0043 +938DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 881F2219 +807F065C 00000000 +C2005604 0000000B #Recording/ShouldRecord.asm +3C608048 80639D30 +5463443E 2C030202 +41820034 2C030302 +4182002C 2C030208 +41820024 2C03010F +4182001C 2C030120 +41820014 2C03010E +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 + $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 @@ -919,16 +1416,16 @@ C1C07AE1 3C6F34D7 43160000 3F0A3D71 00000000 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 880DB6CC 2C000001 41820018 7FE3FB78 3D808039 618C10D8 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C60804D 60636D5C 80630000 3C80803F 608494D0 3D808038 @@ -957,7 +1454,7 @@ C1C07AE1 3C6F34D7 3D80803A 618C611C 7D8903A6 4E800421 7C7F1B78 4BFFFE91 -7F8802A6 834DB64C +7F8802A6 834DAFC0 3A800000 3EA0804A 62B50FF0 7E83A378 3D808003 618C241C @@ -1061,8 +1558,8 @@ C8210080 EC211028 C05C0014 EC2100B2 D036002C 3A940001 2C140006 4180FCD8 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 8001001C 00000000 $Optional: Game Music OFF [UnclePunch] @@ -1095,6 +1592,8 @@ C0030000 4800000C 4E800021 40DC7AE1 60000000 00000000 044DDB84 3E89FEFA #External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm +043761EC 4800001C #Normal Lag Reduction [Hannes Mann] +04376238 48000018 $Optional: Disable Screen Shake [Achilles1515] *Disables all screen shaking diff --git a/Output/Playback/GALJ01r2.ini b/Output/Playback/GALJ01r2.ini index dfb108de..8b3f3910 100644 --- a/Output/Playback/GALJ01r2.ini +++ b/Output/Playback/GALJ01r2.ini @@ -9,6 +9,7 @@ FastDiscSpeed = True [Gecko_Enabled] $Required: General Codes $Required: Slippi Playback +$Recommended: Slippi Recording $Optional: Show Player Names [Gecko] @@ -62,7 +63,7 @@ C213C388 0000000A #Common/CostumeBoundCheck/PuffCostume.asm 809C002C 00000000 C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3BE00000 7FE3FB78 3D808003 618C241C 7D8903A6 4E800421 @@ -114,18 +115,18 @@ C216DED4 00000039 #Common/CostumeBoundCheck/main.asm 4E800421 3B7B0001 2C1B0006 4180FF68 3BFF0001 2C1F0006 -4180FEF4 BA810008 -800100B4 382100B0 +4180FEF4 BA8100B0 +800100E4 382100E0 7C0803A6 8001001C 60000000 00000000 -$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan] +$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan, Krohnos] *Used to play back a .slp file *Will play replay configured in playback.txt C216E9E4 0000001D #Playback/Core/CleanDynamicGeckos.asm 3BC30000 7C0802A6 -90010004 9421FF50 -BE810008 83CDB64C +90010004 9421FF20 +BE8100B0 83CDAFC0 83BE0010 3B800000 807D0000 2C030000 41820018 3B9C0001 @@ -149,21 +150,21 @@ BE810008 83CDB64C 809D0004 3D808032 618C8F50 7D8903A6 4E800421 3B5AFFFC -4BFFFFBC BA810008 -800100B4 382100B0 +4BFFFFBC BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C216D298 00000016 #Playback/Core/FetchGameFrame.asm 881F0008 2C000000 408200A0 7C0802A6 -90010004 9421FF50 -BE810008 806DB64C +90010004 9421FF20 +BE8100B0 806DAFC0 83630000 38600076 987B0000 806DB654 907B0001 7F63DB78 38800005 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7F63DB78 3880018F +7F63DB78 388001A7 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887B0000 @@ -172,24 +173,25 @@ BE810008 806DB64C 7D8903A6 4E800421 3C60804C 38000000 98031F7B 4BFFFF90 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 881F0008 00000000 -C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm +C206B0DC 0000004B #Playback/Core/RestoreGameFrame.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 8BBF000C 7FA3EB78 3D808003 618C1724 7D8903A6 4E800421 -7C7C1B78 832DB64C +7C7C1B78 832DAFC0 83790000 7FE3FB78 3D808000 618C55F8 7D8903A6 4E800421 -7C741B78 389B0007 -88BF000C 1CA50062 -7C842A14 1CB40031 -7F442A14 3C80804D -807A0000 90645F90 +7C741B78 2C140000 +41820010 8879056F +2C030000 418201E4 +389B0007 88BF000C +1CA50068 7C842A14 +1CB40034 7F442A14 807A0004 907F0620 807A0008 907F0624 807A000C 907F0638 @@ -197,62 +199,68 @@ C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm 807A0014 907F0650 807A0018 907F065C 8879056F 2C030000 -41820024 807A001C -907F00B0 807A0020 -907F00B4 807A0024 -907F002C 807A0028 -907F0010 3C608046 -6063B108 3C80804C -60841F78 88840001 -3884FFFF 2C040000 -40A00008 38840005 -1C840030 7C632214 -889F0618 1C84000C -7E832214 887A002C -98740002 8879056F -2C030000 4182004C -807A002D 2C03FFFF -41820040 90610040 -C0210040 C05F1830 -EC211028 C0429500 -FC011040 41820024 -7FE3FB78 C0210040 +41820030 3C80804D +807A0000 90645F90 +807A001C 907F00B0 +807A0020 907F00B4 +807A0024 907F002C +807A0028 907F0010 +3C608046 6063B108 +3C80804C 60841F78 +88840001 3884FFFF +2C040000 40A00008 +38840005 1C840030 +7C632214 889F0618 +1C84000C 7E832214 +887A002C 98740002 +887A002D 98740003 +887A0032 98740004 +887A0033 98740005 +8879056F 2C030000 +4182004C 807A002E +2C03FFFF 41820040 +90610040 C0210040 C05F1830 EC211028 -3D808006 618CCC7C -7D8903A6 4E800421 -806DB654 2C03FF85 -408200AC 7FE3FB78 -38800000 C0228874 -3D808007 618C592C -7D8903A6 4E800421 -807F00B0 907F06F4 -907F070C 807F00B4 -907F06F8 907F0710 -807F00B8 907F06FC -907F0714 C03F00B4 -D03F2344 806DAE0C -907F0728 887F000C -889F221F 5484EFFE -38BF00B0 3D808003 -618C2828 7D8903A6 -4E800421 7FC3F378 -3D808007 618C61C8 -7D8903A6 4E800421 -807F0890 C0230040 -D023002C C0230044 -D0230030 3D808002 -618CF3AC 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 -7C0803A6 881F2219 -60000000 00000000 -C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm +C0429500 FC011040 +41820024 7FE3FB78 +C0210040 C05F1830 +EC211028 3D808006 +618CCC7C 7D8903A6 +4E800421 806DB654 +2C03FF85 408200AC +7FE3FB78 38800000 +C0228874 3D808007 +618C592C 7D8903A6 +4E800421 807F00B0 +907F06F4 907F070C +807F00B4 907F06F8 +907F0710 807F00B8 +907F06FC 907F0714 +C03F00B4 D03F2344 +806DAE0C 907F0728 +887F000C 889F221F +5484EFFE 38BF00B0 +3D808003 618C2828 +7D8903A6 4E800421 +7FC3F378 3D808007 +618C61C8 7D8903A6 +4E800421 807F0890 +C0230040 D023002C +C0230044 D0230030 +3D808002 618CF3AC +7D8903A6 4E800421 +BA8100B0 800100E4 +382100E0 7C0803A6 +881F2219 00000000 +C216E748 000000A1 #Playback/Core/RestoreGameInfo.asm +3D808022 618C54B8 +7D8903A6 4E800421 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 386005EC 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 388005EC +938DAFC0 388005EC 3D808000 618CC160 7D8903A6 4E800421 38600221 3D808037 @@ -321,7 +329,9 @@ C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 807E021D 3D808037 618CF1E4 7D8903A6 4E800421 7C7D1B78 -93BC0008 3860008A +93BC0008 3C808000 +60845600 387DFFF8 +90640000 3860008A 987D0000 7FA3EB78 38800001 38A00001 3D808000 618C55F0 @@ -343,16 +353,16 @@ C216E74C 0000009E #Playback/Core/RestoreGameInfo.asm 7D8903A6 4E800421 4800013C 4E800021 2C050000 41820018 -80CDB64C 8066000C +80CDAFC0 8066000C 38630008 7C632A14 9066000C 4E800020 4E800021 2C050000 41820108 7C0802A6 -90010004 9421FF50 -BE810008 7C9E2378 +90010004 9421FF20 +BE8100B0 7C9E2378 7CBB2B78 80BE0000 54A501FE 64BD8000 -834DB64C 833A0014 +834DAFC0 833A0014 2C030004 41820014 2C030006 41820014 2C0300C2 41820014 @@ -378,8 +388,8 @@ BE810008 7C9E2378 7FA3EB78 7F64DB78 3D808032 618C8F50 7D8903A6 4E800421 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 38600000 809C0014 90640000 7FA3EB78 809E021D @@ -394,19 +404,18 @@ BA810008 800100B4 7D8903A6 4E800421 4800004C 4E800021 7C0802A6 90010004 -9421FF50 BE810008 -806DB64C 83A30000 +9421FF20 BE8100B0 +806DAFC0 83A30000 887D0002 2C030000 41820010 807D0003 3C80804D 90645F90 -BA810008 800100B4 -382100B0 7C0803A6 -4E800020 BA810008 -800100B4 382100B0 -7C0803A6 3C608017 -60000000 00000000 +BA8100B0 800100E4 +382100E0 7C0803A6 +4E800020 BA8100B0 +800100E4 382100E0 +7C0803A6 00000000 C216D304 00000009 #Playback/Core/RestoreLRAStart.asm -806DB64C 80630000 +806DAFC0 80630000 88630000 2C030002 4082002C 3860FFFF 38800007 3D808016 @@ -416,18 +425,18 @@ C216D304 00000009 #Playback/Core/RestoreLRAStart.asm 4E800420 7FE3FB78 60000000 00000000 C216B9C0 00000012 #Playback/Core/RestoreStockSteal.asm -80ADB64C 80A50004 +80ADAFC0 80A50004 38800089 98850000 808DB654 90850001 98650005 7CA32B78 38800006 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -806DB64C 80630004 +806DAFC0 80630004 38800001 38A00000 3D808000 618C55F0 7D8903A6 4E800421 -806DB64C 80630004 +806DAFC0 80630004 88630000 2C030000 41820014 3D808016 618CBA1C 7D8903A6 @@ -442,13 +451,13 @@ C21A501C 0000002A #Playback/Core/FastForward/FastForward.asm 3D80801A 618C45E8 7D8903A6 4E800421 2C030002 41820018 -806DB64C 80630000 +806DAFC0 80630000 88630000 2C030003 41820024 38600001 38800002 3D808002 618C5064 7D8903A6 4E800421 7C1AD800 -480000E0 806DB64C +480000E0 806DAFC0 80630000 88630001 2C030001 4182001C 38600000 38800000 @@ -456,8 +465,8 @@ C21A501C 0000002A #Playback/Core/FastForward/FastForward.asm 7D8903A6 4E800421 4800000D 2C0300FF 480000A8 7C0802A6 -90010004 9421FF50 -BE810008 3D808003 +90010004 9421FF20 +BE8100B0 3D808003 618C0A50 7D8903A6 4E800421 3D808002 618CA4AC 7D8903A6 @@ -473,8 +482,8 @@ BE810008 3D808003 3D808008 618C6A8C 7D8903A6 4E800421 82940008 2C140000 -4082FFD4 BA810008 -800100B4 382100B0 +4082FFD4 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C2377544 00000002 #Playback/Core/FastForward/IncrementPadIndex.asm @@ -501,8 +510,8 @@ C21A6348 000000AB #Playback/Core/Scene/SceneThink_Playback.asm 618CFD54 7D8903A6 4E800421 480004F0 4E800021 7C0802A6 -90010004 9421FF50 -BE810008 48000461 +90010004 9421FF20 +BE8100B0 48000461 7FC802A6 38600000 3880FFFF 3D80803A 618C6754 7D8903A6 @@ -655,8 +664,8 @@ C33E0000 00000000 2E2E0000 2E2E2E00 4E800021 736C6970 70692E67 67000000 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 4E800020 3D80801A 618C6368 7D8903A6 4E800420 807F0000 @@ -668,8 +677,8 @@ C238D224 00000015 #Playback/Core/Sounds/AssignSoundInstanceId.asm 80639D30 5463443E 2C03010E 40820090 7C0802A6 90010004 -9421FF50 BE810008 -83EDB64C 3BDF001C +9421FF20 BE8100B0 +83EDAFC0 3BDF001C 8B9E0000 3C608048 80639D60 809F056B 7C032000 41810028 @@ -682,8 +691,8 @@ C238D224 00000015 #Playback/Core/Sounds/AssignSoundInstanceId.asm 88660000 3863FFFF 1C630006 38A60001 7CA51A14 807D000C -90650002 BA810008 -800100B4 382100B0 +90650002 BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C21A5014 00000032 #Playback/Core/Sounds/HandleFrameSoundLog.asm 41A20014 3D80801A @@ -692,10 +701,10 @@ C21A5014 00000032 #Playback/Core/Sounds/HandleFrameSoundLog.asm 80639D30 5463443E 2C03010E 40820168 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3D808034 618C7364 7D8903A6 4E800421 -7C7D1B78 83EDB64C +7C7D1B78 83EDAFC0 3BDF001C 8B9E0000 3F008048 83189D60 3B18FFFF 82FF056B @@ -712,7 +721,7 @@ A0630001 1C870006 7C862214 A0840001 7C032000 41820030 38E70001 88660000 -2C070003 4180FFD4 +7C071800 4180FFD4 1C790006 7C651A14 80630003 3D808002 618C36B8 7D8903A6 @@ -733,15 +742,15 @@ A0630001 1C870006 3B9CFFF9 9B9E0000 7FA3EB78 3D808034 618C738C 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 00000000 C2088224 0000001D #Playback/Core/Sounds/NoDestroyVoice.asm 3C608048 80639D30 5463443E 2C03010E 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BBF001C 57DE043E 8B9D0000 3C608048 80639D60 809F056B @@ -758,20 +767,20 @@ BE810008 83EDB64C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C8244 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C20882B0 0000001D #Playback/Core/Sounds/NoDestroyVoice2.asm 3C608048 80639D30 5463443E 2C03010E 408200CC 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BBF001C 57DE043E 8B9D0000 3C608048 80639D60 809F056B @@ -788,20 +797,20 @@ BE810008 83EDB64C 7C1E1800 41820018 39080001 88660000 7C081800 4180FFDC -48000024 BA810008 -800100B4 382100B0 +48000024 BA8100B0 +800100E4 382100E0 7C0803A6 3D808008 618C82D0 7D8903A6 -4E800420 BA810008 -800100B4 382100B0 +4E800420 BA8100B0 +800100E4 382100E0 7C0803A6 387F0000 60000000 00000000 C238D0B0 00000027 #Playback/Core/Sounds/PreventDuplicateSounds.asm 3C608048 80639D30 5463443E 2C03010E 40820120 7C0802A6 -90010004 9421FF50 -BE810008 83EDB64C +90010004 9421FF20 +BE8100B0 83EDAFC0 3BDF001C 3BA00000 3B400000 56FB043E 8B9E0000 3C608048 @@ -829,16 +838,27 @@ B3650000 93450002 88660000 38630001 98660000 2C1D0000 41820028 7F43D378 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 3D808038 618CD2A0 7D8903A6 4E800420 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 2C1A0000 00000000 +C216E8C8 00000005 #Playback/Core/Stadium/Enable Home Run Contest Distance.asm +3D808046 618CDB77 +898C0000 2C0C0054 +4182000C 819F0044 +4800000C 3D808018 +618C1998 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7E1B78 3BE00000 887E221F 5460EFFF 41820038 887E000C @@ -848,8 +868,8 @@ C20055F8 0000000F #Common/GetIsFollower.asm 1C030003 7C640214 88030002 2C000000 40820008 3BE00001 -7FE3FB78 BA810008 -800100B4 382100B0 +7FE3FB78 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 60000000 00000000 C216D294 00000006 #Common/IncrementFrameIndex.asm @@ -907,6 +927,482 @@ C20056A8 00000005 #Common/CompatibilityHooks/RequestSSMLoad.asm 7C83612E 4E800020 60000000 00000000 +$Recommended: Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337, Krohnos] +*Allows for outputting new replay data during playback. +*Used to power spectator service and upgrading replay versions. +040679BC 38802600 #Recording/ExtendPlayerBlock.asm +C23219EC 0000001D #Recording/FlushFrameBuffer.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +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 +618C55F0 7D8903A6 +4E800421 38600000 +906DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 8001001C +60000000 00000000 +C216D884 00000030 #Recording/SendGameEnd.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +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 0000010A #Recording/SendGameInfo.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820814 +38600005 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7B1B78 +936DB64C 38800005 +3D808000 618CC160 +7D8903A6 4E800421 +38600780 3D808037 +618CF1E4 7D8903A6 +4E800421 7C7E1B78 +93DB0000 38600000 +906DB650 3C608000 +60635600 80630000 +38630008 38800000 +3D808000 618C55FC +7D8903A6 4E800421 +7C7C1B78 38600035 +987E0000 3860001C +987E0001 38600036 +987E0002 386002F8 +B07E0003 38600037 +987E0005 38600042 +B07E0006 38600038 +987E0008 38600054 +B07E0009 38600039 +987E000B 38600006 +B07E000C 3860003A +987E000E 3860000C +B07E000F 3860003B +987E0011 3860002C +B07E0012 3860003C +987E0014 38600008 +B07E0015 3860003D +987E0017 B39E0018 +38600010 987E001A +38600204 B07E001B +38600036 987E001D +3C600311 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 +3B200000 3C608048 +80639D30 5463443E +2C030208 4082017C +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 4800001C +387E01C2 38800118 +3D808000 618CC160 +7D8903A6 4E800421 +3D808000 618CADF4 +7D8903A6 4E800421 +987E02DA 2C190000 +41820044 387E02DB +38990394 38A00033 +3D808000 618C31F4 +7D8903A6 4E800421 +3C60803D 6063AD40 +80630000 81830088 +A06C0001 907E030E +886C0006 907E0312 +4800001C 387E02DB +3880003B 3D808000 +618CC160 7D8903A6 +4E800421 2C190000 +41820018 7F23CB78 +3D808037 618CF1B0 +7D8903A6 4E800421 +7FC3F378 38800316 +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 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 4E800020 +BA8100B0 800100E4 +382100E0 7C0803A6 +3C608017 00000000 +C206DA34 00000038 #Recording/SendGamePostFrame.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820180 +887F221F 546306F7 +40820174 8B7F000C +806DB64C 83A30000 +838DB650 7FBDE214 +38600038 987D0000 +806DB654 907D0001 +9B7D0005 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 +A07F18EC B07D0051 +A07F2088 B07D0053 +838DB650 3B9C0055 +938DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 8001001C +60000000 00000000 +C206B0E0 0000002E #Recording/SendGamePreFrame.asm +7C0802A6 90010004 +9421FF20 BE8100B0 +3D808000 618C5604 +7D8903A6 4E800421 +2C030000 41820130 +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 7C832214 +88640002 987D003B +88640003 987D0040 +88640004 987D0041 +88640005 987D0042 +807F1830 907D003C +838DB650 3B9C0043 +938DB650 BA8100B0 +800100E4 382100E0 +7C0803A6 881F2219 +807F065C 00000000 +C2005604 0000000B #Recording/ShouldRecord.asm +3C608048 80639D30 +5463443E 2C030202 +41820034 2C030302 +4182002C 2C030208 +41820024 2C03010F +4182001C 2C030120 +41820014 2C03010E +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 + $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 @@ -919,16 +1415,16 @@ C1C07AE1 3C6F34D7 43160000 3F0A3D71 00000000 4E800021 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 7C7F1B78 880DB6CC 2C000001 41820018 7FE3FB78 3D808039 618C10D8 7D8903A6 -4E800421 BA810008 -800100B4 382100B0 +4E800421 BA8100B0 +800100E4 382100E0 7C0803A6 4E800020 7C0802A6 90010004 -9421FF50 BE810008 +9421FF20 BE8100B0 3C60804D 60636D5C 80630000 3C80803F 608494D0 3D808038 @@ -957,7 +1453,7 @@ C1C07AE1 3C6F34D7 3D80803A 618C611C 7D8903A6 4E800421 7C7F1B78 4BFFFE91 -7F8802A6 834DB64C +7F8802A6 834DAFC0 3A800000 3EA0804A 62B50FF0 7E83A378 3D808003 618C241C @@ -1061,8 +1557,8 @@ C8210080 EC211028 C05C0014 EC2100B2 D036002C 3A940001 2C140006 4180FCD8 -BA810008 800100B4 -382100B0 7C0803A6 +BA8100B0 800100E4 +382100E0 7C0803A6 8001001C 00000000 $Optional: Game Music OFF [UnclePunch] @@ -1095,6 +1591,8 @@ C0030000 4800000C 4E800021 40DC7AE1 60000000 00000000 044DDB84 3E89FEFA #External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm +043761EC 4800001C #Normal Lag Reduction [Hannes Mann] +04376238 48000018 $Optional: Disable Screen Shake [Achilles1515] *Disables all screen shaking diff --git a/Playback/Core/CleanDynamicGeckos.asm b/Playback/Core/CleanDynamicGeckos.asm index 7000ce9b..739af7e4 100644 --- a/Playback/Core/CleanDynamicGeckos.asm +++ b/Playback/Core/CleanDynamicGeckos.asm @@ -16,7 +16,7 @@ addi r30, r3, 0 backup -lwz REG_DirectoryBuffer, primaryDataBuffer(r13) +lwz REG_DirectoryBuffer, playbackDataBuffer(r13) #################################################################################################### # Step 1: First we need to count how many items there are so we can allocate a buffer diff --git a/Playback/Core/FastForward/FastForward.asm b/Playback/Core/FastForward/FastForward.asm index 467de7bd..c088421f 100644 --- a/Playback/Core/FastForward/FastForward.asm +++ b/Playback/Core/FastForward/FastForward.asm @@ -29,7 +29,7 @@ beq PreviousCodeLine # check status for fast forward - lwz r3,primaryDataBuffer(r13) # directory address + lwz r3,playbackDataBuffer(r13) # directory address lwz r3,PDB_EXI_BUF_ADDR(r3) # EXI buf address lbz r3,(BufferStatus_Start)+(BufferStatus_Status)(r3) cmpwi r3, CONST_FrameFetchResult_FastForward @@ -49,7 +49,7 @@ FastForward: #li r3,1 #branchl r12,VISetBlack # mute music and SFX - lwz r3,primaryDataBuffer(r13) # directory address + lwz r3,playbackDataBuffer(r13) # directory address lwz r3,PDB_EXI_BUF_ADDR(r3) # EXI buf address lbz r3,(RBStatus_Start)+(RBStatus_Status)(r3) cmpwi r3, 1 diff --git a/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW.s b/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW.s index 365ac8b4..c8f20771 100644 --- a/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW.s +++ b/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW.s @@ -9,7 +9,7 @@ .include "Playback/Playback.s" # check status for fast forward -lwz r11,primaryDataBuffer(r13) # directory address +lwz r11,playbackDataBuffer(r13) # directory address lwz r11,PDB_EXI_BUF_ADDR(r11) # EXI buf address lbz r11,(RBStatus_Start)+(RBStatus_Status)(r11) cmpwi r11, 0 diff --git a/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW2.s b/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW2.s index aed217d6..0453b764 100644 --- a/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW2.s +++ b/Playback/Core/FastForward/SkipCameraAdjustmentOnFFW2.s @@ -9,7 +9,7 @@ .include "Playback/Playback.s" # check status for fast forward -lwz r11,primaryDataBuffer(r13) # directory address +lwz r11,playbackDataBuffer(r13) # directory address lwz r11,PDB_EXI_BUF_ADDR(r11) # EXI buf address lbz r11,(RBStatus_Start)+(RBStatus_Status)(r11) cmpwi r11, 0 diff --git a/Playback/Core/FetchGameFrame.asm b/Playback/Core/FetchGameFrame.asm index d0e741fb..8948e6bd 100644 --- a/Playback/Core/FetchGameFrame.asm +++ b/Playback/Core/FetchGameFrame.asm @@ -40,7 +40,7 @@ FetchGameFrame: backup -lwz r3,primaryDataBuffer(r13) +lwz r3,playbackDataBuffer(r13) lwz BufferPointer,PDB_EXI_BUF_ADDR(r3) FetchFrameInfo_REQUEST_DATA: diff --git a/Playback/Core/RestoreGameFrame.asm b/Playback/Core/RestoreGameFrame.asm index f1083613..268a4679 100644 --- a/Playback/Core/RestoreGameFrame.asm +++ b/Playback/Core/RestoreGameFrame.asm @@ -32,7 +32,7 @@ mr PlayerDataStatic,r3 # get buffer pointer - lwz REG_PDB_ADDR,primaryDataBuffer(r13) + lwz REG_PDB_ADDR,playbackDataBuffer(r13) lwz BufferPointer,PDB_EXI_BUF_ADDR(REG_PDB_ADDR) #Check if this player is a follower @@ -40,6 +40,14 @@ branchl r12,FN_GetIsFollower mr r20,r3 +# If we are not resyncing, let the follower's inputs be calculated by the game + cmpwi r20, 0 + beq SKIP_FOLLOWER_RESYNC_CHECK + lbz r3, PDB_SHOULD_RESYNC(REG_PDB_ADDR) + cmpwi r3, 0 + beq Injection_Exit + SKIP_FOLLOWER_RESYNC_CHECK: + # Get players offset in buffer () addi r4,BufferPointer, GameFrame_Start #get to player frame data start lbz r5,0xC(PlayerData) #get player number @@ -98,9 +106,6 @@ DesyncDetected: RestoreData: # Restore data - lis r4,0x804D - lwz r3,RNGSeed(PlayerBackup) - stw r3,0x5F90(r4) #RNG seed lwz r3,AnalogX(PlayerBackup) stw r3,0x620(PlayerData) #analog X lwz r3,AnalogY(PlayerBackup) @@ -120,6 +125,9 @@ RestoreData: cmpwi r3, 0 beq SKIP_RESYNC + lis r4,0x804D + lwz r3,RNGSeed(PlayerBackup) + stw r3,0x5F90(r4) #RNG seed lwz r3,XPos(PlayerBackup) stw r3,0xB0(PlayerData) #x position lwz r3,YPos(PlayerBackup) @@ -150,8 +158,14 @@ SKIP_RESYNC: mulli r4, r4, 0xc add r20, r3, r4 # move to the correct player position # Get backed up input value - lbz r3,AnalogRawInput(PlayerBackup) + lbz r3,AnalogRawInputX(PlayerBackup) stb r3, 0x2(r20) #store raw x analog + lbz r3, AnalogRawInputY(PlayerBackup) + stb r3, 0x3(r20) #store raw y analog + lbz r3, CStickRawInputX(PlayerBackup) + stb r3, 0x4(r20) #store raw x cstick + lbz r3, CStickRawInputY(PlayerBackup) + stb r3, 0x5(r20) #store raw y cstick # If we do not have resync logic enabled, don't try to restore percentage lbz r3, PDB_SHOULD_RESYNC(REG_PDB_ADDR) @@ -371,50 +385,42 @@ blrl FrameText: blrl - .string "P%d Frame: %d // Original // Restored -" + .string "P%d Frame: %d // Original // Restored\n" .align 2 RNGText: blrl - .string "RNG Seed: 0x%X // 0x%X -" + .string "RNG Seed: 0x%X // 0x%X\n" .align 2 XPosText: blrl - .string "X Position: %f // %f -" + .string "X Position: %f // %f\n" .align 2 YPosText: blrl - .string "Y Position: %f // %f -" + .string "Y Position: %f // %f\n" .align 2 FacingText: blrl - .string "Facing Direction: %1.0f // %1.0f -" + .string "Facing Direction: %1.0f // %1.0f\n" .align 2 ASText: blrl - .string "Action State: 0x%X %s // 0x%X %s -" + .string "Action State: 0x%X %s // 0x%X %s\n" .align 2 PercentText: blrl - .string "Percent: %1.2f // %1.2f -" + .string "Percent: %1.2f // %1.2f\n" .align 2 DividerText: blrl - .string "------Desync Detected-------- -" + .string "------Desync Detected--------\n" .align 2 .endif diff --git a/Playback/Core/RestoreGameInfo.asm b/Playback/Core/RestoreGameInfo.asm index b2552f6e..4724bd42 100644 --- a/Playback/Core/RestoreGameInfo.asm +++ b/Playback/Core/RestoreGameInfo.asm @@ -1,9 +1,9 @@ ################################################################################ -# Address: 8016e74c +# Address: 8016e748 ################################################################################ ################################################################################ -# Inject at address 8016e74c +# Inject at address 8016e748 # Function is StartMelee and we are loading game information right before # it gets read to initialize the match ################################################################################ @@ -16,6 +16,8 @@ .set REG_GeckoBuffer,29 .set REG_DirectoryBuffer,28 +branchl r12, 0x802254b8 # Replaced codeline, call function + ################################################################################ # subroutine: gameInfoLoad # description: reads game info from slippi and loads those into memory @@ -28,7 +30,7 @@ li r3, PDB_SIZE branchl r12, HSD_MemAlloc mr REG_DirectoryBuffer, r3 - stw REG_DirectoryBuffer, primaryDataBuffer(r13) # Store directory buffer location + stw REG_DirectoryBuffer, playbackDataBuffer(r13) # Store directory buffer location li r4, PDB_SIZE branchl r12, Zero_AreaLength @@ -217,6 +219,11 @@ RESTORE_GAME_INFO_NAMETAG_INC_LOOP: mr REG_GeckoBuffer, r3 stw REG_GeckoBuffer, PDB_DYNAMIC_GECKO_ADDR(REG_DirectoryBuffer) + # Overwrite the gecko heap location for simultaneous recording + playback + load r4, GeckoHeapPtr + subi r3, REG_GeckoBuffer, 0x8 # Recording expects d0c0de d0c0de but we dont have that here + stw r3, 0(r4) + # Step 2: Ask dolphin for the code list li r3, CMD_GET_GECKO_CODES stb r3, 0(REG_GeckoBuffer) @@ -265,7 +272,7 @@ blrl cmpwi r5, 0 # If size is 0, either we don't support this codetype or theres nothing to replace beq Callback_CalculateSize_End - lwz r6, primaryDataBuffer(r13) + lwz r6, playbackDataBuffer(r13) lwz r3, PDB_RESTORE_BUF_SIZE(r6) addi r3, r3, 8 # For each new code, we need a target address and length add r3, r3, r5 # Add size of the replacement to the total length @@ -298,7 +305,7 @@ blrl rlwinm r5, r5, 0, 0x01FFFFFF oris REG_TargetDataPtr, r5, 0x8000 # Injection Address - lwz REG_DirectoryBuffer2, primaryDataBuffer(r13) + lwz REG_DirectoryBuffer2, playbackDataBuffer(r13) lwz REG_RestoreBufPos, PDB_RESTORE_BUF_WRITE_POS(REG_DirectoryBuffer2) # r3 contains the codetype, do a switch statement on it to prepare for memcpys @@ -391,4 +398,3 @@ GECKO_CLEANUP: Injection_Exit: restore -lis r3, 0x8017 #execute replaced code line diff --git a/Playback/Core/RestoreInitialRNG.s b/Playback/Core/RestoreInitialRNG.s index b54b2eb9..403ceddd 100644 --- a/Playback/Core/RestoreInitialRNG.s +++ b/Playback/Core/RestoreInitialRNG.s @@ -37,7 +37,7 @@ blrl backup # check status of initial RNG - lwz r3,primaryDataBuffer(r13) + lwz r3,playbackDataBuffer(r13) lwz REG_Buffer,PDB_EXI_BUF_ADDR(r3) lbz r3,(InitialRNG_Start)+(InitialRNG_Status)(REG_Buffer) cmpwi r3,0 diff --git a/Playback/Core/RestoreLRAStart.asm b/Playback/Core/RestoreLRAStart.asm index 75c5bfad..deae4af2 100644 --- a/Playback/Core/RestoreLRAStart.asm +++ b/Playback/Core/RestoreLRAStart.asm @@ -12,7 +12,7 @@ # Check status of frame received. If a terminate result is received, that means # we need to end the game immediately - lwz r3,primaryDataBuffer(r13) + lwz r3,playbackDataBuffer(r13) lwz r3,PDB_EXI_BUF_ADDR(r3) lbz r3,(BufferStatus_Start)+(BufferStatus_Status)(r3) cmpwi r3, CONST_FrameFetchResult_Terminate diff --git a/Playback/Core/RestoreStockSteal.asm b/Playback/Core/RestoreStockSteal.asm index 06a5315a..c424fef5 100644 --- a/Playback/Core/RestoreStockSteal.asm +++ b/Playback/Core/RestoreStockSteal.asm @@ -11,7 +11,7 @@ .include "Playback/Playback.s" # Setup buffer - lwz r5,primaryDataBuffer(r13) + lwz r5,playbackDataBuffer(r13) lwz r5,PDB_SECONDARY_EXI_BUF_ADDR(r5) #Get secondary DMA buffer alloc li r4,CMD_IS_STOCK_STEAL stb r4,0x0(r5) #Store stock steal cmd ID @@ -24,14 +24,14 @@ li r5,CONST_ExiWrite branchl r12,FN_EXITransferBuffer # Receive buffer over DMA - lwz r3,primaryDataBuffer(r13) + lwz r3,playbackDataBuffer(r13) lwz r3,PDB_SECONDARY_EXI_BUF_ADDR(r3) #Get secondary DMA buffer alloc li r4,0x1 li r5,CONST_ExiRead branchl r12,FN_EXITransferBuffer # Check if this player requested a stock steal on this frame - lwz r3,primaryDataBuffer(r13) + lwz r3,playbackDataBuffer(r13) lwz r3,PDB_SECONDARY_EXI_BUF_ADDR(r3) #Get secondary DMA buffer alloc lbz r3,0x0(r3) cmpwi r3,0x0 diff --git a/Playback/Core/Sounds/AssignSoundInstanceId.asm b/Playback/Core/Sounds/AssignSoundInstanceId.asm index 07a9e4b3..cf9a0a18 100644 --- a/Playback/Core/Sounds/AssignSoundInstanceId.asm +++ b/Playback/Core/Sounds/AssignSoundInstanceId.asm @@ -10,7 +10,7 @@ stw r0, -0x3F18 (r13) # Make sure we are in game getMinorMajor r3 -cmpwi r3, 0x010E +cmpwi r3, SCENE_PLAYBACK_IN_GAME bne EXIT .set REG_PDB_ADDRESS, 31 @@ -20,7 +20,7 @@ bne EXIT backup -lwz REG_PDB_ADDRESS, primaryDataBuffer(r13) # data buffer address +lwz REG_PDB_ADDRESS, playbackDataBuffer(r13) # data buffer address addi REG_SFXDB_ADDRESS, REG_PDB_ADDRESS, PDB_SFXDB_START lbz REG_WRITE_INDEX, SFXDB_WRITE_INDEX(REG_SFXDB_ADDRESS) diff --git a/Playback/Core/Sounds/HandleFrameSoundLog.asm b/Playback/Core/Sounds/HandleFrameSoundLog.asm index d1873108..90ac52bd 100644 --- a/Playback/Core/Sounds/HandleFrameSoundLog.asm +++ b/Playback/Core/Sounds/HandleFrameSoundLog.asm @@ -25,7 +25,7 @@ branch r12, 0x801a5024 # go to where branch would have taken us START: # Make sure we are in game getMinorMajor r3 -cmpwi r3, 0x010E +cmpwi r3, SCENE_PLAYBACK_IN_GAME bne EXIT backup @@ -33,7 +33,7 @@ backup branchl r12, OSDisableInterrupts # Not backing up r3 output, don't use r3 in body mr REG_INTERRUPT_IDX, r3 -lwz REG_PDB_ADDRESS, primaryDataBuffer(r13) # data buffer address +lwz REG_PDB_ADDRESS, playbackDataBuffer(r13) # data buffer address addi REG_SFXDB_ADDRESS, REG_PDB_ADDRESS, PDB_SFXDB_START lbz REG_SOUND_WRITE_INDEX, SFXDB_WRITE_INDEX(REG_SFXDB_ADDRESS) @@ -92,7 +92,7 @@ PENDING_LOOP_CONTINUE: addi r7, r7, 1 PENDING_LOOP_CONDITION: lbz r3, SFXS_LOG_INDEX(r6) -cmpwi r7, r3 +cmpw r7, r3 blt PENDING_LOOP_START # If we exit loop normally, let's stop sound diff --git a/Playback/Core/Sounds/NoDestroyVoice.asm b/Playback/Core/Sounds/NoDestroyVoice.asm index bd345d16..be8236cc 100644 --- a/Playback/Core/Sounds/NoDestroyVoice.asm +++ b/Playback/Core/Sounds/NoDestroyVoice.asm @@ -12,12 +12,12 @@ # Make sure we are in game getMinorMajor r3 -cmpwi r3, 0x010E +cmpwi r3, SCENE_PLAYBACK_IN_GAME bne EXIT backup -lwz REG_PDB_ADDRESS, primaryDataBuffer(r13) # data buffer address +lwz REG_PDB_ADDRESS, playbackDataBuffer(r13) # data buffer address addi REG_SFXDB_ADDRESS, REG_PDB_ADDRESS, PDB_SFXDB_START rlwinm REG_SOUND_ID, REG_SOUND_ID, 0, 0xFFFF # extract half word ID diff --git a/Playback/Core/Sounds/NoDestroyVoice2.asm b/Playback/Core/Sounds/NoDestroyVoice2.asm index b2f10907..6963c36c 100644 --- a/Playback/Core/Sounds/NoDestroyVoice2.asm +++ b/Playback/Core/Sounds/NoDestroyVoice2.asm @@ -18,12 +18,12 @@ # Make sure we are in game getMinorMajor r3 -cmpwi r3, 0x010E +cmpwi r3, SCENE_PLAYBACK_IN_GAME bne EXIT backup -lwz REG_PDB_ADDRESS, primaryDataBuffer(r13) # data buffer address +lwz REG_PDB_ADDRESS, playbackDataBuffer(r13) # data buffer address addi REG_SFXDB_ADDRESS, REG_PDB_ADDRESS, PDB_SFXDB_START rlwinm REG_SOUND_ID, REG_SOUND_ID, 0, 0xFFFF # extract half word ID diff --git a/Playback/Core/Sounds/PreventDuplicateSounds.asm b/Playback/Core/Sounds/PreventDuplicateSounds.asm index e4f33079..13f4bffb 100644 --- a/Playback/Core/Sounds/PreventDuplicateSounds.asm +++ b/Playback/Core/Sounds/PreventDuplicateSounds.asm @@ -17,12 +17,12 @@ # Make sure we are in game getMinorMajor r3 -cmpwi r3, 0x010E +cmpwi r3, SCENE_PLAYBACK_IN_GAME bne EXIT backup -lwz REG_PDB_ADDRESS, primaryDataBuffer(r13) # data buffer address +lwz REG_PDB_ADDRESS, playbackDataBuffer(r13) # data buffer address addi REG_SFXDB_ADDRESS, REG_PDB_ADDRESS, PDB_SFXDB_START li REG_IS_SOUND_ACTIVE, 0 li REG_SOUND_INSTANCE_ID, 0 diff --git a/Playback/Core/Stadium/Enable Home Run Contest Distance.asm b/Playback/Core/Stadium/Enable Home Run Contest Distance.asm new file mode 100644 index 00000000..931ee0f5 --- /dev/null +++ b/Playback/Core/Stadium/Enable Home Run Contest Distance.asm @@ -0,0 +1,22 @@ +################################################################################ +# Address: 0x8016e8c8 +################################################################################ + .include "Common/Common.s" + + # Load the current stage id from the static match block + load r12, 0x8046db77 + lbz r12, 0 (r12) + + # Compare with the id for the Home Run Contest + cmpwi r12, 0x54 + beq LOAD_HRC_DISTANCE + + # Original instruction + lwz r12, 0x0044 (r31) + b EXIT + +LOAD_HRC_DISTANCE: + # Load the HRC Distance Display + load r12, 0x80181998 + +EXIT: diff --git a/Playback/Playback.s b/Playback/Playback.s index 4360fb3d..b2daaf58 100644 --- a/Playback/Playback.s +++ b/Playback/Playback.s @@ -86,7 +86,7 @@ # gameframe .set GameFrame_Start, InitialRNG_Start + InitialRNG_Length # per player offsets - .set PlayerDataLength,0x31 + .set PlayerDataLength,0x34 .set RNGSeed,0x00 .set AnalogX,0x04 .set AnalogY,0x08 @@ -98,8 +98,11 @@ .set YPos,0x20 .set FacingDirection,0x24 .set ActionStateID,0x28 - .set AnalogRawInput,0x2C - .set Percentage,0x2D + .set AnalogRawInputX,0x2C + .set AnalogRawInputY,0x2D + .set Percentage,0x2E + .set CStickRawInputX,0x32 + .set CStickRawInputY,0x33 .set GameFrame_Length, PlayerDataLength * 8 diff --git a/Playback/Show Player Names/InitInGame.asm b/Playback/Show Player Names/InitInGame.asm index 26c4481b..f54849de 100644 --- a/Playback/Show Player Names/InitInGame.asm +++ b/Playback/Show Player Names/InitInGame.asm @@ -134,7 +134,7 @@ bl DATA_BLRL mflr REG_DATA_ADDR # get PDB -lwz REG_PDB_ADDR, primaryDataBuffer(r13) +lwz REG_PDB_ADDR, playbackDataBuffer(r13) ########################## ## Display Player Names ## diff --git a/README.md b/README.md index 69ee4dea..42f8be3d 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,12 @@ This repository is part of the Project Slippi ecosystem. For more information ab This project is home to the series of ASM mods that are applied to Melee in order to make Slippi work. It includes multiple configurations of the code for different use cases. ## Build Instructions -1. In order to build this project you will need to [download](https://github.com/JLaferri/gecko/releases) the `gecko` program and add it to your PATH env variable. -2. On windows you can then simply run the `build.bat` file to build all the different configurations. On mac/linux you can run the makefile or run `build.sh`. +### Local +1. In order to build this project you will need to [download](https://github.com/JLaferri/gecko/releases) the `gecko` program and add it to your PATH env variable. Linux/macOS users can pull the code and run `go build` to generate a binary. +2. All systems should support running `make` to build. Otherwise, on Windows you can run `build.bat` and on Linux/macOS you can run `build.sh`. + +### Docker +We also have a docker image that you can use to build by running `docker run --volume=${PWD}:/work --workdir=/work nikhilnarayana/devkitpro-slippi make`. ## Output ### Console diff --git a/Recording/Recording.s b/Recording/Recording.s index d34eef56..eb541b09 100644 --- a/Recording/Recording.s +++ b/Recording/Recording.s @@ -1,6 +1,17 @@ .set MAX_ITEMS, 15 -# Command Bytes +################################################################################ +# Game End Transfer Buffer +################################################################################ +.set GAME_END_TXB_COMMAND, 0 # u8 +.set GAME_END_TXB_END_METHOD, GAME_END_TXB_COMMAND + 1 # u8 +.set GAME_END_TXB_LRAS_INITIATOR, GAME_END_TXB_END_METHOD + 1 # u8 +.set GAME_END_TXB_PLACEMENTS, GAME_END_TXB_LRAS_INITIATOR + 1 # u8[4] +.set GAME_END_TXB_SIZE, GAME_END_TXB_PLACEMENTS + 4 + +################################################################################ +# Command bytes +################################################################################ .set CMD_SPLIT_MESSAGE, 0x10 # Used for splitting up a large command into smaller messages .set CMD_DESCRIPTIONS, 0x35 .set CMD_GAME_INFO, 0x36 @@ -13,15 +24,17 @@ .set CMD_GAME_END, 0x39 .set COMMAND_COUNT, 10 # number of possible commands -# Payload lengths, if any additional data is added, these must be incremented +################################################################################ +# Payload lengths +################################################################################ .set MESSAGE_DESCRIPTIONS_PAYLOAD_LENGTH, 3 * (COMMAND_COUNT - 1) + 1 # byte count -.set GAME_INFO_PAYLOAD_LENGTH, 584 # byte count -.set GAME_INITIAL_RNG_PAYLOAD_LENGTH, 8 #byte count -.set GAME_PRE_FRAME_PAYLOAD_LENGTH, 63 # byte count -.set GAME_POST_FRAME_PAYLOAD_LENGTH, 76 # byte count -.set GAME_ITEM_INFO_PAYLOAD_LENGTH, 42 # byte count +.set GAME_INFO_PAYLOAD_LENGTH, 760 # byte count +.set GAME_FRAME_START_PAYLOAD_LENGTH, 12 #byte count +.set GAME_PRE_FRAME_PAYLOAD_LENGTH, 66 # byte count +.set GAME_POST_FRAME_PAYLOAD_LENGTH, 84 # byte count +.set GAME_ITEM_INFO_PAYLOAD_LENGTH, 44 # byte count .set GAME_FRAME_BOOKEND_PAYLOAD_LENGTH, 8 # byte count -.set GAME_END_PAYLOAD_LENGTH, 2 # byte count +.set GAME_END_PAYLOAD_LENGTH, GAME_END_TXB_SIZE - 1 # byte count .set SPLIT_MESSAGE_PAYLOAD_LENGTH, 516 # byte count .set SPLIT_MESSAGE_INTERNAL_DATA_LEN, 512 @@ -43,17 +56,17 @@ # length should be less than the frame buf length .set SUPPORTED_PORTS, 4 .set MAX_CHARACTERS, SUPPORTED_PORTS * 2 # ICs -.set TOTAL_INITIAL_RNG_LEN, GAME_INITIAL_RNG_PAYLOAD_LENGTH + 1 +.set TOTAL_FRAME_START_LEN, GAME_FRAME_START_PAYLOAD_LENGTH + 1 .set TOTAL_CHAR_FRAME_LEN, MAX_CHARACTERS * (GAME_PRE_FRAME_PAYLOAD_LENGTH + 1) + MAX_CHARACTERS * (GAME_POST_FRAME_PAYLOAD_LENGTH + 1) .set TOTAL_ITEM_LEN, MAX_ITEMS * (GAME_ITEM_INFO_PAYLOAD_LENGTH + 1) .set TOTAL_FRAME_BOOKEND_LEN, GAME_FRAME_BOOKEND_PAYLOAD_LENGTH + 1 .set TOTAL_GAME_END_LEN, GAME_END_PAYLOAD_LENGTH + 1 -.set FULL_FRAME_DATA_BUF_LENGTH, TOTAL_INITIAL_RNG_LEN + TOTAL_CHAR_FRAME_LEN + TOTAL_ITEM_LEN + TOTAL_FRAME_BOOKEND_LEN + TOTAL_GAME_END_LEN +.set FULL_FRAME_DATA_BUF_LENGTH, TOTAL_FRAME_START_LEN + TOTAL_CHAR_FRAME_LEN + TOTAL_ITEM_LEN + TOTAL_FRAME_BOOKEND_LEN + TOTAL_GAME_END_LEN # build version number. Each byte is one digit # any change in command data should result in a minor version change -# current version: 3.9.1 -.set CURRENT_VERSION,0x03090100 +# current version: 3.17.0 +.set CURRENT_VERSION,0x03110000 ################################################################################ # Static Function Locations diff --git a/Recording/SendInitialRNG.s b/Recording/SendFrameStart.s similarity index 83% rename from Recording/SendInitialRNG.s rename to Recording/SendFrameStart.s index 842e4bce..e0eeedb8 100644 --- a/Recording/SendInitialRNG.s +++ b/Recording/SendFrameStart.s @@ -1,9 +1,9 @@ # Required Includes (A file that includes this header must also include these) # Recording/Recording.s -.macro Macro_SendInitialRNG +.macro Macro_SendFrameStart -CreateInitialRNGProc: +CreateFrameStartProc: #Create GObj li r3,4 #GObj Type (4 is the player type, this should ensure it runs before any player animations) li r4,7 #On-Pause Function (dont run on pause) @@ -11,21 +11,21 @@ CreateInitialRNGProc: branchl r12,GObj_Create #Create Proc - bl SendInitialRNG + bl SendFrameStart mflr r4 #Function li r5,0 #Priority branchl r12,GObj_AddProc -b CreateInitialRNGProc_Exit +b CreateFrameStartProc_Exit ################################################################################ -# Routine: SendInitialRNG +# Routine: SendFrameStart # ------------------------------------------------------------------------------ # Description: Sends the RNG seed that is needed for the very rare case of throws # causing the DamageFlyTop state ################################################################################ -SendInitialRNG: +SendFrameStart: blrl .set REG_PlayerData,31 @@ -58,15 +58,19 @@ backup lwz r3, 0x5F90(r3) #load random seed stw r3,0x5(REG_Buffer) +# store scene frame counter + loadGlobalFrame r3 + stw r3, 0x9(REG_Buffer) + #------------- Increment Buffer Offset ------------ lwz REG_BufferOffset,bufferOffset(r13) - addi REG_BufferOffset,REG_BufferOffset,(GAME_INITIAL_RNG_PAYLOAD_LENGTH+1) + addi REG_BufferOffset,REG_BufferOffset,(GAME_FRAME_START_PAYLOAD_LENGTH+1) stw REG_BufferOffset,bufferOffset(r13) -SendInitialRNG_Exit: +SendFrameStart_Exit: restore blr -CreateInitialRNGProc_Exit: +CreateFrameStartProc_Exit: .endm diff --git a/Recording/SendGameEnd.asm b/Recording/SendGameEnd.asm index 6b3a34a6..64ffaf88 100644 --- a/Recording/SendGameEnd.asm +++ b/Recording/SendGameEnd.asm @@ -16,6 +16,11 @@ .set REG_SceneThinkStruct,25 .set REG_RDB,24 +.set REG_MatchEndStruct,23 +.set REG_MatchEndPlayerStruct,22 +.set REG_PlayerSlot,21 +.set REG_GAME_END_STRUCT_ADDR, 20 + backup # check if VS Mode @@ -55,10 +60,10 @@ StartWrite: # request game information from slippi li r3, CMD_GAME_END - stb r3,0x0(REG_Buffer) + stb r3, GAME_END_TXB_COMMAND(REG_Buffer) # store byte that will tell us whether the game was won by stock loss or by ragequit (2 = stock loss, 7 = no contest) - stb REG_GameEndID,0x1(REG_Buffer) + stb REG_GameEndID, GAME_END_TXB_END_METHOD(REG_Buffer) LRAStartCheck: # check if LRA start @@ -70,11 +75,52 @@ LRAStartCheck: NoLRAStart: li r3,-1 StoreLRAStarter: - stb r3,0x2(REG_Buffer) + stb r3, GAME_END_TXB_LRAS_INITIATOR(REG_Buffer) + +# What this is going to do is add an array of placement u8s for each port +PlayerPlacements: + +load REG_GAME_END_STRUCT_ADDR, 0x80479da4 + +################################################################################ +# Initialize the MatchEndData early. Normally his happens on scene transition +# around 0x8016ea1c but we need it earlier (now) to determine the result of +# the match +################################################################################ +mr r3, REG_GAME_END_STRUCT_ADDR # dest +load r4, 0x8046b8ec # source +li r5, 8824 # size +branchl r12, memcpy + +load r4, 0x8046b6a0 +mr r3, REG_GAME_END_STRUCT_ADDR +lbz r0, 0x24D0(r4) +stb r0, 0x6(r3) +lbz r0, 0x0008(r4) +stb r0, 0x4(r3) +branchl r12, 0x80166378 # CreateMatchEndData (struct @ 80479da4) + +PlayerPlacementsLoopInit: +li REG_PlayerSlot, 0 # Start at slot 1 +PlayerPlacementsLoopStart: + # find player placement for this slot + mr r3, REG_PlayerSlot + bl FN_GetPlayerPlacement + + # write placement result to buffer + addi r4, REG_PlayerSlot, GAME_END_TXB_PLACEMENTS + stbx r3, r4, REG_Buffer # Write placement to buffer + +PlayerPlacementsLoopCheck: + addi REG_PlayerSlot,REG_PlayerSlot,0x1 + cmpwi REG_PlayerSlot,3 + ble PlayerPlacementsLoopStart +PlayerPlacementsLoopEnd: +PlayerPlacementsEnd: #------------- Transfer Buffer ------------ mr r3,REG_Buffer - li r4,GAME_END_PAYLOAD_LENGTH+1 + li r4,GAME_END_TXB_SIZE li r5,CONST_ExiWrite branchl r12,FN_EXITransferBuffer @@ -82,6 +128,37 @@ StoreLRAStarter: li r3, 1 stb r3, RDB_GAME_END_SENT(REG_RDB) #logf LOG_LEVEL_NOTICE, "Wrote game end sent" + b Injection_Exit + +################################################################################ +# Function: FN_GetPlayerPlacement +################################################################################ +# Determines the player standing in last match for a given player slot +# Inputs: +# r3: Player slot (starting at 1) +# Outputs: +# r3: Player placement +################################################################################ +FN_GetPlayerPlacement: + +load r12, 0x80479da4 # MatchEndStruct +mulli r11, r3, 0xA8 +add r11, r11, r12 # MatchEndPlayerStruct + +#Check if player partook in last game +lbz r3, 0x58(r11) +cmpwi r3, 3 +beq FN_GetPlayerPlacementPlayerMissing + +lbz r3, 0x5E(r11) # offset to player standing +b FN_GetPlayerPlacementReturn + +FN_GetPlayerPlacementPlayerMissing: +li r3, -1 + +FN_GetPlayerPlacementReturn: +blr + Injection_Exit: restore diff --git a/Recording/SendGameInfo.asm b/Recording/SendGameInfo.asm index 2c94ebfa..7e645817 100644 --- a/Recording/SendGameInfo.asm +++ b/Recording/SendGameInfo.asm @@ -4,7 +4,7 @@ .include "Common/Common.s" .include "Online/Online.s" .include "Recording/Recording.s" -.include "Recording/SendInitialRNG.s" +.include "Recording/SendFrameStart.s" .include "Recording/SendItemInfo.s" ################################################################################ @@ -96,7 +96,7 @@ backup # initial rng command li r3,CMD_INITIAL_RNG stb r3,CommandSizesStart+0xE(REG_Buffer) - li r3, GAME_INITIAL_RNG_PAYLOAD_LENGTH + li r3, GAME_FRAME_START_PAYLOAD_LENGTH sth r3,CommandSizesStart+0xF(REG_Buffer) # item data command @@ -365,10 +365,13 @@ SEND_GAME_INFO_NAMETAG_INC_LOOP: .set REG_MSRB,25 .set REG_MSRB_DisplayNameStart,26 +# Init MSRB reg to zero so we know if we have to free it or not + li REG_MSRB, 0 + # Before trying to load match state, make sure we are in an online scene getMinorMajor r3 cmpwi r3, SCENE_ONLINE_IN_GAME - bne DISPLAY_CC_WRITE_ZERO # If not online in-game, skip normal processing + bne DISPLAY_CC_UID_WRITE_ZERO # If not online in-game, skip normal processing # Get MSRB address li r3,0 @@ -470,18 +473,125 @@ SEND_GAME_INFO_NAMETAG_INC_LOOP: cmpwi REG_LoopCount,4 blt CONNECT_CODE_LOOP -# Free MSRB - mr r3,REG_MSRB - branchl r12,HSD_Free - b SEND_CONNECT_CODE_END +#------------- SEND Slippi UIDs ------------ +.set SlippiUIDStart, (ConnectCodeStart + ConnectCodeLength) +.set SlippiUIDLength,0x74 +# Offsets +.set PlayerDataStart,96 #player data starts in match struct +.set PlayerDataLength,36 #length of each player's data +.set PlayerStatus,0x1 #offset of players in-game status +# Constants +.set SlippiUIDBytesToCopy,29 # 1 bytes per char + 1 byte for null terminator = 29 bytes +# Registers +.set REG_LoopCount,20 +.set REG_PlayerDataStart,21 +.set REG_CurrentPlayerData,22 +.set REG_BufferSlippiUIDStart,23 +.set REG_BufferCurrentSlippiUID,24 +.set REG_MSRB_SlippiUIDStart,26 + +# Init loop + li REG_LoopCount,0 + addi REG_PlayerDataStart,r31,PlayerDataStart # player data start in match struct + addi REG_BufferSlippiUIDStart,REG_Buffer,SlippiUIDStart # Start of write buffer + addi REG_MSRB_SlippiUIDStart,REG_MSRB,MSRB_P1_SLIPPI_UID # Start of read buffer + + SLIPPI_UID_LOOP: +#Next write position + mulli r3,REG_LoopCount,SlippiUIDBytesToCopy + add REG_BufferCurrentSlippiUID,r3,REG_BufferSlippiUIDStart - DISPLAY_CC_WRITE_ZERO: -# We will get here if not online. Just zero out the entire display name and cc sections +#Check if player exists + mulli REG_CurrentPlayerData,REG_LoopCount,PlayerDataLength + add REG_CurrentPlayerData,REG_CurrentPlayerData,REG_PlayerDataStart + lbz r3,PlayerStatus(REG_CurrentPlayerData) + cmpwi r3,0 + bne SEND_SLIPPI_UID_NO_CODE + +#Next read offset + mulli r3,REG_LoopCount,SlippiUIDBytesToCopy + +#Copy from read position to write position + add r4,r3,REG_MSRB_SlippiUIDStart # src (MSRB_SlippiUIDStart + offset) + mr r3,REG_BufferCurrentSlippiUID # dest + li r5,SlippiUIDBytesToCopy # length + branchl r12,memcpy + b SLIPPI_UID_INC_LOOP + + SEND_SLIPPI_UID_NO_CODE: +# Fill with zeroes + mr r3,REG_BufferCurrentSlippiUID + li r4,SlippiUIDBytesToCopy + branchl r12,Zero_AreaLength + + SLIPPI_UID_INC_LOOP: + addi REG_LoopCount,REG_LoopCount,1 + cmpwi REG_LoopCount,4 + blt SLIPPI_UID_LOOP + + b SEND_SLIPPI_UID_END + + DISPLAY_CC_UID_WRITE_ZERO: +# We will get here if not online. Just zero out the entire display name, cc, and uid sections addi r3, REG_Buffer, DisplayNameStart - li r4, 4 * (DisplayNameBytesToCopy + ConnectCodeBytesToCopy) + li r4, 4 * (DisplayNameBytesToCopy + ConnectCodeBytesToCopy + SlippiUIDBytesToCopy) branchl r12,Zero_AreaLength - SEND_CONNECT_CODE_END: + SEND_SLIPPI_UID_END: + #------------- LANGUAGE INFO ------------- +.set LanguageStart, (SlippiUIDStart + SlippiUIDLength) +.set LanguageLength,0x1 + +# fetch and write current language setting + branchl r12, 0x8000adf4 # Language_GetLanguage + stb r3, LanguageStart+0x0(REG_Buffer) + + #------------- MATCH ID AND GAME INDEX ------------- +.set MatchIdStart, (LanguageStart + LanguageLength) +.set MatchIdLength, 51 +.set GameIndexStart, (MatchIdStart + MatchIdLength) +.set GameIndexLength, 4 +.set TiebreakIndexStart, (GameIndexStart + GameIndexLength) +.set TiebreakIndexLength, 4 + +# If MSRB is not 0, this is an online match + cmpwi REG_MSRB, 0 + beq ZERO_MATCH_ID_AND_GAME_INDEX + +# copy match ID + addi r3, REG_Buffer, MatchIdStart + addi r4, REG_MSRB, MSRB_MATCH_ID + li r5, MatchIdLength + branchl r12, memcpy + +# write game index and tiebreak index + loadwz r3, 0x803dad40 # Load minor scene data array ptr + lwz r12, 0x88(r3) # Load game prep minor scene data + lhz r3, GPDO_CUR_GAME(r12) + stw r3, GameIndexStart(REG_Buffer) + lbz r3, GPDO_TIEBREAK_GAME_NUM(r12) + stw r3, TiebreakIndexStart(REG_Buffer) + + b MATCH_ID_GAME_INDEX_END + +ZERO_MATCH_ID_AND_GAME_INDEX: +# TODO: It might be possible to do something else here when playing offline. Maybe we could generate +# TODO: a console or dolphin instance ID and just increment the game index every local game. +# TODO: Tiebreaks could also be used for sudden death mode? Or tiebreak can just stay 0 forever + addi r3, REG_Buffer, MatchIdStart + li r4, MatchIdLength + GameIndexLength + TiebreakIndexLength + branchl r12, Zero_AreaLength + +MATCH_ID_GAME_INDEX_END: + +#------------- Free MSRB if it was created ------------ + cmpwi REG_MSRB, 0 + beq SKIP_MSRB_FREE +# Free MSRB + mr r3,REG_MSRB + branchl r12,HSD_Free + SKIP_MSRB_FREE: + #------------- Transfer Buffer ------------ mr r3,REG_Buffer li r4,MESSAGE_DESCRIPTIONS_PAYLOAD_LENGTH+1 + GAME_INFO_PAYLOAD_LENGTH+1 @@ -554,8 +664,8 @@ CODE_LIST_CLEANUP: mr r3, REG_GeckoCopyBuffer branchl r12, HSD_Free -# run macro to create the SendInitialRNG process - Macro_SendInitialRNG +# run macro to create the SendFrameStart process + Macro_SendFrameStart # run macro to create SendProjectileInfo process Macro_SendItemInfo diff --git a/Recording/SendGamePostFrame.asm b/Recording/SendGamePostFrame.asm index f80a5da5..9accd4c9 100644 --- a/Recording/SendGamePostFrame.asm +++ b/Recording/SendGamePostFrame.asm @@ -150,6 +150,16 @@ backup lwz r3,0x195c(REG_PlayerData) stw r3,0x49(REG_Buffer) + # send current animation. useful for knowing the current Wait animation + lwz r3,0x14(REG_PlayerData) + stw r3,0x4d(REG_Buffer) + + # send instance information + lhz r3,0x18ec(REG_PlayerData) + sth r3,0x51(REG_Buffer) + lhz r3,0x2088(REG_PlayerData) + sth r3,0x53(REG_Buffer) + #------------- Increment Buffer Offset ------------ lwz REG_BufferOffset,bufferOffset(r13) addi REG_BufferOffset,REG_BufferOffset,(GAME_POST_FRAME_PAYLOAD_LENGTH+1) diff --git a/Recording/SendGamePreFrame.asm b/Recording/SendGamePreFrame.asm index fb8bb9f5..282d1fd0 100644 --- a/Recording/SendGamePreFrame.asm +++ b/Recording/SendGamePreFrame.asm @@ -1,5 +1,5 @@ ################################################################################ -# Address: 8006b0dc +# Address: 8006b0e0 ################################################################################ .include "Common/Common.s" .include "Recording/Recording.s" @@ -105,15 +105,23 @@ CONTINUE_RAW_X: add r3, r3, r4 # move to the correct start index for this index mulli r4, REG_PlayerSlot, 0xc - add r3, r3, r4 # move to the correct player position + add r4, r3, r4 # move to the correct player position - lbz r3, 0x2(r3) #load raw x analog - stb r3,0x3B(REG_Buffer) + lbz r3, 0x2(r4) #load raw x analog + stb r3, 0x3B(REG_Buffer) + lbz r3, 0x3(r4) #load raw y analog + stb r3, 0x40(REG_Buffer) + lbz r3, 0x4(r4) #load raw x c-stick + stb r3, 0x41(REG_Buffer) + lbz r3, 0x5(r4) #load raw y c-stick + stb r3, 0x42(REG_Buffer) # Send player's percent lwz r3,0x1830(r31) stw r3,0x3C(REG_Buffer) + # Warning: We wrote to 0x40 above, so the next value should be 0x41 + #------------- Increment Buffer Offset ------------ lwz REG_BufferOffset,bufferOffset(r13) addi REG_BufferOffset,REG_BufferOffset,(GAME_PRE_FRAME_PAYLOAD_LENGTH+1) @@ -121,4 +129,5 @@ CONTINUE_RAW_X: Injection_Exit: restore - lbz r0, 0x2219(r31) #execute replaced code line + lbz r0, 0x2219(r31) # reload r0 from previous line + lwz r3, 0x065C(r31) # replaced code line \ No newline at end of file diff --git a/Recording/SendItemInfo.s b/Recording/SendItemInfo.s index 5a90c069..a3d92fa4 100644 --- a/Recording/SendItemInfo.s +++ b/Recording/SendItemInfo.s @@ -16,7 +16,8 @@ .set OFST_METADATA_3,OFST_METADATA_2+0x1 .set OFST_METADATA_4,OFST_METADATA_3+0x1 .set OFST_OWNER,OFST_METADATA_4+0x1 -.set ITEM_STRUCT_SIZE,OFST_OWNER+0x1 +.set OFST_INSTANCE,OFST_OWNER+0x1 +.set ITEM_STRUCT_SIZE,OFST_INSTANCE+0x2 .macro Macro_SendItemInfo @@ -137,6 +138,9 @@ DontFollowItemOwnerPtr: li r3, -1 SendItemOwner: stb r3, OFST_OWNER(REG_Buffer) +# store item instance + lhz r3,0xDA8(REG_ItemData) + sth r3,OFST_INSTANCE(REG_Buffer) #------------- Increment Buffer Offset ------------ lwz REG_BufferOffset,bufferOffset(r13) diff --git a/Recording/ShouldRecord.asm b/Recording/ShouldRecord.asm index 21f739c2..2d36eb1a 100644 --- a/Recording/ShouldRecord.asm +++ b/Recording/ShouldRecord.asm @@ -3,13 +3,20 @@ ################################################################################ .include "Common/Common.s" .include "Recording/Recording.s" +.include "Online/Online.s" getMinorMajor r3 - cmpwi r3, 0x0202 + cmpwi r3, SCENE_VERSUS_IN_GAME beq ReturnTrue - cmpwi r3, 0x0302 # Sudden Death + cmpwi r3, SCENE_VERSUS_SUDDEN_DEATH beq ReturnTrue - cmpwi r3, 0x0208 + cmpwi r3, SCENE_ONLINE_IN_GAME + beq ReturnTrue + cmpwi r3, SCENE_TARGETS_IN_GAME + beq ReturnTrue + cmpwi r3, SCENE_HOMERUN_IN_GAME + beq ReturnTrue + cmpwi r3, SCENE_PLAYBACK_IN_GAME beq ReturnTrue ReturnFalse: diff --git a/build-console-all.bat b/build-console-all.bat new file mode 100644 index 00000000..20b925fc --- /dev/null +++ b/build-console-all.bat @@ -0,0 +1,36 @@ +@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" -batched +echo. + +echo Building console_core.json... +gecko build -c console_core.json -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin" -batched +echo. + +set list=console_UCF.json +set list=%list%;console_UCF_stealth.json +set list=%list%;console_UCF_084.json +set list=%list%;console_UCF_084_stealth.json +set list=%list%;console_mods_stealth.json +set list=%list%;console_mods_tournament.json +set list=%list%;console_mods_friendlies.json +set list=%list%;console_PAL.json +set list=%list%;console_stages_stadium.json +set list=%list%;console_stages_all.json +set list=%list%;console_gameplay_lgl.json +set list=%list%;console_gameplay_wobbling.json +set list=%list%;console_gameplay_both.json +set list=%list%;console_lag_pd.json +set list=%list%;console_lag_pdhalfvb.json +set list=%list%;console_screen_wide.json +set list=%list%;console_screen_wide_shutters.json +set list=%list%;console_safety.json +set list=%list%;console_crash_output.json + +for %%a in (%list%) do ( + echo Building %%a... + gecko build -c %%a + echo. +) + +pause diff --git a/build-console-core.bat b/build-console-core.bat new file mode 100644 index 00000000..1f6cbc13 --- /dev/null +++ b/build-console-core.bat @@ -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 diff --git a/build-netplay.bat b/build-netplay.bat index 7cbc9afe..ee69b2af 100644 --- a/build-netplay.bat +++ b/build-netplay.bat @@ -1,6 +1,6 @@ @echo off echo Building netplay.json... -gecko build -c netplay.json -defsym "STG_EXIIndex=1" +gecko build -c netplay.json -defsym "STG_EXIIndex=1" -batched echo. pause \ No newline at end of file diff --git a/build-playback.bat b/build-playback.bat index 8c2a89a4..2d9ac1e3 100644 --- a/build-playback.bat +++ b/build-playback.bat @@ -1,6 +1,6 @@ @echo off echo Building playback.json... -gecko build -c playback.json -defsym "STG_EXIIndex=1" +gecko build -c playback.json -defsym "STG_EXIIndex=1" -batched echo. pause diff --git a/build.bat b/build.bat index fb560a89..f606db6b 100644 --- a/build.bat +++ b/build.bat @@ -1,22 +1,24 @@ @echo off echo Building netplay.json... -gecko build -c netplay.json -defsym "STG_EXIIndex=1" +gecko build -c netplay.json -defsym "STG_EXIIndex=1" -batched echo. echo Building playback.json... -gecko build -c playback.json -defsym "STG_EXIIndex=1" +gecko build -c playback.json -defsym "STG_EXIIndex=1" -batched echo. -echo Building console_core.json... -gecko build -c console_core.json -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin" +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" -batched echo. -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 Building console_core.json... +gecko build -c console_core.json -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin" -batched echo. set list=console_UCF.json set list=%list%;console_UCF_stealth.json +set list=%list%;console_UCF_084.json +set list=%list%;console_UCF_084_stealth.json set list=%list%;console_mods_stealth.json set list=%list%;console_mods_tournament.json set list=%list%;console_mods_friendlies.json @@ -31,6 +33,7 @@ set list=%list%;console_lag_pdhalfvb.json set list=%list%;console_screen_wide.json set list=%list%;console_screen_wide_shutters.json set list=%list%;console_safety.json +set list=%list%;console_crash_output.json for %%a in (%list%) do ( echo Building %%a... diff --git a/build.sh b/build.sh index 99ecbf5b..cbc02891 100755 --- a/build.sh +++ b/build.sh @@ -3,25 +3,33 @@ source ./build-netplay.sh source ./build-playback.sh -echo Building console_core.json... -gecko build -c console_core.json -defsym "STG_EXIIndex=1" -o "Output/Console/g_core.bin" -echo "" - 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 "" + list=( "console_UCF.json" "console_UCF_stealth.json" - "console_ControllerFixPlayerToggles.json" + "console_UCF_084.json" + "console_UCF_084_stealth.json" "console_mods_stealth.json" "console_mods_tournament.json" "console_mods_friendlies.json" "console_PAL.json" - "console_frozen.json" + "console_stages_stadium.json" + "console_stages_all.json" + "console_gameplay_lgl.json" + "console_gameplay_wobbling.json" + "console_gameplay_both.json" "console_lag_pd.json" "console_lag_pdhalfvb.json" + "console_screen_wide.json" + "console_screen_wide_shutters.json" + "console_safety.json" ) for file in "${list[@]}" diff --git a/console_PAL.json b/console_PAL.json index c409ffa5..04042a4f 100644 --- a/console_PAL.json +++ b/console_PAL.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_pal.bin" + }, + { + "file": "Output/Console/g_pal.txt" } ], "codes": [ diff --git a/console_UCF.json b/console_UCF.json index 4215d422..b0e3e1fa 100644 --- a/console_UCF.json +++ b/console_UCF.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_ucf.bin" + }, + { + "file": "Output/Console/g_ucf.txt" } ], "codes": [ diff --git a/console_UCF_084.json b/console_UCF_084.json new file mode 100644 index 00000000..72237ae9 --- /dev/null +++ b/console_UCF_084.json @@ -0,0 +1,39 @@ +{ + "outputFiles": [ + { + "file": "Output/Console/g_ucf_084.bin" + }, + { + "file": "Output/Console/g_ucf_084.txt" + } + ], + "codes": [ + { + "name": "UCF Slippi", + "authors": [ + "Dan Salvato", + "tauKhan", + "UnclePunch", + "Fizzi", + "Altimor", + "PracticalTAS", + "CarVac", + "Krohnos" + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "External/UCF 0.84/UCF", + "isRecursive": true, + "annotation": "UCF v0.84" + }, + { + "type": "injectFolder", + "sourceFolder": "External/UCF 0.84/Indicator", + "isRecursive": true, + "annotation": "UCF CSS Indicator" + } + ] + } + ] +} \ No newline at end of file diff --git a/console_UCF_084_stealth.json b/console_UCF_084_stealth.json new file mode 100644 index 00000000..d7107107 --- /dev/null +++ b/console_UCF_084_stealth.json @@ -0,0 +1,29 @@ +{ + "outputFiles": [ + { + "file": "Output/Console/g_ucf_084_stealth.bin" + }, + { + "file": "Output/Console/g_ucf_084_stealth.txt" + } + ], + "codes": [ + { + "name": "UCF 0.84 Slippi", + "authors": [ + "Altimor", + "PracticalTAS", + "CarVac", + "Krohnos" + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "External/UCF 0.84/UCF", + "isRecursive": true, + "annotation": "UCF v0.84" + } + ] + } + ] +} \ No newline at end of file diff --git a/console_UCF_stealth.json b/console_UCF_stealth.json index f2a99e55..b385b455 100644 --- a/console_UCF_stealth.json +++ b/console_UCF_stealth.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_ucf_stealth.bin" + }, + { + "file": "Output/Console/g_ucf_stealth.txt" } ], "codes": [ diff --git a/console_core.json b/console_core.json index 91113520..98b0e2f9 100644 --- a/console_core.json +++ b/console_core.json @@ -125,7 +125,8 @@ "Achilles", "UnclePunch", "Nikki", - "jmlee337" + "jmlee337", + "Krohnos" ], "description": [ "Used in conjunction with Slippi plugged into PortB to extract game data" diff --git a/console_crash_output.json b/console_crash_output.json new file mode 100644 index 00000000..23d7cc93 --- /dev/null +++ b/console_crash_output.json @@ -0,0 +1,28 @@ +{ + "outputFiles": [ + { + "file": "Output/Console/g_crash_output.bin" + }, + { + "file": "Output/Console/g_crash_output.txt" + } + ], + "codes": [ + { + "name": "Crash Output", + "authors": [ + "Fizzi" + ], + "description": [ + "Outputs additional information when the game crashes" + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "Debugging/AdditionalCrashInfo", + "annotation": "Prints crash info [Fizzi]" + } + ] + } + ] +} \ No newline at end of file diff --git a/console_gameplay_both.json b/console_gameplay_both.json index cc877a78..e9d589e3 100644 --- a/console_gameplay_both.json +++ b/console_gameplay_both.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_gameplay_both.bin" + }, + { + "file": "Output/Console/g_gameplay_both.txt" } ], "codes": [ @@ -31,8 +34,9 @@ ], "build": [ { - "type": "binary", - "sourceFile": "Binary/PreventWobbling.bin", + "type": "injectFolder", + "sourceFolder": "External/PreventWobbling", + "isRecursive": false, "annotation": "Disable wobbling" } ] diff --git a/console_gameplay_lgl.json b/console_gameplay_lgl.json index 6737cbf9..54890511 100644 --- a/console_gameplay_lgl.json +++ b/console_gameplay_lgl.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_gameplay_lgl.bin" + }, + { + "file": "Output/Console/g_gameplay_lgl.txt" } ], "codes": [ diff --git a/console_gameplay_wobbling.json b/console_gameplay_wobbling.json index 3c77b090..911c705f 100644 --- a/console_gameplay_wobbling.json +++ b/console_gameplay_wobbling.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_gameplay_wobbling.bin" + }, + { + "file": "Output/Console/g_gameplay_wobbling.txt" } ], "codes": [ @@ -11,12 +14,13 @@ "UnclePunch" ], "description": [ - "Break out of grab after three Nana hits" + "Breaks Popo's grab after four pummels if the victim has not left hitstun since the first pummel." ], "build": [ { - "type": "binary", - "sourceFile": "Binary/PreventWobbling.bin", + "type": "injectFolder", + "sourceFolder": "External/PreventWobbling", + "isRecursive": false, "annotation": "Disable wobbling" } ] diff --git a/console_lag_pd.json b/console_lag_pd.json index 4b76ead4..a7044ae3 100644 --- a/console_lag_pd.json +++ b/console_lag_pd.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_lag_pd.bin" + }, + { + "file": "Output/Console/g_lag_pd.txt" } ], "codes": [ @@ -22,4 +25,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/console_lag_pdhalfvb.json b/console_lag_pdhalfvb.json index 53e534d0..eb7c6106 100644 --- a/console_lag_pdhalfvb.json +++ b/console_lag_pdhalfvb.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_lag_pdhalfvb.bin" + }, + { + "file": "Output/Console/g_lag_pdhalfvb.txt" } ], "codes": [ diff --git a/console_mods_friendlies.json b/console_mods_friendlies.json index 8740d178..11fff4c4 100644 --- a/console_mods_friendlies.json +++ b/console_mods_friendlies.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_mods_friendlies.bin" + }, + { + "file": "Output/Console/g_mods_friendlies.txt" } ], "codes": [ diff --git a/console_mods_stealth.json b/console_mods_stealth.json index 375ce3e8..6c36b250 100644 --- a/console_mods_stealth.json +++ b/console_mods_stealth.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_mods_stealth.bin" + }, + { + "file": "Output/Console/g_mods_stealth.txt" } ], "codes": [ diff --git a/console_mods_tournament.json b/console_mods_tournament.json index bfd97d2e..0ef17037 100644 --- a/console_mods_tournament.json +++ b/console_mods_tournament.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_mods_tournament.bin" + }, + { + "file": "Output/Console/g_mods_tournament.txt" } ], "codes": [ diff --git a/console_safety.json b/console_safety.json index 84f24078..adac9233 100644 --- a/console_safety.json +++ b/console_safety.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_safety.bin" + }, + { + "file": "Output/Console/g_safety.txt" } ], "codes": [ diff --git a/console_screen_wide.json b/console_screen_wide.json index 13712441..7248815b 100644 --- a/console_screen_wide.json +++ b/console_screen_wide.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_screen_wide.bin" + }, + { + "file": "Output/Console/g_screen_wide.txt" } ], "codes": [ diff --git a/console_screen_wide_shutters.json b/console_screen_wide_shutters.json index 64688f3b..250eda6f 100644 --- a/console_screen_wide_shutters.json +++ b/console_screen_wide_shutters.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_screen_wide_shutters.bin" + }, + { + "file": "Output/Console/g_screen_wide_shutters.txt" } ], "codes": [ diff --git a/console_stages_all.json b/console_stages_all.json index dd9cf271..67a71943 100644 --- a/console_stages_all.json +++ b/console_stages_all.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_stages_all.bin" + }, + { + "file": "Output/Console/g_stages_all.txt" } ], "codes": [ diff --git a/console_stages_stadium.json b/console_stages_stadium.json index d1d4ffc2..ae1b7652 100644 --- a/console_stages_stadium.json +++ b/console_stages_stadium.json @@ -2,6 +2,9 @@ "outputFiles": [ { "file": "Output/Console/g_stages_stadium.bin" + }, + { + "file": "Output/Console/g_stages_stadium.txt" } ], "codes": [ diff --git a/debugging.json b/debugging.json new file mode 100644 index 00000000..5c715423 --- /dev/null +++ b/debugging.json @@ -0,0 +1,27 @@ +{ + "outputFiles": [ + { + "file": "Output/Netplay/debugging.txt" + } + ], + "codes": [ + { + "name": "Optional: Normal Functionality in Develop Mode (1.02)", + "authors": [ + "Magus", + "Achilles", + "UnclePunch" + ], + "description": [ + "Enables stale moves and disables cstick camera control" + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "External/NormalDevelopMode", + "isRecursive": true + } + ] + } + ] +} diff --git a/list-injections.bat b/list-injections.bat new file mode 100644 index 00000000..47977efe --- /dev/null +++ b/list-injections.bat @@ -0,0 +1,32 @@ +@echo off + +set list=netplay.json +set list=%list%;console_core.json +set list=%list%;console_UCF.json +set list=%list%;console_UCF_stealth.json +set list=%list%;console_UCF_084.json +set list=%list%;console_UCF_084_stealth.json +set list=%list%;console_mods_stealth.json +set list=%list%;console_mods_tournament.json +set list=%list%;console_mods_friendlies.json +set list=%list%;console_PAL.json +set list=%list%;console_stages_stadium.json +set list=%list%;console_stages_all.json +set list=%list%;console_gameplay_lgl.json +set list=%list%;console_gameplay_wobbling.json +set list=%list%;console_gameplay_both.json +set list=%list%;console_lag_pd.json +set list=%list%;console_lag_pdhalfvb.json +set list=%list%;console_screen_wide.json +set list=%list%;console_screen_wide_shutters.json +set list=%list%;console_safety.json +set list=%list%;console_crash_output.json +set list=%list%;debugging.json + +for %%a in (%list%) do ( + echo Listing %%a... + gecko list -i %%a -o Output/InjectionLists/list_%%a + echo. +) + +pause diff --git a/netplay.json b/netplay.json index 0b343a52..6e14806b 100644 --- a/netplay.json +++ b/netplay.json @@ -4,6 +4,7 @@ "file": "Output/Netplay/GALE01r2.ini", "header": [ "# GALE01 - Super Smash Bros. Melee NTSC-U 1.02", + "# DO NOT EDIT - generated by gecko", "", "[Core]", "CPUThread = True", @@ -17,6 +18,7 @@ "$Required: Slippi Online", "$Recommended: Normal Lag Reduction", "$Recommended: Apply Delay to all In-Game Scenes", + "$Recommended: Lagless FoD", "", "[Gecko]" ] @@ -38,6 +40,7 @@ "$Required: Slippi Online", "$Recommended: Normal Lag Reduction", "$Recommended: Apply Delay to all In-Game Scenes", + "$Recommended: Lagless FoD", "", "[Gecko]" ] @@ -160,13 +163,13 @@ }, { "type": "injectFolder", - "sourceFolder": "External/UCF 0.8/Logic", + "sourceFolder": "External/UCF 0.84/UCF", "isRecursive": true, - "annotation": "UCF v0.8" + "annotation": "UCF v0.84" }, { "type": "injectFolder", - "sourceFolder": "External/UCF 0.8/Indicator", + "sourceFolder": "External/UCF 0.84/Indicator", "isRecursive": true, "annotation": "UCF CSS Indicator" }, @@ -176,11 +179,6 @@ "isRecursive": true, "annotation": "DPad Down at CSS for Random Stage" }, - { - "type": "binary", - "sourceFile": "Binary/FasterMeleeSettings/LaglessFod.bin", - "annotation": "Lagless FoD [Achilles, Myougi, Dan Salvato]" - }, { "type": "binary", "sourceFile": "Binary/FasterMeleeSettings/RandomStageMusic.bin", @@ -244,7 +242,8 @@ "Achilles", "UnclePunch", "Nikki", - "jmlee337" + "jmlee337", + "Krohnos" ], "description": [ "Saves replays, Slippi device must be in Slot B.", @@ -324,7 +323,7 @@ }, { "type": "injectFolder", - "sourceFolder": "Online/Logging", + "sourceFolder": "Online/Debugging", "isRecursive": true, "annotation": "Log injections [Fizzi]" }, @@ -343,7 +342,12 @@ "type": "injectFolder", "sourceFolder": "Common/CompatibilityHooks", "isRecursive": true, - "annotation": "Functions that can be externally modified" + "annotation": "Our m-ex binary does not include these hooks, so we have to" + }, + { + "type": "binary", + "sourceFile": "Binary/m-ex.bin", + "annotation": "m-ex codeset generated from https://github.com/JLaferri/m-ex/tree/support%2Fslippi" }, { "type": "injectFolder", @@ -356,6 +360,12 @@ "sourceFolder": "Common/PSCameraIndependentMonitor", "isRecursive": true, "annotation": "Avoids PS + Widescreen desyncs [Fizzi]" + }, + { + "type": "injectFolder", + "sourceFolder": "External/PreventWobbling", + "isRecursive": false, + "annotation": "Disable wobbling [UnclePunch]" } ] }, @@ -398,6 +408,24 @@ } ] }, + { + "name": "Recommended: Lagless FoD", + "authors": [ + "Achilles", + "Myougi", + "Dan Salvato" + ], + "description": [ + "Disables particles and reflection on FoD to improve performance" + ], + "build": [ + { + "type": "binary", + "sourceFile": "Binary/FasterMeleeSettings/LaglessFod.bin", + "annotation": "Lagless FoD" + } + ] + }, { "name": "Optional: Widescreen 16:9", "authors": [ diff --git a/playback.json b/playback.json index 4adf6ba2..ee9d0bcf 100644 --- a/playback.json +++ b/playback.json @@ -4,6 +4,7 @@ "file": "Output/Playback/GALE01r2.ini", "header": [ "# GALE01 - Super Smash Bros. Melee NTSC-U 1.02", + "# DO NOT EDIT - generated by gecko", "", "[Core]", "CPUThread = False", @@ -14,6 +15,7 @@ "[Gecko_Enabled]", "$Required: General Codes", "$Required: Slippi Playback", + "$Recommended: Slippi Recording", "$Optional: Show Player Names", "", "[Gecko]" @@ -33,6 +35,7 @@ "[Gecko_Enabled]", "$Required: General Codes", "$Required: Slippi Playback", + "$Recommended: Slippi Recording", "$Optional: Show Player Names", "", "[Gecko]" @@ -88,7 +91,8 @@ "Fizzi", "UnclePunch", "Achilles", - "tauKhan" + "tauKhan", + "Krohnos" ], "description": [ "Used to play back a .slp file", @@ -131,6 +135,29 @@ } ] }, + { + "name": "Recommended: Slippi Recording", + "authors": [ + "Fizzi", + "Achilles", + "UnclePunch", + "Nikki", + "jmlee337", + "Krohnos" + ], + "description": [ + "Allows for outputting new replay data during playback.", + "Used to power spectator service and upgrading replay versions." + ], + "build": [ + { + "type": "injectFolder", + "sourceFolder": "Recording", + "isRecursive": true, + "annotation": "Slippi Recording [Fizzi, Achilles, UnclePunch, Nikki, jmlee337]" + } + ] + }, { "name": "Optional: Show Player Names", "authors": [ @@ -183,6 +210,11 @@ "sourceFolder": "External/Widescreen", "isRecursive": true, "annotation": "Widescreen 16:9" + }, + { + "type": "binary", + "sourceFile": "Binary/NormalLagReduction.bin", + "annotation": "Normal Lag Reduction [Hannes Mann]" } ] },