Tout permuter
=Notes générales
Les entités sont créées dans des fichiers .def. Ces fichiers déterminent les attributs de toutes les entités utilisées dans le jeu et font toutes référence à des classes C++ dans le code.
-
Fichiers de définition des entités
- Les entités
func_
sont définies dans pak000/def/func.def - Le modèle du joueur est défini dans pak000/def/player.def et s'appelle
model_sp_marine
. Le fichier .md5mesh est ici : pak002/models/md5/characters/npcs/playermoves/spplayer.md5mesh - L'entité de la tête du joueur est définie dans pak000/def/heads.def et s'appelle
head_player
. Le modèle est ici : pak002/models/md5/heads/player/player.md5mesh - Les entités non catégorisables sont définies dans pak000/def/misc.def
- Les entités
target_
sont définies dans pak000/def/target.def
- Les entités
-
Création d'une entité
Les entités sont définies comme objets
entityDef
, dans des fichiers .def.On peut déclarer une entité comme suit :
entityDef custom/nom_entité
{
"editor_color" "0 1 0"
"editor_mins" "-8 -8 -8"
"editor_maxs" "8 8 8"
"editor_material" "textures/common/speaker"
"editor_usage" "Texte de description"
"spawnclass" "MaClasse"
}nom_entité
est évidemment le nom de l'entité etMaClasse
est une classe qui hérite d'idEntity. Noter que le nom de l'entité ne doit pas commencer par un chiffre, car cela peut causer des problèmes d'interprétation de scripts.Dans DarkRadiant, cette entité sera visible dans le répertoire avec le nom indiqué ; dans le cas courant, base/custom.
-
L'entité du joueur
Les mesh, les animations et les propriétés du joueur sont définis dans pak000/def/player.def.
Propriétés notables :
pm_walkspeed
: la vitesse de déplacement de base du joueur
=Entités notables
-
Liste d'entités utiles
Dans DarkRadiant, on ajoute une entité à la map en faisant un clic droit dans une vue 2D, en en sélectionnant Create Entity....
func_cameraTarget
darkmod > Func > Movers
func_door
Cette entité a été définie dans le code de Doom 3, et non celui du Dark mod. Elle ne peut donc pas être ajoutée dans DarkRadiant à moins que le dossier des ressources soit celui de Doom 3 (voir la section Game dans les préférences de DarkRadiant). Solution partielle : ouvrir la map dans DOOMEdit, créer l'entité ([clic droit] > func_door
), puis rouvrir le fichier dans DarkRadiantfunc_explosion
Une explosion sans modèle. Pour l'activer, on utilise la fonction de script sys.trigger()
.Note : si l'explosion se trouve à l'intérieur d'un mur, elle n'aura aucun effet sur les entités dans la scène.func_securitycamera
darkmod > Func
func_static
darkmod > Func
monster_zombie_fat
base
target_endlevel
base
target_null
base
La liste suivante offre plus de détails sur certaines entités. Dans les cas où les classes C++ correspondantes ont été confirmées, elles sont indiquées entre parenthèses.
-
info_location
Définie dans : pak000/def/misc.def
Cette entité affiche le nom de la salle dans le HUD du joueur, les salles étant séparées entre autres par des portes.
-
light
Définie dans : pak000/def/misc.def
Notes :
- Les lumières peuvent être redimensionnées de façon uniforme, ou un côté à la fois ; l'option peut être choisie avec le bouton Drag-resize entities symmetrically, en haut de l'écran.
- Une lumière peut être ambiante pour l'illumination globale, si on lui ajoute ces propriétés :
texture lights/ambientlight
noshadows 1
nospecular 1
nodiffuse 1La propriété
_color
devra aussi se voir attribuée une valeur faible. - L'origine de la lumière peut être déplacée pour empêcher qu'elle soit obstruée par le joueur. Il suffit de modifier la propriété
light_center
(un vecteur de trois nombres). - À partir du moment qu'une lumière reçoit une texture (comme
lights/barrelexplode
) à l'aide de la propriététexture
, la propriété_color
est ignorée pour l'affichage.
-
func_beam
Définie dans : pak005/def/func.def
On peut créer un laser semi-transparent qui passe d'un
func_beam
à un autre comme ceci :- Créer deux func_beam (
func_beam_1
etfunc_beam_2
) - Donner à
func_beam_1
les propriétés suivantes :skin
:skins/beam_blue
(par exemple)target
:func_beam_2
Cela affichera un laser bleu qui commencera à l'origine de
func_beam_1
et finira à celle defunc_beam_2
.Note : Je n'ai trouvé que deux skins possibles :
beam_blue
etbeam_red
. Il faudra probablement en créer des nouveaux ; les deux versions (presque identiques) du fichier sont dans :- pak000/skins/skins.skin
- pak005/skins/skins.skin
- Créer deux func_beam (
-
func_cameraview
Définie dans : pak005/def/func.def
Une vue de caméra. Cette entité n'a pas de modèle, contrairement à func_securitycamera.
- Il semble que les func_cameraview regardent dans la direction x positive par défaut.
- Comme les entités qui y font référence, cet objet peut lui-même avoir une propriété
cameraTarget
, qui permet de voir la scène à partir d'une autre entité.
Problèmes rencontrés :
- La vue d'une func_cameraview est croche lorsqu'elle est envoyée à un GUI (mais pas quand on utilise sys.setCamera())
Inspecter la CVar
image_downSize
dans base/DoomConfig.cfg. Elle doit avoir une valeur de 0. - La vue d'une func_cameraview est distordueLorsqu'on applique une rotation libre à une caméra (c'est-à-dire avec la souris plutôt qu'avec l'interface), sa vue peut se distordre.
Réinitialiser la propriété
rotation
de la caméra, et utiliser les boutons dans la barre des gauche, ou l'option Modify > Rotate and Scale... - Si la vue de caméra est appliquée sur un GUI, elle doit avoir l'orientation par défaut. Sinon, le modèle sur lequel le GUI est affiché subira une rotation.
Ce problème réside dans le code C++ du moteur de jeu.
-
func_door
Définie dans : pak005/def/func.def
Notes :
- La porte coulissante fonctionne par défaut en glissant sur l'axe x. Pour changer l'angle (de déplacement) de la porte, lui donner une propriété
angle
(avec une valeur de 90, par exemple). - Si la propriété
locked
a la valeur 1, la porte s'ouvrira lorsqu'elle sera déverrouillée (dans un script, par exemple). Si elle a la valeur 2, elle ne s'ouvrira pas (informations provenant de DOOMEdit).
- La porte coulissante fonctionne par défaut en glissant sur l'axe x. Pour changer l'angle (de déplacement) de la porte, lui donner une propriété
-
func_forcefield
Cette entité pousse les objets qui y touchent dans une direction particulière. Pour en créer une, on sélectionne une brush dans le niveau, puis on fait un clic droit et on sélectionne Create entity... ; l'entité à choisir est bien sûrfunc_forcefield
.Propriétés notables :start_on
: une valeur de 1 assurera que l'entité est active dès le lancement de la map ; avec une valeur de 0, on devra l'activer via une entité triggeruniform
: cette propriété accepte un vecteur (trois nombres séparés d'espaces) pour indiquer un déplacement sur les axes x, y et ztarget
: il est également possible de pousser vers une entitétarget_null
, au lieu d'utiliser un vecteur
On peut faire exploser une vitre (
func_fracture
) dans une direction précise en plaçant lefunc_forcefield
de façon à intersecter la vitre et en activant les deux entités (par un script ou par un trigger).Dans ce cas, ajouter deux propriétés pour affecter correctement la vitre :
applyImpulse
(valeur de 1) etwait
(valeur de .1). D'autres propriétés sont aussi utiles dans d'autres situations ; voir leurs descriptions dans DarkRadiant. -
speaker
Définie dans : pak000/def/misc.def
http://www.iddevnet.com/doom3/sounds.php
Les speaker sont des représentations de sons dans le niveau.
La propriété
s_shader
de l'objet détermine le shader sonore (sound shader) à utiliser. Les shader sonores déterminent le ou les sons à jouer, et leur appliquent des propriétés particulières.Les sound shader doivent se trouver dans le dossier base/sound. En voici un exemple :
loop_deep_01
{
global
looping
sound/soundscape/loop_deep_01.ogg
}Ce shader joue un son ambiant (
global
) en boucle (looping
). Les shaders sonores peuvent jouer des fichiers .wav et .ogg, et peut-être d'autres aussi. -
target_entity_fadeout
Définie dans : pak000/def/target.def
Cette entité sert à faire disparaître lentement une lumière.
On crée l'objet et on règle deux propriétés :
target
(la lumière) et, optionnellement,fadeTime
(le temps, en seconde, de la transition).Il y a aussi l'entité target_entity_fadein.
-
trigger_hurt (idTrigger_Hurt)
Définie dans : pak000/def/triggers.def
Peut contenir quelques propriétés utiles :
def_damage
: l'entité qui représente le montant des dégats subis par l'entité visée (le joueur, par défaut).Valeurs possibles :damage_triggerhurt_100
,damage_triggerhurt_1000
, entre autreson
: si l'entité est active.Valeurs possibles : 1 ou 0
-
trigger_once (idTrigger_Multi)
Définie dans : pak000/def/triggers.def
Les entités
trigger
peuvent appeler directement une fonction de script avec la propriétécall
, ou activer untrigger_relay
avec la propriététarget
.Avec la propriété
call
, utiliser comme valeurespaceNom::fonction
(sans parenthèses ; on ne peut pas passer de paramètres).
=Propriétés notables
Toutes les entités visibles
noshadows |
Désactiver les ombres pour cette entité |
Monstres
enemy |
Le monstre attaquera l'entité avec le nom donné (permet aux monstres de se battre entre eux) |
=Modifications
-
Modifier la vitesse de déplacement d'un personnage
Il y a cinq types de mouvement pour les personnages dans Doom 3. Tous sont définis dans ai_base.script :
MOVETYPE_DEAD
,MOVETYPE_ANIM
,MOVETYPE_SLIDE
,MOVETYPE_FLY
etMOVETYPE_STATIC
.Les personnages qui se déplacent à la marche utilisent
MOVETYPE_ANIM
, c'est-à-dire que la vitesse de déplacement du personnage dépend de l'animation qu'il utilise.Par exemple, l'animation de marche du monstre « Bernie » (l'entité monster_zombie_bernie) se trouve dans pak002/models/md5/monsters/zombies/bernie/fastwalk.md5anim. Au début du fichier, on trouvera la ligne suivante :
frameRate 24
Cette ligne détermine la cadence de l'animation et, par conséquent, la vitesse de déplacement.
Note : Semblerait-il que les mouvements de type
MOVETYPE_FLY
etMOVETYPE_SLIDE
peuvent être accélérés ou ralentis via la fonction de script setFlySpeed() (voir pak008/script/doom_events.script).