Pourquoi la production ne s'arrête jamais quand vous fermez le jeu

Un jeu de gestion qui punit l'absence n'est pas difficile, il est juste exigeant sur votre emploi du temps. Voilà comment Astra Genesis calcule ce qui s'est passé pendant que vous n'étiez pas là.

Le graphe des usines : le trajet réel du minerai jusqu'au module de vaisseau, avec les cadences et les priorités.

Il y a une règle que je me suis donnée au premier jour de ce projet, et qui a survécu à tout le reste : fermer le jeu ne doit jamais coûter quelque chose.

Ça a l'air anodin. Ça ne l'est pas du tout. C'est la contrainte qui a le plus influencé l'architecture du moteur, bien avant les graphismes ou l'équilibrage.

Le problème avec la plupart des jeux de gestion

Dans un jeu de gestion en ligne classique, la boucle est simple : vous lancez une production, elle met huit heures, et vous devez revenir la récupérer. Si vous revenez trop tard, l'entrepôt est plein et le reste est perdu. Si un joueur passe pendant la nuit, vos ressources partent avec lui.

Ce n'est pas de la difficulté. C'est un impôt sur votre disponibilité. Un joueur qui peut se connecter six fois par jour bat un joueur qui joue mieux mais qui travaille. Et surtout : rien de tout ça n'est intéressant. Personne n'a jamais raconté à un ami une décision passionnante prise à trois heures du matin pour sauver une flotte.

Ce que fait Astra Genesis à la place

Le moteur ne simule pas le temps en continu. Il stocke un horodatage, et quand vous revenez, il calcule ce qui aurait dû se passer entre les deux. C'est ce que fait la fonction de rattrapage :

// Le serveur rejoue les heures d'absence, borne par borne :
// chaque fin de construction, chaque fin de recherche et chaque
// retour d'expédition est traité dans l'ordre, avec les taux de
// production tels qu'ils étaient à cet instant précis.
catchUp(state, elapsedSeconds);

Le détail qui compte est dans cette dernière phrase. Un rattrapage naïf multiplie la production actuelle par la durée d'absence, ce qui est faux dès qu'un événement change les taux au milieu. Si votre usine se termine deux heures après votre déconnexion, les six heures suivantes doivent utiliser le nouveau débit, pas l'ancien. Le rattrapage découpe donc l'absence aux bornes des événements, et recalcule les taux à chaque borne.

C'est plus long à écrire. C'est aussi la seule version honnête.

Ce qui ne se produit pas non plus

  • Les entrepôts ne débordent pas au sens punitif. Une chaîne saturée s'arrête et attend, elle ne détruit rien.
  • Aucun événement ne se déclenche en votre absence pour vous retirer quelque chose. Les incursions arrivent avec un préavis que vous voyez avant de fermer.
  • Il n'y a pas de bouton pour accélérer contre de l'argent réel, parce qu'il n'y a rien à accélérer : le temps passe pareil que vous soyez là ou non.

Le vrai coût de ce choix

Il faut être honnête : cette règle rend l'équilibrage plus difficile. Sans pression temporelle, la seule tension qui reste est celle des arbitrages. Chaque palier doit poser une vraie question de plan d'usine, sinon il ne reste plus rien du tout. C'est un jeu où je ne peux pas me cacher derrière un compte à rebours pour faire semblant qu'il se passe quelque chose.

Tant mieux. C'était l'idée.