-
Content Count
4 -
Joined
-
Last Visited
Content Type
Profiles
Forums
Omnibus
News
Features
Downloads
City Journals
Calendar
Gallery
Everything posted by Alan Doherty
-
Wow, what a great late Christmas present! I've been on/off looking into this for years, thought since Paul's passing that this might remain uncracked. Hopefully opens the door to some sort of OpenTTD-like development, which was my initial aim. Amazing work!
-
This motivated me to do more digging, it looks like some form of run length compression is used, I've attached a project I was using to open the IXF files. With some tweaking of the `Program.cs` and changing to a newer .NET, you'll be able to extract databases entries at will. Each sprite has two entries in the database, one for some kind of metadata and one with the actual sprite data. Sprite "attributes" or something similar is a grouping of many sprites, typically providing 20 sprites. One for each rotation level (1-4) and zoom level (1-5), with support for more frames when the sprite is animated. These sprite attribute entries are text, so much easier to read. They point to the database entries by type, group and instance in hexadecimal. There's building sprites, and effect sprites as well as some other categories. If you have access to a debugger/reverse engineering tools, it looks like the actual decoding of the sprites into graphical data occurs in SIMSPR.dll/SIMSPR.so. If you use the Linux version you'll indeed have very detailed debugging symbols, but running it is quite difficult and I haven't been able to. Debugging the Linux version would be ideal. sc3-redux-master (1).zip
-
I did a lot of looking into this, including getting *some* source code from some of the old dev's (see this post). I thought the difficulty in reading the format was due to some compression, which turned out to be a dead end. My goal was to extract the sprites for fun and some hobby projects. The database format isn't off the shelf as far as I can tell, I remember some suggestion to buy some commercial IBM software. It's part of the EA Rizzo/Gonzo engine which the game uses, references to the muppets are intended. For reverse engineering, the Linux, UK and Unlimited versions all provide some crossover and I remember finding a golden copy that had a lot of debugging symbols included. The databases do contain bitmaps, used by the UI graphics - but the sprites for buildings and such are spread across multiple "entries" in the database. One containing metadata possibly, another the actual rendering data. Some very old developer blogs talk about how the engine started as 3D, and was moved to 2D after a certain amount of development had already taken place. My theory was that the sprites weren't just being loaded, they were being rendered - possibly by combining smaller sprites together. Unfortunately the "block placeholder" sprite you see before the sprites pop in might just be because the engine reads sprite entries as needed, rather than because it's needing to render them to a flat graphic on demand. I also found some archaic FTP server from EA, which talked about the file formats for Sims Online/something similar. The database was either similar or the same codebase.
-
The BLSMM Thread [now with DLL Loading!]
Alan Doherty replied to simmaster07's topic in SC4 Modding - Open Discussion
I know that this article is incredibly old, but I was doing some work on reverse engineering Sim City 3000 a while back and Paul kindly sent over some files from the Rizzo framework. Attaching them for archiving purposes, might give more insight into anybody still working on this or looking through here in the future. IGZCompression.h RZFastCompression.h RZFastCompression.cpp
