Serious Sam TFE/TSE Mapping/Modding Q&A

Serious Sam Q&A You got questions? We've got answers!

A lot of useful information regarding creating any kind of user-generated content for the beloved classic Serious Sam games often gets lost. Be it buried under heaps of messages in Discord servers, forum posts or old websites going dark.

This page hopes to preserve this kind of information for future mappers and modders.

last edit: 13/11/25


  1. Serious Engine
    1. Why is changing/replacing models for classic Serious Sam so difficult?
    2. What are the restrictions for texture animations?
    3. Can I have multiple texture animations in one texture file?
    4. How should I compress my final .gro?
    5. When using HudPicHolder with different textures, only the first texture shown can be shown for the rest of the level. What am I doing wrong?
    6. I see flashy and colored texts in some maps. How are they made?
    7. I've created a text file to show with Netricsa, why does my .tga image not show?
  2. Serious Editor
    1. The name "ModelHolder2" implies the existence of at least previous versions. What about that?
    2. I get polygon holes moving around the camera. Why is that?
    3. How do I change the testing difficulty when testing my map within Serious Editor?
    4. Where do I find the models and textures for the big head Croteam dudes?
    5. How do I spawn a lava golem with its rising animation?
    6. I keep shooting a ModelHolder with a set HP but it won't be destroyed. Why?
    7. What is the best approach to build levels? "Carve" everything into the void with "room" brushes, or create one big "room" brush and add "full" brushes to it?
    8. Why does making a floor polygon full bright also fully bright all entities on it?
    9. Is it possible to start a level without weapons, without changing entity code?
    10. How do you add a key-item from TFE to TSE, for example a golden scarab?
    11. How can I find polygons that use a specific texture?
  3. Serious Modeler
    1. What's the procedure for importing a model and its animations from Blender into SED1 via Modeler?
    2. Some models cannot use "custom shading" in Serious Editor. Why is that?
  4. Modding SDK
    1. What's the "official" setup for modding Serious Sam?

Documentation Structure

Information specific to either TFE or TSE are color coded the following way: TSE only | TFE only

Serious Engine

Questions and answers about anything generally related to the inner workings of the Serious Engine 1 (version 1.05 - 1.07).

Why is changing/replacing models for classic Serious Sam so difficult?

There are a few reasons, mostly tied to how the engine requires animations to be in a specific way. Here's a rundown:

  1. Serious Modeler builds models and its animations with script (src) files. The scripts define individual animation names as they're used in Modeler and Editor as well es their individual frames and playback speeds. This in itself is tedious already.
  2. Croteam did not include the original script files their models have been built with. Meaning any model that has animations you want to modify you have to rebuild those scripts from scratch.
  3. Some animations are hard coded into entity code, meaning you would need to stick to the exact order of animations for models to even work the way they worked before. This makes things even harder, because you need to "reverse engineer" some of it, which is tedious and annoying.
  4. This is all because Serious Engine uses mostly vertex animation. So each frame is a different model entirely with its vertices moved around to create that animation. So every change to a model means every animation needs to be exported again in order to match vertex placement for Modeler to work with it properly, otherwise it will throw errors.

Let's make it even more clear with a simple example: Let's say you want modify the Gnaar model, maybe give it a Mohawk. The workflow would be to import the model into Blender using the appropriate import plugin. You will see that every animation and mip model is loaded into Blender, leaving quite a mess on screen. Then it's up to you how you want to apply your Mohawk to all those models. Then you will have to export every single animation as OBJ, which means one model file per frame of animation. You will then have to import the base model file and list each animation frame file in the script in Modeler and use the correct order for each animation, otherwise the game will throw errors.

If that all doesn't sound like a walk in the park, it's because it isn't. Not impossible mind you, just tedious.
It's even harder for player animations, because the way they are referenced in entity code. So to gain full control you would need to build a whole mod around your models to be able to make code changes or additions to accommodate for your new models. That in itself is a completely different topic again.

What are the restrictions for texture animations?

Animated textures are created in the resolution of your image files. But the game will only display them in 64x64/128х128 on default quality settings and 256х256 on extreme quality settings. So unfortunately, creating higher resolution textures that are going to be animated will not have an effect in the game.

