Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Mapping > [HL2] Général > Une map avec Hammer 4 > Particularités des mods > [TF] Payload GoldRush > Lecture du tutoriel

[TF] Payload GoldRush

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Thunderseb
Visualisations : 1 315

Plus d'informations Plus d'informations
Payload ne vous dit certainement rien. Pourtant, c'est le préfixe de la map officielle pl_goldrush. Ce type de jeu particulier mérite à lui seul son petit chapitre :) .
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Préparation du terrain

Image utilisateur
Une map payload est basée sur un système d'attaque-défense, comme cp_gravelpit ou cp_dustbowl. Les bleus attaquent et les rouges défendent.
Ce qui change dans une map payload, c'est que les captures doivent se faire en faisant passer un charriot dessus. Dans pl_goldrush, le charriot est représenté par un caddie transportant une bombe bleue destinée à détruire la base rouge. Cela dit, le charriot est juste un prop_dynamic, donc théoriquement, n'importe quel model peut convenir.

Le contrôle des points



Nous allons avoir besoin de paramétrer le team_control_point_master, de cette manière :

PropriétésValeurs
Name CP_Master
Start Disabled No
Restrict team from winning Red
Switch teams on map win? Yes
Scoring Style Add team score for each captured point
Play all rounds before changelevel Only changelevel after all mini-rounds have been played to completion
Rate at which to give partial cap points for area captures 0.1


Ensuite, on va ajouter un team_control_point_round, à nommer comme le team_control_point_master :

PropriétésValeurs
Name CP_Master
Start Disabled No
Priority 0
Control points in this round m
Restrict team from winning Red


Ça, c'est fait. Maintenant, on va mapper l'environnement, histoire d'avoir une base de travail.

Le chemin de fer

La création du chemin de fer se fait en deux temps :
  1. le placement des models
  2. les path_track


Oui, les path_track ! On va les utiliser pour indiquer au charriot (le train) quel itinéraire employer.

Itinéraire



Les rails sont à poser au moyen de prop_static. Pour rechercher les models, utilisez le filtre track dans l'explorateur de models. Il y a tout une kyrielle de models de rails que vous pouvez utiliser :) .

Pour symboliser les points de capture, vous pouvez, c'est recommandé, utiliser le model odels\props_trainyard\track_midcap.mdl. Voici ce que j'obtiens après avoir joué quelques minutes avec Hammer (c'est très basique ^^ ) :

Image utilisateur


Maintenant, placez les path_track. Si vous ne vous souvenez plus comment les placer, reportez-vous au chapitre qui leur est destiné. Notez qu'au niveau des checkpoints (points de capture), le charriot "monte" dessus, vous devez donc adapter vos path_track en conséquent. Mettez aussi un path_track au centre du checkpoint. Quand le charriot passera sur celui-là, le point sera capturé.

Image utilisateur


Au centre de chaque checkpoint, mettez un team_control_point, comme on le fait dans les maps CP, et donnez-lui un nom. Par exemple, CP_Partie1_x (x = numéro).

La capture



Pour déclencher la capture, on va utiliser l'output OnPass du path_track situé au milieu du point de capture. Lors de cet output, on déclenchera la capture (le SetOwer du team_control_point) et on empêchera le charriot de reculer, en désactivant le dernier path_track juste avant le path_track servant de point de capture. Voici mes outputs d'exemple pour mon point 1 :

Output namedTargets entitiesVia this inputParameterDelay
OnPass CP_Partie1_1 SetOwner 3 0.00
OnPass CP_Partie1_1_relay Trigger <none> 0.00
OnPass path_track_précédent DisablePath <none> 0.00


Le CP_Partie1_1_relay est tout simplement un lien vers un logic_relay qui se chargera d'ouvrir ou de fermer des barrières et faire d'autres trucs en rapport avec la capture comme ajouter du temps.

La prochaine capture



Nous allons le voir dans la sous-partie suivante, mais je vous en touche un mot maintenant. La capture des points se fait à l'aide d'un trigger_capture_area qui bouge en même temps que le charriot (il lui est parenté). Cette entité possède une propriété Control Point qui désigne le point de capture pour lequel elle est utilisée. Or ici, il n'y a qu'un trigger_capture_area. Il faut donc, dès qu'un point est capturé, définir le prochain point à capturer, au moyen de son input SetControlPoint, comme ceci :

Output namedTargets entitiesVia this inputParameterDelay
OnPass Bombe_CaptureArea SetControlPoint CP_Partie1_2 0.00


Dans mon exemple, CP_Partie1_2 est donc le deuxième point de capture.

This cart is a train

Comme je l'ai laissé entendre dans l'introduction, le charriot est un func_tracktrain. Mais attention le func_tracktrain est invisible. Le model du charriot est parenté au func_tracktrain.

Créez un bloc texturé en toolsclip, que vous transformez en func_tracktrain. Nommez-le Bomb_Train.
Ensuite, insérez un prop_dynamic en utilisant le model models/props_trainyard/bomb_cart.mdl, et parentez-le au func_tracktrain :

Image utilisateur


Le tracktrain demande un certain nombre de propriétés, et dans le cas du charriot, il va falloir en ajouter 3 manuellement.

Pour ajouter des propriété manuellement, voyez l'explication dans la partie dédiée aux armes en multijoueurs.


PropriétésValeurs
ManualAccelSpeed 70
ManualDecelSpeed 150
ManualSpeedChanges 1

Image utilisateur


Voici les propriétés habituelles à adapter :

PropriétésValeurs
Name Bombe_train
First Stop Target CP_Partie1_1
Max Speed 90
Change Velocity Linear blend
Distance Between the Wheels 20
Height above Track 1
Damage on Crush 99999
Move Sound Cart.Roll
Start Sound Cart.RollStart
Stop Sound Cart.RollStop


Pour Height above Track, c'est bien évidemment à régler en fonction de la position du func_tracktrain et du prop_dynamic


Avant de commencer ce chapitre, je pensais naïvement que Valve avait faire une entité toute faite pour le charriot, avec gestion du dispenser, de la zone de capture et tout et tout. Evidemment, je me trompais :-° .

La zone dans laquelle les joueurs sont habilités à faire avancer le train est faite tout simplement d'un trigger_capture_area. Créez-le, tout autour du charriot, et parentez-le au train. Pensez à recouvrir le dessus du train aussi, comme ça si quelqu'un s'y trouve (moi, j'adore me mettre dessus ^^ ), il capturera aussi. Nommez cette entité Bombe_CaptureArea, et associez-lui le premier point de capture (CP_Partie1_1 dans mon exemple).

