Magus & ds22 share their Taunts = Footstool codes from Project M! [UPDATED]

Which Taunts = Footstool code should we use in Brawl Minus?


  • Total voters
    11

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:
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
And here is his second response:
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)
Code:
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 50 = Button Jump or Any Taunt Press
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

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
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.

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!
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
Here's hoping that these codes make it into Brawl Minus 4.0!

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

  • TYPE 1 - 3.Q WiFi FS=T.7z
    10.7 KB · Views: 469
  • TYPE 2 - 3.Q WiFi FS=T&BJ.7z
    10.7 KB · Views: 427
  • TYPE 3 - 3.Q WiFi FS=T,BJ,&TJ.7z
    10.2 KB · Views: 525
Last edited by a moderator:

Kien

A Meaningless Circle
Minus Backroom
No one has replied here though... which is odd seeing that it's a good thread for a change.
 

Tybis

Resident Minusaur
Minus Backroom
A single question has been in my head since the first version of this thread...

What's the point of having footstool be activatable by anything besides its own input, exclusive from jump? Regular jumps and footstools are each useful in separate ways, but their usefulness is undermined when they interfere with each other. The way I see it, the whole reason the footstool code was made in the first place was to alleviate 2 problems;
1) Prevent footstools from happening when you want to do a regular jump.
2) Prevent regular jumping from happening when you want to do a footstool.

The "Type 1" version of this code, the one PM uses, fixes BOTH problems. The other types only fix one. You'd be able to footstool without risking accidentally doing a regular jump, but you wouldn't be able to jump next to an opponent without running the risk of accidentally doing a footstool instead.
 

Bent 00

Longtime Limit Breaker
ds22 has granted us permission to use his "Footstool Action Exit Clears Auto-Footstool Bit" code, as well -- as long as we also credit him for his "Team Colored Shields V2" code.

@Pin Clock, I see you currently have this code listed on brawlminus.net/codes like this:
Coloured shields
* 4A000000 80F59A60
* 14000088 FF3AB700
* 14000090 FF000000
* 140000A0 FF000000
* 140000A8 00000000
* 4A000000 80F59ED4
* 14000088 00FFFF00
* 14000090 0000FF00
* 140000A0 0080FF00
* 140000A8 00000000
* 4A000000 80F5A348
* 14000088 FAF9E100
* 14000090 FFFF0000
* 140000A0 FFFF8000
* 140000A8 00000000
* 4A000000 80F5A7BC
* 14000088 88FCAE00
* 14000090 00FF0000
* 140000A0 00C00000
* 140000A8 00000000
* C281DEEC 00000003
* 2C170002 4182000C
* 7EE4BB78 48000008
* 38800003 00000000
* 0481DEF4 7EE4BB78

Please change it to this instead:
Colored Shields [Phantom Wings]
* 4A000000 80F59A60
* 14000088 FF3AB700
* 14000090 FF000000
* 140000A0 FF000000
* 140000A8 00000000
* 4A000000 80F59ED4
* 14000088 00FFFF00
* 14000090 0000FF00
* 140000A0 0080FF00
* 140000A8 00000000
* 4A000000 80F5A348
* 14000088 FAF9E100
* 14000090 FFFF0000
* 140000A0 FFFF8000
* 140000A8 00000000
* 4A000000 80F5A7BC
* 14000088 88FCAE00
* 14000090 00FF0000
* 140000A0 00C00000
* 140000A8 00000000

Team Colored Shields V2 [ds22]
* C281DEEC 00000003
* 2C170002 4182000C
* 7EE4BB78 48000008
* 38800003 00000000
* 0481DEF4 7EE4BB78
 
Last edited by a moderator:

Bent 00

Longtime Limit Breaker
A single question has been in my head since the first version of this thread...

What's the point of having footstool be activatable by anything besides its own input, exclusive from jump?
There are a few reasons I can think of:
- Some players are simply too used to footstooling with "Jump" inputs, and don't want to change that.
- Some players may not have an extra button to map "Taunt" footstools to, so they rely on "Jump" inputs to footstool.
- Occasionally, players will land a "Jump" footstool by accident. This is usually a happy surprise, one they would regret not happening anymore.

