Emulacja

Dlaczego Contra Force spowalniała jak szalona? Sekrety mapperów w erze 8-bitowców

Wyobraź sobie taki wieczór: siadasz przed telewizorem, pad w dłoni, a na ekranie Contra — legendarny run’n’gun od Konami, pełen wybuchów, precyzyjnych strzałów i skoków w ostatniej chwili. Serce wali jak szalone. Potem słyszysz o Contra Force z 1992 roku. Cztery grywalne postacie, pojazdy, miotacz ognia, laser, możliwość rozwalania elementów środowiska. Brzmi jak marzenie. Włączasz grę… i wszystko zwalnia. Postacie poruszają się jak w gęstym budyniu. Wrogowie poruszają się tak, jakby wzieli snusa na warę. Ekran miga co drugą klatkę, a FPS lecią na łeb i szyję — i to przy zaledwie kilku przeciwnikach na ekranie.

Contra Force

Co się stało? Czy NES, ikona lat 80. i 90., był po prostu za słaby? Absolutnie nie. To historia o sprytnych chipach ukrytych w kartridżach, korporacyjnych zasadach Nintendo i deweloperach goniących niemożliwe terminy.

Przyczyn spowalniania gier można doszukać się w… mapperach

Żeby zrozumieć problem Contra Force, trzeba zacząć od podstaw. NES, znany w Japonii jako Famicom, zadebiutował w Ameryce w 1985 roku jako prawdziwa rewolucja: kolorowa grafika, gry na kartridżach. Pod maską jednak było skromnie. Procesor 6502 taktowany 1,79 MHz, zaledwie 40 kilobajtów pamięci na kod gry i 8 kilobajtów na grafikę. Kilkadziesiąt razy mniej niż zajmuje jedna przeciętna fotka ze smartfona.

Proste tytuły jak Super Mario Bros. mieściły się w tych limitach bez problemu. Ale co z Legenda of Zelda i jej otwartym światem? Z Mega Manem, bossami i power-upami? Z Super Mario Bros. 3 i jego mapami? Tam wkraczają mappery — specjalne układy scalone wbudowane w kartridż.

Pomyśl o mapperze jak o superinteligentnym bibliotekarzu, który zarządza małym pokojem z jedną półką. NES widzi tylko 40 KB, ale mapper dynamicznie podmienia „banki” pamięci — porcje po 8 lub 16 KB — setki razy na sekundę. Dzięki temu gry rosły do 512 KB i więcej, a konsola zachowywała się, jakby miała do dyspozycji wielokrotność swojej fizycznej pojemności.

Mappery różniły się możliwościami:

  • NROM — najprostszy z prostych, zero przełączania banków. Wystarczył dla Super Mario Bros. czy Donkey Konga. Szybki, ale nieelastyczny.
  • MMC1 — opracowany przez Nintendo, z obsługą baterii do zapisywania postępu i trybem mirroringu symulującym duże mapy. Napędzał The Legend of Zelda i Metroda.
  • MMC3 — zaawansowany układ z licznikiem linii skanowania i elastycznym przełączaniem grafiki. Obsługiwał prawdziwe hity: Mega Man 2–6, Kirby’s Adventure. Ale… wolniejszy w przełączaniu. Niczym stary walkman, który od czasu do czasu lekko się zacina.
  • VRC4 i VRC6 od Konami — japońskie cuda. Szybsze przełączanie, możliwość generowania dodatkowych kanałów audio. Castlevania III w japońskiej wersji brzmiała dzięki VRC6 fenomenalnie. Wersja zachodnia? Przeportowana na MMC3 — i słyszalnie słabsza.

Tu leży sedno całego problemu. W Japonii deweloperzy tacy jak Konami mogli swobodnie projektować własne mappery. Nintendo przy dystrybucji na rynek amerykański i europejski narzucało jednak jedno: tylko nasze chipy. „MMC albo do widzenia.” Konsekwencja? Gry pisane pod szybkie układy VRC lądowały na wolniejszym MMC3 — często bez przepisania ani jednej linii kodu.

Contra Force: od Arc Hound do powolnej legendy.

Contra Force była pierwotnie projektowana jako Arc Hound — nowa gra na Famicom, pisana z myślą o chipsecie VRC6. Planowano cztery grywalne postacie z różnym wyposażenie,, dziesięć zróżnicowanych poziomów, pojazdy, bogate w detale otoczenie i kooperację dla dwóch graczy. W założeniach był to naprawdę ambitny projekt.

W 1991 roku na japoński rynek trafił Super Famicom. Famicom zaczął konać, więc Arc Hound skasowano. Konami postanowiło jednak odzyskać zainwestowane środki i przeportować tytuł na NES pod rynek północnoamerykański — w ekspresowym tempie i bez dogłębnej optymalizacji kodu.

Nintendo postawiło warunek: MMC3. Konami zmieniło chip. Kodu nie przepisało. No i z fajnie zapowiadajacego się tytułu wyszła blada d….

