Coucou, je viens partager ici mes avancées sur mon script de combat tactique.
Un système de combat tactique (ou Tactical Battle System que j'appellerai TBS par la suite) est un système de combat où les unités se déplacent sur la carte et lancent des capacités avec une certaine portée qui peut affecter certaines zones d'effet.
Nativement RPG Maker n'est pas fait pour les combat tactiques, mais sous VX Ace il existe quelques tentatives de scripts, dont notamment le GTBS par Gubid. J'ai initialement cherché à le patcher pour l'adapter à mes besoins, mais au fur et à mesure, je rencontrais d'avantages de problèmes, en partie liés au fait que je ne comprenais pas comment le script fonctionnait vraiment. Donc j'ai décidé de refaire un TBS de presque zéro.
Mes inspirations sont principalement BG3, Wildermyth, Dofus, Wakfu et Fire Emblem, mon intention personnelle est d'avoir un système de combat aux tours 'singuliers' (un tour associé à un personnage), mais je veux permettre une certaine versatilité dans le système donc j'autorise des tours groupés ~
Mon objectif avec ce système est d'être versatile, compréhensible et compatible avec le plus de scripts utiles pour ne pas réinventer la roue. J'essaie de garder (au moins dans la version par défaut) le plus possible de comportements de RPG Maker.
Contenu
Spoiler (cliquez pour afficher) Ce script définit une nouvelle scène de jeu appelée Scene_TBS_Battle qui remplace Scene_Battle pour appeler les combats sur une map : la map de combat (qui est par défaut la même que celle où le combat commence) est chargée, elle cache les events qui ne sont pas explicitement gardés et place les personnages qui vont combattre.
Tours de jeu :
Spoiler (cliquez pour afficher) Les tours sont gérés par une 'roue de tour' (TurnWheel) qui détermine qui peut jouer à l'instant présent, le script supporte 3 systèmes de tours:
-chacun pour soit (ffa) comme Donjon et Dragon où chacun a une initiative et on joue dans l'ordre d'intiiative décroissant
-par équipe (teams) comme Fire Emblem où les tours sont associés aux équipes
-par équipe équilibrées (ffaeven) comme Dofus où les équipes sont ordonnées par initiative et on joue d'abord le personnage 1 de l'équipe avec le plus d'initiative puis le personnage 1 de l'équipe suivante avant de passer aux personnages suivants dans l'ordre des équipes.
J'ai rajouté une option qui permet, si deux personnages de la même équipe partagent un tour voisin, de jouer dans n'importe quel ordre (comme dans BG3).
Ce système associe à chaque Game_Battler (que je vais appeler unités) une position (définie par un Game_Character) et sont représentés par un charset.
Équipes et condition de victoire :
Spoiler (cliquez pour afficher) Les unités sont rangées dans des équipes une équipe a une relation avec les autres équipes qui est soit amies, soit neutres, soit ennemies. Cette relation a un impact sur quelles unités sont affectées par certaines capacités et quelles unités l'ia va cibler ou pas. Il existe par défaut 3 équipes: celle du joueur, celle des adversaires et une équipe 'neutre' qui sert pour des obstacles destructibles.
Par défaut, le combat se termine si l'équipe du joueur est vaincue (défaite) ou si l'équipe adverse a perdu (victoire), seule l'équipe adverse peut drop des ressources.
Il est possible d'altérer quelles équipes sont nécessaires pour gagner ou perdre ainsi que quelles équipes donnent du loot. Une équipe peut contenir à la fois des personnages de type Game_Actor ou Game_Enemy.
Déplacements :
Spoiler (cliquez pour afficher) Les unités ont des points de mouvements qui se rechargent à la fin de leur tour. Certaines unités peuvent se déplacer sur des cases interdites à d'autres (unités marines ou volantes par exemple). Certaines cases peuvent coûter plus de points de mouvement que d'autres pour certaines unités. Le coût d'une case est associé au numéro de tile définie dans le tileset.
Capacités et portée :
Spoiler (cliquez pour afficher) Une capacité est un sort ou un objet utilisable. À chaque capacité est associée une portée qui détermine la distance à laquelle la capacité est utilisable. Une portée est un quadruplé [min,max,los,type] avec min,max les distances de lancer de capacité, los une valeur true ou false qui détermine si des obstacles peuvent obstruer la portée ou pas et type qui détermine la forme de la portée (ligne droite, carrée etc.). À la portée s'ajoute la zone d'effet, elle même définie par une quadruplé similaire.
Un obstacle obstrue la vue si il a un certain numéro de tile. Les unités peuvent également obstruer la portée des autres.
Une capacité peut affecter ou non une unité selon la relation d'équipe entre le lanceur et l'unité.
Enfin, ce script propose une ia assez simple :
Spoiler (cliquez pour afficher) L'IA se veut proche de celle native de RPG Maker. Quand c'est son tour elle :
-filtre ses capacités disponibles (elle ne joue pas d'objet d'ailleurs)
-choisie une au pif selon des probabilités pondérées (de 1 à 10 dans la page des ennemis)
-regarde si elle peut l'appliquer (avec éventuellement des déplacement à faire)
-si elle peut l'appliquer et que c'est intéressant de le faire (blesser ses adversaires, aider ses alliés), elle le fait, sinon, elle prend une autre capacité au pif.
On répète ça jusqu'à ce qu'elle ne puisse plus jouer ou qu'aucune capacité ne soit intéressante à jouer, après ça, elle cherche à se rapprocher d'un adversaire.
Quelques screenshots
Spoiler (cliquez pour afficher)
Installation & Compatibilité
Spoiler (cliquez pour afficher) Je vous suggère de télécharger la démo pour avoir une idée de l'ordre d'installation, il y a un gros script appelé [TBS] Core qui nécessite Victor Engine ainsi qu'un petit script que j'ai fait appelé Sprite_Tile. Les quelques 800 premières lignes du scripts contiennent des constantes à paramétrer (désolé c'est en anglais dans ma démo :/)
Tous les autres scripts de la démo sont optionnels, mais apportent des fonctionnalités, ils ne sont pas nativement dans le Core pour diverses raisons (remplacement de fonctionnalités, compatibilité, sujettes à changer ou bien simple illustration d'addon) :
-Hidden Skill Types permet d'associer plusieurs catégories aux capacités ce qui donne plus de versatilité pour les scripts ultérieurs. Ces catégories supplémentaires sont 'virtuelles', c'est à dire que si un script ne se sert pas explicitement de HST, alors ces catégories sont ignorées.
-[TBS] Turn Start States permet à certains états de disparaitre au début du tour d'un personnage plutôt qu'à la fin, c'est pratique pour la compétence de défense notament.
-[TBS] Range Modifier permet de modifier la portée des capacités via l'équipement ou les états que nos personnages ont.
-[TBS] Height change le système de calcul de vue des capacités : les cases ont une altitude définie par les zones de la map (ce dont on se sert pour les combat aléatoire en général), les personnages ont une taille et le calcul d'obstacle se base sur la taille des cases et des unités: une cases haute va bloquer la vue des cases plus basses etc. Utiliser ce script permet de ne plus utiliser les numéro de tiles (définies dans le tileset) pour savoir ce qui bloque la vue ou pas.
-[TBS] Event Triggers permet d'avoir des events qui réagissent en combat (sans ça, les events seront seulement des obstacles ou non), ce qui permet l'ouverture de coffre, marcher sur des pièges etc. (voir la map de la démo pour le fonctionnement)
-[TBS] PatchHub contient des patchs que j'ai fait avec certains scripts que j'aime bien (Yanfly Core Engine/Battle Engine/HP Bars/Vicory Aftermath/Skill Restrictions/System Options/Lunatic States et le script de lumières de Zeus81), je compte le développer à l'avenir.
Ce paquet de script devrait être compatible avec n'importe quoi qui ne touche pas aux combats, il y a en revanche quelques zones à 'surveiller' en compatibilité:
-Si votre script lance des effets lors du chargement de la map (map.setup), il est possible que combattre puis quitter le combat ait des effets indésirables car je 'sauvegarde' les events de la map puis je charge une map de combat avant de récupérer les events de la map précédente à la fin du combat.
-Si votre script modifie la logique de combat (en dehors des calculs de dégats), il est fort probable que ça ne fonctionne pas avec TBS voire crashe.
À venir
Spoiler (cliquez pour afficher) C'est d'avantage rempli en anglais, je compte pour la 0.6 ajouter la système de placement de nos personnages ainsi que permettre des renforts en milieu de combat et par extension des invocations.
Je compte après cela ajouter un menu d'options en combat pour paramétrer la transparence des unités derrière les décors, la couleur des portées, les animations ou la visibilité des cercles d'équipes et un numéro de tour de jeu.
Les IAs sont loin d'être satisfaisantes et le calcul des hauteurs n'est pas complètement terminé.
Je compte ajouter d'avantage de retour visuels, notamment des personnages qui bougent et changer leur visuel selon des états ou leur transparence quand ils ont fini de jouer, je n'ai cependant pas encore déterminer comment le faire (je veux rendre ça paramétrable dans le script).
Je mettrai à jour ce topic de la même façon que je mets à jour celui sur les forums anglophones.
Téléchargement de la démo v0.5 (en anglais)
|