Vous êtes Mapmaker et vous désirez faire des jeux implémentant une mécanique de tirs ? Voici un système bien pratique qui va vous permettre non seulement de tirer, mais aussi de contrôler la trajectoire d’un projectile !

Une gestion complète des projectiles

Le LGdir, abréviation de « LeiRoF & GamerGuppy direction », en référence au CPdirection (« Crushed Pixel direction ») est un système permettant aux joueurs (ou à n’importe quelle entité !) de lancer des projectiles à la manière d’une boule de neige. L’avantage est que vous pourrez gérer:

  • La trajectoire: celle ci vous permet de modifier l’endroit vers lequel se dirige le projectile. Vous pouvez alors définir une trajectoire « droite » ou bien créer des trajectoires obliques. Vous pourrez ainsi simuler la gravité, le vent etc., la seule limite est celle de votre imagination !
  • Les collisions: le projectile sera apte à traverser toutes les surfaces ou bien rebondir/se coller/glisser sur certaines d’entre elles !
  • La vitesse: augmentez, diminuez ou même stoppez la vitesse d’un projectile pendant sa course ! Vous pourrez même la faire repartir dans le sens inverse à tout moment !
  • Les identités/propriétés: il vous sera facilement possible de distinguer tous les projectiles ainsi que les personne les ayant lancés. Ainsi, vous pourrez savoir qui à marqué le but en ayant lancé la balle ou bien savoir qui à tiré sur qui etc.

Modulable et ajustable

Le LGdir saura s’adapter à chacune de vos map, du fait de ses objectifs de scoreboard commençant par « Dir », évitant tout problème de compatibilité.

De plus, il s’avère être extrêmement modulable du à sa conception « ouverte » et organisée. Vous pourrez ainsi créer vos projectiles personnalisés (en mettant un mouton comme projectile, la réalisation d’une map comme SheepWars sera alors un jeu d’enfant) et modifier le comportement de chacun indépendamment des autres.

Ce système à été initialement pensé pour une map des plus complexes et à donc implémenté la possibilité de gérer un nombre de projectiles illimités au même moment et par autant de joueurs que désiré !

La map initiale (connu sous le nom de Hierarchy) lui a aussi imposé une contrainte d’optimisation à laquelle il a su répondre. Ainsi, les parties du systèmes sont indépendantes et ne s’activeront qu’au besoin grâce à l’implémentation d’un système d’activation intelligente. La partie calcul de trajectoire ne s’allumera alors que durant 0.05 seconde au moment ou un joueur tir !

Enfin et pour couronner le tout, le LGdir à reçu des améliorations le rendant ultra réactif. Les tirs seront alors quasiment instantané ainsi que les changements de directions !

Comment ça fonctionne ?

Pour comprendre ce système, nous allons faire de la rétro-ingénierie (commencer par constater le résultat et décomposer petit à petit le système en partant de la fin pour en arriver à son fondement). Pour ceux qui sont assez courageux, j’ai mis à disposition des explications très détaillées dans les spoilers. Ce système n’aura alors plus aucun secret pour vous 😉

Ah ! Là, on rentre dans le cœur du sujet ! Pour rappel, afin de faire un système de projectile, le CPdirection reposait sur les tags « Motion » définis selon l’orientation du joueur en testant chaque possibilité. 360 degrés horizontal multiplié par 180 degrés vertical, ça fait beaucoup de possibilité (64 800 pour être exact) et autant de blocs de commande activés en boucle (surtout quand on devait mettre plusieurs exemplaires du système pour disposer de plusieurs vitesses) !

Ici, il n’est plus question de motions car ceux-ci posaient trop de problèmes. Ce système là utilise les téléportations comme moyen de déplacement.

Mais alors, les projectiles ne bougent pas de façon fluide et linéaire mais sont téléportés de façon saccadés ?

En théorie oui, en pratique, c’est plus compliqué que ça car il s’agit d’une combinaisons de micro-téléportations, cumulé à l’animation de téléportation des entités de Minecraft. Bref, rassurez vous, les mouvements sont parfaitement fluides !

Détails: Principe de la dichotomie

