
2796-27D9: procedura startu calej gry;
zapisuje wektor glownej IRQ (0216,0127) do 0052,0053;
zapisuje 3 wektory IRQ transmisji szeregowej (020A-020F) do 0056-005B;
005C <= #00 - numer obrazka tla;
kasuje tablice wynikow $6220-$6250;
0054 <= #01 - muzyka wlaczona;
0050 <= #00 - zawodnik bialy sterowany przez komputer;
0051 <= #00 - zawodnik czerwony sterowany przez komputer;
0055 <= #00 - odglosy walki wylaczone;
w dalszym ciagu procedura realizuje procedure 27DA;

27DA-27E2: punkt startowy dla pelnego cyklu gry; skok w to miejsce nastepuje po zakonczeniu poprzedniego cyklu lub po nacisnieciu klawisza START lub SELECT
ustawia wskaznik stosu na #C0;
wywoluje 3270 - inicjacja ekranu i dzwieku, skasowanie buforow i zmiennych (w tym bufora klawiatury 00F2-00F5 co powoduje, ze ostatnio wcisniety klawisz, ktorego kod jest w kbcode, zostaje wykryty przez procedure VBLKI jako ponownie wcisniety; jezeli np ostatnio wcisniety byl klawisz T to wraz z rozpoczeciem nowego cyklu gry wlaczona bedzie muzyka)
skacze do 2833;

27E3-27E7: MUTE MUSIC;
00CF <= #FF;

27E8-27EC: UNMUTE MUSIC;
00CF <= #00;

27ED-2813: napis "International Karate ...";
2814-2832: napis "Game essence ...";

2833-287B: glowna petla programu w ramach jednego cyklu gry;
w przypadku gdy 00D0 =
#01: wywoluje 287C; generuje pojedyncza klatke gry w trakcie walki;
#02: wywoluje 2899; po celnym ciosie;
#03: wywoluje 2918; po zwyciestwie w rundzie;
#04: wywoluje 3058; rozpoczyna runde lamania desek;
#05: wywoluje 2F3D; rozpoczyna i przeprowadza runde unikania przelatujacej broni;
#06: wywoluje 273E=5C8C; wyswietla tablice wynikow, przeprowadza wpis do tabeli;
jezeli 00D0 bylo rowne #06 to skacze (wraca) do 27DA, czyli nastepuje koniec biezacego i rozpoczecie nastepnego cyklu gry;
jezeli 619E = #00 to skacze (wraca) do 2833;
wywoluje 270B (ladowanie nastepnego obrazka tla);
skacze (wraca) do 2833;

287C-2898: procedura wywolywana przez petle glowna gdy 00D0 = #01;
generuje pojedyncza klatke gry w trakcie walki;
wywoluje 2BA2 - wykrywa koniec walki;
jezeli C=0 czyli walka sie nie skonczyla to:
  wywoluje 2777=51C0 - glowna procedura petli animacyjnej obu zawodnikow; wybor wlasciwych klatek ruchu i przesuniec zawodnikow;
  wywoluje 2E91 - rysuje dziadka i obu graczy; jesli 6181 == #$1C (czyli biezacy ruch zawodnika bialego, a wlasciwie obu, jest uklonem), wyswietla dymek z napisem BEGIN;
  wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;
  wywoluje 2729=415D - detekcja kolizji - celnosci ciosu;
  wywoluje 39A1 - rozpoczyna odtwarzanie dzwiekow towarzyszacych poszczegolnym ruchom graczy;
  jezeli 00D8 <> #00 czyli jezeli jeden z zawodnikow zadal cios drugiemu, to 00D0 := #02;

2899-2915: procedura wywolywana przez petle glowna gdy 00D0 = #02;
procedura wywolywana po celnym ciosie jednego z zawodnikow;
animuje upadek pokonanego i ewentualnie chuchniecie w piesc zwyciezcy; jezeli nie koniec rundy to inicjuje uklon przed nastepnym starciem;
w trakcie upadania po otrzymaniu celnego ciosu nie sa wywolywane procedury 287C, 2899 ani 5C8C;
-zeruje 00DF (licznik zliczajacy w przod ramki VBL);
-zeruje 6131 (numer ruchu po zadaniu ciosu);
-laduje 6128 (numer zawodnika nie zadajacego ciosu w ostaniej klatce ruchu) do Y;
-zapisuje Y do 00D2 (numer zawodnika);
-laduje 6130 (numer ruchu upadku po otrzymaniu ciosu;) do A;
-zapisuje A do 00EC+Y (numer ruchu do wykonania);
-wywoluje 2747 - inicjuje wykonanie przez zawodnika Y sekwencji klatek ruchu o numerze podanym w A;
-jezeli pojedynek dwoch graczy, to:
  -laduje 00D4 (numer zawodnika zadajacego cios w ostaniej klatce ruchu) do Y;
  -jezeli 00D4 == #0 (ostaniej klatce ruchu cios zadal zawodnik bialy), to:
    -zwieksza o 1 komorke 6167 (bilans ciosow);
  -jezeli 00D4 == #1 (ostaniej klatce ruchu cios zadal zawodnik czerwony), to:
    -zmniejsza o 1 komorke 6167 (bilans ciosow);
  -jezeli jeden z zawodnikow przejal wszystkie punkty za cios (wygral pojedynek), to 28E8;
  -jezeli zaden z zawodnikow nie przejal wszystkich punktow za cios (nie wygral pojedynku), to:
    -zeruje 6144 (liczba punktow za cios, o jaka nalezy zwiekszyc ilosc punktow zawodnika);
    -zapisuje #$32 (50) do 00DF (licznik zliczajacy w przod ramki VBL);
-jezeli 6144 (liczba punktow za cios) >= #2, to:
  -laduje 00D4 (numer zawodnika zadajacego cios w ostaniej klatce ruchu) do Y;
  -jezeli 00D9+Y (liczba punktow za cios zawodnika) >= #2, to:
    -28E8: zapisuje #2 do 6144 (liczba punktow za cios, o jaka nalezy zwiekszyc ilosc punktow zawodnika);
    -zapisuje #$20 do 6131 (numer ruchu po zadaniu ciosu = chuchniecie w piesc i otrzepanie reki); 
    -zeruje 6183+Y (uniewaznia biezacy ruch zawodnika);
