Il est possible - et plus simple pour le mission maker - d'utiliser le système d'artillerie virtuel. Les prefabs vanilla disponibles sont puissants et hautement configurables. Un article du wiki décrit les paramètres de ces prefabs : Comment paramétrer des tirs de mortiers (virtuels). Cependant, ce système a plusieurs limites, notamment le fait que les mortiers n'existant pas, ils ne peuvent pas être détruits. De plus, le système est tout-puissant : les mortiers, sauf à ce que le mission maker prenne en compte volontairement ce paramètre, n'ont pas de limite de portée. De plus, les salves de tirs sont parfois irréalistes, sauf à imaginer une batterie de 5 mortiers ou plus tirant en continu.
A contrario, le système de support d'artillerie par IA est un (tout petit) peu plus long à mettre en œuvre car il faut que des mortiers et des servants soient posés ou spawnés. En outre, il est plus réaliste :
Le prefab GDC_ArtilleryFireSupport.et permet de définir une mission d'appui-feu indirect par mortiers depuis le World Editor. Il commande un groupe IA déjà présent dans la scène (ou spawné dynamiquement) et lui fait exécuter une ou plusieurs séquences de tir sur une position choisie. Le système est :
Le prefab est disponible dans le mod GDC AR Lib, à l'emplacement GDC AR Lib>Prefabs>AI>Artillery>GDC_ArtilleryFireSupport.et. Il peut être utilisé en vanilla, mais requiert le TilW Mission Framework (TMF) pour bénéficier du déclenchement par flag ou du spawn dynamique. Cet article suppose que vous maîtrisez le TMF. Si ce n'est pas le cas, un tutoriel de prise en main est disponible : Créer une mission avec TilW Mission Framework.
Vous placez le prefab GDC_ArtilleryFireSupport.et dans la scène à l'endroit où vous voulez centrer la zone d'impact. Il référence un mortier (ou son groupe IA) via le champ AIGroup Name. Quand le timer ou la condition de déclenchement est remplie, il envoie au servant une série d'ordres de tir (fire orders) à exécuter l'un après l'autre.
[image perdue]
L'image ci-dessus illustre une séquence de trois ordres de tir : chaque anneau visible dans le World Editor correspond à un ordre et matérialise sa zone d'impact. Les anneaux s'affichent dès que l'entité est sélectionnée (option Show Debug Rings activée) et leur couleur passe du jaune pour le premier ordre au rouge pour le dernier. Chaque ordre définit :
0 pour un disque plein, sans zone morte au centre),Les impacts sont répartis aléatoirement dans l'anneau avec une distribution uniforme : il n'y a pas de concentration au centre.
| Paramètre | Valeur par défaut | Description |
|---|---|---|
AIGroup Name (m_sAIGroupName) | (vide) | Nom de l'entité mortier ou du groupe d'IA à commander. |
Condition Flag (m_sConditionFlag) | (vide) | Drapeau du TilW Mission Framework qui déclenche la mission. Si vide, la mission démarre immédiatement au lancement de la partie. |
Initial Delay (m_fInitialDelay) | 5 s | Délai entre le déclenchement et le premier tir. |
Ammo Type (m_eAmmoType) | HIGH_EXPLOSIVE | Type de munition pour tous les ordres de tir de cette mission. |
Fire Orders (m_aFireOrders) | (vide au niveau du code du composant, mais trois ordres de tir définis par défaut dans le prefab, cf. copie d'écran ci-dessus) | Séquence ordonnée d'ordres de tir (voir ci-dessous). Exécutés du premier au dernier. |
Show Debug Rings (m_bShowDebugRings) | true | (World Editor uniquement) Affiche les anneaux d'impact de chaque ordre de tir dans l'éditeur quand l'entité est sélectionnée. |
| Paramètre | Valeur par défaut | Description |
|---|---|---|
Shot Count (m_iShotCount) | 1 | Nombre d'obus pour cet ordre. Mettre -1 pour un tir infini (la mission ne passe pas à l'ordre suivant). |
Min Radius (m_fMinRadius) | 80 m | Rayon intérieur de l'anneau d'impact. Aucun obus ne tombe plus près que cette distance du centre sauf dispersion du mortier. 0 = disque plein (pas de zone morte au centre). |
Max Radius (m_fMaxRadius) | 90 m | Rayon extérieur de l'anneau. Aucun obus ne tombe plus loin sauf dispersion du mortier. |
Delay After (m_fDelayAfter) | 5 s | Délai avant l'ordre suivant. Ignoré pour le dernier ordre de la séquence. |
C'est le cas le plus simple, mais le moins flexible. Le mortier et son servant sont posés en éditeur, idem pour le prefab GDC_ArtilleryFireSupport.
Si vous ne savez pas comment affecter une IA en tant que servant d'un mortier, lisez d'abord : Attribuer un ou des servants à une arme fixe ou un équipage à un véhicule
Dans le Resource Browser, ouvrez GDC AR Lib>Prefabs>AI>Artillery et glissez GDC_ArtilleryFireSupport.et dans la scène à l'endroit où vous voulez centrer la zone d'impact. Les anneaux de chaque ordre de tir sont centrés sur le gizmo du prefab.
Configurez les paramètres :
Laissez Condition Flag vide. La mission s'active au lancement de la partie, après le délai Initial Delay.
Renseignez Condition Flag avec le nom d'un flag TMF (ex. GO_ARTY). La mission se déclenche dès que ce flag passe à true.
Ici, le mortier et son servant sont posés en éditeur comme au Cas 1. Mais on veut pouvoir définir lors de l'exécution la position sur laquelle va être déclenchée la mission de tir (par exemple, sur les joueurs ). Autrement dit, la mission d'artillerie elle-même (le prefab
GDC_ArtilleryFireSupport.et) est lancée à l'exécution (par un TILW_PrefabSpawnerEntity ou une instruction TILW_SpawnPrefabInstruction).
Même procédure que pour le cas 1.
Puisque le prefab de tir est spawné dynamiquement, il ne peut pas être configuré directement dans la scène, en particulier pour le champ AIGroup Name. La solution est de créer un prefab dérivé de GDC_ArtilleryFireSupport.et en renseignant son champ AIGroup Name avec le nom du groupe d'IA servant le mortier.
Vous pouvez ainsi spawner ce prefab dérivé à l'exécution, à la position d'impact voulue (propriété Location name du spawner du TMF) via un TILW_PrefabSpawnerEntity ou une instruction TILW_SpawnPrefabInstruction.
GDC_ArtilleryFireSupport_TargetPlayers.et pour une mission ciblant les joueurs). Puisque ces prefabs vont contenir des paramètres spécifiques à votre mission (a minima, le AIGroup Name), il est conseillé de les enregistrer dans un dossier propre à votre mission, par exemple VotreModDeMission>Worlds>MissionArty>Prefabs>Arty>GDC_ArtilleryFireSupport_TargetPlayers.et.
TODO: article qui explique comment créer un prefab dérivé avec des paramètres différents du prefab original.
Dans les cas 1 et 2, le mortier est déjà présent dans la scène, ce qui permet de le référencer facilement dans le champ AIGroup Name du prefab GDC_ArtilleryFireSupport ou de ses dérivés (cas 2). Mais parfois, on veut faire spawner le mortier lui-même dynamiquement. Dans ce cas, son nom n'est pas connu à l'avance.
Placez un TILW_PrefabSpawnerEntity pour le mortier dans la scène et configurez-le :
TILW_VehicleCrewComponent configuré pour son équipage)mortier_dynamique
Le mortier spawné portera le nom mortier_dynamique dès sa création.
Même procédure que pour le cas 2, mais cette fois, renseignez le champ AIGroup Name du prefab dérivé avec le nom donné au mortier dans le spawner (ex. mortier_dynamique).
Spawnez ensuite la mission de tir comme à l'accoutumée, en utilisant ce prefab dérivé.
GDC_ArtilleryFireSupport tente de résoudre le groupe IA. Utilisez des flags distincts ou un délai (Spawn Timings) pour garantir cet ordre — le champ Initial Delay du prefab de tir peut aussi absorber ce délai. Si vous spawnez un groupe avec le composant TILW_VehicleCrewComponent, assurez-vous que la case No Turret Dismount est cochée pour ce groupe.
| Cas 1 — Tout en éditeur | Cas 2 — Mission spawnée dynamiquement | Cas 3 — Mortier et mission de tir spawnés dynamiquement | |
|---|---|---|---|
| TMF requis | Non (timer) / Oui (flag) | Oui | Oui |
| Mortier posé comment | Éditeur | Éditeur | Via un spawner (m_setEntityNames fixe son nom) |
| GDC_ArtilleryFireSupport posé comment | Éditeur | Via un prefab dérivé + spawner | Via un prefab dérivé + spawner |
| Valeur de AIGroup Name | Nom du mortier (éditeur) | Nom du mortier (éditeur, dans le prefab dérivé) | Nom attribué au mortier par son spawner (dans le prefab dérivé) |
| Position d'impact | Fixée en éditeur | Fixée au runtime (position du spawner) | Fixée au runtime (position du spawner) |
| Plusieurs missions vers la même batterie | Possible (plusieurs prefabs en éditeur) | Facile (plusieurs spawners, même prefab dérivé) | Facile (plusieurs spawners de mission, déclenchés après le spawn du mortier) |
| Déclenchement | Timer ou flag TMF | Au spawn (flag TMF) | Au spawn (flag TMF, après le spawn du mortier) |
| Spawner nécessaire | Non | Oui (un par mission de tir) | Oui (un pour le mortier + un par mission de tir) |