main | manual | download | questions | screenshots | links
Pydance doesn't work on Mac OS X anymore!
No, it doesn't.
Do I need a dance mat?


pydance works great without a dance mat, or any kind of controller, other than your keyboard. Mind you, it isn't as fun as with a mat nor is it as good for exercise, but it works. The keys are:

Player 1
7 8 9
4 5 6
1 2 3
Player 2
u i o
j k l
m , .
I want to use my dance mat (or buy one); What do I do?

You can use any commercial dance mat for the PSX and PS2 consoles, if you buy the right adapter.

You'll need an adapter to connect your PSX or PS2 dance mat to your PC. The pydance recommended adapter is the EMSUSB2, available from Level Six. It supports two controllers and works with all operating systems that support USB. In most operating systems, it's just plug and go!

Another option is the parallel port adapter that comes with BNS pads. These require more effort to setup, but also work.

Finally, any other 6 axis, 12 button or 4 axis, 16 button joystick that behaves like those the above two adapters should also work.

But really, the EMSUSB2 is so much easier to use, if you haven't already purchased something (or even if you have and you're having trouble), the just get one. They are easy to set up and work pretty much out of the box.

Whatever you do, don't buy the Radio Shack USB console thingy. (See the FAQ below about Radio Shack).

Where can I get more step and song files?

Not many sites offer .dance files for download. However, you can download the songs from DDRUK, which use other formats pydance can also play.

I bought this adapter from Radio Shack, and...

Take it back, now.

The Radio Shack adapter works by mapping the up/down/left/right button to the X and Y joystick axes. This means that it can only read one of up/down or left/right at the same time (that is, jumps are impossible, and leaving your foot on an opposite arrow is also impossible).

This is probably true of any adapter that maps the joystick to keystrokes instead of USB joystick events. We recommend the EMSUSB2. (See the FAQ about using a mat)

What do I have to do to get USB under Linux working with the EMSUSB2? (and like USB adapters)

You need certain options compiled into your kernel. Most newer distributions have this set up for you already. If you compile your own kernel, or want to make sure, then read on.

To start with, disable devfs. devfs is absolute crap, and thankfully will not be in 2.6 kernels. Unfortunately, some braindead distributions like Gentoo and Mandrake enable devfs by default. If devfs is on, we will not help you set up your pad.

The current Linux joystick devices are /dev/input/js0, js1, and so on. Many copies of SDL will look for joysticks at /dev/jsX for compatibility with older Linux kernels. If you don't have the /dev/jsX devices, run cd /dev && for I in input/js? ; do ln -s $I .; done as root.

Now for the actual kernel configuration. These options had different names earlier in the 2.4.x series. So, if they don't seem quite right that could be why. These instructions are current as of 2.4.19 and should probably work with some of the earlier kernels too.

There are several options you need. The first (in this order) is under the category USB Support: USB Human Interface Device (full HID) support. Make sure that the sub-option HID input layer support is enabled too. The next option is under Input core support and is called Joystick support.

If you are using a UHCI USB hub, be sure to enable the primary UHCI driver. Do not use the alternate (JE) driver. It does not recognise some hid devices properly. When loading modules, you want to use the usb-uhci.o module, not the uhci.o module.

These may be compiled into the kernel or as a module. Either way they should work. If you compiled it as a module, you'll want to make sure you have hotplug or something similar to automatically insmod the modules for you. Otherwise you'll have to do a modprobe of hid and joydev yourself.

I did all of the above, and my adapter still doesn't work.

Run cd /dev && for I in input/js? ; do ln -s $I .; done as root.

Sometimes, two copies of the same song appear. Why is this, and how can I fix it?
Why do you load .dwi files if .sm files exist?

Many times, simfile authors will distribute .sm and .dwi files in the same .zip file. DWI only loads the .dwi file, and SM ignores the .dwi file if a .sm file exists, because .sm is its native format. Since neither of those is pydance's native format, pydance loads both.

The following script, thanks to Andrea Landaker, will delete .dwi files if a .sm file with the same name exists: find -type f -name "*.sm" -print0 | sed -e 's/\.sm/\.dwi/g' | xargs -0 --verbose -i ls -Q "{}" 2> /dev/null | xargs --verbose -p -n 1 rm

This is not always desirable, since sometimes the .dwi file is better than the .sm file. But usually it's the other way around.

How do I run pydance in fullscreen?
Pressing 'f' doesn't do anything.

If you're in X11 (the standard Unix display system), press 'f' to switch to fullscreen (and back to windowed mode). This doesn't work in Windows; you'll have to edit pydance.cfg and add the line 'fullscreen 1' (or change 'fullscreen 0' to 'fullscreen 1'). If you are in X, and 'f' does nothing, make sure you don't have it bound to a direction or other button. If it is bound to another button, you can use F11 instead. If both F11 and 'f' are bound, then you're sick.

When I go to fullscreen mode, I get a black border around the screen.