Efekt jest matematycznie boleśnie prosty. Na jedną klatkę animacji — czyli 16,7 milisekundy — gra musi przełączyć mapper nawet 38 razy. Każde takie przełączenie kosztuje cenne cykle procesora. Łącznie to ponad 2000 cykli na klatkę, co stanowi niemal jedną trzecią całkowitej mocy obliczeniowej CPU. Tyle zostaje na fizykę, AI, grafikę i dźwięk razem wziętych.

MMC3 ma dodatkowo istotne ograniczenie: nie przełącza elastycznie pewnych adresów pamięci. Procesor utyka w pętlach oczekiwania, zamiast rysować kolejne klatki animacji. W trybie solo gra zwalnia wyraźnie. W co-opie, gdzie do zwykłej logiki gry dochodzi jeszcze sterowanie komputerowym partnerem, spowolnienie staje się praktycznie nieakceptowalne.

Co ciekawe — na emulatorach NES możemy pozbyć się problemu. Wystarczy przyspieszyć wirtualny CPU dwukrotnie, a Contra Force działa płynnie jak marzenie. Istnieją również fanowskie carty przeportowane z powrotem na VRC6 które pokazują, jak gra mogła wyglądać, gdyby nie korporacyjna polityka Nintendo.

Nie tylko Contra — inne ofiary MMC3

Contra Force nie była wyjątkiem. Późna era NES-a, lata 1990–1994, obfituje w gry cierpiące na ten sam problem — szczególnie wśród gier ze stajni Konami.

  • Parodius Da! — parodia Gradius ze statkiem kosmicznym i absurdalnymi bossami w postaci kotów w bieliźnie. Japońska wersja na VRC4 działała sprawnie. Europejski port na MMC3? Walki z hordami wrogów to miejscami slajdshow. Recenzje chwaliły grafikę, wytykały spowolnienia w trakcie rozgrywki.
  • Tiny Toon Adventures — sympatyczny platformer z Busterem Bunny. Japońska wersja na własnym układzie Konami. Zachodnia na MMC3. Poziomy z tłumem wrogów i power-upami wiązały się z zauważalnymi spowolnieniami które są bólem głowy dla speedrunnerów do dziś.
  • Kirby’s Adventure — uroczy różowy kuleczka pochłaniający wrogów, wydany przez samo Nintendo. Korzystał z MMC3, ale i tu dało się odczuć mikrospowolnienia przy aktywacji bardziej efektownych mocy, jak Spark czy Beam. Nie z powodu limitu sprite’ów na linię skanowania, lecz właśnie przez kosztowne przełączanie grafiki. Gra sprzedała się w milionach egzemplarzy i jest uważana za technicznie imponującą — ale ma swoje momenty słabości.

W 1992 roku NES powoli schodził ze sceny. SNES z Mode 7, 256 kolorami i nowymi możliwościami zupełnie zmienił oczekiwania graczy. Deweloperzy dokończali projekty na starą platformę w pośpiechu, Konami mierzyło się z regulaminem Nintendo ograniczającym liczbę wydawanych tytułów do pięciu rocznie. W takich warunkach dogłębna optymalizacja portów była luksusem, na który nikt nie miał czasu ani budżetu.

Podsumowując

Contra Force mogła być jedną z najlepszych gier w katalogu NES-a. Miała wszystko: ambicję, pomysłowe mechaniki, kooperację. Zabiły ją nie ograniczenia sprzętu, lecz decyzje biznesowe i brak czasu na dopracowanie kodu.

Mappery były prawdziwymi bohaterami ery 8-bitowej — dzięki nim NES udawał maszynę wielokrotnie potężniejszą, niż był naprawdę. Każdy z nich — od prostego NROM po VRC6 — to inżynierskie arcydzieło mieszczące się w kilku milimetrach krzemu.

W epoce ray tracingu i pogoni za FPS developerzy zdaje się, ze zapomnieli o optymalizacji swoich tytułów. Co najwyżej kiepski kod gry „załata” się day one patchem, ewentualnie za kilka(naście) lat jak to Bethesda ma zwyczaju. Kiedyś było to nie do pomyślenia.

A Contra Force na Switchu z poprawkami? Można pomarzyć.

Teraz wasza kolej – która gra na NES spowalniała u Was najmocniej? Contra Force, Kirby, Parodius, a może coś innego? Wrzucajcie tytuły i historie w komentarze – zobaczymy, kto ma najgorszą traumę.

Może cię zainteresować:

The Flintstones: Surprise at Dinosaur Peak (1993)

Kabson

Final Fight 3 (1995)

Kabson

Variatkowy przegląd sportowy – gry kopane na Pegasusa

iPOD

Super Mario Bros 64

Kabson

The Battle of Olympus (1988)

Kabson

Contra (NES) (1987)

Wściekłe Piksele

Zostaw komentarz