@Thor and @Greatest_Aether, perhaps you have some input you'd like to share about this?

Regular jumps and footstools are each useful in separate ways, but their usefulness is undermined when they interfere with each other. The way I see it, the whole reason the footstool code was made in the first place was to alleviate 2 problems;
1) Prevent footstools from happening when you want to do a regular jump.
2) Prevent regular jumping from happening when you want to do a footstool.

The "Type 1" version of this code, the one PM uses, fixes BOTH problems. The other types only fix one. You'd be able to footstool without risking accidentally doing a regular jump, but you wouldn't be able to jump next to an opponent without running the risk of accidentally doing a footstool instead.
Personally, I can't remember any time that an accidental footstool has interfered with my play style. In my experience, these rare surprise footstools have only resulted in humorous pauses in gameplay, sometimes scoring a gimp K.O.. In what situations would having footstools not triggerable by "Jump" inputs be useful?
 

Greatest_Aether

Forum Reg of sorts
I close to never footstool, so I only footstool intentionally on the very rare occasion I play Mario. Even then, I use Tap Jump for the footstools. So my preferred type is type 3, but my input isn't all that important.
 

Pin Clock

Project Leader
Minus Backroom
ds22 has granted us permission to use his "Footstool Action Exit Clears Auto-Footstool Bit" code, as well -- as long as we also credit him for his "Team Colored Shields V2" code.

@Pin Clock, I see you currently have this code listed on brawlminus.net/codes like this:
Please change it to this instead:

It's already in the 4.0 .txt and will be updated on the site when 4.0 releases.
 

Thor

Well-Known Member
@Tybis , I find it awkward to try to footstool with taunting, and I also simply can't do that playing Brawl or Smash 4 [have to jump]. An accidental footstool will NEVER kill you [at absolute worst, it kills a teammate (and that's super funny), but the only other downside is screwing up some sort of offstage attempt to attack an opponent, and even then, you may have just gimped them], and this situation ONLY applies when you're edgeguarding. If I want to attack them offstage, I'll attack them offstage - I think basically no one here has accidentally footstooled when they want to do an aerial instead. But if I'm recovering, saving a jump with a footstool is sweet [if unintentional], because I don't want to have to hit jump, mash footstool, AND be trying to counterattack AND still keep my DI in case I get hit away - the fortune of just footstooling [intentionally or not] with jump I find convenient [both because it's not an odd input to me, being normalized to it from other Smash games] and I basically never regret getting a footstool when it's by accident, which is why I firmly support footstool being wired to "Jump".

However, I like the idea of alt inputs for other players [those who intentionally footstool with taunt shouldn't have that removed from them, at least I'd prefer for that to not happen], hence why I like the versions where you can use both jump and taunt.
 

Mawootad

Minus Backroom
Unexpected footstools put you in a position you weren't expecting. Sure a footstool below the stage is generally pretty nice since you possibly just killed them and guaranteed you'll recover which is hard to beat, but above the stage (or on the stage) if you're not Mario or Weegee an accidental footstool gives you no real advantage while still probably screwing up everything you wanted to do.
 

Bent 00

Longtime Limit Breaker
Some of you wanted Tap Jump to not footstool, so I asked Magus to make this for you:

No Footstools with Tap Jump [Magus]
* 06FC1528 00000038
* 00020000 00000000
* 00020000 00000000
* 00020000 00000000
* 00020000 00000000
* 00020000 00000000
* 00020000 00000000
* 00020000 00000000

I put the above code in the 4.2 code list right after Magus' "Footstool with Jump or Any Taunt" code, and it seems to work perfectly.
Used with the TYPE 3 codes already in 4.2, footstools will only be possible via Button Jumps and Taunts, NOT Tap Jumps.
Let me know if you have any problems with it.
 
Top