# Simulación de tráfico en Pizza Tycoon: Funcionando a 25 MHz
En Pizza Tycoon, el tráfico se maneja con un sistema directo que corre en un procesador 386 a 25 MHz. Cada vehículo avanza un píxel por tick del juego. El bucle principal verifica obstáculos y ajusta coordenadas: +1 en X hacia el este, -1 en Y hacia el norte.
El contador progress cuenta hacia atrás desde 16 hasta 0. Al llegar a cero, se reinicia a 16 y activa la lógica de límites de baldosa: elige una dirección y actualiza el sprite. Las baldosas de 16x16 píxeles mantienen todo sincronizado; los cálculos pesados ocurren 16 veces menos que el movimiento píxel a píxel.
Al generarse, progress se randomiza (1–16) para distribuir la carga entre frames.
Diseño de carreteras y reglas de dirección
Los mapas son una cuadrícula de 160x120 baldosas de landsym.vga. Las carreteras son de un solo sentido: la baldosa 0x16 va hacia el este, 0x06 hacia el oeste, 0x26/0x36 manejan los caminos verticales.
Las curvas añaden ramificaciones. La baldosa 0x56 (ESQUINA_SO) permite ir al oeste o al sur. Elección: 50% curva/recto. Prohibir dos giros a la izquierda seguidos mantiene el flujo natural.
Los mapas están diseñados lógicamente: las baldosas adyacentes siempre permiten caminos válidos.
- Baldosas rectas: Dirección fija.
- Curvas: Elección probabilística con antirrepetición.
- Intersecciones T/X: Combinaciones de curvas.
Colisiones mediante verificaciones por pares
O(n²) para 25 vehículos implica 625 verificaciones por frame. Optimización: salida temprana por dirección. Pares este+oeste se saltan sin chequear coordenadas, ya que las carreteras de un solo sentido evitan choques frontales.
Verificaciones:
- Direcciones (elimina la mitad de los pares).
- Carril (coincidencia en la misma carretera).
- Matemáticas de coordenadas (raro, <10 pares).
Colisión → pausa de 10 ticks. Los atascos se resuelven solos: el vehículo líder se mueve primero.
Los bugs (atravesar objetos) son un efecto secundario de las optimizaciones, aceptable para una simulación visual.
Generación y reciclaje de vehículos
Al entrar en modo calle: escanea 132 baldosas (12x11). Para carreteras, tira dados según la densidad del vecindario. Se excluyen curvas.
Al salir de pantalla: reemplaza con un nuevo vehículo de dirección/color opuesto en la misma baldosa. El desplazamiento maneja nuevos carriles de forma similar.
// Pseudocódigo de generación
for each road_tile in viewport:
if random(traffic_density) > threshold:
spawn_car(tile, random_direction, random_progress)
Desensamblando ensamblador y trampas modernas
El autor de Pizza Legacy pasó 14 años en grafos excesivos, A* y colisiones. El original es más simple: las baldosas dictan los caminos, sin física/velocidades.
Análisis de ensamblador + LLM revelaron la mecánica. Restauración: switch en decide_desired_direction (Car.cpp) por tipos de baldosa.
| Enfoque | Complejidad | Eficiencia |
|---------|-------------|------------|
| Original | Reglas simples | 25 MHz, 30 vehículos |
| Moderno | Grafos, física | Bloqueos en CPUs 2010+ |
Lecciones clave
- Baldosas de un solo sentido eliminan la búsqueda de caminos.
- Salidas tempranas en colisiones minimizan bucles.
- Movimiento píxel a píxel + actualizaciones infrecuentes = baja carga de CPU.
- Giros probabilísticos + antirrepetición = realismo sin IA.
- Reciclaje de vehículos evita gestión de listas.
— Editorial Team
Aún no hay comentarios.