W oryginalną grę zagrasz dziś na PlayStation 5w zestawie Double Dragon & Kunio-kun: Retro Brawler Bundle ↗
NES · Technōs 1993 · rozebrane od środka

GOAL 3

Japońska gra piłkarska z 1993 roku rozebrana bajt po bajcie. Własny emulator, Polska jako nowa drużyna i cała gra po polsku.

Ekran przed meczem po polsku: Polska kontra Niemcy w Pucharze Azji
Mecz z paskiem nazwisk i twarzy zawodników
Co zrobiłem
01Rozebrana architekturaWłasny deasembler i emulator. Opisane wszystkie 93 akcje zawodników i 44 zachowania AI.
02Polska jako 14. drużynaOrzeł na ekranie VS, aktualny skład z twarzami i nowy strzał specjalny: kiełbasa.
03Cała gra po polskuMenu, mecz, liga, puchar, dialogi i zakończenia.
04Pasek siły i powtórkiSiła zawodników na pasku i powtórka każdego gola.
05Poprawione błędyWiatr, losowanie pogody w lidze, rozpoczęcie gry za rywala.
06Odkryte sekretyUkryte menu pogody, kod na techniki specjalne, jazda na piłce.
Galeria
Od środka
01Mecz w 20 krokach na sekundęLogika liczy 12 zawodników i piłkę co trzy klatki. W tłoku gra zwalnia.
02AI z planemNajbliższy piłce myśli najczęściej, dalsi rzadziej. Drużyna przełącza plan ataku i obrony.
03Strzał kontra bramkarzMoc strzału przeciw odporności bramkarza. Gdy moc wygra, piłka przelatuje albo się odbija.
04Ukryta pogodaDeszcz, wiatr, burza i tornado w schowanym menu. Piorun ładuje piłkę.
05Czy komputer oszukuje?Nie podgląda pada. Silniejszy jest tylko w pucharze.
06Wycięte z gryW pamięci zostały grafiki orkiestry kibiców, których gra nigdy nie pokazuje.
Famicom · mapper 4 (MMC3) · 128 KB PRG + 128 KB CHR

Atlas Goal 3

Architektura japońskiego oryginału odczytana z ROM-u i sprawdzana w emulatorze. Przy każdej tezie status: sprawdzone w emulatorze, z kodu, hipoteza.

bank map

Pamięć i moduły

Kod gry jest podzielony na 7 stron po 16 KB, przełączanych w locie: dźwięk, boisko, intro i zakończenia, decyzje meczu, grafika postaci, menu oraz akcje zawodników. Stały bank trzyma pętlę główną, przerwania, obsługę padów i generator losowy.

main loop

Jeden tick logiki

Tick = jeden obieg pętli głównej: odczyt padów, ruch, fizyka, AI, kontakty, lista sprite'ów. Klatka = jedno odświeżenie obrazu (60/s). Odstęp ticków ustala $05E6; w meczu jest to 3, czyli tick co 3 klatki i 20 ticków na sekundę (zegar meczu: 20 ticków = 1 s). Gdy logika nie zmieści się w 3 klatkach, tick się wydłuża i gra zwalnia: w meczu Polska - Niemcy średnio 3,9 klatki na tick, w innym meczu równo 3,0. sprawdzone NMI w każdej klatce kopiuje sprite'y, przełącza banki grafiki, ustawia scroll i odtwarza dźwięk; IRQ z licznika linii MMC3 rysuje dolny pasek meczu.

