Skip to content

Instantly share code, notes, and snippets.

@riperiperi
Last active February 14, 2025 03:27
Show Gist options
  • Save riperiperi/78c843b7fc3b11a92e3d5585a7815fee to your computer and use it in GitHub Desktop.
Save riperiperi/78c843b7fc3b11a92e3d5585a7815fee to your computer and use it in GitHub Desktop.
The Sims Legacy Collection Technical Overview

Patches

I've updated the doc to reflect fixes in the following patches:

The Sims Legacy Collection Technical Overview

The Sims is a life simulation game that was written for Windows 9x but later evolved to properly support Windows XP. The years have not been kind... to the game engine, not the game itself. It's still great, it just doesn't really work anymore.

This gist will detail the changes I noticed in The Sims Legacy Collection, a "Windows 10/11 re-release" of The Sims recently published on Steam, the Epic Games store and the EA app. I'll start by giving more context before going into what's changed.

The entire game is played from an isometric viewpoint, with 3D characters interacting with 2D sprites seamlessly. This is done via a neat trick - nearly every sprite has an associated z-buffer sprite, which allows per-pixel depth sorting between objects and characters to seamlessly integrate them into the world.

All sprites also have an alpha channel, which allows them to appear anti-aliased and semi-transparent. This does mean they have to be sorted, which sometimes goes wrong, but gives a pretty clean image.

The game's large sprites are contained within a minimal amount of memory via a combination of run-length encoding and 256 colour palettes. Alpha channels have separate RLE, which is great for large objects where the only alpha pixels are on their edge.

Large objects that take up more than one tile are split up into single tile parts, each taking up one tile. The renderer needs to avoid introducing seams between the single tile parts, or the illusion will be broken.

With that out of the way, let's go over the problems with the original game...

Complete Collection (old)

The Sims can be launched either in 800x600 or 1024x768 resolution from a shortcut, which passes the -r1024x768 flag as an argument to launch in the larger resolution. For anything else, you need to mod the game and UI graphics. You can find information on how to do this alongside other fixes on the PC Gaming Wiki:

https://www.pcgamingwiki.com/wiki/The_Sims

The rendering relies heavily on a mixture of d3d6 and directdraw hacks. It renders characters using d3d6, but the architecture, terrain and objects use software rendering. It tries to avoid redrawing parts of the screen that haven't changed since the last frame using dirty rectangles. The game can render sprites directly from the RLE format with palette lookup, without having to decompress to a raw bitmap. Looks great, but is a bit heavy on the CPU at high resolutions.

Here's a short list of technical problems with this release on modern Windows 10/11:

  • Alt-tabbing in full screen breaks the game in some pretty wild ways.
  • Requires admin rights to read/write save data, as it's placed in the game directory.
  • Unusually slow.

Over the years, there have been issues introduced and fixed by changes to Windows. It's surprisingly OK right now if you don't alt-tab or run Windowed, but earlier versions of Windows 10 didn't work with full screen at all, and people report a variety of issues that I don't personally see to this day.

Comparisons from here on will be done against Complete Collection running using Windows 11 23H2 directdraw with no compatibility layer, with the game at 1080p windowed.

Legacy Collection

For a start, the Steam version of the game now uses Steam DRM, so trying to open the EXE directly just tells Steam to open it instead. It makes attaching with RenderDoc a bit annoying, but if you're fast enough you can inject the process before it creates the Vulkan device.

gibbed has helpfully commented that you can add steam_appid.txt containing the game's appid (3314060) to the game's folder and it won't immediately close on launch. This makes it a lot easier to attach renderdoc and pals.

UserData location

Instead of being located in the install directory, save data is now at %HOME%Saved Games\Electronic Arts\The Sims 25. On first launch, it copies UserData and UserData2 through 8 to this folder. This solves a lot of problems by itself.

The game doesn't support Steam Cloud saves, which is unfortunate. Maybe there are complications around the huge amount of data, or worries about sharing save between devices with mismatching mods/downloads folders. A second downloads folder could also be included in the cloud save, but then it could really be too large. Quotas seem to be able to go pretty high, though.

Also, the game no longer creates or relies on any entries in the Windows Registry. Not sure how I'm going to get Simitone to find it, I guess I'll have to ask Steam nicely.

High resolution support and issues

The game automatically attempts to match your resolution on launch. Well, mostly. See the DPI scaling section for more details. This works similar to patching Ultimate Collection to display at a higher resolution, but some things have not been properly handled.

Subhood UI Issues (FIXED 4th Feb 2025)

When you choose to call transport to a sub-hood like downtown or old town, the game opens a dialog that you can use to choose a destination. You can't normally tell it's a dialog without mods, as it should cover the entire screen. Modding the resolution to be higher causes some unexpected things to happen.

These dialogs have always had visual issues when modding the game to run at higher resolutions, but in this case the problems seem to run deeper. I can't select any of the properties at the bottom right of the neighbourhood - past the 1024x768 point from the top left of my screen. For example: 71 Elm Street, highlighted in the screenshot below.

