Reviews & Opinions
Independent and trusted. Read before buy Games PC Syndicate Wars!

Games PC Syndicate Wars


Bookmark
Games PC Syndicate Wars

Bookmark and Share

 

Games PC Syndicate WarsSyndicate Wars [PC Game]

Developed by Bullfrog Productions - Bullfrog Productions (1996) - Action Strategy - Rated Teen

This sequel to Syndicate expands the original game's world and offers a variety of new features and strategies. Multiplayer action, up to eight players, is supported over LAN. In Syndicate Wars, you can play as either side of the conflict: the EuroCorp Syndicate or the Church of the New Epoch. If you choose EuroCorp, you become head of Agent Team MU with many resources at your command such as eight cybernetically enhanced agents, four Uzi sub-machine guns, 50,000 EuroCorp credits, one LIMBO-... Read more

Details
Platform: PC
Developer: Bullfrog Productions
Publisher: Bullfrog Productions
Release Date: 1996
Controls: Joystick/Gamepad, Keyboard, Mouse
UPC: 014633076820
[ Report abuse or wrong photo | Share your Games PC Syndicate Wars photo ]

 

 

Manual

Preview of first few manual pages (at low quality). Check before download. Click to enlarge.
Manual - 1 page  Manual - 2 page  Manual - 3 page 

Download (English)
Games PC Syndicate Wars, size: 11.8 MB
Related manuals
Games PC Syndicate Wars Quick Reference Card

 

Games PC Syndicate Wars

 

 

Video review

Syndicate Wars PC, Hidden game in London mission

 

User reviews and opinions

<== Click here to post a new opinion, comment, review, etc.

Comments to date: 1. Page 1 of 1. Average Rating:
Ted Hopp 3:06am on Tuesday, April 20th, 2010 
Awesome Classic i had to faff about with dosbox for vista to get it working from the cd but luckily bulfrogs swars website have a step by step guide t... One of the best action strategy games I have ever played One of the best action strategy games I have ever played.

Comments posted on www.ps2netdrivers.net are solely the views and opinions of the people posting them and do not necessarily reflect the views or opinions of us.

 

Documents

doc0

How to port a DOS game to modern systems

Authors

Unavowed Gynvael Coldwind
Additional help / code / art:
j00ru, MeMeK, oshogbo, Blount, xa

What did we do

Port Syndicate Wars DOS modern x86 systems
GNU/Linux, Windows, Mac OS X others with SDL/OpenAL support

no source code

About Syndicate Wars
DOS 3D tactical squad action game by Bullfrog sequel to Syndicate
For fun and profit Did not work on DOSBox Inspired by the John Jordan's Frontier: First Encounters (JJFFE) project

How we did it

Using recompilation techniques:
1. Disassemble recompilable form 2. Find & replace DOS-specific parts with portable C code, using free software portable libraries 3. Compile native executable

Disassembling

Executable type: 32-bit Linear Executable (LE) with a DOS extender (dos4gw) Compiled with the WATCOM C/C++ compiler
$ strings main.exe | grep WATCOM vWATCOM C/C++32 Run-Time system. (c) Copyright by WATCOM International Corp. 1988-1995. All rights reserved.
No applicable disassembler We created our own: swdisasm

Disassembling - LE

16-bit loader (that called dos4gw.exe) 32-bit application code (loaded by dos4gw.exe) Sections (called objects) Relocations

ledisasm swdisasm

all static addressing labels code and data separation compilable output

Three attempts:

ledisasm v1 (C) tracing ledisasm (Python) swdisasm (C++)

ledisasm v1:

ndisasm engine multiple linear passes
detecting functions detecting padding detecting vtables (?)

output: nasm

ledisasm v1 problems:
mixed consts/valid addresses alignment problems didn't detect all labels reasons:
linear passes insufficient use of relocs

swdisasm:

tracing disassembler prototype in Python (slow) using binutils instead of ndisasm region map
1 region per section at start, subdivided into smaller regions with assigned types (code/data/vtable)

label list

how does it work:
has a trace address queue add OEP to the queue trace through the queue until empty
adds new addresses to the queue while tracing subdivides regions
trace through the reloc targets add labels for data relocs

swdisasm problems:

padding is ignored data arrays in code sections are lost a few unusual cases in the source executable workaround: assign 14 regions manually

swdisasm summary:

