From d14d00b91116a855b3f5b294c9e9514d29f99ca4 Mon Sep 17 00:00:00 2001 From: sup39 Date: Fri, 23 Feb 2024 00:45:26 +0900 Subject: [PATCH] fix(ILSEx): disable while paused, map B to Z Closes #1 --- InstantLevelSelectExtra/@code.xml | 187 ++++++++++++++++------------- InstantLevelSelectExtra/README.md | 3 +- InstantLevelSelectExtra/info.xml | 7 +- InstantLevelSelectExtra/src/main.s | 27 ++++- 4 files changed, 135 insertions(+), 89 deletions(-) diff --git a/InstantLevelSelectExtra/@code.xml b/InstantLevelSelectExtra/@code.xml index 7801deb..e21fe31 100644 --- a/InstantLevelSelectExtra/@code.xml +++ b/InstantLevelSelectExtra/@code.xml @@ -19,7 +19,8 @@ - Pressing `D-Pad Down` in Plaza has no effect #### Level Select - Press `{the following button combination} + D-Pad Up` to warp to other area instantly: + Press `{the following button combination} + D-Pad Up` to warp to other area instantly. + As the alternatives of `Z` button, you can also press `B` or `Start`. ![Level Select Combinations](/img/levelselect.png) - For `Z + D-Pad Up`, the current area will be restarted, but the **respawn position will be reset**. It is like `D-Pad Up`, but the respawn position will be the default position instead of the previous one @@ -47,9 +48,11 @@ #### シャイン選択画面からやり直し - `十字キー下`で**現在のステージのシャイン選択画面からやり直す** + - ポーズ中にこのコードは無効化されます #### レベル選択 - `{次のボタン}+十字キー上`でレベル選択 + `{次のボタン}+十字キー上`でレベル選択 + `Z`ボタンの代わりに`B`か`Start`ボタンを押すこともできます ![レベル選択](/img/levelselect.png) @@ -66,7 +69,7 @@ 4. これで好きなだけハニスキを練習できます。他のエリアに入ろうとする時に自動的にやり直すので、手動でやり直す必要がありません。必要であれば`十字キー上`でやり直すこともできます。 - C20F9B74 0000004D + C20F9B74 00000052 3C80817F 816D97D0 3D808040 80AC0D80 20050022 540A043D @@ -75,25 +78,30 @@ 28830001 4C451102 40A2000C 38A00008 90AC0D80 7C7D1B79 - 41820220 70A00004 - 41A20034 881F000E - 3D40803B 394A40E8 - 7CEA00AE 2C070001 - 40810200 38070001 - 5400EFFE 7CE70214 - 54E7403E 60E700FF - 480000F8 70A00008 - 41A201E0 4800003D - 00141516 0017181D - 34000090 2F2E3020 - 32293328 2A1FBA3C - 371E213A 0E2C3900 - 00010507 08090200 - 123457D0 24567000 - 12234070 23467001 - 7D2802A6 54A6CF38 - 50A6F77A 50A6E7BC - 50A6D7FE 54A0C738 + 41820248 818D97E8 + 7D8C6379 41820010 + 880C0064 2C000005 + 41820230 70A00004 + 41A20040 881F0008 + 2C000008 41820034 + 881F000E 3D40803B + 394A40E8 7CEA00AE + 2C070001 40810204 + 38070001 5400EFFE + 7CE70214 54E7403E + 60E700FF 480000FC + 70A00008 41A201E4 + 4800003D 00141516 + 0017181D 34000090 + 2F2E3020 32293328 + 2A1FBA3C 371E213A + 0E2C3900 00010507 + 08090200 123457D0 + 24567000 12234070 + 23467001 7D2802A6 + 54A6CF3A 50A6E7BC + 50A6D7FE 54A0F77A + 7CC60378 54A0C738 50A0B77C 7CC60378 54A3873F 41820054 2C030009 41820098 @@ -146,7 +154,7 @@ 60000000 00000000 - C22A6170 0000004D + C22A6170 00000052 3C80817F 816D9FA0 3D808040 80AC4484 20050022 540A043D @@ -155,25 +163,30 @@ 28830001 4C451102 40A2000C 38A00008 90AC4484 7C7D1B79 - 41820220 70A00004 - 41A20034 881F000E - 3D40803E 394AF498 - 7CEA00AE 2C070001 - 40810200 38070001 - 5400EFFE 7CE70214 - 54E7403E 60E700FF - 480000F8 70A00008 - 41A201E0 4800003D - 00141516 0017181D - 34000090 2F2E3020 - 32293328 2A1FBA3C - 371E213A 0E2C3900 - 00010507 08090200 - 123457D0 24567000 - 12234070 23467001 - 7D2802A6 54A6CF38 - 50A6F77A 50A6E7BC - 50A6D7FE 54A0C738 + 41820248 818D9FB8 + 7D8C6379 41820010 + 880C0064 2C000005 + 41820230 70A00004 + 41A20040 881F0008 + 2C000008 41820034 + 881F000E 3D40803E + 394AF498 7CEA00AE + 2C070001 40810204 + 38070001 5400EFFE + 7CE70214 54E7403E + 60E700FF 480000FC + 70A00008 41A201E4 + 4800003D 00141516 + 0017181D 34000090 + 2F2E3020 32293328 + 2A1FBA3C 371E213A + 0E2C3900 00010507 + 08090200 123457D0 + 24567000 12234070 + 23467001 7D2802A6 + 54A6CF3A 50A6E7BC + 50A6D7FE 54A0F77A + 7CC60378 54A0C738 50A0B77C 7CC60378 54A3873F 41820054 2C030009 41820098 @@ -226,7 +239,7 @@ 60000000 00000000 - C229E080 0000004D + C229E080 00000052 3C80817F 816D9EC8 3D808040 80ACBC24 20050022 540A043D @@ -235,25 +248,30 @@ 28830001 4C451102 40A2000C 38A00008 90ACBC24 7C7D1B79 - 41820220 70A00004 - 41A20034 881F000E - 3D40803D 394A6DB0 - 7CEA00AE 2C070001 - 40810200 38070001 - 5400EFFE 7CE70214 - 54E7403E 60E700FF - 480000F8 70A00008 - 41A201E0 4800003D - 00141516 0017181D - 34000090 2F2E3020 - 32293328 2A1FBA3C - 371E213A 0E2C3900 - 00010507 08090200 - 123457D0 24567000 - 12234070 23467001 - 7D2802A6 54A6CF38 - 50A6F77A 50A6E7BC - 50A6D7FE 54A0C738 + 41820248 818D9EE0 + 7D8C6379 41820010 + 880C0064 2C000005 + 41820230 70A00004 + 41A20040 881F0008 + 2C000008 41820034 + 881F000E 3D40803D + 394A6DB0 7CEA00AE + 2C070001 40810204 + 38070001 5400EFFE + 7CE70214 54E7403E + 60E700FF 480000FC + 70A00008 41A201E4 + 4800003D 00141516 + 0017181D 34000090 + 2F2E3020 32293328 + 2A1FBA3C 371E213A + 0E2C3900 00010507 + 08090200 123457D0 + 24567000 12234070 + 23467001 7D2802A6 + 54A6CF3A 50A6E7BC + 50A6D7FE 54A0F77A + 7CC60378 54A0C738 50A0B77C 7CC60378 54A3873F 41820054 2C030009 41820098 @@ -306,7 +324,7 @@ 60000000 00000000 - C2285FCC 0000004D + C2285FCC 00000052 3C80817F 816D9E60 3D80803F 80AC5458 20050022 540A043D @@ -315,25 +333,30 @@ 28830001 4C451102 40A2000C 38A00008 90AC5458 7C7D1B79 - 41820220 70A00004 - 41A20034 881F000E - 3D40803D 394AF9B8 - 7CEA00AE 2C070001 - 40810200 38070001 - 5400EFFE 7CE70214 - 54E7403E 60E700FF - 480000F8 70A00008 - 41A201E0 4800003D - 00141516 0017181D - 34000090 2F2E3020 - 32293328 2A1FBA3C - 371E213A 0E2C3900 - 00010507 08090200 - 123457D0 24567000 - 12234070 23467001 - 7D2802A6 54A6CF38 - 50A6F77A 50A6E7BC - 50A6D7FE 54A0C738 + 41820248 818D9E78 + 7D8C6379 41820010 + 880C0064 2C000005 + 41820230 70A00004 + 41A20040 881F0008 + 2C000008 41820034 + 881F000E 3D40803D + 394AF9B8 7CEA00AE + 2C070001 40810204 + 38070001 5400EFFE + 7CE70214 54E7403E + 60E700FF 480000FC + 70A00008 41A201E4 + 4800003D 00141516 + 0017181D 34000090 + 2F2E3020 32293328 + 2A1FBA3C 371E213A + 0E2C3900 00010507 + 08090200 123457D0 + 24567000 12234070 + 23467001 7D2802A6 + 54A6CF3A 50A6E7BC + 50A6D7FE 54A0F77A + 7CC60378 54A0C738 50A0B77C 7CC60378 54A3873F 41820054 2C030009 41820098 diff --git a/InstantLevelSelectExtra/README.md b/InstantLevelSelectExtra/README.md index a5845f0..1823e8b 100644 --- a/InstantLevelSelectExtra/README.md +++ b/InstantLevelSelectExtra/README.md @@ -12,7 +12,8 @@ - Pressing `D-Pad Down` in Plaza has no effect ### Level Select -Press `{the following button combination} + D-Pad Up` to warp to other area instantly: +Press `{the following button combination} + D-Pad Up` to warp to other area instantly. +As the alternatives of `Z` button, you can also press `B` or `Start`. ![Level Select Combinations](../.img/levelselect.png) - For `Z + D-Pad Up`, the current area will be restarted, but the **respawn position will be reset**. It is like `D-Pad Up`, but the respawn position will be the default position instead of the previous one diff --git a/InstantLevelSelectExtra/info.xml b/InstantLevelSelectExtra/info.xml index 0127113..890778c 100644 --- a/InstantLevelSelectExtra/info.xml +++ b/InstantLevelSelectExtra/info.xml @@ -19,7 +19,8 @@ - Pressing `D-Pad Down` in Plaza has no effect #### Level Select - Press `{the following button combination} + D-Pad Up` to warp to other area instantly: + Press `{the following button combination} + D-Pad Up` to warp to other area instantly. + As the alternatives of `Z` button, you can also press `B` or `Start`. ![Level Select Combinations](/img/levelselect.png) - For `Z + D-Pad Up`, the current area will be restarted, but the **respawn position will be reset**. It is like `D-Pad Up`, but the respawn position will be the default position instead of the previous one @@ -47,9 +48,11 @@ #### シャイン選択画面からやり直し - `十字キー下`で**現在のステージのシャイン選択画面からやり直す** + - ポーズ中にこのコードは無効化されます #### レベル選択 - `{次のボタン}+十字キー上`でレベル選択 + `{次のボタン}+十字キー上`でレベル選択 + `Z`ボタンの代わりに`B`か`Start`ボタンを押すこともできます ![レベル選択](/img/levelselect.png) diff --git a/InstantLevelSelectExtra/src/main.s b/InstantLevelSelectExtra/src/main.s index 45bad35..eb867c3 100644 --- a/InstantLevelSelectExtra/src/main.s +++ b/InstantLevelSelectExtra/src/main.s @@ -54,10 +54,27 @@ beq .L.done +## disable the code if paused +.L.checkPaused: +### r12 = *gpMarDirector + lwz r12, gpMarDirector$r13(r13) + mr. r12, r12 + beq .L.checkPaused.done +### if (u8) @ *gpMarDirector + 0x64 == 5 + lbz r0, 0x64(r12) + cmpwi r0, 5 + beq .L.done +.L.checkPaused.done: + + ## check button (Shine Select) .L.checkButton.ShineSelect: andi. r0, rBtn, $btnShineSelect beq+ .L.checkButton.ShineSelect.done +### disable Shine Select when already in Shine Select + lbz r0, 0x8(rApp) # directory type + cmpwi r0, 8 # shine select + beq .L.checkButton.ShineSelect.done .ShineSelect: ## rAns = shineStageTable[curArea] lbz r0, 0xE(rApp) # current area @@ -121,12 +138,14 @@ .L.main: ## calc index -## btn: S YXZA -LRZ ---- -## XZRL=8,4,2,1 - rlwinm rIdx, rBtn, 32-7, 0x8 # X=8 - rlwimi rIdx, rBtn, 32-2, 0x4 # Z=4 +## btn: S YXBA -LRZ ---- +## XBRL=8,4,2,1 + rlwinm rIdx, rBtn, 32-7, 0xC # X,B=8,4 rlwimi rIdx, rBtn, 32-4, 0x2 # R=2 rlwimi rIdx, rBtn, 32-6, 0x1 # L=1 +## Z=4 + rlwinm r0, rBtn, 32- 2, 0x4 # Z=4 + or rIdx, rIdx, r0 ## YSY=8,4,2 rlwinm r0, rBtn, 32- 8, 0x8 # Y=+8 rlwimi r0, rBtn, 32-10, 0x6 # S,Y=4,+2