Aller au menu - Aller au contenu

Icône [TF] Gestion du jeu

Mise à jour : 24/01/2012
Difficulté : Facile Facile
2 942 visites depuis 7 jours, dont 13 sur ce chapitre classé 54/786
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.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Les points de capture

Entités étudiées
EntitésTypeDescription
http://developer.valvesoftware.com/wik [...] control_point Point Représente un point de contrôle
http://developer.valvesoftware.com/wik [...] _capture_area Bloc Zone dans laquelle la capture du team_control_point est possible
http://developer.valvesoftware.com/wik [...] _point_master Point Sert à gérer les points de contrôle. Entité obligatoire pour les maps CT et TC


Image utilisateur
Les points de capture sont utilisés dans les maps de type CP (comme cp_granary) et TC (comme tc_hydro). Les captures de flags dans les maps CTF (comme ctf_2fort) fonctionnent autrement.


L'hologramme



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.

Image utilisateur
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).


Le trigger



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.

Image utilisateur

Propriétés



  • 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


Le Spawn Adjust

Les propriétés Red et Blue Spawn Adjust permettent d'ajouter ou soustraire des secondes aux temps de réapparition des deux équipes. Par exemple, si vous mettez -3 et que le point appartient à l'équipe RED, lorsque les BLUE captureront le point, leur temps de réapparition diminuera de trois secondes, tandis que celui des RED augmentera de trois secondes.


Outputs



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


Changer le skin du model à la capture



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 namedTargets entitiesVia this inputParameterDelay
OnCapTeam1 nomdumodel Skin 1 0.00
OnCapTeam2 nomdumodel Skin 2 0.00


Le team_control_point_master



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



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.

Je vous reparlerai du team_control_point_master au moment ou j'aborderai les différents types de maps CP, et TC, donc, ne l'oubliez pas ^^ .

Gestion du timer

Entité étudiée
EntitéTypeDescription
team_round_timer Point Permet de gérer le temps de jeu au sein d'un round


Le team_round_timer



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.

Voici ses propriétés détaillées



  • 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


Inputs



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


Il y a tout une série d'outputs qui peuvent être pratiques. Je vous laisser aller les voir sur le wiki de Valve. Il y a en beaucoup, mais ils se ressemblent presque tous (QuandIlReste2Minutes...). Notez tout de même OnFinished, OnRoundStart, OnSetupStart et OnSetputFinished qui nous seront utiles.


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 :) .

Fin de round et fin de partie

Entités étudiées
EntitésTypeDescription
game_round_win Point Permet de mettre fin au round, en déclenchant ou nom la Sudden Death
game_end 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.

Le temps est écoulé



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


La mission est remplie



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 !

Changer de map après N victoires



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.

Le team_control_point_master
Output namedTargets entitiesVia this inputParameterDelay
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.

Un des deux math_counter (counter_red_win)
Output namedTargets entitiesVia this inputParameterDelay
OnHitMax end_game EndGame <none> 8.00


Le cas des maps CTF est un peu particulier. J'y reviendrai dans la partie suivante ;) .

Les maps CTF

Entités étudiées
EntitésTypeDescription
item_teamflag Point Représente la valise (le flag)
func_capturezone 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



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.

La zone de capture



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.

Pensez à délimiter visuellement votre zone de capture, histoire que les joueurs sachent où elle se trouve ^^ (ou placez-là sur la valise) ;) . Notez aussi que le nombre de captures avant de gagner un round est défini à 3 et que ce nombre ne semble pas être modifiable.

Les maps CP

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


CP de base



Une des deux teams gagne



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.

Le temps et écoulé



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.

CP de défense/attaque sur un seul round



La team qui attaque gagne



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.

La team qui défend gagne



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 !

Particularités supplémentaires



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.

CP de défense/attaque sur plusieurs rounds



En cours de rédaction...
Chapitre précédent Sommaire Chapitre suivant

Partager

8 commentaires pour "[TF] Gestion du jeu"
Note moyenne : 3.89 / 4 (103 votes)
Pseudo Commentaire
Hors ligne Thunderseb # Posté le 21/02/2008 à 16:17:57
Responsable de la validation
Avatar
Validateurs

Ville : Liège
Pays : Belgique

Ca dépend du serveur en fait.
 
Hors ligne vavadu94 # Posté le 16/11/2009 à 19:14:18
Avatar

Bonjours je passe passe par "the orange box" pour Day of Defeat: Source et je ne trouve pas l'entité item_teamflag aider moi svp
Hors ligne DomBB # Posté le 24/12/2009 à 07:53:07
Avatar

item_teamflag c'est que pour tf2

et sinon, comment on fait pour les maps de type Kill Of The Hill ?
Hors ligne simounours # Posté le 01/01/2012 à 20:02:14

Moi j'ai suivi ton tutoriel mais j'ai un problème, quand je joue sur ma map (5 point de contrôle) seule le point de milieu et capturable au début mais ça c'est normal mais dès que on le capture les autres ne se débloque pas...
Hors ligne myuline # Posté le 24/04/2012 à 17:19:49

Avis : Très bon

Citation : simounours
Moi j'ai suivi ton tutoriel mais j'ai un problème, quand je joue sur ma map (5 point de contrôle) seule le point de milieu et capturable au début mais ça c'est normal mais dès que on le capture les autres ne se débloque pas...


Hormis le fait que moi, ce soit le premier point capturable, j'ai le même probleme.
Et j'en ai un autre: le setup timer reste à 45 et ne "s'écoule pas". Comme je joue cette carte avec des bots, ces derniers bougent, construisent, soignent, mais restent passif même si je me met devant un enemi... :o

Cordialement: Myuline; apprenti mappeur du Source Engine, infographiste sous Blender, et re-apprenti du langage html et css.
 

Voir tous les commentaires