Button Masher is a windows tool to help you analyze and improve your execution

0.30 version of button masher doesn’t support joystick with HAT (i.e. TE sticks, etc)

here’s a version that supports it, windows 64-bit binary included


if you are on win32, download Python 2.7.4 Windows Installer

and pygame for python 2.7



then run

python.exe buttonmasher.py

Button Masher
Copyright © 2004 Matthew Bennett
web: http://buttonmasher.sourceforge.net
email: cascadeofprawns@users.sourceforge.net

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License (LICENSE.TXT) for more details.


Button Masher is a simple tool to help you analyze and improve your execution
of fighting game moves, combos, etc. It displays each joystick input as it
happens, along with the frame number of the change, similar to the display
in the practice mode of some games.

Button Masher is written in Python (http://python.org) and uses the ace
Pygame library (http://pygame.org).


A joystick or gamepad. The following devices are known to work:


  • Hori ‘Soul Calibur II’ PSX joystick with ‘Boom’ PSX->USB adapter
  • Saitek ‘P150’ gamepad


  • Gravis GamePad Pro (Thanks Buttermaker)

Keyboard port:

  • Hotrod SE

If Pygame can’t detect any joysticks, you’ll be informed at the title screen
See the Troubleshooting section if this happens. Note that the computer
considers the Hotrod to be a keyboard, not a joystick, so although it is
supported by Button Masher, it won’t count towards the number of joysticks


Use the joystick to practice your execution. Button Masher will show you
exactly what you input, and the frame number of each action. (A frame is
1/60th of a second, as in most fighters.)

To clear the screen, do nothing for 1/2 a second, and then the next time you
press a button or move the stick, the screen will automatically clear before
showing what you did.

Note: In order to allow any one of many plugged-in joysticks to be used,
Button Masher doesn’t distinguish between events from different joysticks.
You can therefore use any joystick without having to explicitly select it.


No joystick detected / Nothing happens / Program crashes / Weird behaviour:

  1. Make sure your joystick is plugged in properly. If it is a Hotrod,
    then although Pygame can’t recognise it as a joystick, it will work
    in Button Masher 0.3.0 or later.

  2. Check whether your OS recognises your joystick, and that it works in
    other programs.

  3. Run the included ‘joysticktest.exe’ (or ‘joysticktest.py’) to see whether
    Pygame recognises your joystick, and what it thinks it is. Moving the stick
    and pressing the buttons should produce output to the console/shell.

    If joysticktest does not indicate that your joystick is recognised
    and working, maybe Pygame doesn’t like it. Try http://pygame.org
    for help.

  4. If you’ve tried all of the above, and it works in joysticktest but not in
    Button Masher, send me a copy of the output from joysticktest, the type
    of the joystick/gamepad/adapter, and a description of the problem,
    and I’ll try to fix it.


0.2.5 -> 0.3.0
Added support for Hotrod joystick (effectively a keyboard)

0.2.4 -> 0.2.5
Decreased reset wait time


Frame number font: ‘Atkins’ © Pixietype (http://www.pixitype.com)
Title screen font: ‘DPComic’ © codeman38 (http://zone38.net)
Zangief © Capcom

Nice I got to check it out later on.

d/ling now. thanks!

I think a video showing how to use the tool would be ideal. If this is really useful for ST players it should go straight to the resources section of strevival.com

Wow, thanks for this!! Really cool how it shows frames too!

I was looking for something like this in the xbox indie section just the other day, look forward to trying this.

Nice. Worked on my usb philips pad(save for the dpad)

I’m not entirely sure what it’s supposed to tell me that a game’s training mode doesn’t.

Still fun!

Thanks for this trying to test this on my Hori SCV stick so far it’s not recognizing it but I go into Joystick test and it’s recognizing the button presses. I need to figure this problem out.

Not every game has a training mode with an input display.

I guess you’re right!

oh, so you’re the one who made this? cool, thanks… i used to use a modified version of it for streaming since yours lacked a lot of features i needed. since then i’ve lost it but i can still give you some suggestions…

[list][]make the window scroll properly when inputs go out of bounds[]add mappable button layouts (so that one can select what a button on their stick corresponds to)[]allow easier changing of button icons[]make reset time optional[]make window / viewpoint dimensions scalable[]make scrolling optionally vertical (a la cvs2)[*]make colors customizable[/list]

EDIT: i also suggest letting keyboard buttons be bound as well

no i’m not the original author. the reason i’m posting this is because i found that it doesn’t support te sticks and i figure people on this forum would find use of it.

the original author probably abandoned this project.
i’m not going to make more changes to it but if you find the modified version i can help incorporate the changes.

on the te stick there is a LS/RS/digit toggle. Does your SCV stick have that? If yes, try playing around with the switch and see if it recognizes your directional input.

Wait, is this the tool that can read Player 2’s input on GGPO?

It does and now it works cause of it thanks.

makes sense that I play one week and then the next week they have my inputs mapped out. juuuuuuuuuuuuuuust kidddiiiiiing

thats something else entirely… this is basically an execution aid for games with training mode that don’t have input display

What does it mean when I roll a fireball motion and have a second forward arrow in the motion below my button i tapped?

wait, ppl are doing that now?

Man, thanks. Such a great tool. I was getting some inconsistent inputs in ST and now I can figure out exactly what it was.