Pour terminer le montage du train, il faut s'occuper du dispenser. A la manière du trigger_capture_area, créez un bloc, avec la texture de trigger, et transformez-le en dispenser_touch_trigger (ça aurait été plus malin de nommer cette entité trigger_dispenser, mais bon, le codeur devait être dans un mauvais jour). Hum, bref, donnez un nom à cette entité (Bombe_dispenser par exemple), et parentez-là au train.

Image utilisateur
Quand vous vous faites soigner par le charriot, le rayon soignant sort de la cheminée du charriot. Ce "point de départ" du rayon est placé via l'entité mapobj_cart_dispenser (je maudis ce codeur avec ses noms stupides :p ). Pas besoin de nommer l'entité (mais bien de la parenter). Spécifiez juste le nom du dispenser_touch_trigger dans la propriété Custom touch Trigger, et spécifiez bien la team qui peut bénéficier du soin.

Voici ce que donne mon charriot, avec tous ses triggers autour ^^ :

Image utilisateur


L'avancée du charriot

Faire avancer



3 joueurs au maximum



La vitesse du charriot est influencée par le nombre de joueurs présents dans la zone de capture. Ok, mais comment connaitre leur nombre ?
L'output OnNumCappersChanged du trigger_capture_area envoie le nombre de joueurs présents en son sein (le scout compte pour deux joueurs).

Le trigger_capture_area va donc transmettre le nombre de joueurs à un math_remap qui va s'occuper de redéfinir le nombre. C'est une nouvelle entité dont je ne vous ai pas encore parlé. A son tout, le math_remap va envoyer le nombre redéfini à un logic_case, qui lui va s'occuper de déterminer la nouvelle vitesse (entre 3 différentes) à donner au charriot.

Image utilisateur


Avant de voir le math_remap, voyons d'abord le logic_case, ce sera plus facile pour comprendre :

PropriétésValeursExplication
Name Bombe_logicCase
Case 01 0 Il n'y a aucun joueur
Case 02 1 1 joueur est présent
Case 03 2 2 joueurs sont présents
Case 04 3 3 joueurs sont présents


Et en voici les outputs :

Output namedTargets entitiesVia this inputParameterDelay
OnCase01 Bombe_train SetSpeedDirAccel 0 0.00
OnCase02 Bombe_train SetSpeedDirAccel 0.5 0.00
OnCase03 Bombe_train SetSpeedDirAccel 0.75 0.00
OnCase04 Bombe_train SetSpeedDirAccel 1 0.00


SetSpeedDirAccel est affiché en rouge car cet input n'est pas repris dans le FGD (liste des entités de TF²) (tout comme les 3 propriétés que je vous ai fait ajouter au func_tracktrain).


Comme on peut le voir, en fonction du nombre de joueurs, on fait changer la vitesse du charriot. Maintenant, supposons qu'il y ait 5 joueurs. Dans ce cas, il ne se passe rien ! C'est pour cela qu'on va avoir recours à un math_remap :) .

Le math_remap



Le math_remap est un eentité qui reçoit une valeur, qui l'analyse et qui en retourne une nouvelle, ou tout simplement la même en fonction de l'analyse. Le math_remap permet de fixer deux valeurs (deux bornes) : une minimale et une maximale. le math_remap, en recevant une valeur, va la comparer aux deux bornes. Si la valeur est comprise en les deux bornes, cette valeur est renvoyée telle-quelle. Si la valeur est plus petite que la borne inférieure, une valeur définie à l'avance est renvoyée, de même que si la valeur est supérieure à la borne supérieure :



En mettant 3 dans Output Value When Input Is Max, ça signifie que si la valeur d'entrée est 5, la valeur de sorte sera 3 :) .

Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 28/10/2006 à 10:08:34
Modifié : le 05/11/2008 à 17:12:13
Avancement : 100%
Licence : Copie non autorisée

0 commentaire

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 413 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.034s (0.0181s)