# Simulation de trafic dans Pizza Tycoon : Fluide à 25 MHz
Dans Pizza Tycoon, le trafic est géré par un système simple qui tourne sur un processeur 386 cadencé à 25 MHz. Chaque véhicule avance d’un pixel par tick de jeu. La boucle principale vérifie les obstacles et ajuste les coordonnées : +1 en X vers l’est, -1 en Y vers le nord.
Le compteur progress décompte de 16 à 0. Quand il atteint zéro, il se remet à 16 et déclenche la logique des frontières de tuiles : choix d’une direction et mise à jour du sprite. Les tuiles de 16x16 pixels gardent tout synchronisé — les calculs lourds se font 16 fois moins souvent que les déplacements pixel par pixel.
Au spawn, progress est randomisé (1–16) pour répartir la charge sur les frames.
Agencement des routes et règles de direction
Les cartes sont une grille de 160x120 tuiles issue de landsym.vga. Les routes sont à sens unique : tuile 0x16 vers l’est, 0x06 vers l’ouest, 0x26/0x36 pour les voies verticales.
Les virages ajoutent des embranchements. La tuile 0x56 (CORNER_SW) permet ouest ou sud. Choix : 50 % virage/droit. Interdire deux virages à gauche consécutifs garde un flux naturel.
Les cartes sont conçues de façon logique — les tuiles adjacentes supportent toujours des trajets valides.
- Tuiles droites : Direction fixe.
- Virages : Choix probabiliste avec anti-boucles.
- Carrefours en T/X : Combinaisons de virages.
Détections de collisions par vérifications par paires
O(n²) pour 25 véhicules fait 625 vérifications par frame. Optimisation : sortie anticipée par direction. Les paires est+ouest s’éliminent sans vérifier les coordonnées, car les sens uniques évitent les face-à-face.
Vérifications :
- Directions (élimine la moitié des paires).
- Voie (correspondance route).
- Calculs de coordonnées (rare, <10 paires).
Collision → pause 10 ticks. Les embouteillages se résolvent naturellement : le véhicule de tête bouge en premier.
Bugs (traversée d’objets) sont un effet secondaire des optimisations, acceptable pour une simu visuelle.
Génération et recyclage des véhicules
Entrée en mode rue : scan de 132 tuiles (12x11). Pour les routes, lancer les dés selon la densité du quartier. Virages exclus.
Sortie d’écran : remplacement par un nouveau véhicule direction/couleur opposée sur la même tuile. Le défilement gère les nouvelles voies de façon similaire.
// Pseudocode de spawn
for each road_tile in viewport:
if random(traffic_density) > threshold:
spawn_car(tile, random_direction, random_progress)
Déassemblage de l’assembleur et pièges modernes
L’auteur de Pizza Legacy a passé 14 ans sur des graphes surkill, A* et collisions. L’original est plus simple : les tuiles dictent les trajets, pas de physique/vitesses.
Analyse assembleur + LLM a révélé les mécaniques. Restauration : switch dans decide_desired_direction (Car.cpp) par types de tuiles.
| Approche | Complexité | Efficacité |
|----------|------------|------------|
| Original | Règles simples | 25 MHz, 30 véhicules |
| Moderne | Graphes, physique | Deadlocks sur CPU 2010+ |
Enseignements clés
- Tuiles à sens unique éliminent le pathfinding.
- Sorties anticipées de collisions minimisent les boucles.
- Déplacement pixel par pixel + mises à jour rares = faible charge CPU.
- Virages probabilistes + anti-boucles = réalisme sans IA.
- Recyclage des véhicules évite la gestion de listes.
— Editorial Team
Aucun commentaire pour le moment.