~2 seconds to disassemble a 1.7MB exec
$ time./swdisasm main.exe > swars.S Tracing code directly accessible from the entry point. Tracing text relocs for vtables. Warning: Reloc pointing to unmapped memory at 0x140096. Tracing remaining relocs for functions and data. 0 guess(es) to investigate. Region count: 3954 real 0m1.755s user 0m1.716s sys 0m0.024s
What's left to recompile?
add underscores on OSX/W32
#ifdef NEED_UNDERSCORE # define TRANSFORM_SYMBOLS # define EXPORT_SYMBOL(sym) _ ## sym #endif

call swars main from C

// Call game main asm volatile ("call asm_main\n" : "=a" (retval) : "a" (argc), "d" (argv));

it works!!!

(well, actually it just compiles/links)

What next?

Now the game would execute and immediately crash Next goal:
finding/replacing asm code with C code/calls to libc interrupts (int $0xNN, int386(), setvect()), port accesses (in, out instructions) DPMI / dos4gw API statically-linked libc functions

Things to look for:

Manually look for functions:
Find a function using interrupts Easy picks: file operations Compare to Open WATCOM source Look at nearby code for other likely libc functions Time consuming! Did not finish (got 40% of used functions)
Received a.map of libc in main.exe from an IDA user (thank you :)

Replacing code: asm C

Incompatible calling conventions x86 cdecl: arguments pushed on stack watcall: passing in registers:

eax, edx, ebx, ecx, rest pushed on stack but cdecl for vararg functions
Different registers preserved

mkwrappers

mkwrappers: asm C ABI wrapper generation in python input: configuration file, parameters

e.g. wrappers_libc.conf

# name rename rmdir setbuf sprintf srand sscanf type args w ss w s w pp v psv w x v ssv
configuration file syntax
# # # # # # # # # # # # # # type is one of: w - watcom: args passed in eax, edx, ebx, ecx c - cdecl v vararg args is a sequence of zero or more of: i int x - int (displayed in hex) p - void * (general pointer) s - char * c char v -. l - va_list

Output: wrappers in asm:

.global ac_rename ac_rename: /* w ss */ push %ecx push %edx push %edx push %eax call _rename add $0x8,%esp pop %edx pop %ecx ret
Output: wrappers in asm (debug):
.global ac_rename ac_rename: /* w ss */ push %ecx push %edx push %edx push %eax push %edx push %eax push $0f call _printf add $0xc, %esp call _rename add $0x8,%esp pop %edx pop %ecx ret.data 0:.string "rename (\"%s\", \"%s\")\n".text
Output: wrappers in asm (vararg):
.global ac_printf ac_printf: /* v sv */ push %ebp mov %esp,%ebp push push lea push push call add %ecx %edx 0xc(%ebp),%eax %eax 0x8(%ebp) _vprintf $0x8,%esp <------------
pop %edx pop %ecx leave ret
Function renames (strcasecmp vs stricmp) Additional parameters:
Underscores in symbols Call stack alignment

Replacing libc calls

We now had mkwrappers and the libc symbol map We made substitutions: s/_printf/ac_printf/g

Game started working!

(as in: displaying debug output before crashing hard)
Approach to replacing game code
Having found DOS-specific functions, we:
Identified purpose using DPMI spec/Ralf Brown's interrupt list Noted what data they touch Looked for other functions touching it Manually translated functions into C Got an understanding of how a subsystem works Wrote replacements
After finding interesting functions:
Replacing unportable code
The aim of replaced functions:
Communication with game by reading/writing variables according to some protocol In a portable manner Call free software portable libraries for video, audio, keyboard and mouse input

Things replaced

Low level DOS/hardware functions Video code Audio Mouse and keyboard input Event loops

Low level DOS/hardware

Path handling
Case-insensitive file names on case-sensitive file systems Support for per-user profiles Date and time (gettime/getdate), file handling (sopen, setmode) 8254 Programmable Interrupt Timer (PIT) used in intro playback

Timing

Game uses 3D software rendering Originally implemented using VESA 8-bit palette mode Needed to set video mode and provide a framebuffer Reimplemented with SDL

Also SDL-based replacements Keyboard
Keyboard controller interrupt handler Needed to fill key-event ring buffer and set key state table Talking with 8041/8042 Mouse interrupt handler (with Mickeys) Set location, motion and button state variables according to a locking protocol
Originally statically-linked Miles Sound System library Pluggable drivers Analysed top-down, not bottom-up
Found getenv(AIL_DEBUG) which controlled debug output Found newer headers for this library Used the two to identify functions and data structures
Originally samples polled by sound card interrupts Reimplemented using OpenAL CDDA music Ogg/Vorbis with libvorbis, needs to be ripped and encoded

