Powrót do strony głównej

Symulacja ruchu Pizza Tycoon na 25 MHz

Artykuł analizuje system ruchu w Pizza Tycoon z 1994 roku, działający na 25 MHz. Reguły kafelkowe, ruch piksel po pikselu i proste kolizje zapewniają efektywność. Autor Pizza Legacy odtworzył mechanikę poprzez analizę assemblera.

Ruch Pizza Tycoon: jak 25 MHz symulują miasto
Advertisement 728x90

Symulacja ruchu w Pizza Tycoon: efektywność na 25 MHz

W Pizza Tycoon ruch jest implementowany przez prosty system działający na procesorze 386 z częstotliwością 25 MHz. Każdy pojazd porusza się o jeden piksel na takt gry. Główna pętla sprawdza przeszkody i koryguje współrzędne: +1 do X przy ruchu na wschód, -1 do Y na północ.

Licznik progress odlicza od 16 do 0. Po wyzerowaniu resetuje się do 16 i aktywuje logikę granic kafelków: wybór kierunku, aktualizacja sprite'a. Kafelki 16x16 pikseli zapewniają synchronizację — ciężkie obliczenia odbywają się 16 razy rzadziej niż ruch piksel po pikselu.

Przy spawnie progress jest losowy (1–16), rozkładając obciążenie na klatki.

Google AdInline article slot

Struktura dróg i zasady kierunku

Mapy to siatka 160x120 kafelków z landsym.vga. Drogi są jednokierunkowe: kafelek 0x16 — wschód, 0x06 — zachód, 0x26/0x36 — pionowo.

Kąty dodają rozgałęzianie. Kafelek 0x56 (CORNER_SW) pozwala na zachód lub południe. Wybór: 50% skręt/prosto. Zakaz dwóch lewych skrętów pod rząd zapewnia naturalność.

Mapy są zaprojektowane logicznie — sąsiednie kafelki zawsze wspierają możliwe ścieżki.

Google AdInline article slot
  • Proste kafelki: stały kierunek.
  • Kąty: probabilistyczny wybór z anty-cyklem.
  • Skrzyżowania T/X: kombinacje kątów.

Kolizje poprzez sprawdzanie parami

O(n²) dla 25 pojazdów — 625 sprawdzeń na klatkę. Optymalizacja: wczesny powrót na podstawie kierunków. Wschód+zachód — powrót bez współrzędnych, ponieważ drogi jednokierunkowe wykluczają przeciwnych kierunków.

Sprawdzanie:

  • Kierunki (połowa par jest odrzucana).
  • Pas (równość dróg).
  • Arytmetyka współrzędnych (rzadko, <10 par).

Kolizja → pauza 10 taktów. Korki rozpraszają się naturalnie: lider porusza się pierwszy.

Google AdInline article slot

Błędy (przechodzenie przez) — efekt uboczny optymalizacji, akceptowalne dla wizualnej symulacji.

Spawn i recykling pojazdów

Na wejściu w tryb ulic: skanowanie 132 kafelków (12x11). Dla drogowych — rzut kostką na podstawie gęstości dzielnicy. Kąty wykluczone.

Wyjście poza ekran: zastąpienie nowym pojazdem odwrotnego kierunku/koloru na tym samym kafelku. Przewijanie obsługuje nowe pasy podobnie.

// Pseudokod spawnu
for each road_tile in viewport:
  if random(traffic_density) > threshold:
    spawn_car(tile, random_direction, random_progress)

Analiza asemblera i współczesne błędy

Autor Pizza Legacy spędził 14 lat na nadmiernie skomplikowanych grafach, A* i kolizjach. Oryginał jest prostszy: kafelki dyktują ścieżkę, brak fizyki/prędkości.

Analiza asemblera + LLM odsłoniła mechanikę. Odzyskanie: switch w decide_desired_direction (Car.cpp) na podstawie typów kafelków.

| Podejście | Złożoność | Efektywność |

|-----------|-----------|-------------|

| Oryginał | Proste reguły | 25 MHz, 30 pojazdów |

| Współczesne | Grafy, fizyka | Zatory na CPU 2010+ |

Co jest ważne

  • Jednokierunkowe kafelki eliminują wyszukiwanie ścieżki.
  • Wczesny powrót w kolizjach minimalizuje pętle.
  • Ruch piksel po pikselu + rzadkie aktualizacje = niskie obciążenie.
  • Probabilistyczne skręty + anty-cykl tworzą realizm bez AI.
  • Recykling pojazdów wyklucza zarządzanie listą.

— Editorial Team

Advertisement 728x90

Czytaj dalej