Make sure your X configuration supports 640x480 displays at your current bit depth (either 16 or 24 bit). Also, if you are playing on an LCD, make sure you have scaling turned on. Not all LCDs support scaling, and so there is no way to get rid of the border on these.

My MP3 fails to load.
pydance crashes with a segmentation fault.
pydance crashes with a bus error.
pydance crashes with a "pygame parachute error".

pydance's MP3 support comes via SMPEG, which is suboptimal, but integrates with SDL's mixer library easily. You have three options.

The first is to try stripping ID3 tags from your MP3 files; you can do this in UNIX with id3ed for regular ID3 tags, or v2strip for ID3v2 tags, On Mac OS X, you can use Taggerwocky.

Secondly, you can convert them to the Ogg Vorbis format. mp32ogg can do this easily.

The third possibility is to help code a decent MP3 playing library for Python, that integrates well with Pygame and SDL. If you're interested in helping with this, drop by #pyddr on

pydance crashes with an "Urecognized file type (not VOC)" error, and I can't read the installation requirements. In addition, I probably read this FAQ at least once and missed this question as well. In fact, if I ask the developers this question, I shouldn't expect any answer besides being told I'm a moron.

You need a more recent version of SDL_mixer. You also need support for Ogg Vorbis in your SDL_mixer.

Many of my files fail to load with an "list index out of range" message.

Usually, this error is caused by "magic bytes" embedded in the file trying to indicate its character set encoding. Some discussion of the issue is available, but it is best summed up by the quote "There are several approaches for this. They all failed badly and continue to be part of the problem then to bring us in any way closer to the solution.". This is especially unnecessary when some formats (like .sm) specify that they will be in UTF-8, and then also include an additional code specifying that they are in UTF-8.

pydance will not support these files, and its developers look forward to a day when UTF-8 is the standard mechanism for external text data representation.

To fix this, open up the file, and remove the first three bytes (before the '#' character).

pydance keeps crashing with an "OverflowError". How do I fix it?

Your copy of glibc has been compiled with optimizations that are too aggressive, and have triggered bugs somewhere in it and/or your compiler. Recompile glibc with lower optimization levels, and stop aggressively optimizing unless you know exactly what you're doing.

My soft mat sucks. Can I improve it?

Yes, you can 'convert' a soft mat into a hard mat in a number of ways. One popular, simple, and fast way is to buy some plywood and staple-gun some vinyl hardwood-floor covering to the board over your DDR mat. Another thing you can do is take your soft mat apart and reenforce it with extra foam, wood, and sheet metal. One of the pydance developers has written a guide on doing this.

Why doesn't pydance use DWI files?

Since 0.7.0, pydance supports loading .dance (its native format), .step (its old format), DWI, and SM files. If you are using SM or DWI files, you will need to keep them in a directory structure like DWI or SM do (that is, songdir/Mix Name/Song Name), otherwise your backgrounds, banners, and music files will not be detected.

While I was building SMPEG, I got undefined symbol problems.

If you're using gcc 3.2, you may need to add -lgcc_s and -lsupc++ to the compilation options.

pydance is too slow.
  • Install Psyco. This cannot be recommended enough. pydance gets a consistent 30% speed increase on an Athlon 2200 with Psyco installed, and it will give even bigger gains on a system that is more CPU-bound. If Psyco is installed, pydance will automatically take advantage of it.
  • Switch to Python 2.3. pydance uses Python's new-style classes, which means it runs faster under 2.3 than 2.2. Combining 2.3 with Psyco is also much better than 2.2 and Psyco.
  • Turn off effects like arrow explosions.
  • Switch from 24 bit to 16 bit color. This greatly increases the frame rate on many computers.
  • Run pydance in fullscreen mode. It has to deal with less refresh events in such a case.
  • Upgrade your video card. pydance is very video-intensive; a high-powered processor with a bad video card will perform terribly. Note that this doesn't mean to buy the latest 3D whiz-bang video card; pydance doesn't use 3D. Instead, it means stop using your on-board video card.
What about adding <insert feature here>?

Don't ask us to implement the following:

  • OpenGL support - Not going to do it.
  • Internet Play - Someday, but not now.
  • Any feature from the official DDR product lines or other dancing simulators - We already know about them.
  • Anything already listed in our TODO file.

If you think you have something really unique, join the mailing list below and tell us.


Please be aware of the risks of askings questions already in this FAQ.

There are several different ways to get in touch with the pydance developers.


The primary email address is the pyddr-discuss mailing list on To subscribe, email You can then send email to to talk about pydance. If you want to see about having pydance at a convention or show, contact Brendan Becker, or show up on the IRC channel.


If you need a bit more real-time help than email offers, pydance has an IRC channel on the Freenode IRC network. Surprisingly, the channel is named #pyddr. The main developers are often in the channel as P2E (Brendan), Pavel (Pavel), piman (Joe), and DShadow (John).