Event loops

riginally sound/input updates triggered asynchronously no longer an option Needed to periodically call game_update() to flip frames / poll input / push audio 4 main loops in the game, depending on mode:
intro, menu gui, mission display, paused mission gui
Easy to find: game would freeze!

OS X issues

16-byte call stack alignment Ancient version of GNU as in XCode
No support for.global,.string,.fill, C-style escapes and instruction syntax differences Bug which miscalculated loop* instruction target relative addresses Add stack alignment to mkwrappers asfilter script in python implementing missing features and replacing loops with sub/jmp

Workaround:

Success

Release

Wrote installers:
bash script with cdparanoia for the UNIX-like Nullsoft with AKRIP for Windows (by j00ru) bash script for making Mac OS bundles
Port released 5 years since inception Available at http://swars.vexillium.org/

Post-release

Bug reports:
Missing bounds checking on paths, overflow after 100 bytes Network multiplayer support Joystick/game controller support

Things left to do:

Conclusion

Final code size:

asm: 380 kLOC portable C: 2.5 kLOC (of which a few months of real work)
Time to completion: 5 years
Countless nights spent debugging A cool working game!

Questions ? Contact

http://swars.vexillium.org http://unavowed.vexillium.org http://gynvael.coldwind.pl http://vexillium.org

 

Technical specifications

Full description

This sequel to Syndicate expands the original game's world and offers a variety of new features and strategies. Multiplayer action, up to eight players, is supported over LAN. In Syndicate Wars, you can play as either side of the conflict: the EuroCorp Syndicate or the Church of the New Epoch. If you choose EuroCorp, you become head of Agent Team MU with many resources at your command such as eight cybernetically enhanced agents, four Uzi sub-machine guns, 50,000 EuroCorp credits, one LIMBO-class cryogenics facility, one HELICON-level research facility and one Croesus-class executive airship. And should you fail in your mission, you'll be expected to auto euthanize yourself immediately.

 

Tags

Barracuda Gigaset E360 L84950 All-IN-ONE BV9965T Avsf 109 7303 F Easyshare C533 IC-24AT Review Fishfinder 1600 PRO WF-B1062 Aspire 3690 VRX746VD Valve MX46LSV 4100 MFP DVD-909 Photosmart M23 Thinkpad T21 Flash VRD-P1 71-48 VI310XE1 VGF-AP1L FAX-B840 2402CF CT-1436 F CY-VHD9401N V HS JM81-1 INT2700 Kd-dv4200 KV-32FX65U SCX-4720FN LSP2 1000 VGN-TX650P Concert Navi Moov M300 L60840 FW-C330-21M RUE-4167 USR3453B 1050E Scan O BOX C-3040 Zoom SF1 N 60PG7000 Rc 8 Breast Pump BCE1197 Force Zans710 Strd390 Dppa-BT1 XR-C5600X Xr-10x S VD-4220 Telescope 73A 1244-4IU KLR650 Yamaha D24 VR668 1500 Mkii NW-S705F NAD-S100 DF45 30SS Ultra Behringer EX1 Combo-9000 Dslr-A350 Green DK9923P PSR-6700 LA40B750 Explorer 1 Soleil Gpsmap 695 Seiko 6R20 X-300 Model 70 RT22dass KDL-40S3000 32LH3000 RZ 1700 RS253basb SA-970 Joybook 8100 SV-200 WFE0512K CQ-VD7005U TH-42PX600 Veriton S661 NAD T517 81-30351 HR-S5800E Advantage 85 37PFL5603H Alesis AI-1 MX860

 

manuel d'instructions, Guide de l'utilisateur | Manual de instrucciones, Instrucciones de uso | Bedienungsanleitung, Bedienungsanleitung | Manual de Instruções, guia do usuário | инструкция | návod na použitie, Užívateľská príručka, návod k použití | bruksanvisningen | instrukcja, podręcznik użytkownika | kullanım kılavuzu, Kullanım | kézikönyv, használati útmutató | manuale di istruzioni, istruzioni d'uso | handleiding, gebruikershandleiding

 

Sitemap

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101