Budżet procesora (NTSC)Wartość
Zegar 6502 (Ricoh 2A03)1,79 MHz; Pegasus (styl Dendy) ~1,77 MHz i 50 Hz, więc gra chodzi tam ok. 1/6 wolniej
Cykli na klatkę~29 780 (instrukcja 2-7 cykli, czyli ~8 tys. instrukcji)
Okno vblank na zapis do PPU~2270 cykli; dłuższe NMI psuje obraz
Obliczenie mocy strzału 9:BA1B~50 instrukcji, kilkaset cykli, ok. 1% klatki z kodu
flowchart LR
  A[MainLoop 14:C478] --> B[bank CHR sprite'ów]
  B --> C[ukryta pauza P3]
  C --> D[BuildOam]
  D --> E[Random LFSR]
  E --> F[ReadPads 4 pady]
  F --> G{game_state}
  G -->|0| M[Mecz]
  G -->|1| I[Intro i tytuł]
  G -->|2| N[Menu]
  G -->|3| Z[Zakończenie]
  M & I & N & Z --> W[czekaj na klatkę] --> A
state machine

Stany gry

Dwa poziomy: stan $58 i podstan $59. Bit 7 podstanu oznacza „już zainicjalizowany”.

stateDiagram-v2
  direction LR
  Intro: 1 · logo, list Misako, tytuł
  Menu: 2 · tryb, liga, VS, szatnia
  Mecz: 0 · kick off, gra, gol, przerwa
  Koniec: 3 · zwycięstwo / 2. miejsce / ostatnie
  [*] --> Intro
  Intro --> Menu: Start
  Menu --> Mecz: kick off
  Mecz --> Menu: przerwa, koniec meczu
  Mecz --> Koniec: liga - finał albo odpadnięcie
match tick · 14:C615

Tick meczu w kolejności

  1. Pauza: Start gracza 1 przełącza $5C bit 7
  2. Banki grafiki boiska wg pozycji kamery
  3. Zegar meczu (20 ticków = 1 sekunda gry); co sekundę z szansą 1/4 zdarzenie pogody: deszcz, wiatr, burza, tornado
  4. Pasek: strzałka i siła wiatru, zegar; doczytywanie kolumn boiska
  5. Kopiowanie kamery do scrolla
  6. Obiekt pogody (slot 13): piorun, tornado, krople deszczu
  7. Pady ludzi: macierz przycisk → akcja
  8. AI: ranking odległości od piłki, plan drużyny, myślenie zawodników
  9. Pętla obiektów: 12 zawodników, piłka, jeźdźcy "wieży"
  10. Wiatr
  11. Kamera (śledzi piłkę, max 8 px na tick)
  12. Kontrola wznowień
  13. Obiekty efektów (marker "1")
  14. Sortowanie i migotanie sprite'ów
  15. Rozjaśnianie i ściemnianie palety
mechanics

Jak działa mecz

Zawodnicy i piłka

  • 19 slotów obiektów; pola co 19 bajtów (X, Y, Z po 3 bajty). Drużyna = parzystość slotu, bramkarze 10 i 11, piłka 12. sprawdzone
  • Akcja obiektu: 93 akcje zawodników, osobne 25 akcji piłki. Żądanie akcji → arbiter priorytetów → wykonanie. z kodu
  • Kontakt z piłką zależy od akcji zawodnika: stojący, biegnący i skaczący po prostu przejmują piłkę; leżący nie dotkną jej. z kodu

AI

  • Najbliższy piłce myśli co tick, drugi co 2 ticki, dalecy co 15. Gdy piłka leci, liczy się miejsce lądowania. z kodu
  • Plan drużyny: atak (formacja wg strefy boiska), obrona (najbliżsi atakują posiadacza), luźna piłka, stały fragment. z kodu
  • Strzał AI tylko przy kącie na bramkę; forma 14+ włącza strzały specjalne. z kodu

Strzały i bramkarz

  • Moc = baza strzału specjalnego + siła strzelca + 40 z powietrza; -1 co 4 ticki, -8 za każdego zmieconego. sprawdzone
  • Odporność bramkarza = siła + premia klasy (8-20). Gdy moc wyższa: bramkarz zawsze leci, piłka przelatuje albo się odbija 50/50. sprawdzone
  • Strzał specjalny: skok z piłką, B po chwili. 30 strzałów, każdy to łańcuch faz lotu. sprawdzone

Fizyka

  • Grawitacja 0,5 px/tick²; kopnięcie górą 7,5 px/tick, wykop bramkarza 10,25. sprawdzone
  • Wiatr: 8 kierunków, działa na wszystko w powietrzu poza strzałami specjalnymi. sprawdzone
  • Tarcie: prędkość × (1 - k/256), k = 16-48; odbicie zachowuje połowę prędkości minus stratę 1-8. Oba zależą od terenu pod piłką (trawa, zły teren, piasek). sprawdzone
  • Zły teren i piasek spowalniają zawodnika (odporność można dać w szatni). z kodu

"Wieża" i polecenia

  • Spadając na zawodnika z przewagą 24 px wchodzi się na niego i steruje nim; strzał z góry dostaje +40 mocy. z kodu
  • Piłka u kolegi: A = „podaj do mnie” (ぱす), B = „strzelaj” (しゅーと). Piłka u rywala, gdy jesteś daleko: A = „odbierz”, B = „zaatakuj” - do kolegi najbliżej rywala. Posłuszeństwo bez losowania: charakter kolegi × autorytet (forma + siła), nie rośnie po prostu z formą. sprawdzone

Techniki (ひっさつ)

  • Siedem bitów umiejętności zawodnika. Gdy jest bit, zwykła akcja zamienia się w technikę: wślizg → ばくれつアタック (wybuchowy atak), skok z piłką → つばめがえし (obrót jaskółki), główka/szarża → ドリルアタック (atak wiertłem), wyskok bramkarza → トルネードパンチ (pięść tornada)… sprawdzone
  • Każdy zawodnik Nekketsu ma swój strzał „…シュート” i 1-2 techniki; kod z pauzy „ひっさつOK” (techniki specjalne OK) włącza wszystkie. z kodu

Stanie na piłce

  • Wylądowanie po skoku na leżącej piłce stawia zawodnika na niej (jak Kunio na ekranie tytułowym). 2× kierunek = jazda na piłce. sprawdzone
  • W jeździe 2× ta sama strzałka góra/dół = nawrót po półkolu; seria nawrotów daje wężyk „S”, naprzemiennie - owal. Naciśnięcie w trakcie nawrotu = upadek. sprawdzone

Siła i szybkość

  • Siła = wytrzymałość, moc strzału i odporność bramkarza. Traci się ją od trafień (−5/−7/−9) i starć (−2), minimum 0. Bramkarz po straconym golu +20. Pełny reset na starcie każdej połowy. sprawdzone
  • Klasa szybkości 0-3: „0” biega 3,5 px/tick po trawie, ale tylko 1,75 po złej ziemi; „3” ma 3,0 i prawie nie zwalnia na złym terenie. z kodu

Przedmioty (liga)

  • Narada w szatni → あいてむ (przedmioty). Buty: brak spowolnienia na złym terenie; kalosze: odporność na piorun; ochraniacz/napój/ręcznik: siła +20/+15/+10. Działają jedną połowę. sprawdzone
  • Na starcie ręcznik i prezenty; co 4 wygrane mecze odblokowuje się lepszy przedmiot. Prezenty zmieniają formę wg tego, co zawodnik lubi. sprawdzone

Liga i hasło

  • Hasło: 10 cyfr hex = wyniki z 12 drużynami, bajt statystyki, suma kontrolna, losowa sól (4 hasła na ten sam postęp). Koder potwierdzony dekoderem gry. sprawdzone
  • Faza ligowa, potem pucharowa; finał wygrany, przegrany albo odpadnięcie wybiera jedno z 3 zakończeń. sprawdzone
  • Z każdym z 12 rywali najwyżej 3 mecze. Wygrana = 2 + poziom trudności + premia rywala (Azja 0, Włochy i Brazylia najwięcej). Hasło pamięta tylko wygrane i punkty - porażki można po wpisaniu hasła rozegrać jeszcze raz. sprawdzone
  • Po meczu: co najmniej 70 punktów i 16 wygranych → zaproszenie do pucharu (しゅつじょう しますか? = „Startujesz?”); 36 wygranych → puchar od razu. Drabinka zawsze z Włochami, Niemcami, Brazylią, Argentyną i Kamerunem; poniżej 90 punktów 4 mecze, od 90 punktów 3; finał z Włochami. sprawdzone
  • Gotowe hasła: CC4 8E5 6027 (35 wygranych, 200 pkt: jedna wygrana z Meksykiem i puchar), CC8 9FA 1009 (15 wygranych, 120 pkt: po jednej wygranej zaproszenie). sprawdzone dekoderem gry i przejściem do pucharu.
pre-match · 10:9403

Menu przed meczem

W trybie VS ekran opcji ma dwie strony. Pierwsza pokazuje 3 pytania. Druga, „てんこう せってい” (ustawienia pogody), jest ukryta: wchodzi się na nią strzałką w dół z ostatniego pytania, bo A na tym pytaniu od razu kończy menu. sprawdzone

OpcjaWartościWpływ na meczStatus
どこで (gdzie)Azja, Afryka, Ameryka Płd., EuropaTylko muzyka i tło ekranu VSsprawdzone
ぐらんど (nawierzchnia)trawa, ziemia, piasekGrafika boiska i teren: na ziemi i piasku zawodnicy zwalniają, piłka szybciej traci prędkośćsprawdzone
こんでぃしょん (stan murawy)ばっちり, まあまあ, わるい, さいあく (świetny, średni, zły, fatalny)Gdzie leży zły teren: przy dobrym stanie tylko plamy, przy złym cała murawa poza resztkami trawysprawdzone
あめ (deszcz)なし … すこーる (brak … ulewa, 0-4)Krople na ekranie; w przerwie psuje murawę (ulewa: z idealnej na stan 3 w drugiej połowie)sprawdzone
ふうりょく (siła wiatru)なし … とっぷう (brak … porywy, 0-4)Znoszenie piłki w locie; najwyższy poziom to porywy 6-9 albo ciszasprawdzone
かざむき (kierunek)← · ⇔ · →Kierunek wiatru, z losowym odchyleniem o skos (przez bug ← często wieje w prawo)bug, sprawdzone
かみなり (burza)なし … はげしい (brak … silna, 0-3)Pioruny: razi zawodników na złym terenie i ładuje leżącą tam piłkęsprawdzone
たつまき (tornado)なし … はげしい (brak … silna, 0-3)Trąba wędruje po boisku, porywa zawodników i piłkęsprawdzone

Naładowana piłka

  • Ładunek $0525 daje piorun albo strzał specjalny Meksyku („strzał piorunem”). Maleje co 2 ticki. sprawdzone
  • Trafiony zawodnik nie upada, tylko zostaje porażony i stoi, dopóki piłka ma ładunek; potem się przewraca. Działa nawet bez mocy strzału. sprawdzone

Piłka w tornadzie

  • Tornado odbiera piłkę nawet prowadzącemu. Piłka wznosi się (do wysokości ~230) i dryfuje z trąbą, potem spada z dużą prędkością i bywa łapana ponownie. sprawdzone
  • Kod pozwala piłce w trąbie przewracać zawodników jak mocny strzał, ale w 4 próbach to nie wystąpiło: piłka od razu jest nad głowami, a zawodników porywa sama trąba. rzadkie
teams · 3:BD18 · 14:C080

Drużyny

Ranking wg średniej siły 6 zawodników (dane z ROM, bez premii +16, którą rywale dostają tylko w pucharze). Odporność bramkarza = siła + premia za klasę; „wypuszcza” = szansa, że wypuści strzał z mocą. W oryginale w meczu 2-4 graczy i w karnych można wybrać tylko 6 drużyn: Nekketsu i piątkę z fazy pucharowej ligi (Włochy, Niemcy, Argentyna, Brazylia, Kamerun); łatka niżej otwiera wszystkie. sprawdzone

DrużynaŚr. siłaBramkarzOdpornośćWypuszczaNajlepszy zastępca w bramce
Niemcy76,7ぶれーめ (Burēme)9025%しゅるつ (Shurutsu) 100
Włochy76,7じょばんに (Jobanni)10025%-
Brazylia73,3ろどりげす (Rodorigesu)9025%さんとす (Santosu) 95
Kamerun65,0じゃわら (Jawara)8531%だこすた (Dakosuta) 95
Anglia60,0あんでぃ (Andi)7844%-
Argentyna58,3いぎーた (Igīta)9025%-
Mongolia51,7いしむと (Ishimuto)6531%ふるちん (Furuchin) 85
Meksyk45,8えんりこ (Enriko)5238%あびれす (Abiresu) 82
Senegal45,0むんじゃら (Munjara)6238%-
Korea37,5すんちょる (Sunchoru)5238%よんす (Yonsu) 62
Tajlandia25,8ちゃちゃい (Chachai)4344%たにん (Tanin) 48
Gwinea25,0あで (Ade)4738%-

Nekketsu FC: średnia siła 53,3; bramkarze げんえい (Gen'ei, 72) i かるろす (Karurosu, 80). W bramce o „zawodzie” decyduje pozycja (łapanie, parady, premia klasy), o jakości - zawodnik: つねを (Tsuneo) w bramce (77) byłby lepszy od げんえい.

kits · 11:BDB0

Kolory drużyn

Każda drużyna ma dwie palety sprite'ów: paletę regionu (biały + kolor skóry: Azja, Afryka, Europa, Ameryki) i paletę stroju. Gracz 2 dostaje obie, więc gra w swoim stroju; gracz 1 tylko paletę regionu, więc zawsze gra na biało (tak jest w oryginale: Nekketsu biała jako gracz 1, czerwona jako gracz 2). Żaden strój gracza 2 nie jest biały, więc strony zawsze się różnią. sprawdzone

DrużynaSpodenki gracza 2DrużynaSpodenki gracza 2
NekketsuczerwoneNiemcyzielone
KoreaoliwkoweAnglianiebieskie
MongoliafioletoweWłochyczerwone
TajlandiabłękitnePolska (przeróbka)czerwone
GwineajasnofioletoweBrazyliazielone
SenegaljasnozieloneArgentynabardzo jasny błękit
KamerunturkusoweMeksykróżowe + niebieskie maski

Meksyk zamiast palety regionu ma własną, niebieską (maski luchadorów). Jako gracz 1 - możliwy dopiero po przeróbce - byłby cały niebieski; łatka daje mu wtedy paletę Ameryk.

difficulty · $57 & 3

Poziomy trudności

Coやさしい (łatwy)ふつう (normalny)むずかしい (trudny)
Rywale atakują posiadacza (liga)w ~19% decyzjizawszezawsze
Ustawianie się rywali (liga)stały błąd wg siłydokładnedokładne
Ocena luźnej piłki przez komputerduży szummały szumbez błędu
Posłuszeństwo kolegówzawsze słuchajątablica charakterówtablica charakterów
Skok potrzebny do strzału specjalnego (gracz / komputer)niski / wysokiśredni / średniwysoki / niski
Punkty za wygraną (hasło)2 + premia3 + premia4 + premia
Drybler komputera omija przeszkodynie (każdy tryb)taktak
Losowe wybicie piłki przez dryblującego AI~4/256nienie

Łatwy działa tylko w fazie ligowej - przed pucharem gra przestawia go na normalny. Gałęzie kodu sprawdzone wywołaniem w emulatorze (np. 830 z 1024 losowań pomija atak), całych meczów nie mierzono. Trudność nie zmienia prędkości, siły, rytmu myślenia AI ani bramkarza.

Czy komputer oszukuje?

Nie w klasycznym sensie: AI nie czyta padu gracza (poza poleceniami dla własnych kolegów), nie patrzy na zegar ani wynik (poza bramkarzem), losowanie jest wspólne, siła spada tak samo obu drużynom. sprawdzone

KomuCoKiedy
CPU+16 siły każdego zawodnika (3:BCBA)tylko w pucharze
CPUstrzał specjalny z niższego skokuna trudnym (na łatwym odwrotnie)
CPU i koledzy z AIznają punkt lądowania lecącej piłki (6:8015)zawsze
obie stronybramkarz drużyny, która straciła gola, +20 siły (13:BAA5)po każdym straconym golu
człowiekzakrzywianie lotu piłki, wskakiwanie na zawodników, przedmiotyzawsze
specials · 9:BB1E-BE08

Strzały specjalne od środka

Numer, fazy, poziom

  • Strzał ma numer $050F (44 numery, $00-$2B, wszystkie używane). Tablica 9:BD68 daje każdemu numerowi następną fazę i „poziom”. sprawdzone
  • Poziom wyznacza tor: prędkość pozioma i pionowa (9:BD4A) oraz czas fazy (9:BD5E). Płaski lot, opadnięcie, łuk, schodki, długie wznoszenie to różne poziomy. z kodu
  • Koniec fazy włącza następną; łańcuchy typu $0E → $14 → $0E dają strzały zmieniające się w locie. sprawdzone

Wygląd piłki

  • Co klatkę skrypt animacji z 9:BE0C: pary (czas, klatka piłki), $FE = pętla. Stąd ryba, banany i inne kształty zamiast piłki. sprawdzone
  • Kafle efektów leżą w banku sprite'ów R5, który w meczu zmienia się wg pogody i licznika $0080 (w locie strzału zwykle $0C). sprawdzone
chr banks

Banki grafiki i ich ograniczenia

Ekrany w CHR-ROM

  • 37 ekranów (menu, wybór drużyn, VS, prognoza…) to strumienie RLE w CHR, czytane przez PPU przy wyłączonym obrazie (15:E828, dekoder 15:E941: run, literał, podwójny run, powtórzenie bloku). Leżą ciasno, bez wolnego miejsca. sprawdzone

Loga na ekranie VS

  • Logo = obrazek 5×5 kafli z banku 2 KB ($68 albo $6A) w jednym rejestrze. Dwie drużyny z różnych banków pokazałyby złe logo - w oryginale wszystkie drużyny do wyboru są w $68, więc problemu nie widać. sprawdzone

Twarze na pasku meczu

  • Twarze 6 rywali w banku 4/5, pozostałych 6 w 6/7; bank wybiera IRQ paska według drużyny gracza 2. Gracz 1 z drugiej grupy miałby cudze twarze - znów niewidoczne w oryginale. sprawdzone
  • Twarz = 16 × 16 px: górna połowa (2 kafle, włosy i oczy) jest własna dla zawodnika, dolna (kafle $0C/$0D, podbródek z ustami) wspólna dla wszystkich. Kolory paska: biały, czarny, skóra ($27). sprawdzone

Sprite'y i limit 8 na linię

  • Sprite = ruchomy kafel 8 × 8 rysowany przez PPU nad tłem lub pod nim; 4 bajty: Y, numer kafla, atrybuty (paleta 1 z 4, odbicie, priorytet), X. Zawodnik to kilka sprite'ów składanych z tablic klatek 8:83D8, głowy wg drużyny z 8:82C6.
  • Najwyżej 64 sprite'y na ekranie i 8 w jednej linii. Gdy kilku zawodników stoi w rzędzie, część kawałków znika („przenikanie przez tło”), a rotacja kolejności daje migotanie. W oryginale 394 z 3000 klatek ma ponad 8 sprite'ów w linii, do 13. W Mesenie pomaga opcja Remove sprite limit. sprawdzone
romhack · goal3_vs_all_teams.ips

Przeróbka: wszystkie drużyny i Polska

W meczu 2-4 graczy i w karnych można wybrać wszystkie drużyny, a do tego nową: Polskę z własnym logo, twarzami na pasku i strzałem „kiełbasa”. Polski nie ma w lidze.

Ekran wyboru: 14 drużyn w dwóch kolumnach na gracza
Wybór: siatka 2 × 7 na gracza, Polska jako ぽーらんど (pōrando).
Ekran VS: logo Polski z orłem i flaga kontra Korea
Ekran VS: własne logo (orzeł w koronie) i flaga.
Mecz Polska - Kamerun z paskiem i twarzami
Mecz: nazwiska i twarze na pasku dla każdej pary.
Kiełbasa w locie w kolejnych klatkach
Strzał „kiełbasa” ($2C): faluje góra-dół i się wygina.
Sześć własnych twarzy Polski: Lewandowski, Zieliński, Cash, Kiwior, Zalewski, Szczęsny
Własne twarze Polski: fryzura i brwi odróżniają zawodników.
translation · goal3_pl.ips

Tłumaczenie PL: cała gra

Cała gra po polsku: menu, mecz, liga i puchar, list Misako, narada, profile zawodników i zakończenia. Litery bez ogonków, bo tyle mieści czcionka gry.

Opcje meczu VS po polsku: Gdzie gramy, Wybierz boisko, Wybierz stan murawy
Opcje VS: słowa ułożone tak, by podświetlenie (atrybuty co 2 kafle) nie łapało sąsiada.
Ekran VS Polska kontra Niemcy z nazwami pod logo
Ekran VS: nagłówek i nazwy pod logo (do 7 liter), litery dorysowane w każdym banku logo.
Szatnia Polski: Taktyka, Prognoza, Gramy, Doping
Szatnia: nazwa drużyny (8 liter) rysowana przez kod za napisem SZATNIA.
Ustawienie i panel zawodników Polski z etykietami MF i FW pod imionami
Ustawienie: panel składu dla każdej drużyny, etykiety pozycji (MF, FW) pod imionami.
Strona taktyki: atak, obrona, atak bramkarza
Taktyka: ukryta strona po ustawieniu, także w VS. Wiersz ATAK BRAMKARZA wyjaśnia wybiegającego bramkarza (Q3).
Prognoza pogody: szansa deszczu, wiatr, ostrzeżenia
Prognoza: etykiety w obrazie, wartości wpisuje kod, ikony pogody z map w CHR.
Wybór dopingu: 7 utworów i Dowolna
Doping: kursor ▶ stoi na x9, więc tytuł ma najwyżej 20 liter.
Drabinka pucharu po polsku w dwóch wariantach
Drabinka pucharu: nazwy do 7 liter, bo linię zwycięzcy kod rysuje w 8. kolumnie.
List Misako, narada, profil zawodnika po polsku
List Misako, narada i profil zawodnika (dwie strony).
Ekran końca z telefonem Misako po polsku
Koniec: telefon Misako dzwoni sam kilka tysięcy klatek po napisie KONIEC.
romhack · hud.patch

Pasek siły, „-N” i powtórki

Siła sterowanego zawodnika i partnera na pasku meczu, spadek siły nad trafionym i powtórka każdego gola, którą Start pomija.

Pasek meczu: LEWY 75 i ZIELU 65 z twarzami Polski, po prawej ECKI i SCHUL z Niemiec
Siła zawodnika i partnera w miejscu MF/FW.
Powtórka gola z napisem POWTORKA i START POMIN na pasku
Powtórka po golu: POWTORKA, Start pomija.
sound · page 0 · 0:8000

Muzyka i dźwięk

Silnik dźwięku mieści się w całości na stronie 0 (banki 0/1) i potrzebuje tylko RAM-u $0700-$07FF oraz dwóch próbek perkusji w banku 15. Polecenie PlaySound(id): 14 utworów muzycznych ($01-$0E), 47 efektów ($20-$4E). Kanały: 2 × pulse, trójkąt, szum, DPCM; efekty przejmują te same kanały na czas trwania. sprawdzone zapisami do rejestrów APU.

IdGdzie graTytuł (doping)
$01intro po logo; doping 6ねっけつ FCの てーま (Motyw Nekketsu FC)
$02menu, liga, szatnia-
$03doping 3; Afrykaうんば・び・ぼんぼ (Umba bi bomba)
$04doping 1ねっけつ りーぐ・で・かーにばる (Karnawał ligi Nekketsu)
$05doping 4; Europaびきびき・さんば No.3 (Biki biki samba nr 3)
$06doping 2; pucharてくのす じゃぱん かっぷの てーま (Motyw pucharu Technos Japan)
$07domyślna muzyka meczu; doping 7; Azjaねっけつ たいふーん (Tajfun Nekketsu)
$08ekran VS (jingiel)-
$09przerwa i koniec meczu-
$0Apo meczu (jingiel)-
$0Bpoczątek ceremonii pucharu-
$0Cgol (jingiel)-
$0Ddoping 5; Ameryka Płd.ごー・ごー・ねっけつ すとらいかー (Go go Nekketsu striker)
$0Ezakończenie pucharu-

Doping 8 まかせる („zdaj się na grę”) wybiera utwór po miejscu meczu.

cut content · ~150 tys. klatek fuzzu

Wycięte i nieużywane

Przeszukane pokryciem kodu z losowego grania na 4 padach i analizą statyczną. Gra jest „czysta”: brak menu serwisowego, testu dźwięku i trybu debug; jedyne ukryte kombinacje to pauza z pada 3 i kod ひっさつOK. Wszystkie 37 ekranów i wszystkie 56 komunikatów tekstowych są używane.

Nieużywane banki grafiki: postacie z instrumentami, sombrero, nuty, flagi i siatka testowa
Banki CHR $3C-$3F: postacie z instrumentami (kibice, orkiestra), nigdy niewybierane przez grę. hipoteza: wycięty doping
CoSzczegółyStatus
Akcja 18Kikut „kontynuuj ruch”: bez animacji, po chwili przechodzi w bieg. Bliźniak akcji 38.sprawdzone
Akcja 43Hamowanie do zera z zamrożoną pozą; potem zawodnik stoi na zawsze (brak przejścia dalej).sprawdzone
Akcje 0, 19, 23, 24, 30, 31, 44Pusta procedura - wymuszona zamraża zawodnika.sprawdzone
Dźwięki $0F-$1F17 pustych miejsc w tablicy dźwięków (wskazują ciszę) - prawdopodobnie po wyciętej muzyce. 11 efektów bez znalezionego użycia.hipoteza
Kod4 procedury stałego banku bez żadnego wywołania (m.in. dzielenie 16/8 bitów) i 2 nieużywane wejścia FarCall.z kodu
Wolne miejsce5 KB pustych banków CHR i ~850 B wolnego PRG w kilku bankach (część zajęta przez nasze łatki).z kodu
findings

Błędy i ukryte funkcje

MiejsceCoStatus
9:B885Bug: przy rozpoczęciu gry Select/Start czytane z pada gracza 1 zamiast pada zawodnika z piłką. W meczu 2P gracz 1 może rozpocząć grę za gracza 2. Poprawka: jeden bajt (A5 → B5).bug, sprawdzone
14:CB5FKod w pauzie meczu ligowego: A A A B A A A B + 7× A → napis "ひっさつOK" (techniki specjalne OK), cała drużyna dostaje wszystkie umiejętności.sprawdzone
14:CEA0Ukryta pauza: Select na padzie 3 (port rozszerzeń) zatrzymuje grę bez dźwięku i planszy.sprawdzone
13:B1D3 · 14:CF72Ochrona wznowień (aut, róg, wykop): tylko wykonawca może dotknąć leżącej piłki. Ochrona znika jednak na starcie kopnięcia, a noga trafia w piłkę kilka klatek później. Zawodnik stojący wtedy na piłce ją przejmuje.luka, sprawdzone
7:BBD2Bug kierunku wiatru: losowe odchylenie gubi bit „w lewo”. Przy ← wiatr przez 56% czasu wieje skośnie w prawo, przy ⇔ w prawo przez 76%. Poprawka: 2 bajty w 7:BBE5.bug, sprawdzone
11:BA60Bug pogody ligi: LDA $C005 zamiast JSR $C005 (losowanie). Odczytuje stały bajt instrukcji skoku, więc za każdym razem wybiera wariant 4 z 8 i pogoda zależy tylko od rywala.bug, sprawdzone
10:94B8Ukryta druga strona opcji VS z pogodą (strzałka w dół z ostatniego pytania).sprawdzone
11:B9C4Kluczem szyfrującym hasło jest 32 bajty kodu maszynowego procedury losującej pogodę ligi.sprawdzone
13:AE16Stanie na piłce: zawodnik lądujący na leżącej piłce zostaje na niej i może na niej jeździć zygzakiem.sprawdzone
10:8FAF · 15:FD75Ograniczenia ukryte przez wybór 6 drużyn: loga VS (dwa banki $68/$6A) i twarze na pasku (dwie grupy po 6 drużyn). Każda para spoza drużyn pucharu dałaby złe logo lub twarze gracza 1. Naprawione w łatce.ograniczenie, sprawdzone
7:A2A6 · $05D3Bramkarz wybiegający z piłką to ustawienie taktyki ATAK BRAMKARZA: ATAKUJE = zawsze, ZOSTAJE = nigdy, AUTO (domyślne) = wg charakteru bramkarza i wyniku. Szczegóły w Q3.funkcja, sprawdzone
18, 43Dwie akcje zawodników bez żadnego kodu, który by je ustawiał - prawdopodobnie pozostałości.hipoteza
questions

Pytania z grania

PytanieOdpowiedźStatus
Q1 Bramkarz w grze we 2 a drużyna przeciwnaBug w 9:B885 - gracz 1 może wymusić rozpoczęcie gry zawodnikowi gracza 2. Dotyczy tylko rozpoczęć; bramkarz z piłką w akcji jest sterowany przez komputer.rozwiązane
Q2 Co "zabija" bramkarzaMoc strzału kontra odporność bramkarza; potem rzut monetą, czy piłka przeleci, czy się odbije. Ukryte statystyki: siła, klasa bramkarza, forma.rozwiązane
Q3 Bramkarze wybiegający z piłkąTo nie bug, tylko taktyka. Wiersz ATAK BRAMKARZA na stronie taktyki (szatnia → TAKTYKA → NIE → NIE): ATAKUJE = bramkarz zawsze wybiega z piłką, ZOSTAJE = nigdy, AUTO = decyduje charakter. Drużyna człowieka ma domyślnie AUTO: bramkarz „lubiący się popisywać” wybiega, gdy drużyna nie przegrywa (już przy 0:0) - Kamerun, Brazylia, Argentyna (いぎーた = Higuita), Meksyk, Gwinea; „samolubny” wybiega, gdy przegrywa - Niemcy, Tajlandia. Komputer ma własne ustawienia (11:BD18): wybiegają tylko Gwinea, Argentyna i Tajlandia. Żeby powstrzymać: ZOSTAJE.rozwiązane
Q4 Odbiór przy rzucie rożnymRóg jest chroniony, dopóki wykonawca się rozbiega. Gdy zaczyna kopać, ochrona znika przed kontaktem nogi z piłką; rywal stojący na piłce w tej chwili zabiera ją, a kopnięcie idzie w powietrze.rozwiązane
Q5 Wskakiwanie na zawodnikaMechanika "wieży": wejście z góry, sterowanie nosicielem, +40 mocy strzału.z kodu
Q6 Odbiór przy wykopie z piątkiTa sama luka co przy rogu. Stojąc na piłce, przegrywa się z nogą bramkarza (kopie 4 klatki później); wbiegając w biegu, piłka zostaje luzem obok. W locie piłka po 12 px jest już wyżej niż skok.rozwiązane
Q7 Polecenia dla kolegówPiłka u kolegi: A = „podaj do mnie”, B = „strzelaj”. Piłka u rywala, gdy jesteś daleko: A = „odbierz”, B = „zaatakuj”; polecenie dostaje kolega najbliżej rywala. Zgoda albo odmowa wg tablicy charakter × autorytet, bez losowania. 64 okrzyki z paska przetłumaczone na polski.rozwiązane
Q8 Menu przed meczem (wiatr, strona)Ukryta druga strona opcji VS: deszcz, siła i kierunek wiatru, burza, tornado. Każda opcja działa w meczu; kierunek ← ma bug. W lidze pogoda wynika z rywala (piasek ma Gwinea).rozwiązane
Q9 Mokra piłka robi się niebieskaLicznik $050D rośnie, gdy piłka jest na mokrej/złej trawie; od $40 niebieskawa, od $80 niebieska i „przemoczona”: wiatr znosi ją 2× mocniej, toczy się o połowę krócej, gorzej się odbija, wszyscy biegają ok. 12% wolniej, trafienie nią boli o 1 bardziej. Schnie po golu, po wskoczeniu na nią i po naładowaniu piorunem.rozwiązane
Q10 Czy szczupak jest premiowanyNie mocą. Szczupak (akcja 52) i główka (49) nie dostają +40 za strzał z powietrza (tylko wieża i akcje $43/$47) ani strzału specjalnego (tylko akcje 51 i 55). Moc = siła strzelca + 10/30/20/10 wg odległości od bramki, gdy piłka jest dość wysoko, inaczej +10. Przewaga: piłka leci prosto, bez grawitacji i wiatru.z kodu
Q11 Zawodnicy przenikają przez tłoLimit sprzętu: 8 sprite'ów w linii. Jest w oryginale (394 z 3000 klatek), nie w naszych łatkach. Patrz Banki grafiki.rozwiązane
Q12 Co to tick i jak NES nadążaTick = krok logiki co 3 klatki (20/s), przy tłoku dłużej. Procesor robi ~8 tys. instrukcji na klatkę; ROM jest czytany bezpośrednio z kartridża, tabele zastępują mnożenie, obraz składa osobny układ PPU. Patrz Jeden tick logiki.rozwiązane
Q13 Czy komputer oszukujeNie podgląda pada, nie ma gumki od zegara ani wyniku (poza bramkarzem), losowanie wspólne. Przewagi CPU: +16 siły w pucharze, niższy skok do strzału specjalnego na trudnym. Na łatwym komputer w lidze gra celowo słabiej. Patrz Poziomy trudności.rozwiązane
Q14 Hasła ligi i pucharHasło = wygrane z każdym rywalem + punkty. Puchar: 70 pkt i 16 wygranych (zaproszenie) albo 36 wygranych. Gotowe hasła w Jak działa mecz → Liga i hasło.rozwiązane
Q15 Karne: jak strzelić i jak bronićBramkarz komputera nie zgaduje i nie czyta pada: liczy, gdzie będzie piłka, i rusza 3-6 klatek po kopnięciu. Lob (A) łapie zawsze, z miejsca nie da się strzelić; ok. 700 prób dało zwykle 1-3% goli. Jedyne okno: zejść w dół ok. 34 klatki, pobiec w prawo ok. 24 klatki i od razu płasko B przy słupku - 42%, ale zależy od pojedynczych klatek; dłuższy drybling = bramkarz zabiera piłkę. Prawdziwy chwyt: strzał specjalny ze skoku, gdy jego moc (siła strzelca + baza strzału) przewyższa odporność bramkarza - 20/20 goli, a przy mocy o 2 za małej 0/20. W Nekketsu najmocniejsi: つねを 95, げんえい 90, かるろす 85; na bramkarzy Tajlandii (43) czy Korei (52) wystarczy prawie każdy, na Włochy (100) nikt. Komputer strzela celnie w ok. 57%. Bronić najlepiej, śledząc piłkę w pionie i skacząc (A+B), gdy jest blisko: 36% straconych zamiast 59% przy staniu.sprawdzone
Q16 Czy parada bramkarza zabiera mu siłęNie. Bramkarz w akcji obrony we własnym polu (parada, wyskok, pięść-tornado, wślizg, szarża) wybija piłkę lecącą na niego od przodu bez porównania mocy i bez utraty siły (13:AF36). Stojący lub biegnący bramkarz zawsze traci -5/-7/-9, nawet gdy złapie (13:AEAA).z kodu
Q17 Kalosze i burzaKalosze (ごむ・ながぐつ, KALOSZE) dają odporność na piorun na złym terenie (bit 0 `$04F1`, 13:AA25) przez jedną połowę; na boisku ich nie widać. Dostępne od 4 wygranych w lidze (narada → DARY). Najgorsze warunki: fatalna murawa + burza, bo piorun trafia tylko na złym terenie, a ten jest wtedy prawie wszędzie; naładowana piłka poraża każdego, kto jej dotknie.z kodu
credits

Ludzie i historia

Gra: Technōs Japan, 23.04.1993. Ekipa z napisów końcowych, odczytanych w emulatorze po wygranej lidze (podstan 3/$03, „すたっふ” = ekipa). To pseudonimy; pod pełnym imieniem i nazwiskiem jest tylko jeden programista. sprawdzone

Plansza napisów końcowych: program - Takahashi 68K, Sakagami Takayuki
Plansza „ぷろぐらむ” (program) w napisach końcowych.
RolaPodpis w grzeCzytanie
Projekt gry (でざいん)つるつる・かいTsurutsuru Kai
Program (ぷろぐらむ)たかはし・68K, さかがみ たかゆきTakahashi „68K”, Sakagami Takayuki
Grafika (ぐらふぃっく)つぼりん・とおる, あんでぃ・まるやまTsuborin Tōru, Andy Maruyama
Dźwięk (さうんど)あみーご・さわ, でんじゃらす・うらべAmigo Sawa, Dangerous Urabe
Opakowanie (ぱっけーじ)けろりん・やまね, まんじゅう・くみこKerorin Yamane, Manjū Kumiko
Podziękowania (さんくす)みつひろ, しろ, べんがる, よこぺん, みわちゃん, さかもとMitsuhiro, Shiro, Bengaru, Yokopen, Miwa-chan, Sakamoto

Wokół serii

  • Twórca serii Kunio-kun i Double Dragon, Yoshihisa Kishimoto, nie figuruje w napisach tej części.
  • Kōji Ogata (緒方孝治), grafik postaci Double Dragon i Kunio-kun; Soccer League nie ma na jego liście prac. W 2024 zrobił remake okładki Nekketsu Kōkō Dodgeball-bu: Soccer-hen (Goal 1).
  • Na Zachodzie gra wyszła dopiero w 2020 w zestawie Double Dragon & Kunio-kun: Retro Brawler Bundle (PS4, Switch), z pierwszym oficjalnym tłumaczeniem na angielski. W Japonii: Kunio-kun: The World Classics Collection (2018).

Wyzwania twórców (z tego, co widać w kodzie)

  • Limit 8 sprite'ów na linię przy 12 zawodnikach i piłce.
  • Krótkie okno vblank na przewijanie boiska, panele i radar.
  • Ekran dzielony przerwaniem MMC3 (boisko się przewija, pasek stoi).
  • Kod pocięty na banki, 4 palety sprite'ów po 3 kolory, brak mnożenia, 4 pady naraz.