JeuWeb - Crée ton jeu par navigateur
Comment gérez-vous les effets sur vos personnages? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Comment gérez-vous les effets sur vos personnages? (/showthread.php?tid=5806)

Pages : 1 2


Comment gérez-vous les effets sur vos personnages? - Argorate - 14-11-2011

Bonjour,

je suis en train de coder les classe de personnage pour ma v0.3 et je souhaiterais avoir l'avis de d'autres personne sur le sujet.

En effet, mon "problème" est que si je donne par exemple un bonus de 10PV à un joueur, l'effet est donc immédiat, pas de problème.

Maintenant, je donne +10% de PV a mon joueur. L'effet est d'abord immédiat, je calcule 10% de plus et je l'ajuste le total en bdd, mais que se passe t-il si d'un coup j'obtiens un autre bonus de +10PV?

Comment définir les ordres de priorité? comment savoir quand recalculer le tout?

Plus généralement comment gérez vous les différents effets (bonus/malus) sur vos personnages?
Et pour les effets non "immédiat" (par exemple un bonus de dégât - uniquement lors des combat donc)? Vous faite un if() dans le moteur de combat? Une idée plus générique?


Voilà n'hésitez pas a partager toutes les idées de conceptions à ce sujet !

Merci.


RE: Comment gérez-vous les effets sur vos personnages? - Globe - 15-11-2011

Pourquoi ne pas simplement créer une table pour les effets affectant le personnage ? Tu y stockes l'id du joueur le modificateur, la caractéristique à modifier et sa zone d'application (toutes les situations, combat, déplacement...). Ensuite lors des situations appropriées tu ajoutes simplement les effets. En combat tu ajoutes tous les pourcentages ou points supplémentaires ou la zone d'application de l'effet est "combat", par rapport aux caractéristiques de base du joueur.


RE: Comment gérez-vous les effets sur vos personnages? - srm - 15-11-2011

Il y a plusieurs choses, soit tu te compliques pas la vie et les bonus sont toujours du même type, c'est à dire à valeur fixe, pas de %
Soit il faut définir le type de bonus au prorata (pourcentage), soit il y a qu'un type, qui est soit, le pourcentage de la vie de base, soit le pourcentage de la vie total. Soit tu définis les deux types, et selon le type de prorata tu traites avant les bonus ou après Smile


RE: Comment gérez-vous les effets sur vos personnages? - niahoo - 15-11-2011

Je dirais qu'il te faut recalculer le tout à chaque changement tout simplement.
Pour les ordres de priorités je définirais deux types basiques d'effets : les effets longs/permanents et les effets courts.

Ensuite c'est à toi de choisir les priorités mais ça permet d'y voir clair:

J'ai 100 points de vie, je me mets un buff longue durée de 10% => 110 est mon nouveau total. Le buff longue durée affecte en profondeur mon être. Donc, si ensuite je me mets un autre buff longue durée de 20 %, j'aurai au total 132.
C'est facile car ça permet de pas galérer avec une priorité, vu que dans le calcul l'ordre des buffs ne change pas
100 × 1.1 × 1.2 = 100 × 1.2 × 1.1 = 132

Ensuite, si tu ulises un buff courte durée de +10 PV, tu ajoutes du buffer sur la barre de vie en somme. Tu ne recalcules pas les pourcentages par rapport à ce petit ajout.
(vie de base = 132) + 10 => 142

Ce qui est cool aussi c'est que si tu exprimes ton buff temporaire en pourcentages, tu n'as pas non plus de problème avec l'ordre d'application : (100 × 1.1 × 1.2) × 1.1 => tu peux virer les parenthèses.




RE: Comment gérez-vous les effets sur vos personnages? - Argorate - 15-11-2011

Globe: je préfère stocker les effets fixe directement dans le champs correspondant lorsque c'est possible (comme avec les pv par exemple)

oxman & niahoo : le problème c'est justement le "avant ou après", car là niahoo, tu as déjà fait un choix de priorité dans ton exemple.

