홈으로 돌아가기

25 MHz에서의 Pizza Tycoon 교통 시뮬레이션

이 기사는 25 MHz에서 실행되는 Pizza Tycoon 1994의 교통 시스템을 분석합니다. 타일 규칙, 픽셀 단위 이동 및 간단한 충돌이 효율성을 보장합니다. Pizza Legacy 저자가 어셈블러 분석을 통해 메커니즘을 재현했습니다.

Pizza Tycoon 교통: 25 MHz가 도시를 시뮬레이션하는 방법
Advertisement 728x90

# 피자 타이쿤 교통 시뮬레이션: 25MHz에서 부드럽게 작동

피자 타이쿤에서 교통은 25MHz 클럭 속도의 386 프로세서에서 작동하는 간단한 시스템으로 처리됩니다. 각 차량은 게임 틱당 1픽셀씩 이동합니다. 메인 루프는 장애물을 확인하고 좌표를 조정합니다: 동쪽으로 갈 때는 X에 +1, 북쪽으로 갈 때는 Y에 -1.

progress 카운터는 16에서 0까지 카운트다운합니다. 0에 도달하면 16으로 리셋하고 타일 경계 로직을 실행합니다: 방향 선택과 스프라이트 업데이트. 16x16 픽셀 타일이 모든 것을 동기화합니다—픽셀 단위 이동보다 16배 적은 빈도로 무거운 계산이 발생합니다.

스폰 시 progress는 1~16 사이로 랜덤화되어 프레임 간 부하를 분산합니다.

Google AdInline article slot

도로 레이아웃과 방향 규칙

맵은 landsym.vga의 160x120 타일 그리드입니다. 도로는 일방통행: 타일 0x16은 동쪽, 0x06은 서쪽, 0x26/0x36은 수직 경로입니다.

코너는 분기점을 추가합니다. 타일 0x56 (CORNER_SW)은 서쪽 또는 남쪽으로 가능합니다. 선택: 50% 확률로 좌회전/직진. 연속 좌회전을 금지해 자연스럽게 만듭니다.

맵은 논리적으로 설계되어 인접 타일이 항상 유효 경로를 지원합니다.

Google AdInline article slot
  • 직선 타일: 고정 방향.
  • 코너: 반복 방지 확률 선택.
  • T/X 교차로: 코너 조합.

쌍별 확인을 통한 충돌 처리

25대 차량에 대한 O(n²)는 프레임당 625회 확인입니다. 최적화: 방향별 조기 종료. 동서 쌍은 좌표 확인 없이 종료—일방통행 도로가 정면 충돌을 막습니다.

확인 순서:

  • 방향 (쌍의 절반 차단).
  • 차선 (같은 도로 매치).
  • 좌표 계산 (드물음, 10쌍 미만).

충돌 시 10틱 일시정지. 정체는 자연 해소: 선두 차량이 먼저 이동합니다.

Google AdInline article slot

버그(통과)는 최적화 부작용으로, 시각 시뮬레이션에 무관합니다.

차량 스폰과 재활용

거리 모드 진입: 132개 타일(12x11) 스캔. 도로에서 주변 밀도에 따라 주사위 굴림. 코너 제외.

화면 이탈: 같은 타일에 반대 방향/색상 새 차량으로 교체. 스크롤링은 새 차선을 비슷하게 처리합니다.

// 스폰 의사코드
for each road_tile in viewport:
  if random(traffic_density) > threshold:
    spawn_car(tile, random_direction, random_progress)

어셈블리 역설치와 현대적 함정

피자 레거시 저자는 14년간 과도한 그래프, A*, 충돌에 매달렸습니다. 원작은 더 단순: 타일이 경로 결정, 물리/속도 없음.

어셈블리 분석 + LLM으로 메커니즘 파악. 복원: decide_desired_direction (Car.cpp)에서 타일 타입별 스위치.

| 접근법 | 복잡도 | 효율성 |

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

| 원작 | 단순 규칙 | 25MHz, 30대 차량 |

| 현대 | 그래프, 물리 | 2010+ CPU에서 교착 |

핵심 요약

  • 일방통행 타일로 경로 탐색 불필요.
  • 조기 충돌 종료로 루프 최소화.
  • 픽셀 단위 이동 + 드문 업데이트 = 낮은 CPU 부하.
  • 확률적 턴 + 반복 방지 = AI 없이 현실성.
  • 차량 재활용으로 리스트 관리 생략.

— Editorial Team

Advertisement 728x90

다음 읽기