Syndicate Wars Port

Syndicate Wars Port is a port of the 1996 DOS game Syndicate Wars to modern operating systems. In particular, it runs on GNU, Mac OS and Windows, but it should also work on any system supported by the SDL library on the i386 architecture.

To create the port, we disassembled the original DOS executable and replaced most of the DOS-specific parts with platform-independent code, using SDL for input and video display, Vorbis for music and OpenAL for sound.

As part of the port we only provide a modernised executable which will run on contemporary systems. However, we do not provide the game data. To install the Syndicate Wars Port, you will need to have the original data from the Syndicate Wars CD.

The port is not fully complete. It is possible to finish the single player campaigns, but support for networking is missing. There is also no support for joystick control.

The project was in many ways challenging, it took us two attempts and a considerable amount of effort to understand the LE executable format, write a disassembler that would produce re-compilable code, understand the old DOS interfaces, Watcom register calling conventions and recognise its statically-compiled C library functions; we had to analyse the disassembled source code, interface the assembler code with C code by using automatically-generated function wrappers and fight with Apple compiler bugs; all this before we could provide our own C replacements for the DOS-specific assembler parts and finally make it all work (after endless hours of debugging the assembler code with gdb, of course); months of tediousness and uncertainty before we could even see the mission screen pop up (and crash). Lots of pain, lots of work, but in the end, lots of fun and lots of satisfaction!

It should also be noted that we got our inspiration for creating this project from John Jordan's Frontier: First Encounters, which is a similar port of a space sim game.

Screenshots

Video

If you wish to discuss the Syndicate Wars Port or if you have any problems, you may post to the Google group syndicate-wars-port (you don't need to be a member to post).

Installing

To install Syndicate Wars Port, you will need the original Syndicate Wars CD. There were at least two versions released, one multi-lingual and one German. The multi-lingual will definitely work, but we did not try the German version. The steps you need to take vary depending on your operating system. If you're installing on GNU or UNIX, you will have to compile from source. There is support for creating Mac OS X bundles, and there is an installer for Windows.

To install Syndicate Wars Port on GNU or UNIX, you will need the following:

Once you've made sure you have the above, proceed with the following steps:

download and unpack the source tarball; go into the newly-created directory do ./configure && make && make install insert the Syndicate Wars CD and make sure it is mounted (e.g. in /media/cdrom ) do util/install -f SOURCE -t TARGET -l LANG , where SOURCE is the game CD path, like /media/cdrom ,

is the game CD path, like , TARGET is the destination path, in this case /usr/local/share/swars ,

is the destination path, in this case , LANG is the installation language, and can be one of: eng fre ita spa swe .

That's it. Easy, wasn't it?

Mac OS X

Mac OS X is at its core a UNIX system. To install the Syndicate Wars Port it is enough to follow the instructions for GNU or UNIX.

The GCC compiler for Mac OS X comes as part of XCode, which you can get from Apple's web site. You can also make your life a lot easier by using Fink or MacPorts to install the required packages for you, instead of having to download and compile them manually (we used MacPorts).

If you have Mac OS 10.6 (“Snow Leopard”) or newer, you will need to make sure that your libraries contain code for the i386 architecture. In MacPorts this is achieved by using the +universal variant (e.g. port -vu install libsdl +universal ). Also, when you compile Syndicate Wars, you will need to pass CFLAGS="-arch i386" to configure , like so: ./configure CFLAGS="-arch i386" .

Making an application bundle

Instead of installing the game into the UNIX directory structure, you may want to build an application bundle, which you can drag-and-drop into your Applications directory.

You can do this by following these instructions:

run ./configure --with-data-path="Syndicate Wars.app/Contents/Resources" CFLAGS="-arch i386" , then make after the code is compiled, install the data, as explained in the GNU or UNIX section, to any directory, say ./data (in case you wonder, the CD drive should be mounted under /Volumes/SYN WARS QA 9.0 ) finally, run util/mkbundle ./data (replacing ./data with the directory you installed the data to); this will produce an application bundle named Syndicate Wars.app in the current directory if you want there to be a pretty icon for the bundle, copy icons/swars.icns to Syndicate Wars.app/Contents/Resources

Windows

There are two ways to install Syndicate Wars Port on Windows - either download the installer, or download the source code and compile it by hand. It is recommended to use the installer!

The installer (see the Download section at the bottom) requires the original Syndicate Wars CD to be present in the CD-ROM driver. It will copy the files from the original Syndicate Wars CD and optionally encode the game music from the CD to ogg files used by this port. The Syndicate Wars CD is not required to play the game, it is used only during the installation process.

To compile the source code you will need the following:

Then, proceed with the following steps:

download and unpack the source tarball; go into the src directory edit Makefile.windows to match your set-up do make -f Makefile.windows copy all the files and directories, except for the Language directory, from the Game directory from the Syndicate Wars CD to the location of your desire, say SWarsLocation. copy all the files, except SOUND.DAT, from the Game\Language\LANGUAGE\ from the Syndicate Wars CD to the SWarsLocation\Data directory, where LANGUAGE stands for the appropriate subdirectory copy the SOUND.DAT file (from the directory stated above) to the SWarsLocation\Sound directory [optional] rip the game CD Audio tracks to track_{1,2,3}.ogg (vorbis) [optional] create a SWarsLocation\music directory and copy the previously encoded ogg files there copy swars.exe to your Game directory launch swars.exe and have fun!

If you have a proper UNIX-like environment, like MSYS, on your system, you can also compile the game using the standard ./configure && make , or cross-compile it for Windows by passing an appropriate --host= argument to configure .

Running

The executable accepts command line arguments, in particular it responds to --help , which explains all of them:

Usage: swars [OPTIONS] Available options: --windowed -w Run in windowed mode --no-stretch -S Don't display 320x200 graphics stretched to 640x480 --help -h Display the help message

Q: Windows installer creates huge wave files during music extracting phase and finally fails to extract any music, why? A: You are probably using an ISO image of the game CD and ISO images do not contain audio tracks. We support the installer only for the original game CDs and have not for ISO images nor virtual CD drives. To solve this problem please use the original game CD with our installer or uncheck the "Game music" component and manually rip game audio tracks to ogg/vorbis afterwards (see step 7 and 8 in the Windows compilation guide above). Q: Game crashes while trying to start a multiplayer game, why? A: The network support is one of a few things missing in the port, so basically you cannot play multiplayer in the current version of swars.

All source code except the code in src/swars.S is licensed under the GNU General Public License, version 3 or any later version. src/swars.S is a modified disassembled version of the original game's main.exe by Bullfrog. The project is distributed without charge and in good faith that it will be useful to those who purchased the original game but cannot play it anymore because they do not have access to an old DOS system. However, should the original copyright holders complain, we will take down the code they have the rights to.

Windows installer: swars-0.3-setup.exe (MD5: b5ce30b6932ab550ddbdb35c664f65e2 ) Source tarball: swars-0.3.tar.bz2

The original Syndicate Wars was developed by Bullfrog (which sadly doesn't exist any more).

The Syndicate Wars Port was created by vexillium, and in particular:

Unavowed — first programmer Gynvael Coldwind — second programmer

Bits of code were also contributed by j00ru, Memek, oshogbo and Blount, and xa made a good-looking icon for the game and styled the port's web site.