Star Wars Galactic Battlegrounds is an RTS game (based on the Age of Empires II engine) set in the Star Wars universe.
Unfortunately, I've found my version (the 'Saga' edition containing the expansion) to crash after around ~20 minutes of play, both in single player and multiplayer. This comes down to a null pointer access somewhere in the renderer.
You can fix this by nopping out (replacing with
0x90) 25 bytes at
0x24DC8D. This removes the code for the render instruction that's
causing the problem. I haven't seen any side effects, and the game now runs
pretty well both in windows and under wine. Note that the original executable I
battlegrounds_x1.exe with md5sum
6fc2fcdf1586db6667e996c88e610c64. The patches are also compatible with
version with md5sum
The bytes you're patching should start
8B 47 FD.
Another issue with the original game (and, indeed, all games based on the Age of Empires "Genie" engine) is that sometimes the up and left arrow keys get "stuck", causing the game to keep scrolling up and to the left. This happens espescially often when Alt+Tabbing under wine, though it's known to happen in other circumstances as well.
That issue is caused by the game misinterpreting the results from the windows
GetKeyboardState() function. As the above MSDN link states, it returns
— for each key — a byte whose least significant bit signifies that
the key is "toggled", and whose most significant bit signifies that the key is
pressed. SWGB checks if the key is pressed by checking if the byte has a value
greater than 1. This works when the undefined bits are all zero, but this is
not always the case. We can fix the issue by instead ANDing the byte with
0x80 and checking if the result is nonzero.
To do this with SWGB, we need to patch 9 of the checks to replace a
instruction with an
AND instruction, and the
JBE branch with
JZ. To do this, we need to replace
04 24 01 76 with
64 04 24
80 74. These are found at
With these changes, I've been unable to reproduce the stuck scrolling issue.
Note that this only fixes the in-game keyboard code: things like the tech tree
GetKeyboardState() function independently, and may still suffer
from similar bugs.
Here's an executable with these issues
fixed (and the CD check at
Here is a version which links
WIN32.dll instead of
WINMM.dll to be compatible with the GOG version's
CD audio emulation. If you have the GOG version, you should download this.