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 > Les NPC de Half Life 2 > Les bases > Le combat > Lecture du tutoriel

Le combat

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 : Tortue facile
Visualisations : 3 348

Plus d'informations Plus d'informations
Ah enfin le combat, comme Half Life 2 est un FPS, c'est normal qu'il y ait des combats. Le fait de placer des NPCs hostiles sur vos maps est suffisant pour les faire combattre mais on peut faire encore mieux :D .
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Monter la garde

Je vais vous apprendre ici à faire en sorte qu'un NPC ennemi, le npc_metropolice monte la garde devant une porte et vous repousse si vous vous approchez de trop près.

Quoi! Tu veux nous apprendre à transformer un NPC en chien de garde, mais on n'est pas dans la partie sur le combat?
Si mais c'est le calme avant la tempête :D .
Pour réaliser cela il nous faut:
Maintenant imaginez que vous avez un passage à faire garder par un NPC:

Image utilisateur


Il faut placer l'ai_goal_police juste devant la porte et le npc_metropolice pas trop loin:

Image utilisateur


Configuration



Commençons par le npc_metropolice: il suffit juste de lui donner un nom grâce au champ Name(par exemple cop1) et de lui donner comme arme la matraque électrique grâce au champ Weapons: Stun Stick.

C'est en fait l'entité ai_goal_police qui est importante, elle marque la zone à garder.

ChampValeur
Name poste1
Pitch Yaw Roll il faut orienter l'entité car c'est elle qui oriente le NPC
Radius le rayon de la zone à garder (ici 32)
Target !player

Il ne reste plus qu'à déclencher tout cela à l'aide d'un trigger_once. Allez dans l'onglet Outputs et entrer ces deux lignes de commandes (je vais vous expliquez à quoi elles servent juste après ;) ).

My output namedTargets entities namedVia this inputWith a parameter override of
On Trigger cop1 SetPoliceGoal poste1
On Trigger poste1 DisableKnockOut <none>

Et comme je suis très gentil (et surtout parce qu'on est sur le Site du Zéro :p ) je vous montre ce que vous devez obtenir au final:

Image utilisateur

Explications



La première ligne d'instructions va faire en sorte que lorsque vous déclenchez le trigger_once, le npc_metropolice tienne compte de l'ai_goal_police et donc il va se diriger vers celui ci pour monter la garde.

La deuxième ligne d'instructions désactive le KO du npc_metropolice, il vous frappera mais vous ne serez pas KO tout de suite.
Au bout d'un moment, à force de vous faire frapper, le NPC vous tuera: pour éviter cela on utilise l'entité env_global donc je vous expliquerai son fonctionnement en détail dans la 2ème partie.

L'ai_goal_police ne marche qu'avec le npc_metropolice.

Pour faire en sorte que les autres NPCs hostiles vous laissent tranquille, il faut utiliser une autres entité: l'ai_relation_ship.

On fait ami-ami

On y arrive enfin, je vais vous apprendre maintenant à faire en sorte que des NPC qui par défaut sont amis deviennent des ennemis et inversement. Pour cela une seule entité suffit: ai_relationship
Image utilisateur


Voyons comment l'utiliser en fonction de ce que l'on veut faire: On va faire en sorte que un npc_citoyen et un npc_combine_s soient amis (par défaut ils sont ennemis). On les appellera citoyen1 et combi1 pour faire simple.

Dans l'onglet Class Info: voyons ce qui nous intéresse: il y a les champs Subjects, Targets et Disposition.

Les champs Subjects et Targets sont utilisés pour entrer le nom des NPC ciblés par le champ Disposition. Pour ce champ on a 4 choix:
Ensuite le champ Reciprocal permet de faire en sorte que cette relation soit réciproque.

Pour finir, revenons sur notre exemple: c'est très simple à faire, il suffit d'un seul ai_relationship pour que ces deux joyeux drilles soient amis. On utilisera la Disposition Like et on mettra Reciprocal sur Yes.

ChampValeur
Subject(s) citoyen1
Target(s) combi1
Disposition Like
Start Active Yes
Reciprocal Yes


Voilà, il existe une infinité de combinaison avec cette entité, on peut même réaliser un mod grâce à elle (Combine Destiny pour ceux qui ne le connaissent pas).

Les assauts

On va maintenant passer à la partie qui vous intéresse tous: comment faire pour que les NPCs chargent ? En fait il suffit juste de créer une ligne d'assaut et le tour est joué ;) . Pour cela il nous faut:
Les assauts fonctionnent un peu comme les patrouilles avec les path_corner mais en plus compliqué.
Si vous êtes déjà allé sur le Wiki de Valve, vous avez sûrement vu ce schéma incompréhensible à première vue o_O .

Image utilisateur

Il résume de manière succincte ce qui va se passer: un trigger déclenche un ai_goal_assault qui va envoyer un message à un NPC précis et va lui demander de se diriger vers l' assault_rallypoint de départ. Ce dernier pointe vers un assault_assaultpoint vers lequel va se diriger le NPC et ainsi de suite (rassurez vous, je vais tout vous expliquez en détail ;) ).

Configuration



Commençons par tracer le chemin pour l'assaut: le point de départ est un assault_rallypoint: il faut lui donner un nom et lui donner le nom de l' assault_assaultpoint suivant:

ChampValeur
Name depart
Assault Point as1


Ensuite pour chaque assault_assaultpoint, il faut leur donner un nom et leur donner le nom du prochain assault_assaultpoint. Mais en fait c'est un peu plus compliqué: lorsque le NPC arrive à un assault_assaultpoint, il a 2 choix:Donc nous ici on veut que le NPC charge sans jamais s'arrêter, il suffit que tous les assault_assaultpoint soient clear dès qu'il y arrive. Pour cela on coche le Flag: Clear this point upon arrival.

Notre chemin d'assaut est tracé, passons au déclenchement de cet assaut: pour le NPC c'est simple, il faut juste lui donner un nom (exemple: go1), mais pour l' ai_goal_assault c'est juste une question de logique :)

ChampValeurFonction
Name tri_depart Il faut lui donner un nom pour pouvoir le déclencher par un trigger
Actor(s) to affect go1 C'est le nom du NPC qui doit charger
Rally point Set depart C'est le nom de l' assault_rallypoint vers lequel le NPC doit se diriger
Start Active No Pour éviter que le NPC ne charge au lancement de la map

Ensuite il ne reste plus qu'à déclencher le tout par un trigger:

My output namedTargets entities namedVia this input
On Trigger tri_depart Activate


Et voilà :D c'est fini. Pour rendre vos assauts plus crédibles, il est préférable de faire plusieurs lignes d'assauts parallèles: cela donnera l'impression que vos NPC chargent par vagues.

Q.C.M.

Quel NPC est capable de monter la garde ?
Quel champ pour l'entité ai_relation ship est utilisé pour configurer la relation entre 2 NPCs ?

Statistiques de réponses au QCM


Voilà maintenant les combats sont plus intenses et plus longs grâce à des NPCs bien configurés. Dans le chapitre suivant je vais vous montrer comment rendre les maps plus vivantes grâce à l'animation des NPCs et en les faisant parler :-° .
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 14/12/2006 à 16:49:11
Modifié : le 22/08/2008 à 15:49:51
Avancement : 0%
Licence : Copie non autorisée

1 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 81 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0901s (0.0758s)