Ouep: modifier les valeurs de production et tout, c'est une autre idée, mais cela a beaucoup d'impact partout (production, consommation, stocks, dates, temps de transport, d'embarquement, de débarquement, de recherche, etc). C'est facile d'en oublier ou d'en faire en trop (commerce, combats, diplomaties etc peuvent ne pas être impactés).
J'ai eu ce genre de question sur la v0 d'Eclerd (qui a été passée de x100 à x500 je crois... ou l'inverse... bref, j'ai tatônné sur la vitesse de jeu) et modifier fonction de la ligne de temps est la solution la plus simple et efficace. Je me suis aussi mangé les décalages temporels, donc, je peux prévenir d'y faire gaffe![Smile Smile](https://jeuweb.org/images/smilies/smile.png)
Exemple:
Eclerd démarre en 2000-01-01 dans le jeu, pour une date IRL de 2015-01-01. Le jeu est en x365 (pour calculer facilement l'exemple).
→ Ma fonction est donc: DateJeu = F(DateRéelle) avec F(X) = 365 * (X - "2015-01-01") + "2000-01-01"
→ On vérifie la valeur de F("2015-01-01"): 365 * ("2015-01-01" - "2015-01-01") + "2000-01-01", donc on a bien F("2015-01-01") = "2000-01-01"
10 jours IRL plus tard, ECLERD est donc le 2010-01-01 (et on est IRL le 2015-01-11).
→ F("2015-01-11"): 365 * ("2015-01-11" - "2015-01-01") + "2000-01-01" = "2010-01-01"
Je décide d'accélérer le jeu. Je passe en x730 (1 jour IRL = 2 ans de jeu). Si je n'y prends pas garde, et que je change juste le "365" par "730", alors on aura:
→ F("2015-01-11"): 730 * ("2015-01-11" - "2015-01-01") + "2000-01-01" = "2020-01-01"
On a fait un bond en avant de 10 ans ! Logique en fait: on a modifié la vitesse du temps "dans le passé": les 10 jours IRL passés valaient 10 ans IG, et en valent maintenant 20.
Sur ECLERD, cela s'est traduit par un énorme "trou" dans les pyramides des ages (vu qu'il y a eu un bond de 10 ans dans le temps, aucune naissance n'a eu lieue sur cette décennie).
Pour éviter cela, il suffit de "ré-ancrer" sa fonction F à la date de changement de vitesse:
→ Ma fonction devient donc: DateJeu = G(DateRéelle) avec G(X) = 730 * (X - "2015-01-11") + "2010-01-01" (plus généralement, G(X) = 730 * (X - DateRéelleChangementVitesse) + F(DateRéelleChangementVitesse)
→ On vérifie alors G("2015-01-11"): 730 * ("2015-01-11" - "2015-01-11") + "2010-01-01" = "2010-01-01" On n'a pas bondit dans le temps.
Les mêmes formules s'appliquent si tu ralentis le jeu.
Note que rien n'oblige le temps à être linéaire! Je serai franchement intéressé de voir comment un jeu à temps quadratique évolue (ie: où F(X) = 10 * (X - "2017-07-10")² + 2000-01-01).
J'ai eu ce genre de question sur la v0 d'Eclerd (qui a été passée de x100 à x500 je crois... ou l'inverse... bref, j'ai tatônné sur la vitesse de jeu) et modifier fonction de la ligne de temps est la solution la plus simple et efficace. Je me suis aussi mangé les décalages temporels, donc, je peux prévenir d'y faire gaffe
![Smile Smile](https://jeuweb.org/images/smilies/smile.png)
Exemple:
Eclerd démarre en 2000-01-01 dans le jeu, pour une date IRL de 2015-01-01. Le jeu est en x365 (pour calculer facilement l'exemple).
→ Ma fonction est donc: DateJeu = F(DateRéelle) avec F(X) = 365 * (X - "2015-01-01") + "2000-01-01"
→ On vérifie la valeur de F("2015-01-01"): 365 * ("2015-01-01" - "2015-01-01") + "2000-01-01", donc on a bien F("2015-01-01") = "2000-01-01"
10 jours IRL plus tard, ECLERD est donc le 2010-01-01 (et on est IRL le 2015-01-11).
→ F("2015-01-11"): 365 * ("2015-01-11" - "2015-01-01") + "2000-01-01" = "2010-01-01"
Je décide d'accélérer le jeu. Je passe en x730 (1 jour IRL = 2 ans de jeu). Si je n'y prends pas garde, et que je change juste le "365" par "730", alors on aura:
→ F("2015-01-11"): 730 * ("2015-01-11" - "2015-01-01") + "2000-01-01" = "2020-01-01"
On a fait un bond en avant de 10 ans ! Logique en fait: on a modifié la vitesse du temps "dans le passé": les 10 jours IRL passés valaient 10 ans IG, et en valent maintenant 20.
Sur ECLERD, cela s'est traduit par un énorme "trou" dans les pyramides des ages (vu qu'il y a eu un bond de 10 ans dans le temps, aucune naissance n'a eu lieue sur cette décennie).
Pour éviter cela, il suffit de "ré-ancrer" sa fonction F à la date de changement de vitesse:
→ Ma fonction devient donc: DateJeu = G(DateRéelle) avec G(X) = 730 * (X - "2015-01-11") + "2010-01-01" (plus généralement, G(X) = 730 * (X - DateRéelleChangementVitesse) + F(DateRéelleChangementVitesse)
→ On vérifie alors G("2015-01-11"): 730 * ("2015-01-11" - "2015-01-11") + "2010-01-01" = "2010-01-01" On n'a pas bondit dans le temps.
Les mêmes formules s'appliquent si tu ralentis le jeu.
Note que rien n'oblige le temps à être linéaire! Je serai franchement intéressé de voir comment un jeu à temps quadratique évolue (ie: où F(X) = 10 * (X - "2017-07-10")² + 2000-01-01).