Supposons que je veuille intégrer des accidents industriels dans Isometry, je pense que je procéderai alors sous la forme suivante:
• Calcul d'un niveau dangerosité de l'usine, à partir de l'état du jeu comme D = (1 - PointsDeVieActuels / PointsDeVieTotal) * FacteurSpecifiqueUsine * (1 - exp(AgeUsineAnnees)). Les pts de vie représentent l'état de délabrement de l'usine, l'âge permet de pousser les joueur à restaurer les vieilles usines et le facteur dépend du type d'usine construite (statique, dans la BDD, éventuellement inconnu du joueur)
• Calcul de différents seuils pour qu'un évènement se déclenche. Eventuellement, une constante de jeu, ou une valeur statique par type d'usine, ou une valeur calculée dépendant du type de case, du type de bâtiment, voire du classement du joueur (pour que les meilleurs aient plus d'accidents que les autres, donc OK plus de difficultés, mais aussi plus d'opportunités de briller en gérant bien la crise). Les seuils pourraient éventuellement se chevaucher (si c'est logique).
• Suivant les seuils actifs, les évènements se passent.
A mon sens, cela reste:
• jouable pour l'utilisateur: aucun risque qu'une usine toute neuve explose, sauf choix du créateur de jeu
• simple à coder et implémenter (et probablement performant): tout est déterministe, je n'ai pas de prise de tête avec des tours, des CRONS ou des trucs du genre
• simple à expliquer aux joueurs: je peux afficher les seuils, dire dans lequel se trouve l'usine, et le joueur verra que, par exemple, son usine va péter dans 3h s'il ne fait rien, ce qui peut accessoirement pousser à l'urgence, de sorte que le joueur reste pour empêcher l'accident à venir, plutôt que d'abandonner le jeu après que l'accident ait eu lieu et l'ait dégoûté
• fiable dans le temps: je peux virer des paramètres ou en rajouter, sans risquer que l'équilibre de jeu ne parte en vrille car je ne manipule pas des "intervalles de probabilité"
• extensible: il me semble que c'est aisé d'imaginer de nouveau scénarios et seuils
• "surveillable" (pilotable?): certaines infos ne sont pas affichées aux joueurs, mais je peux les afficher aux admins (bon, perso, ce serait juste une vue SQL et bast)
Mais surtout, cela permet de comprendre pourquoi un pays est parti en vrille: cela ne peut être *que* à cause d'un joueur nul, ou à cause d'un gameplay mal équilibré. Dans le cas de l'aléatoire, cela pourrait aussi être "parce que t'as pas eu de bol :/" et là, je trouve que c'est très compliqué à corriger et à faire accepter aux joueurs.
Je sais bien que "le risque zéro n'existe pas gnagna", mais quand je joue, ça me gonfle de me faire péter la rondelle sur un coup de malchance :/ Ou de voir que l'autre gagne et prend de l'avance sur un coup de pot.
Tiens un autre exemple amusant, ce serait le genre "Mario kart" et les caisses de bonus. Pour moi, je préfère une implémentation déterministe, basée par exemple sur la durée écoulée depuis le début de la course (plutôt qu'un aléatoire brutal). Genre F = sinus( (T - T0)/K) avec T0 le départ de la course et T le moment de fracassage de la caisse. Il n'y a plus qu'à donner, à chaque item, un intervalle de valeurs (ie: carapace rouge si F > 0.95 et F <= 0.97) que l'on peut éventuellement moduler à partir de la position du personnage dans le classement, et du fait que c'est ou non un joueur. Aucun risque de ne tirer que des grosses armes même si on est en tête, ni de tirer que des brêle si on est à la traîne. On peut remplacer le sin par une fonction triangle hein (FloatPart((T - T0)/K)), ce sera d'ailleurs plus simple à maîtriser.
• Calcul d'un niveau dangerosité de l'usine, à partir de l'état du jeu comme D = (1 - PointsDeVieActuels / PointsDeVieTotal) * FacteurSpecifiqueUsine * (1 - exp(AgeUsineAnnees)). Les pts de vie représentent l'état de délabrement de l'usine, l'âge permet de pousser les joueur à restaurer les vieilles usines et le facteur dépend du type d'usine construite (statique, dans la BDD, éventuellement inconnu du joueur)
• Calcul de différents seuils pour qu'un évènement se déclenche. Eventuellement, une constante de jeu, ou une valeur statique par type d'usine, ou une valeur calculée dépendant du type de case, du type de bâtiment, voire du classement du joueur (pour que les meilleurs aient plus d'accidents que les autres, donc OK plus de difficultés, mais aussi plus d'opportunités de briller en gérant bien la crise). Les seuils pourraient éventuellement se chevaucher (si c'est logique).
• Suivant les seuils actifs, les évènements se passent.
A mon sens, cela reste:
• jouable pour l'utilisateur: aucun risque qu'une usine toute neuve explose, sauf choix du créateur de jeu
• simple à coder et implémenter (et probablement performant): tout est déterministe, je n'ai pas de prise de tête avec des tours, des CRONS ou des trucs du genre
• simple à expliquer aux joueurs: je peux afficher les seuils, dire dans lequel se trouve l'usine, et le joueur verra que, par exemple, son usine va péter dans 3h s'il ne fait rien, ce qui peut accessoirement pousser à l'urgence, de sorte que le joueur reste pour empêcher l'accident à venir, plutôt que d'abandonner le jeu après que l'accident ait eu lieu et l'ait dégoûté
• fiable dans le temps: je peux virer des paramètres ou en rajouter, sans risquer que l'équilibre de jeu ne parte en vrille car je ne manipule pas des "intervalles de probabilité"
• extensible: il me semble que c'est aisé d'imaginer de nouveau scénarios et seuils
• "surveillable" (pilotable?): certaines infos ne sont pas affichées aux joueurs, mais je peux les afficher aux admins (bon, perso, ce serait juste une vue SQL et bast)
Mais surtout, cela permet de comprendre pourquoi un pays est parti en vrille: cela ne peut être *que* à cause d'un joueur nul, ou à cause d'un gameplay mal équilibré. Dans le cas de l'aléatoire, cela pourrait aussi être "parce que t'as pas eu de bol :/" et là, je trouve que c'est très compliqué à corriger et à faire accepter aux joueurs.
Je sais bien que "le risque zéro n'existe pas gnagna", mais quand je joue, ça me gonfle de me faire péter la rondelle sur un coup de malchance :/ Ou de voir que l'autre gagne et prend de l'avance sur un coup de pot.
Tiens un autre exemple amusant, ce serait le genre "Mario kart" et les caisses de bonus. Pour moi, je préfère une implémentation déterministe, basée par exemple sur la durée écoulée depuis le début de la course (plutôt qu'un aléatoire brutal). Genre F = sinus( (T - T0)/K) avec T0 le départ de la course et T le moment de fracassage de la caisse. Il n'y a plus qu'à donner, à chaque item, un intervalle de valeurs (ie: carapace rouge si F > 0.95 et F <= 0.97) que l'on peut éventuellement moduler à partir de la position du personnage dans le classement, et du fait que c'est ou non un joueur. Aucun risque de ne tirer que des grosses armes même si on est en tête, ni de tirer que des brêle si on est à la traîne. On peut remplacer le sin par une fonction triangle hein (FloatPart((T - T0)/K)), ce sera d'ailleurs plus simple à maîtriser.