#Prélude(Prélude)
Nous sommes ici dans une section présentation des mod en développement.
De ce fait, nous n’entameront pas une présentation user-friendly avec de ‘zolie image y tout’, mais une présentation très technique.
Le code sources est disponible à l’adresse suivante : https://github.com/Jodge65/ElementalLibrary.
Si vous avez des remarques, des suggestions, des améliorations, n’hésitez surtout pas !
Ce nom peut vous inspirez beaucoup de chose, mais un seul mot importe : ‘Elemental’.
Vous l’aurez peut-être devinez, le but de ce mod est d’ajouter un principe d’élément, entraînant alors Faiblesse & Résistance.
Ce mod, bien qu’il puisse fonctionner seul, aura pour vocation d’être accompagné d’autre mod qui lui permettrons alors de dévoilé toute sa puissance.
Il faut dire qu’as l’heure actuel, à part quelque changement sur les valeurs final de dommage (ce qui peut changer le nombre de coup nécessaire pour tuer), les changements sont invisible a l’œil nus.
#Fonctionnement(Fonctionnement)
Ce mod modifie fondamentalement la méthode de calcul des dégâts.
Il utilise pour ça des matrices d’éléments.
Le principe est assez simple :
Entité A attaque Entité B avec une Arme C, le tous situé dans un environnement D avec :
- A Matrice de bonus en dégât de l’entité (pourcentage)
- B Matrice de résistance de l’entité (pourcentage de dégât reçus)
- C Matrice de dégât brut de l’arme (Constante de dégât fixe)
- D Matrice de modificateur environnemental (pourcentage)
On effectue alors le calcul de matrice simple : C x A x B x D.
Dans un souci pratique, et afin d’évité la division par 0, on ne divise pas B (matrice de résistance) mais on suppose que toute résistance < 1.0F réduira les dommages.
On addition ensuite chaque valeur positive dans une variable dommage, et chaque valeur négative dans une variable soin.
La variable dommage sert simplement à faire le lien avec Minecraft (les dégâts sont infligé en une seul fois).
La variable soin permet d’ajouté un concept d’absorption. Imaginons un Blaze. C’est un monstre qui vit dans le feu, l’attaqué avec de l’eau sera donc on ne peut plus efficace. En revanche, l’attaquer avec du feu aura pour effet de le soigner.
#Particularité(Particularité)
En plus de modifier la méthode de calcul des dommages, le mod offre la possibilité de modifier les caractéristiques d’un monstre.
Chaque matrice est enregistré dans le dossier monsterData de la map et peut-être modifié manuellement (pour les joueurs, cela si situe dans le dossier playerData). Chaque monstre possède son propre dossier pour une raison simple : renommé une entité, et elle obtiendra les caractéristiques enregistré dans le fichier ayant le même nom qu’elle. Cela offre la possibilité au map maker de personnalité encore plus les monstres en leurs offrants les résistances/faiblesses souhaitées.
L’autre particularité de ce mod est d’être programmer de façon algorithmique. Cela signifie 2 choses :
- Le mod palliera l’absence de données du mieux qu’il le peu
- L’ajout de nouvelle caractéristique peut se faire simplement. Un panel de fonctionnalité est fournis afin que n’importent qu’elles mods puissent intégrer ses propres valeurs, sans pour autant exigé que ce mod soit présent (dans certaine limite : l’ajout d’un élément nécessitera forcément la présence du mod). Ainsi, les données seront présentes si ce mod est inclus, ou seront simplement ignorer le cas échéant.
- Des mod modifiant les éléments pourront être disponible ServerSide Only (sous réserve ne de pas modifier de mécanique)
Le principal avantage est de grandement simplifier l’ajout/suppression. Server Side Only reste néanmoins problématique pour certaine valeur (l’environnement par exemple et gérer procéduralement de chaque coté. On a donc le même résultat, mais on code en dur les éléments pour cela.
#Gameplay(Gameplay)
Certain changement de gameplay sont à prévoir avec cette nouvelle mécanique.
Je détaillerai cette section ultérieurement, mais pour ne pas vous laissez en plan, voila l’exemple le plus marquant :
L’armure de diamant offre une très bonne protection, en revanche, elle est résiste mal à la chaleur (elle chauffe, et donc l’utilisateur se retrouvé étouffé).
En revanche l’armure d’or offre une très bonne protection contre le feu (parce que minecraft:pigmen)
Il sera donc bien plus intéressant de prendre quelque équipement en or lors d’une sortie Néther car ces dernier offrirons une bien meilleur défense contre les monstre locaux.
Autre point qu’il sera intéressent de constater, les armure d’or et de fer sont fait a partir de métaux conducteur. Il vas de soit que les attaques électrique seront particulièrement efficace contre ! (Vanilla, seul l’éclaire pourra vous frapper avec la foudre)
#Avancement (Avancement )
Fonctionnel (tous ce qui attrait à des parties fonctionnels. Ne signifient pas qu’elles sont optimisées)[list
- Gestion des sources de dégâts simple* Fonctionnalité de Matrice par défaut personnalisé pour les Armes* Fonctionnalité des matrices par défauts personnalisés pour les entités.* Génération des données manquante* Fonctionnalité de lecture/écriture des données de sauvegarde* Génération de la matrice environnemental (Prend en compte Température & Humidité du Biome)* Fonctionnalité d’auto-génération des données manquantes (Entité Vanilla + Item)* Gestion des sources des sources de dégât ‘autre’ (suffocation, lave, feu…) (DamagesSources Vanilla)* Gestion des données ServerSide Only (auparavant, les éléments était synchronisé, ce qui posé diverse problème, notamment pour la personnalisation)* Modification des caractéristiques lors de l’utilisation d’un NameTag (Utile au MapMaker)* Gestion propre de l’armure avec fonctionnalité de Matrice de résistance par défaut personnalisé pour les armures (incluant effet d’inversion, c’est a dire les dommages soignent, et les soin font des dégâts)]
Semi-Fonctionnel (tous ce qui attrait à des parties en cours de développements)[list
- Gestion des sources de dégâts par projectile (persiste un problème sur les flèches qui rebondissent)* Fonctionnalité d’effet par défaut pour un élément (actuellement initialisé, mais non appliqué (effet de potion)/mal appliqué(lorsqu’on est en feu, dégât de feu, du coup ré-application de l’effet infinis ^^'))]
Non-Fonctionnel (tous ce qui attrait à des parties non développé mais prévue)[list
- Gestion des sources de dégât sans entité (Dispenser)* Gestion des Enchantements* Gestion des cas ‘spéciaux’ d’entité (Golem & Boss) /!\ Problème : les Golems n’ont pas de valeur de dégât prédéfinis et accessible. Une valeur random différente est tiré a chaque fois…]
Idée (tous ce qui attrait à des parties actuellement non prévue, mais qui pourrait être développé. Le mod est supposé être fonctionnel sans)[list
- Matrice Mondial (Matrice propre à une dimension, ex dégât d’eau = 0 dans le Nether)* Fonctionnalité de Matrice de résistance par défaut personnalisé pour les armures* Matrice Brute (bonus/malus de dégât brute et non en %)* Gestion des données intégralement par Fichier (fichier de config ServerSide Only contenant TOUTE les données possible : Élément, Effet, Damage Source…). (Dépendra de la facilité a convertir des Tag en Json, et d’outrepasser les problèmes d’absence)* Fonctionnalité d’auto-génération des données manquantes (Entité Non-Vanilla) /!\ Problème : Comment gérer une auto génération des entités dans ce cas ? Un Blaize d’eau aura des résistances et faiblesses diamétralement opposé au Blaize normal. Utilisé une vérification par ‘instanceof’ est donc difficilement envisageable dans ce cas…* Gestion des sources des sources de dégât ‘autre’ (suffocation, lave, feu…) (DamagesSources Vanilla) /!\ Problème : idem qu’entité…]