Here's how all the dialogs fare:

  • Downtown: Graphic stuck top left, selection works fine.
  • Vacation: Graphic stuck top left, selection works fine.
  • Old Town: Graphic stuck top left, can't select all properties...
  • Studio Town: Graphic and selection work fine.
  • Magic Town: Graphic and selection work fine.

In all cases, the current lot is visible behind the selection dialog.

Properly modding Ultimate Collection to 1080p currently avoids all of these issues:

Fix

The latest version of the game fixes these dialogs and draws covers the lot view with a black rectangle: image

Stretched panel backgrounds (FIXED 6th Feb 2025)

A large issue with running The Sims: Complete Collection at higher resolutions was that the panel graphics didn't cover the whole screen, leaving a part of the screen that was never painted and could accumulate a lot of garbage over time.

The legacy collection solution to this problem appears to be to stretch the panel background to cover the whole screen. This causes a few visual issues:

A few UI graphics don't use transparency, and instead contain a copy of the background that's normally behind them. Stretching the background misaligns the gradient between the buttons and the panel. This is probably the most noticable issue in the game.

Some UI graphics assume that the background will be a certain colour to clear a graphic without redrawing the background. The motive decay indicators are a good example of this - the dark blue arrows aren't normally visible.

This should be solved by only scaling the dark blue part of the panel graphic. The left part with the gradient should always be unstretched. Complete Collection mods do this by just duplicating the blue part of the panel graphic to the edge of the expected screen resolution, with the right edge also unstretched.

For comparison, here's how it looks in Complete Collection with a 1080p mod:

Fix

The latest version of the game fixes this issue in all ingame panels. Both the left gradient and rightmost bezel are not scaled, the solid blue section is.

image image image

This was only listed as "The mood level arrows and mood bars had visual artifacts in some cases", but it affects every panel in the game, so I think they're underselling it a bit.

They also fixed a visual issue with the overall mood indicator that was there in the original Complete Collection. See if you can spot it.

DPI scaling and fullscreen toggle

When the game launches, it forces a resolution match with the default display on your system, and selects a target resolution scale depending on it. At 1080p or lower, everything is 1x resolution and should look the same as the original game. At higher resolutions, such as 1440p (2x) or 4K (3x), the game will attempt to scale both ingame and UI graphics to avoid everything being tiny. Here's what it looks like at 4K:

3x

This is done in such a way that 3D elements in the game (sims, roofs) are rendered at your native resolution, and sprites and the UI are scaled up to match.

At 4K DPI, this causes each sprite pixel to be tripled in both axis, with some odd exceptions. It's like playing at 720p, but with much sharper looking sims.

Interestingly, when zooming out with res scale active, the game will prefer to use the near view sprites... for everything except pools. This keeps things sharper when zooming out compared to playing at 720p, though with the 3x scale at 4K, the middle zoom is a 1.5x zoom, which introduces some ugly pixel scaling.

See Point Filtering and Non-Integer scaling section for the full example.

Pressing Alt+Enter cycles between modes:

  • Windowed modes
    • A windowed mode for each available res scale.
      • At 1080p or lower, you'll only have 1x.
      • At 1440p, you'll have 1x and 2x.
      • At 4K, you'll have 1x, 2x and 3x.
  • Fullscreen mode
    • Picks the highest scale for the mode, and fills the screen.

Here's what a 2x window looks like on a 4K screen: image

Supposedly, you can control which screen the game chooses its resolution with using -monitor:<num>. It didn't really work for me with two displays at 1080p and 4K.

New Vulkan Renderer

This is undoubtedly the biggest change in the entire Legacy Collection pack. The Sims 1 now renders using the Vulkan API. This explains the new minimum requirements for the game:

https://help.ea.com/en/help/the-sims/the-sims-legacy-collection/the-sims-minimum-requirements/

At a glance, these GPUs should be far beyond the minimum spec The Sims 1 requires - it was released in 2000, after all. For all three vendors, the listed GPUs are their earliest GPUs that officially support the Vulkan API.

So, the biggest difference here is that everything you see onscreen is now GPU accelerated, and displaying with 24-bit colour depth instead of 16-bit.

All ingame sprites are loaded as uncompressed RGBA8 textures, which no-doubt costs more memory than before, but allows them to be rendered directly by the GPU with hardware accelerated depth testing seamlessly between sprites with depth buffers and 3D elements.

Depth is written by combining the depth value in the sprite with a depth offset, and writing to gl_FragDepth. Certain elements like floor tiles and shadows calculate depth in as vertex output rather than using a sprite.

Here's a breakdown of a frame in the legacy collection:

  • Game render texture:
    • Floor 1:
      • Draw all floor tile sprites back to front - no batching.
        • While drawing floor tiles one by one, both the terrain and grass overlay occasionally submit batches of 512 triangles.
      • Draw grass edges when the top of a grass tile goes onto tiled floor
      • Draw wall/fence sprites back to front
      • Draw "static" object sprites back to front
    • Floor 2:
      • Draw wall/fence sprites back to front
      • Draw all floor tile sprites and "static" objects back to front
    • Draw roofs
    • Draw sims
    • Draw "dynamic" sprite elements back to front
      • Sprites that have changed graphic recently are drawn here, sprites that overlap them, and in some other situations.
  • Draw certain UI containers at 1x in their own render textures
    • UCP (the thing at the bottom left)
    • Interaction queue buttons
    • UI containers that are semitransparent
  • Main texture
    • Draw game texture onto main texture
    • Draw UI onto main texture (scaled)
  • Draw main texture onto backbuffer

