Bent 00
Longtime Limit Breaker
Great news: We don't have to give up taunt-triggered footstools after all! After I learned that the "New Footstool Triggers" code Glitch and I worked on causes WiFi to desync, I investigated Project M's Taunts = Footstool code. I found out that it is superior to our version -- Project M's version detaches footstools from jumps, and ties them to taunts, without hardcoding them to specific buttons like we did -- and it should not cause WiFi to desync.
I asked Magus, the creator of Project M's Taunts = Footstool code, if we could use his work in Brawl Minus. Here is his first response:
Now, all we have to decide on is: Do we want to have...
1.) Footstools triggerable by Taunts ONLY (Tap Jump nor Button Jump will Footstool)
-OR-
2.) Footstools triggerable by Taunts and Button Jump, but NOT Tap Jump
-OR-
3.) Footstools triggerable by Taunts, Button Jump, and Tap Jump
I've briefly tested all three setups, and they all work perfectly offline. Haven't tested online yet, but none of them should cause a desync.
There are a a few differences:
With Type 1, all footstools are the same. Everyone except Mario and Luigi can control how high a footstool jump sends them by tapping or holding the "Taunt" input. Tap for a low jump, hold for a high one. The Mario Bros.' footstool height cannot be controlled in this way; they always go the maximum height.
With Type 2, footstools differ slightly, depending on whether you perform one via a "Jump" or "Taunt" command. The height of "Jump" footstools are controlled by how long you hold the button, while the height of "Taunt" footstools are not affected this way -- "Taunt" footstools' height can only be increased by holding up on the Control Stick as you footstool. The Mario Bros.' "Taunt" footstools can be controlled in this way, but their "Jump" footstools always send them the maximum height.
Basically, with Type 2, you control "Jump" footstool height via buttons, and "Taunt" footstool height via the Control Stick. Mario and Luigi have no control over "Jump" footstool height, but they can control "Taunt" footstool height.
"Jump" footstools offer you more control over footstool jump height, but you risk wasting your aerial jumps if you miss.
It's more awkward to control the height of "Taunt" footstools, but they're useful if you want a quick, short footstool. Most importantly, "Taunt" footstools do not risk your aerial jumps; no matter how often you hit that "Taunt" command in the air, nothing will happen unless you can land the footstool.
The new Type 3 is like Type 1; all footstools are the same. The only difference is that you can also footstool via Button Jump and Tap Jump with Type 3. Any Jump or Taunt input can footstool via any button(s) you assign it to! "Jump" and "Taunt" footstools execute the same way, except that you don't risk wasting your midair jumps with "Taunt" footstools.
As with Type 1, everyone except Mario and Luigi can control how high a footstool jump sends them by tapping or holding the input. Tap for a low jump, hold for a high one. The Mario Bros.' footstool height cannot be controlled in this way; they always go the maximum height.
SUMMARY:
Type 1 is more uniform, but I'm sure some players will miss footstooling with "Jump" buttons and Tap Jump. This is the code Project M uses.
Type 2 has... quirks, but it offers more options -- most notably the option of footstooling with any "Jump" command, except Tap Jump.
Type 3 combines Type 1's uniformity and Type 2's versatility; "Taunt" and "Jump" footstools execute the same way, and can be triggered by any "Taunt" or "Jump" button input, plus Tap Jump.
Personally, my favorite is Type 3. It's nice being able to control footstool Jump height the same way whether you're using the "Taunt" or "Jump" version. Only the Mario Bros. lose an option with Type 3; they can no longer do short footstools like they can with Type 2 "Taunt" footstools. That's fine, though -- while it was useful, it looked and felt a bit odd for such powerful footstools to only send Mario and Luigi up a short distance.
Finally, there is one more code that should be used with Magus's work:
Footstool Action Exit Clears Auto-Footstool Bit [ds22]
* 4A000000 90000000
* 1619BDD0 00000028
* 00000005 12000005
* 00000002 9019BDE0
* 12000200 80FB6334
* 120B0100 9019BDD0
* 00080000 00000000
* 06FB6344 00000008
* 00070100 9019BDD8
This code fixes the bug which causes players to auto-footstool after jumping off of a Green Shell, until they are K.O.ed.
ds22 has not yet given his permission to Minus to use this code officially, but I've sent him a message requesting it. Considering it is just a supporting code to Magus's codes in this instance, I don't see why he would refuse. Even if he does, we can just use Magus's codes, and tolerate the Green Shell bug. Most of us don't use items anyway... At any rate, I bet ds22 would be more inclined to grant permission if the Brawl Minus devs would credit him for his Team Colored Shields code, which is currently being used in Minus.
UPDATE: I received a reply from ds22!
Want to try these codes out now? Just drop one of the attached "RSBE01.gct" codelists into your Brawl Minus 3.Q "Codes" folder:
TYPE 1: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts ONLY
TYPE 2: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts and Button Jump
TYPE 3: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts, Button Jump, and Tap Jump
Credits: Thanks to...
the Brawl Minus Development Team for continued development of Brawl Minus,
Magus, for making a special version of his taunts=footstool code especially for Minus,
ds22, for letting us use his "Footstool Action Exit Clears Auto-Footstool Bit" code,
Glitch, for his efforts in coding the first version of the Taunts = Footstool codes used in Minus 3.Q,
and you, for caring enough to read all this, and helping me test it online!
Note: I made a new topic for this since I couldn't edit the poll on the original post.
I asked Magus, the creator of Project M's Taunts = Footstool code, if we could use his work in Brawl Minus. Here is his first response:
And here is his second response:Magus said:Yeah, taking a quick look at that code it seems like it works by looking at the controller hardware and if physical buttons are pressed (A/B/X/Y/etc) it temporarily changes the requirement from 'Jump Button' to 'Up-Taunt Button'. Over WiFi and saved in Replays, only the button actions are sent/saved (Attack/Special/Jump/etc), so since it can't see the controller itself being pressed it doesn't work and desyncs. Light press shielding and analog c-stick shield action buffers and ASDI cause desyncs in WiFi/Replays in Project M in the full codeset for the same reason, since that analog data isn't sent/saved and is only seen locally. Also, since that footstool code toggles the requirement used by all players, I imagine you can mess with another player's input needed to footstool by holding buttons (probably depends on controller port for which player controls the setting if they conflict).
Sure, I have no problem with anyone using that code. The code in PM currently works by replacing the tap jump and button jump change actions for footstool into a check for any taunt button press. The requirement used, Any Taunt Press, is a custom PSA scripting requirement that I added into the game along with a few others to fill empty requirements using assembly code, so that code is also needed for it to work (doesn't have any effect other than the footstools code if using them outside of PM since those req slots aren't used normally). Without it, each taunt button needs to be checked separately (Up/Side/Down).
Needed for either footstool code version
Custom Requirements v1.1 [Magus]
* C27854B0 00000034
* 9421FFD8 BF010008
* DBC20010 DBE20018
* 38600001 2C04004D
* 41820028 2C04004E
* 41820074 2C04004F
* 418200B0 2C040050
* 418200E4 2C040051
* 41820138 4800014C
* 83E60068 8B9F00AE
* 8BBF00B0 2C1C0002
* 41800010 2C1D0002
* 41800008 48000030
* C3DF0038 C3FF003C
* EFDE07B2 EFFF07F2
* EFDEF82A 3F6080B8
* 637B8350 C3FB0000
* EFFF07F2 FC1EF840
* 40800008 38600000
* 480000F8 83E60068
* 83BF0074 839F0078
* 57BBEFFE 2C1B0000
* 41A20010 579BEFFE
* 2C1B0000 41820020
* 83C60070 83DE0020
* 83DE000C 837E0134
* 2C1B0001 41820008
* 38600000 480000B4
* 83E60068 83BF0074
* 57BBEFFE 2C1B0001
* 41820028 83C60070
* 83DE0020 83DE000C
* 837E0134 2C1B0001
* 41820010 2C1B0002
* 41820008 38600000
* 48000078 83E60068
* 83BF0074 839F0078
* 57BBB7FE 2C1B0000
* 41A20010 579BB7FE
* 2C1B0000 41820038
* 57BBAFFE 2C1B0000
* 41A20010 579BAFFE
* 2C1B0000 41820020
* 57BBA7FE 2C1B0000
* 41A20010 579BA7FE
* 2C1B0000 41820008
* 38600000 4800001C
* 83E60068 83BF0074
* 57BBB77E 2C1B0000
* 41810008 38600000
* CBC20010 CBE20018
* BB010008 38210028
* 60000000 00000000
-SDI Input (4D), Any Shield Input (4E-4F), Any Taunt Input (50-51)
Req 50 = Any Taunt Press
Req 51 = Any Taunt Held
The reason I created the Any Taunt button requirements is because in the routine for footstooling there are 3 change actions (tap jump, button jump, SSE enemy/green shell/etc auto jump). In earlier versions of PM when the taunts were checked individually you could only footstool with up/down taunt because those scripts don't allow more action changes than originally existed for whatever reason even by inserting additional code, so up taunt replaced tap jump and down replaced button jump. By combining the taunt checks into a single action change using the custom requirement all 3 taunts could fit and have SSE/green shells and stuff work properly. This is the first code listed below, and is the one used for PM.
If footstooling with taunt is wanted in addition to footstooling with jump, however, one of the footstool methods needs to go since there can only be 3. I've made a second code below that makes footstool work with any taunt and button jump, but tap-jump no longer footstools. Replacing auto-footstool instead would be significantly more work and I'm also not sure it's compatible anyway since there may be hard coding tied to the status ID it uses. SSE also becomes obnoxious with manual footstooling only.
Footstool with Only Taunt v1.2 [Magus]
* 02FC1528 001B0002
* 04FC1560 02000301
* 04FAA8D0 00000050
* 04FB62C4 000A0100
* 04FB6240 00000050
* 04FB61D4 000A0100
* 04FB6188 80000051
Code:Footstool with Only Taunt v1.2 [Magus] * 02FC1528 001B0002 fills 80FC1528-80FC1560 with nops (00020002) * 04FC1560 02000301 02000401 -> 02000301. CHK_AIR_TREAD_JUMP (21908). 4->3 params * 04FAA8D0 00000050 00000030 -> 00000050. CHK_AIR_TREAD_JUMP (21908). Req=Button Press -> Any Taunt Press * 04FB62C4 000A0100 000A0200 -> 000A0100. Action 0x6D (Footstool). 2->1 params * 04FB6240 00000050 00000030 -> 00000050. Action 0x6D (Footstool). Req=Button Press -> Any Taunt Press * 04FB61D4 000A0100 000A0200 -> 000A0100. Action 0x6D CIL (Footstool). 2->1 params * 04FB6188 80000051 00000033 -> 80000051. Action 0x6D CIL (Footstool). Req=Button Not Held -> Any Taunt Not Held
-OR-
Footstool with Taunt, but No Tap Jump Footstool [Magus]
* 04FAA828 00000050
* 06FC1528 00000038
* 02000301 80FAA814
* 02040400 80FAA8DC
* 02040400 80FAA8FC
* 02040100 80FAA91C
* 02040100 80FAA924
* 00020000 00000000
* 00020000 00000000
Code:Footstool with Taunt, but No Tap Jump Footstool [Magus] * 04FAA828 00000050 00000007 -> 00000050. CHK_AIR_TREAD_JUMP (21908). Req=Compare -> Any Taunt Press * 06FC1528 00000038 * 02000301 80FAA814 Change Action(St)(EXT=1) - 0x274F, 0x6D, Req=Any Taunt Press * 02040400 80FAA8DC Additional Requirement - LA-Basic[6] = 0.00x * 02040400 80FAA8FC Additional Requirement - IC-Basic[1034] >= IC-Basic[3227] * 02040100 80FAA91C Additional Requirement - Req=Unknown(0x2713) * 02040100 80FAA924 Additional Requirement - Req=In Air * 00020000 00000000 * 00020000 00000000
Magus said:I've made a new taunt to footstool code for you guys since it looks like there's a preference for keeping jump to footstool, and looking at my custom requirements code again it's a simple addition to change the custom requirement created from any taunt to any taunt or jump.
This allows the 3 different taunts and button jump to all be checked simultaneously in the action scripting's conditionals using a single requirement, and so the 3 action change limit in CHK_AIR_TREAD_JUMP isn't an issue since it's changing the button jump one to button jump+taunts instead of replacing one of the other 2 footstooling methods.
Custom Requirements v1.Minus [Magus]
* C27854B0 0000000B
* 38600001 815C0068
* 812A0074 810A0078
* 2C040050 41820010
* 2C040051 41820020
* 48000034 7D274078
* 54E604EA 54E5077A
* 7CC52B79 41A2001C
* 4800001C 552604EA
* 5525077A 7CC52B79
* 41A20008 48000008
* 38600000 00000000
-Jump or Any Taunt Input (50-51)
Req 50 = Button Jump or Any Taunt PressCode:li r3,1 # entry point (807854B0). sets to true if requirement above 0x4C lwz r10,0x68(r28) # Button Inputs Address lwz r9,0x74(r10) # loads current inputs lwz r8,0x78(r10) # loads previous inputs cmpwi r4,0x50 # r4 = Requirement ID beq- TAUNTJUMP_PRESS # Req 0x50 = Jump or Any Taunt Press cmpwi r4,0x51 beq- TAUNTJUMP_HELD # Req 0x51 = Jump or Any Taunt Held b END # skip code if none of the above TAUNTJUMP_PRESS: andc r7,r9,r8 # remove bits for buttons input previous frame, leaving press inputs only rlwinm r6,r7,0,19,21 # u/s/d-taunt bits rlwinm r5,r7,0,29,29 # jump bit or. r5,r6,r5 beq+ FALSE # set req to false if no press inputs for jump or taunts b END TAUNTJUMP_HELD: rlwinm r6,r9,0,19,21 # u/s/d-taunt bits rlwinm r5,r9,0,29,29 # jump bit or. r5,r6,r5 beq+ FALSE # set req to false if no held inputs for jump or taunts b END FALSE: li r3,0 # set requirement to false END:
Req 51 = Button Jump or Any Taunt Held
I added the jump button check in there as well, removed all of the stuff not needed outside of PM, and simplified the coding a lot since I wasn't as good with assembly the last time I made a custom requirement a few years ago.
Footstool with Jump or Any Taunt [Magus]
* 04FC1560 02000301
* 04FAA8D0 00000050
* 04FB62C4 000A0100
* 04FB6240 00000050
* 04FB61D4 000A0100
* 04FB6188 80000051
This replaces the button jump footstool with a button jump or any taunt check. It also checks for button jump or any taunt when controlling shorthop/fulljump on the footstool.Code:Footstool with Jump or Any Taunt [Magus] * 04FC1560 02000301 02000401 -> 02000301. CHK_AIR_TREAD_JUMP (21908). 4->3 params * 04FAA8D0 00000050 00000030 -> 00000050. CHK_AIR_TREAD_JUMP (21908). Req=Button Press -> Any Taunt Press * 04FB62C4 000A0100 000A0200 -> 000A0100. Action 0x6D (Footstool). 2->1 params * 04FB6240 00000050 00000030 -> 00000050. Action 0x6D (Footstool). Req=Button Press -> Any Taunt Press * 04FB61D4 000A0100 000A0200 -> 000A0100. Action 0x6D CIL (Footstool). 2->1 params * 04FB6188 80000051 00000033 -> 80000051. Action 0x6D CIL (Footstool). Req=Button Not Held -> Any Taunt Not Held
If not having control over shorthop/fulljump by holding the taunt button like how the other code worked is for some reason preferable (you'd still be able to hold jump and start the footstool with taunt press and fulljump as before), remove the highlighted lines.
Now, all we have to decide on is: Do we want to have...
1.) Footstools triggerable by Taunts ONLY (Tap Jump nor Button Jump will Footstool)
-OR-
2.) Footstools triggerable by Taunts and Button Jump, but NOT Tap Jump
-OR-
3.) Footstools triggerable by Taunts, Button Jump, and Tap Jump
I've briefly tested all three setups, and they all work perfectly offline. Haven't tested online yet, but none of them should cause a desync.
There are a a few differences:
With Type 1, all footstools are the same. Everyone except Mario and Luigi can control how high a footstool jump sends them by tapping or holding the "Taunt" input. Tap for a low jump, hold for a high one. The Mario Bros.' footstool height cannot be controlled in this way; they always go the maximum height.
With Type 2, footstools differ slightly, depending on whether you perform one via a "Jump" or "Taunt" command. The height of "Jump" footstools are controlled by how long you hold the button, while the height of "Taunt" footstools are not affected this way -- "Taunt" footstools' height can only be increased by holding up on the Control Stick as you footstool. The Mario Bros.' "Taunt" footstools can be controlled in this way, but their "Jump" footstools always send them the maximum height.
Basically, with Type 2, you control "Jump" footstool height via buttons, and "Taunt" footstool height via the Control Stick. Mario and Luigi have no control over "Jump" footstool height, but they can control "Taunt" footstool height.
"Jump" footstools offer you more control over footstool jump height, but you risk wasting your aerial jumps if you miss.
It's more awkward to control the height of "Taunt" footstools, but they're useful if you want a quick, short footstool. Most importantly, "Taunt" footstools do not risk your aerial jumps; no matter how often you hit that "Taunt" command in the air, nothing will happen unless you can land the footstool.
The new Type 3 is like Type 1; all footstools are the same. The only difference is that you can also footstool via Button Jump and Tap Jump with Type 3. Any Jump or Taunt input can footstool via any button(s) you assign it to! "Jump" and "Taunt" footstools execute the same way, except that you don't risk wasting your midair jumps with "Taunt" footstools.
As with Type 1, everyone except Mario and Luigi can control how high a footstool jump sends them by tapping or holding the input. Tap for a low jump, hold for a high one. The Mario Bros.' footstool height cannot be controlled in this way; they always go the maximum height.
SUMMARY:
Type 1 is more uniform, but I'm sure some players will miss footstooling with "Jump" buttons and Tap Jump. This is the code Project M uses.
Type 2 has... quirks, but it offers more options -- most notably the option of footstooling with any "Jump" command, except Tap Jump.
Type 3 combines Type 1's uniformity and Type 2's versatility; "Taunt" and "Jump" footstools execute the same way, and can be triggered by any "Taunt" or "Jump" button input, plus Tap Jump.
Personally, my favorite is Type 3. It's nice being able to control footstool Jump height the same way whether you're using the "Taunt" or "Jump" version. Only the Mario Bros. lose an option with Type 3; they can no longer do short footstools like they can with Type 2 "Taunt" footstools. That's fine, though -- while it was useful, it looked and felt a bit odd for such powerful footstools to only send Mario and Luigi up a short distance.
Finally, there is one more code that should be used with Magus's work:
Footstool Action Exit Clears Auto-Footstool Bit [ds22]
* 4A000000 90000000
* 1619BDD0 00000028
* 00000005 12000005
* 00000002 9019BDE0
* 12000200 80FB6334
* 120B0100 9019BDD0
* 00080000 00000000
* 06FB6344 00000008
* 00070100 9019BDD8
This code fixes the bug which causes players to auto-footstool after jumping off of a Green Shell, until they are K.O.ed.
ds22 has not yet given his permission to Minus to use this code officially, but I've sent him a message requesting it. Considering it is just a supporting code to Magus's codes in this instance, I don't see why he would refuse. Even if he does, we can just use Magus's codes, and tolerate the Green Shell bug. Most of us don't use items anyway... At any rate, I bet ds22 would be more inclined to grant permission if the Brawl Minus devs would credit him for his Team Colored Shields code, which is currently being used in Minus.
UPDATE: I received a reply from ds22!
Here's hoping that these codes make it into Brawl Minus 4.0!ds22 said:You guys have my permission to use the code, as long as I also get credited for my Team Coloured Shields code:
Team Coloured Shields V2 [ds22]
* C281DEEC 00000003
* 2C170002 4182000C
* 7EE4BB78 48000008
* 38800003 00000000
* 0481DEF4 7EE4BB78
With kind regards,
ds22
Want to try these codes out now? Just drop one of the attached "RSBE01.gct" codelists into your Brawl Minus 3.Q "Codes" folder:
TYPE 1: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts ONLY
TYPE 2: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts and Button Jump
TYPE 3: Brawl Minus 3.Q Default + New WiFi code + Footstools Triggerable by Taunts, Button Jump, and Tap Jump
Credits: Thanks to...
the Brawl Minus Development Team for continued development of Brawl Minus,
Magus, for making a special version of his taunts=footstool code especially for Minus,
ds22, for letting us use his "Footstool Action Exit Clears Auto-Footstool Bit" code,
Glitch, for his efforts in coding the first version of the Taunts = Footstool codes used in Minus 3.Q,
and you, for caring enough to read all this, and helping me test it online!
Note: I made a new topic for this since I couldn't edit the poll on the original post.
Attachments
Last edited by a moderator: