Cruelty Squad

Cruelty Squad

108 ratings
An Overwhelming Guide to Building Custom Maps.
By Keith Mason
This guide is not a MODDING GUIDE, but a MAPPING guide. Wanna make that clear. My goal for this guide is to have more map makers in the CruS community. This is a long, tedious, and very frustrating guide, but once you get hanged of it, you can complete a map in no time. There will NEVER be a Workshop, unfortunately. Because this game was never meant to be moddable in the first place. Third-party mods, on the other hand, allows modding and map creation to be a feature.

This guide has been a nightmare to get completed. I've been working on this guide for about a year and a half. So, I hope it's worth the wait. If there are spelling/grammar mistakes or mistakes in general. Please let me know and I'll fix it as soon as I can. I really suck at explaining things, so don't expect this guide to be perfect. Don't be a ♥♥♥♥ about it. If you have questions or need help, go to the Consumer Softproducts Discord[discord.gg].
6
3
6
3
2
   
Award
Favorite
Favorited
Unfavorite
Before Proceeding/WARNINGS
This entire guide is an entire SPOILER for Cruelty Squad.

This guide is still in heavy W.I.P. It's not fully completed.

Clarification: This is only for MAPPING AND NOT MODDING! Modding is out of my league. CruS is also a pain in the ass to get mods working.

From my experiences designing, making, and innovating Cruelty Squad's map. My goal for this guide is to make it easy for YOU to understand. If you think this guide is disorganized and difficult to understand. I recommend you to read trashski's guides if you preferred.

Trashski's (crustyrashky) Guides:

Starting/Setting Up[hackmd.io]

Mapping[hackmd.io]

Before we start, let's talk about Cruelty Squad. Cruelty Squad is made with Godot Engine. Godot is a free open-source game engine with no garbage "Unity Fee" jumbo crap. It's believed that Ville Kallio (AKA Consumer Softproducts) has built this game from the Godot 3.2 FPS Tutorial on the Godot's Documents[docs.godotengine.org]. With his progress in his knowledge of GDScript and Godot. Ville managed to create something that most indie devs are not capable of making. A simple yet very addictive game. Truly a masterpiece. Back to Godot. Godot has its built-in scripting language called GDScript. GDScript is very similar to Python. Godot also has the option for C#, if you prefer. But we are not writing any code and if you do it could break everything. Godot is a good engine for beginners and professionals.

Cruelty Squad levels were built on a map editor called Trenchbroom. Trenchbroom supports only brush-based games, like Quake, Quake II, etc. The file format Trenchbroom uses to contain your level data are .map (We’ll not be using Wavefront OBJ files). But how can you import a map into Godot? That's where Qodot comes in. Qodot does everything to import your .map into Godot. Back to Trenchbroom. Trenchbroom is a very easygoing and understanding program. It took me three days to get it down to the basics. Watch YouTube tutorials to get a basic understanding of how to use. In the later parts of this guide, I will be explaining some of the tools that I use to build my maps and make life so much easier.

Overall, this guide will be time-consuming, confusing, and at times frustrating. But for the dedicated, it is worth the time and effort. With my share of my amateur knowledge on Cruelty Squad Mapping. Anything is possible. Well almost, it's still pretty limited at best.

Don't get overwhelmed by the amount of info is on this guide. Read one page at a time. Go step-by-step. If you get frustrated take a break and work on it later. Or better yet ask for help on the Consumer Softproducts Discord[discord.gg]. Yeah, usually discord severs are ♥♥♥♥♥♥♥, but in the modification section people are pretty chilled. Most of the time.

If you haven't read my guide on how to download custom maps, it's pretty much a requirement:
https://cs2bus.com/sharedfiles/filedetails/?id=2609814184

Have fun! Architect mindset.
Requirements and Optional Programs
Requirments:
Cruelty Squad (obviously):

...you should buy it.

Godot Engine 3.5.2: DO NOT USE GODOT 4!

Download[godotengine.org]

Godot RE Tools:
Download[github.com]

Cruelty Squad Project Setup Tool:
Download[github.com]

TrenchBroom:

Download[trenchbroom.github.io]

Optional:
Notepad++:

Download[notepad-plus-plus.org]

LMMS:

Download[lmms.io]

Gimp:
GIMP Website[www.gimp.org]

Custom Texture Programs: (Optional)
These are Ville's programs that he uses for his hand drawn textures.

Krita:
Website[krita.org]


Affinity Photo:
Website[affinity.serif.com]


Aseprite:
Website[www.aseprite.org]


Procreate:
Website[procreate.com]

Setting up Decompiled CruS and Trenchbroom
1. Making Decompiled Godot of Cruelty Squad

This will access the user all of the files in Cruelty Squad, even some unused stuff.

1. Use the Godot RE Tools; Go to PKC > Explore PCK archive and find where your Cruelty Squad folder is located. Click on the crueltysquad.pck and open.
It'll likely be in your C: Drive. C:Program Files (x86)SteamsteamappscommonCruelty Squad
*Mine, is in my E: Drive, Cause I have two drives.



2. Create a folder for your "Decompiled" version in a folder somewhere and click on "Select This Folder > Create Here > Extract".





3. Now, Open Godot and create a new project. Create an empty folder and select it. Click on "Create & Edit". Exit Godot once after you open it. Drag the files, (your decompiled CS) into the empty folder/Godot project. (Name any of the folder & project folder to your liking.)





4. Open Godot again. You'll be shown your decompiled copy of Cruelty Squad. Open it and boot up DCCruS (Decompiled Copy of CruS). Your screen should have the Consumer Softproducts Intro (Consumerintro.tscn). If not, click on the Project > Project Setting > Run. The main scene should be res://Cutscenes/Consumerintro.tscn.





5. Download This: Cruelty Squad Project Setup Tool[github.com] What this does will decompiled the files in your exported Cruelty Squad These files will do that and makes life SO MUCH easier.

