A libretro core for Game & Watch simulators
Clone or download
Latest commit dc0feaf Nov 19, 2018



gw-libretro is a libretro core that runs Game & Watch simulators.

It runs simulators converted from source code for the games available at MADrigal. Each simulator is converted with pas2lua, which was written specifically for this purpose, and uses bstree, which was also specifically written to obfuscate the generated Lua source code as per MADrigal's request.

The converted games are available at libretro's buildbot site. Unpack the zip and read the README.txt for instructions.

The SNES controller, the hand cursor, and the Boxy Bold font used in gw-libretro are released under the CC0.



  • Fixed the first sprite layer being set to 0 instead of 16383.


  • Fixed call to undefined method showmenu.
  • Fixed calculating the center of the screen when zoom is on.


  • Added label position fine tuning to avoid they being on top of each other.


  • Added support for mouse and touch screens.
    • All buttons can be activated with clicks and taps
    • Gameplay buttons can be activated even when the screen is zoomed
    • Added help for hot zones when then screen is zoomed
  • Added iszoomed to system.


  • Fixed a crash while trying to play a sound without associated data, now it errors with a stack trace.


  • Avoided buttons being pressed when the menu or the controller are active.
  • Added ability to pause and resume audio playback.
  • Pause the timers and the audio when the game is not active.


  • Removed the constcast.cpp aberration, the core is now pure C.
  • Added the core version to version.c.templ.
  • Exposed core version to Lua code (helps to add new features and fixes in a backwards compatible way):
    • system.GW_VERSIONSTR, a string containing the full version, i.e. "1.4.0"
    • system.GW_VERSION, a number containing the full version as major << 16 | minor << 8 | patch, i.e. 0x010400
    • system.GW_MAJOR, system.GW_MINOR, and system.GW_PATCH
  • Fixed Galaxy II, Motor Cross, and Tron throwing errors when used with previous versions of the core.


  • Implemented a menu system to avoid weird button mappings. Now only the buttons used to play the game are mapped to the controller, all other buttons are accessed via the Select (cycle options) and Start (perform action) buttons.
  • Added proper credits in the controller help overlay.
  • Fixed sounds not looping in Galaxy II, Motor Cross, and Tron.
  • Fixed the transparency settings of some images. It fixes some artifacts around the buttons and some backgrounds having the wrong color.