This is a great step forward for the performance and compatibility of The Sims 1 moving into the future, and as a faithful recreation it's a good sign that nobody thought that anything had changed. However, as cool as it is, there are a bunch of issues that need resolved to make this version of the game a good replacement for the original.

Misplaced pixels on NVIDIA (DXGI swapchain)

This is an NVIDIA driver bug. To workaround this issue, change "Vulkan/OpenGL present method" to "Prefer native" in the NVIDIA Control Panel.

NVfix

For some reason, lines of pixels are getting swapped when running the game on an NVIDIA GPU. Here's an example from the loading screen, at 1080p:

The right edge of the "I" in Sims has some pixels jumbled for some reason. What's odd is that they're jumbled as if they're being sampled wrong, as the swapped lines are two pixels wide at the output resolution of 1080p.

At 2x and 3x scales, a lot of UI elements appear to have pixels swap position, creating the weird edges you see in the motives and some of the buttons. Curiously, this doesn't happen when replaying a RenderDoc capture of the same frame:

It also doesn't happen when the UI panel is fading in/out, as it's drawn to a 1x texture before being drawn here. It also disappears if you take a screenshot with Steam instead of Windows... Broken UI elements get affected by dragging a semitransparent dialog box on top of them. Overall, very confusing.

This doesn't happen on the RDNA2 windows driver, either. I have an RTX 4070 SUPER - not sure if it also happens on earlier NVIDIA GPUs or just the newer ones.

I'm not sure what's causing this. It's possible that it's a UV precision error exaggerated by the point sampling, but I'm not sure why it would cause problems that disappear on inspection. The only odd thing is using vkCmdClearColorImage and vkCmdClearDepthStencilImage immediately before use in a render pass instead of clear load op, but this shouldn't cause anything to break if the barriers are correct - it's just a bit slow.

This appears to be an issue when Vulkan/OpenGL present mode is layered on DXGI swapchain instead of native. Hopefully either NVIDIA fix this at the driver level or EA ship some kind of workaround to stop it from doing this.

Point filtering and Non-Integer scaling

The game upscales UI graphics and sprites using point filtering. This is likely done to avoid introducing seams between conjoined UI elements, floor tiles and multitile object parts. This is a reasonable choice to make for this game, as accidentally introducing tile seams on every large object would ruin the visuals completely.

The biggest problem is when the scale isn't an integer factor. For example, 1.5x. The easiest way to encounter this look is to run the game at 4K, which uses a base scale of 3x, then go to the medium zoom level. Far zoom level will get you 0.75x.

1.5x scale mid zoom: 3xmid

There is a configuration where you can break the whole game to run at a fractional scale, UI and all. With two monitors, your main running at 1080p and second running at 1440p, start the game windowed, and move it over to the 1440p monitor.

Try and fullscreen it - you'll get an option to play with a black border, and one at 1.5x fractional resolution scale. The second probably shouldn't be allowed at all, given how it looks. Even the UI will have uneven pixel scaling:

Lighting

The lighting in Legacy Collection is a close match for the original game in both visuals and limitations.

Lighting is performed in the fragment shader when drawing tiles / walls. There are shader variants for a tile or wall being lit by zero, one or two point light sources. Tile draws potentially swapping between light counts and locations could be the reason why they are not batched.

Let's start with the good - 24-bit colour makes lighting look a lot smoother:

Old

lighting16bit

New

lighting24bit

In more complex situations, we can see the 2-light limit causing some visual issues. This is a match for the original game:

Old

lightingcomplexuc

New

lightingcomplexlc

Interestingly, the new renderer supports light falloffs on diagonal walls, while the original simply shades with the room's ambient light colour.

...and as always, lighting can't affect objects or terrain:

lightingobject

It's impressive how much cleaner it looks, while still having the same aesthetic. Would be nice if it could affect objects and terrain, though that might require larger engine changes, and make the 2 light limit more obvious.

Grass & Terrain

In the original game, terrain rendered at reduced resolution, 16-bit colour with basic dithering, with grass then drawn on top line by line. In legacy collection, the terrain is drawn as a 3D mesh directly into the render area at full res + colour depth. A big benefit of this is that the edges of the property exhibit much less stairstepping. Yes, really. The higher colour bit depth also reduces banding artifacts, most visible when grass blades are disabled:

terraincompare stairs

The grass on top is a bit more complicated. In the original game, grass blades were placed at specific points in the terrain, and draw lines pointing directly up with length and colour based on liveness that varies per vertex on the terrain.

grassdraw

In legacy collection, the grass is simply drawn using a mesh similar to the terrain. They avoid placing grass blades individually by using a looping texture that encodes liveness thresholds + colour modifiers, and a colour lookup texture:

grasstexture

It's sampled using gl_FragCoord plus a scroll offset, meaning it's positioned relative to the screen rather than in 3D. There's a different version for medium and far zooms that looks more like noise than grass.