En gros tu prends les pourcentages, tu les appliques et tu ajoutes les "+" derrière (effectivement c'est plus simple), mais ça veux dire qu'un joueur qui à un bonus de classe de 10% de PV, les auras sur ces PV de base, mais s'il obtient une arme ou autre objet qui fait un bonus de +10PV, le %age n'y sera pas appliqué, c'est ça qui me gène ^^

Sinon pour se qui est de le recalculé a chaque modif, ça veux dire qu'il faut faire un traitement spécial de le setPv() et tout les nombreux autres carac possible?
C'est un peu long et redondant non? Confused


RE: Comment gérez-vous les effets sur vos personnages? - srm - 15-11-2011

Le choix du avant/après c'est toi qui le fait selon ton gameplay, style de jeu etc Smile
En général les % c'est avant les bonus, sinon ça donne un trop gros avantage aux objets en %


RE: Comment gérez-vous les effets sur vos personnages? - Math - 15-11-2011

Pour moi, un bonus en pourcentage par une arme ne devrait pas donner lieu à une augmentation de PV avec le ratio de pourcentage. Qu'une arme stock un peu de PV ou puisse soigner automatiquement peut être logique mais qu'elle bénéficie elle même des améliorations du personnage serait étrange. Ainsi tu aurais: PVtot= (PVbase + PVbonus) * %bonus + PV arme.

Après que la gène du recalcule est minime cela dépend de la fréquence d'augmentation mais je doute que les joueurs augmente leurs PV tout les jours.


RE: Comment gérez-vous les effets sur vos personnages? - niahoo - 15-11-2011

Je trouverais logique qu'une arme bénéficie des bonus d'un personnage : Un sabre avec un équilibrage particulier serait par exemple terrible dans les mains d'un personnage expérimenté, mais peu efficace (voire pénalisant) pour un novice.

Par contre qu'une arme te rendre plus agile ce n'est pas logique, bien que l'implémentation le laisse croire : on donnera un bonus d'agi à l'arme pour expliquer qu'elle est maniable alors qu'on pourrait se contenter d'améliorer le bonus aux dégâts conférés par l'agilité pour cette arme.

Dans les deux cas, l'exemple des PV est mal choisi pour une arme parce que les points de vie c'est dans le corps du perso et pas dans son stuff.

(15-11-2011, 04:11 PM)Argorate a écrit : Globe: je préfère stocker les effets fixe directement dans le champs correspondant lorsque c'est possible (comme avec les pv par exemple)

oxman & niahoo : le problème c'est justement le "avant ou après", car là niahoo, tu as déjà fait un choix de priorité dans ton exemple.

En gros tu prends les pourcentages, tu les appliques et tu ajoutes les "+" derrière (effectivement c'est plus simple), mais ça veux dire qu'un joueur qui à un bonus de classe de 10% de PV, les auras sur ces PV de base, mais s'il obtient une arme ou autre objet qui fait un bonus de +10PV, le %age n'y sera pas appliqué, c'est ça qui me gène ^^

Sinon pour se qui est de le recalculé a chaque modif, ça veux dire qu'il faut faire un traitement spécial de le setPv() et tout les nombreux autres carac possible?
C'est un peu long et redondant non? Confused


Oui j'ai fait un choix, vu que tu demandes comment on fait/ferait, c'est une proposition. Elle a le mérite d'être simple si on applique tous les bonus longue durée en % et les temporaires en +/-

Mais tu peux facilement décider autrement tes priorités.
Autre exemple : je prends en premier les bonus "naturels", que tu as tout le temps, par exemple bonus de classe de +10% de PV (100 => 110)
Ensuite, je prends les bonus du stuff, une armure +10 PV (comme je l'ai dit c'est pas logique mais c'est courant) (110 => 120)
Ensuite j'ajoute les buffs magiques en pourcentage sur le total, dans l'ordre ou ils ont été posés, ou bien pourcentages d'abord et +/- ensuite

Mais comme tu dis que ça te gène, fais l'inverse, tu prends d'abord les bonus conférés par les armes, puis les 10% de classe.

Deux choses ici, dans les deux cas il te faudra faire des tests d'équilibrage pour voir quelle méthode est interessante. Ensuite, il faudra rester cohérent, afin qu'on puisse faire du theorycraft ou plus simlpement que le joueur sache le calculer.

Ensuite tu peux complexifier la chose : si comme dans wow les points de vie sont en partie déduits de l'endurance, tu peux donner à une armure un bonus d'endurance, qui sert dans le calcul de base des stats et par-dessus lequel tu appliques les bonus de classe. Et pour d'autres objets, tu peux donner un simple bonus de PV qui viendront simplement s'additionner au total.

Enfin, pour l'implémentation, je disais simplement que , ton joueur de base dispose de 100 + 10% de classe + 10% d'une arme + 10 magiques:

100 * 1.1 * 1.1 + 10

ensuite le timer des 10 magiques finit, tu recalcules simplement en listant tous les bonus du joueur dans l'odre que tu es en train de décider :

100 * 1.1 * 1.1

et pouf tu as tes nouveaux PV.

C'est redondant parce que ça tombe à chaque fois qu'il y a un changement, mais ça me paraît logique. Et ça ne devrait pas être long non, vui que ce sont de simples multiplications/additions/etc

Sinon si je devais retenir un truc de ce que j'ai dit c'est :
1. définir un ordre entre bonus natifs, bonus des armes, buffs magiques/rage/etc. (dans cet ordre là pour moi car je vais du plus permanent au plus court -- sauf si on change d'arme ??)

2. dans chaque groupe, appliquer d'abord les pourcentages puis les additions, c'est plus simple à calculer dans sa tête et pour y voir clair.

3. rester cohérent : ne pas s'parpiller entre des épées qui apportent du bonus % à l'endurance et d'autres du +/- à l'endurance. Pour le couple endurance/arme-blanche ce sera toujours pourcentage, ou bien score mais pas l'un ou l'autre selon l'objet.
(tu peux remplacer couple endurance/arme-blanche par endurance/arme-blanche/guerrier pour différencier les effets selon la classe si chaque classe est spécifique, pourquoi pas, l'important est de ne pas perdre le joueur)


RE: Comment gérez-vous les effets sur vos personnages? - Argorate - 15-11-2011

Ok, merci.

Sinon, niveau prog, concrètement, je suis obligé de faire l'algo de calcule dans le setPv(), setUt(), setCrédit, setPt(), setRegenPV(), setRegenUt()... etc
C'est dans ce sens là que je trouve ça long et chian Confused

C'est bien comme ça que tu ferais?


RE: Comment gérez-vous les effets sur vos personnages? - niahoo - 15-11-2011

Pas exactement. Moi j'aurais des stats : vie, endurance, agilité, vitesse, avec un ID, des bonus : {bonus_id, stat_id, amount, type_amount} genre {1, 2, 10, '+'}, {2, 7, 15, '%'} et ensuite une fonction qui calcule les stats de mon perso en appliquant tous les bonus qui lui sont associés, un par un, dans l'ordre dont on discute.