Cross platform ggpo gui client for windows, mac osx and linux


major props to pof for reverse engineering the protocol!

Fighter's History Dynamite thread

version 0.0.3 alpha

per request from furntree this version has support for the Unsupported Games game room on ggpo.

Support a database of ggpo unsupported game save states in the Unsupported Games room
Keyboard shortcuts for resizing splitter
Embedded command line interface as chat commands

Type /help to see a list of commands available

/away - away from keyboard
/back - become available to play
/accept [name] - accept incoming challenge
/decline [name] - decline incoming challenge
/challenge [name] - challenge player
/cancel - cancel outgoing challenge
/watch [name] - spectate a game
/ignore [name] - ignore a player
/unignore [name] - unignore a player
/motd - clear screen and show message of the day
/help - display help menu

fixes send / receive challenge in 3s and kof rooms
disable login button while waiting for response from


The unsupported state server/switching feature is great!


I’m really bad with this but credits go to furntree and hanasu for the original idea and providing the savestates

Please help out submitting the missing game’s savestate by contacting them at github

All you have to do is load up the game, get to the title screen and save a state.
PM/Email furntree/hanasu or submit a pull request to their repo


It’s really nice don’t have to worry about flash wasting resources.

Only thing really missing is adding Input delay to make the matches smoother.
Features i can think of are custom theme and automatically decline a challenge if the ping is too high.
I already gave furntree my old savestate for Breakers Revenge Training.


POF doesn’t know about how to change the input delay, I don’t think the input delay option is one of the client-server ops.

It’s probably a undocumented option argument to pass to ggpofba.exe.

Couldn’t get a response from Ponder either, but if you know I can add a setting for that easily.

For custom styles, everyone is welcome to submit additions.

We can load external qss files but if resources (checkbox png, etc) are needed (mostly required for darker themes)
they will need to be specified in absolute paths and a bit PITA.
If it’s bundled those can be loaded from resources (qrc).


Took a quick look at the fba source. Only thing that looks to be dealing with frames for the command line is “quark:synctest”.
I only looked in fba_ggpo.cpp

sscanf(connect, "quark:synctest,%[^,],%d", game, &frames);


So furntree found this in ggpo\config\ggpofba.ini

// — ggpo settings ---------------------------------------------------------
nLatencySmoothing 1

I grep the fba source code I don’t see they read this from ini at all.

And when you change the smoothing in the official client, they don’t modify the ini but instead saved it in adobe air local db

C:\Documents and Settings\USERNAME\Application Data\com.doubleperfect.ggpo\Local Store\SharedObjects\ggpo.swf\ggpo.sol


So it seems like it might be a client-server op after all. Probably an wireshark trace while using the official client, change that setting and start a game will help.


#Version 0.04

  • Unsupported game room - Add rom prefix in chat
  • More themes and Custom Qt Stylesheet

Sample stylesheets

mame ui
dark orange

QT stylesheet reference



  • fixes error when someone who challenged you left the room

You can now load external stylesheet.
The mame ui has some cool themes but they only skin the widgets that they used. So QTableView is not styled.
If anyone has a completed one feel free to send it my way and I can include them in the build.

#version 0.05
auto check for savestate changes when you join unsupported game channel


First time using Github, just submitted a pull request for 6 new savestates.


OK with the help of netmon and Process Explorer, the mystery is solved.

This is how the official client invokes ggpofba with a smoothing of 4

ggpofba.exe quark:served,ssf2t,challenge-06366-1395521015.66,7000,4 -w

I think the current released ggpo source code is not current

QuarkInit(TCHAR *connect) {
if (strncmp(connect, “quark:served”, strlen(“quark:served”)) == 0) {
sscanf(connect, “quark:served,%[^,],%[^,],%d”, game, match, &port);
ggpo = ggpo_client_connect(&cb, game, match, port);

From the [MEASURING GGPOFBA MICRO STUTTER] thread, to port ggpo to the latest fba we’ll need an update source tarball from Ponder.

I think I have all the things I personally want checked in now. If you guys have any bug reports feel free to contact me.

#Version 0.06

  • Support recall chat history with up and down arrow keys
  • Fix emoticon button size issue

#Version 0.07

  • Add smooth networking settings like in official client
  • Add a custom scheme url for accept decline challenge.
  • Support custom emoticons
  • Use green color for links

#Version 0.08

  • Option to show country flags in chat
  • Allow double click on player names to challenge/cancel/spectate
  • Show Ping and Country for incoming challenge
  • Remove challenge/decline table column

#Version 0.09

  • display game title etc info when selecting unsupported game savestates
  • support cli command /incoming to list all challengers


Would it be possible to add timestamps to the chat?


Yeah it was on my todo but I deleted it somehow.
Added in version 0.1.1

  • option to show timestamp in chat

Version 0.12

  • support filter when picking savestates


I mentioned this on GGPO’s forums, but no chance of a GTK version?

Still, awesome work. :tup:


wait wait wait, so I can finally play GGPO on my macbook? and this is xplatform, so I can play a buddy on windows?


is there a possibility to add a challenge filter by ping/country, ie anyone over 150 ping can’t challenge you or only people from US/NA can challenge


I got error message ‘‘Couldn’t initialize DirectDraw7/ Direct3D7 Enhanced video output module’’. How to install ? Im using wine on macosx.