299 lines
11 KiB
Markdown
299 lines
11 KiB
Markdown
# "Materials" in GoldSrc
|
|
|
|
In the GoldSrc games "Material" definitions handle what footsteps and what impact sounds are played against each texture in the game-world.
|
|
|
|
![Generic bullet impact effect in Half-Life](hl_impact.jpg)
|
|
|
|
So when you walk on dirt, you can hear the difference; or when you shoot wood with a gun it will sound like wood.
|
|
|
|
**Note:** While Nuclide supports this for legacy BSP files, please define the surface properties inside your [material](Documentation/Materials/MatOverview.md) using the **surfaceprop** command.
|
|
|
|
## Details
|
|
|
|
Usually, a game in the GoldSrc engine would provide a `sound/materials.txt` file, where each line defines the properties for a single (or a series of) textures by starting with a material id character, followed by whitespace, followed by a name matching pattern.
|
|
|
|
For example:
|
|
|
|
`C CONCRETEWALL`
|
|
|
|
Will give any surface the id **C** if it starts with the name `CONCRETEWALL`.
|
|
|
|
It will also only compare the length of characters of the name above. So for example if you were to define:
|
|
|
|
`C CONC`
|
|
|
|
Then `CONCRETEWALL` would still be marked as concrete, and any other texture that starts with `CONC[...]`.
|
|
|
|
**Note:** In vanilla Half-Life, the second argument (name) can only be 12 characters long.
|
|
|
|
When you then walk around your level, the footstep will then be aware of you being on a texture marked with the **C** attribute and play a different step sound. Games are free to define what those material id characters mean - so different games/mods may interpret it differently.
|
|
|
|
Porting levels can sometimes be a bit more work than it first appears to be at first glance as a result!
|
|
|
|
## Later Enhancements
|
|
|
|
### Community additions
|
|
|
|
In stock GoldSrc games, the `sound/materials.txt` can be overwritten by a modification but it couldn't be dynamically extended in any way.
|
|
This means there was no possibility of map specific materials, and mods could not inherit Half-Life's materials, so mods would always have to manage a nearly duplicate file if they desired custom material definitions.
|
|
|
|
A few mods tried to remedy this problem, the following below are methods
|
|
documented so far:
|
|
|
|
file named maps/MAPNAME.mat
|
|
: Introduced in The Wastes (2003)
|
|
|
|
file named maps/MAPNAME_materials.txt
|
|
: Convention by Andrew Lucas, creator of Trinity SDK, modeled after MAPNAME_details.txt
|
|
|
|
worldspawn entity key named 'materials_file' with the value `PATH_TO/FILE.txt`
|
|
: Introduced in Sven Co-op 5.0
|
|
|
|
**All these methods are supported by Nuclide**, as one goal is to implement
|
|
conventions by not only Valve but the community as well!
|
|
|
|
### Nuclide additions
|
|
|
|
In addition Nuclide has also implemented a way of giving modifications
|
|
their own *inheritable* materials file:
|
|
|
|
`sounds/materials_UNIQUENAME.txt`
|
|
|
|
The idea here is that any mod or even map pack can include ONLY the textures
|
|
used, and no longer will anyone have to manage a near-clone of `sound/materials.txt`.
|
|
|
|
For repackaging or modding purposes, if you desire to give your map custom
|
|
material property definitions, we recommend **The Wastes** its method for individual maps,
|
|
while the Nuclide method should be used for **mods** or **map packs**.
|
|
|
|
**Note:** We recommend only using material text files for GoldSrc related modding
|
|
purposes. It is inefficient for modern projects as there are much better
|
|
standards already supported in Nuclide.
|
|
|
|
# Material List
|
|
|
|
In Nuclide, this is the currently supported list of material IDs:
|
|
|
|
| Material ID | Material Name |
|
|
|-------------|---------------|
|
|
| B | Bloody Flesh |
|
|
| C | Concrete |
|
|
| D | Dirt |
|
|
| F | Flesh |
|
|
| G | Grate |
|
|
| H | Alien |
|
|
| K | Snow |
|
|
| M | Metal |
|
|
| N | Sand |
|
|
| O | Foliage |
|
|
| P | Computer |
|
|
| S | Slosh |
|
|
| T | Tile |
|
|
| V | Vent |
|
|
| W | Wood |
|
|
| Y | Glass |
|
|
|
|
## Game differences
|
|
|
|
Different games/mods can ship with different material properties.
|
|
To make your life easier, you can edit **scripts/surfaceproperties.txt** and define
|
|
which Material ID character maps to which [surfaceproperty](Documentation/Surf_data.md) entry.
|
|
This way you can add new materials to existing legacy maps without writing a line of code.
|
|
|
|
Listed below are definitions for various games and mods. Only the changes and additions are listed since the rest are identical.
|
|
|
|
## GoldSrc Games/Mods
|
|
|
|
### Arrangement
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| B | Blue Texture |
|
|
| N | Snow |
|
|
| R | Red Texture |
|
|
| U | Slime |
|
|
| X | Yellow Texture |
|
|
| Z | Black Texture |
|
|
|
|
### Counter-Strike
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| N | Snow |
|
|
| X | Grass |
|
|
|
|
*Afraid of Monsters: DC, Natural Selection, and Snow War uses the same definitions.*
|
|
|
|
### Cry of Fear
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| B | Random Twig Snap |
|
|
| H | Paper |
|
|
| I | Mud |
|
|
| O | Sand |
|
|
| P | Snow |
|
|
| R | Gravel |
|
|
| U | Grass |
|
|
| Y | Broken Glass |
|
|
| Z | Carpet |
|
|
|
|
### Gunman Chronicles
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| G | Wood |
|
|
| T | Rock |
|
|
| V | Sand |
|
|
| W | Unknown/Unused? |
|
|
|
|
### Firearms
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|-----------------------------------------|
|
|
| B | Sandbag |
|
|
| N | Snow |
|
|
| U | No impact or decals, just smoke effects |
|
|
|
|
### Heart of Evil
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| U | Mud |
|
|
|
|
### Hostile Intent
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| A | Sand |
|
|
| E | Foliage |
|
|
| N | Snow |
|
|
| R | Carpet |
|
|
| U | Mud |
|
|
| Z | Grass |
|
|
|
|
### Household DEATH!
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| H | Wood (Creaky) |
|
|
| I | Grass |
|
|
|
|
### Night at the Office
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| T | Carpet |
|
|
|
|
### Opposing Force
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| O | Snow |
|
|
|
|
*Science and Industry uses the same definitions as Opposing Force.*
|
|
|
|
### Poke646
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| M | Metal/Grate |
|
|
| T | Wood/Tile |
|
|
| G | Carpet/Grass |
|
|
|
|
### Wasteland Half-Life
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| B | Barrel |
|
|
| I | Sand |
|
|
| N | Tinroof |
|
|
| R | Rust |
|
|
| U | Drywall |
|
|
|
|
*The Wastes uses the same definitions.*
|
|
|
|
## Source Engine Games/Mods
|
|
|
|
While Source has materials describing a surface with its own **$surfaceprop** command, the GoldSrc way of describing materials with a 1-character symbol is still used to define which **impact effect** to use.
|
|
|
|
The **Material ID** is used via the `gamematerial` command inside **scripts/surfaceproperties.txt** entries. In Nuclide that's used for compatibility with the GoldSrc system instead.
|
|
|
|
![Bullet impact on Plaster](source_plaster.jpg)
|
|
![Bullet impact on Wood](source_wood.jpg)
|
|
![Bullet impact on Metal](source_metal.jpg)
|
|
|
|
Be aware that a Source engine game may actually have more surface materials than this, these are *solely the IDs associated with impact effects*.
|
|
|
|
### Alien Swarm
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| 11 | Steam Pipe |
|
|
|
|
**Alien Swarm: Reactive Drop uses the same definitions.**
|
|
|
|
### Counter-Strike: Global Offensive
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------------|
|
|
| 11 | Mud |
|
|
| 12 | Sand Barrel |
|
|
| 13 | Sand Barrel (Penetration) |
|
|
| 14 | Metal Shield |
|
|
|
|
### Half-Life 2
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| A | Antlion |
|
|
| B | Flesh (Bloody) |
|
|
| H | Flesh (Antlion) |
|
|
| K | Snow |
|
|
| L | Plastic |
|
|
| N | Sand |
|
|
| I | Clip |
|
|
| O | Foliage |
|
|
| X | Fake |
|
|
| - | No Decal |
|
|
|
|
### Half-Life 2: Episode 2
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| E | Antlion Egg Sacks |
|
|
| Z | Adviser Shield |
|
|
|
|
### Insurgency
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| A | Fruit |
|
|
|
|
*Day of Infamy uses the same definitions.*
|
|
|
|
### Left 4 Dead
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| J | Grass |
|
|
| K | Mud |
|
|
| Q | Asphalt |
|
|
| R | Brick |
|
|
| U | Cardboard |
|
|
| 1 | Clay |
|
|
| 2 | Plaster |
|
|
| 3 | Rock |
|
|
| 4 | Rubber |
|
|
| 5 | Sheetrock |
|
|
| 6 | Cloth |
|
|
| 7 | Carpet |
|
|
| 8 | Paper |
|
|
| 9 | Upholstery |
|
|
| 10 | Puddle |
|
|
|
|
### Portal 2
|
|
|
|
| Material ID | Material Name |
|
|
|-------------------|---------------------|
|
|
| R | Reflective |
|