(Back then, you had to manually decompiled with the RE Tools. Which can take hours if you don't know what your doing.)

After downloading the Project Setup Tools, put the "_SETUP_PROJECT_" folder in your CS copy build. Open the "_SETUP_PROJECT_” folder and open the setup_scripts. A CMD will run and wait until all of the files decompile by the BATCH file. It’ll be done once you’ll see "Press any key to continue...".

Please read the read me if your confused.







NOTE: Make sure that on the ConumersIntro.tscn, check the Spatial, in the Inspector tab see in the Next Scene has the path to Cutscene1.tscn. If not, go to FileSystem and find Cutscense1, right click and copy the path into your Next Scene variable. Next, find the Timer Node and into the inspector tab, set the "Wait Time" type 5 seconds.

This might have already been done, but double check.




6. Adding the plugin Qodot. Go to AssestLib and search for Qodot. Press download and install the all of the files.





2. Setting Up Trenchbroom

Mapping[hackmd.io]Original source material by crustyrashky.

1. Now, we'll setup Trenchbroom. Install Trenchbroom and get extract everything into a new folder.



2. On Godot in the FileSyetem in the search bar look for qodot_trenchbroom_config_folder.tres. Trenchbroom Games Folder path find the Games files from your Trenchbroom folder (Trenchbroomgames). Then press Export File and their should a folder in the games called, Qodot.





Make sure that Qodot is enabled. Click on Project > Plugins.



3. Open Trenchbroom, click on New Map > Open preferences. Find your Map folder in your DCCruS.





3. Back to Godot

1. Now we'll add the textures. Firstly, go to your Maps (folder) > Texture (folder) and delete all .png.import files.



2. Download Textures[github.com] and export all .png (textures) into the right folders.



Now, you can actually start creating your own map!

I do not recommend you play testing your map in your DCCruS / in Godot. Play it through the Steam version with the modloader and modbase installed.
Trenchbroom - What you need to know
This part is not a tutorial for Trenchbroom, you can find that on YouTube. This is more to give an idea of what you need to know. An example is the size of your player. I'll be comparing sizes to "grid". I'll be using it like a sort of measurement.

Example Measurements:
Grid 8 (X or Y) X 16 (Z)
X/Y = Length
Z = Height



1. Character:
- Size -
Your Player size is approximately 16(X/Y) X 32(Z) Grid (in-game). On Trenchbroom it's a 16x16 cube. The player will always be facing at the red-ish line.



Spawn the Player Entity cube about 16 grid height. There's a weird bug that the player will spawn and get stuck on the ground. You may or may not get out of that spot. Once you get out and go back to that spot, you'll get stuck again.

For crouching position areas, like vents, holes and secret areas. The recommended size is 16 or 18 (Z) Height grid size.

Vent entrance shown in this example:


For Size comparison. Each color block is about 16(X/Y) x 16(Z)



Prospective:



Standing:



Crouching:



Your jump height is about 16(Z) Grid Height. Crouch Jumping is 24(Z) Grid Height. Crouching height is 16(Z) Grid Height.

2. Adding enemies through Godot.
I recommended you only add the Player (required). Because the in the qodot.fgd file, it does not have all of the enemy roster. You won't have certain factions and types of enemies (Pigs, Skeleton Army, etc). It seems that Ville figured that it was easier to drag and drop enemies in Godot than in TB. Plus, who wants to keep updating the qodot.fgd every time you add an enemy type? When it's just easier to place enemies in Godot.


3. Faces/Textures Groups:
Faces are the textures for placing down meshes.
A classic beginner's mistake is to enable all of the texture packs in Trenchbroom. Adding too much texture packs will cause the map to crash. Only enable the ones that you'll be working with.



Textures that I recommended you to always used are:
textures/base
textures/specials


If you press Shift + LMB (Left click), you'll be able to select a surface of your brush and edit in the Face Inspector. You can edit the Angle, Offset and Scale of a surface if you want too. You can give it a different texture. You should abuse faces when possible and save precious brushes.


You can rotate the face texture by clicking on the ring.


And you can re-locate the texture origin.


Other than that. Use only a certain amount of textures. Don't always try to add every single texture. Try limiting yourself.

4. Size - Door/Entrances - Stairs - Others:
Cruelty Squad overall has basic and weird entrances. You'll be probably thinking, what? I'll just say you can't make a 16x32 grid size doorway. Why? Because because the NPCs won't enter or walk through the doorway because of the NavMesh can't read through it, for some reason... It's really a hit or miss with the NavMesh. The best way to get around it, is by making the door size a bit bigger. Good door size is 17(X or Y) x 38 (Z) grid size.

Otherwise, you can make the biggest you want.

Stairs, my recommended size is 16 (X/Y) x 8 (Z) grid size for each step. You can do make simple and realistic stairs or goofy and unrealistic stairs. In Cruelty Squad you can get away with a lot of unrealistic architecture. Enemies and NPCs can't walk on stairs. Keep that in mind.



Prefect set of stairs. Height is 8, Length is 16. As long if it's between


Furniture. To begin, let's make a table. I make the legs about 2 x (X or Y) 14 (Z) grid size. Copy and paste four more legs and separate them however far you want. For the surface of my table, I cover the distance between how far the legs. Boom! A table.





5. Entity Brushes
Brushes are important in Cruelty Squad's level environments. These Entity Brushes ranges to basic water to annoying af elevators. Read more on the Brushes Chapters. Because there's a lot of entity brushes to go through.

6. Groups
Groups are a combination of meshes to make one object. For example if you make a "golf kart" out of the meshes, if you select all of the parts that makes the golf cart and make it into a group. You can duplicate and make copies of these grouped meshes.

Also you can probably use those meshes into custom vehicle... Go to the Advance Chapters.



1. Select all the meshes that you want to select into a group.


2. Right click and go to Groups. It'll require a name.



3. You created a group of meshes. In TB, for some reason grouped meshes counts as a single mesh for some reason.


Changing or make edits in a group mesh, by double clicking on the mesh and everything except for the grouped meshes will have a blue outline. This means that the outer meshes are locked, you can not edit the outer meshes without editing the grouped meshes. While you are in here, you can add geometry or edit existing meshes in the group. Too exit editing the grouped meshes, double click on the locked meshes.


Use groups! They can make your life easier if you need to duplicate an object or move it to a different location.

7. Layers:
Layers can be important as Groups. Not really required to do. It's important if you want to organized certain parts of the map. For Advance #1 you will pretty much have to use layers.

For example if you want to make where only one layer has civilians, enemies, elevators, or the entire geometry. This will organized your levels better and makes editing them way easier.



To create a layer, click on the plus (+) Icon.
Trenchbroom - Extra Cool Tips and Tools
8. Texture Lock
If you are made a box or a cargo container or whatever. If you want to copy that object and paste it, you'll have an issue that the textures won't stay in place (obvious). This is where the Texture Lock comes into place. For example if you rotate the box the textures will be miss-aligned if not toggled on.



Texture Lock toggled on


Texture Lock untoggled


Too toggle the Texture Lock go to Edit and it'll be at the bottom.


If you use the scaling tool and scale any object with the Texture Lock on. It will stretch out the texture. Looking at official levels, Ville did stretch out a lot of textures.


9. CSG Tools
Yes, the best tool in Trenchbroom.

Convex Merge:
Trenchbroom's Description: The convex hull of a set of points is the smallest convex volume that contains all of the points. In the following animation, two brushes are being merged into one.
Ctrl + J

Before


After


Subtraction:
Trenchbroom's Description: CSG subtraction takes the selected brushes (the subtrahend) and subtracts them the rest of the selectable, visible brushes in the map (the minuend). Since the result of a CSG subtraction is potentially concave, TrenchBroom creates brushes that represent the concave shape by cutting up the minuend brushes using the faces of the subtrahend brushes.
Ctrl + K

Before


After


Hollow:
Trenchbroom's Description: Just select a brush and choose to hollow out the selected brush.
Ctrl + Shift + K

Before


After




Intersection:
Trenchbroom's Description: CSG intersection takes a set of brushes and computes their intersection, that is, it computes the largest brush that is contained in each of the input brushes. Another way to think of this is that intersection takes that part of the input brushes where they all overlap, and creates a new brush that represents that part. If there is no such part, then the input brushes are disjoint, and their intersection is empty. The input brushes are then removed from the map.
Ctrl + L

Before


After


10. The Manual
Please read the Trenchbroom manual. You'll learn way more than this guide. I wished that I included this in the guide long ago. To access the guide, Press F1 in Trenchbroom. I highly recommend to read through the manual and then make your map. So, was the last two chapters of this guide pointless then?

Not exactly.

Why I include these two chapters is because you don't really need to read the whole manual to make CruS maps. But I recommend you do it anyways because it explains everything much better than I could. Second, for some people reading a manual can be very overwhelming for some or most people. So, my idea is to only add enough information to CruS mapping that it doesn't overwhelm the person. I know that's hilarious because the title of this guide. All of the things that I mention in these TB chapters are the tools that I use for mapping and it's not that much.

Trenchbroom - Entity Brushes: Part 1
By right-clicking on any mesh in Trenchbroom while selected, you'll have access to the multiple different features. We'll be focusing on the "Create Brush Entity". A.K.A Brush Entities. These are what make your doors, elevators, triggers, and everything else. Some are easy to add while others requires some work. Every Cruelty Squad level must use at least one entity brush.



Making Grouped Brushes Entity
When I referred to grouped meshes in brushes entities. I mean selecting your meshes and combining them to be a part of the brushes entity. Not actually grouping them. Afterwards, you can grouped them.

Select your brushes that you want to combine.


Next, select a brushes entity. Grouped the object afterwards to make moving and editing the object easier.


Now it's whatever. My only warning is you can't do this to ANY Doors and maybe push blocks.

Removing Brush Entity on Brush
If you want to remove a Brush Entity on your current brush. Select it and right click on the brush. Click on Make Structural.


- Basic Entity Brushes -

-Exit-
This makes en exit in your level. Only apply this entity brush to the exit brush.



-Waters-
Water. Pretty self-explanatory.


Water:
Again, self-explanatory.
There's a bug that you can break the water physics in the game. If you don't grouped the water entity brush correctly the player will have normal gravity, even if the player is in the water. Make sure you grouped your entity brushes correctly to prevent this.

Wrong


Correct


Add the skip textures to the non-surface areas (bottom, left, and right side). The textures that collides with another surface causes annoying flicker.



Toxic:
Water that gives you Toxic Crisis. Otherwise, self-explanatory.


-Ladders-
Ladders is very basic. You can make two types of ladders in CruS. The right side, is a brush made ladder. The left side, you can make a simple single brush texture based Trauma Loop ladder. Both will work fine. The Trauma Loop ladder requires you to enabled the trauma texture pack. The brush ladders requires a certain amount of brushes.
The clear skip mesh is the ladder. Do not make your brush ladder the actual entity brush.


Or you can be creative and make a rope-based ladder. Be creative.


-Killer/Kill Area-
Another self-explanatory entity brush. It's the brush that if you touch, you're dead. There are the spikes in Trauma Loop.


This also can be good for crushers. Since the crushers were bugged in the original coding. Now all they do is clip the player though the map. Adding killers will prevent this issue.


-Destructible-


Destructible:
With enough damage, these brush will break.

Destructible_Armored:
Requires an explosive or armor-piercing bullets to open. Also has text "Small cracks permeate the surface".

Destructible_Static:
I am still confused on what is different between static versus regular destructible.

-Basic Doors-

For doors, please make your average size doors about 18 (X or Y) x 38 (Z). Don't make your doors have complex shapes. Make it either a square or rectangle brush. Do this will all door brushes, even elevator doors and border doors.


-Door-
Basic Doors... Doors can only be open 90 degrees left and are breakable.

-Locked-
Locked doors are pretty much armored destructible. Can be breakable with armor piercing weapons and explosives. You can placed down a Hotel Key (key1.tscn) from Godot and anywhere in the map. The kill will open all locked doors in your map.

-Illusionary-
Illusionary is simple. A Mesh that exist, but has no collision. A fake wall pretty much. NavMeshe's can not baked through theses and can not be taken out of the QodotMap.

*Note: You also can't drag these out of the QodotMap, making it more difficult to implement for enemies to walk through.


-Physic Object-
Yes, this will turn a basic mesh into a physic object. You can combined with these into different shapes.

BTW, these are only have one axis, so placing them at any direction does matter.

Basic Cube Physic Object


Grouped Mesh Physic Object


-Env- (1)
These are Archon Grid (level12.tscn) brushes.


Env_Pushblock:
Obviously the function of the Pushblock from Archon Grid. You can only push at a four direction for these blocks. They can not open the Special Exit brush.

Env_SpecialPushblock:
Same thing as the Pushblock, but has the access to open the Special Exit. Only works if the Pushblock is directly on top of the Special Exit.

Env_Rotation_Y:
Allows a brush or a group of brushes to spins in the Y axis.

-Special Exit-
Requires the Env_SpecialPushblock. This is for the use for the special pushblock. If the special pushblock touches the special exit, both the block and floor will disappear.



-Env- (2)
env_crushers:
Crushers only move on the Z and -Z axis (Up & Down). Originally, crushers were able to kill you by getting crushed. Due to bad coding, these were finicky. Now these do not kill you, once colliding. These will push you through the geometry and clipping you out of the map. The best way to combat this is to make a Skip Mesh with the Killer bush behind or in the mesh. You can add more meshes to the crusher versus just making the one.


You can add additional brushes in your crusher.
Trenchbroom - Entity Brushes: Part 2
-Elevators-

Elevators are very confusing to work with and will often make you think of suicidal thoughts trying to get them to work properly. Seriously, I don't get why they are programmed like this. It's ♥♥♥♥♥♥♥ annoying.

Here's the entity brushes we'll use:
- Switch
- Elevator
- Elevator Stopper

1. Create your elevator. This can be a single brush or you can add multiple brushes. Select your mesh or meshes and find the elevator entity brush.


*NOTE: Create a skip brush that is also a part of the elevator. Make sure it's out-of-bounds or inside a mesh or somewhere the player can't reach. I will explain why later.


2. Underneath your elevator, create a skip brush with the Elevator Stopper entity. Make sure your brush it's touching the elevator.


Drag your elevator to the top of your 2nd floor. Duplicate your first elevator stopper and place this one above your elevator.


3. Create two skip brushes. One for making the button switch and the other is for activating the elevator (A.K.A the Activator). Make sure the activator is above from your switch. Select them and make them both a switch entities.
Making a switch, notice the skip texture overlaying the switch. That skip texture is our switch.


Making the "activator" at the top floor. Notice the selected and highlighted brush. Make sure you highlighted both of the skip brushes and made them to switch entity.


Do the same thing again, and do it opposite.


So, why is the "activator" out-of-bounds? Because they act like switches meaning they're intractable. Let's say if you place one down in the center of your elevator and the player missed the elevator. That activator will be a pointless intractable. It makes your level sloppy.

4. Play test your map. Make sure that your elevator is working properly. For the switches, first activate the elevator and don't get on. Wait until the elevator is done moving. Press the switch and the elevator should go down. If it's going down do the next switch on the top floor.

*NOTE: Adding elevators will cause a ding during the level spawning. This may be because of your elevator isn't properly setup. This can be the stopper is touching the elevator or there is no stopper at all. Whenever that dings appears in your level means something is wrong. That's one of my reasons to not make elevators.

Elevator Doors/Others
*Note: You can can not add additional brushes (grouping) with these type of Entity Brush.

Door:
This elevator door that opens to the -X and -Y axis in Trenchbroom. Plain and simple. Don't make the door and entrance to Lengthy. Because if it goes far enough, the door will not retract back and will get stuck and pressing your interact key again will push the door further. It's janky.


-X & -Y in Trenchbroom:


Door Down:
This elevator door open downwards versus going left. Again, don't make your door too wide, height wise.


Door Objective Close:
In Mall Madness, after killing the Governor the entrance of the door will shut off blocking your way to the exit. This is what that door does. Place this door mesh underneath your ground mesh. You also don't need an elevator stopper.


Elevator Switch Exclusive:
In Trauma Loop, the library elevator uses this brush. This does require the switch and maybe an elevator stopper as well. I always place it down, just in-case. This is great for single uses elevator and or a secret door.


Switch on the other side.


-Border Doors-
These doors allow to be open by the player only having a certain border (difficulty) around the screen. These doors are used for shortcuts and secrets in the game.


DivineDoor: (Divine Light Door)
Door that requires the player to have the Divine Light mode activated to open.

ProfaneDoor: (Power In Misery Door)
Door that requires the player to have the Power In Misery mode activated to open.

Terror: (Terror_Door | HE Door)
Door that requires the player to have the Hope Eradicated. This door will break into torso gibs instead of opening and closing.

-Godwall-
Godwall is the wall back in Cruelty Squad HQ that requires the Holy Scope or changing your resolution to 640x480.









-Destroyer-
Destroyers is a trigger for the player to destroy a destructible mesh. Making for unique pits/traps.

1. Make a separate mesh with the Destructible brush.


2. Make another separate mesh with the skip texture. It has to be touching the the destructible mesh. Set the skip mesh to have the Destroyer brush.


If the players touches/trigger the destroyer mesh, the breakable mesh will destroy the destructible mesh. You can change the size the skip mesh and you can delay the breakage of the destructible mesh.

- Others -

-Invisible Walls (The Skip Texture)-
*Orange means it's selected btw.


Not really an entity brush but it's good to know. Use a solid mesh with the skip texture. That's it.


- Unknown Brushes -
For these brushes, I have no clue... Use these if you want to experiment with these, maybe you'll find out what all of these actually do. I have no clue what these do and how they affect the game in any way.

Group
detail
Custom Textures (Basic)
Making custom textures is really easy to do. Adding them is a bit confusing. The program that I make textures is Gimp. Gimp is a photo editor like Photoshop but without the Adobe ♥♥♥♥♥♥ monthly or yearly price. Don't waste your money on a crap complex program like Adobe products.

If you don't want to create your own textures, that's sort of understandable. But if you need some, go to the Custom Content Cruelty Squad Website:
Custom Texture Archive[crus.cc]

If you want to get ahead of the curve and know more on how to make custom textures stand out more. Please read the Advance 13# and 14#.

Texture Making

Download Gimp:
GIMP Website[www.gimp.org]

If you have Paint+ or Photoshop, those are fine.
yeah, ms paint is fine too...

For textures, you can do a couple of things.

You can take existing textures and change it's hue or other feature if you really wanted too.

*originally the red and cyan tile.

Or you can make your own textures from scratch.


Or you can use realistic textures and edited them until they looked too crusty.


You'll also need to pick a size for your texture.
Texture size is recommended:
32 x 32
64 x 64
128 x 128
256 x 256
512 x 512

There are a couple of effects that were used in texture making.
Difter:


Indexed Colors:


After completing the texture you'll need to implement it into your map.

Adding the Textures

Go to your _debug folder.
Create these folders:
textures > Maps > textures > your_custom_texture_folder
Drop your textures into your last folder.
It should look like this.


*What this should look like


In your Decompiled Copy of CruS, we need to add the textures into your Trenchbroom.
Open your DCCruS.
Open to your Map's folder. Map > textures, now add your your_custom_texture_folder


Now open your Trenchbroom and refresh your textures collection. You'll see your textures folder now enable it.


That ♥♥♥♥♥♥♥ Filter

After you exported your map, you will notice that your textures are blurred, why because the Godot imports textures with it's own filter. Why? I don't know, let turn this ♥♥♥♥♥♥ filter off.


Open your QodotMap and click on the mesh that has your custom texture(s).

Go to the Inspector panel and click on the MeshInstance and go through the surfaces.


Find the surface with your textures.


Click on it and click on the texture (albedo). Uncheck the Filter and MipMaps.


Wow so much better! Save the map.


Custom Skybox

Custom Skyboxes are easy to implement. What I do is make a folder called, "Skybox" and place your skybox into the folder.

The skybox size should be:
1024 x 1024

Christmas Crisis Skybox:

Importing and Exporting your Map into Godot
To import your map into CruS, you need to export your map to CruS

1. In your Window's search bar type, %appdata% in the search bar.


2. Find the Godot Folder. Then app_userdata > Cruelty Squad > levels folder.


Similar to this: C:UsersPCNAMEAppDataRoamingGodotapp_userdataCruelty Squadlevels

If you don't have a levels file, that means you didn't install the the mod base.

3. Create a folder _debug and go to Trenchbroom export your .map file to the _debug folder.


4. Open Cruelty Squad. You'll be open to your map. Press your tab key (stock market key). Two new panels will appear Debug & Level.
*You will be spawn in your map.


Debug: is where you can mess around with your map. You can change weapons and change your implant load out. Change the time and day, and toggle on raining weather.


Level: This is where you can export your level. But, you need to do a bit of tweaking first. You can change the skybox, create thumbnail, change fog distance, etc.
Please select a background in your level tab. If not, the background will be a solid color. I also recommend changing your fog through Godot and not the modbase editor.


After you are done changing your level, save it and export your level. The handler will appear explaining where your level's folder is exported.

5. in your levels folder, your map will appear in your levels folder. Make a copy of your level and drag it to your Godot CS copy project. Now you are ready for Godot.


Decompiled CruS project location. *I personally put them in my MOD_CONTENT folder. But I thinky you can put it anywhere that's in your project's folder.


Open Godot and click on your level's .tscn. You can delete the .map file.
Godot - Adding NavMeshes and Editing World Environment (*False Alarm, thx for understanding)
Godot is really easy to understand if you know how to use it. This is where the fun is at. But first you need to understand how to use Godot.

Basic Godot Tips and Tools:

Scenes
The scenes tab shows whats in your level's hierarchy. This includes QodotMap, WorldEnvironment, Navigation, and Global_Light. For beginners, all you need to worry about is both QodotMap and WorldEnvironment, the rest you can ignore.. for now.

You can drag, rename, copy and paste files in your scenes tab. Even modified a singular node, meaning modifying NPCs, Enemies, Objects etc.



FileSystem
Is where you can have access to all of the games files in your CS copy. This were you'll be doing most of the drag and dropping on all enemies, NPCs and other cool ♥♥♥♥ to your level's hierarchy.

The search bar will you find what ever files you are looking for. This is good for looking up enemies.


Hierarchy
This is where you can access your world. You can pretty much edit and do whatever

The Basic Controls:
Move Camera: W, A, S, D
Change Speed: W (+) Scroll Wheel
"Zooming" Camera: Scroll Wheel
Selecting: Left Click
Looking Around: Right Click
Up & Down: Right Click (+) Q (Up) | Right Click (+) E (Down)



What I like to call "Hierarchy Taskbar or Taskbar" is also important to understand. The underline is what are to most useful and the most important.



Red - Selection
Blue - Move
Yellow - Rotation
Green - Scale
Magenta - Scenes Tabs
Cyan - View

In your Hierarchy, there's a "Perspective" bar. You mostly don't have to worry about this. Turning off Gizmo just hides the collisions/colliders, raycast, and NavMeshes. This is good for getting thumbnails, boost on performance, and getting a clear picture of your level. This does not affect your level in any way.


Gizmo is toggled Off.



Inspector
This is where you can edit the attributes of any object in your level/.tscn. For example, adding custom dialogue to NPCs, changing textures/materials to make unique NPCs/Enemies, and other features. You'll get to toy around in the advance section.


After you you understand Godot, it's pretty simple. These are the tools I use in Godot for mapping. All of these tools will assist you. I am not to familiar wit Godot to learn what other tools or shortcuts do.

Privacy Warning / QodotMap map file
When first exported your level . If your QodotMap has your Computer's User name. This can your legal government name. So be careful. Locate the map file and press backspace until it's all deleted.



If you wanted to be safe, Open your your_level.tcsn with Notepad++ and ctrl + F and type in "map_file" and check if your PC name is deleted.



Adding the NavMesh:
One of the most important thing you want to add in your map is Navigation to your NPCs/Enemies. So they can move around and hunt you down. NavMesh is what does all of that. How much a blessing and a curse to the NavMesh. It's really a hit or miss. What I mean is, the only way to add or "bake" a NavMesh in Godot is to obviously bake it into your world. That's what I'll be teaching.

1. Open Godot and your map. Drag your QodotMap into your NavigationMeshInstance.



2. Before we bake it, make sure you got everything (Civilians, Entity Brushes (Doors, Water, etc), etc) out of the way so that it would not interfere with the baking process.



*Warning: I recommend make a copy of your map before editing these changes. Or you can ignore this step and bake your NavMesh.
3. This part is optional, but it makes your maps more consistent for enemies to navigate through doors and entryways.

Note: Ignore the Geometry section. Focus on Agent and Cell.


Click on the NavigationMeshInstance in the Navigation. Click on both Cell and Agent.

I recommend:
[Cell]
Size - 0.11
Height - 0.2

[Agent]
Height - 1.7
Radius - 0.4
Max Climb - 0.2
Max Slope - 46

Now we bake the NavMesh. If you have done the first step correctly. Click on Bake NavMesh.

No NavMesh


NavMesh Baked


4. After the NavMesh is baked to your map, drag the QodotMap out of the NavigationMeshInstance and drag the left over mesh/collisions back to your QodotMap.


Test out the map in Cruelty Squad and see if it's appears. If not, delete that build and tweak NavigationMeshInstance the settings.

Now you are done with the NavMesh. Now we can add enemies, finally.

Changing Environment:
In Godot, you can change the environment however you like.
1. Select the WorldEnvironment node.


2. Click on the Environment to edit the environment.


This is where you can mess around with everything. I am not going to go into detail. Mess around with the setting. What I must recommend to mostly change are:
Ambient Light,


Fog,


and Ss Reflections.


3. Experiment. Tweak it to your desire. After changing your environment node, save your change in progress.

Some custom maps that are out have an issue of having the ambient lighting colored all black. Please change your color. Because it makes finding doors much difficult, which is a gameplay problem. Making it, more annoying to play your level and enjoying it. It shouldn't be a challenge to find a door because you can't see it, even though it's right in front of you. It's more of a level design issue, than making your level "un-aesthetic as possible".
Godot - Entities Pt. 1: Enemies
Adding Entities (Enemies, Health Pick Ups, etc):

1. In your FileSystem, go to the Entities folder. This is where you can access all Enemies, Vehicles, and other gameplay entities.


2. Go to whatever folder in the entities and click and drag to your level's hierarchy.


3. After the enemy is in your level/map. Make sure he's not clipping or through the geometry/level's mesh. If the entity is, click on the entity and click the move in the hierarchy taskbar and click the green arrow and drag.


You can pretty much do this to anything in the Entities folder.

Enemies

Note: I am not counting re-skinned enemies. Go to Advance 2# if you want to know how to make unique enemeis.

This is just a reference guide of the built-in enemies.

Grunts:

Grunt (E_Grunt.tscn):


Gore Grunt / Meltdown Grunt (E_MeltdownGrunt.tscn)


Security:

Security (E_Security.tscn)


Ship Security (E_Ship_Security.tscn)


Security Nailer (E_Nailer_Security.tscn)


Dogs (E_Dog.tscn):


Knifelord / Knifeguy (E_Knifelord.tscn):


Fleshrats:

Fleshrat (E_Fleshrat.tscn)


Giant Fleshrat (E_Giant_Fleshrat.tscn)


Armored Fleshrat (E_Fleshrat2.tscn)


Elite (E_Elite.tscn):


Flower (E_Flower.tscn):


Zombies:

Zombie (E_Zombie.tscn)


Armored Zombies (E_Zombie2.tscn)


Cops/Police:

Revolver (E_Cop_Revolver.tscn)


Shotgun (E_Cop_Shotgun.tscn)


Psycho / Psykers:

Psycho (E_Psycho.tscn)


Ambassador (E_Ambassador.tscn)


Killerbots:

Killerbot (E_Killerbot.tscn)


Godbot (E_Godbot.tscn)


Assassins:

Cruelty Squad Assassin (E_Assassin.tscn)


Weaker Assassins (Assassin_Weaker.tscn)


House Assassin (House_Assassin.tscn)


Swamp Cult:

Swamp Cultist Revolver (E_Swamp_Revolver.tscn)


Swamp Cultist Sniper (E_Swamp_Sniper.tscn)


Swamp Gasser (E_Swamp_Gasser.tscn)


Orbot / Golem:

Orbot (E_Orbot.tscn)


Bug_Orbot (E_Orbot_Bug.tscn)


Cultist:

Cultist Grunt (E_Cult_Grunt.tscn)


Cultist Machine Gunner (E_Cult_MG.tscn)


Cultist Sniper (E_Cultist_Sniper.tscn)


Office:

Office Security (E_Office_Security.tscn)


Office Machine Gunner (E_Office_MG.tscn)


Grid Crab (Grid_Crab.tscn):


Darkworlder / Creepers:

Creeper Grunt (E_Creeper_Grunt.tscn)


Rocket Launcher Creeper (E_Rocket_Creeper.tscn)


Paratrooper / Shocktrooper (E_Paratrooper.tscn):


Fleshman (E_Fleshman.tscn):


Pigs:

Pig (E_Pig.tscn)


Armored Pig (E_Pig2.tscn)


House Villagers:

House Grunt (House_Grunt.tscn)


House Machine Gunner (House_MG.tscn)


Skeleton Army:

Skeleton Nailer (E_Skeleton_Nailer.tscn)


Skeleton Rocket (E_Skeleton_Rocket.tscn)


Skeleton Sniper (E_Skelesniper.tscn)
Godot - Entities Pt. 2: Civilians and Objectives
This is a list for the NPCs and Objectives that are already made.

This is where I recommend to add Civilians on Trenchbroom. Because one, It's eaiser to drag and drop a bunch of civilians in a group compared in Godot. Two, the Civilian1 and Civilian2 are civilians with swapping random textures.

So why can't I add enemies in Trenchbroom? You can. But, you won't have the some of the variety of different enemies. You won't have the Villagers, The Skeleton Army, Pigs, and many others types of enemies. This also includes targets, props, cars, and many other things. For some reason, Kallio didn't update his qodot.fgd during the making of CruS. It's easier to make them in Godot and drag and drop them in Godot. Which is the easier route, than to just constantly updating his qodot.fgd. That's probably why.

Last thing to note, Do not copy and paste your Civs (In TB and Godot), because they'll have the same line of dialogue from you .json file. So, don't be lazy and spawn them individuality.

Trenchbroom Civilians:

Civilian1 are female and Civilian2 are males.
In-Game:


Workers (E_CivWorker)



Creep (E_Civilian_Creep)



Meltdown Civilian (E_Meltdown_Civilian)



Mutant / Bioslave (E_Civilian_Mutant)



Nude Civilian (E_Civ_Nude_1)



Cultist (E_Civ_Cult_1)



Civilians:
Civilian_1 (E_Civilian.tscn) His textures will swap randomly.


Civilian_2 (E_Civilian2.tscn)


Civilian_4 (E_Civilian4.tscn)


Civilian_Female (E_Civilian_Female.tscn) Her textures will swap randomly.


Civilian_Female_2 (E_Civilian_Female2.tscn)


Civilian_Female_3 (E_Civilian_Female3.tscn)


Training_Civilian_1 (E_Training_Civilian.tscn)


Training_Civilian_2 (E_Training_Civilian2.tscn)


Worker (E_Civilian_Worker)


Cultist (E_Civilian_Cultist.tscn)


Nude (E_Civilian_Nude.tscn)


Bioslave (E_Civilian_Mutant.tscn)


Meltdown Civilian (E_Civilian_Meltdown.tscn)


Creeper Civilian (E_Creep_Civilian.tscn)


Flesh Civilian (E_Flesh_Civilian.tscn)


Objectives:
Civilian_3 / Jerry (E_Civilian3.tscn)


Sigismund (Obj_Pinky.tscn)


G-Tech Nerd (Obj_Nerd_1.tscn)


G-Tech Nerd_2 (Obj_Nerd_2.tscn)


G-Tech Nerd_3 (Obj_Nerd_3.tscn)


Sin Space Engineer CEO (Obj_CEO.tscn)


Cheif / Bouncy Castles (Obj_Cheif.tscn)
You can toggled off the objective. (Go to Advance 2#)


Mangus (E_Cop_Narc.tscn)


Cultist Priest/Landord (Obj_Cult_Leader.tscn)


Nude Target (Obj_Nude_1.tscn)


Nude Target 2 (Obj_Nude_2.tscn)


Nude Target 3 (Obj_Nude_3.tscn)


Swampgod (Obj_Swampgod.tscn)


Elsa (Elsa.tscn)


Michael Brain (E_Flesh_Civilian.tscn)


Bosses:

Abraxas (In Level12.tscn copy and paste) (May be buggy or won't work)


HQ Life Boss (E_Life_Boss.tscn)


Triagon (snake.tscn) (May be buggy or won't work)


Chaos Targets:
Chaos_Objective (Chaos_Objective.tscn)

Godot - Entities Pt. 3: Psychics Objects, Props, and Etc.
I won't go into every entities in CruS. These are just to show what you can add into your level.

Psychics Objects:
This is where I won't cover everything, just mainly the one that affects the gameplay. I won't cover the organs, shell casings and gibs.

Can / Hungry Human Soda (can1.tscn)


Chips / Super Crunchers (chips.tscn)


Coin (Coin.tscn)


Key / Hotel Key (key1.tscn)


Money (Money500.tscn , Money2000.tscn, Money5000.tscn, Money.tscn)

Green is Money500.tscn
Red Water Material is Money2000.tscn
Light Green is Money5000.tscn
Blue is Money.tscn (Template)

Pills (pills.tscn)


Pizza Slice (pizzaslice.tscn)


Random Food Spawn (random_food.tscn) This will spawn chips, soda can, and or nothing. Gizmo must be on in-order to edit.


Vehicles
Please use the New_Car and New_Forklift. Both have the final vehicles script and is way better than the older scripts.

Car (New_Car.tscn)


Forklift (New_Forklift.tscn)


Helicopter (Helicopter.tscn) This is left unfinished and is unusable. The placeholder is the car model.

https://youtu.be/-CGO8pfdAFQ

Props:
Props, easy to understand. Adds more character to your maps. So add them or don't.

Computer (Computer.tscn)


Cop Car (copcar.tscn)


Fatberg Sign (fatberg.tscn)


Full Pizza (fullpizza.tscn) These are editable and will give you health.


Grass (Grass.tscn)


Monitor (Monitor.tscn)


Pine Trees(Pine.tscn and Pine2.tscn)


Slot Machines (Slotmachine1.tscn and Slotmachine2.tscn)


Slot Machine Line (Slotmachine_Line.tscn)


Speaker (Speaker.tscn) This will play the Mall Madness Mall Jiggle. If you want to use the Club Music, open Bonus3.tscn and copy the speaker and paste it to you level instead of using the speaker.tscn.


Swamp Bushes (Swamp_Bush.tscn, Swamp_Bush_Heal.tscn and Swamp_Bush_Toxic.tscn)

Orange Berries are Swamp_Bush.tscn
Blue Berries are Swamp_Bush_Heal.tscn
Green Berries are Swamp_Bush_Toxic.tscn

Toilet (Toliet.tscn)


Trashcans (Trashcan.tscn and Trashcan2.tscn)


Trees (Tree.tscn and Tree2.tscn)


Weapon Slot Machine (Weaponslot.tscn)


Creatures:
Not NPCs, these are along the lines of little pets in your map.

Fish (Fish.tscn) Fish has swimming animation and once you kill it you can pick it up. Also can swim on land. Recommend in water.


Snirby (snirby.tscn and snirby2.tscn) Snirby 1 has no talker while, Snirby 2 has a talker. I recommend using Snirby2. Both are the same model and animation.


Souls:
These are what those orbs for changing that difficulty. Cool uh?

The Soul Restorer / Divine Light (Soul_Restorer.tscn)

The Hope Eradicator / Hope Discarder / Hope Eradicated Orb (Hope_Discarder.tscn)




Grenades?
I mean placing any grenade on a map will instantly explode. So what's the point. This part is in response of Advance 2#. Go read the Advance 2# and find where I talk about adding custom gibs to an enemy. The item must be in your level. You can find grenades in the Bullets folder.

Use either the Explosive Grenade (Explosive_Grenade.tscn) or use the Flechette Grenade (Flechette_Grenade.tscn). The other


Now move them far away from the level. Because the sound of the explosions will be present during spawning.

Read the rest of Advance 2# if you want to add custom gibs or other cool features.
Finishing Touches/ .json File
Now the finishing touches for basic mapping skills. Use any text base program (like NP++) to open .json files.

(An example from my level Financial Ruins)


"author": AuthorName,
Your user name or whatever you want to call yourself.

"version": 0.0.0,
Version of your map.

"description": "Lol, this guide sucks lmaaaaaooooooooo",
Your in-game description. (Handler reading out your objective).

"objectives": [ "Kill Mr. Poopoo cus he suxs" ],
Your objective/targets.

"level_scene": "YourMap.tscn",
Your .tscn file.

"image": "preview.png",
Your level's thumbnail. (240x240 size)

"music": "YourMusic.ogg",
Level's music. (only plays .ogg sound files only.)

"ambience": "YourAmbience.ogg",
Non-combat music. (something like in Pharmakokinetiks's) (only plays .ogg sound files only.)

"dialogue": [ "Ok", "Cool", "You're Gay", ],
NPC's dialogue. You can make a separate .json file that contains NPC's dialogue.

"reward": "1000",
Completed mission reward.

"fish": [ "FISH", "BRNY", "DEAD" ],
Fishes available in your map. (Go to The Fish Reference chapter to insert fishies in your map.)

"ranks": { "normal": [ 0, 0, 0 ], "normal_stock_s": 0, "hell": [ 0, 0, 0 ], "hell_stock_s": 0
({ "normal", "normal_stock_s", "hell", "hell_stock_s" })
In order, S, A, B, ranks; calculated in milliseconds.
stock_s: S rank for Stock Weapons (Starter Suppressed Pistol & SMG); calculated in milliseconds.
Milliseconds Calculator[www.unitconversion.org]
Fish Reference
Fishers like me want to have fishies on our maps. To make life easier for everyone I made a list. Open the .json and go to the Just copy the four digits, including the the quotations, and add a comma at the end. Press enter to add the fish.

NOTE: If you misname a fish, your game will crash.

Example: "fish": [ "FISH", "BRNY", "DEAD" ],

List of Fish "FLSH" - "Fleshrat" "CIV " - "Civilian" "BRNY" - "Brainy" "POOL" - "Poolsucker "BRST" - "Brimstone" "DRMP" - "Drimp" "GLOM" - "Gloomoid" "SMLL" - "Smallman" "BIG " - "Bigman" "FISH" - "Fish" "NGHT" - "Nightfreak" "ZOOP" - "Zooper" "CARB" - "Carabino" "MOON" - "Moonfish" "EEL " - "Eel" "FLND" - "Flounder" "GFLD" - "Gigaflounder" "BLRP" - "Blurpo" "HYDR" - "Hydra" "PSYK" - "Psychofish "BNCY" - "Bouncy Castles" "UNI " - "Unidor" "NOCT" - "Nocter" "HUMN" - "Human" "BUBL" - "Bubblefish "FRAG" - "Fragfish" "FLIP" - "Flippy" "SKIP" - "Skippy" "GRAB" - "Grabshark" "DLPH" - "Dolphin" "OCTO" - "Octorsaur" "HEXA" - "Hexasaur" "SLRP" - "Slurper" "PIPE" - "Piper" "BOG " - "Bogdo" "SBOG" - "Super Bogdo" "SWMP" - "Swampsucker" "SPKE" - "Spiker" "GEEL" - "Gunk Eel" "LUCK" - "Lucksucker" "BNBO" - "Bonbo" "WLTH" - "Fish of Wealth" "COIN" - "Coiny" "WOF " - "Wheel of Fortune" "PAIN" - "Wheel of Pain" "ZIPP" - "Zippy 3000 (broken)" "AGON" - "Agon" "BRRN" - "Bororian" "CREP" - "Creep" "DLTA" - "Deltaforce" "ETRN" - "Eternity Slurper" "DOS " - "DOSFish" "MSTK" - "Mistake" "SCCS" - "Success" "SUN " - "Sunfish" "CUBE" - "Cubert" "GLRM" - "Glurm" "DFSH" - "Darkfish" "DSLR" - "Darkslurper" "DSCK" - "Darksucker" "ICE " - "Icefish" "ICBE" - "Ice Cubert" "BLSM" - "Blossom" "CHTH" - "Cthonner" "HEAD" - "Head" "POND" - "Pondman" "HELI" - "Helipod" "ENGN" - "Engine of Chaos" "DEAD" - "Dead Fish" "TRNC" - "Tracer" "FUZZ" - "Fuzzoid" "SOUL" - "Soul"

"Fleshrat" - "FLSH"


"Civilian" - "CIV "


"Brainy" - "BRNY"


"Poolsucker" - "POOL"


"Brimstone" - "BRST"


"Drimp" - "DRMP"


"Gloomoid" - "GLOM"


"Smallman" - "SMLL"


"Bigman" - "BIG "


"Fish" - "FISH"


"Nightfreak" - "NGHT"


"Zooper" - "ZOOP"


"Carabino" - "CARB"


"Moonfish" - "MOON"


"Eel" - "EEL "


"Flounder" - "FLND"


"Gigaflounder" - "GFLD"


"Blurpo" - "BLRP"


"Hydra" - "HYDR"


"Psychofish" - "PSYK"


"Bouncy Castles" - "BNCY"


"Unidor" - "UNI "


"Nocter" - "NOCT"


"Human" - "HUMN"


"Bubblefish" - "BUBL"


"Fragfish" - "FRAG"


"Flippy" - "FLIP"


"Skippy" - "SKIP"


"Grabshark" - "GRAB"


"Dolphin" - "DLPH"


"Octorsaur" - "OCTO"


"Hexasaur" - "HEXA"


"Slurper" - "SLRP"


"Piper" - "PIPE"


"Bogdo" - "BOG "


"Super Bogdo" - "SBOG"


"Swampsucker" - "SWMP"


"Spiker" - "SPKE"


"Gunk Eel" - "GEEL"


"Lucksucker" - "LUCK"


"Bonbo" - "BNBO"


"Fish of Wealth" - "WLTH"


"Coiny" - "COIN"


"Wheel of Fortune" - "WOF "


"Wheel of Pain" - "PAIN"


"Zippy 3000 (broken)" - "ZIPP"


Fish Reference Pt.2
"Agon" - "AGON"


"Bororian" - "BRRN"


"Creep" - "CREP"


"Deltaforce" - "DLTA"


"Eternity Slurper" - "ETRN"


"DOSFish" - "DOS "


"Mistake" - "MSTK"


"Success" - "SCCS"


"Sunfish" - "SUN "


"Cubert" - "CUBE"


"Glurm" - "GLRM"


"Darkfish" - "DFSH"


"Darkslurper" - "DSLR"


"Darksucker" - "DSCK"


"Icefish" - "ICE "


"Ice Cubert" - "ICBE"


"Blossom" - "BLSM"


"Cthonner" - "CHTH"


"Head" - "HEAD"


"Pondman" - "POND"


"Helipod" - "HELI"


"Engine of Chaos" - "ENGN"


"Dead Fish" - "DEAD"


"Tracer" - "TRNC"


"Fuzzoid" - "FUZZ"


"Soul" - "SOUL"
Using Stock Music / Custom Music
Consumer Softproducts uses a free DAW program called LMMS. Find a YouTube tutorial and or experiment making melodies. I've made a couple of tracks for my levels, which is not easy to do (for me). Use effects like reverb, equalizer, and other music effects.

Website[lmms.io]



What makes thing interesting is the SoundFont that he used. As we know so far he used,

PC-98 Eve Brust Error SoundFont.
https://musical-artifacts.com/artifacts/1258

Stock Sounds
https://freesound.org/
(Ville used sounds here for)

Triple Oscillator module
In LMMS

Other sounds/soundfonts are missing/unknown



If you have musical talent and want to make music, go ahead. I think it'll be somewhat easy.
If you can't find any custom music then use the vanilla music. There's nothing wrong with vanilla music so don't be embarrassed.

Using Stock Music
You can use stock music in-game without having to download the OST on the internet.

In your level.json file, you can create a path to find which track you want to use.
Example:
"music": "res://Sfx/Music/punishment.ogg",

The rest of the soundtrack can be seen here:


For lazy ppl:
"music": "res://Sfx/Music/_.ogg",
Bugs, Glitches, and Troubleshooting
Texture Flickering Plague

This flicker is likely cause by too much brushes and textures on the map. The flicker looks like when two brushes are overlapping together. When the case, it's not.

When I first encountered this annoying glitch, I didn't mind it as much. Because I though maybe Godot Or Trenchbroom might of exported it wrong. After I exported my level a couple of more time, I notice that there's more of these flickering textures on my map. So I abandon that map. Until I realize I found a way to bypass this flickering bug.

My guess of the cause, there might be too much mesh or and textures on one .map. If you encounter this glitch, stop working on your .map and make a separate .map (new map) and continue through there.

Go to Advance Section 1#.

Why isn't my level showing in the main menu?
Make copies of your level! There are a lot of reasons why your level may not load.

- The NavMeshes are being picky and refusing to work. (If you tweaked them)

- If your QodotMap is in the NavigationMeshInstance, take your QodotMap and put in your Level Spatial node.

- Using a text editor to tweak or give attributes to objects in your level. You may of misspelled or given the wrong variables. Check and make sure you spelled it right.

- If you have too many brushes or textures on your .map.

- Sometimes it just refuses for some reason.

Again, always make copies!

I think there's more that I can't think of at this moment. You got to remember, these third-party modding tools are janky at best. As long if it works and there's work around, than it's not really much of an issue. Right?

Modbase issues.
Like in my other guide. It's the same issues here.

- Levels might not appear because there's too much levels in the level's folder.

- Storm environment will break the fog, lighting and glows to custom levels It. How to fix it is by restarting the game.
*NOTE: If you exported your level and if your skybox is gray. Quit out your game and enter your level.

- And sometime the fog, lighting, and glow randomly disappears. (Again, restart the game.)

- Deactivating HE will still keep the HE fog and skybox. (Again, restart the game.)

If you need assistance, please go to the Consumer Softproduct's Discord and go to the Modifications channel.
Consumer Softproducts Discord[discord.gg]
My Map Making Philosophy
DX on Discord was asking me what map tips and tricks for map creation. Which lead to this. I've edited it so it's somewhat more cleaner and adding more "opinionated rules". I may repeat these rules in previous chapters.

1. If making a big level, please add lots of health items and place fewer enemies. I am a hypocrite with this rule. Some people hate bigger maps because when you die, you’ll respawn at the beginning. It can be frustrating to most players to travel from points A to B again. (Golf Resort for example).

1a. For bigger maps, please don’t add Hell targets. Chaos targets are fine just use them sparingly and to make it more easy for the player, make it where it is in front of the player's path to the OG target.

1b. Just don't make big maps.

2. For stairs, make sure the steps are about 8 in height. Widths should be 16 at a minimum and a length of more than 16. Guard rails should be about 17 or 16 or 15 (Z) in height.

3. Doors are ♥♥♥♥♥♥♥. Why? Because the navmeshes are ♥♥♥♥♥♥♥ stupid in Godot 3.X. Doors are frustrating to work with and get right. The minimum size doors for my preference is 38 (Z) Height and 19 (X or Y) width, for the minimum. You can probably get away with lowering it by a bit but I don't trust Godot's stupid ♥♥♥♥♥♥♥ retarded generate NavMeshes. (Thank god Godot 4.0 you can manually set NavMeshes down.)

4. Civs don't require Navmesh but enemies do. Enemies can not walk on small brushes. For example, if you place an enemy on a flat surface (Always create flat surfaces for enemies) and have another brush and the height is not the same as the surface that the enemy is on will cause the enemy to get stuck. This will happen with any height difference, even if it’s 0.50 height.

5. MAKE COPIES OF YOUR OLDER BUILDS! If for some reason your level won't load up to the main menu (which happens a lot!) you may have to redo all of that progress. Which will suck for you.

6. Before you set up the navmeshes, In the Qodot take all of the brush entries (doors, water, destructible, ladder brush, civilians, etc) out of the Qodot spatial and paste them somewhere. Drag the Qodot spatial into the NavigationMeshInstance node.

6a.WARNING LEVEL MAY NOT APPEAR, MAKE COPIES OF YOUR LEVELS. To make the navmeshes work like how Ville set them up there are a couple of tweaks before you generate navmesh. Click on the NavigationMeshInstance and into the inspector tab click on the Navmesh NavigationMeshInstance.

7. The Qodot will have your PC name, which can be a privacy issue. You can remove it in the inspector tab under "map file" by pressing backspace. Or if you have NP++, ctrl + F type "map file" and delete the text. I recommend that method.

8. You don't need your .map in your level folder after completing your level. All you need is the .tscn.

9. Use NP++ for changing character stats (Pizza Golems, Armored Enemies, etc). But first, click on the enemy you want to change. Right-Click and click on editable children. You can change their materials by grabbing the head mesh and torso mesh and going to the inspector to the geometry tab. After finishing, go to NP++ and find (ctrl + f) the character you edited, (Rename the enemy or NPC for easy finding)

It should look like this:
[node name ="Example" parent="." instance=ExtResource ( ... ) ] transform = Transform(1, 0, 0, 0, 1, 0, 0, 0, 1, ..., ..., ... ) Underneath, you can add a bunch of attributes. objective = false hell_objective = true random_spawn = true armored = true armor = 100 health = 100

10. Have multiple exits. Have at least 2 or 3 or more. Unless it's a smaller map then it doesn't matter.

11. Look at vanilla maps for inspiration. I try to make my levels as official as I can. They're your best friend in terms of inspiration for level design. Just look around on Godot.

12. Please work with the World Environment. I am sick of seeing levels with no fog and the basic exported ambient lighting. I don't mind if the level has a very far-distance fog. For example, in Miners Miricals or Paradise. PLEASE CHANGE IT! It makes your map look dull and uninspired. Also using an all-black ambient light ♥♥♥♥♥♥♥ sucks! Some parts of the map will be too dark. Plus, you’ll struggle to find doors and entryways. My biggest pet peeve yet. And it’s literally easy! SO PLEASE CHANGE YOUR ENVIRONMENT!

13. Before exporting your level, pick a background or choose a custom background. Because when opening in Godot the skybox will be black and empty.

14. Make unique architecture. Ville has a thing for unique architecture in his maps. For example the building with the rocket launcher in paradise. Look at the pillars on the first floor for an example.

15. Try to have an enemies limit. Adding lots of Civs will lag people's weaker PCs. Also, use Trenchbrooms Entity Browser only for Civs. E_Civilian1 are Females, and E_Civilian2 are Males. They both have random materials. Every time they spawn will be different.

15a. Add enemies in Godot and not Trenchbroom.

16. Experiment with level design, enemy placement, and item placements.

17. Have a brush limit. Your level will have issues either performance or texture issues. 1500 should be your maximum limit. If you really want to expand your map. Go to Advance 1#.

18. Use Godot 3.3 or 3.5.1 for your mapping process. This is because Godot 4.0 is different than Godot 3.X.

19. Use HE/Hell/RandomSpwan Enemies sparingly. If you add too much will spawn about every time you respawn. Become a “common enemy”. Which gets rid of the point of having HE/Hell/RandomSpwan enemies in the first place. I need to change my habit as well. Try adding less than 10.

20. For Trenchbroom, use CSG Tools. Subtract and Hollow are very useful to make unique rooms and shapes. Also please read the Trenchbroom Manual, it is also useful.

21. While making a building. Not every space needs a room. For example, in Androgen Assault the level is already confusing and maze like. There are a lot of empty spaces for rooms opportunities. So why didn't Ville make rooms out of these? Because of gameplay reasons.

22. Final. Read Trashski's Mapping guides.

Conclusion.
There's a lot of things that you'll suffer while making maps. You'll get confused and that's ok. This is a lot, even for this game and this guide... But I really do love this game. I want to share my knowledge with the community can make their own maps. Hopefully, making better maps than me.

For now this guide is somewhat incomplete. What I need to do to make it better is to:
- Add more Advance methods.
- Add more pictures/redo pictures.
- Re-write, fix errors/mistakes.

Hope this helps. Or give you an idea of how mapping works and understand a little bit of how Cruelty Squad game design. While I don't know how many people would actually start mapping. It'll be interesting after this guide is release (not saying that I influenced people to start mapping). Jokes aside. If people want to contribute to make this game more alive start mapping or maybe modding.
(Pls no multiplayer mods...)

Anyway's remember guys;
Have fun! Architect mindset.

If you really want to have more interesting gameplay and somewhat alter it, in your level. Please read the advance section.

If you need help with anything go to the discord or comment here (may or not respond because of heavy burnt-out.)

BTW, I've been working on this guide for about a year now. I had to do a lot of re-writing and got so burnt-out I took a long ass break before finishing this mess.

The advance sections are optional, there are there to teach you how to do cool gimmicks and make your level stand out a bit. You don't need to follow or do any of the advances.

Enjoy!

Cruelty Squad: Apocrypha Mode

A bit outdated vid.
https://youtu.be/IzphQiaRQMA

Last thing to note. A Cruelty Squad modder/mapper disk0__ is making an improved and moddable version of CruS. This version would make modding much easier and friendlier than the base game. Having a built-in level editor. Allowing making custom shaders and hopefully custom weapons. A cool addition is cool Occluder brush, which will make maps have more of a preform boost.

It's been on alpha for a few months already and right now, a lot of progress is getting made. I may or may not update this guide. I might make a separate guide. Who knows.

Go to the Consumer Softproducts Discord and go to the active threads in the modifications and find the Apocrypha Mode thread if you want to keep up updates.
Advance 1# - Making Enlarger Maps without Texture Flickering Glitch / Adding Multiple QodotMaps into a Level
This part will get confusing, but well worth the effort. There's a "flickering stretched texture glitch" while exporting your map if you have too much geometry. Please have a mesh/geometry limit to prevent this. Your maximum brush work you should add in your maps is 1300. Because this is where the flickering starts being present in your maps. Here's what I mean:

Flickering Bug Example:
https://youtu.be/ce4qwl_LvkM

OR

Overlapping Mesh Mistake
This can happen when there are two different texture meshes are overlapping together. This can be easily fixed by moving or removing one of the brushes. Always double-check your brush work. An example in a official level, Seaside Shock, on the third floor hallway ceiling if you look in a different direction. Civvie 11 has caught this glitch on camera. I always thought it was a well-placed edit, but it turns out that this is an actual overlapping mesh.

In order to fix this issue, you need to open TB and find the overlapped meshes. Select one of them and delete it. This will require you too re-export your map to your _debug folder, re-export your map in the modbase, and back to Godot.





However. If this is not the case and it's the flicker glitch. There are a few ways to avoid this problem. The first method is one of the ways to do so.

Create and Drag in Drop Method:
This method is what I used in my Golf Resort Map. I made a bunch of .maps and imported it into my Golf Map. Sounds easy. But, you may be asking me:

"Why do I have to do this "method" if I want to make a bigger map? Why can't I just continue building my map in one piece? Who cares if there's a bit of this flicker glitch thing, it doesn't affect most of my map."

Ok, I've been working on making maps for this game for about year and in a half as the time I'm writing this. This flicker is a plague in your .map. You may not notices this until it's too late. Every time you place down a mesh, more of these flickers will appear in your map. Even on already placed-down meshes. I thought it was location based issue, but it appears if you have too much meshes in your map.

1. Make a new Trenchbroom Map ( .map)
*I'll be using my crappy Library from Golf Resort for this example.


I'll be referring your second .map as Library. For the simplicity.

2. Complete your "Library".map. Export your Library.map into the _debug folder and Open Cruelty Squad. Then Quit.


3. Go back to your _debug folder. There will be a .tscn. Drag your .tscn file into your custom level folder. Open the debug .tscn file in Godot.


Into your Custom Level


4. Open your .tscn in Godot. Drag the debug QodotMap (will be renamed to QodotMap2) into your current w.i.p. level and move your QodotMap2 into the right position. Do not rotate the QodotMap2 or Re-Scale it in Godot. It will break your Brush Entities (Doors, Breakable walls, etc).


Adjust the QodotMap2 to your liking.


Nice. Now play test it. Too check if there's collision in your QodotMap. Always play test it in your steam version.


5. Drag the QodotMap2 files into your first QodotMap. Then delete your QodotMap2 Node.


Move to QodotMap and delete QodotMap2.


Make sure that you part/building has collision. Then, you can delete the .tscn. Not your main level .tscn.


*You'll have to redo the NavMesh if you already generated it.

Last Resort Method:

*WARNING: ONLY DO THIS FOR YOUR LAST RESORT.

Ok, so this is a bit where you'll get confused. I am not sure if my .map got corrupted due to placing too much meshes or if it's a Qodot issue. I don't know. My Christmas Crisis had an issue that the Lighting and the Ambient color was glitch. Every time I re-export the map to the CruS/modbase, it still had this issue. Bizarre overall. I did found a work-around that solved this particular issue. It's very confusing, but if you have this issue, than it's better than nothing.

World Env Flickering Bug Example:
https://www.youtube.com/watch?v=E2rZZy8g9L4

For this example, I'll be making this plain and generic Team17 map.


1. Create empty .maps. Add the layers that your going to add into this new .map file. Make sure you enable all of the textures that you are using in your main map.


In your empty maps, delete the default mesh and add your layer. Make sure that you name your layer the exact same layer name from your custom map.


Make sure your empty maps have same texture groups from your custom map.


2. Go to your custom level and separate your map into layers. This can be a long process to do, that's why you always separate your maps into layers beforehand. It's good practice. Duplicate/make copies your main level.


3. Save your level and close Trenchbroom. Open NP++ on your main level and your empty maps. Find the layers in your custom map by pressing ctrl + F and look the name of your layer. For this example, T is my layer.


4. Copy your custom map layer geometry code (for bigger maps this will get very long.) and paste it to your empty map layer. You should select from the "classroom" to the second to last bracket.


Empty map. Unedited.


Geometry Pasted.


If you get an error while trying to open your copy on undo everything and try again.

5. Open up your now "non-empty parts" in Trenchbroom. Make sure that the textures are enabled, the mesh is normal, and if your entities brushes are present in your "parts".



If everything is all settled go to the Drag and Drop Method and go through those steps.





This will mean nothing if you don't make big maps. Which is a good thing. This flicker glitch does appear on official levels as well. The few that I notice are from House and Miner's Miracles.

House (Barely noticeable)


Miner's Miracles


If you are confused, all I am trying to say is you levels can be easily bugged if you make your levels too big. Your max brushes on a map should be 1500 at max. Or this bug will appear more.

Holy ♥♥♥♥! I hate typing this stuff in...
Advance 2# - Manual Scripting/Custom Variants of Enemies
Making custom enemies are cool. Changing the enemies textures are pretty cool. Making their gibs into entities.

Textures/Custom Dialogue:
Adding NPC materials is an easy process. Only a few steps to take in order for making an enemy to have a different . As of so far, I don't know how to add custom materials for NPCs.

Method A (Basic Materials):
This part will show how to change and mixed up a NPC/Enemy/Target whatever into a unique creature.

1. Select the NPC/Enemy that you want to change.
*Let use this cultist for example.


2. Right click on him and click on Editable Children.


3. Find the Nemesis nodes and to the meshes head and/or torso.


4. Click on one of the meshes (head and or torso) and go to the inspector side and click and open geometry.

5. Click on Override Material and click on the down arrow. On the "Open a File" go to the to the Materials folder. Select what ever texture you'll like.






*Texture used is seethrough.tres


Method B (Special Materials):
There are special materials made for only an enemy or a target that isn't in the material's folder. But we can still use these special materials.

1. Follow almost all of Method A

Open a level that has a special material.
Example Levels:
Training_Level.tscn (Armored Dog - Red Marble) (Flechette Golem - Flechette Texture)
marble dog

flechette golem


Level6.tscn (Target Golem - Pizza Golem)
pizza golem (I recommend that you use this texture than in the material folder.)


Level11.tscn (Office Target - Cyan Cultist) (Target Paratrooper - Green)
office target 4

green paratrooper


Some NPCs textures are not in the Material folder. Which requires to Editable Children and copy their textures.
For examples:
Armored Zombies
Armored Fleshrats
Armored Pigs
Bug Orbots

2. Copy the material.


3. Paste the material on which ever mesh (head and or torso)
*Used the pizza golem's texture


Now we are completed!

YOU CAN'T MAKE YOUR OWN OR EDIT PRE-EXISTING MATERIALS/TEXTURES IN GODOT YOU MUST USE EXISTING TEXTURES THAT HAS BEEN INTO CRUS. UNLESS IF YOU MAKE A MOD.

Custom Dialogue:

Right click on him and click on Editable Children.


Click on the body node.


Go to the inspector tab and click on the lines array. Click on the arrows or type a number to expand how much dialogue is said.


FYI, Make the text somewhat short. Otherwise a read scrollbar will appear. Which is not good.

Manual Scripting | Adding Variables:
PLEASE DO THIS AFTER COMPLETING YOUR MAP ENTIRELY!!

Requires Notepad++. This is where you can make really ♥♥♥♥ around with adding unique and special enemies. You can enen turn them into objectives, gore up objects gibs, add additional health and or armor, and as well many other things. This requires you to Open the .tscn with Notepad++. Go to whatever enemy node (Grunt, Orbot, Elite, etc) is on your .tscn. Right under the first

Example:


Objective on Enemies/NPC:
objective = true
objective = false
You can turn Enemies and NPCs into targets.

Hell Objectives:
hell_objective = true
This allows Hope Eradicated targets available.

Random Enemies Spawns:
random_spawn = true
This will make certain enemies spawn random. On HE will Always spawn.

Chaos Objective:
chaos_objective = true
You can make your own custom chaos targets. Instead of using the default chaos_objective.tscn.

Health:
health = 100
Will add additional health to enemies or NPC.

Armor:
armor = 50
Will add additional armor to enemies or NPC.

Armored:
armored = true
Toggle on Armored Enemies/NPC.

Permadeath:
permadeath = true
In the CS HQ, special NPCs are enable with permadeath. You can make very unique ideas with this.

NPC Names:
npc_name = "Test_Name"
This only works with Permadeath NPCs. After killing the NPC their name will show.

Custom Gibs:
(Typing this in the guide for some reason will not registered for some ♥♥♥♥♥♥♥ reason... write it yourself.)
This one is more complex...

In Godot, spawn what ever entities you'll like, This can range from enemies, pizza, grenades, etc. Once your item of choosing is in your map. Open your .tscn with NP++ (Notepad++). Find the your object. Press ctrl+F for search and type the name of your object. After finding the object, find the ID number. ( id=0 )

For grenades, make sure that the bomb is far, far away from your map.

The ID number will be different every time. Do not copy the photo ID.



Copy the number and paste it to the ExtResource( "ID" ) . You can add many gibs, by coping and pasting the,
ExtResource( ),

What this should look like.

Advance 3# - Edit Weapons for Enemies
Wait, you can?:
Yes, but here's some warnings. Depending if the weapon is a projectile based weapon and snipers will either crash your game or the enemy will fire but has no sound. Overall, I don't recommended doing this at all unless if you really want to experiment.

Go and read Advance 2# before doing this method.

The enemy must have editable children on. Find the Weapons Spatial and Nemesis Spatial. We need two things, the weapon model/textures and current weapon ID.



Depending on the enemy will be different.

Weapon Models:
Go to the FileSystem and type in real_weapon_pickup.tscn


Click on the eye too see the mesh. Copy the weapon mesh and material. Copy the model fist then the materials next.






Go to your level scene, find the enemy's Nemesis Spatial and look for Cube003 or Cube or Shotgun. Underneath the bone attachment. In this case Cube003, paste the model in the mesh. Under Geometry and in the Material Override paste the material.

Last is the enemy's current weapon.



Weapon Values:

On the Weapon Spatial's, in the inspector tab will have a variable called Current Weapon. What's stupid about this is that it's based on a number value. Which has no name tag. Too make life easier on you, I made an value index on what number is the weapon's function.



0 - Pistol 1 - SMG 2 - Tranq? (Likely will not work) 3 - Shotgun 4 - Rocket Launcher (Will Not Work) 5 - Sniper (Heavy Sniper) (Will Not Work) 6 - AR (G11) 7 - Silenced SMG 8 - Nambu (Revolver) 9 - Gas Launcher (Will Not Work) 10 - MG3 11 - Autoshotgun 12 - Mauser (Silenced Sniper) (Will Not Work) 13 - Bore (Will Not Work) 14 - Mkr 15 - Radiator (Will Not Work) 16 - Flashlight (Likely will not work) 17 - Zippy (Will Not Work) 18 - An 94 19 - Vag 72 20 - Steyr 21 - Dna 22 - Rod (Will Not work) 23 - Flamethrower (Will Not Work) 24 - SKS 25 - Nailer 26 - Shock 27 - Light (Will Not Work)

Gun Sounds:

*NOTE: This may or may not work. Sometimes the sound audio will work hearing the right sounds, but most of the time, there'll be no sounds. This will confuse players on where they're getting attacked. This is why I recommend you to not use these enemies a lot or use none at all.

You probably need to edit the gun sounds. Open the Weapon.tscn and find the one that you need. For this example, I am using the Nailer. (Files name are the real world counter-part. For example, the Nambu is the New Safety M62 and BAG-82 is the VAG-72. Those are just the few.) Find the Nailer's Audio Node. It'll be name Nailer_Sound.


Click on the audio you are selecting and go to the inspector tab and click on the stream and copy that audio.


Go back to your level and click on your enemy's weapon sound (This example, VAG72_Sound), it is located in the Weapon Spatial. In the weapon audio node, go to the inspector tab and on stream, paste your sound.
Fleshman:


Fleshman Weapon sound:


Again, this may or may not work. Honestly, I don't know why it doesn't work. I haven't figured that out.

Try to experiment. I made a cople of my own enemies, for example the Golf Resort "Honor Guard (Paratrooper with the rod texture and equpit with an SKS)" and Fast Food level "Fleshman Worker (Equip with a nailer)" . Don't try to do this with every single enemy either make one of these in your level or none. Either works.

*This Advance method needs more experimenting.
Advance 4# - Turning off the Night Cycle and Darkness
Global Light
There are two types of Global Light scripts The night cycle and mod_base night cycle.

Regular Global Light
*The light color will be white and permanight will be toggled off.


Modded Global Light


You can change the color of the global light. It may or may not work. The global light is very weird. Sometimes it wanna works the other time it does not work.

Darkness
There are three types of darkness in Cruelty Squad. The first is the Paradise Darkness.
The Paradise Darkness works like this, If the player origin is -0.05 or below the Godot's Grid, the level will get dark. Except for the skybox. The music will also shut off unless you get out of the darkness.

To activate, go to the global light and check the Darkness box.


The second is the Darkworld Darkness. This is easy to do. All you need to do is click the eye icon on the Global Light. Done.

The third method is the negative omnilight. Which you can read in the Omnilight chapter.

Permanight
Levels like Idiot Party, Neuron Activators, and Darkworld. Does not get affected by the day and night cycles. Because the Global Light has the Permanight toggled. This does not turn the rain off. This is great if you really hate the day and night cycle. Like me. I like permanight. Really like it.



Rain
I am still trying to figure out how to turn the rain on and off. Yes, it does have to do with the global light. I am not sure how to disable it.
Advance 5# - Custom Cars A.K.A. Mesh Cars
These are drive-able cars. The player can enter or exit these cars. Fully functional. Just like how Nipper did something similar to this with his CS 1.6 func_vehicle maps back in the day. This is like that, but you can't add any cool cannons. But this is good enough.

Renne Renegade Airboat:


Christmas Crisis Snow Jetski:


Grouped Meshes
Please read on how to make group meshes. I am too lazy to re-write and do all of that. Because this guide if ♥♥♥♥♥♥♥ killing me to write and continue. Hope you understand.

Go to: Trenchbroom What you need to know.

Making a Custom Car
NOTE:
*This airboat is from Renne Renegade. I exported the airboat to my Construct map. Just because I don't wanna make another car from scratch.

1. Before you export your .map to your _debug folder. Make sure that your Mesh Car mesh is grouped. Also make sure it's in a spot were the player won't find the original mesh. Out-of Bounds for example.


2. Export your map from the _debug. Open up Godot and your_level.tscn and spawn a car. (New_Car.tscn, not Car.tscn)


3. Toggle on Editable Children to the car.


4. Select your Mesh Car Grouped Mesh. It'll be named so something similar "entity_##_func_group". Click on the MeshInstance "entity_##_mesh_instance" and copy and paste the model to the Car's MeshInstance model.

Copy the Mesh Car Mesh.


Selecting the Car's Mesh.


Pasting the Mesh Car Mesh to the Car Mesh.


5. Start tweaking with the car's children. Adjust the model to your liking. There are a couple of things that you'll need to know.

Car Seats:
You probably won't use these. Do not delete but hide them. All three seats. Click on the eye icons.


BOOM!


Collision Shapes:
In the car there are two collision shapes named, CollisionShape and CollisionShape2. CollisionShape is a Box and CollisionShape2 is a Capsule. I believe this is for player collision. Again, adjust them to your liking, change the length or shape or whatever.


You can add more collision shapes to your car if you like.


Camera:
In the car's MeshInstance there are two child nodes. Camera and Player_Pos. The car's camera is the camera when the player enters the car. Adjust this to your liking.



To make life easier, turn the 2 Viewport on and on one of the Viewport check on the camera preview.




On the Inspector Tab. You can tweak with the camaera's FOV and etc.


Player_Pos:
This is where the player is once entered the car. Adjust this to your liking.



ExitPos:
This is where the player will spawn when exited the car. Adjust this to your liking.



Raycast Wheels:
These Raycast are important. It's what makes the car move. There are four total raycast. You can change how far the raycast are touching. By selecting one of the raycast and and going to the inspector tab and changing the Cast To. You can move the Raycasts Spatial.




If you are making a boat type vehicle make sure that your raycast are is touching the ground. Make sure that water/ocean has only flat terrain.



Car's Script Variables:
Lastly, you can change and edit the Turn Speed and Max Speed. By going to the inspector tab. (Must select the Car's Kinematic Body)



That's all the basic for making Mesh Cars.

Other than cars?
You can apply on group meshes on objects. You can apply this to the Pills, Food, Currency, etc. I DO NOT RECOMMEND DOING THIS FOR NPCS OR ENEMIES.

For this example, I made a popcorn mesh and applying it to the chips item. You may need to clear the material, depending on the item.

Chips to "Bubblegum"


Pills to "PInKGloopTM Sauce":
Advance 6# - Weapon Pickups
Go to any official level that has a weapon pickup. They will go under the name "Spatial". (Even though it is a kinematic body) In the spatial will have a Area3D and a Collision box. Copy and paste the node into your level.



Changing the weapon is easy click on the Area node and in the inspector tab. Click on Current Weapon and pick a weapon. This has all weapons including the less-lethal weapon like the Tranq and the Blackjack (Baton).



The weapon will spawn in-game.
Advance 7# - Lights, Particles and Sounds
Onmilights
Cruelty Squad uses Onmilights sparingly. In Darkworld for example, at the castle there is a blue glow, that's an omnilight.



Omnilights are basic lighting in the Godot Engine. They emit light in a sphere shape.


Spotlights are easy to add. In the Scene tab, there's a plus icon click on it and type Onmilight and click on it.

Now it's in your map. Experiment with the settings now.

Same thing with the Spotlights.




In my custom map Franchise Fiasco, the Global Light made the map a bit darker for my tasting. But there's a work around. Spotlights are a great alternate. Spotlight emit lights in a cone shape. Again experiment to your liking.



With lighting you need to be careful. If you don't want a certain part of the map to have that lighting.


You can make extra darker areas by adding the negative on. On Mall Madness, the area with the zombies uses a white negative spotlight to make the area a bit darker.


Scripted Lights
These lights are scripted so it can do a specific function. Plain and simple.

Police Lights:
In Apartment Atrocity, there's police lights appear in the level. These lights are two spotlight, both blue and red. Pointing the opposite direction. With a script that makes it rotate 360 degrees. Find the coplight.tscn it into your level. There's also a siren sound in the scene.



Club Strobe Lights:
In Neuron Activators, these lights will always be constantly blinking and only be green. You can go to Bonus4.tscn and copy and paste the lights into your map.



Particles
As I know of, there is no world particles in Cruelty Squad. But that does not mean that we can't have them.

Christmas Crisis, what I used in the particles are a sphere with no materials.


I also made a fake fire. (I tried to make it where the player gets ignited. My map won't load lmao.)


1. Go to the Scene Tab and click on the plus icon.


2. Type in particles. Click on the "Particles". Do not use the CPUParticles.


3. Once the node is in the map. Go to the inspector tab and create a ParticlesMaterial in the Process Material. Next, go to Draw Passes and add a Pass. This can be a Shape or a flat surface. (QuadMesh).


4. Lastly, Experiment. Click on ParticlesMaterial and experiment with the settings. Also experiment with the Time.

Time


You can add materials to the mesh. This can be any of the NPC's materials or a water materials, etc.





Sounds
Cruelty Squad uses a lot of environmental sounds. Ranging from Mall Madness, Seaside Shock, Miner's Miracle and plenty of other levels.

I recommend opening an official level and copying and pasting the AudioStreamPlayer3D.
Seaside Shock


Miner's Miracles


Find a Ambience_Emitter (AudioStreamPlayer3D) in a level. Copy and Paste it to your level.


Go to the Inspector Tab and toggle the Playing on and again experiment to get whatever result.


I am not a audio dork so that's all.
Advance 8# - Psycho Camera
Remember in Miner's Miracles in the plain field with tahe weird and unnecessary sniper? You wanna add it to your level? Cool.

IF YOU ADD PSYCHO CAMERAS. DO NOT ADD CARS, IT WILL BREAK THE PLAYER'S CAMERA. IF THE PLAYER ENTER'S THE CAR.

Miner's Miracles

Open Bonus3.tscn and find the Area node. This will contain Camera, Weapon and three collision boxes. The Area's script will conatin the psychocamera.gd.



Copy and paste this into your level.

Collision Boxes

The Collision Boxes are what trigger's the camera to activate. You can add, edit or delete the boxes but you must use at least one box.

For good camera placement, change the Godot's veiwport. Use the other veiwport for the psychocam's cam. This will help you position the camera. You can also change the FOV in the camera's inspector.

Advance 9# - Grid Crab Prop
The Grid Crab prop that I used in my maps is pretty much replacing the mesh from a 16 X 16 Physic Prop Block. That's pretty much it easy-peasy. This will be a trial and error because how weird Godot is sometimes.



Open up the Grid Crab Scene


Copy the Grid Crab's "crab" Spatial. Make sure you do not copy the Area3D Node that is in the crab Spatial.


Open the Physic Prop and hide the Physic Prop mesh and paste the Crab's "crab" Spatial.


Now use the Scale tool and scale it down to the right size. If you have too, use the move and rotate tool to adjust the crab.




Clear the script on the crab.


Open your level and make sure that your textures are shown sometimes for some reason the model will appear grey and missing materials. Other than that if everything works, than hug that Crab.

Advance 10# - Grill
The grill is awkward to implement in your level. Because the grill collision box will always be fixed at one position. Even when you rotate the collision box or the whole node itself.

The only grill in Paradise:


Just drag the grill from the entities folder into your level.


Grill in Level's Scene




If you manage to figure out how to properly edit the Grill's properties please let me know.
Advance 11# - Cop Spawner
Cop Spawners is a Spatial Node with a script. The cops and cop cars will spawn after you kill your objectives. This script was used in Casino Catastrophe (level9.tscn). Pretty simple. However, there’s an issue. If done wrong the cop cars will clip though, including enemies, or placed too high the opposite happens.



Open Level9.tscn and find the Copspawner Spatial in the scene. Copy and Paste it, into your map. Drag the Spatial Node to the location that you are adding.



This part is trial and error. If you have a geometry that is about level with Godot’s Grid. Place the Spatial Node somewhere between 0.8 or 0.88 on the Y-axis. Again, If done wrong the cop cars will clip though, including enemies, or placed too high the opposite happens.



You also need a good amount of space for the Enemies and Cars to spawn. If you need to see how much space, open up or darg the copcrew.tscn to your map and examine the area.



Play you map and kill your targets and look at the cars to see if the cars are on the ground. You can add multiple of these into your map.
Advance 12# - "Telepoorter"
The Telepoorter is basically a trampoline from Idiot Party. The telepoorter is an Area Node with a mesh, collision, and an AudioStreamPlayer. This is to prevent players from easily speedrun the level. This was added in one of the EA patches. Even though you can clip through with High-Performance Mode toggled. If you never touched it before, if the player touches the Telepoorter, the player’s velocity (Y-axis) will accelerate at a high rate. Meaning you go flying.





If you want to add one of these to your map, I recommend adding a telepoorter in an open area. I tried adding one of these in my Franchise Fiasco level in an enclosed space in the meat play place and it was too frustrating to get out of and it constantly plays the AudioStreamPlayer every time a player touches it. Rent-free.

I almost forgot that enemies can also touch the telepoorter and have the same reaction as the player.

Open up Level10.tscn and find the telepoorter in the hierarchy.
Copy and Paste it to your map.



You can now edit the telepoorter. I recommend before importing your map to the mobbase, you’ll make a grouped mesh in TB. That makes editing way easier.



Delete both the existing mesh and collision in the telepoorter. Replace it with your own mesh and collision.



Either copy and paste or cut and paste your grouped mesh and collision to your telepoorter.



Play test your level to see if the telepoorter works. It should work.

https://youtu.be/wxKtONFHtwQ
Advance 13# - Advance Custom Spatial Materials (Polishing Custom Textures) PART 1
In this chapter, we’ll be focusing on polishing some of your custom textures to give it that CruS look to your level. All we’re doing is changing your Custom Textures SpatialMaterials properties. If you read the basic custom texture chapter, this is more in-depth of this chapter.

I highly recommend that you read this guide first while in Trenchbroom Phase versus importing into Godot.

I also recommend reading the Godot 3.5 SpatialMaterial[docs.godotengine.org] It's better on explaining thing than I ever could. I did take stuff from the manual for this guide because of that.



SpatialMaterials are not SHADERS! That’ll be in the next chapter.

How to change properties:
1. After you imported your map into the Decomipled Godot project. Click on your mesh and go to your inspector tab and click on the mesh.

*NOTE: If you have brush entity, it may have to find that brush and click on it. (Water, Breakables, etc).






2. Go through all of your surfaces and find all of the custom textures that you placed. Click on the surface sphere.





Now we are on the Spatial Material's properties. To remove the “filter” (the blurriness) go to Albedo and check-off Mipsmaps and Filter. Now it’s perfect.

Simple Marble Texture

For most standard custom textures that’ll be all. Since this texture is a custom marble texture it’s missing a few things, metallic and roughness.



Metallic:
Metallic gives your texture a metallic look in Godot. The more metallic the less ambient light will reflect the texture. That’s why in Idiot Party the room with the all-black floor is just a marble texture. 0 (default) is not metallic. 1 is very metallic.

The Specular is the amount of reflectivity. The more Metallic, the less this would make a difference. Unless Diffuse Mode is changed to Toon, this will make an impact. Depending on how the texture is set up.


Godot Docs

Roughness:
Gives the texture roughness look in Godot. 0 is reflective while 1 gives it a blur (mixed with metallic properties) and is set to 1 by default.


Godot Docs

There is one last, property that we can change and that is the Diffuse Mode.



Go to the Parameters and the first option we’ll like to change from Burley to Toon. This will give it a glowish highlight of your texture. All of the marble textures have the Diffuse Mode set to Toon.

Whatever setting you’ll like to change is your choice. I’ll show my example for my custom marble textures in Metro Mania. For the rest of the custom marble textures, I copy the same properties.


*In-Godot/In-game


Recommended Flags
We won’t get to all of the flags since most are sort of pointless or they do nothing.


Transparent:
If you have a transparent image, it will default to black instead of transparent. Toggle Transparency and it’ll fix that.

Unshaded:
Makes your textures unshaded. Fog, Lighting, etc. Will not affect the texture if toggled. Removes other properties. (Roughness, Metallic, etc.)

Use Point Side:
When drawing points, specify the point size in pixels. I only recommend if you want a solid color for that particular texture. Not really useful.

Recommended Parameters:


Diffuse Mode:
Specifies the algorithm used by diffuse scattering of light when hitting the object. The default is Burley.
- Burley (Default)
- Lambert
- Lambert Wrap
- Oren Nayar
- Toon





Specular Mode:
Specifies how the specular blob will be rendered. The specular blob represents the shape of a light source reflected in the object. There are five options available.
- SchlickGGX (Default)
- Blinn
- Phong
- Toon
- Disabled





Blend Mode:
Controls the blend mode for the material. There are four options.
- Mix (Default)
- Add
- Sub
- Mul





Ideas Examples:

- Unshaded and "Light Effect"-
This is an easy one. Just click on the unshaded box. Why? Well, if you are looking for a different color than soild white (light1.tres). This is a cool alternative.
Before:


After:


The light effect is easy as well. You need to check off Unshaded and set the Blend Mode to "Add".


If you made a texture like this for your lighting effect:

You'll have an issue with the letters appearing in your material. Just click on the "Use Point Side" option.



- Ice/Glass Like -
This will be like the lighting effect but a little couple of changes. But in TB we'll need a custom texture, I just reused this blue granite texture but, this has to be your custom texture folder. Do not edit or change the based blue granite material. Rename the custom blue granite as well. I think the marble would of been a better choice.

You can use a custom graphic. This is just an example.


The changes I did to this Material is changed the Diffuse to "Toon" and Blend Mode to "Add". The roughness to 0 and decided to use an Emission property to give it a more blue-ish to the ice [Hex color - 0041ff ]. The energy is also gives it that color, I picked 5 but you can select whatever.



The results:

Advance 13.5# - Advance Custom Spatial Materials (Polishing Custom Textures) PART 2
- Custom Glass -
Making custom Glass is also easy. But you need to make a "Temp Texture". We'll use this texture to apply the glass brush in Trenchbroom. We won't be using this texture/graphic in our completed product. That's why it's temporary.


For this example, I'll use this blue one I made.


After completing your map and exported. You'll see your glass textures. Let's get rid of the graphic.


Go to Albedo and click on your Temp Texture and the "Clear". Clear the image and your block will be a solid white.




Next, check off unshaded. Now you can do this both ways, find Blend Mode and pick Add or Sub. I recommend Sub rather than Add, because it give a more saturated color. Your glass now maybe black. To change it, go back to Albedo and go to color. Pick a color of your choosing.

(Blue Glass Sub Color - e5ff00 )



Now you can make glass now. (Not the illegal kind) Pretty easy right?

(Red Glass Sub Color - 00f9ff )
(Orange Glass Sub Color - 00b1ff )



Feel free to use my custom glass temp textures.






- Dither Lighting -
On the level, Neuron Activators the first thing you see are these buildings with a green glow in the windows. This effect is called Dither Lighting.


This texture is called building_2_night. This uses a Next Pass, which is another material inside another material. The next pass is the lighting. But we won't be doing this method because will not make your map appear in the menu. From my experience.


For your dither texture, make sure you are overlaying the sections you want. You can use multiple colors if you like but for this I used the Orange. DO NOT USE TRANSPARENT BACKGROUND AND USE A SOLID BLACK FOR YOUR DITHER TEXTURE.

Jack


Dither Jack


Once it's made put it in your custom texture folder and open Trenchbroom.

- Masking Method -

This is my alternative to get pass the issue. In Trenchbroom, I made this jack-o-lantern. We are going to give it a mask, either slice or make a thin mask of your dither mask. I recommend your width of the mask is as thin as possible (0.125). Make sure the surrounding parts besides your face have a skip texture. It should look like this.


One done and exported, open Godot and find your dither material. Check on "Unshaded", now go to Blend Mode and select "Add".

Now your lighting should have no black background.


Finally we will use the "Distance Fade" property. There will be four options.
- Disabled (Default)
- PixelAlpha
- PixelDither
- ObjectDither

Select the PixelDither option. You can tweak on the min and max distance. Completed, I recommend you do this type of lighting/texture in a darker setting.


A much better picture.


- Material Collection/Next Pass Method -
This method requires to make a Collection. Make sure that


- Animation Textures -



Material/Shader Collection:
This is mainly for adding new custom skins without having to required to mod. I realize you can do more then that... These Collections are a group of brushes that bypasses the issues of putting new custom skins for NPCs, sprites/textures, frames for animated textures, and more. This will allowed the modbase to I guess, "integrate" into CruS without an issue. It's all weird ju-ju magic.

Why can't I just use stuff that is already in my custom texture folder? Honestly, I have no idea.

In summary, if you want to add custom textures without modding this is the best alternative.

Example:


Better Example:

NOTE: All of the bigger meshes are for NPCs while the smaller meshes are for Animations.

I recommend you to place these at a location where you can find them in Godot and hide them from the player.

Another Example, this is what an completed example looks like.


Soon you can add these on NPCs and enemies and other objects. On Advance 14# will go more in-depth on Shaders.
Advance 14# - Shaders and Custom Shaders
Recently, I helped to assist one of the discord moderators (Leia) to finished up her map (Fast Food Frenzy). One of my many tweaks I did in FFF and some of my recent works, I used the swamp water shader in the sewer. It was a plain custom texture but I decided to make it a shader instead which is easy to do but, I am getting a head of myself.

Let's start with the basic.

Please learn how to edit custom textures first before doing shaders.

CruS Shaders

Custom Shaders?

Custom Enemies Shaders
Advance 15# - Swapping NPC's meshes.
Advance 16# - Animation Player
I highly recommend you do your own research on this topic. This section, i'll be teaching you one cool gimmick I did for Metro Mania. That's the train it self. I used an animated player to make an object move. There is a lot of pros and cons with this method. But I'll help you on what you need to know on how things behave and etc.

Translation Keyframes

soon...
Advance 17# - Static or Change Skybox Speed
This one is really easy. Open your my_level.tscn with NotePad++ and press Ctrl F.
Type in, "rotation_speed"

What you'll find is something like this. Change it to whatever you like. 0 is static.


This would be great for levels like DarkWorld or for levels that you think would be better to have a static skybox.
Advance 18# - How to change the WorldEnvironment Node issue.
So, originally I thought this was a "me" type of issue. That it only happens to me. Why I think that is because nobody reported it. It took me a long while to finally understand what's going on. It all has to do with the Global Light and it's script.

What can we do?

Open a new Godot 3D Scene. Click on the plus icon and then click on 3D Scene




Go back to your level and cut and paste your Global Light to the 3D Scene.


*Into your 3D Scene.


The you can edit your WorldEnvironment. Your world may be dark and the NPC shaders are going to be black for now but that's ok.


After you are done tweaking your level's environment SAVE YOUR LEVEL FIRST before putting back your light. After you are done, put your Global Light back with the script.

The script for some reason will reset your colors of fog ambient light, etc. This is the best method of countering this bug.
Advance 19# - How to make Custom Trees.
22 Comments
pickol 15 Feb @ 3:39am 
im getting an error when i open trenchbroom, Some game configurations could not be loaded. The following errors occurred:

Failed to load game configuration file Qodot\GameConfig.cfg: At line 1, column
1: Expected map entry 'materials'
i dont like mirror 18 Dec, 2024 @ 11:28am 
yooooooooooooooooooooooooo thx bro
ouch ow owch ouwch ow ow 14 Jun, 2024 @ 2:11am 
@taufan99 the latest version of TrenchBroom won't work, if you use TrenchBroom's v2021.1-Release then that error will go away
taufan99 12 Jun, 2024 @ 11:40pm 
So I'm following the guide here, but whenever I start TrenchBroom after exporting qodot_trenchbroom_config_folder.tres, I always get this error saying;

"Failed to load game configuration file 'Qodot/GameConfig.cfg': At line 2, column 11: Unsupported game configuration version 3; valid versions are: 7, 8".

Any way to fix this? I'm using GDRE Tools v0.6.2 and TrenchBroom v2024.1, if that matters.
Dounet361 8 Mar, 2024 @ 9:19am 
Not reading allat TL:DR pls
SloppySlime ∫Զ #BBQP 28 Feb, 2024 @ 10:41am 
do you think there is a way to make an entity spawner node? thinking about making an arena/"infinite" level (giving the choice of ending every certain number of waves)
josephmother 25 Feb, 2024 @ 2:29pm 
how do I inport the weapon models into blender?
DyskietkaPodpiczka 20 Feb, 2024 @ 2:06am 
Why do you link to a very old version of GDRE Tools? Does it work better?
guynotfieri real 12 Feb, 2024 @ 4:43pm 
I got a weird issue. Whenever I save my map on Godot, it saves perfectly fine and I can open it back up right where I left off, like it should. But whenever I copy and move the map's folder somewhere else, it reverts back to an older version. Any ideas???
ルタフォリ 12 Dec, 2023 @ 12:16am 
NOTE : I had to remove "Infinite Levels Patch for Crus Mod Base" in order for my debug map to work.