Les Répertoires et création d'un projet
https://developer.valvesoftware.com/wiki/Source_SDK_Files_and_Directory_Structure
Ce chapitre à pour but de vous expliquer comment marche le système de fichier d'un jeu qui marche avec le Source. Pour placer correctement vos différentes ressources, il faut crée un fichier GameInfo.txt pour indiquer de quel type de jeu qu'il s'agit.
📁 Répertoire Racine
Les jeux source on ce système de répertoire
Le Dossier Bin, possède les outils et les bibliothèques du moteur, aller ici pour trouver Hammer.
Le dossier avec les données (hl2 pour Half-Life 2, left4dead2 pour Left4 Dead 2, etc.)
Vous pouvez trouver les fichiers de votre jeu sur les paramètres devotre jeu Steam, cliquer sur l'engrenage puis sur fichiers locaux.
-Des dossiers de données supplémentaire lier au langues ou DLC (ce n'est pas très important pour le moment)
📁 [Jeu Source]
├── 📁 bin/ ← Outils et DLLs du moteur
│ ├── hammer.exe (Éditeur de maps)
│ ├── hlmv.exe (Model Viewer)
│ ├── studiomdl.exe (Compilateur de modèles)
│ ├── vtex.exe (Compilateur de textures)
│ └── vbsp.exe, vvis.exe, vrad.exe (Compilateurs de maps)
│
├── 📁 [nom_du_jeu]/ ← Données du jeu (hl2, csgo, tf, etc.)
│ ├── gameinfo.txt
│ ├── 📁 maps/
│ ├── 📁 materials/
│ ├── 📁 models/
│ ├── 📁 scripts/
│ └── 📦 pak01_dir.vpk (Archives compressées)
│
└── 📁 [nom_du_jeu]_[langue]/ ← Fichiers de localisation
└── 📦 resource/

Création de projet et répertoires des données
(Si ces dossiers n'apparaissent pas, c'est normal, ils sont pour la plupart compressé en .vpk)
Dans les fichiers du jeu dont nous voulons en faire un mod crée un dossier avec le nom du mod dans notre exemple, nous allons l'appeler "custom"
⚠️ Important : Le nom ne doit contenir que : - Lettres minuscules (a-z) - Chiffres (0-9) - Underscores (_) - Pas d'espaces, pas de caractères spéciaux

Dans ce dossier, nous allons créer plusieurs dossiers voici leurs utilités
📁 [votre_mod]/
├── 📄 gameinfo.txt ← OBLIGATOIRE
│
├── 📁 bin/ ← DLLs du mod (code compilé)
│ ├── server.dll (Logique serveur)
│ └── client.dll (Logique client)
│
├── 📁 cfg/ ← Fichiers de configuration
│ ├── autoexec.cfg (Exécuté au démarrage)
│ ├── config.cfg (Configuration joueur)
│ └── server.cfg (Configuration serveur)
│
├── 📁 maps/ ← Maps compilées (.bsp)
│ └── dm_mymap.bsp
│
├── 📁 mapsrc/ ← Sources des maps
│ ├── dm_mymap.vmf (Fichier Hammer)
│ └── 📁 prefabs/ (Préfabriqués réutilisables)
│
├── 📁 materials/ ← Textures et matériaux
│ ├── 📁 custom/
│ │ ├── ma_texture.vmt (Définition matériau)
│ │ └── ma_texture.vtf (Texture compilée)
│ └── 📁 models/
│
├── 📁 materialsrc/ ← Sources des textures
│ └── 📁 custom/
│ ├── ma_texture.tga (Source texture)
│ └── ma_texture.txt (Paramètres vtex)
│
├── 📁 models/ ← Modèles compilés
│ └── 📁 props/
│ ├── mon_prop.mdl (Modèle)
│ ├── mon_prop.vvd (Données vertex)
│ ├── mon_prop.dx90.vtx (Optimisation DirectX)
│ └── mon_prop.phy (Collision physique)
│
├── 📁 modelsrc/ ← Sources des modèles
│ └── 📁 props/
│ ├── mon_prop.qc (Script de compilation)
│ ├── mon_prop.smd (Mesh)
│ ├── mon_prop.blend (Fichier Blender)
│ └── 📁 textures/
│
├── 📁 particles/ ← Systèmes de particules
│ └── my_particles.pcf
│
├── 📁 resource/ ← Interface utilisateur
│ ├── 📁 fonts/ (Polices)
│ ├── 📁 flash/ (Scaleform UI)
│ ├── GameMenu.res (Menu principal)
│ └── closecaption_*.txt (Sous-titres)
│
├── 📁 scenes/ ← Scènes de dialogue
│ └── npc_scene.vcd
│
├── 📁 scripts/ ← Scripts du jeu
│ ├── weapon_mygun.txt (Définition arme)
│ ├── npc_sounds.txt (Sons NPCs)
│ └── surfaceproperties.txt (Propriétés surfaces)
│
├── 📁 sound/ ← Fichiers audio
│ └── 📁 custom/
│ └── mon_son.wav
│
├── 📁 media/ ← Vidéos
│ └── intro.bik
│
├── 📁 expressions/ ← Expressions faciales NPCs
│ └── npc_expressions.txt
│
├── 📁 save/ ← Sauvegardes
│ └── autosave01.sav
│
Les dossiers sources (modelsrc, src, materialsrc) sont uniquement destinée aux développeurs. Ils contiennent les fichiers non compilé pour le moteur.

📄 Le fichier GameInfo.txt
Dans le dossier de votre mod, vous devez avoir un gameinfo.txt qui contient les informations primaires de votre mod (Titre, SearchPath, etc...).
Le fichier gameinfo.txt décrit votre mod. Il contient des métadonnées comme le nom du mod, un lien vers votre site web et un manuel, et définit comment on peut y accéder. Ce fichier est stocké dans le dossier principal de votre mod, et il fait office de marqueur pour Steam, Source et le Source SDK pour détecter son existence.
Le fichier gameinfo.txt est obligatoire. C'est la carte d'identité de votre mod.
Structure de base
"GameInfo"
{
game "Mon Super Mod" // Nom affiché dans Steam
title "Mon Super Mod" // Titre dans le menu
type singleplayer_only // Type de jeu
gamelogo 1 // Afficher le logo
developer "Votre nom" // Développeur
developer_url "https://monsite.com" // Site web
manual "https://monsite.com/help" // Manuel utilisateur
icon "resource/icon" // Icône du mod
FileSystem
{
SteamAppId 220 // ID Steam du jeu de base (HL2 = 220)
SearchPaths
{
// Ordre de recherche des fichiers (du plus prioritaire au moins)
game+mod |all_source_engine_paths|monmod
game |all_source_engine_paths|hl2
platform |all_source_engine_paths|platform
}
}
}
Types de jeu disponibles
singleplayer_only → Uniquement solo (Half-Life 2)
multiplayer_only → Uniquement multi (CS:S, TF2)
both → Solo + Multi (Garry's Mod)
IDs Steam communs (SteamAppId)
| Jeu | ID |
|---|---|
| Half-Life 2 | 220 |
| Half-Life 2: Episode One | 380 |
| Half-Life 2: Episode Two | 420 |
| Team Fortress 2 | 440 |
| Counter-Strike: Source | 240 |
| Left 4 Dead | 500 |
| Left 4 Dead 2 | 550 |
| Portal | 400 |
| Portal 2 | 620 |
| Source SDK Base 2013 SP | 243730 |
| Source SDK Base 2013 MP | 243750 |
SearchPaths expliqués
Les SearchPaths définissent où Source cherche les fichiers. L'ordre est important !
SearchPaths
{
// 1. Votre mod (PRIORITÉ MAXIMALE)
game+mod |all_source_engine_paths|monmod
// 2. Jeu de base
game |all_source_engine_paths|hl2
// 3. Épisode 2 (si vous voulez ses assets)
game |all_source_engine_paths|episodic
game |all_source_engine_paths|ep2
// 4. Platform (fichiers système)
platform |all_source_engine_paths|platform
}
Fonctionnement : Source cherche d'abord dans monmod/, puis dans hl2/, etc. Si un fichier existe dans plusieurs endroits, c'est celui du premier dossier qui est utilisé.
Exemple complet : Mod basé sur HL2
"GameInfo"
{
game "My Half-Life 2 Mod"
title "MYHL2MOD"
type singleplayer_only
gamelogo 1
developer "MonStudio"
developer_url "https://monstudio.com"
icon "resource/icon"
FileSystem
{
SteamAppId 220 // Half-Life 2
SearchPaths
{
// Notre mod
game+mod |all_source_engine_paths|mymod
// Half-Life 2 et ses épisodes
game |all_source_engine_paths|episodic
game |all_source_engine_paths|hl2
// Platform
platform |all_source_engine_paths|platform
}
}
}
Exemple : Mod multiplayer basé sur Source SDK 2013
"GameInfo"
{
game "My Multiplayer Mod"
title "MYMPMOD"
type multiplayer_only
gamelogo 1
developer "MonStudio"
developer_url "https://monstudio.com"
FileSystem
{
SteamAppId 243750 // Source SDK Base 2013 MP
SearchPaths
{
game+mod |all_source_engine_paths|mymod
game |all_source_engine_paths|hl2mp
game |all_source_engine_paths|hl2
platform |all_source_engine_paths|platform
}
}
}
Ajouter des custom folders
Pour utiliser le dossier custom/ (comme Counter-Strike: Source) :
SearchPaths
{
game+mod+custom_mod |all_source_engine_paths|monmod/custom/*
game+mod |all_source_engine_paths|monmod
game |all_source_engine_paths|hl2
platform |all_source_engine_paths|platform
}
Cela permet aux joueurs de créer des sous-mods dans monmod/custom/leurmod/.
🎨 Organisation des assets
Conventions de nommage
Maps (.bsp)
[prefix]_[nom].bsp
Exemples:
dm_desert → Deathmatch
cs_office → Counter-Strike
cp_dustbowl → Control Point
pl_badwater → Payload
ar_shoots → Arena
Préfixes courants :
- dm_ = Deathmatch
- cs_ = Counter-Strike
- de_ = Defuse (CS)
- cp_ = Control Point (TF2)
- pl_ = Payload (TF2)
- d1_ = Day 1 (campagne HL2)
Textures (.vmt/.vtf)
materials/
└── [categorie]/
└── [nom]_[type].vtf
Exemples:
materials/brick/brickwall01.vtf
materials/metal/metalwall01_normal.vtf
materials/concrete/floor01_spec.vtf
Suffixes courants :
- _normal = Normal map
- _spec = Specular map
- _ref = Reflection map
- _mask = Masque alpha
Modèles (.mdl)
models/
└── [categorie]/
└── [nom].mdl
Exemples:
models/props_c17/furniturechair001a.mdl
models/weapons/w_rifle.mdl
models/player/soldier.mdl
Catégories courantes :
- props/ = Objets statiques
- props_c17/ = Props City 17
- weapons/ = Armes
- player/ = Modèles joueurs
- vehicles/ = Véhicules
Sons (.wav/.mp3)
sound/
└── [categorie]/
└── [nom].wav
Exemples:
sound/weapons/pistol/pistol_fire1.wav
sound/player/footsteps/concrete1.wav
sound/ambient/wind/wind_hit1.wav
Hiérarchie de priorité
Lorsque plusieurs mods/dossiers contiennent le même fichier :
PRIORITÉ HAUTE
↓
1. Votre mod (monmod/)
↓
2. Custom folders (monmod/custom/*/)
↓
3. Jeu secondaire (episodic/, hl2mp/)
↓
4. Jeu de base (hl2/)
↓
5. Platform (platform/)
↓
PRIORITÉ BASSE
Exemple pratique :
Si vous avez :
- monmod/materials/metal/wall.vtf
- hl2/materials/metal/wall.vtf
C'est la version de monmod/ qui sera utilisée !
🚀 Lancement et test du mod
Méthode 1 : Ligne de commande Steam
- Clic droit sur votre jeu de base dans Steam
- Propriétés → Options de lancement
- Ajoutez :
-game "chemin\vers\monmod"
Exemple :
-game "D:\Steam\steamapps\common\Half-Life 2\monmod"
Méthode 2 : Créer un raccourci
Windows :
1. Trouvez hl2.exe (ou autre)
2. Clic droit → Créer un raccourci
3. Propriétés du raccourci
4. Dans "Cible", ajoutez :
"C:\...\hl2.exe" -game "C:\...\monmod"
Paramètres de lancement utiles :
-game monmod → Charger le mod
-console → Activer la console
-dev → Mode développeur
-windowed → Mode fenêtré
-w 1280 -h 720 → Résolution
-novid → Pas de vidéo d'intro
-nosteam → Pas de connexion Steam
+map dm_test → Charger une map au démarrage
Exemple complet :
"C:\...\hl2.exe" -game monmod -console -dev -windowed -w 1280 -h 720 +map dm_test
Méthode 3 : Source SDK
Pour les mods basés sur Source SDK 2013 :
- Ouvrez Steam
- Bibliothèque → Outils
- Installez Source SDK Base 2013 (SP ou MP)
- Clic droit → Propriétés → Options de lancement
- Ajoutez
-game "chemin\vers\monmod"
Méthode 4 : Hammer Editor
Pour tester rapidement dans Hammer :
- Ouvrez Hammer
- Tools → Options
- Game Configurations
- Add
- Configurez :
- Game Directory :
C:\...\monmod - Hammer Executable :
C:\...\bin\hammer.exe - Game Executable :
C:\...\hl2.exe -game "$gamedir"
Vérifier que le mod fonctionne
Une fois lancé, ouvrez la console (~) et tapez :
version
Vous devriez voir votre mod mentionné. Sinon :
gamedir
Affiche le répertoire actuel du jeu.
✅ Bonnes pratiques
Organisation du code
src/
├── README.md ← Documentation du code
├── BUILD.md ← Instructions de compilation
│
├── game/
│ ├── client/ ← Code client (UI, prédiction, etc.)
│ │ ├── hl2/
│ │ └── custom/ ← Votre code client
│ │
│ ├── server/ ← Code serveur (gameplay, NPCs, etc.)
│ │ ├── hl2/
│ │ └── custom/ ← Votre code serveur
│ │
│ └── shared/ ← Code partagé client/serveur
│ └── custom/
│
└── materialsystem/
└── stdshaders/ ← Vos shaders personnalisés
Lancer le mod
Fait la commande -game «yourModName» (dans notre cas custom)
