Woopsi is a Nintendo DS GUI library for rapidly creating user interfaces for homebrew software. Modelled after the AmigaOS windowing system.

Release notes:

Woopsi 0.99.6 is now available from the Woopsi website:


Other than a few minor enhancements to the Debug class, this release just contains bug fixes.

There are a couple of points to note about this release. First of all, it is built with the latest versions of devKitARM and libnds (r32 and 1.4.8 respectively). Due to changes in the FIFO system, the current version of desmume is not compatible with this release. You’ll either have to wait for the next version of desmume or compile it yourself from the SVN repository before you upgrade your release of devKitARM.

libnds 1.4.8 includes a bug in line 661 of nds/arm9/videoGL.h. See the following link for the fix:


Note that you can still use Woopsi with older versions of devKitARM; you’ll just need to compile the library yourself. This is very simple; just open a command line to the Woopsi/Woopsi/libwoopsi folder, type “make clean” and then type “make”.

Secondly, one of the new features in the Debug class is a vsnprintf() method. This method triggers a GCC warning about va_list mangling changes in GCC 4.4. This is neither a problem in Woopsi or in devKitARM; it’s actually the result of a bizarre decision by the GCC team to include news items as compiler warnings:


Wintermute intended to fix this for devKitARM r27, but this obviously never happened:


The full changelog is below.

– Fixed scrolling problem in top screen.
– Gadget::changeDimensions() no longer leaves gadgets accidentally hidden.
– Division by 0 fixed in Range class when max value == min value.
– Document::stripTopLines() no longer wraps text twice.
– WoopsiString::getCharAt() returns NULL if index is out of valid range.
– Removed “Loading” message from FileListBox.
– Fix to ScrollingListBox scrollbar grip size.
– Support for 1 or 2 of physical displays (helps with SDL ports to other platforms).
– Compiler warning fixes.
– MultiLineTextBox scrolls to follow cursor when text is inserted.
– WoopsiString::encodeCodePoint() numBytes parameter is optional.
– WoopsiString::getCodePoint() numChars parameter is optional.
– WoopsiString::getCodePoint() returns the correct number of chars if the codepoint is invalid.
– Fixed clipping bug in PackedFont1::renderChar() (Lakedaemon).
– Fixed clipping bug in PackedFont16::renderChar() (Lakedaemon).
– TextBox::getPreferredDimensions() allows space for the cursor if visible.
– Fixed null pointer dereference in WoopsiString::getCodePoint.

New Features:
– Added Debug::flipToTopScreen().
– Added Debug::flipToBottomScreen().
– Added Debug::flipScreens().
– Added Debug::raiseToTop().
– Added Debug::lowerToBottom().
– Added Debug::wvsnprintf().
– Built with devKitARM r32/libnds 1.4.8 (manually patched line 661 of nds/arm9/videoGL.h to fix warnings