Ces téléportations sont faites à partir de 3 vecteurs (en X, Y et Z), permettant de savoir à quelle vitesse le projectile se déplace sur chacun des axes. Ainsi, la somme des 3 vecteurs formera le vecteur (la direction, le sens et l’intensité) du projectile. La mise en mouvement du projectile est alors optimisé par un procédé mathématique afin que sa trajectoire soit la plus précise possible sans pour autant avoir autant de blocs de commandes que de possibilités.

Détails: Approximation de Bhaskara

Les 3 vecteurs sont quant à eux directement calculés grâce à l’orientation du joueur (elles même déduites via un procédé mathématiques d’optimisation) grâce à des formules trigonométriques ramenées à des opérations simples (addition, soustraction, division et multiplication. Encore et toujours des maths !)

Détails: Orientation du joueur

Comment l’utiliser ?

Ce système à été maintes fois modifié afin de le rendre le plus simple possible d’utilisation. Voici la liste des éléments utiles à connaitre afin de maîtriser complètement le système !

  • (tag) DirShoot: permet de faire tirer un projectile à l’entité possédant le tag. Ce tag se supprime automatiquement dès que l’entité à tiré
  • (tag) DirHaveShoot: ce tag permet de savoir quand l’entité vient de tirer (utile pour modifier le projectile en fonction du tireur sans modifier le LGdir). Ce tag se place et se supprime automatiquement
  • (tag) DirMoving: permet de savoir quand un projectile est en mouvement. Retirer ce tag aura pour effet de stopper net le projectile. Pour lui faire reprendre sa course, il suffit de lui remettre ce tag.
  • (score) DirCollision: permet de gérer les collisions du projectile. Chaque score correspond à un comportement (le projectile rebondira partout quand il aura le score 1 par exemple). Il est possible de créer son propre comportement.
  • (scores) DirX, Dir Y et DirZ: permet de gérer la vitesse sur l’axe X, Y et/ou Z. Modifier sa valeur aura pour effet de modifier la trajectoire du projectile. Incrémenter en boucle cette valeur aura pour effet de donner une trajectoire oblique au projectile.
  • (score) DirSpeed: permet de gérer la vitesse globale du projectile. Modifier sa valeur à 200 aura pour effet de multiplier sa vitesse par 2, 300 pour multiplier par 3 et ainsi de suite. Cette valeur ne doit pas être inférieur à 0 ni supérieur à 400 sinon quoi, le projectile prendra une trajectoire imprécise (par défaut le projectile aura un DirSpeed à 200 correspondant à une vitesse de 2 blocs par tick)

C’est tout ! Vous savez désormais tout ce qu’il y a à savoir à propos de ce système !

Crédits

  • LeiRoF: Concept & développement
  • GamerGuppy: Aide Développement

La création du LGdir à été grandement facilité grâce à GamerGuppy, ayant réalisé un système se rapprochant du LGdir (qui a d’ailleurs servit de base de travail).

Téléchargement

Si vous utilisez ce système dans une création publique, merci de renseigner LeiRoF dans les crédits de cette dernière. Ce système étant gratuit, c’est un moindre remerciement 🙂

LGdir 1.12

Comment l’installer ?

Pour installer ce système, vous pouvez:

  • Importer la schematic via le logiciel MCedit
  • Installer World Edit (plugin sous CraftBukkit ou Spigot pour les serveurs, mod « SinglePlayerCommands » pour les clients) et accéder au répertoire « schematics » présent dans le dossier du mod/plugin. Faites y glisser le fichier puis allez sur votre Minecraft et entrez les commandes « //schem load LGdirByLeiRoF » puis « //paste » à l’endroit où vous souhaitez l’installer.

Une fois installé, vous devrez appuyer sur les boutons présents en bas des systèmes nommés « Constant » et « Objectives ». Par précaution, cassez et reposez les blocs de redstone afin d’actualiser les blocs adjacents.

LeiRoF

Hey ! Moi c'est LeiRoF (Vincent de mon vrai nom), j'ai 20 ans, je suis étudiant en license de Physique-Chimie, j'ai créé Gunivers et je développe tout ce qui me passe par la tête dans mes heures perdues. Bref, j'aime bien la quiche. Des questions ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Aller à la barre d’outils