It's finally here, my tutorial for adding new terrain types to The Sims 2!
This was tricky to write so I hope I documented everything correctly!
You can also get the guide as a PDF (including tutorial files) at SFS.
(2026-03-06: I messed up and deleted the upload, I reuploaded it…)
Tutorial: Adding a custom terrain and road in The Sims 2
By JodelieJodelie
Version 1.0
13-10-2025
This is a tutorial for adding new custom terrains with roads to the four existing terrains (temperate, desert, concrete, dirt) in The Sims 2.
This tutorial requires knowledge of SimPE and editing files.
Required software
The Sims 2
SimPE
A text editor such as Notepad
A hex editor such as https://hexed.it/
Files that will be edited
The files you will edit should be in the folder of your latest EP/SP. Since I have the Ultimate Collection (UC) I will refer to the Mansions & Gardens subfolder (SP9) in Fun with Pets folder.
In my case, my install folder looks like: C:\Program Files (x86)\EA Games\The Sims 2 Ultimate Collection. I’ll refer to the installation path as ~.
~\Fun with Pets\SP9\TSData\Sys\NeighborhoodTerrain.ini
~\Fun with Pets\SP9\TSData\Res\Catalog\Scripts\terrainPaints.txt
~\Fun with Pets\SP9\TSData\Res\Materials\Materials.package
OR if you have shaders installed such as LazyDuchess’ Lot Lighting Fixes or the Multi Road Mod (1, 2) you’ll need to edit those instead.
The particular shaders we’ll be editing are:
Instance 0xFF6BE964: Predefined neighborhood materials
Instance 0xFF439C10: Shaders for lot skirt
Optional: Instance 0xFF1AFA1C: Shaders for terrain tiles
Tutorial files
I have uploaded a package with texture files for a snow terrain based on this dirt default by Freezer Bunny (uploaded by Shastakiss). The road texture is based on the Rural Charm road by Criquette.
Download at SFS.
The terrain file contains the following textures:
lottexture-canvas-snow_detail_txtr
lottexture-canvas-snow_txtr
snow-rough_txtr
snow-rough-hsnow_txtr
snow-rough-lsnow_txtr
snow-rough-light_txtr
snow-rough-light-hsnow_txtr
snow-rough-light-lsnow_txtr
snow-smooth_txtr
snow-smooth-hsnow_txtr
snow-smooth-lsnow_txtr
snow-smooth-rougher_txtr
snow-smooth-rougher-hsnow_txtr
snow-smooth-rougher-lsnow_txtr
The road file contains the following textures:
lotskirtroad_snow_00000304_txtr
lotskirtroad_snow_00000304_hsnow_txtr
lotskirtroad_snow_00000304_lsnow_txtr
lotskirtroad_snow_00000f04_txtr
lotskirtroad_snow_00000f04_hsnow_txtr
lotskirtroad_snow_00000f04_lsnow_txtr
lotskirtroad_snow_00004b04_txtr
lotskirtroad_snow_00004b04_hsnow_txtr
lotskirtroad_snow_00004b04_lsnow_txtr
lotskirtroad_snow_00005704_txtr
lotskirtroad_snow_00005704_hsnow_txtr
lotskirtroad_snow_00005704_lsnow_txtr
lotskirtroad_snow_00020704_txtr
lotskirtroad_snow_00020704_hsnow_txtr
lotskirtroad_snow_00020704_lsnow_txtr
snow_roads_00000304_txtr
snow_roads_00000304_hsnow_txtr
snow_roads_00000f04_txtr
snow_roads_00000f04_hsnow_txtr
snow_roads_00004b04_txtr
snow_roads_00004b04_hsnow_txtr
snow_roads_00005704_txtr
snow_roads_00005704_hsnow_txtr
snow_roads_00020704_txtr
snow_roads_00020704_hsnow_txtr
Notice how all the textures have the word “snow” in them. If you want to create your own terrain, you can replace these with a word of your choosing (but don’t replace hsnow and lsnow, these are needed when it’s snowing in the game). Don’t forget to click “fix TGI” and “Commit” in SimPE if you do.
Step 1. Editing NeighborhoodTerrain.ini
Make a back-up of your NeighborhoodTerrain.ini file.
Open the file in a text editor.
You will need to add new text in three places.
First edit: PaintInfos
Under [PaintInfos] you will find all the terrains in your game. The last one will be the concrete terrain.
; for concrete terrain 0x13=0.9,concrete-smooth,1, lottexture-concrete-01, 0,1, 26,0 0x14=0.9,dirt-grey,1, lottexture-concrete-01, 0,1, 26,0
You will need to add your own terrain under this one. You can use one of the other ones as inspiration. I followed the dirt formatting.
Very importantly:
You must increase the numbers at the beginning of the lines
You must write down the right texture names
So that means for our tutorial terrain it will look like this:
; for snow terrain 0x15=0.9,snow-smooth,1, lottexture-canvas-snow, 0,1, 48.0,0 0x16=0.9,snow-smooth-rougher,1, lottexture-canvas-snow, 0,1, 32.0,0 0x17=0.9,snow-rough-light,1, lottexture-canvas-snow, 0,1, 32.0,0 0x18=0.9,snow-rough,1, lottexture-canvas-snow, 0,1, 48.0,0
Add it after the concrete terrain.
Second edit: TerrainTypeInfos
Under [TerrainTypeInfos] you will need to add your terrain with 0x10 and 0x11. These are the cliff and beach paints. Technically this means you could have different cliff and beach paints per terrain. But that’s for another time.
So the format is Name=Cliff_Paint_ID,Beach_Paint_ID.
In our case this means you will add the following line under the concrete one:
Snow=0x10,0x11
Third edit: PaintMapTable
In this last edit you will need to add a paintmaptable of your new terrain. This map will determine at what height which texture will get applied.
Copy a map of a terrain. I used the dirt one as my inspiration.
[PaintMapTable_Dirt] 00=0x12,0x12,0x07,0x09,0x09,0x09,0x08,0x09,0x09,0x08,0x09,0x09,0x08,0x08,0x09,0x09, 01=0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 02=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 03=0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 04=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 05=0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 06=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 07=0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 08=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 09=0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 10=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 11=0x12,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 12=0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x09,0x09,0x08,0x08,0x09, 13=0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x09, 14=0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x12,0x07,0x07,0x07,0x08,0x09,0x09,0x09,0x09, 15=0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x09,0x09,0x09,0x09, 16=0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x09,0x09,0x09,0x09, 17=0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09, 18=0x12,0x12,0x12,0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09, 19=0x12,0x12,0x12,0x12,0x12,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09, 20=0x12,0x12,0x12,0x07,0x12,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09, 21=0x12,0x12,0x07,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 22=0x12,0x12,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 23=0x12,0x12,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x08, 24=0x12,0x12,0x12,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x08,0x09,0x09,0x09,0x09,0x09, 25=0x12,0x12,0x12,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x08,0x08,0x09,0x09,0x09, 26=0x12,0x12,0x12,0x12,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 27=0x12,0x12,0x12,0x12,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x08,0x09,0x08,0x09,0x09, 28=0x12,0x12,0x12,0x12,0x08,0x12,0x08,0x12,0x08,0x12,0x08,0x08,0x08,0x08,0x08,0x09, 29=0x12,0x12,0x12,0x12,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x08, 30=0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x09, 31=0x12,0x12,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x07,0x08,
There are two things you will need to change.
First the name: [PaintMapTable_Snow]
Second, you will need to change all the numbers after the x=. These reference the numbers we used in the first edit in the PaintInfos.
; for snow terrain 0x15=0.9,snow-smooth,1, lottexture-canvas-snow, 0,1, 48.0,0 0x16=0.9,snow-smooth-rougher,1, lottexture-canvas-snow, 0,1, 32.0,0 0x17=0.9,snow-rough-light,1, lottexture-canvas-snow, 0,1, 32.0,0 0x18=0.9,snow-rough,1, lottexture-canvas-snow, 0,1, 48.0,0
So that means:
0x07 will be replaced by 0x15
0x08 will be replaced by 0x16
0x09 will be replaced by 0x17
0x12 will be replaced by 0x18
I suggest copying the PaintMapTable to another Notepad and replace them with Replace All (Ctrl H).
The result:
[PaintMapTable_Snow] 00=0x18,0x18,0x15,0x17,0x17,0x17,0x16,0x17,0x17,0x16,0x17,0x17,0x16,0x16,0x17,0x17, 01=0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, 02=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 03=0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, 04=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 05=0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, 06=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 07=0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, 08=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 09=0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, 10=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 11=0x18,0x18,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 12=0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x17,0x17,0x16,0x16,0x17, 13=0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x16,0x16,0x17,0x17,0x17, 14=0x18,0x18,0x18,0x18,0x18,0x18,0x15,0x18,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17, 15=0x18,0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17, 16=0x18,0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17, 17=0x18,0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, 18=0x18,0x18,0x18,0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, 19=0x18,0x18,0x18,0x18,0x18,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, 20=0x18,0x18,0x18,0x15,0x18,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, 21=0x18,0x18,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 22=0x18,0x18,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 23=0x18,0x18,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x16, 24=0x18,0x18,0x18,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17, 25=0x18,0x18,0x18,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16,0x17,0x17,0x17, 26=0x18,0x18,0x18,0x18,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 27=0x18,0x18,0x18,0x18,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x16,0x17,0x17, 28=0x18,0x18,0x18,0x18,0x16,0x18,0x16,0x18,0x16,0x18,0x16,0x16,0x16,0x16,0x16,0x17, 29=0x18,0x18,0x18,0x18,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x16, 30=0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17, 31=0x18,0x18,0x18,0x18,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x16,
Add this map after the concrete one.
And that’s the last edit of the NeighborhoodTerrain.ini. Don’t forget to save your file!
Step 2. Editing terrainPaints.txt
Make a back-up of your terrainPaints.txt file.
Open the file in a text editor.
You will need to add new text in one place.
Scroll down, you will see the following texts:
terrainPaint "lottexture-concrete-01" brushWidth 3 notInCatalog terrainTypeSoundSuffix "grass" terrainPaint "lottexture-canvas-dirt" brushWidth 3 notInCatalog terrainTypeSoundSuffix "grass"
Add your own terrain after these.
terrainPaint "lottexture-canvas-snow" brushWidth 3 notInCatalog terrainTypeSoundSuffix "grass"
Note, I don’t know what other terrainTypeSoundSuffix types exist.
Save the file.
Step 3. Editing shaders
This step depends whether you use shader mods or not. If you don’t, you will need to edit ~\Fun with Pets\SP9\TSData\Res\Materials\Materials.package. Otherwise, you will need to edit your mods.
Regardless, make back-ups.
Predefined neighborhood materials
Open the Materials.package or your mod.package in SimPE.
Look for instance 0xFF6BE964.
Scroll down and add the following to the other NHoodRoadMaterials.
#Snow create NHoodRoadMaterial(neighborhood-roads-Snow-00005700 snow_roads_00005704) create NHoodRoadMaterial(neighborhood-roads-Snow-00020700 snow_roads_00020704) create NHoodRoadMaterial(neighborhood-roads-Snow-00000f00 snow_roads_00000f04) create NHoodRoadMaterial(neighborhood-roads-Snow-00000300 snow_roads_00000304) create NHoodRoadMaterial(neighborhood-roads-Snow-00004b00 snow_roads_00004b04)
Click “Commit” and save your file.
Shaders for lot skirt
Open the Materials.package or your mod.package in SimPE.
Look for instance 0xFF439C10.
Scroll down and add the following to the other LotSkirtRoadMaterialInstances.
#Snow create LotSkirtRoadMaterialInstance(lotSkirtRoad_Snow_00005700 lotskirtroad_snow_00005704) create LotSkirtRoadMaterialInstance(lotSkirtRoad_Snow_00020700 lotskirtroad_snow_00020704) create LotSkirtRoadMaterialInstance(lotSkirtRoad_Snow_00000f00 lotskirtroad_snow_00000f04) create LotSkirtRoadMaterialInstance(lotSkirtRoad_Snow_00000300 lotskirtroad_snow_00000304) create LotSkirtRoadMaterialInstance(lotSkirtRoad_Snow_00004b00 lotskirtroad_snow_00004b04)
Click “Commit” and save your file.
Optional step
This step is not required to make your new terrain functional but will improve how it looks, especially if you have a texture with multiple colors or a grid.
The edit will need to be done in another shader, namely the Shaders for terrain tiles (instance 0xFF1AFA1C). Note: these values apply to all other terrains and terrain paints.
So again, open the Materials.package or your mod.package in SimPE.
Directly underneath terrainMatDiffCoef you will find the following.
# Specifies the number of tiles over which the paint & bump textures should be applied. setf canvasDetailTextureScale 4 setf canvasBaseTextureScale 20 setf paintTextureScale 20 setf paintDetailTextureScale 4.0 setb hasCutout false
These settings determine the size of both the terrain and terrain paints. For some mysterious reason, the developers put the values at 4. This means that the terrains will span 4x4 tiles. This means it will never line-up with the neighborhood terrain that is visible from the lot.
The default 4x4, this makes lining up textures difficult.
By editing it to 5x5, you can line up textures better.
As you can see, by increasing the texture by 5x5 it will be easier to make matching terrain defaults.
So change the values to the following.
# Specifies the number of tiles over which the paint & bump textures should be applied. setf canvasDetailTextureScale 5 setf canvasBaseTextureScale 20 setf paintTextureScale 20 setf paintDetailTextureScale 5.0 setb hasCutout false
Click “Commit” and save your file.
Example with another texture.
Before:
After:
Step 4. Changing the terrain in your neighborhood
It’s time to start the game!
Either select an existing neighborhood or create a new one. If you want to apply it to an existing neighborhood I recommended creating a back-up.
When in the neighborhood, use CTRL + SHIFT + C to open the cheatconsole
Type “Terraintype Snow” and hit Enter.
The terrain will change, but will look a bit weird. That will fix itself when you either reload the neighborhood or restart the game.
But we’re not done yet, we need edit some values in SimPE.
Close the game if you haven’t already.
Step 5. Changing the road with SimPE
I learned about this from this thread on ModTheSims.
Open SimPE and use the Neighborhood Browser (via Tools) to open your neighborhood.
Extract the Neighborhood Memory (NGBH) and save it somewhere as SnowTutorial.simpe.
Open the .simpe file with a hex editor. I use an online version: https://hexed.it/.
Go to byte 14. This will have a number. This number corresponds with the number of letters in your terrain. In our case “snow” has 4 letters, so this value will need to be 4.
Starting at byte 18 you will find the letters of the terrain name. Depending on the length of the current terrain and the one you need, you might have to remove or add bytes. Replace the text with the name of your terrain and add/delete bytes if needed.
It will look like this in hexed.it:
Save the file and give it another name, such as SnowTutorialEDIT.simpe.
Return to SimPE and NGBH and replace (right click) the NGBH with the edited version. Click save.
Close SimPE and start the game again to check on your neighborhood.
If everything went alright you now have a snowy neighborhood terrain and matching road!
Note: any existing lots will need to be picked up and placed again. This will reset the terrain.
Result
I currently don’t have a lighting mod. Below you can see lot and neighborhood terrain comparisons per season. The difference is biggest for summer.
It’s not perfect, for instance snow during winter will do this to the terrain and neighborhood road from lot view. Maybe I’ll figure out how to fix this another time.
That was it!











