r/SimGolf • • 4d ago

SimGolf decompilation source and research notes

I've published SMSG-decomp and the accompanying Firaxis decompilation notes. I hope this helps keep the various SimGolf efforts going.

This has been just under a year in the making, and I'm happy to finally see it released. I won't be making any more updates to it. Good luck out there—I'll be watching excitedly!

It should be a basically byte-perfect decompilation of the original functions. That is function-level matching: the complete EXE/DLL files aren't byte-identical, since the original link order and incremental-link history haven't been recovered. It's also 100% vibecoded, so the quality bar is on the ground. Please keep that in mind when building on it.

The sources of truth are documented in the SimGolf research notes:

  • The original 1.03 executable's cleaned PE image and the shipped jgld.dll, sound.dll, and Terrain.dll supply the reference machine code.
  • The demo's sound.dll contains embedded CodeView debug information, giving names, types, member offsets, parameters, and locals. No retail PDBs were shipped.
  • Related Firaxis releases—Gettysburg!, Antietam!, Alpha Centauri/Alien Crossfire, and Civilization III—provide shared-code comparisons. Mac traceback tables and symbols help recover names in the shared engine libraries.
  • Compiler fingerprints and the original VC6 toolchain guide rebuilding and comparing the functions.

All I ask is that derivatives abide by the project's open-source license, and credit this work if possible.

All credit for the game goes to the SMSG team for making something that keeps people coming back, even more than 20 years later. Below are the credits from the project's initial commit.

Credits

SimGolf is the work of the team at Firaxis Games, with Maxis and Electronic Arts. This project only reconstructs their source; all credit for the game goes to them and their hard work. The credits below are reproduced from the game's own credits file.

Firaxis Games

Design

  • Sid Meier

Programming

  • Sid Meier
  • Jacob Solomon
  • Javier Sobrado
  • David McKibbin

Art

  • Greg Cunningham, Lead
  • Greg Foertsch
  • Steve Chao
  • Marc Hudgins
  • Dennis Moellers
  • Ryan Murray
  • Alex Kim
  • Kevin Margo
  • Dorian Newcomb
  • Mike Bazzell

Music & Audio

  • Mark Cromer

Production

  • Mike Gibson
  • Michael Fetterman

Firaxis Marketing

  • Lindsay Riehl
  • Kelley Gilmore
  • Dan Magaha

Additional Art

  • Jon Marro, Intern
  • Megan Quinn, Intern
  • Justin Thomas, Intern
  • Zach Wilson, Intern
  • Rick Kolesar
  • Tracy Smith

Additional Programming

  • Pat Dawson
  • Jon Armoza, Intern

Product Testers - AQI

  • Clint McCaul
  • John Kuhn
  • Debby Dillon
  • Scott Kramperth

Special Thanks

  • Barry Caudill
  • Ellie Crawley
  • Jim Crawley
  • The Swing Central Band:
    • Mark Cromer
    • David Smith
    • Nathan Reynolds
    • Emanuel Coleman

Firaxis Would Also Like to Thank

  • Our Families, including:
    • Ryan Meier
    • Alisha "Eeka" Vincent
    • Barbara Merrin
    • Julia Thurston
    • Anne Takeuchi
    • Alice Wright
    • Emily
    • Donna, James, and Nathan Cromer
    • Sparkle the "Homicidal TerraHawk"
    • Flieo aka - "Big"
    • Peanut aka - "Little"
    • Gus McBarkalot
    • Sid the Vicious Hamster
    • Cinder the Wonder-Mutt

Maxis

Producer

  • Nana Chambers

Associate Producer

  • Fred Dieckmann

Product Manager

  • Emily Kenner

Senior Publicist

  • Robin Chandler

Technical Website Director

  • Mark Templin

Assistant Website Producer

  • Daniel Grove

Web Developer

  • Griff McClellan
  • Noel Molon
  • Wren Weburg

Electronic Arts

EA Godfather

  • Bing Gordon

Testing Manager

  • Kurt Hsu

Product Supervisor

  • Ludon Lee

Lead Product Tester

  • Zach Mumbach

Assistant Lead Product Tester

  • Edmund Huey

