Syndicate is, alongside Quake, one of my all-time videogame jewels, not only because the gameplay was quite innovative, but because the Cyberpunk setting, visuals and sound were amazing (and still mostly are).
As now I can potentially do more than just play it, I recalled there was a website (the Freesynd project) that had documented some of the file formats, and decided to spend some time of a vacation at least beginning to build a map viewer for the game.
My initial intention is to fully display maps, including sprites, probably using something like Phaser for some smooth rendering (and so that I get to learn it too). If I were to define milestones, they would be the following: 1. Extract tiles 2. Render map tiles 3. Extract sprites 4. Render map sprites 5. Render map using Phaser
As of today, I have achieved the first two milestones (and began preparing for the third one).
The project is available at my Github: https://github.com/Kartones/syndicate-map-viewer.
Extracting tiles
The first step was the longest because it also meant creating some foundations for the future, but at least thanks to a tool I found ("Bullfrog games RNC Utilities" by Jon Skeet & Tomasz Lis), I didn't had to implement any Run-Length Encoding (RLE) logic. After some fights with outdated documentation and a refresh on little-endianness and bit masks, I was able to extract all the tiles with all the game palettes (in-game missions use only 16 colors, but chosen from 5 different palettes):
Rendering maps
Having the tiles, rendering a map sounded simple... The map format itself is quite easy, just a 2-dimensional array having a stack of tiles at each coordinate. What was more fun was rendering the tiles according to the isometric projection that the game uses. All in all, I built a map exporter that saves a full-resolution PNG file (~20MB per map) of each map it finds in the data
folder, with each palette
file also found at the same folder.
A sample:
Conclusion
Although not having sprites means that scenarios are missing doors and decorations (traffic lights, neon signs, video walls, etc.) apart from the obvious pedestrians and vehicles, the maps already look quite cool.
In a few maps there seems to be some unused areas, maybe there wasn't enough time to test them and were left out? I also have noticed some curious tiling patterns under what acts as main ground level. I wonder if they have some special meaning for the AI, or if they are what the minimap draws, or maybe they simply were initial guides for the level designers and where left there. That's why having a GUI to see the maps and potentially toggling on-off certain layers of tiles would be so nice...
Now on to reading, extracting and rendering sprites!