At near zoom, the game additionally draws grass edges on any grass-tile boundary so that it actually looks like grass instead of a rather convincing carpet:

grassedge

This has another special repeating texture with liveness thresholds and colouring:

grassedgetex

Amusingly, there's a toggle in the graphics options for Terrain Detail that changes how much grass is drawn, with the main goal being improved performance. Unlike the Character Detail option that was removed, Terrain Detail still functions largely the same, where medium draws less grass, and low doesn't draw any. With this new texture based strategy for drawing grass, the medium option won't actually be any faster, and the low option will barely be faster.

Grass, Grid and Scaling

While everything else seems to scale appropriately with the new DPI change, the grass does not. To better demonstrate this point, here's the grass at 1x, 2x and 3x scales, scaled down to be the same resolution for comparison:

grassds1grassds2grassds3

All of these images should be the same, but the grass appears to get shorter and thinner as the scale increases. This is because the grass always draws at the same pixel size, no matter what the scale is.

Here's the opposite comparison, where I've upscaled smaller scales to show what the grass should look like in relation to the sprite graphics.

grassus1grassus2grassus3

The grass shader currently samples the repeating texture with the fragment coordinate directly - it should be divided by the same factor as the sprites. At fractional scales this will cause the same visual issues as floor and object sprites, but those should be resolved separately anyways.

Medium zoom at 3x scale also defaults to using the medium 1x scale grass, which just looks like noise. The sprites have a lot more care and attention in this regard.

The grid also always draws with single pixel dots. It might be harder to implement, but it should be thicker when rendering at a higher resolution, as it becomes a lot harder to see:

gridds1gridds2gridds3

I would argue this is a bit less important than the grass, but it did get me while testing as it was hard to accurately place things on terrain.

Character rendering

sim

Character animation appears to be done entirely on the CPU, with the Vulkan side of things essentially transforming and lighting static meshes in the vertex shader. There's a lot of room for improvement here - these could be skinned on the GPU to free up some CPU time and allow interpolation. I haven't seen any performance issues yet, so it's probably fine as is.

The intro video is messed up

The EA video that plays when the game is launched presents at 4:3 and forces fullscreen for some reason. It has the annoying tendency to competely freeze, and force you to alt-tab away and back before the game's loading screen finally runs (as a black screen).

stuck

We get it, you published The Sims. I'd be happy about it too. One second should be enough.

Pool bug

Here's what far zoom pools look like at 3x when placed next to a regular floor tile:

Curiously, with the pool tool selected in Build Mode, the issue temporarily disappears:

Unimportant differences

There are a few differences that I would say don't really break anything, but are still noteworthy.

Grass doesn't move with terrain

The new method of rendering the grass with a texture instead of individual blades means that the grass is positioned using only the screen position in pixels. It doesn't take terrain into account, meaning that it appears to stay in place as you alter the terrain.

Complete Collection (old):

terraincc.mp4

Legacy Collection (new):

terrainlc.mp4

Roof rendering edge case

With the right combination of rooms and floor tiles on the top level, you can break the game's autoroof algorithm. The original game built roofs out of quarter tiles, and when something went wrong it would just choose the same quarter tile for all roof tiles:

ccroofbreak.mp4

The new engine draws the roof using a single draw of a 3d mesh. It seems to skip drawing most of the tiles:

lcroofbreak_clip.mp4

I wouldn't expect this to ever be fixed, it's just interesting seeing it behave differently.

Minor changes

Fixed interests for included sims

Sims in the default neighbourhoods like Bob, Betty and the Goths somehow ended up with all of their interest points at 0 in Complete Collection:

ucinterests

In legacy collection, this seems to have been corrected:

lcinterests

This made it really hard to make friends with any of these sims, which left a bad first impression. The values are randomized, so you'll likely see different interests for Bob from the ones I posted above.

Sim icon rendering

Icon rendering is different from the original game. The biggest change seems to be the camera position, which isn't as close to the sim's head. There also doesn't appear to be any sort of antialiasing, so the image looks aliased and noisy. You can see the difference between the Legacy Collection generated thumbnail, and the thumbnails for the premade families that were made with the original game:

lcthumbnails

Complete Collection generates icons that look more like this:

ccthumbnails

Picture-in-picture trouble

pipissue

Picture in picture windows appear when something of interest happens on the lot. There appear to be a few issues with it right now:

  • The sim head from the Pie menu is also drawn in the PIP window, but squished. It shouldn't be drawn at all.
  • The close button for the PIP window appears to be misplaced
  • Changing the resolution scale with alt+enter doesn't update the PIP window, it's still at the original zoom level.

View culling for tiles is a bit greedy

This was a problem in the original game, but it's easier to notice now that the full screen redraws every frame:

cull.mp4

You can see the tops of larger objects disappear as they scroll off the bottom of the screen. A little bit more of an allowance couldn't hurt.

Wishlist

Apart from fixing the obvious bugs, I think there are a few things the release needs to really bring it up to scratch, especially if they're sure they want to support DPI scaling.

Grass scaling