Can I have multiple texture animations in one texture file?

Yes, you can define multiple different animations in one texture. Texture animations can be changed during gameplay by using the AnimationChanger entity. The animation script could look like this:

;* Texture description
TEXTURE_WIDTH 8.0000
TEXTURE_MIPMAPS 8
ANIM_START
DIRECTORY TexturesMP\myAnims
;* Animations
ANIMATION ANIM1
SPEED 0.8
FRAMES 2
    A1_Frame1.tga
    A1_Frame2.tga

ANIMATION ANIM2
SPEED 1.0
FRAMES 3
    A2_Frame1.tga
    A2_Frame2.tga 
    A2_Frame3.tga

ANIMATION ANIM3
SPEED 0.5
FRAMES 1
    A3_Frame1.tga
ANIM_END
END
How should I compress my final .gro?

Generally, custom music should not sit in compressed .gro-files. The same is true for level files (.wld), as this can increase loading time of the level even on modern SSDs. The general rule of thumb would be to either split your content into separate .gro files, similar to what Croteam did. This only makes sense for bigger maps or map packs with a lot of custom content, so compression makes sense. Then you can follow the convention of Croteam:

  • MapName_00_Levels.gro -> uncompressed to reduce loading times
  • MapName_00_Music.gro -> also uncompressed
  • MapName_00.gro -> everything else, compressed to reduce size

However: Most maps are ok to just put everyting in a single uncompressed .gro file.

Using AutoGro

The .gro files generated by AutoGRO will always be compressed. You can still use it to quickly gather the correct files from your game folder for your final .gro. Afterwards just unpack and re-pack it into an uncompressed .gro.

When using HudPicHolder with different textures, only the first texture shown can be shown for the rest of the level. What am I doing wrong?

That's a limitation of the entity and cannot be changed unless you re-write the entity code through the SDK. Otherwise only ever a single texture can be loaded and displayed with HudPicHolder per level.

I see flashy and colored texts in some maps. How are they made?

Text effects can be applied with a serious of control character as follows:

Code Effect Example
^i italics ^iHello World => Hello World
^b bold ^bHello World => Hello World
^c[RGB hex code] changes color ^cff7040Hello World =>Hello World
^f[0-9] flashing in different speeds ^f5Hello World => preview
^a[2 symbol hex code] transparency ^a55Hello World => preview
^r reset all effects ^b^cff7040Hello ^rWorld =>Hello World
capital letter version of any code resets specific effect ^b^cff7040Hello ^BWorld => Hello World

These effects can all be combined and removed at any point.

I've created a text file to show with Netricsa, why does my .tga image not show?

As with everything for Serious Engine, the .tga file must first be imported into either Serious Editor or Serious Modeller to create a ".tex" file. This is the only file format Serious Engine can read, so this is also true for Netricsa messages.

Serious Editor

Questions and answers about usage of the Serious Editor tool to compile models and animations to a format Serious Engine can read.

The name "ModelHolder2" implies the existence of at least previous versions. What about that?

Not a definitive answer but still a nice bit of trivia:

  • ModelHolder1 was the original, perhaps from In the Flesh days
  • ModelHolder2 is what we use normally in classic TFE/TSE
  • ModelHolder3 was used in the XBox port to support Ska-models. Very few custom maps actually require/contain this entity.
I get polygon holes moving around the camera. Why is that?


This is likely because vertices are not properly aligned to the grid or your grid is too precise/fine-grained. Use a bigger grid size and snap vertices to the grid.

Another reason could be broken sectors that interfere with rending. Broken sectors can look similarly broken:

How do I change the testing difficulty when testing my map within Serious Editor?

Start your testing session (by pressing T), open the console (^) and type /gam_iQQuickStartDifficulty=? where ? is a number for the difficulty (see values below). You can speed this up by typing gam_iQ and hit tab until you get the full command. Set one of the following values according to the difficulty you want to test:

  • 0 = easy
  • 1 = normal
  • 2 = hard
  • 3 = serious
Where do I find the models and textures for the big head Croteam dudes?