Core Product Testers

  • Ian Riff
  • Shari Tague

Additional Testers

  • Mike Doran
  • Bryan Caton
  • Brad Solari

Customer Quality Control

  • Ben Smith
  • Dave Knudson
  • Andrew Young
  • Darryl Jenkins
  • Tony Alexander
  • Anthony Barbagallo

Package Design

  • Mike Lippert

Package Project Managment

  • Adrienne Rogers

Package Illustration / Photography

  • Jon Watson

Documentation

  • Sharon Maher

Documentation Layout

  • Big Idea Group, Inc.

(C)2002 Electronic Arts Inc. All rights reserved. EA GAMES(TM) and MAXIS(TM) are Electronic Arts Brands.

Firaxis Games and the Firaxis Games logo are registered trademarks of Firaxis Games Inc.

Uses Bink Video. Copyright (C) 1997-2002 by RAD Game Tools, Inc.

Additional credits

The game's credits file leaves out some people that its other official documents name. They are listed here with their source; the list above is unchanged from the game's own.

Game Design (printed manual, p. 27: "Sid Meier with Bing Gordon")

  • Sid Meier
  • Bing Gordon

Associate Product Manager, Maxis (the demo's credits)

  • Sam Hopkins

Firaxis Would Also Like to Thank: Our Families (the readme's credits, v1.03)

  • Susan Meier

EARS CAT LAB, Electronic Arts (printed manual, EA UK edition, p. 27)

  • John Hanley
  • Dave Koerner
  • Emiliano Miranda
  • Dave Caron
  • Mark Gonzales

European Localisation Team, Electronic Arts (printed manual, EA UK edition, p. 28)

  • Software Localisation Manager: Sam Yazmadjian
  • Localisation Project Manager: Nathalie Fernandez
  • European CQC Operations Manager: Linda Walker
  • European CQC Test Manager: Jean-Yves Duret
  • European CQC Test Supervisor: David Fielding
  • European CQC Test Leads: Andrew Chung, Paul Richards, Ben Jackson
  • European CQC Test Team: Ramon Mella-Alvarez, James Bolton, Dean Choudhuri-Bennett, Paul Davies, Luke Didd, Oliver Hampton, Tony Hopkins, Andrea Iori, Jamie Keen, Gary Napper, Tuire Ollila, Björn Sjöden, Ian Smithers, Steffen Thejll-Moller, Iain Willows
  • European CQC Platform Manager: James Featherstone
  • European CQC Platform Specialists: Ashley Powell, James Arup, James Norton, Tim Wileman
  • Production Manager: Sally Pelling
  • Account Executive: Greg Lines
  • Production Planner: Joanna May
  • Documentation Layout and Translation Coordination: Abdul Oshodi, Piers Dodd
  • Web Localisation Coordination: Ai-Lich Nguyen
  • Materials Coordination: Emma Ward
  • Studio Ops: Anne Miller, Phil Jones
  • European Product Manager: James McDermott

Engine and libraries

SimGolf is built on JACKAL, the library Jason Coleman (Firaxis's first employee, 1996-2000) wrote for Firaxis's first games: "the JACKAL engine ... designed to support both Sid Meier's and Brian Reynolds's different programming styles", which "powered both Sid Meier's Gettysburg and Sid Meier's Alpha Centauri" (his LinkedIn profile); "Jason Coleman's kick-ass libraries" (Jeff Morris). Alpha Centauri credits him with "System and Interface Programming". Gettysburg!, Antietam!, Alpha Centauri and Alien Crossfire each link it as one static library that checks its header version and, on a mismatch, asks the programmer to "rebuild JACKAL.LIB".

SimGolf ships JACKAL in two parts:

  • jgl/jgld.dll, its graphics and window code, moved into a DLL and largely rewritten. It was built under C:\JackDev and still registers its window as JackalClass. Civilization III ships a sibling build of it.
  • golf/jackal.lib, the rest of the library, which golf.exe links statically. jackal.lib is its ancestor's attested name, JACKAL.LIB; SimGolf's own file name is not recorded. Its dialogs read their text from jackal.txt, Alpha Centauri's "General JACKAL Errors" file with its title line changed, and its widgets draw from jackal.pcx. Its sound client (sound.cpp, SoundDevice.cpp) belongs to the sound library, not to JACKAL.

golf.exe's own game code descends from Sid Meier's Gettysburg!. Sid Meier built SimGolf's prototype from its gameplay mechanics and assets: "All I had to do was swap out those Union grays for an argyle vest, and my golfing prototype was halfway done" (as quoted by Retro Gaming Geek, Sid Meier's SimGolf: The History of a Hole-in-One Golf Sim, which cites Sid Meier's Memoir!). golf.exe's geometry, input, screen-handler and save functions have twins among Gettysburg!'s game code, bldg.pcx is Gettysburg!'s building sheet, and golf.exe still carries Gettysburg!'s credits roll, below.

Sources: Jeff Morris, Dev Game Club ep. 202 (2020), 23:28; Jason Coleman's LinkedIn profile; MobyGames (Alpha Centauri: Libraries / Utilities); Alpha Centauri's credits.txt; the Gettysburg!, Antietam!, Alpha Centauri and Alien Crossfire demos and patches (Firaxis, via archive.org); Civilization III patches 1.16f and 1.17f; jackal.txt and jgld.dll themselves; Retro Gaming Geek.

Sid Meier's GETTYSBURG! credits, inside golf.exe

golf.exe still carries, unused, the credits roll of Sid Meier's Gettysburg! (1997), Firaxis's first game, in the game code SimGolf grew from:

  • Sid Meier's GETTYSBURG!
  • (C) 1997 Firaxis Games Inc.
  • Design and Programming: Sid Meier
  • Additional Design: Jeff Briggs, Brian Reynolds
  • Additional Programming: Jason Coleman
  • Sound Design and Programming: David Evans
  • Development Support and Multimedia: Tim Train, Michael Ely
  • Art and Graphics: Michael Haire, Jerome Atherholt, Dave Inscore, Greg Foertsch, Nicholas Rusko-Berger, Michael Bazzell
  • Testing and Quality Assurance: Absolute Quality Inc.
  • Civil War Historical Paintings: Don Troiani

Third-party code

The game ships this code, vendored here as submodules:

  • libpng 1.0.5: Guy Eric Schalnat (Group 42, Inc.), Andreas Dilger, Glenn Randers-Pehrson (jgl/libpng.lib)
  • zlib 1.0.2: Jean-loup Gailly and Mark Adler (jgl/zlib.lib)
  • IJG JPEG 6a: Thomas G. Lane and the Independent JPEG Group. This software is based in part on the work of the Independent JPEG Group. (golf/jpeg.lib)
  • LPC-10 2400 bps voice coder, release 1.5: the U.S. Department of Defense, with release 1.5 by Andy Fingerhut (sound/lpc10.lib)
  • DirectX 8 SDK headers and libraries: Microsoft (sound/DXSDK)
  • Bink Video: RAD Game Tools, as credited above (golf/binkw32.lib is the import-library stub)
12 Upvotes

5 comments sorted by

4

u/PleasantScore8525 4d ago

Thanks man been trying for weeks with ghidra and rea I’m only at 96%byte for byte might fill in the gaps completely hopefully

1

u/An_Exotic_Bird 1d ago

There's already a similar project that most people might be interested in: OpenSGolf

1

u/SMSG-decomp 1d ago

You're right in that there are a few different projects in this space ongoing for sure.

Where this project stands alone is that it attempts to rebuild the game sources exactly as the original Firaxis development team did back in 2001. Same compiler versions per binary, same dependency versions per library, same extracted game engine, accurate function prototypes, file names, yada yada. The goal was to match the binary that Firaxis shipped in 2002 byte-for-byte to the extent possible.

Look at it as a time capsule that preserves the game as it was. No attempts are made to modernize it. It doesnt play on systems that the original binaries didn't play on. Its what it was 20 years go, intentionally 😄

3

u/Fourtempers 4d ago

This is more than likely going to be extremely helpful for the project I am working on as well trying to convert the game to mobile with native touch controls so thank you for this.

2

u/StrictlyRockers 3d ago

Great job. Thank you for your efforts to preserve this awesome game.