I'd say this one is a bug, but it'll probably fly under the radar. I've seen this be the first thing players glance about this release of the game, and they just assume the grass is broken. In promotional screenshot thumbnails, it almost looks like it's missing entirely. When it's corrected, the game should look consistent between scales.

Improve fractional scaling

Right now, cases where the game and UI scale to a non-integer increment are very hard to look at... especially in the case of 1.5x scaling, where it alternates between sprite pixels being 1 pixel and two pixels wide/tall. See the section above for more examples of this actually ingame.

Here's an example of what nearest scaling looks like at 1.5x. Open image in another tab for easier cross-referencing. This image is simulated for easier comparison with the other two, so ignore the UI:

simulated150

Here are some options that might work better:

Snap to integer scales only

The game tries to do this for the overall scale for the UI, but fails if you move it between monitors. It doesn't do it for zoom levels - it instead uses fractional scales. However, the game could try to snap to integer scales for the zoom levels, instead of always dividing by 2.

  • At small resolutions, the zoom levels are 1x, 0.5x, 0.25x with special graphics for medium and far zoom.
  • At 1440p, the zoom levels are 2x, 1x, 0.5x, with far zoom equalling - vanilla medium zoom.
  • At 4k, the zoom levels are 3x, 1.5x, 0.75x.
    • Instead of this, it could be 3x, 2x, 1x, which would avoid any fractional scale factors. As a downside, it would reduce the visiblity of the far zooms.

Round up integer scale, and use a linear sampler to scale down into the target resolution

If the game absolutely must have fractional scaling, there needs to be a way to smooth it out a little.

Round up the target scale to the nearest integer scale, and then draw onto a larger render target scaled by the difference. When scaling up by an integer, pixel sizes are consistent, so it can then be scaled down in a way that's a bit less jarring.

For example, drawing at 1.5x scale at 3840x2160 (can be experienced right now by doing going to medium zoom) would instead try to draw 2x scale. 2160 / 1.5 is 1440, so then scaled by 2x is 5120x2880.

The upside to this is that the graphics still appear sharp, while the fractional scale looks a lot less jarring. The 3D graphics at native even gain a little bit of supersampling.

The downside to this is that the intermediate texture that the game renders to is larger than the screen, using more VRAM and power to render.

Example - 2x scale to 1.5x scale:

simulated150downscale

Round down integer scale, and use a linear sampler to scale up

Similar to above, the game is rendered at an integer scale on an offscreen texture, and scaled to fit with a linear sampler when drawing to the window. However, in this case it would round down to the nearest integer scale, which uses less memory and could be done within the existing canvas by setting a smaller viewport/scissor, instead of creating a new texture.

Downside is that you don't get high resolution for characters/roofs, and that this appears considerably softer than rounding up.

Example - 1x scale to 1.5x scale:

simulated150upscale

Always draw at 1x

Scorched earth approach: you don't get sharp graphics anymore. This would definitely solve all inconsistencies, but having sharp sim graphics and graphics when zooming out is a really big benefit to the new renderer.

The game shouldn't minimize every time you alt-tab

Especially in windowed mode, this is just annoying. The game has a feature "sim in background" that lets the game continue playing itself while the focus is on another window, but it's hard to check up on things if the window immediately minimizes itself when focus is lost.

Ingame DPI/Resolution Configuration

The current way to switch between scale modes using Alt+Enter is confusing and I've seen a bunch of people misinterpret what it's supposed to do. I kind of understand not wanting to modify the original user interface, but here I think there's a pretty big impact to usability, especially when the DPI scaling has huge downsides (non-integer scaling, grass scale).

The Sims 2 also shares the problem of not being able to choose a windowed size. When modding or experimenting with the game, it's useful to have it at a low resolution so that multitasking is still possible. As things are right now, small window sizes are only possible when the game's effective resolution is lowered by the screen DPI. On 1080p, it just covers the whole screen without question.

It would also be useful to be able to choose the scale you want to use when in fullscreen. Right now, the scale is forced depending on your screen resoluton, (for example, 3x scale when at 4k, with an effective game resolution of 720p) but it could be useful to choose lower scales at higher resolutions (2x at 4k) or higher scales at lower resolutions (1.5x at 1080p, if fractional scaling is improved). The blocker here is probably changing the effective game resolution dynamically ingame, but I think it would be well worth the effort to remove so much confusion.

Linear interpolation for sim animations

This one's a bit of a long shot. The Sims doesn't interpolate animations up to the machine's refresh rate. FreeSO and Simitone have this, though it's due to having GPU skinning, and some special treatment for characters performing routing that also interpolates their position and rotation. In The Sims, object and character positions are measured in 16th tiles, so movement at odd angles can appear jittery without hacking a more precise visual position in.

It can be argued that part of the original game's charm is in how the animations and movement look due to these limitations, so it's likely this won't be changed. We dare to dream, though...

Expansion tweaks

When you open any lot for the first time in a neighbourhood, you're bombarded with messages telling you about every expansion that was ever released for The Sims.

These were intended to bring attention to the new features right after the user installed a new pack, but all they do now is immediately overwhelm people with too much information. If you back out and don't save the game, it does it again on your next session.

Edith

please 😇

End

end