Their internal name is "Mental" and they're classified as enemies, so they're in those respective folders. Both Models and ModelsMP has a version. The actual "enemy" is called BigHead and must be added to the virtual tree first and can be found in classes/BigHead.ecl.

How do I spawn a lava golem with its rising animation?

When Lava Golems spawn, they instantly transform into their normal state. You need to set a time value for the Golem, how long you want to wait before it pays attention to the player.

I keep shooting a ModelHolder with a set HP but it won't be destroyed. Why?

Health for ModelHolder2 is implemented in a way that you need to do the set amount of damage in a single hit for it to be destroyed. You cannot wear it down with multiple weaker hits over time. The exception is high rapid-fire weapons like the Minigun and Laser Rifle, which can deal the necessary amount of damage in a period before the internal timer resets health points for ModelHolder2 entities.

What is the best approach to build levels? "Carve" everything into the void with "room" brushes, or create one big "room" brush and add "full" brushes to it?

It depends. If the majority of your map is indoors, then it's better to have everything floating in the void and leave open ceilings to the sky as portal. If the majority of your map is outside, then it's better to have the one big room that you keep adding to. For partial underground sections you can just carve everything into the ground directly.

But it also depends on whether you want to have like surrounding buildings for scenery. With portal ceilings, you can't really do that.

You can mix the two approaches as well, like Ziggurat does. It's an outdoors map with carved boxes, but a lot of indoor areas use portal ceiling. You can certainly have one big room, with carved floor for the play area, but also one building that has areas with portal ceiling.

Why does making a floor polygon full bright also fully bright all entities on it?

Because the lighting of entities is based on the polygons they're touching.

Is it possible to start a level without weapons, without changing entity code?

No, players will always start with the knife and one Colt. You can "holster" the weapons at the beginning of a level with a PlayerActionMarker to appear without weapons in your hands, but they're still there and can be selected.

How do you add a key-item from TFE to TSE, for example a golden scarab?

This can only be done via entity script using the SDK. The alternative would be replacing the key models themselves, although they will still keep their names as they're hardcoded in entity code for the KeyItem entity.

How can I find polygons that use a specific texture?

As long as the texture you're looking for is in your virtual tree, you can right click the texture and click "Select by texture(s) in world)":

Serious Modeler

Questions and answers about usage of the Serious Modeler tool to compile models and animations to a format Serious Engine can read.

What's the procedure for importing a model and its animations from Blender into SED1 via Modeler?

TBD

Some models cannot use "custom shading" in Serious Editor. Why is that?

Because the models textures/materials are set to "full bright" (similar to textures in Serious Editor). You can change this in the "Tools info" windows by pressing Q. Select the "Rendering" tab, select either all surfaces or a specific surface by cycling through them with "Tab". Then select "Smooth" in the "Shading" drop-down menu.

Modding SDK

Anything related to the official modding SDK can be found here.

What's the "official" setup for modding Serious Sam?

To be able to mod TFE or TSE, you'll need the following things:

Installing MSVC6 on modern Windows, such as 10 or 11 can be a bit finnicky. Generally, you can ignore any warning Windows will give you about "this application will not work". The following steps should mitigate the most common issues during installation:

  1. Start the installation as usual.
  2. Click on Custom installation when installer will ask for type of installation.
  3. Click on Data Access from available items and then click on ‘Change Option’.
  4. In new window de-select “ADO, RDS and OLE DB Providers” and click OK (ignore the warning).
  5. Click on continue to proceed with the installation.
  6. Installer will not freeze during ‘Updating components’ and will install
  7. Now install the service pack ‘Vs6sp6’ and it will also install successfully.

You might still get errors during installation with a final info stating that it did not install correctly and you should try and re-install. You can ignore this as well, MSDev is now installed and usable. Patch it with the file contents of the Service Pack ISO from the folder COMMON/MSDEV98/BIN.

Visual Studio 6.0 Enterprise

You may also just try and install the whole Visual Studio 6.0 suite, since it seems to come with MSDev and MSVC6. I've personally never tried it, so I'm sticking to the working approach.