-wywoluje 277A - procedura petli animacyjnej obu zawodnikow nie wybierajacej ruchu dla zawodnika sterowanego przez komputer;
-wywoluje 2DE1 - rysuje klatke animacji wraz ze wskaznikami zdobytych punktow i aktualizacja licznikow;
-wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;
-wywoluje 39A1 - rozpoczyna odtwarzanie dzwiekow towarzyszacych poszczegolnym ruchom graczy;
-jezeli 00DF < #$96, to wraca do wywolania 277A - petla animujaca upadek jednego z zawodnikow;
-wywoluje 2BA2 - wykrywa koniec walki na podstawie zdobytych punktow za cios (i ustawia 00D0 (faza) na #3, gdy koniec);
-jezeli nie koniec walki, to:
  -wywoluje 2D89 - rozmieszcza zawodnikow przed walka i inicjuje wykonanie przez nich uklonu;
  -zapisuje #1 do 00D0 (faza);


2916-2917: 00 01


2918-2A48: procedura wywolywana przez petle glowna gdy 00D0 = #03;
procedura wywolywana po zwyciestwie w rundzie, dokladnie w tym momencie, w jakim pojawia sie komunikat 'BEGIN', gdy runda jeszcze trwa;
wyznacza ktory zawodnik wygral cala runde;
wypisuje komunikat, kto wygral runde; zwyciezca wykonuje uklon; wypisuje bonus; w przypadku zwyciestwa komputera nad rzeczywistym graczem 'MATCH OVER' wypisuje 5C8C;
procedura rozmieszcza zawodnikow i wyswietla ich w pozycji stojacej;
jezeli pojedynek dwoch graczy to skacze bezpowrotnie do 2A49; okresla, ktory zawodnik wygral - w razie rownosci punktow za cios bierze pod uwage liczniki 6145-6148; zwyciezca wykonuje uklon we wlasciwa strone; doliczane sa punkty bonusu za pozostaly czas - inkrementacja punktow i dekrementacja czasu jest wyswietlana w petli z opoznieniem, by bylo to zauwazalne;
jezeli jednym z zawodnikow sterowal komputer a drugim gracz i gracz przegral to ustawia 6168 na numer zawodnika gracza - numer zawodnika, dla ktorego nastapi wpis do tabeli wynikow (i ktory ukloni sie po dokonaniu wpisu); 
tresc komunikatow przy opisie tablicy 47A7-4A12;

opis szczegolowy:
2918:
00D1 jest inicjowana wartoscia 0 (bialy wygral) przez 3270 wolana przez 27DA - punkt startowy dla pelnego cyklu gry; skok w to miejsce nastepuje po zakonczeniu poprzedniego cyklu lub po nacisnieciu klawisza START lub SELECT;
w sytuacji remisu w walce gracza z komputerem lub walce demo 00D1 nie jest zmieniana, czyli pamieta zwyciezce poprzedniej rundy lub 0 (bialy) na poczatku walki do czasu pierwszego zwyciestwa ktoregos z zawodnikow;
00D1 jest zmieniana na 1 (lub 2 gdy dwoch graczy ale to tylko w wersji enhanced) przez procedure obslugujaca lamanie desek; od tej chwili wszystkie remisy sa uznawane na rzecz czerwonego - patrz tez 2978/remis;

wyswietla sie pusty dymek po werdykcie za ostatnie starcie;
jesli pojedynek dwoch graczy to 2935 (ustaw zawodnikow przodem do siebie i skoryguj polozenia); jesli pojedynek gracza z komputerem to 291E (sprawdz czy pozostal czas na punkty bonusu);
291E:
$10 -> 6121 - licznik ramek dla opozniania animacji zawodnikow;
wola procedure 2EC3 - rysuje nastepna klatke animacji zawodnikow i sedziego; kasuje dymek z mowa sedziego
$01 -> 6144 - liczba punktow za cios (wartosc ciosu), o jaka nalezy zwiekszyc ilosc punktow za cios zawodnika;
A <- 00DC - timer BCD czasu walki (w sekundach);
jesli A > 0 to 299C; jesli A <= 0 to 292F;
292F: uplynal czas rundy;
$30 -> 00DD - numer klatki animacji zawodnika bialego 0-53; $30 = pozycja wyprostowana;
$30 -> 00DE - numer klatki animacji zawodnika czerwonego 0-53; $30 = pozycja wyprostowana;

2935: ustaw zawodnikow przodem do siebie i skoryguj polozenia, by nie byli zbyt blisko krawedzi ekranu;
0 -> Y - numer zawodnika zadajacego cios (bialy);
wola 2711 - wyznacza relacje polozen zawodnikow;
1 -> Y (biezacy zawodnik to zawodnik czerwony);
293C: petla po zawodnikach korygujaca ustawienie; Y - licznik petli/numer zawodnika;
A <- 00DD+Y - numer klatki animacji zawodnika Y;
jesli klatka (A) w przedziale $27-$2F to 296C = continue (skok na koniec kodu petli); jesli klatka (A) poza przedzialem $27-$2F to 2947;
2947:
A <- 6138 - flagi orientacji zawodnikow i ich wzajemnego polozenia;
pozostawia tylko flage z bitu 2 - 1 = gracz zadajacy cios (bialy) jest na prawo wzgledem drugiego, 0 = gracz zadajacy cios (bialy) jest na lewo wzgledem drugiego
przenosi ta flage na bit 0;
neguje ta flage jezeli biezacy zawodnik to zawodnik czerwony;
A -> 00E2+Y - orientacja zawodnika Y, ustawiana na wartosc wspomnianej flagi;
koryguje 00E0+Y - przesuniecie dla zawodnika Y w prawo (w pikselach) tak, by bylo nie mniejsze niz $10(16) i nie wieksze niz $88(136);
296C: obsluga petli;
Y <- Y-1;
jesli Y >= 0 to 293C (kolejna iteracja petli); jesli Y < 0 to 296F;
296F: koniec korekty ustawienia zawodnikow;
jesli walka dwoch graczy to 2A49 (inna procedura); w przeciwnym razie 2978;

2978: wybierz zwyciezce porownujac punkty za cios a jezeli rowne to rowniez biezace wyniki; jesli remis to wygrywa ten kto zadal skuteczny cios jako ostatni; jesli nikt to wtedy dopiero remis - przejscie do nastepnej rundy;
porownaj 00D9 z 00DA - liczba punktow za cios zawodnika bialego i czerwonego (0-5, full point = 2);
jesli 00D9 < 00DA to 29A7 (wygral czerwony); jesli 00D9 > 00DA to 29A2 (wygral bialy);
porownaj 6145 z 6146 - licznik dziesiatek tysiecy punktow zawodnika bialego i czerwonego zdobytych w rundzie (BCD);
jesli 6145 < 6146 to 29A7 (wygral czerwony); jesli 6145 > 6146 to 29A2 (wygral bialy);
porownaj 6147 z 6148 - licznik setek punktow zawodnika bialego i czerwonego zdobytych w rundzie (BCD);
jesli 6147 < 6148 to 29A7 (wygral czerwony); jesli 6147 > 6148 to 29A2 (wygral bialy);
jesli remis w punktach:
X <- 6151 - numer zawodnika ktory zadal ostatnio skuteczny cios, 0 lub 1; na poczatku rundy ustawiany na $FF przez 2CEF i aktualizowany po kazdym skutecznym ciosie przez 415D;
jesli X >= 0 to 29A9 (X = wyznaczony zwyciezca; wyswietl zwyciezce rundy; to kryterium jest niesprawiedliwe); jesli X < 0 to 2A1B (remis zupelny; odczekaj 1 sekunde; przejdz do nastepnej rundy albo wpisu do tablicy wynikow; zwyciezca jest ten kto wygral poprzednio lub bialy jezeli jeszcze zaden zawodnik nie wygral - okresla to zawartosc 00D1; zwyciezca w tym wypadku nie jest wyswietlany; zwyciestwo czerwonego oczywiscie konczy turniej, wiec wszystkie remisy sa uznawane na rzecz bialego dopoki nie przegra; 00D1 jest zmieniana na 1 (lub 2 gdy dwoch graczy ale to tylko w wersji enhanced) przez procedure obslugujaca lamanie desek; od tej chwili wszystkie remisy sa uznawane na rzecz czerwonego; dla zapewnienia przedluzenia turnieju po remisach w tym miejscu nalezy zainicjowac 00D1 wartoscia z 0051 czyli numerem zawodnika, ktorym steruje gracz);

299C: walka zakonczona przed czasem;
zwyciezca stoi; przegrany lezy;
porownaj 00D9 z 00DA - liczba punktow za cios zawodnika bialego i czerwonego (0-5, full point = 2);
jesli 00D9 < 00DA to 29A7 (wygral czerwony); jesli 00D9 >= 00DA to 29A2 (wygral bialy, nawet jesli remis, ale taka sytuacja nie moze sie zdarzyc bo jesli zwyciestwo przed czasem to na pewno nie jest rowna ilosc punktow za cios);
29A2:
X <- 0 - wygral bialy; skok do 29A9;
29A7:
X <- 1 - wygral czerwony; skok do 29A9;

29A9: X = wyznaczony zwyciezca; wyswietl zwyciezce rundy i ewentualnie bonus jesli pozostal czas;
X -> 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
X -> 00D2 - numer zawodnika, ktoremu dodane beda punkty (0-bialy, 1-czerwony);
$31 -> 00DD+X - ustawia uklon zawodnika ktory wygral;
zwieksza o 1 zawartosc 00E0+X - przesuniecie zawodnika ktory wygral o 1 piksel w prawo;
X <- X + 1; A <- X; numer zwyciezcy zwiekszony o 1, czyli 1 - bialy, 2 - czerwony;
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: WHITE (A = 1) lub RED (A = 2);
wola 2714 - nanosi dymek z mowa sedziego na obie areny;
X <- $19;
wola 2F30 - czeka az uplynie ilosc ramek VBL podana w rejestrze X;
wola 2EC3 - rysuje nastepna klatke animacji zawodnikow i sedziego; kasuje dymek z mowa sedziego; w tym wypadku klatka to uklon zwyciezcy;
wola 2714 - nanosi dymek z mowa sedziego na obie areny;
X <- $32;
wola 2F30 - czeka az uplynie ilosc ramek VBL podana w rejestrze X; teraz widac uklon zwyciezcy;
A <- 7
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; pusty dymek (A = 7); pusty dymek widac juz od nastepnej ramki, zanim dojdzie do wywolania 2714;
X <- 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
$30 -> 00DD+X - ustawia pozycje wyprostowana zawodnika ktory wygral;
zmniejsza o 1 zawartosc 00E0+X - przesuniecie zawodnika ktory wygral o 1 piksel w lewo;
wola 2EC3 - rysuje nastepna klatke animacji zawodnikow i sedziego; kasuje dymek z mowa sedziego; w tym wypadku klatka to postawa wyprostowana zwyciezcy;
wola 2714 - nanosi dymek z mowa sedziego na obie areny;
X <- $19;
wola 2F30 - czeka az uplynie ilosc ramek VBL podana w rejestrze X; teraz widac postawe wyprostowana zwyciezcy;
00D1 -> 00D2
A <- 00DC - timer BCD czasu walki (w sekundach);
jesli A = 0 to 2A1B; jesli A != 0 to 29EB;
29EB: jesli walka zakonczona przed czasem to dodaj pozostaly czas jako punkty bonusowe dla zwyciezcy, 100 punktow za sekunde;
A -> 614F - liczba setek bonusu w kodzie BCD;
A <- #$0A
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: xx00 BONUS (A = 10); liczba setek bonusu brana z 614F;
wola 2714 - nanosi dymek z mowa sedziego na obie areny;
1 -> 6132 - liczba setek, o jaka nalezy zwiekszyc licznik punktow zawodnika (BCD);
29FB: petla odejmujaca sekunde od pozostalego czasu i dodajaca 100 punktow bonusu do punktow zawodnika oraz aktualizujaca ekran statusowy;
0 -> 00DB - blokada doliczania punktow bonusowych; blokada skasowana;
A <- 00DC - timer BCD czasu walki (w sekundach);
jesli A = 0 to 2A1B; jesli A != 0 to 2A03;
2A03:
set C = 1 for subtracting;
set BCD mode;
A = A - 1;
clear BCD mode;
A -> 00DC;
wola 2732 - zwieksza i wyswietla licznik punktow zawodnika podanego w 00D2;
wola 276E - wyswietla pozostaly czas walki na ekranie;
wola 2720 - wypisuje kolor pasa;
X <- 4;
wola 2F30 - czeka az uplynie ilosc ramek VBL podana w rejestrze X;
skacze bezwarunkowo do 29FB;

2A1B: odczekaj 1 sekunde; przejdz do nastepnej rundy albo wpisu do tablicy wynikow (faza 6) albo wyswietlania tablicy wynikow i nastepnej rundy jesli demo;
X <- $32;
wola 2F30 - czeka az uplynie ilosc ramek VBL podana w rejestrze X; teraz widac uklon zwyciezcy;
jesli tryb/walka demo to 2A42; jesli nie (czyli walka gracza z komputerem) to 2A26;
2A26:
jesli gracz steruje bialym to 2A2A; jesli gracz steruje czerwonym to 2A31;
2A2A: gracz steruje bialym;
X <- 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
jesli X = 1 (czerwony wygral) to 2A35 (koniec walki); jesli X = 0 (bialy wygral) to 2A45 (walka bedzie kontynuowana);
2A31: gracz steruje czerwonym;
X <- 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
jesli X = 1 (czerwony wygral) to 2A45 (walka bedzie kontynuowana); jesli X = 0 (bialy wygral) to 2A35 (koniec walki);
2A35: koniec walki gracza z komputerem;
X -> A - A = numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
A = !A (eor #1) - A = numer zawodnika, ktory przegral runde (0-bialy, 1-czerwony);
A -> 6168 - numer zawodnika/portu joysticka, ktorym sterowal gracz i dla ktorego nastapi wpis do tabeli wynikow (i ktory ukloni sie po dokonaniu wpisu); ustawiany w 2918 jako numer zawodnika, ktorym sterowal gracz i przegral;
6 -> 00D0 - faza gry; faza 6 obslugiwana przez 273E, ktora wyswietla MATCH OVER, wyswietla tablice wynikow, przeprowadza wpis do tabeli;
wyjscie z procedury;
2A42: tryb demo
wola 273E, ktora wyswietla tablice wynikow; pozostawia 00D0 = 3
2A45: walka bedzie kontynuowana;
wola 2C42 - inicjuje nowa runde;
wyjscie z procedury;


2A49-2BA1: procedura wywolywana przez 2918 (jej integralna czesc); realizuje rozne zakonczenia walki w zaleznosci od zdobytych punktow i wygranych rund obu zawodnikow w razie pojedynku dwoch graczy; wyswietla odpowiednie komunikaty w dymkach oraz ustawia zawodnikow w postawie stojacej; procedura ta wyswietla komunikat DRAW w sytuacji, gdy (6195 OR 6196) <> #0; komorki te sa zerowane przez 2C42 i nigdy nie sa ustawiane, wiec ten komunikat nigdy nie jest wyswietlany (w wersji na C64 jest wyswietlany);

opis szczegolowy:
2A49:
0 -> 00DB - blokada doliczania punktow bonusowych; blokada skasowana;
$02 -> 6144 - liczba punktow za cios (wartosc ciosu), o jaka nalezy zwiekszyc ilosc punktow za cios zawodnika;
$10 -> 6132 - liczba setek, o jaka nalezy zwiekszyc licznik punktow zawodnika (BCD);
$10 -> 614F - liczba setek bonusu w kodzie BCD;
A <- 00D4 - numer zawodnika zadajacego cios w ostaniej klatce ruchu;
A -> 00D2 - numer zawodnika, ktoremu dodane beda punkty (0-bialy, 1-czerwony); to przypisanie nie ma znaczenia dla tej procedury;
A -> 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony); to przypisanie nie ma znaczenia dla tej procedury;
A <- 00DC - timer BCD czasu walki (w sekundach);
jesli A = 0 to 2A64; jesli A != 0 to 2A79;

2A64: uplynal czas rundy;
$30 -> 00DD - numer klatki animacji zawodnika bialego 0-53; $30 = pozycja wyprostowana;
$30 -> 00DE - numer klatki animacji zawodnika czerwonego 0-53; $30 = pozycja wyprostowana;
A <- 4
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: STOP;
$4B -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 75 = 1.5 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
skacze bezwarunkowo do 2A80;

2A79: walka zakonczona przed czasem;
Y <- 00D4 - numer zawodnika zadajacego cios w ostaniej klatce ruchu;
$30 -> 00DD+Y - numer klatki animacji zawodnika Y 0-53; $30 = pozycja wyprostowana; zawodnik, ktory zadal cios jako ostatni, wyprostuje sie;

2A80: wybierz zwyciezce porownujac punkty za cios a jezeli rowne to rowniez biezace wyniki; jesli remis to wygrywa ten kto zadal skuteczny cios jako ostatni; jesli nikt to wtedy dopiero remis - przejscie do nastepnej rundy (w wersji na C64) lub natychmiastowe przejscie do trybu demo (w wersji na Atari);
A <- 6167 - bilans ciosow - wskaznik poczatku punktow zawodnika czerwonego w pojedynku dwoch graczy - waha sie od $36 (wszystkie czerwone) do $42 (wszystkie biale), $3C to rownowaga;
jesli A < $3C to 2AB3 (wygral czerwony); jesli A > $3C to 2ABD (wygral bialy);
porownaj 6147 z 6148 - licznik setek punktow zawodnika bialego i czerwonego zdobytych w rundzie (BCD);
jesli 6147 < 6148 to 2AB3 (wygral czerwony); jesli 6147 > 6148 to 2ABD (wygral bialy);
jesli remis w punktach:
A <- 6195 - przechowuje numer ruchu wykonanego ostatnio przez zawodnika bialego lub 0, gdy zawodnik nie wykonal zadnego ruchu w czasie rundy (gracz nie poruszyl joystickiem); zerowana przez 2C42 i nigdy nie sa ustawiana w wersji na Atari; w wersji na C64 do komorki tej kopiowana jest przez 51F9 (dokladnie powinno to byc pod adresem 526B) zawartosc 00EC - numer ruchu/sekwencji klatek (0-35) do wykonania przez zawodnika bialego;
A <- A OR 6196 - przechowuje numer ruchu wykonanego ostatnio przez zawodnika czerwonego lub 0, gdy zawodnik nie wykonal zadnego ruchu w czasie rundy (gracz nie poruszyl joystickiem); zerowana przez 2C42 i nigdy nie sa ustawiana w wersji na Atari; w wersji na C64 do komorki tej kopiowana jest przez 51F9 (dokladnie powinno to byc pod adresem 526B) zawartosc 00ED - numer ruchu/sekwencji klatek (0-35) do wykonania przez zawodnika czerwonego;
jesli A = 0 (w wersji na Atari zawsze; w wersji na C64 zaden z zawodnikow nie wykonal zadnego ruchu w czasie rundy) to 2A9B; jesli A != 0 (w wersji na C64 ktorykolwiek z zawodnikow wykonal jakikolwiek ruch w czasie rundy) to 2AA4;

2A9B: zakoncz pojedynek natychmiastowym przejsciem do trybu demo;
0 -> 0050 - zawodnik bialy sterowany przez komputer (0) / gracza (1)
0 -> 0051 - zawodnik czerwony sterowany przez komputer (0) / gracza (1)
skacze bezwarunkowo do 2BFC - inicjuje nowa walke demo; wyjscie z procedury;

2AA4: remis w rundzie (tylko w wersji na C64);
A <- 16
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: DRAW (remis);
$64 -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 100 = 2 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
skacze bezwarunkowo do 2B0E (obsluga zakonczenia rundy i ewentualnie calego pojedynku);

2AB3: runde wygral czerwony;
A <- 2
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: RED;
X <- 1 - wygral czerwony;
skacze bezwarunkowo do 2AC4;

2ABD: runde wygral bialy;
A <- 1
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: WHITE;
X <- 0 - wygral bialy;

2AC4: X = wyznaczony zwyciezca rundy; wyswietl zwyciezce rundy (dymek przygotowany wczesniej);
X -> 00D2 - numer zawodnika, ktoremu dodane beda punkty (0-bialy, 1-czerwony);
X -> 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
(6199+X) <- (6199+X) + 1 - 6199: zwieksz ilosc rund wygranych przez zawodnika X (gra 2 zawodnikow) o 1;
A <- 6167 - bilans ciosow - wskaznik poczatku punktow zawodnika czerwonego w pojedynku dwoch graczy - waha sie od $36 (wszystkie czerwone) do $42 (wszystkie biale), $3C to rownowaga;
jesli A >= $42 (wszystkie punkty biale) lub jesli A = $36 to (wszystkie punkty czerwone) to 2AD9; w przeciwnym razie skocz bezwarunkowo do 2AF0;

2AD9: dodaje 1000 punktow bonusu dla zawodnika ktory wygral runde i zdobyl wszystkie 12 punktow za cios oraz wyswiela dymek z bonusem;
$4B -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 75 = 1.5 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
0 -> 00DB - blokada doliczania punktow bonusowych; blokada skasowana;
00D1 -> 00D2
wola 2732 - zwieksza i wyswietla licznik punktow zawodnika podanego w 00D2; wartosc licznika zwiekszana jest o liczbe setek podana w 6132 (BCD); w tej sytuacji 6132 = $10; dodaje 1000 punktow zawodnikowi za zdobycie wszystkich 12 punktow za cios;
A <- #$0A
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: xx00 BONUS (A = 10); liczba setek bonusu brana z 614F (BCD); w tej sytuacji 614F = $10;

2AF0: wyswietla uklon i wyprost zawodnika ktory wygral runde; opcjonalnie wyswietla dymek z bonusem za zdobycie wszystkich 12 punktow za cios (jesli przygotowany wczesniej);
$32 -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 50 = 1 sekunda w PAL;
X <- 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
$31 -> 00DD+X - ustawia uklon zawodnika ktory wygral;
zwieksza o 1 zawartosc 00E0+X - przesuniecie zawodnika ktory wygral o 1 piksel w prawo;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
X <- 00D1 - numer zawodnika, ktory wygral runde (0-bialy, 1-czerwony);
$30 -> 00DD+X - ustawia pozycje wyprostowana zawodnika ktory wygral;
zmniejsza o 1 zawartosc 00E0+X - przesuniecie zawodnika ktory wygral o 1 piksel w lewo;
$4B -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 75 = 1.5 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;

2B0E: obsluguje ewentualne zakonczenie pojedynku dwoch graczy (przechodzi do trybu demo lub jeden z zawodnikow przechodzi do walki z komputerem) lub przechodzi do nastepnej rundy pojedynku;
A <- 00D3 - numer rundy (BCD);
jesli A >= 5 to 2B2D (koniec pojedynku dwoch graczy po 5 rundach - 3 rundy walki i 2 rundy dodatkowe); w przeciwnym wypadku 2B14;
2B14: dodaje 5000 punktow bonusu dla zawodnika ktory wygral 2 rundy (czyli pojedynek dwoch graczy przed trzecia runda) o ile mialo to miejsce; dymek z tym bonusem jest wyswietlany przez 2B87 (dalsza czesc procedury);
$50 -> 6132 - liczba setek, o jaka nalezy zwiekszyc licznik punktow zawodnika (BCD);
$50 -> 614F - liczba setek bonusu w kodzie BCD;
A <- 6199: ilosc rund wygranych przez zawodnika bialego (gra 2 zaw.);
jesli A >= 2 to 2B6E (zawodnik bialy wygral 2 rundy);
A <- 619A: ilosc rund wygranych przez zawodnika czerwonego (gra 2 zaw.);
jesli A >= 2 to 2B76 (zawodnik czerwony wygral 2 rundy);
skacze bezwarunkowo do 2C42 - inicjuje nowa runde; wyjscie z procedury;

2B2D: koniec pojedynku dwoch graczy po 5 rundach - 3 rundy walki i 2 rundy dodatkowe;
0 -> 6132 - liczba setek, o jaka nalezy zwiekszyc licznik punktow zawodnika (BCD);
0 -> 614F - liczba setek bonusu w kodzie BCD;
porownuje 6199 z 619A - ilosci rund wygranych przez zawodnikow;
jesli liczba rund wygranych przez bialego jest mniejsza to 2B76 (czerwony zawodnik wygral);
jesli liczba rund wygranych przez bialego jest wieksza to 2B6E (bialy zawodnik wygral);
porownuje 00F7 z 00FA - ekranowe liczniki punktow (BCD), najstarsze bajty - dziesiatki tysiecy;
jesli 00F7 > 00FA to 2B6E (bialy wygral); jesli 00F7 < 00FA to 2B76 (czerwony wygral);
porownuje 00F8 z 00FB - ekranowe liczniki punktow (BCD), srodkowe bajty - setki;
jesli 00F8 > 00FB to 2B6E (bialy wygral); jesli 00F8 < 00FB to 2B76 (czerwony wygral);
jesli remis:
A <- 16
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: DRAW (remis);
$4B -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 75 = 1.5 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
A <- 14
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: MATCH OVER;
$C8 -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 200 = 4 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
skacze bezwarunkowo do 2A9B (inicjuje nowa walke demo; wyjscie z procedury);

2B6E: pojedynek wygral bialy;
A <- 12
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: WHITE WINS;
skacze bezwarunkowo do 2B7B;

2B76: pojedynek wygral czerwony;
A <- 13
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: RED WINS;

2B7B:
$64 -> 00D7 - timer liczacy do zera, zmniejszany o 1 co ramke VBL; wartosc 100 = 2 sekundy w PAL;
wola 2EF5 - wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
A <- 614F - liczba setek bonusu w kodzie BCD;
jesli A = 0 to 2B9F (brak bonusu); jesli A != 0 to 2B87;

2B87: dodaj bonus do licznika punktow zwyciezcy rundy i wyswietl w dymku; tu jest wyswietlany bonus 5000 za zdobycie wszystkich 12 punktow za cios, jesli mialo to miejsce;
0 -> 00DB - blokada doliczania punktow bonusowych; blokada skasowana;
00D1 -> 00D2
wola 2732 - zwieksza i wyswietla licznik punktow zawodnika podanego w 00D2; wartosc licznika zwiekszana jest o liczbe setek podana w 6132 (BCD);
A <- #$0A
wola 2717 - przygotowuje tresc dymka mowy sedziego w generatorach znakow obu aren; tresc: xx00 BONUS (A = 10); liczba setek bonusu brana z 614F (BCD);
0 -> 614F - liczba setek bonusu w kodzie BCD;
skacze bezwarunkowo do 2B7B; wyswietla dymek z bonusem przez 2 sekundy; skacze do 2B9F;

2B9F:
skacze bezwarunkowo do 2C0D (inicjuje pierwsza runde po zakonczeniu pojedynku dwoch graczy); wyjscie z procedury;



2BA2-2BCF: procedura wykrywa koniec walki na podstawie zdobytych punktow za cios;
jezeli koniec walki, zwraca C = 1 i ustawia 00D0 = #3; jezeli nie koniec walki, zwraca C = 0;
-jezeli 00DC (timer czasu walki) == #0 to ustawia koniec walki;
-jezeli oboma zawodnikami steruja gracze, to:
  -jezeli 6167 >= #$42 to ustawia koniec walki;
  -jezeli 6167 == #$36 to ustawia koniec walki;
  (6167 to wskaznik poczatku punktow zawodnika czerwonego w pojedynku dwoch graczy - waha sie od #$36 (wszystkie czerwone) do #$42 (wszystkie biale), #$3C to rownowaga);
  -jezeli zadne z powyzszych to zwraca C = 0 (nie koniec walki);
-jezeli jednym lub oboma zawodnikami steruje komputer, to:
  -jezeli 00D9 (liczba punktow za ciosy zawodnika bialego) >= #4 to ustawia koniec walki;
  -jezeli 00DA (liczba punktow za ciosy zawodnika czerwonego) >= #4 to ustawia koniec walki;
  -jezeli zadne z powyzszych to zwraca C = 0 (nie koniec walki);


2BD0-2BED: tablice wykorzystywane przez 2C0D;

2BD0-2BE7: tablica wykorzystywana do ustalenia rundy na podstawie liczby punktow zwyciezcy pojedynku;
2BE8: 01 - numer przeciwnika zawodnika bialego;
2BE9: 00 - numer przeciwnika zawodnika czerwonego;
2BEA: 03 - offset licznika punktow przeciwnika zawodnika bialego;
2BEB: 00 - offset licznika punktow przeciwnika zawodnika czerwonego;
2BEC: 00 - offset licznika punktow zawodnika bialego;
2BED: 03 - offset licznika punktow zawodnika czerwonego;

2BEE-2BF4: tablica kolorow napisow w dolnej linii ekranu dla roznych obrazkow tla;

2BF5-2BFB: tablica wartosci fazy 00D0 dla poszczegolnych 7 rund pojedynku dwoch graczy;
2BF5-2BFB: 01 01 04 01 05 01 01


2BFC-2C0C:
-zeruje ekranowe liczniki punktow obu zawodnikow 00F7-00F9 i 00FA-00FC;
-zeruje numer rundy 00D3 (BCD);
-zeruje numer rundy 6150 (HEX);
-skacze bezpowrotnie do 2C42;


2C0D-2C41: procedura inicjuje wskazniki statusu przed pierwsza runda po zakonczeniu pojedynku dwoch graczy;
numer gracza, ktory zwyciezyl, jest w 00D1;
-kasuje ekranowy licznik punktow oraz ustawia sterowanie przez komputer zawodnika, ktory jest przeciwnikiem zawodnika o numerze w 00D1; wykorzystuje do tego dane z obszaru 2BE8-2BEB;
-cyfre tysiecy punktow (BCD na najmlodszych bitach) zawodnika o numerze w 00D1 pobrana z ekranowego licznika punktow zapisuje do 005D; wykorzystuje do tego dane z obszaru 2BEC-2BED;
-na podstawie liczby dziasiatek i setek tysiecy punktow zawodnika o numerze w 00D1 i tablicy 2BD0-2BE7 ustala numer rundy i zapisuje do 00D3 oraz do 6150 i 00F6;
-dalej wykonuje procedure 2C42;


2C42-2C8F: procedura inicjuje wskazniki statusu przed runda;
zeruje i wyswietla punkty zawodnikow (liczbowe i za cios), inicjuje timer czasu walki i faze 00D0 na podstawie numeru rundy i uczestnictwa graczy w walce; zeruje informacje o zadanym ciosie;
-jezeli 619D == #0, zeruje 6145-6148, 00D9, 00DA, 6195, 6196, 00D8;
-zeruje 617C, 6144, 6132, 00D2;
-wywoluje 2750 - nanosi na ekran zolte (swiecace) pola dla punktow za ciosy dla gracza w 00D2;
-zapisuje #1 do 00D2;
-wywoluje 2750 - nanosi na ekran zolte (swiecace) pola dla punktow za ciosy dla gracza w 00D2;
-zapisuje #$3C do 6167 (rownowaga punktow za cios dla pojedynku dwoch graczy;
-wywoluje 2F16 - rysuje bilans ciosow, gdy pojedynek dwoch graczy;
-jezeli przynajmniej jednym z zawodnikow steruje gracz
  -kasuje napis w dolnej linii ekranu w obu buforach areny;
  -skacze bezpowrotnie do 2CEF;
-jezeli oboma zawodnikami steruje komputer skacze bezpowrotnie do 2C90;


2C90-2CEE: procedura inicjuje wskazniki statusu przed runda gdy oboma zawodnikami steruje komputer;
zeruje numer rundy i punkty zawodnikow, faze 00D0 ustawia na #1, wyswietla odpowiedni napis w dolnej linii ekranu;
kazda runda jest runda pierwsza poniewaz kasowane sa punkty i numer rundy;
-zeruje numer rundy w 00D3 i 6150;
-zeruje ekranowe liczniki punktow obu zawodnikow 00F7-00F9 i 00FA-00FC;
-zwieksza 00F6 o 1; 00F6 to poziom umiejetnosci (0-5) zawodnika sterowanego przez komputer, zalezny od numeru rundy - patrz opis 2CEF;
-jezeli 00F6 >= #5, to:
  -jezeli 619D == #0, to wywoluje 270B - ladowanie nastepnego obrazka tla; ta zmiana obrazka nastepuje po dojsciu zawodnika sterowanego przez komputer do maksimum umiejetnosci;
  -zapisuje #1 do 00F6;
-kasuje napis w dolnej linii ekranu w obu buforach areny;
-na komorce 617F wykonuje EOR #1;
-jezeli 617F == #0, to wpisuje do dolnej linii ekranu w obu arenach napis "Game essence ..." i skacze bezpowrotnie do 2CEF;
-jezeli 617F == #1, to wpisuje do dolnej linii ekranu w obu arenach napis "International Karate ..." i wykonuje dalej 2CEF;


2CEF-2D86: procedura wykorzystywana przez 2C42 i 2C90;
procedura wyswietla punkty zawodnikow, inicjuje timer czasu walki i faze 00D0 na podstawie numeru rundy i uczestnictwa graczy w walce, ustawia kolor napisu w dolnej linii ekranu;
-zapisuje 2BEE[005C] do 617E (kolor napisu w dolnej linii ekranu);
-zapisuje #0 do 00DB;
-zapisuje #0 do 00D2;
-wywoluje 2732 - zwieksza i wyswietla licznik punktow zawodnika w 00D2 (liczba setek, o jak nalezy zwiekszyc liczbe punktow zawodnika, jest w 6132);
-zapisuje #0 do 00DB;
-zwieksza 00D2 o 1;
-wywoluje 2732 - zwieksza i wyswietla licznik punktow zawodnika w 00D2 (liczba setek, o jak nalezy zwiekszyc liczbe punktow zawodnika, jest w 6132);
-jezeli 00F6 < #5, to:
  -jezeli (00D3 AND #3) == #2, to zwieksza 00F6 o 1;
-jezeli 619D == #0, to:
  -zapisuje #$19 do 6141;
  -zapisuje #$30 do 00DC (timer czasu walki BCD);
  -zwieksza o 1 (BCD) numer rundy 00D3, w razie doliczenia do 99 licznik sie nie przekreca tylko pozostaje na 99;
  -zwieksza o 1 (HEX) numer rundy 6150 (0 - 8, modulo 9);
  -jezeli pojedynek dwoch graczy, to:
    -zapisuje #$60 do 00DC (timer czasu walki BCD);
    -zapisuje 2BF5[00D3] czyli numer fazy w zaleznosci od numeru rundy do 00D0 (pojedynek dwoch graczy moze miec najwyzej 7 rund, wiec indeks tabeli 2BF5 jest prawidlowy);
  -jezeli przynajmniej jednym zawodnikiem steruje komputer, to:
    -jezeli 6150 == #4, to zapisuje #4 do 00D0 - faza = lamanie desek;
    -jezeli 6150 > #8, to:
      -zapisuje #0 do 6150;
      -zapisuje #5 do 00D0 - faza = unikanie przelatujacej broni;
      -jezeli 00D3 >= #9, to:
        -jezeli 615F < #2, to zwieksza 615F o 1;
    -jezeli 6150 < #8 i 6150 <> #4, to:
      -zapisuje #1 do 00D0 - faza = normalna walka;
-wywoluje 2D89 - rozmieszcza zawodnikow przed walka i inicjuje wykonanie przez nich uklonu;
-zapisuje #$FF do 6151;


2D87-2D88: 30 68
tabela uzywana przez 2D89;


2D89-2DE0: procedura rozmieszcza zawodnikow przed walka i inicjuje wykonanie przez nich uklonu;
-zapisuje #1 (numer zawodnika) do 00D2;
-laduje 00D2 do Y;
-zeruje 00DD+Y, 6114, 6181+Y, 6183+Y, 00D8, 6131, 6130, 6193+Y, 6191+Y, 618D+Y;
-do 00E2+Y (orientacja zawodnika) zapisuje numer zawodnika;
-jezeli Y == #0, do 00E0+Y (przesuniecie zawodmnika) zapisuje 2D87+Y czyli #$30;
-jezeli Y == #1, do 00E0+Y (przesuniecie zawodmnika) zapisuje 2D87+Y czyli #$68 zwiekszone o wartosc losowa z zakresu 0-7;
-jezeli pojedynek dwoch graczy i 00DC (czas walki BCD) < #$60, zapisuje do X wartosc #0, w przeciwnym razie wartosc #$1C;
-zawartosc X umieszcza w A i w 00EC+Y (numer ruchu/sekwencji klatek (0-35) do wykonania przez zawodnika);
(ruch #$1C to sekwencja uklonu przed walka, #0 to postawa gotowosci i bezczynnosc);
-wywoluje 2783 - inicjuje wykonanie przez zawodnika sekwencji klatek ruchu o numerze podanym w 00EC+Y;
-zeruje 00EC+Y;
-zmniejsza 00D2 na #0 i powtarza cala procedure poczawszy od ladowania 00D2 do Y;


2DE1-2E68: rysuje klatke animacji wraz ze wskaznikami zdobytych punktow i aktualizacja licznikow;
rysuje dziadka, obu zawodnikow, aktualizuje liczniki o ilosc zdobytych punktow, wyswietla liczniki, na ekranie statusowym punkty za cios, na arenie zdobyte punkty, w dymku FULL POINT lub HALF POINT;
-wywoluje 2774 - kasuje aktywny bufor graficzny;
-wywoluje 3CAF - inicjuje zmienne wymagane do animacji zawodnikow;
-wywoluje 271A - nanosi obraz dziadka na jedna z aren (aktywny bufor);
-jezeli ktorymkolwiek z zawodnikow steruje komputer, to:
  -jezeli licznik 00DF >= #$82, to:
    -wyswietla pusty dymek (numer 7);
    -skacze bezpowrotnie do 2E69 - rysuje obu zawodnikow;
  -jezeli licznik 00DF < #$82, to:
    -wyswietla na arenie liczbe zdobytych punktow, numer obrazu liczby zdobytych punktow pobiera z 613F;
    -jezeli licznik 00DF >= #$32, to:
      -jezeli 00DB == #0, to:
        -zapisuje 00D4 (numer zawodnika zadajacego cios) do 00D2;
        -wywoluje 2732 - zwieksza i wyswietla licznik punktow zawodnika podanego w 00D2;
        -wywoluje 2750 - nanosi na ekran zolte (swiecace) pola dla punktow za ciosy dla zawodnika w 00D2;
      -jezeli 00D8 (wartosc ciosu) == #1, to:
        -wyswietla dymek numer 5 (HALF POINT);
      -jezeli 00D8 (wartosc ciosu) <> #1, to:
        -wyswietla dymek numer 6 (FULL POINT);
      -skacze bezpowrotnie do 2E69 - rysuje obu zawodnikow;
    -jezeli licznik 00DF < #$32, to:
      -wyswietla dymek numer 00D4 (numer zawodnika zadajacego cios) zwiekszony o 1, czyli WHITE lub RED;
      -skacze bezpowrotnie do 2E69 - rysuje obu zawodnikow;
-jezeli pojedynek dwoch graczy, to:
  -pobiera liczbe dziesiatek sekund z timera czasu walki 00DC i ta liczbe lub #1, jezeli liczba byla == #0, zapisuje do 614F (liczba setek bonusu w kodzie BCD) i 6132 (liczba setek, o jaka nalezy zwiekszyc licznik punktow gracza);
  -jezeli licznik 00DF >= #$64, to:
    -przygotowuje tresc dymka 10 (xx00 BONUS);
  -jezeli licznik 00DF < #$64, to:
    -przygotowuje tresc dymka numer 00D4 (numer zawodnika zadajacego cios) zwiekszony o 1, czyli WHITE lub RED;
  -jezeli 00DB == #0, to:
    -zapisuje 00D4 (numer zawodnika zadajacego cios) do 00D2;
    -wywoluje 2732 - zwieksza i wyswietla licznik punktow zawodnika podanego w 00D2;
  -wyswietla dymek;
  -wywoluje 2732 - zwieksza (nie zwieksza, jesli juz byla poprzednio wywolana) i wyswietla licznik punktow zawodnika podanego w 00D2;
  -skacze bezpowrotnie do 2E69 - rysuje obu zawodnikow;


2E69-2E90: rysuje obu zawodnikow; wymaga ustawienia wszystkich danych wejsciowych dla procedur rysujacych; numer zawodnika widocznego w calosci (wysunietego na wierzch) pobiera z 6114;
na koncu procedura wywoluje 31B4 (ustawienie pozycji i kolorow spriteow);


2E91-2EAB: rysuje dziadka i obu graczy; jesli 6181 == #$1C (czyli biezacy ruch zawodnika bialego, a wlasciwie obu, jest uklonem), wyswietla dymek z napisem BEGIN;
wymaga tych samych danych wejsciowych co 3CAF, czyli:
00DD: numer klatki animacji gracza bialego 0-55;
00DE: numer klatki animacji gracza czerwonego 0-55;
00E0: przesuniecie dla gracza bialego w prawo w pikselach;
00E1: przesuniecie dla gracza czerwonego w prawo w pikselach;
6119: MSB adresu areny, do ktorej zapisuje CPU;

-wywoluje 2774 - kasuje aktywny bufor graficzny;
-wywoluje 3CAF - inicjuje zmienne wymagane do animacji zawodnikow;
-wywoluje 271A - nanosi obraz dziadka na jedna z aren (aktywny bufor);
-jezeli 6181 <> #$1C (czyli biezacy ruch zawodnika bialego, a wlasciwie obu, nie jest uklonem), to skacze bezpowrotnie do 2E69 - rysuje obu graczy;
-przygotowuje tresc dymka nr #03(BEGIN) mowy dziadka w generatorach znakow obu aren przy pomocy 2717;
-wywoluje 2714 - nanosi dymek z mowa dziadka na obie areny;
-skacze bezpowrotnie do 2E69 - rysuje obu graczy;


2EAC-2EC2: rysuje dziadka i zawodnika o numerze w 00D1 w aktywnym buforze graficznym, wczesniej go kasujac;
wymaga tych samych danych wejsciowych co 3CAF, czyli:
00DD: numer klatki animacji gracza bialego 0-55;
00DE: numer klatki animacji gracza czerwonego 0-55;
00E0: przesuniecie dla gracza bialego w prawo w pikselach;
00E1: przesuniecie dla gracza czerwonego w prawo w pikselach;
6119: MSB adresu areny, do ktorej zapisuje CPU;

-wywoluje 2774 - kasuje aktywny bufor graficzny;
-wywoluje 3CAF - inicjuje zmienne wymagane do animacji zawodnikow;
-wywoluje 271A - nanosi obraz dziadka na jedna z aren (aktywny bufor);
-przepisuje 00D1 do 00D2 (numer gracza: 0-bialy, 1-czerwony);
-wywoluje 275C - umieszcza w buforze areny znaki tworzace forme gracza w 00D2;
-wywoluje 2738 - wypelnia znaki tworzace forme gracza (00D2) w buforze areny;
-wywoluje 2756 - przesuwa zawodnika w 00D2 z dokladnoscia do piksela (shifter);


2EC3-2EF4: rysuje dziadka i zawodnikow (jezeli faza = #3) lub zawodnika (jezeli faza = #6) w aktywnym do zapisu buforze graficznym i przelacza aktywne bufory (do zapisu przez CPU i odczytu przez ANTIC);
rysuje nastepna klatke animacji zawodnikow i sedziego;
wolana przez 2918 x3 (tylko gdy przynajmniej jednym z zawodnikow steruje komputer), 5DA4(5C8C x3, 5D8A);
wymaga tych samych danych wejsciowych co 3CAF, czyli:
00DD: numer klatki animacji gracza bialego 0-55;
00DE: numer klatki animacji gracza czerwonego 0-55;
00E0: przesuniecie dla gracza bialego w prawo w pikselach;
00E1: przesuniecie dla gracza czerwonego w prawo w pikselach;
6119: MSB adresu areny, do ktorej zapisuje CPU;

-wywoluje 2774(5ABC) - kasuje aktywny bufor graficzny;
-wywoluje 3CAF - inicjuje zmienne wymagane do animacji zawodnikow;
-wywoluje 271A - nanosi obraz dziadka na jedna z aren (aktywny bufor);
-jezeli faza 00D0 <> #6 to:
  -wywoluje 2E69 - rysuje obu graczy;
  -wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;
-jezeli faza 00D0 == #6 to:
  -wpisuje do 00D2 numer zawodnika sterowanego przez gracza z 6168;
  -wywoluje 275C - umieszcza w buforze areny znaki tworzace forme gracza w 00D2;
  -wywoluje 2738 - wypelnia znaki tworzace forme gracza (00D2) w buforze areny;
  -jezeli 6168 == #1, to:
    -wpisuje 6168 do 6114 (numer zawodnika widocznego w calosci)
    -wywoluje 2759 - naklada sprite'y na zawodnika o numerze w 00D2;
  -wywoluje 31B4 - ustawia polozenie i kolor spriteow dla zawodnika widocznego w calosci;
  -wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;


2EF5-2F0B: proc. animacyjna;
wykonuje sie dopoki timer 00D7 <> #0; rysuje dziadka, dymek i obu graczy;
wymaga tych samych danych wejsciowych co 3CAF, czyli:
00DD: numer klatki animacji gracza bialego 0-55;
00DE: numer klatki animacji gracza czerwonego 0-55;
00E0: przesuniecie dla gracza bialego w prawo w pikselach;
00E1: przesuniecie dla gracza czerwonego w prawo w pikselach;
6119: MSB adresu areny, do ktorej zapisuje CPU;

-wywoluje 2774 - kasuje aktywny bufor graficzny;
-wywoluje 3CAF - inicjuje zmienne wymagane do animacji zawodnikow;
-wywoluje 271A - nanosi obraz dziadka na jedna z aren (aktywny bufor);
-wywoluje 2714 - nanosi dymek z mowa dziadka na obie areny;
-wywoluje 2E69 - rysuje obu graczy;
-wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;
-jezeli 00D7 <> #0 to wykonuje wszystko od poczatku;
(00D7 to timer liczacy do zera, zmniejszany o 1 co ramke VBL);


2F0C-2F15: proc. animacyjna;
rysuje dziadka i zawodnika o numerze w 00D1;
-wywoluje 2EAC - rysuje dziadka i zawodnika o numerze w 00D1 w aktywnym buforze graficznym, wczesniej go kasujac;
-wywoluje 2753 - koryguje dane znakow kolizyjnych;
-wywoluje 3BF9 - dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;


2F16-2F2F: procedura rysuje bilans ciosow, gdy pojedynek dwoch graczy;
zapisuje znaki #$3A (bialy) lub #$BA (czerwony) w pozycjach #$36-#$41 (12 znakow) ekranu statusowego; numer pozycji (z wspomnianego zakresu) pierwszego znaku czerwonego jest pobierany z komorki 6167;


2F30-2F39: procedura 'Wait X VBL frames';
czeka (metoda 'busy waiting') az uplynie ilosc ramek VBL podana w rejestrze X;