There are likely more differences and quirks that I haven't yet spotted... or just didn't have time to go into detail about. I'll update this gist if anything new is found or if there are updates to the game.

Overall, I'm pretty impressed with the amount of work that went into this, but it clearly needs work to get it up to scratch... dubbing it a "re-release" instead of a "remaster" doesn't absolve you of all responsibility. With some work, this could easily be the definitive version of The Sims.

@gibbed
Copy link

gibbed commented Feb 3, 2025

You can side-step any "Steam DRM" issues with the game launching through Steam by either creating a file named steam_appid.txt with the game's app id as its sole contents or set the environment variable SteamAppId with the same before launching the executable.

@FlyingSlig
Copy link

About the misplaced pixels on Nvidia, it seems like it is a bug introduced in the newer drivers on games using Vulkan. I saw those screenshots and immediately reminded me of a bug that recently started happening to me in Red Dead Redemption 2.

image
(check the keyboard glyphs next to Story and Online, also on the bottom near Social Club)

@riperiperi
Copy link
Author

riperiperi commented Feb 3, 2025

You can side-step any "Steam DRM" issues with the game launching through Steam by either creating a file named steam_appid.txt with the game's app id as its sole contents or set the environment variable SteamAppId with the same before launching the executable.

Thanks for the tip, I have no issues launching the game with renderdoc with the steam_appid.txt file present.

About the misplaced pixels on Nvidia, it seems like it is a bug introduced in the newer drivers on games using Vulkan. I saw those screenshots and immediately reminded me of a bug that recently started happening to me in Red Dead Redemption 2.

(check the keyboard glyphs next to Story and Online, also on the bottom near Social Club)

That does look exactly the same. I had a look at some other Vulkan apps I have, and it looks like it happens in Dolphin, though only at high resolutions:

dolphin.mp4

Resizing the window changes how it appears. From that and the fact that it disappears in Steam screenshots and RenderDoc, I figured it was probably an issue with presentation, so I checked the Vulkan/OpenGL present method in NVCP, as I've had some troubles with it before.

image
I changed it to "Prefer Native". It defaults to "Auto", which I assumed meant that it would always prefer native, since that's what it did with Ryujinx. It was actually using DXGI for both The Sims and Dolphin.

This dodges the issue entirely and gives me a clean image:
image
image

I did try this setting before publishing, but I only changed it to DXGI from Auto due to the assumption above. Oops.

Having a bug like this show up at the same time as a release under this much scrutiny is some cosmic scale bad luck. Hopefully NVIDIA can fix it soon.

@P00nker
Copy link

P00nker commented Feb 3, 2025

Dude, you seem to know things. Can you check why Sim Creator doesn't save designs on Windows 10/11? Is this fixable? Here's the archive with the program. It fully works, except doesn't save.

https://drive.google.com/file/d/1RT_FzunchtPWWe_GdmPINziJf7sL3V5N/view

It would be such a gift to the community if Sim Creator was brought back to life.

@riperiperi
Copy link
Author

It seems to save skins to my installation of Complete Collection. Is the problem that you're trying to use this with Legacy Collection? In that case, it probably just can't find the original game to put the output in .\GameData\Skins.

The original game uses a registry entry at Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Maxis\The Sims. Tools that integrate with the game will probably be looking at InstallPath, so you could try adding that:

image

If this works, maybe a simple application that you run once to create this registry entry for the Legacy Collection version would be nice to have around so all these old tools can still work properly.

You could also try set Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\Sims.exe's Path, though this is less likely to be used.

image

Legacy Collection Registry

A correction from the gist - Legacy Collection does use a registry entry, but just to track some configuration instead of locate the game:
Computer\HKEY_CURRENT_USER\Software\Electronic Arts\The Sims 25

image

The Sims 2's entries have install paths, but only for expansions... not the base game. It's also in a different location, too:
Computer\HKEY_CURRENT_USER\Software\Electronic Arts\The Sims 2 Ultimate Collection 25\
Instead of:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\EA GAMES\The Sims 2\
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Maxis\The Sims 2 Ultimate Collection
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\ (Sims2.exe, Sims2EP1.exe, etc)

@MrPowerGamerBR
Copy link

Another change that wasn't included in the gist: The PIP window now has a fade in/fade out animation

By the way, this is an amazing overview and has a lot of things that I haven't noticed when playing! Thanks @riperiperi :3

@P00nker
Copy link

P00nker commented Feb 4, 2025

Sadly, adding these entries to registry didn't change anything for me :(
I am only testing with the Steam Legacy version and its directory.

I don't know if it's helpful but creator, for me, only loads 1male/1female/2child models which are within the creator, so even with these registry entries added it doesn't load all the models from the game
simer

@riperiperi
Copy link
Author

There's already a patch for the game:

https://www.ea.com/en-gb/games/the-sims/news/sims-legacy-and-the-sims-2-legacy-patch-notes-04-02

It seems to fix issues with the neighbourhood selection screens when travelling, now the background draws in the proper location, blacks out the game behind it and I can click all the properties:

image

AMD

I didn't mention this on the gist since I tested it later, but performance on AMD+Windows was originally awful with a lot of sims onscreen (steam deck):

