To respond to your honest concerns about my absence, the state of affairs for Niotso is fine.
The Sims Online sprite reading is here. This means we can look at any image in the game now. Objects, floors, walls, roofs, catalog thumbnails, menu controls, faces and body textures, the relationship +/- icons and the skilling meter, and recently, the lighting and shadow textures in lightmap.dat.
This extends the fact that we can play any of the game’s sounds and music (WAV, MP3, XA, and UTK files) ingame in Niotso Client and render, and animate, any character models and body accessories.
IFF chunk format support
As of now, FileHandler’s iff library fully supports all of the game’s chunk formats except for those that are involved with the SimAntics VM. Much of this support comes with Propeng’s analysis of all of the chunks in the game and his generous additions to the wiki.
Chunk Documentation Support BCON 100% 100% BHAV 90% 100% BMP_ 100% 100% CATS 100% 100% CST 100% 100% CTSS 100% 100% DGRP 90% 100% FBMP 100% 100% FCNS 100% 100% FWAV 100% 100% GLOB 100% 100% OBJD 10% 0% OBJf 100% 100% Optn 5% 0% PALT 100% 100% Rcon 50% 0% SLOT 0% 0% SPR# 100% 100% SPR2 100% 100% STR# 100% 100% TMPL 100% 100% TPRP 50% 0% TRCN 100% 100% TTAB 75% 0% TTAs 100% 100%
Not only can these chunks can be read; they can be displayed in a web page by iff2html. For a read-only viewer, this has a few benefits over a “proper” GUI. It’s cross-platform, everything can be quickly displayed in tables, you can select and copy both text and images, you can do ctrl+f, and it can all be archived online somewhere if somebody wanted to do that. There is almost no point in coding all of these basic features in a tool or app.
Nearly everything in The Sims Online’s game files but the SimAntics VM, the HIT VM, the city rendering, the texture rendering (yes, grass is rendered), and the EA server (tsomarimba1) configuration can be explored. The remainder of our format research lies in these last tricky subject areas.
That’s not to say that format research is enough to understand how all of these files piece together. That’s actually an interesting puzzle, and thanks to the comments and IFF chunk labels I don’t think it will severely bog us down.
Before hitting any of this stuff, it’s a little more important to set up a primitive lot to supply some visual progress. And I want to clone the user experience leading up to the lot: the log-in screen, create-a-sim tool, and so on, leaving out the city map rendering due to our current lack of understanding of how the game does it.
This involves the following tasks:
- Set up the audio engine to supply contexts for sounds with an upper barrier of say 16 playable sounds at a time, with some reserved for background music and stinger music. Each game tick, the volumes of all sounds are updated, and if a sound has finished fading out, it will be destroyed and have its handle distributed back into the pool.
- Set up the OpenGL windowing system. I cannot stress enough how much of a chore this is for OpenGL ES if we want to support smartphones.
- Set up the UIS parser and start implementing support for all controls; the toughest one is going to be the selectable text box.
- Transition from the login screen to the select-a-sim screen, and fully replicate the create-a-sim tool, with a rendering of the Sim on the left panel. It is known that the create-a-sim tool in The Sims 1 and The Sims Online does not make use of scene lighting (discovered after altering the light files in The Sims 1 and experimenting).
- Read all of the necessary data from the original game installation, rather than in the temporary pre-extracted form.
- Port the frontend to X11 for complete support for Linux. The frontend is very separate from the internals of the game engine, so this should not be an issue. Mac is a different story because it’s hard to set it up in a virtual machine.
- Release Niotso Technical Preview 1, and transition into the Pre-Alpha development phase (yes, right now we are still in Planning).
This is my overall plan for the rest of this development phase.