Now, for installing the SDK and setting up the basis for your mod, you need to follow these next steps (as described by user ZIM on SeriousSite.ru). We'll choose TSE for this example, but the process is the same for TFE.
Open the SDK archive and you'll see four zip files (replace "SDK107_" with "SDK105_" for TFE):

  • SDK107_DebugBinaries.zip
  • SDK107_EntitiesSE.zip
  • SDK107_Includes.zip
  • SDK107_ModelsSE.zip

These need to be extracted in the following way:

  • Create a folder for your mod's workspace. This folder will be located separately from the game folder. For simplicity we'll go with the follwing path from now on: C:\MyMod .
  • Next, go to the game folder (TFE or TSE respectively) and copy the Bin folder to the new mod folder C:\MyMod.
  • In C:\MyMod\Bin, create another folder called Debug and extract the archive SDK107_DebugBinaries.zip into it.
  • In C:\MyMod, create a Sources folder and extract SDK107_EntitiesSE.zip there.
  • Extract SDK107_Includes.zip to the same folder (C:\MyMod\Sources).
  • Do the same with SDK107_ModelsSE.zip.
  • Extract the archive containing the DirectX 8.1 Headers & Libraries to C:\MyMod.
  • Go to C:\MyMod\Sources and copy Engine.lib and EngineGUI.lib to the C:\MyMod\Bin folder.

Your mod folders should now like this:
Sources:

Bin\Debug:

Witht that, all the necessary files are in place. For builds to work, you need to define the necessary environment variable:
Right-click "My Computer" and select Properties , then click "Advanced ," then click "Environment Variables ." A new window will appear. Click the "New" in the "Variable Name" button at the top, name it ENGINE_DIR and set the value to the following path: C:\MyMod\Sources

You can now go ahead and launch Microsoft Visual C++ 6.0 (or MSDev for short) and create a workspace for your mod following the next steps:

  • Click on "File - New"
  • Click the Workspaces tab. In the Location field, enter the location of your mod (C:\MyMod\) and add the name "Sources"
  • Click on "Project - Insert Project into Workspace..."
  • Add the EntitiesMP.dsp file from the C:\MyMod\Sources\EntitiesMP folder
  • Do the same with the GameMp.dsp and GameGUIMP.dsp files: Your workspace should now look like this:
  • Click on "Project - Dependencies..." and ensure the following dependencies are set
  • Entity MP - everything unchecked
  • Game MP - only EntitiesMP checked.
  • GameGUIMP - only GameMP checked.
  • Click on "Project - Settings..."
  • Click the "Custom Build" tab on the far right. Now in the "Commands" box, delete the bottom two lines containing the .lib and .map files
  • Click on "Tools - Options"
  • Click on the Directories tab. From the drop-down "Show directories for:", select Executable files and add the following path to the list: C:\MyMod\Bin
  • Select "Include files" from the drop-down and add the following paths to the list: C:\MyMod\Bin, C:\MyMod\Sources
  • Select "Library files" from the drop-down and add the following paths to the list: C:\MyMod\Bin, C:\MyMod\Bin\Debug
  • Click on "Build - Set Active Configuration..."
  • Select "EntitiesMP-Win 32 Release"

Lastry, press F7 to compile the EntitiesMP project. If the build succeeded, the new EntitiesMP.dll can be found in the C:\MyMod\Sources\Bin folder.

If the compiler outputs:

Code listing:
Copying EntitiesMP binaries to C:\MyMod\Bin
Error executing d:\windows\system32\cmd.exe

Then in "Project - Settings... - Custom Build", in "Commands" change $ENGINE_DIR to C:\MyMod\Sources and/or run Microsoft Visual C++ 6.0 as administrator. If you encounter other errors after configuring the SDK, try "Build - Rebuild All".

If everything is set up correctly, the build console should output all the .cpp files being build and end with:

Generating Code...
Linking...
Creating library Release/Entities.lib and object Release/Entities.exp
Copying Entities binaries to C:\MyMod\Bin

Entities.dll - 0 error(s), 0 warning(s)

Edit

Pub: 09 Nov 2025 21:56 UTC

Edit: 13 Nov 2025 14:05 UTC

Views: 58