image-1

It seems a little better now, maybe chance but it's something to keep an eye on:

image

It's considerably faster on RADV (SteamOS, screenshot is day but it was similar at night):

20250204140712_1

For comparison, here it is on my desktop PC (Ryzen 3900x, RTX 4070 SUPER):

image

@PARTYMANX
Copy link

Cool analysis! I'm really surprised how much work went into this release. Their approach to scaling is very strange to me, I'm not sure how I feel about mixing high resolution 3d with sharp low resolution 2d.

Just a note on the wishlist section about scaling, there is another option for scaling non-integer pixels in a sharp manner that I have used on my own mod for Tony Hawk's Pro Skater 2 (where scaling from the original 4:3 512x240 is almost always going to be non-integer): you can bias samples to a bilinear texture to essentially re-create the look of a sharply upsampled texture, without spending the same on VRAM and fill rate: https://github.com/PARTYMANX/partymod-thps2/blob/main/shader/framebuffer-sharp.frag.glsl

@henke37
Copy link

henke37 commented Feb 4, 2025

Here is how to find a game installed by steam:

  1. Read the registry to find the main steam install location. It's the InstallPath value under the SOFTWARE\Valve\Steam key.
  2. Read the steamapps\libraryfolders.vdf file to get a list of all steam libraries.
  3. In each library check for a steamapps\appmanifest_{appId}.acf file.
  4. The appmanifest file will have an installdir key with the actual install path.

People using .NET can use my Henke37.Valve.Steam NuGet package to do all the tedious work for you.

@130N1D
Copy link

130N1D commented Feb 4, 2025

Hey good analysis! I also noticed this bug: there are no icons for sim thumbnails, like job, school, or focusing on the sim.
4
Also, the friend counter is currently gray and there is no button to scroll through friends
2
There is no close button for pucture-in-picture window
3

@derplayer
Copy link

Great writeup!
By the way, the AMD GPU issues are even worser than described here.
It runs already awful on my AMD+Windows 10 PC with a few Sims on screen. (AMD RX 6950 XT, 14-17 fps in both windowed and full screen mode)

Legacy Collection:
legacy collection

Complete Collection w/ Widescreen Patcher/DDrawCompat
complete collection

@riperiperi
Copy link
Author

A second patch has hit The Sims Legacy Collection:
https://www.ea.com/en-gb/games/the-sims/news/sims-legacy-and-the-sims-2-legacy-patch-notes-06-02

Biggest thing that changes for everyone is the panel background stretching, which now looks correct in all modes:
410617403-aadaa824-1c99-48cd-9639-34d2946d22c5
410617576-b27b2240-e6d3-4465-aea6-3d916c68efa3

There are a bunch more Vulkan compatibility patches. From the description on the site, some people might be running the game on the Dozen driver from the "OpenCL™, OpenGL®, and Vulkan® Compatibility Pack" instead of their native Vulkan driver. The game could still work around this by being a bit smarter about device selection, but it has been a problem for other Vulkan applications recently.

@riperiperi
Copy link
Author

Here's what the new panel background draw looks like. You can see it splits into three, where the section in the middle is the only one that stretches:
image

@130N1D
Copy link

130N1D commented Feb 6, 2025

Good, but there is still a lot to fix! I find a new bug. Maxis downloadable family "Maximus" have this weird gray holes on a lot.
Screenshot_3 copy
It fixes itself when you switch to build mode, but in live mode it breaks again. Check the video:
https://gist.github.com/user-attachments/assets/e0ff081a-5afd-424c-9377-388a7c57d32e

@riperiperi
Copy link
Author

Looks like there's a bug with the new UI background stretching - it doesn't apply to the panel that shows up when you grab an object, so you can see the tiles behind it partially drawn.

image

@Daorf
Copy link

Daorf commented Feb 8, 2025

I apologize for bringing up a somewhat off-topic subject in this post. However, The Sims 1 does not provide a feature that allows changing the terrain color of lots in the base neighborhood to sandy tones like the Downtown beach lots or snowy tones like the Vacation winter lots.

I attempted to modify the internal data of the lot’s IFF file in an effort to change the terrain color of lots in the base neighborhood, but it was unsuccessful. However, after several attempts, I discovered that if I change the lot IFF file’s number from a base neighborhood lot to a Vacation winter lot, the terrain color changes to snow. Conversely, if I convert a Vacation winter lot into a base neighborhood lot, the terrain color turns green.

This led me to speculate that the terrain color is not stored in the IFF file itself but is instead centrally assigned somewhere within the game’s internal system. However, since I am not a game developer, I couldn't investigate further.

I've long wanted to change the terrain color of the base neighborhood lots in The Sims 1 to snowy tones, just like the Vacation winter lots. Seeing that EA recently released The Sims 1 Legacy Collection while fixing bugs and improving features, I thought that perhaps now would be a good time to ask EA or the game developers how this functionality could be implemented—or even request that they add an in-game feature to change lot terrain colors.

(CD_2025-0208-1807-88)(DF_2025-0208-1808-23_kkbz)(from__PI-C_2025-0208-1755-88_reoq-01 psd)

@citrusella
Copy link

