Cette partie est un brin plus complexe. Pour des questions pratiques, je vais vous faire de la théorie sur la gestion des rounds avant de vous parler des différents types de maps. Ça me permet de ne pas refaire les théorie de gestion pour chaque type de map, car ces théories sont applicables grosso-modo de la même façon pour les différents types de maps.
Entités |
Type |
Description |
---|---|---|
Point |
Représente un point de contrôle |
|
Bloc |
Zone dans laquelle la capture du team_control_point est possible |
|
Point |
Sert à gérer les points de contrôle. Entité obligatoire pour les maps CT et TC |
Les points de captures sont représentés visuellement par un prop_dynamic pourvu du model models/props_gameplay/cap_point_base.mdl (3 skins disponibles) et d'une entité team_control_point que l'on place au centre du prop_dynamic.
Le team_control_point affiche un hologramme qui indique à quelle équipe le point de capture appartient. Cette entité possède quelques propriétés qu'il est utile de définir :
Name : nom de l'entité, qui servira pour l'entité qui permet de capturer le team_control_point
Print Name : le nom du team_control_point qui sera affiché à l'écran. Mettez ce que vous voulez, mais pensez à le mettre en anglais
Default Owner : l'équipe à laquelle le point de contrôle appartient au début du round. Si le point est neutre, comme le point middle de cp_well, sélectionnez l'option Neither
Index : le numéro du point de capture (ça définit l'ordre d'affichage des points de capture dans le base de l'écran).
Il faut maintenant créer un trigger qui couvrira la zone dans laquelle le ou les joueurs pourront capturer le team_control_point. Ce trigger se définit avec l'entité trigger_capture_area.
Control point : nom du team_control_point
Can RED Cap? : l'équipe RED peut-elle capturer ce point ?
Can Blue Cap? : l'équipe BLUE peut-elle capturer ce point ?
Number of RED players to cap : nombre des joueurs RED nécessaires pour capturer
Number of BLUE players to cap : nombre des joueurs BLUE nécessaires pour capturer
Red Spawn Adjust : permet d'ajuster le temps de réapparition des joueurs RED (voir explication plus bas).
Blue Spawn Adjust : permet d'ajuster le temps de réapparition des joueurs BLUE (voir explication plus bas).
Time to cap : temps, en secondes, nécessaire à la capture du point
Remplacez le symbole * par le numéro de l'équipe (RED = 1 ; BLUE = 2).
OnStartTeam* : Quand l'équipe * commence à capturer
OnBreakTeam* : Quand la capture de l'équipe * est interrompue
OnCapTeam* : Quand l'équipe * vient de capturer
OnStartCap : Quand une équipe commence à capturer
OnBreakCap : Quand la capture d'un équipe est interrompue
OnEndCap : Quand une équipe vient de capturer
Lorsque le point est capturé, il ne faut pas oublier de changer le skin du prop_dynamic, pour qu'il soit en rapport avec la couleur de l'hologramme. Il vous suffit d'utiliser les outputs OnCapTeam1 (RED) et OnCapTeam2 (BLUE) et de spécifier le nouveau skin :
Output named |
Targets entities |
Via this input |
Parameter |
Delay |
---|---|---|---|---|
OnCapTeam1 |
nomdumodel |
Skin |
1 |
0.00 |
OnCapTeam2 |
nomdumodel |
Skin |
2 |
0.00 |
Le role du team_control_point_master est difficile à expliquer. Cette entité gère les points de contrôle entre-eux, sans que vous ayez à y toucher. En clair, mettez l'entité dans votre map et n'y touchez pas, et votre map CP marchera . Je vais quand même vous en parler un peu, car elle est quand même utile pour certaines choses.
Cette entité intervient quand tous les points de contrôle sont capturés, autrement dit, quand une équipe gagne. Voici 3 propriétés utiles :
Cap Layout : permet de définir l'ordre d'affichage des points de contrôle. J'y reviens ci-dessous.
Restrict team from winning : permet d'empêcher une team de gagner. Laissez Neither par défaut, comme ça les deux teams peuvent gagner (c'est mieux )
Switch teams on map win? : mettez Yes si vous voulez que les teams s'échangent à la fin du round, comme dans cp_gravelpit.
Le Cap Layout vous permet de définir la façon dont les carrés symbolisant les zones de captures seront affichés à l'écran des joueurs. Si vous laissez cette propriété vide, les zones seront affichées une derrière l'autre, comme dans cp_granary ou cp_well.
Vous pouvez bien
entendu spécifier l'ordre que vous voulez, en indiquant les index des vos points de capture (souvenez-vous, la
propriété Index des team_control_point) en utilisant cette syntaxe : index2
index1 index3.
Si vous voulez obtenir un affichage sous forme de pyramide, comme dans
cp_gravelpit, il vous suffit de mettre une virgule qui fera office de "retour à la ligne" : index2, index1
index3. Dans cet exemple, index2 sera sur la première ligne, et index1 et 3 seront sur la deuxième.
Entité |
Type |
Description |
---|---|---|
Point |
Permet de gérer le temps de jeu au sein d'un round |
Le team_round_timer a pour fonction de mettre sur place le temps de jeu pour chaque round. On peut donc spécifier le temps maximum à jouer, le temps de "setup" et d'autres petites choses. C'est lui aussi qui, nous le verrons plus tard, se chargera de mettre fin au round si aucune équipe n'a gagné avant que le temps n'expire.
Timer length : le temps de jeu
Max timer lenght : le temps de jeu maximum. On verra qu'il est possible de rajouter des secondes, ce qui a pour effet de faire augmenter le Timer length en cours de partie. Cette propriété Max timer length permet donc de fixer un temps qu'il est impossible de dépasser, pour ne pas que les parties durent 5 heures si les temps capturent et recapturent sans cesse les points de contrôle .
Start paused : activer le time au démarrage du round
Setup timer length : temps de setup avant le démarrage du round proprement dit. Si vous définissez un temps de setup, je vous conseille de mettre 45 secondes qui est une bonne valeur .
Reset time on round restart : rétablir les paramètres initiaux du timer si la partie redémarre. Je vous conseille de laisser No
Use countdown sound : mettez Yes si vous souhaitez entendre le décompte du temps (5 minutes left in the mission )
Show timer in the HUD : permet d'afficher ou nom le temps restant à l'écran
Le possède plusieurs inputs qui peuvent se révéler utiles, et notamment AddTime. L'entité possède des inputs courants comme Enable et Disable.
Pause : met le timer en pause.
Resume : remettre en marche le timer (le contraire de Pause quoi )
SetTime : redéfinir le temps, en secondes. Le paramètre doit être un nombre.
AddTime : permet d'ajouter du temps. Le paramètre doit aussi être un nombre.
AddTeamTime : permet d'ajouter du temps pour une team. La syntaxe d'ajout est un peu spéciale. Le team RED porte le numéro 2 et la team BLUE le numéro 3. Si vous voulez ajouter 20 secondes à la team BLUE, vous devez mettre 3 20.
Restart : réinitialiser le timer.
ShowInHUD : afficher ou non le timer (0 pour No et 1 pour Yes).
SetMaxTime : redéfinir le temps maxumum du timer
AutoCountdown : activer ou désactiver le compte à rebours (0 pour No et 1 pour Yes)
SetSetupTime : redéfinir le temps de setup
Dans les maps comme cp_well et cp_dustbowl, un certain nombre de secondes est octroyé à la création des bâtiments de l'ingénieur et à la mise en place des joueurs. C'est ce qu'on appelle le setup, mais je suppose que vous le saviez déjà .
Enfin bon, le temps de setup se défini avec la propriété Setup timer length du team_round_timer comme je vous l'ai expliqué plus haut. Le principe du setup est que c'est un moment de répit pendant lequel les deux teams ne peuvent pas s'affronter ; c'est pourquoi on dresse des portes pour empêcher le passage. Pour ouvrir les portes, il suffit d'utiliser l'output OnSetupFinished du team_round_timer. Bref, rien de bien compliqué là dedans .
Entités |
Type |
Description |
---|---|---|
Point |
Permet de mettre fin au round, en déclenchant ou nom la Sudden Death |
|
Point |
Permet mettre fin à la map et de passer à la suivante |
Comment savoir quand un round est fini ?
Quand le temps est écoulé, ou quand l'objectif est rempli.
Pour savoir quand le temps est écoulé c'est simple : le team_round_timer, possède l'output OnFinished qui est déclenché quand le temps est écoulé. Il suffit donc d'appeler une entité game_round_win quand le temps est écoulé. Cette entité game_round_win mettra fin au round en déclenchant la Sudden Death (Mort Subite) ou non. Si la Sudden Death n'est pas déclenchée, le round se fini par un Stalemate (Math Nul), dans le cas d'une map CP de base (sans défense/attaque).
Team : : laissez None (Sudden Death) si vous voulez que le round se finisse par une Mort Subite si il y a égalité.
Force map reset : : mettez Yes pour que la map soit réinitialisée pour le Sudden Death (les zones capturées ne seront pas conservées, pare exemple).
Switch teams on map win? : Echanger les équipes après la victoire
Il se peut bien évidemment qu'une des deux teams gagne le round avant la fin. Dans ce cas, la gestion de la victoire est reléguée au team_control_point_master et le game_round_win n'intervient pas. Et devinez quoi, vous n'avez rien à paramétrer... enfin, pour faire gagner. Car il est maintenant temps de compter les points !
Pour changer de map après un certain nombre de victoir (par exemple, après 3 victoires), il suffit de compter le nombre de rounds gagnés ! Le comptage des rounds n'a rien de compliqué. On va tout simplement utiliser deux math_counter (un pour chaque équipe). Quand un round est gagné, il suffit d'ajouter un point à un des math_counter. Et quand un des deux math_counter atteint son maximum (voir la chapitre sur les déclencheurs), il déclenche un game_end qui va mettre fin à la partie et passer à la map suivante.
Output named |
Targets entities |
Via this input |
Parameter |
Delay |
---|---|---|---|---|
OnWonByTeam1 |
counter_red_win |
Add |
1 |
0.00 |
OnWonByTeam2 |
counter_blue_win |
Add |
1 |
0.00 |
Maintenant, on défini les outputs des math_counter, qui appelant le game_end (le l'ai nommé end_game) qui mettra fin à la partie.
Output named |
Targets entities |
Via this input |
Parameter |
Delay |
---|---|---|---|---|
OnHitMax |
end_game |
EndGame |
<none> |
8.00 |
Entités |
Type |
Description |
---|---|---|
Point |
Représente la valise (le flag) |
|
Bloc |
Zone de capture de flag |
Les maps de type CTF (Capture The Flag) sont les plus simples à mettre en place : deux flags et deux points de capture et le tour est joué !
Le flag, ou plutôt the intelligence se place avec l'entité item_teamflag. Les propriétés sont très simples : il vous suffit de sélectionner l'équipe à qui appartient cette valise, au moyen de la propriété Team. Pensez aussi à laisser la propriété Game Type sur CTF.
L'entité possède 4 outputs intéressants : OnReturn, OnPickup, OnDrop et OnCapture (je pense qu'on comprend tout de suite leur fonction rien qu'en lisant leur nom ) ; et un input pas vraiment utile mais on ne sait jamais : SetTeam, qui permet de modifier l'équipe à qui appartient la valise.
Le zone de capture est un bloc avec la texture toolstrigger converti en func_capturezone, et comme pour item_teamflag, spécifiez la propriété Team. La propriété Capture Point n'a pas besoin d'être modifiée, elle est de toutes façons ignorée en CTF. Elle servira pour les autres types de maps.
Les maps de type CP reposent sur le système points de capture comme je l'ai expliqué dans la partie précédente. Il y a plusieurs sous-types de CP :
cp_well, cp_granary : CP de base
cp_gravelpit : CP de défense/attaque sur un seul round
cp_dustbowl : CP de défense/attaque sur plusieurs rounds
Dans ce cas, tous les points de contrôle sont capturés, et le round suivant s'enchaîne tout seul. Votre team_control_point_master n'a donc pas besoin de configuration spécifique.
Aucune des teams n'a sur capturer tous les points (You're all losers). Dans ce cas, il faut appeler le game_round_win à la fin du temps, c'est à dire avec l'output OnFinished de l'entité team_round_timer. Spécifiez bien None (Sudden Death) pour la propriété Team du game_round_win, ce qui aura pour effet de déclencher la mort subite.
Comment associer les points de contrôles aux points de respawn comme dans cp_well et granary ?
En réalité c'est plutôt simple. Il vous suffit d'indiquer le nom du team_control_point dans la propriété Associated Control Point des entités info_player_teamspawn.
Cela veut donc dire que l'équipe qui attaque a capturé tous les points. Nous sommes donc dans le cas d'une map CP de base, il n'y a rien de plus à faire. Ah si, faut penser à mettre la propriété Switch teams on map win du team_control_point_master sur la position Yes pour que les teams s'échangent à la fin du round.
A la fin du temps, si la team qui attaque n'a pas capturé tous les points, la victoire revient à la team qui défend. IL suffit donc d'appeler l'entité game_round_win à la fin du temps, c'est à dire avec l'output OnFinished de l'entité team_round_timer.
Pensez à bien spécifier la propriété Team du team_round_timer, pour définir la team qui remporte le point à la fin du temps !
Vous devez spécifier un ordre de capture. Cela se fait avec les propriétés de type Previous Required Point qui se présentent comme ceci : BLUE Previous Required Point 1.
Vous devez également empêcher la team qui défend de gagner en capturant les points (logique ). Cela se fait très facilement en spécifiant le nom de la team qui défend dans la propriété Restrict team from winning du team_control_point_master.