Introduction
RollerCoaster Tycoon, sorti en 1999, est souvent cité comme l'un des jeux les plus optimisés de son époque. Son créateur, Chris Sawyer, a réussi à simuler des parcs d'attractions entiers avec des milliers d'agents sans ralentir, sur le matériel de l'époque. Comment a-t-il réussi cet exploit ?
Contexte Technique
Le jeu a été écrit presque entièrement en langage Assembly, ce qui permettait à Chris Sawyer de créer des programmes plus performants que s'il avait utilisé des langages de haut niveau comme C ou C++. Le code du jeu a également été optimisé de manière agressive. Grâce à une réimplémentation compatible à 100% du jeu, OpenRCT2, nous pouvons étudier les techniques d'optimisation utilisées.
Les types de données utilisés pour stocker les valeurs d'argent dans le jeu sont choisis en fonction de la plage de valeurs attendue. Par exemple, la variable qui stocke la valeur globale du parc utilise 4 octets, tandis que le prix d'un article de boutique n'utilise qu'un octet.
Le jeu utilise également des décalages de bits pour remplacer les opérations mathématiques. Cette technique, qui consiste à déplacer les bits d'une valeur pour effectuer des multiplications ou des divisions, est utilisée fréquemment dans le code du jeu.
Analyse et Implications
Ces optimisations ont permis à RollerCoaster Tycoon de fonctionner sans ralentir sur le matériel de l'époque. Cependant, il est important de noter que ces techniques d'optimisation ne sont plus nécessaires avec les compilateurs modernes, qui sont capables de réaliser ces optimisations automatiquement.
La conception du jeu a également été influencée par les contraintes de performance. Les formules utilisées dans le jeu ont été conçues pour utiliser des nombres qui sont faciles à calculer pour le processeur, ce qui a permis de réduire les coûts de calcul.
Perspective
RollerCoaster Tycoon reste un exemple de référence en matière d'optimisation de jeux. Les techniques utilisées dans ce jeu peuvent encore être utiles aujourd'hui, notamment dans les cas où les ressources sont limitées. Cependant, il est important de noter que les compilateurs modernes et les matérielles plus puissants ont réduit la nécessité de ces optimisations.
Il est également important de noter que la conception de jeux pour la performance nécessite une compréhension approfondie des contraintes techniques et des compromis qui doivent être faits. Les concepteurs de jeux doivent être conscients des implications de leurs choix de conception sur les performances du jeu.