Yeah, I remember someone looking into that a long time ago on Simblesse Oblige and coming to the same lot conclusion and deciding it wasn't changeable other than by doing that, i.e. none of the neighborhood iff files controlled it. (There are season hacks that people have made but those are just placing rugs on a lot and getting them to change via a controller, i.e. like Simlogical's https://simlogical.com/sl/downloadpages/seasons.htm )

It's worth noting Edith (the internal dev version of the game that has extra object/simulation development featurs) has a terrain tweaker (though only for different grass colors (including ones the actual game never uses) so far as I know, but that may be because I'm only familiar with base game Edith). If you were to import a terrain tweaked lot (even importing it back into Edith itself), it wouldn't keep the terrain data, though.

(This is pretty off-topic from "differences and bugs", yeah.)

@Daorf
Copy link

Daorf commented Feb 9, 2025

Yeah, I remember someone looking into that a long time ago on Simblesse Oblige and coming to the same lot conclusion and deciding it wasn't changeable other than by doing that, i.e. none of the neighborhood iff files controlled it. (There are season hacks that people have made but those are just placing rugs on a lot and getting them to change via a controller, i.e. like Simlogical's https://simlogical.com/sl/downloadpages/seasons.htm )

It's worth noting Edith (the internal dev version of the game that has extra object/simulation development featurs) has a terrain tweaker (though only for different grass colors (including ones the actual game never uses) so far as I know, but that may be because I'm only familiar with base game Edith). If you were to import a terrain tweaked lot (even importing it back into Edith itself), it wouldn't keep the terrain data, though.

(This is pretty off-topic from "differences and bugs", yeah.)

Yes, even I think that the post I made doesn’t really fit the topic of this place, and I regret posting it here. Still, I really appreciate that you responded kindly instead of getting upset.

I see that someone else has experimented in a similar way before. I also tested it with Edith, and when I changed the lot's terrain color and restarted the game, the changed color reverted to its original state.

Also, after EA released The Sims 1 Legacy Collection, I noticed that they were fixing bugs based on user feedback. Seeing this, I thought it might be a good opportunity to suggest this feature to the team managing and modifying The Sims 1 source code. So, I wrote a post in the Sims discussion section of the EA forum requesting the addition of a feature that allows changing the lot's terrain color.

@riperiperi
Copy link
Author

This led me to speculate that the terrain color is not stored in the IFF file itself but is instead centrally assigned somewhere within the game’s internal system. However, since I am not a game developer, I couldn't investigate further.

This is the conclusion I came to as well, as there was no terrain type indicator in the IFF and the game did this when you swapped them. In Simitone I implemented it as a lookup from house number to grass type:

https://github.com/riperiperi/FreeSO/blob/master/TSOClient/tso.simantics/Utils/VMTS1Activator.cs#L33

It's probably similar in TS1. You might be able to find the function that selects the grass type using IDA/ghidra and patch it manually, though getting it to read from house data is easier said than done. You should be able to analyze/patch the executable with Steamless, but since the game's still being actively patched the code might be a moving target right now.

@Orange-kun
Copy link

Orange-kun commented Feb 11, 2025

They should also unblock the language code 13 for Russian language so fans can finally properly translate the game using its own locale. It was unblocked in original Edith and was blocked after release of The Sims version 1.0.

The both UKEnglish and USEnglish versions use 12h clock which confuses a lot since not everybody in the world use 12h clock and it may be difficult to read all these am/pm.
So translating the game just by replacing the English will result that am/pm stays.
The game already has a support of Russian locale 13/0D and even has a separate folder with Russian fonts in UIGraphics/Fonts. But if you save text in Russian space by iff strings editor, sims.exe won't load it. They should add 'Russian' line into the code of sims.exe just after the Finnish (12) and before Portuguese (14).

@Daorf
Copy link

Daorf commented Feb 11, 2025

This led me to speculate that the terrain color is not stored in the IFF file itself but is instead centrally assigned somewhere within the game’s internal system. However, since I am not a game developer, I couldn't investigate further.

This is the conclusion I came to as well, as there was no terrain type indicator in the IFF and the game did this when you swapped them. In Simitone I implemented it as a lookup from house number to grass type:

https://github.com/riperiperi/FreeSO/blob/master/TSOClient/tso.simantics/Utils/VMTS1Activator.cs#L33

It's probably similar in TS1. You might be able to find the function that selects the grass type using IDA/ghidra and patch it manually, though getting it to read from house data is easier said than done. You should be able to analyze/patch the executable with Steamless, but since the game's still being actively patched the code might be a moving target right now.

Thank you so much for your kind response. Also, I apologize for posting something that was not relevant to the topic, riperiperi.

It is now clear that the grass color of lots in The Sims 1 is not stored in the lot IFF files but is instead managed centrally. In a way, the best approach at this point might be to request the current development team, who are maintaining and fixing bugs in The Sims 1 source code, to add a feature that allows changing the terrain color, as I mentioned before.

Of course, I’m not sure if the developers will respond to such a request in a timely manner. That being said, I did make a post on the EA forum

@Diegoparedeshd1
Copy link

Are you going to update the information with today's patch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment