
51C0-51DB: glowna procedura petli animacyjnej obu zawodnikow; ustala numery klatek i przesuniecia - jezeli zawodnik jest sterowany przez gracza, to na podstawie stanu joysticka, w przeciwnym razie na podstawie procedury "myslenia zawodnika";
-wywoluje 51F9 - ustala numery ruchow dla obu zawodnikow na podstawie stanu joysticka;
-zapisuje 6115 do 00D2 (losowa wartosc z zakresu 0-1, numer aktywnego bufora graficznego);
-wywoluje 273B - wybiera ruch dla zawodnika w 00D2 (o ile jest on sterowany przez komputer) i inicjuje jego wykonanie;
-wywoluje 272C - koordynuje animacje zawodnika w 00D2;
-zapisuje (6115 EOR #1) do 00D2;
-wywoluje 273B - wybiera ruch dla zawodnika w 00D2 (o ile jest on sterowany przez komputer) i inicjuje jego wykonanie;
-wywoluje 272C - koordynuje animacje zawodnika w 00D2;


51DC-51ED: procedura petli animacyjnej obu zawodnikow nie wybierajacej ruchu dla zawodnika sterowanego przez komputer; ustala numery klatek i przesuniecia na podstawie stanu joysticka;
-wywoluje 51F9 - ustala numery ruchow dla obu zawodnikow na podstawie stanu joysticka;
-zapisuje #1 do 00D2;
-wywoluje 272C - koordynuje animacje zawodnika w 00D2;
-zapisuje #0 do 00D2;
-wywoluje 272C - koordynuje animacje zawodnika w 00D2;


51EE-51F8: procedura petli animacyjnej zawodnika w 00D1 (sterowanego przez gracza); ustala numer klatki i przesuniecie na podstawie stanu joysticka;
-wywoluje 51F9 - ustala numery ruchow dla obu zawodnikow na podstawie stanu joysticka;
-51F1:
-zapisuje 00D1 do 00D2;
-wywoluje 272C - koordynuje animacje zawodnika w 00D2;


51F1: procedura koordynuje animacje zawodnika w 00D1 - patrz wyzej;


51F9-5286: ustala numery ruchow dla obu zawodnikow (o ile dany zawodnik jest sterowany przez gracza) na podstawie stanu joysticka, orientacji zawodnika i kilku innych czynnikow (generalnie mozliwosci uzycia bloku) - patrz opis ponizej;
-zapisuje #0 do 00D2 i Y;
-jezeli 0050+Y <> #0 (czyli zawodnik Y sterowany przez gracza), to:
  -stan joysticka zawodnika Y zapisuje do 614C na najmlodszych 4 bitach;
  -stan joysticka zawodnika Y z-or'owany z odwroconym stanem przycisku joysticka zawodnika Y umieszczonym na bicie 4 (1 == wcisniety) zapisuje do 614D (32 mozliwe kombinacje);
  -jezeli 6185+Y == #0 (animacja zawodnika Y nie jest wstrzymana na klatce ciosu), to:
    -do Y zapisuje numer przeciwnika zawodnika Y;
    -jezeli 618F+Y <> #0 (dla biezacej klatki przeciwnika mozna uzyc bloku), to:
      -wywoluje 2711 (3F92) - wyznacza relacje polozen zawodnikow;
      -wartosc zwrocona w A (patrz opis komorki 6138) zapisuje do Y;
      -jezeli 5287+Y > #0 (zawodnicy zwroceni do siebie przodem), to:
        -jezeli 6136 (odleglosc miedzy zawodnikami w znakach wyliczona przez 3F92) < #8, to (mamy do czynienia z sytuacja w ktorej mozna uzyc bloku):
          -zapisuje 614D do X;
          -zapisuje 00D2 do Y;
          -jezeli orientacja zawodnika Y == #1 (przodem w lewo), to:
            -zapisuje 52EF+X do 00EC+Y;
          -jezeli orientacja zawodnika Y == #0 (przodem w prawo), to:
            -zapisuje 52CF+X do 00EC+Y;
        -w pozostalych przypadkach patrz nizej;
      -w pozostalych przypadkach patrz nizej;
    -w pozostalych przypadkach patrz nizej;
  -w pozostalych przypadkach:
    -zapisuje 614D do X;
    -zapisuje 00D2 do Y;
    -jezeli (00E2+Y (orientacja zawodnika Y) EOR 00E4+Y) == #1, to:
      -zapisuje 52AF+X do 00EC+Y;
    -jezeli (00E2+Y (orientacja zawodnika Y) EOR 00E4+Y) == #0, to:
      -zapisuje 528F+X do 00EC+Y;
00E4+Y sygnalizuje zmiane orientacji w trakcie ruchu - EOR'owanie orientacji wlasciwej 00E2+Y z 00E4+Y jest konieczne aby utrzymanie joysticka w jednym polozeniu nie zostalo potraktowane jako zmiana ruchu w momencie odwrocenia orientacji;
-zwieksza na #1 00D2 i Y;
-powtarza cala procedure poczawszy od drugiego punktu;


5287-530E: tablica wykorzystywana przez 51F9;

5287-528E: 00 01 00 00 00 00 01 00
528F-52AE: tablica przekladajaca stan joysticka na numer ruchu zawodnika (orientacja #0);
           00 00 00 00 00 04 02 03 00 06 08 07 00 05 01 00
           00 00 00 00 00 0C 0A 0B 00 0E 10 0F 00 0D 09 00
52AF-52CE: tablica przekladajaca stan joysticka na numer ruchu zawodnika (orientacja #1);
           00 00 00 00 00 06 08 07 00 04 02 03 00 05 01 00
           00 00 00 00 00 0E 10 0F 00 0C 0A 0B 00 0D 09 00
52CF-52EE: tablica przekladajaca stan joysticka na numer ruchu zawodnika w sytuacji, gdy mozna uzyc bloku (orientacja #0);
           00 00 00 00 00 04 02 03 00 06 14 14 00 05 01 00
           00 00 00 00 00 0C 0A 0B 00 06 14 14 00 0D 09 00
52EF-530E: tablica przekladajaca stan joysticka na numer ruchu zawodnika w sytuacji, gdy mozna uzyc bloku (orientacja #1);
           00 00 00 00 00 06 14 14 00 04 02 03 00 05 01 00
           00 00 00 00 00 06 14 14 00 0C 0A 0B 00 0D 09 00


530F-5383: procedura inicjuje wykonanie przez zawodnika Y sekwencji klatek ruchu o numerze podanym w 00EC+Y; jezeli podany ruch ma numer #0 (bezczynnosc), to losowo ale zaleznie od licznika 618B+Y inicjuje sekwencje przywolywania gracza do gry (okrzyki zawodnika i mruganie oczami);
dane wejsciowe:
Y: numer rozpatrywanego zawodnika;
-jezeli 00D8 (wartosc zadanego ciosu 0-2) <> #0 (czyli zadano cios), to:
  -laduje 00D4 (numer zawodnika zadajacego cios) do X;
  -laduje 6131 do A;
  -zapisuje A do 00EC+X;
  -wykonuje 535A;
-jezeli 00D8 (wartosc zadanego ciosu 0-2) == #0 (czyli nie zadano ciosu), to:
  -laduje 00EC+Y (numer ruchu do wykonania, #0 - bezczynnosc) do A;
  -jezeli A <> #0, wykonuje 535A;
  -laduje 00D2 do X
  -zwieksza o 1 komorke 618B+X (licznik klatek bezczynnosci / licznik opoznienia sekwencji przywolywania gracza do gry);
  -jezeli 618B+X < #$80, to:
    -porownuje 00D3 z #3 i skacze (bezwarunkowo) do 535D;
  -jezeli 618B+X >= #$80, to:
    -laduje D20A (RANDOM) do X;
    -jezeli X >= #$10, skacze do 535D;
    -laduje #$15 do A; (#$15 to numer sekwencji przywolywania gracza do gry);
    -zapisuje A do 6181+Y (numer wykonywanego ruchu/sekwencji klatek);
    -laduje A do X;
    -laduje D20A (RANDOM) do A;
    -ogranicza wartosc A do 6 bitow poprzez AND #$3F;
    -dodaje #$10 do A (bez kasowania bitu C);
    -zapisuje A do 618B+Y
    -laduje D20A (RANDOM) do A;
    -ogranicza wartosc A poprzez AND #$30;
    -zapisuje A do 6197+Y (numer podklatki (w sekwencji mimiki));
numer podklatki musi byc z przedzialu 0-64 (patrz opis 4D10), sekwencja mimiki ma 14 klatek, wiec poczatkowa klatka nie moze byc wyzsza niz 50 - zapewnia to powyzsze ograniczenie do 48 ($30);
    -skacze do 5361;
-5359: NOP;
-535A: zapisuje A do 618B+Y;
-535D: zapisuje A do 6181+Y (numer wykonywanego ruchu/sekwencji klatek);
-laduje A do X;
-5361: laduje 558D+X do A (offset poczatku sekwencji dla ruchu X);
-zapisuje A do 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow);
-zapisuje A do 00F0+Y (offset nastepnej klatki);
-zapisuje #1 do 6183+Y;
-zeruje 6187+Y;
-zeruje 6189+Y;
-zeruje 6185+Y;
-zeruje 00E4+Y;
-zeruje 6191+Y;
-zeruje 6193+Y;

5332: procedura inicjuje stan gotowosci/bezczynnosci zawodnika Y (ruch #0);
-laduje #0 do A i skacze do 535D;

5359: procedura inicjuje wykonanie przez zawodnika Y sekwencji klatek ruchu o numerze podanym w A - nie obsluguje sekwencji przywolywania gracza do gry - patrz wyzej;


5384-53BB: tablica rzeczywistych szerokosci 54 klatek zawodnika;
           17 16 14 14 00 0F 19 1A 14 19 11 22 14 12 22 12
           20 0F 1E 17 16 1B 1C 16 00 14 16 12 13 13 11 17
           23 14 00 00 13 12 1A 1D 14 1A 21 22 17 15 22 23
           14 14 19 19 19 19 00 00


53BC-54E4: procedura koordynuje animacje zawodnika;
ustala biezaca klatke i przesuniecie zawodnika oraz flagi klatki; 
-laduje 00D2 do Y;
-laduje 618D+Y do A;
-jezeli A <> #0, to konczy dzialanie;
-53C6:
-00E2+Y (orientacja) AND #1 zapisuje do 00E2+Y;
-0050+Y (zrodlo sterowania) AND #1 zapisuje do 0050+Y;
-jezeli 0050+Y <> #0 (zawodnik sterowany przez gracza), to:
  -jezeli 00EC+Y (numer ruchu do wykonania) <> 6181+Y (numer ruchu wykonywanego aktualnie), to zeruje 6183+Y;
  -jezeli 6183+Y == #0 oraz 6189+Y <> #0 (nalezy wykonac animacje wsteczna odwracajaca niedokonczony ruch), to zapisuje #1 do 6187+Y;
  -jezeli 6187+Y (porzadek animacji) <> #0 (wstecz), to skacze bezpowrotnie do 54E5 - animacja wstecz;
-zapisuje 00F0+Y (offset nastepnej klatki) do 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow);
-jezeli 6181+Y == #0 (bezczynnosc), to 5407:
  -5407:
  -wywoluje 530F - inicjuje ruch podany w 00EC+Y;
-laduje 6181+Y do X;
-laduje 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow) do A;
-jezeli A >= 558E+X (nastepna klatka bedzie spoza sekwencji czyli koniec ruchu/sekwencji), to 5407 - wraca do wywolania 530F - inicjuje ruch podany w 00EC+Y - jak widac, ta inicjacja nastepuje po dokonczeniu ruchu/sekwencji bedacego w trakcie wykonywania;
-laduje 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow) do X;
-laduje 55B1+X (numer klatki) do A;
-jezeli A < #$36 (=54 - liczba klatek animacji zawodnika), to:
  -zapisuje A do 00DD+Y (numer klatki zawodnika);
-jezeli A >= #$36, to:
  -zapisuje #0 do 00DD+Y (numer klatki zawodnika);
-zapisuje 6191+Y do 6193+Y; (flagi obecnej klatki zapisuje jako flagi poprzedniej klatki)
-zapisuje 5740+X do 6191+Y; (ustawia flagi obecnej klatki)
-zapisuje 5740+X AND #4 (bit 2) do 6189+Y;
-zapisuje 6191+Y AND #$40 (bit 6) do 618F+Y;
-jezeli 0050+Y <> #0 (zawodnik sterowany przez gracza), to:
  -jezeli (6191+Y AND #8 (bit 3)) == #1 (biezaca klatka jest ciosem, animacja zostanie wstrzymana do zmiany ruchu czyli zmiany polozenia joysticka), to:
    -jezeli 00EC+Y <> 6181+Y (zmiana ruchu), to (kontynuacja animacji):
      -jezeli 6185+Y == #0, to 547F;
      -jezeli 6185+Y <> #0, to:
        -zeruje 6185+Y;
        -zeruje 6187+Y;
        -zeruje 6189+Y;
        -laduje 00EE+Y do X;
        -zwieksza X o 1;
        -laduje X do A;
        -zapisuje A do 00F0+Y;
        -skacze do 53C6;
    -jezeli 00EC+Y == 6181+Y (brak zniany ruchu), to (animacja jest wstrzymana):
      -jezeli 6185+Y >= #$80, to konczy dzialanie;
      -jezeli 6185+Y == #0, to wywoluje 5509 (przy pierwszym wejsciu w klatke ustala przesuniecie zawodnika);
      -laduje 00D2 do X;
      -zwieksza o 1 komorke 6185+X (konieczne by odroznic kolejne wejscia w zatrzymana klatke od pierwszego - odliczanie tylko do #$80, aby nie doszlo ponownie do #0 - w tym miejscu wazne tylko czy == #0 czy <> #0); 
      -konczy dzialanie;
  -jezeli (6191+Y AND #8 (bit 3)) == #0, to 547F:
    -547F:
    -jezeli 6191+Y AND #$10 (bit 4) == #0, to 54B0 - animacja nie bedzie przerwana - w przeciwnym razie na biezacej klatce animacja moze zostac przerwana na rzecz animacji nowego ruchu;
    -jezeli 6183+Y <> #0 (biezacy ruch nie stracil waznosci), to 54B0 - animacja nie bedzie przerwana;
    -jezeli 6181+Y == #3 (krok w przod), to 5407 - wraca do wywolania 530F - inicjuje nowy ruch;
    -jezeli 6181+Y <> #7, to:
      -jezeli 00EC+Y == #0, to 54B0 - przerwanie ruchu przez gracza nie przerywa animacji;
      -jezeli 00EC+Y <> #0, to 5407 - wraca do wywolania 530F - inicjuje nowy ruch;
    -jezeli 6181+Y == #7 (krok w tyl), to (cofa zawodnika o 3 piksele i inicjuje nowy ruch):
      -laduje #3 do A;
      -laduje 00E2+Y do X;
      -jezeli X == #0, laduje #$FD (-3) do A;
      -dodaje 00E0+Y (przesuniecie zawodnika) do A;
      -zapisuje A do 00E0+Y (przesuniecie zawodnika);
      -skacze do 5407 - wraca do wywolania 530F - inicjuje nowy ruch;
-jezeli 0050+Y == #0 (zawodnik sterowany przez komputer), to 54B0:
  -54B0:
  -jezeli 6191+Y AND #2 (bit 1) == #1, to:
    -00E2+Y EOR #1 zapisuje do 00E2+Y (orientacja zawodnika);
    -zapisuje #1 do 00E4+Y;
  -jezeli 6191+Y AND #1 (bit 0) == #1, to:
    -zapisuje Y do 6114 (numer zawodnika widocznego w calosci);
  -jezeli 6191+Y AND #$20 (bit 5) == #1, to:
    -zapisuje #1 do 618D+Y (blokada dalszej animacji);
  -wywoluje 5509;
  -laduje 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow) do X;
  -zwieksza X o 1;
  -laduje X do A;
  -zapisuje A do 00F0+Y (offset nastepnej klatki);


54E5-5508: procedura animujaca wstecz;
integralna czesc procedury 53BC;
-laduje 00EE+Y do X (offset klatki w tabeli sekwencji klatek ruchow);
-zmniejsza X o 1;
-laduje X do A;
-zapisuje A do 00EE+Y (offset klatki w tabeli sekwencji klatek ruchow);
-laduje 6181+Y do X (numer ruchu wykonywanego aktualnie);
-jezeli A < 558D+X (zakonczona sekwencja klatek ruchu), to skacze do 5407 - patrz procedura 53BC (inicjuje kolejny ruch);
-laduje 00EE+Y do X;
-zapisuje 55B1+X do 00DD+Y (numer klatki zawodnika);
-do A laduje (6187+Y EOR 00E2+Y) - 00E2+Y to orientacja zawodnika, 6187+Y to porzadek animacji (#1 == wstecz);
-wywoluje 550E;


5509-558C: oblicza przesuniecie dla klatki zawodnika na podstawie 00EE+Y;
po obliczeniu polozenia koryguje je tak, aby zawodnik nie wystawal poza arene;
wynikowe polozenie zawodnika umieszcza w 00E0+Y;
dane wejsciowe:
Y: numer zawodnika;
-laduje 00EE+Y (indeks tabel 55B1, 5679, 5740) do X;
-laduje 00E2+Y (orientacja) do A;
-550E:
-jezeli A (orientacja) <> #0 (przodem w lewo), to:
  -laduje 00E0+Y (przesuniecie zawodnika) do A;
  -odejmuje 5679+X (przesuniecie wzgledne) od A;
  -zapisuje A do 00E0+Y (przesuniecie zawodnika);
  -laduje 00DD+Y (numer klatki) do X;
  -dodaje #$24 (36 - szerokosc zawodnika - 9 znakow) do A;
  -zapisuje A do 005E (polozenie prawego skraju zawodnika);
  -odejmuje 5384+X (rzeczywista szerokosc klatki zawodnika) od A;
  -zapisuje A do 005D (polozenie lewego skraju zawodnika);
-jezeli A (orientacja) == #0 (przodem w prawo), to:
  -laduje 00E0+Y (przesuniecie zawodnika) do A;
  -dodaje 5679+X (przesuniecie wzgledne) do A;
  -zapisuje A do 00E0+Y (przesuniecie zawodnika);
  -zapisuje A do 005D (polozenie lewego skraju zawodnika);
  -laduje 00DD+Y (numer klatki) do X;
  -dodaje 5384+X (rzeczywista szerokosc klatki zawodnika) do A;
  -zapisuje A do 005E (polozenie prawego skraju zawodnika);
-dalej nastepuje korekta polozenia tak, aby zawodnik nie wystawal poza arene;
-jezeli 005D <= #$10, to:
  -jezeli 00E2+Y (orientacja) == #0 (przodem w prawo), to:
    -laduje #$10 do A;
    -zapisuje A do 00E0+Y;
    -skacze do 5580;
  -jezeli 00E2+Y (orientacja) == #1 (przodem w lewo), to:
    -laduje #$12 do A;
    -dodaje 5384+X do A;
    -odejmuje #$24 (36) od A;
    -jezeli A < #0, to laduje #0 do A;
    -zapisuje A do 00E0+Y;
    -skacze do 5580;
-jezeli 005D > #$10, to:
  -jezeli 005E > #$AE, to:
    -jezeli 00E2+Y == #0 (przodem w prawo), to:
      -laduje #$AE do A;
      -odejmuje 5384+X od A;
      -zapisuje A do 00E0+Y;
    -jezeli 00E2+Y <> #0 (przodem w lewo), to:
      -laduje #$8A do A;
      -zapisuje A do 00E0+Y;
-5580:
-laduje 00E0+Y do A;
-jezeli A >= #$F0;
  -zeruje 00E0+Y;


558D-5806: tablica okreslajaca reguly animacji zawodnika;

558D-55B0: offsety poczatkow sekwencji dla poszczegolnych 36 ruchow;
(indeksy do tabel 55B1, 5679, 5740);
           00 02 08 0C 11 17 1B 1F 24 29 30 38 3E 42 47 4C
           54 5C 64 6C 74 78 88 89 8A 8B 8E 92 96 A4 A5 A7
           AF BB C0 C7
55B1-5678: numery klatek;
           00 00 1E 17 17 17 1E 00 0F 14 0F 00 01 02 03 0C
           00 0D 06 10 06 0D 00 21 20 21 00 11 12 11 00 0C
           03 02 01 00 1F 0F 14 0F 00 1E 17 16 16 17 1E 00
           1E 19 1A 1B 1C 1D 1E 00 0D 07 0E 07 0D 00 0D 15
           0D 00 1F 11 12 11 00 1F 0D 15 0D 00 08 05 09 0A
           0B 07 0D 00 1E 1D 1C 1B 1A 19 1E 00 2C 2D 2E 2F
           2F 2F 2F 2F 28 29 2A 2B 2B 2B 2B 2B 24 24 25 26
           27 27 27 27 13 13 13 13 32 33 33 33 33 33 33 33
           33 33 33 33 33 33 33 32 00 00 00 1F 1F 00 01 02
           03 0C 0C 03 02 01 30 30 30 30 30 31 31 31 31 31
           30 30 30 30 01 0C 00 28 29 2A 2B 2B 2B 2B 2B 00
           22 22 23 18 23 18 23 00 00 00 00 17 17 17 1E 00
           19 1A 1B 1C 1D 1E 00 00
5679-573F: przesuniecia wzgledne;
           00 00 00 02 01 00 00 00 03 03 02 FA 04 05 04 03
           00 00 FA 00 00 06 00 02 FB 02 FE 04 00 FC 00 00
           FD FC FB FC 00 11 03 00 FD 00 05 05 04 03 02 02
           05 06 07 08 07 07 07 00 00 FA FF 04 00 00 00 00
           00 00 00 19 00 00 FC 00 05 00 00 00 04 FF FF 08
           F5 FF 02 00 FB FA F9 F8 F9 F9 F9 00 04 04 02 02
           00 00 00 00 FA F8 FC FA 00 00 00 00 FD FE FC FB
           FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 0E 00 04 05
           04 03 00 FD FC FB 00 00 00 00 00 01 00 00 00 00
           FF 00 00 00 03 00 FD FA FA 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 FD 00 00 00
           06 07 08 07 07 07 00
5740-5806: flagi;
bit 0 - wysuniecie zawodnika na "wierzch";
bit 1 - zmiana orientacji;
bit 2 - w razie zmiany/przerwania ruchu przez gracza zostanie wykonana animacja wsteczna odwracajaca niedokonczony ruch;
bit 3 - na tej klatce animacja zatrzymuje sie, dopoki gracz nie zmieni/przerwie ruchu - flaga ustawiona na kulminacyjnych klatkach wszystkich ciosow (z wyjatkiem wyskoku) - dopoki gracz trzyma joystick w niezmienionej pozycji, zawodnik zastyga w bezruchu z wyciagnieta do ciosu reka lub noga;
bit 4 - na tej klatce animacja zostanie przerwana w razie zmiany ruchu przez gracza i zostanie natychmiast rozpoczeta animacja nowego ruchu - flaga ustawiona generalnie na klatkach z postawa gotowosci oraz na sekwencjach kroku w przod, w tyl i na sekwencji przywolywania gracza do gry;
bit 5 - na tej klatce konczy sie cala sekwencja ruchow i dalsza animacja zawodnika jest blokowana (np. po upadku);
bit 6 - tej klatce towarzyszy odglos / ta klatka moze byc zablokowana przez przeciwnika blokiem;
           10 10 04 00 00 00 00 00 45 09 00 10 00 10 10 10
           10 44 40 08 00 00 10 45 08 00 10 45 08 00 10 10
           10 10 10 10 41 43 08 00 10 45 40 40 00 00 00 10
           00 00 01 01 00 00 10 10 45 41 08 00 00 10 45 08
           00 10 41 42 08 00 10 41 42 08 00 10 00 40 40 40
           08 00 00 10 00 00 01 01 00 00 10 10 00 00 00 00
           00 00 00 20 00 00 00 00 00 00 00 20 00 00 00 00
           00 00 00 20 01 00 00 10 10 10 10 10 10 10 10 10
           10 10 10 10 10 10 10 10 10 10 10 00 02 00 10 10
           10 10 10 10 10 10 00 00 00 00 00 00 00 00 00 00
           00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00
           00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 10
           00 01 01 00 00 10 10

55B1-5678: sekwencje klatek; najpierw indeks, potem offset sekwencji, potem sekwencja;
           00  00:  00 00 (postawa gotowosci, bezczynnosc)
           01  02:  1E 17 17 17 1E 00
           02  08:  0F 14 0F 00
           03  0C:  01 02 03 0C 00
           04  11:  0D 06 10 06 0D 00
           05  17:  21 20 21 00
           06  1B:  11 12 11 00
           07  1F:  0C 03 02 01 00 
           08  24:  1F 0F 14 0F 00
           09  29:  1E 17 16 16 17 1E 00
           0A  30:  1E 19 1A 1B 1C 1D 1E 00
           0B  38:  0D 07 0E 07 0D 00
           0C  3E:  0D 15 0D 00 
           0D  42:  1F 11 12 11 00
           0E  47:  1F 0D 15 0D 00
           0F  4C:  08 05 09 0A 0B 07 0D 00
           10  54:  1E 1D 1C 1B 1A 19 1E 00
           11  5C:  2C 2D 2E 2F 2F 2F 2F 2F (2F - lezy, gwiazdki)
           12  64:  28 29 2A 2B 2B 2B 2B 2B (2B - lezy, gwiazdki)
           13  6C:  24 24 25 26 27 27 27 27 
           14  74:  13 13 13 13
           15  78:  32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 (twarz obraca w strone gracza - na klatke 33 nakladana jest mimika, sekwencja mimiki (33) ma 14 klatek;
           16  88:  00
           17  89:  00
           18  8A:  00
           19  8B:  1F 1F 00
           1A  8E:  01 02 03 0C
           1B  92:  0C 03 02 01
           1C  96:  30 30 30 30 30 31 31 31 31 31 30 30 30 30 (prosto, uklon, prosto)
           1D  A4:  01
           1E  A5:  0C 00
           1F  A7:  28 29 2A 2B 2B 2B 2B 2B (2B - lezy, gwiazdki)
           20  AF:  00 22 22 23 18 23 18 23 00 00 00 00
           21  BB:  17 17 17 1E 00
           22  C0:  19 1A 1B 1C 1D 1E 00
           23  C7:  00

ruchy zawodnika:
00: postawa gotowosci, bezczynnosc;
01: podskok w gore;
02: uderzenie piescia w twarz;
03: krok w przod;
04: kopniecie w twarz;
05: podciecie;
06: uderzenie piescia w brzuch;
07: krok w tyl;
08: obrot w tyl i uderzenie piescia w twarz;
09: wyskok;
0A: salto w przod (nie jest przerywane pomimo braku podtrzymania joystickiem);
0B: kopniecie w brzuch;
0C: kopniecie w kolano;
0D: obrot w tyl i uderzenie piescia w brzuch (nie jest przerywane);
0E: obrot w tyl i kopniecie w kolano (nie jest przerywane);
0F: obrot o 360 stopni i kopniecie w twarz (nie jest przerywane);
10: salto w tyl (nie jest przerywane);
11: upadek na brzuch (nie jest przerywane);
12: upadek na plecy - wiekszy odrzut w tyl od #$1F (nie jest przerywane);
13: upadek na tylek po ciosie w brzuch (nie jest przerywane);
14: blok reka (nie jest przerywane);
15: przywolywanie gracza do gry (nie jest przerywane);
16: postawa gotowosci, bezczynnosc;
17: postawa gotowosci, bezczynnosc;
18: postawa gotowosci, bezczynnosc;
19: obrot w tyl (nie jest przerywane);
1A: krok w przod (nie jest przerywane);
1B: krok w tyl (nie jest przerywane);
1C: uklon (nie jest przerywane);
1D: fragment kroku;
1E: fragment kroku;
1F: upadek na plecy (nie jest przerywane);
20: chuchniecie w piesc i otrzepanie reki (nie jest przerywane);
21: podskok w gore z lekkim cofnieciem (nie jest przerywane);
22: salto w przod (nie jest przerywane);
23: postawa gotowosci, bezczynnosc;


5807-586E: procedura animujaca przelatujaca bron w rundzie unikania przelatujacej broni; wywolywana przez procedure obslugi przerwania VBL (3901);
wywoluje 58EF;
wywoluje 595A lub 59E0 lub 5A37 w zaleznosci od rodzaju broni w 615C;


586F-5884:
kasuje bufor PMG dla przelatujacej broni; kasuje tylko bufor 1 i tylko graczy (0400-07FF); w poszczegolnych buforach graczy kasuje tylko obszar 0xA8-0xEF czyli widoczny w dolnej czesci ekranu, tam gdzie potem rysowana jest przelatujaca bron;


5885-58A0: tablica kierunkow przelatywania broni (0-1, 0 w prawo, 1 w lewo) dla 28 prob (wykorzystywane 20); tablica wykorzystywana przy inicjacji proby dla zawodnika;

58A1-58AC: tablica rodzajow broni 0-2; 3 sekcje po 4 bajty; sekcje indeksowane przez 615F - poziom trudnosci proby; wewnatrz sekcji bajty indeksowane losowo na podstawie wartosci z RANDOM; tablica sluzy do wylosowania rodzaju broni przy inicjacji proby dla zawodnika;

58AD-58B8: tablica predkosci broni 1-3; 3 sekcje po 4 bajty; sekcje indeksowane przez 615F - poziom trudnosci proby; wewnatrz sekcji bajty indeksowane losowo na podstawie wartosci z RANDOM; tablica sluzy do wylosowania predkosci broni przy inicjacji proby dla zawodnika;

58B9-58D0: tablica pionowych pozycji broni; 3 sekcje po 8 bajtow; sekcje indeksowane przez 615C - rodzaj broni; wewnatrz sekcji bajty indeksowane losowo na podstawie wartosci z RANDOM; tablica sluzy do wylosowania pionowej pozycji broni przy inicjacji proby dla zawodnika;

58D1-58EB: tablica kolorow i szerokosci PMG; 3 sekcje po 9 bajtow; sekcje indeksowane przez 615C - rodzaj broni; offset konca sekcji pobierany z tabeli 58EC indeksowanej przez 615C; tablica wykorzystywana przy inicjacji proby dla zawodnika;

58EC-58EE: tablica offsetow koncow sekcji w tabeli 58D1;


58EF-5959:
inicjuje animacje przelatujacej broni; wolana przez 5807 przed kazda proba;
wywoluje 586F - kasowanie bufora PMG;
na podstawie 615F (poziom trudnosci), tabeli 58A1 i RANDOM losuje rodzaj broni i wpisuje ja do 615C;
na podstawie 615F (poziom trudnosci), tabeli 58AD i RANDOM losuje predkosc broni i wpisuje ja do 615A;
na podstawie 6161 (numer proby 0-19) i tabeli 5885 wyznacza kierunek przelatywania broni oraz jej poczatkowa pozycje pozioma i wpisuje odpowiednio do 615B i 6159; kierunek EORuje z numerem aktualnego zawodnika w 00D1 co powoduje odwrotne kierunki dla zawodnika czerwonego;
na podstawie wylosowanej wczesniej wartosci w 615C (rodzaj broni), tabeli 58B9 i RANDOM losuje pionowa pozycje broni i wpisuje ja do 6156;
kasuje (ustawia na 0) pozycje PMG w komorkach 00AB-00B2 (dla graczy i pociskow);
na podstawie 615C (rodzaj broni), tabeli 58EC oraz 58D1 ustawia kolory i szerokosci PMG w komorkach 00B3-00BB;
wpisuje 1 do 615E (cykl animacji broni trwa);


595A-599A:
animuje obracajaca sie bron; indeks klatki obracajacej sie broni z 6153; wysokosc 11 linii obrazu;
wywoluje 5A91 - aktualizuje pozycje PMG;
aktualizuje dane graficzne PMG P0-P1 obracajacej sie broni (wysokosc 11 linii ekranu) na podstawie indeksu klatki 6153;
uzywa tabel 599B, 599E i 59BF;


599B-599D: tablica offsetow w tablicach 599E i 59BF dla klatek animacji obracajacej sie broni 0 - 2 z 6153;
599E-59BE: tablica danych graficznych obracajacej sie broni dla P0; 3 x 11 bajtow
59BF-59DF: tablica danych graficznych obracajacej sie broni dla P1; 3 x 11 bajtow


59E0-5A1A:
animuje przelatujaca kopie;
wywoluje 5A91 - aktualizuje pozycje PMG;
aktualizuje dane graficzne PMG P0-P1 (wysokosc 7 linii ekranu) oraz P2 (1 linia) i P3 (2 linie);
uzywa tabel 5A1B i 5A29 odpowiednio dla P0 i P1;


5A1B-5A28: tablica danych graficznych kopii dla P0; 2 x 7 bajtow (w prawo i w lewo);
5A29-5A36: tablica danych graficznych kopii dla P1; 2 x 7 bajtow (w prawo i w lewo);


5A37-5A6C:
animuje przelatujacy noz;
laduje z 5A3D do X offset w tabeli offsetow pozycji PMG;
wywoluje 5A91 - aktualizuje pozycje PMG;
laduje z 5A42 do X offset rodzaju broni (skok X co 6);
aktualizuje dane graficzne PMG P0-P2 przelatujacego noza (wysokosc 6 linii ekranu) na podstawie offsetu w 5A42 (skok co 6) oraz pozycji pionowej 6156;
uzywa danych graficznych z tabeli 5A6D;


5A6D-5A90: tablica danych graficznych dla przelatujacego noza;


5A91-5AA3:
aktualizuje pozycje PMG P0-P3 (tylko graczy) dla przelatujacej broni (00AB-00AE) na podstawie 6159; wolana przez 5807 (raz na ramke);
uzywa offsetow z tabeli 5AA4;


5AA4-5ABB: tablica offsetow pozycji PMG skladajacych sie na dany rodzaj broni;


5ABC-5B4E: kasuje aktywny bufor graficzny (bufor areny i generator sprite'ow w obszarze pokrywajacym arene, nie kasuje generatorow znakow);
aktywny bufor graficzny (do zapisu przez CPU) ustalany jest na podstawie wartosci w 6118: $10 = bufor 1, $14 = bufor 2;
jezeli 00D0 = #6 to tylko pierwsze 6 znakow kazdej linii areny jest kasowanych;
jezeli 00D0 = #5 i buforem aktywnym jest bufor o nizszych adresach, to nie jest kasowany generator sprite'ow; wydaje sie to bledne;

5B4F-5B5B: tablica kodow znakow do wypalnienia obrzezy areny; jest to wlasciwie jeden znak o kodzie #$40;

5B5C-5BA3: zapewnia czarne obrzeza areny;
wypelnia tresc znaku o kodzie #$40 w generatorach znakow obu aren kolorem 1 (czarny) i wypelnia tym znakiem obrzeza areny, ktora jest aktualnie wyswietlana (o adresie w 611E);

5BA4-5BB1: dane wykorzystywane przez 5BB2;

5BB2-5C8B: procedura wypelnia znakami ekran statusowy przed walka;
dane wejsciowe:
  - 0050 - #00/#01 - zawodnik bialy sterowany przez komputer/gracza
  - 0051 - #00/#01 - zawodnik czerwony sterowany przez komputer/gracza
  - 00D0 - faza
  - 00D3 - numer rundy
  - 00DC - licznik czasu walki w BCD;
  - 6199 - ilosc rund wygranych przez zawodnika bialego (gra 2 zaw.)
  - 619A - ilosc rund wygranych przez zawodnika czerwonego (gra 2 zaw.)
licznik czasu jest umieszczony w komorkach 61D3 i 61D4;
licznik czasu nie jest wyswietlany w fazach #4 i #5;
procedura nie wyswietla bilansu ciosow (gra 2 zaw.) oraz ilosci zdobytych punktow;

5C71-5C8B: procedura wyswietla pozostaly czas walki na ekranie statusowym; jest czescia procedury 5BB2;


5C8C-5D5F: procedura wywolywana przez petle glowna gdy 00D0 = #06;
wyswietla tablice punktacji;
zajmuje tez obszar 5D8A-5DA3;
w przypadku zwyciestwa komputera nad rzeczywistym graczem wypisuje 'MATCH OVER' a potem przechodzi do edycji wpisu w tabele wynikow;

-ustawia numer zawodnika widocznego w calosci 6114 na #01;
-jezeli oboma zawodnikami steruje komputer, skacze bezpowrotnie do 5D8A;
-przygotowuje i nanosi na obie areny dymek 7 - jest to pusty dymek;
-czeka 20 ramek VBL;
-przygotowuje dymek 14 - MATCH OVER, nanoszenie dymka na areny nie jest juz potrzebne ze wzgledu na uprzednie naniesienie pustego dymka;
-czeka 100 ramek VBL - 2 sekundy;
-kasuje pierwsze 6 z 7 bajtow bloku 622E tabeli wynikow;
-do ostatniego bajtu bloku 622E wpisuje #1 - flaga umozliwiajaca odnalezienie wiersza po sortowaniu tabeli;
-w zaleznosci od numeru zawodnika, ktorym kierowal gracz, pobranego z 6168 kopiuje punkty zdobyte w czasie walki do niewidocznego ostatniego (siodmego) wiersza tabeli wynikow; punkty pobierane sa z 00F7 (lub 00FA) - setki i dziesiatki tysiecy, oraz z 00F8 (lub 00FB) - tysiace i setki;
-do ostatniego niewidocznego wiersza tabeli wynikow kopiuje numer pasa z 616A;
-porownuje przy pomocy 60D3 ilosci punktow w ostatnim niewidocznym i przedostatnim wierszu tabeli wynikow;
-jezeli ilosc punktow w ostatnim wierszu jest mniejsza, to skacze do 5D3F;
-sortuje tabele przy pomocy 60B1;
-okresla indeks wstawionego wiersza po przesortowaniu tabeli (przy pomocy flagi w bloku 622E) i wpisuje go do 6169;
-ustawia orientacje, przesuniecie i pozycje stajaca (klatka #$30) zawodnika, ktorym kierowal gracz; zawodnik zawsze stoi po lewej stronie tabeli przodem do niej;
-wywoluje 5D62 - kasuje oba bufory graficzne areny (defincje znakow i spriteow);
-wywoluje 5DA4 - rysuje dziadka i zawodnika w aktywnym buforze oraz tabele wynikow w obu buforach;
-wywoluje 5DE0 - edycja 3-literowego wpisu w tabele wynikow;
-ustawia pozycje w uklonie (klatka #$31) zawodnika, ktorym kierowal gracz;
-wywoluje 5DA4;
-czeka 40 ramek VBL;
-ustawia pozycje stojaca (klatka #$30) zawodnika, ktorym kierowal gracz;
-wywoluje 5DA4;
5D30:
-wpisuje #0 do licznika 6171 i oczekuje, az licznik osiagnie #2 (czas oczekiwania moze wiec wynosic od 5 do 10 sekund);
-wywoluje 5D62 - kasuje oba bufory graficzne areny (defincje znakow i spriteow);
5D3F:
-kasuje w obu buforach graficznych areny definicje 32 znakow (cyfr i liter), ktore zostaly wczesniej skopiowane z generatora znakow ekranu statusowego na potrzeby wyswietlenia tabeli wynikow przez 5DBC;
-kopiuje dane wygladu dziadka do generatorow znakow obu aren przy pomocy 271D;
-ustawia licznik ramek dla opozniania animacji zawodnikow 6121 na #$0A;
-ustawia sterowanie obu zawodnikow przez komputer (tryb demo);
-ustawia wylaczone odglosy walki;
-ustawia wlaczona muzyke;


5D60-5D61: 14 88
tablica pozycji poziomych dla zawodnikow, gdy stoja obok tablicy wynikow;

5D62-5D89: procedura kasuje oba bufory graficzne areny;
uzywa do tego celu procedury 5ABC kasujacej aktywny bufor graficzny (bufor areny i generator sprite'ow w obszarze pokrywajacym arene, nie kasuje generatorow znakow); zapamietuje na stosie adres generatora znakow bufora aktywnego do zapisu 6118 oraz faze 00D0 i ustawia faze #1 oraz po kolei jeden i drugi generator znakow i dla kazdego z nich wywoluje 5ABC; na koniec przywraca ze stosu wartosci 00D0 i 6118;
na koniec wpisuje #$0A do 6121 (licznik ramek dla opozniania animacji zawodnikow);


5D8A-5DA3: jest czescia procedury 5C8C;
-dokonuje przypisan:
00E2 <= #$00  (orientacja zawodnika bialego (0-normalna, 1-odwrocona))
00E3 <= #$01  (orientacja zawodnika czerwonego (0-normalna, 1-odwrocona))
00DD <= #$30  (numer klatki animacji zawodnika bialego - pozycja stajaca)
00DE <= #$30  (numer klatki animacji zawodnika czerwonego - pozycja stajaca)
00E0 <= 5D60 (przesuniecie dla zawodnika bialego w prawo (w pikselach))
00E1 <= 5D61 (przesuniecie dla zawodnika czerwonego w prawo (w pikselach))
-wywoluje 5DA4 - rysuje dziadka i zawodnika w aktywnym buforze oraz tabele wynikow w obu buforach;
-skacze bezpowrotnie do 5D30;

5DA4-5DBB: rysuje dziadka i zawodnika w aktywnym buforze oraz tabele wynikow w obu buforach;
-wywoluje 2744 - rysuje dziadka i zawodnika o numerze z 6168 w aktywnym do zapisu buforze graficznym i przelacza aktywne bufory;
-zapisuje 6121 <= #0A;
6121 to licznik ramek dla opozniania animacji zawodnikow;
-jezeli 611E <> #$08 to powrot na poczatek 5DA4;
611E to MSB adresu areny, z ktorej czyta Antic;
-wywoluje 5DBC (kopiuje definicje znakow (prawdopodobnie litery i cyfry) z generatora znakow ekranu statusowego do generatorow znakow obu aren);
-laduje A <= #$00;
-wywoluje 5FF9 (wpisuje do obu aren tablice wynikow) - procedura nie wykorzystuje wartosci podanej w A i zamazuje ja;

5DBC-5DD3: procedura kopiuje definicje znakow z generatora znakow ekranu statusowego do generatorow znakow obu aren;
kopiuje definicje pierwszych 38 znakow generatora statusowego do generatorow arenowych poczawszy od znaku numer 25;

5DD4-5DDF: tabela adresow miejsc na 3-literowy wpis w 6-ciu widocznych wierszach tabeli wynikow (w buforze areny 0800);

5DE0-5EBB: procedura edycji 3-literowego wpisu w tabele wynikow;
joystick - prawo, lewo - zmiana kodu bierzacego znaku, przycisk - akceptacja znaku i przejscie do nastepnego;
uzywa komorek 6168-6171 - patrz opis tych komorek; uzywa 5EBC;
3-literowy wpis jest na koniec przenoszony do tabeli wynikow do wstawionego wiersza (ktorego indeks jest w 6169); 

5EBC-5ED5: procedura odczytuje stan joysticka zawodnika o numerze podanym w 6168; stan przycisku zapisuje do 616D, a stan drazka (zawsze na najmlodszych bitach) do 616F; uzywana tylko przez 5DE0;

5ED6-5EF6: procedura wypisuje nazwe pasa w wierszu tabeli wynikow;
numer pasa 0-5 pobiera z A; jezeli A < 0, wypisuje szesc kresek; offsety tekstow dla poszczegolnych pasow wzgledem adresu 5EFF pobiera z tabeli 5EF7;

5EF7-5EFE: tablica offsetow tekstow dla poszczegolnych pasow wzgledem adresu 5EFF, indeksy 6 i 7 wskazuja na kreski wyswietlane przy braku pasa (wpisu w tabele wynikow);
5EFF-5F46: tablica tekstow dla poszczegolnych pasow (kazdy ma dlugosc 12 bajtow);
5F47-5F52: wypelnione bajtem #$5B;
5F53-5F58: tablica offsetow tekstow dla poszczegolnych pasow wzgledem adresu 5EFF;
5F59-5F5E: tablica liczby tysiecy punktow dla poszczegolnych kolorow pasow wymaganych do zmiany na wyzszy pas;
5F5F: #$32;
5F60-5F65: tablica kodow kolorow pasow;

5F66-5FC7: procedura wypisuje kolor pasa na ekranie statusowym;
numer pasa 0 (bialy) - 5 (czarny) umieszcza w komorce 616A;
kolor liter umieszcza w komorce 6180 (w przypadku czarnego jego wartosc zmienia sie ale jasnosc pozostaje #0A); z komorki 6180 wartosc koloru pobiera Display List; procedura nie wypisuje koloru pasa, jezeli trwa pojedynek dwoch graczy; procedura korzysta z danych z obszaru 5EFF-5F65;

5FC8-5FE4: tabela zawierajaca tekst naglowka tabeli wynikow;

5FE5-5FF8: wpisuje do obu aren tekst naglowka tabeli wynikow;
kopiuje 28 znakow do obu aren; znaki pobiera z tablicy 5FC8 i od kazdego odejmuje wartosc #$1D;

5FF9-6012: procedura wpisuje do obu aren tablice wynikow;
-wywoluje 5FE5 (wpisuje do obu aren tekst naglowka tabeli wynikow);
-0062 <= #$2A;
-0063 <= #$09;
-wywoluje 6013 (zapisuje zawartosc tabeli wynikow do obszaru wskazanego przez (0062, 0063)) - 1 arena;
-0062 <= #$2A;
-0063 <= #$19;
-wywoluje 6013 (zapisuje zawartosc tabeli wynikow do obszaru wskazanego przez (0062, 0063)) - 2 arena;

6013-607A: zapisuje zawartosc tabeli wynikow do obszaru wskazanego przez (0062, 0063);
zapisuje pierwsze 6 wierszy; tabela ma 7 wierszy;
pierwsze litery nazw zawodnikow znajduja sie w tabeli 623C, drugie litery w tabeli 6243, trzecie litery w 624A, numer pasa 0-5 znajduje sie w tabeli 6235, setki tysiecy i dziesiatki tysiecy punktow w formacie BCD w tabeli 6220, tysiace i setki punktow w formacie BCD w tabeli 6227; punkty sa wypisywane przy pomocy procedury 607B dzieki czemu nie sa wypisywane wiodace zera; nazwy pasow wypisywane sa przez procedure 5ED6;

607B-60B0: dwie cyfry podane w A w formacie BCD zapisuje jako znaki (0 ma kod #$19) pod adresem wskazanym przez (0062,0063) + Y; wiodace zera sa zastepowane przez znak o kodzie podanym w 005D; procedura moze byc wywolywana kaskadowo - zwieksza Y o 1 oraz jezeli ktorakolwiek z cyfr byla rozna od zera to w 005D umieszcza kod zera, by w kolejnym wywolaniu nie zastepowac zer innym znakiem;

60B1-60D2: procedura sortuje tabele wynikow algorytmem babelkowym; wykorzystuje procedure porownujaca dwa wiersze 60D3 oraz procedura zamieniajaca dwa wiersze miejscami 60E4;

60D3-60E3: procedura porownuje ilosci punktow w wierszach tabeli wynikow o indeksach podanych w rejestrach X i Y; jezeli punkty[Y] > punkty[X] zwraca C=0, w przeciwnym razie C=1;

60E4-6104: procedura zamienia miejscami dwa wiersze tabeli wynikow; indeksy wierszy podawane sa w rejestrach X i Y;

6105-610F: pusty obszar (wypelniony zerami);



dane tabeli wynikow:
6220-6226: setki tysiecy i dziesiatki tysiecy punktow w formacie BCD;
6227-622D: tysiace i setki punktow w formacie BCD;
622E-6234: same zera, mozliwa jedna #1 wskazujaca wstawiony wiersz;
6235-623B: numer pasa (0 - bialy, 1 - zolty, ...);
623C-6242: pierwsze litery nazw zawodnikow;
6243-6249: drugie litery nazw zawodnikow;
624A-6250: trzecie litery nazw zawodnikow;

