Project Structure (original) (raw)

FreeSO is a very complicated project with many different project "groups", and different projects within them. This page will go through all the projects in FreeSO, what they are used for and any other notable information about them.

It's recommended that you start working on FreeSO in one specific area, rather than overwhelming yourself by looking at the whole thing.

FreeSO Client

Projects relating directly to the FreeSO Client application, or the Volcanic IDE. .

SimAntics

Projects used to run the simulation itself. Properties in The Sims (1/Online) run on top of a virtual machine using a scripting language called SimAntics, which drives object and sim behaviours ingame.

Lot Rendering

FSO.LotView is used to render properties ingame. It supports 2D (isometric), 2D Hybrid (rotatable isometric) and 3D rendering modes, and eventually will include the possibility to mix and match 3D objects in 2D mode.

Typically each VM has a world. Control of displaying this world is done with the WorldState. The world is split into 3 parts, WorldArchitecture (walls/floors), WorldEntities (avatars/dynamic objects) and WorldStatic (static objects). WorldStatic is only used in 2D mode, and is a way to avoid drawing sprites that do not change frequently every frame by drawing them to a static buffer that isn't updated often.

Content Service

The content service provides access to all of The Sims (1/online) files and file formats, in a way that the game can easily use and understand.

Audio

Character Rendering

Projects used to draw characters ingame. Nowadays, all of the skinning is done on the GPU using vertex shaders, though you might find some remnants of CPU skinning in there.

UI

A good place to start if you want to add new UI elements to FreeSO.

FSOFacadeWorker

A utility to render 3D lot thumbnails for a FreeSO server. Interacts with its API (given an admin login) to retrieve and load lots that need new 3D thumbnails, then generate and upload them. This project requires graphics acceleration to run, and is likely to run out of memory after a certain number of properties processed due to leaks in the content service, GPU resource mangement and a strict 32 bit memory limit.

For a quick way to view the produced FSOF files, check out https://riperiperi.github.io/FSOFLoader/ .

Server

The meaty part. A lot of this has been split into separate projects so that they can be included in the client without including more ridiculous things like the lot containers.

Client-Server shared projects

Projects used to drive communication between the client and server.

Defunct

External Projects (with changes)

Fonts

Fonts in FreeSO used to be rendered using Monogame's internal system, but were switched to a custom system for sharper rendering at variable size, and more control over the fonts themselves (to support fallback fonts, and potentially builtin emojis).