'''''''''''''''''''''''''''''''''
' W O I M A  1.0 (J-J Oikkonen) '
' Freeware                      '
' TAISTELU.BAS taistelun toimet '
'''''''''''''''''''''''''''''''''
'$INCLUDE: 'woima.bi'
DEFINT A-Z
DECLARE SUB LopetaPeli ()
DECLARE SUB AiLinkotuli ()
DECLARE SUB VaihdaPaiva ()
DECLARE SUB Parannus ()
DECLARE SUB ParannaUkko (snum)
DECLARE SUB MuutaSankariksi ()
DECLARE SUB TyhjaaVastus (i)
DECLARE SUB Sovinto ()
DECLARE SUB ValmisteleTaistelu ()
DECLARE SUB VoittoRuutu (haviaja, voittaja)
DECLARE FUNCTION TileTyyppi (tile AS STRING)
DECLARE FUNCTION MikaTile$ (tilenumn)
DECLARE SUB UusiPaiva ()
DECLARE SUB Hyvaksy (x, xx, y, yy)
DECLARE SUB MuutaRaivohulluksi ()
DECLARE SUB LinkoTuli ()
DECLARE SUB PiirraNappi (boxX, boxY, boxMx, boxMy, tila AS STRING)
DECLARE SUB TeeTaito ()
DECLARE SUB TyhjaaUkko (i)
DECLARE SUB NollaaLiike ()
DECLARE SUB Liikutettu (mika)
DECLARE SUB LoppuTili ()
DECLARE SUB Nappaimet (key$)
DECLARE SUB PikaApu ()
DECLARE FUNCTION MikaLiitto$ (liitto)
DECLARE SUB Piirraukko (kenen, kuka, sijaintiX, sijaintiY, snum)
DECLARE SUB NaytaTile (locX, locY)
DECLARE SUB AImove (kumpi)
DECLARE SUB AktivoiAi (liitto)
DECLARE FUNCTION KenenSotilas (hahmo$)
DECLARE FUNCTION MikaSotilas$ (liitto, hahmo)
DECLARE FUNCTION SotilaanTyyppi (hahmo$)
DECLARE SUB NaytaTulilinja (VH, OH)
DECLARE SUB AmmuNuoli (suunta$)
DECLARE SUB KatsoTulilinja (kohdeX, kohdeY)
DECLARE SUB Turnit ()
DECLARE SUB AsetaTekstit (vasen, keski, oikea)
DECLARE SUB TarkistaRuutu (kohtaX, kohtaY, tilenum)
DECLARE SUB UkkojenAsettelu ()
DECLARE SUB AiAseta (kuka)
DECLARE SUB DoDama ()
DECLARE SUB AktivoiTile (ux, uy)
DECLARE SUB PiirraTile (tilenum, sijaintiX, sijaintiY)
DECLARE SUB DoMove (newX, newY)
DECLARE SUB KatsoLiike (newX, newY)
DECLARE SUB PiirraKentta (mode)
DECLARE SUB AsetaUkko (kenen, kuka, ux, uy, i)
DECLARE SUB PiirraTaulu (bx, by, bxM, byM, tyyli, vari)
DECLARE SUB Font (Fonti$, col, TX, TY, koko, script$)
DECLARE FUNCTION LataaTile (tile$, hae$, snum)
DECLARE SUB Taistelu ()
DECLARE SUB Delay (Seconds!)
DECLARE SUB VuoronVaihto ()
DECLARE SUB RauhaTila ()
DECLARE FUNCTION Fixed$ (num)
DECLARE SUB HiiriStatus (VH, OH, XHiiri, YHiiri, hx, hy)
DECLARE SUB HiiriRange (X1, Y1, x2, y2)
DECLARE SUB HiiriPut (x, y)
DECLARE SUB HiiriHide ()
DECLARE SUB HiiriDriver (ax, bx, cx, dx)
DECLARE SUB HiiriShow ()
DECLARE FUNCTION HiiriInit ()
DECLARE SUB NaytaAste (mittari$, kumpi)
'' yhteiset muuttujat
DIM SHARED kohde    ''Aktivoitu kohde (spritenum)
DIM SHARED tempX, tempY
DIM SHARED loppu, nakymaton
DIM SHARED ukkoja
''' vastus(1) = Hyokkaaja
''' vastus(2) = Puolustaja

REM $DYNAMIC
SUB AktivoiTile (ux, uy)
'--- Tutkitaan kohta ja suoritetaan sen (tilen) mukainen jatko toiminta!!!
 ''Tarkistetaan onko ruudussa ukkoa
 CALL TarkistaRuutu(ux, uy, i)
 ruutu$ = "tyhja"   ''Oletuksena, tyhja ruutu!

 IF KenenSotilas(Ukko(i).nimi) = vuorossa THEN
    ''Ruudusta loytyi oma sotilas...
    ''Lasketaan montako kertaa kyseinen hahmo on toiminut
    ''HUOM!!
    ''Jos hahmolla alle 2 toimintaa SEK tarpeeksi vuoroja toiminnan
    ''maksamiseen, niin voimme aktivoida sen.
    IF Kaytetty(i) <= 1 AND vuorot > Kaytetty(i) THEN
      ruutu$ = "oma"
      char = i
    END IF
 ELSEIF i > 0 THEN
    ruutu$ = "vihollinen"
    kohde = i
 END IF

 ''Suoritetaan osoitetun tilen (ruutu$) mukaiset jatkotoimenpiteet...
 IF ruutu$ = "tyhja" THEN
    ''JOS tyhja, katsotaan onko liikkuminen mahdollista
    IF map(mapnum, ux, uy) = 0 AND char <> 0 THEN
     CALL KatsoLiike(ux, uy)
    END IF
 END IF

 IF ruutu$ = "tyhja" OR ruutu$ = "oma" THEN
   IF NOT nakymaton THEN
     ''Pyyhitaan aluksi teksit vanhan hahmon tiedoista
     LINE (5, 185)-(95, 198), 19, BF
     ''Poistetaan vanhan hahmon korostus
     PUT ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1), korostus, PSET
     ''jos tyhja resetoidaan aktivoitu hahmo
   END IF
   IF ruutu$ = "tyhja" THEN char = 0
 END IF

 IF ruutu$ = "oma" THEN
   ''Otetaan hahmon sijainti talteen valiaikaisiin muuttujiin
   tempX = ux
    tempY = uy
   IF NOT nakymaton THEN
    ''Otetaan kuva hahmosta ennen korostusta
    GET ((ux - 1) * 16 + 7, (uy - 1) * 16 + 1)-(ux * 16 + 6, uy * 16), korostus
    ''Korostetaan valittu hahmo
    LINE ((ux - 1) * 16 + 7, (uy - 1) * 16 + 1)-(ux * 16 + 6, uy * 16), 82, B, &H7777
    ''Hahmon tietojen esitys
    Font Ukko(char).nimi, 49, 7, 184, 1, "shade"
    Font "Teho:" + Fixed(LataaTile(Ukko(char).nimi, "teho", char)) + " Pb:" + Fixed(LataaTile(Ukko(char).nimi, "pb", char)), 49, 7, 191, 1, "shade"
   END IF

 ELSEIF ruutu$ = "vihollinen" THEN
   ''Osoiteesta loytyi ruma vihulainen! Tarkistetaan etaisyys ja pystyyky lyomaan..
   IF RTRIM$(Ukko(kohde).nimi) <> "" AND char > 0 THEN  ''kyseess hahmo
    KatsoTulilinja Ukko(kohde).x, Ukko(kohde).y  ''Katsotaan onko hyokkays etaisyydella
   END IF
 END IF
 IF NOT nakymaton THEN Delay (.2)
END SUB

SUB AmmuNuoli (suunta$)
'' Nuolen lento ja osuma! HUOM. suunta$ annetaan 1 tai 2 kirjaimella!
'' Joista ensimmainen isolla ja toinen pienella! esim. Oa = oikealle alas,
'' Y = ylos, V= vasen jne...

 ''vaihdetaan suunta parametreiksi
 IF LEFT$(suunta$, 1) = "O" THEN nX = 1: nY = 0
 IF LEFT$(suunta$, 1) = "V" THEN nX = -1: nY = 0
 IF LEFT$(suunta$, 1) = "Y" THEN nX = 0: nY = -1
 IF LEFT$(suunta$, 1) = "A" THEN nX = 0: nY = 1
 IF RIGHT$(suunta$, 1) = "a" THEN nY = 1
 IF RIGHT$(suunta$, 1) = "y" THEN nY = -1
 IF RIGHT$(suunta$, 1) = "o" THEN nX = 1
 IF RIGHT$(suunta$, 1) = "v" THEN nX = -1

 FOR P = 1 TO LataaTile(Ukko(char).nimi, "kanto", char)
   'Jos edessa on jotain (este?)
   IF map(mapnum, Ukko(char).x + (nX * P), Ukko(char).y + (nY * P)) > 0 THEN
     ''Jos este jokinmuu paitsi Aito (joka ei est nuolen etenemist) lopetetaan luuppi!
     IF NOT map(mapnum, Ukko(char).x + (nX * P), Ukko(char).y + (nY * P)) = TileTyyppi("Aita") THEN Turnit: EXIT FOR
   END IF
  
  IF NOT nakymaton THEN
   'Otetaan kuva -> piirretaan --> kuva takaisin ja sama alusta (kunnes saavutetaan kannon maximi (
   GET (16 * (Ukko(char).x + nX * P) + (n * nX + 8), 16 * (Ukko(char).y + nY * P) + (n * nY))-(16 * (Ukko(char).x + nX * P) + (n * nX - 8), 16 * (Ukko(char).y + nY * P) + (n * nY - 16)), tempget
    ''piirretaan laatikko nuolelle
    'LINE (16 * (ukko(char).X + nX * p) + (n * nX + 8), 16 * (ukko(char).Y + nY * p) + (n * nY))-(16 * (ukko(char).X + nX * p) + (n * nX - 8), 16 * (ukko(char).Y + nY * p) + (n * nY - 16)), 2, B
    ''piirretaan nuoli
    IF LEFT$(suunta$, 1) = "O" OR LEFT$(suunta$, 1) = "V" THEN
     LINE (16 * (Ukko(char).x + nX * P) + (n * nX + 4), 16 * (Ukko(char).y + nY * P) + (n * nY - 8))-(16 * (Ukko(char).x + nX * P) + (n * nX - 4), 16 * (Ukko(char).y + nY * P) + (n * nY - 8)), 6
    ELSE
     LINE (16 * (Ukko(char).x + nX * P) + (n * nX), 16 * (Ukko(char).y + nY * P) + (n * nY - 3))-(16 * (Ukko(char).x + nX * P) + (n * nX), 16 * (Ukko(char).y + nY * P) + (n * nY - 10)), 6
    END IF
   Delay (.2)
   PUT (16 * (Ukko(char).x + nX * P - 1) + (n * nX + 8), 16 * (Ukko(char).y + nY * P - 1) + (n * nY)), tempget, PSET
  END IF
   
   'Tarkistetaan onko ruutu tyhja
   TarkistaRuutu Ukko(char).x + nX * P, Ukko(char).y + nY * P, kohde
   'jos ruudusta loytyi hahmo, suoritetaan vahinko
   IF kohde > 0 THEN DoDama: EXIT FOR
 NEXT
END SUB

SUB AsetaTekstit (vasen, keski, oikea)
'' Subi joka kasittelee 'Alaikkunaa'
 IF NOT nakymaton THEN
 IF vasen THEN
   ''pyyhi hahmo tiedot
   LINE (5, 185)-(95, 198), 19, BF
 END IF
 IF keski THEN
   ' pyyhi pelaaja ja vuorot
   LINE (125, 180)-(181, 187), 19, BF
   LINE (126, 189)-(180, 197), 19, BF
   ''nayttaa jaljella olevat vuorot
   Font " vuoro " + Fixed(vuorot), 23, 125, 190, 1, ""
   ''naytta vuoron suorittajan laittamalla 'valiloynnit' nimen lopusta eteen. Keskitys
    FOR lett = 1 TO 9 - LEN(RTRIM$(hahmo(vuorossa).pelaaja))
      Font " ", 45, 123 + (lett * 3), 180, 1, ""
    NEXT
   Font hahmo(vuorossa).pelaaja, 27, 123 + (lett * 3), 180, 1, "shade"
 END IF
 IF oikea THEN
   '' Aputeksti tila
   LINE (197, 185)-(317, 198), 19, BF
   '' luovutus nappi
   LINE (311, 186)-(319, 199), 24, BF
   LINE (311, 186)-(319, 199), 22, B
   DRAW "bm311,189br2bd8c6u7br1c29 d3br1 c30 bd1u3bu1br1d3br1u3"
 END IF
 END IF

END SUB

SUB AsetaUkko (kenen, kuka, ux, uy, i)
''-- Asetetaan osoitettu hahmo kartalle seka piirreetaan naytolle
'' kenen = kenen hahmo (Liitto 1/ Liitto 2 jne..)
'' kuka = hahmon tyyppi (0= ampuja, 1= meleemies)
'' ux,uy = hahmon sijanti
'' I = hahmolle varattava paikka Ukko- taulukosta (1-40)

 HiiriHide
 IF NOT nakymaton THEN CALL Piirraukko(kenen, kuka, ux * 16 - 9, uy * 16 - 15, 0)

 Ukko(i).nimi = MikaSotilas$(kenen, kuka)
 Ukko(i).x = ux
 Ukko(i).y = uy
END SUB

SUB DoDama
''-- Suorittaa vahinko toiminnon aktivoidun hahmon ja - kohteen valilla.
 DIM teho, tehoK, pb, tb, osuma, blokki

 '' Ladataan hyokkaajaan tiedot (lhi- ja kaukoteho)
 teho = LataaTile(Ukko(char).nimi, "teho", char)
 tehoK = LataaTile(Ukko(char).nimi, "tehoK", char)

 ''lasketaan etaisyys, jos kohde vieressa tehobonus = lahiteho, muutoin tb = kaukoteho
 IF Ukko(char).x - Ukko(kohde).x >= -1 AND Ukko(char).x - Ukko(kohde).x <= 1 AND Ukko(char).y - Ukko(kohde).y >= -1 AND Ukko(char).y - Ukko(kohde).y <= 1 THEN tb = teho ELSE tb = tehoK

 IF NOT nakymaton THEN GET (0, 0)-(80, 8), tempget    ''boxi printille

 'lydh!
 RANDOMIZE TIMER
 osuma = INT(RND * tb) + 1

 ''ladataan aktivoidun kohteen (puolustajan) tiedot. (pb)
 pb = LataaTile(Ukko(kohde).nimi, "pb", kohde)

 ''puolustus!
 blokki = INT(RND * pb) + 1

 '' tehostetaanpa hieman tietokoneen ijien toimintaa
 IF hahmo(KenenSotilas(Ukko(char).nimi)).pelaaja = "Tietokone" AND KenenSotilas(Ukko(char).nimi) < 4 THEN osuma = osuma + INT(RND * 2)
 IF hahmo(KenenSotilas(Ukko(kohde).nimi)).pelaaja = "Tietokone" AND KenenSotilas(Ukko(kohde).nimi) < 4 THEN blokki = blokki + INT(RND * 2)

 '' Isku lapi puolustuksen... kohde kuolee.
 IF osuma > blokki THEN
  IF NOT nakymaton THEN
   PUT (0, 0), tempget, PSET
   ''Kuolon animaation v.1 (Roiskuva veri)
    RANDOMIZE TIMER
     FOR i = 1 TO 40
       PSET (INT(RND * 6) + Ukko(kohde).x * 16 - 3, INT(RND * 6) + Ukko(kohde).y * 16 - 10), INT(RND * 6) + 80
       WAIT &H3DA, 8
     NEXT
   Delay .3
   ''haetaan allaoleva tile ja piirretaan se hahmon paalle
   CALL PiirraTile(map(mapnum, Ukko(kohde).x, Ukko(kohde).y), Ukko(kohde).x, Ukko(kohde).y)
  END IF
  
   '' Jos voitto ylivoimainen nousee taistelija sankariksi!
   IF osuma = 6 AND blokki = 2 THEN
        MID$(Ukko(char).tila, 3, 1) = "S"
        IF NOT nakymaton THEN Piirraukko KenenSotilas(Ukko(char).nimi), SotilaanTyyppi(Ukko(char).nimi), Ukko(char).x * 16 - 9, Ukko(char).y * 16 - 15, char
   END IF
  
   '' Tyhjennetaan kohteen tiedot
   TyhjaaUkko kohde
   kohde = 0
   AktivoiAi 1 ''Pivitetn ukkojen mr
   '' Laskettaan onko ukkoja jaljella, jatkuuko taistelu?
   DIM hengis(1 TO 2, 1)  '' varataan taulukko hengissa oleville miehille
   FOR i = 1 TO ukkoja
    IF RTRIM$(Ukko(i).nimi) > "" THEN
      IF KenenSotilas(Ukko(i).nimi) = vastus(1).vastus THEN
       hengis(1, SotilaanTyyppi(Ukko(i).nimi)) = hengis(1, SotilaanTyyppi(Ukko(i).nimi)) + 1
      ELSE
       hengis(2, SotilaanTyyppi(Ukko(i).nimi)) = hengis(2, SotilaanTyyppi(Ukko(i).nimi)) + 1
     END IF
    END IF
   NEXT
   IF hengis(1, 0) + hengis(1, 1) <= 0 OR hengis(2, 0) + hengis(2, 1) <= 0 THEN loppu = TRUE
   IF nakymaton THEN
    LINE (140, 97)-(170, 105), 0, BF
    Font "Ruumita: " + Fixed(vastus(1).miekat + vastus(1).jouset + vastus(1).heitto + vastus(2).miekat + vastus(2).jouset + vastus(2).heitto - (hengis(1, 0) + hengis(1, 1) + hengis(2, 0) + hengis(2, 1))), 44, 98, 97, 1, ""
   END IF

 '' Kohde torjuu iskun!
 ELSE
   IF NOT nakymaton THEN
    ''Puolustus "animaatio"!
    PUT (0, 0), tempget, PSET
    GET (16 * Ukko(kohde).x + 8, 16 * Ukko(kohde).y)-(16 * Ukko(kohde).x - 8, 16 * Ukko(kohde).y - 16), tempget
    PUT (Ukko(kohde).x * 16 - 4, Ukko(kohde).y * 16 - 16), kilpim, AND
    PUT (Ukko(kohde).x * 16 - 4, Ukko(kohde).y * 16 - 16), kilpi, OR
    PLAY "mbo0d50"
    Delay (.5)
    PUT (16 * Ukko(kohde).x - 8, 16 * Ukko(kohde).y - 16), tempget, PSET
   END IF
   IF KenenSotilas(Ukko(kohde).nimi) = vastus(1).vastus THEN vastus(1).viha = vastus(1).viha + 17 ELSE vastus(2).viha = vastus(2).viha + 17
   '' Hahmo muuttu raivohulluksi jos viha kohoaa tappiin
   IF KenenSotilas(Ukko(kohde).nimi) = vastus(1).vastus AND vastus(1).viha >= 100 OR KenenSotilas(Ukko(kohde).nimi) = vastus(2).vastus AND vastus(2).viha >= 100 THEN
         MID$(Ukko(kohde).tila, 1, 1) = "R"
         IF NOT nakymaton THEN Piirraukko KenenSotilas(Ukko(kohde).nimi), SotilaanTyyppi(Ukko(kohde).nimi), Ukko(kohde).x * 16 - 9, Ukko(kohde).y * 16 - 15, kohde
         IF KenenSotilas(Ukko(kohde).nimi) = vastus(1).vastus THEN vastus(1).viha = 0 ELSE vastus(2).viha = 0
   END IF
   '' Kohde sai torjuttua iskun, mutta haavoittuu lievsti
   IF blokki = osuma THEN
         MID$(Ukko(kohde).tila, 2, 1) = "H"
         IF NOT nakymaton THEN Piirraukko KenenSotilas(Ukko(kohde).nimi), SotilaanTyyppi(Ukko(kohde).nimi), Ukko(kohde).x * 16 - 9, Ukko(kohde).y * 16 - 15, kohde
   END IF
 END IF

Turnit
END SUB

SUB DoMove (newX, newY)
''--- Liikutta akt.hahmoa uuteen osoitettuun sijaintiin (newX,-Y)
 IF NOT nakymaton THEN
 ''piirretaan hahmon vanhaan locatioon alla oleva tile
 CALL PiirraTile(map(mapnum, tempX, tempY), tempX, tempY)
 ''otetaan uusi kuva vanhasta tilesta
 GET ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1)-(tempX * 16 + 6, tempY * 16), korostus
 END IF

 ''paivitetaan uudet locatiot
 Ukko(char).x = newX
 Ukko(char).y = newY

 ''Ja lopuksi piirretaan Ukko uuteen sijaintiin
 IF NOT nakymaton THEN CALL Piirraukko(vuorossa, SotilaanTyyppi(Ukko(char).nimi), newX * 16 - 9, newY * 16 - 15, char)
END SUB

SUB KatsoLiike (newX, newY)
'' SUBi katsoo onko osoitettuun kohtaan mahl. liikkua
'' Vertaillen aktivoidun ukon sijaintia(Ukko.X/-Y) annetun sijaintiin,
'' onko liikuminen sinne mahdollista. Liikumismatka= 1
 IF newX - Ukko(char).x >= -1 AND newX - Ukko(char).x <= 1 THEN
  IF newY - Ukko(char).y >= -1 AND newY - Ukko(char).y <= 1 THEN
       ''Tarkistetaan onko osoitettu ruutu varattu..
       CALL TarkistaRuutu(newX, newY, tilenum)
        ''..jos on, niin liikkuminen sinne ei mahdollista!
        IF tilenum = 0 THEN         ''Muutoin..
          CALL DoMove(newX, newY)  ''..suoritetaan liike
         Turnit
         char = 0                   ''..resetoidaan hahmo!
         IF NOT nakymaton THEN Delay (.2)
        END IF
   END IF
 END IF
END SUB

SUB KatsoTulilinja (kohdeX, kohdeY)
'' Katsotaan pystyyko akt. hahmo suorittamaan hyokkays toimintoa annettuun
'' sijaintiin. Eli onko suunta joku ilmansuunnista.. + Mika tama suunta on
 FOR P = 1 TO LataaTile(Ukko(char).nimi, "kanto", char)
  IF Ukko(char).x - kohdeX = P AND Ukko(char).y = kohdeY THEN
     suunta$ = "V"
  ELSEIF kohdeX - Ukko(char).x = P AND Ukko(char).y = kohdeY THEN
     suunta$ = "O"
  ELSEIF kohdeX = Ukko(char).x AND Ukko(char).y - kohdeY = P THEN
     suunta$ = "Y"
  ELSEIF kohdeX = Ukko(char).x AND kohdeY - Ukko(char).y = P THEN
     suunta$ = "A"
  ELSEIF Ukko(char).x - kohdeX = P AND Ukko(char).y - kohdeY = P THEN
     suunta$ = "Vy"
  ELSEIF kohdeX - Ukko(char).x = P AND Ukko(char).y - kohdeY = P THEN
     suunta$ = "Oy"
  ELSEIF kohdeX - Ukko(char).x = P AND kohdeY - Ukko(char).y = P THEN
     suunta$ = "Oa"
  ELSEIF Ukko(char).x - kohdeX = P AND kohdeY - Ukko(char).y = P THEN
     suunta$ = "Va"
  END IF
 NEXT

 'JOS suunta loytui niin annataan lamaa
 IF suunta$ <> "" THEN
        ''Poistetaan vanhan hahmon korostus
        IF NOT nakymaton THEN PUT ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1), korostus, PSET
        
        IF LataaTile(Ukko(char).nimi, "kanto", char) > 1 THEN AmmuNuoli (suunta$) ELSE DoDama
        char = 0
        IF NOT nakymaton THEN
         ''JOS oma niin aktivoidaan kyseinen hahmo!
         GET ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1)-(tempX * 16 + 6, tempY * 16), korostus
        END IF
 END IF
END SUB

FUNCTION KenenSotilas (hahmo$)
'' Yksinkertainen funktio, joka palauttaa miss liittoumassa olio on
''
  SELECT CASE RTRIM$(hahmo$)
    '' Liittouma 1
    CASE "Ritari", "Jousimies", "Keihsmies"
      KenenSotilas = 1: EXIT FUNCTION
    '' Liittouma 2
    CASE "Soturi", "Metsstj", "Seivsmies"
      KenenSotilas = 2: EXIT FUNCTION
    CASE "Maahinen", "Tonttu", "Susimies"
      KenenSotilas = 3: EXIT FUNCTION
    CASE "Juntti"
      '' Selvitetn kenen sotilas kymll lpi eph littoumat. (kuka peliss)
      FOR mika = 1 TO 2
       IF vastus(mika).vastus = 4 THEN KenenSotilas = 4: EXIT FUNCTION
       IF vastus(mika).vastus = 5 THEN KenenSotilas = 5: EXIT FUNCTION
       IF vastus(mika).vastus = 6 THEN KenenSotilas = 6: EXIT FUNCTION
      NEXT
    '' jne ...
  END SELECT
  '' Muu tapaus (ei liittoumaa)
  KenenSotilas = 0
END FUNCTION

REM $STATIC
SUB Liikutettu (mika)

'' Merkitsee tietyn hahmon liikutetuksi antamalla sen
'' AI-valintaan miinuksia.
DIM aa, bb
  FOR aa = 1 TO 2: FOR bb = 1 TO CrNum(aa)
    IF oliolinkit(aa, bb) = mika THEN
      '' Annetaan roimasti miinuksia
      
      '' ja poistutaan
      EXIT SUB
    END IF
  NEXT bb, aa
END SUB

REM $DYNAMIC
SUB LinkoTuli
 DIM tile AS STRING, osuma, blokki
 DIM sijX, sijY
 Delay .2
 AsetaTekstit TRUE, TRUE, TRUE
 Font "Valitse kohde", 49, 5, 184, 1, "shade"
 Font "tulitettavaksi!", 49, 5, 191, 1, "shade"
 Font "Valiste kohde (VH)", 47, 204, 184, 1, ""
 Font "      Peruuta ( Q)", 47, 204, 191, 1, ""

 DO
  key$ = INKEY$
  HiiriShow
  HiiriStatus VH, OH, MX, MY, hx, hy
  IF VH <> 0 THEN
      HiiriHide
      IF MikaTile$(map(mapnum, hx, hy)) > "" THEN
       
        ''Otetaan sijainti vliaikaisiin muuttujiin muistiin
        sijX = hx
        sijY = hy

        '' Piirretn apumis taulu
        PiirraTaulu 80, 30, 230, 115, 0, 0
        tc = 48
        Font " Miehet katapultilla", tc, 90, 37, 1, "shade"
        Font " odottavat lupaa ampua", tc, 90, 45, 1, "shade"
        PUT (93, 56), kata, PSET
        Font "Katapu.", tc, 120, 59, 1, "shade"
        Font "Teho:10", tc, 120, 68, 1, "shade"
       
        ''Esitetn tilen tiedot
        PiirraTile TileTyyppi(MikaTile$((map(mapnum, sijX, sijY)))), 168, 59
        Font MikaTile$(map(mapnum, sijX, sijY)), tc, 188, 59, 1, "shade"
        Font "Pb:" + Fixed(LataaTile(MikaTile$(map(mapnum, sijX, sijY)), "pb", 0)), tc, 188, 68, 1, "shade"
        PiirraNappi 100, 83, 207, 93, ""
        PiirraNappi 100, 99, 207, 109, ""
        tc = 42
        Font " Tulta munille!", tc, 105, 85, 1, ""
        Font "    Peruuta..", tc, 105, 101, 1, ""
        Delay .2
       
        DO
         key$ = INKEY$
         HiiriShow
         HiiriStatus VH, OH, MX, MY, hx, hy
         IF VH <> 0 THEN
          HiiriHide
           IF MX >= 200 AND MY >= 83 AND MX <= 414 AND MY <= 93 THEN
             
              PiirraNappi 100, 83, 207, 93, "fade"
              Font " Tulta munille!", 43, 105, 85, 1, ""
              '' Suoritetaan vahinko- ja puolustus toiminta!
              RANDOMIZE TIMER
              osuma = INT(RND * 10) + 1
              blokki = INT(RND * LataaTile(MikaTile$(map(mapnum, sijX, sijY)), "pb", 0)) + 1

              '' pyyhitn vhn vanhoja tekstej
              LINE (88, 38)-(228, 53), 0, BF
              '' Jos osuma isompi kuin blokki, niin tuhotaan rakennus
              IF osuma > blokki THEN
               Font "Kohde atomeina!!", 42, 90, 40, 1, ""
               PUT (163, 60), raivoM, AND
               PUT (163, 60), raivo, OR
               PUT (170, 58), raivoM, AND
               PUT (170, 58), raivo, OR
              ELSE
               Font "Tulitus eponnistui", 42, 90, 40, 1, ""
              END IF
             
              Delay .5
              LINE (88, 80)-(228, 115), 0, BF
              Hyvaksy 100, 207, 88, 98
              PUT (80, 30), tempget, PSET
              
               '' Jos osuma niin tuhotaan kohde kartalta!!
               IF osuma > blokki THEN
                 '' Pyyhittn tile kartalta!
                 '' Jos tilen koko 2 niin pyyhitn mys virell oleva tile
                 IF LataaTile(MikaTile$(map(mapnum, sijX, sijY)), "koko", 0) = 2 THEN map(mapnum, sijX - 1, sijY) = 0
                 map(mapnum, sijX, sijY) = 0
                 HiiriHide
                 '' Pivitetn areena
                 PiirraKentta 0
                
                 '' Poistetaan rakennelma hahmo()-taulukosta
                 IF TileTyyppi(MikaTile$(map(mapnum, hx, hy))) = 2 THEN
                   hahmo(mapnum).tiloja = hahmo(mapnum).tiloja - 1
                 ELSEIF TileTyyppi(MikaTile$(map(mapnum, hx, hy))) = 4 THEN
                   hahmo(mapnum).tornit = hahmo(mapnum).tornit - 1
                 ELSEIF TileTyyppi(MikaTile$(map(mapnum, hx, hy))) = 5 THEN
                   hahmo(mapnum).ladot = hahmo(mapnum).ladot - 1
                 ELSEIF TileTyyppi(MikaTile$(map(mapnum, hx, hy))) = 6 THEN
                   hahmo(mapnum).aidat = hahmo(mapnum).aidat - 1
                 END IF
               END IF
              ''Pivitetn kuva pohjasta
              GET (80, 30)-(235, 145), tempget
              key$ = "qu"
             IF vuorossa = vastus(1).vastus THEN vastus(1).mana = 0: NaytaAste "mana", 1 ELSE vastus(2).mana = 0: NaytaAste "mana", 2
           ELSEIF MX >= 200 AND MY >= 99 AND MX <= 414 AND MY <= 109 THEN
              key$ = "qu"
              PUT (80, 30), tempget, PSET
              Delay .2
           END IF
         END IF
        LOOP UNTIL key$ = "qu"
     END IF
  END IF
 LOOP UNTIL key$ = "qu" OR key$ = CHR$(27)
 Delay .2
END SUB

REM $STATIC
SUB LoppuTili
' Taistelun lopputtua jaetaan jyvat ja akanat...
'
 DIM hengis(1 TO 2, 2)   '' Selviytyneet, hengis(vastus, hahmotyyppi)
 DIM voittaja, haviaja
 DIM kultaa
 DIM menehtyneet(1 TO 2, 2)

 IF nakymaton THEN nakymaton = FALSE

 '' Lasketaan montako kukintakin hahmotyyppia jai henkiin
 FOR i = 1 TO ukkoja
   IF RTRIM$(Ukko(i).nimi) > "" THEN
      IF KenenSotilas(Ukko(i).nimi) = vastus(1).vastus THEN
       hengis(1, SotilaanTyyppi(Ukko(i).nimi)) = hengis(1, SotilaanTyyppi(Ukko(i).nimi)) + 1
      ELSE
       hengis(2, SotilaanTyyppi(Ukko(i).nimi)) = hengis(2, SotilaanTyyppi(Ukko(i).nimi)) + 1
     END IF
   END IF
  NEXT
 FOR i = 1 TO 2
    menehtyneet(i, 1) = vastus(i).miekat - hengis(i, 1)
    menehtyneet(i, 0) = vastus(i).jouset - hengis(i, 0)
    menehtyneet(i, 2) = vastus(i).heitto - hengis(i, 2)
 NEXT


 IF NOT nakymaton THEN
  HiiriHide
  PiirraTaulu 50, 20, 260, 151, 0, 0

  '' Tulostetaan tiedot pelaajista naytolle
  FOR i = 1 TO 2
   IF i = 2 THEN x = 100
   IF vastus(i).vastus = 1 THEN PUT (65 + x, 36), face, PSET
   IF vastus(i).vastus = 2 THEN PUT (65 + x, 36), face2, PSET
   IF vastus(i).vastus = 3 THEN PUT (65 + x, 36), face3, PSET
   IF vastus(i).vastus >= 4 THEN
     IF hahmo(vastus(i).vastus).liittouma = 1 THEN PUT (65 + x, 36), face, PSET
     IF hahmo(vastus(i).vastus).liittouma = 2 THEN PUT (65 + x, 36), face2, PSET
     IF hahmo(vastus(i).vastus).liittouma = 3 THEN PUT (65 + x, 36), face3, PSET
     IF hahmo(vastus(i).vastus).liittouma > 3 THEN PUT (65 + x, 36), face4, PSET
   END IF
   LINE (64 + x, 35)-(85 + x, 56), 23, B    'naamaan reunukset
   LINE (63 + x, 34)-(86 + x, 57), 22, B
   tc = 28
   Font hahmo(vastus(i).vastus).pelaaja, tc, 91 + x, 34, 1, ""
   Font MikaLiitto(vastus(i).vastus), tc - 1, 91 + x, 42, 1, ""
   Font hahmo(vastus(i).vastus).johtaja, tc, 91 + x, 51, 1, ""
   Font "Menehtyneet", tc, 65 + x, 63, 1, ""
   Font MikaSotilas$(vastus(i).vastus, 1), tc, 65 + x, 73, 1, "shade"
   Font MikaSotilas$(vastus(i).vastus, 0), tc, 65 + x, 82, 1, "shade"
   Font MikaSotilas$(vastus(i).vastus, 2), tc, 65 + x, 91, 1, "shade"
  
   Font Fixed(menehtyneet(i, 1)), tc, 132 + x, 73, 1, ""
   Font Fixed(menehtyneet(i, 0)), tc, 132 + x, 82, 1, ""
   Font Fixed(menehtyneet(i, 2)), tc, 132 + x, 91, 1, ""
   Font "Yht........" + Fixed(vastus(i).miekat - hengis(i, 1) + vastus(i).jouset - hengis(i, 0) + vastus(i).heitto - hengis(i, 2)), tc, 65 + x, 100, 1, ""
  NEXT
 END IF
  
 '' Selvitetn Voittaja ja Hvij!
 IF loppu THEN   ' Jos taistelun loppu on tosi
   '' Lasketaan kummalla enemman miehia hengis (voittaja!)
   IF hengis(1, 0) + hengis(1, 1) + hengis(1, 2) > hengis(2, 1) + hengis(2, 0) + hengis(2, 2) THEN
     voittaja = vastus(1).vastus: haviaja = vastus(2).vastus
     '' liittouma (vauraampi) vai pitj
     IF mapnum <= 3 THEN kultaa = (vastus(2).miekat + vastus(2).jouset + vastus(2).heitto) * 3.5 ELSE kultaa = (vastus(2).miekat + vastus(2).jouset + vastus(2).heitto) * 2.5
   ELSE
     voittaja = vastus(2).vastus: haviaja = vastus(1).vastus
     '' liittouma (vauraampi) vai pitj
     IF mapnum <= 3 THEN kultaa = (vastus(1).miekat + vastus(1).jouset + vastus(1).heitto) * 3.5 ELSE kultaa = (vastus(1).miekat + vastus(1).jouset + vastus(1).heitto) * 2.5
   END IF
  '' Poikkeus tilanne (666)! Pelaajat on tehnyt sovinnon.
  '' Merkataan haviajaksi sovinnon tekij eli kuka viimeksi oli vuorossa, ja
  '' katsotaan kuka nin ollen voittaja
  IF char = 666 THEN
   haviaja = vuorossa
   IF haviaja = vastus(1).vastus THEN voittaja = vastus(2).vastus ELSE voittaja = vastus(1).vastus
  END IF

 IF NOT nakymaton THEN
  '' Tulostetaan voittajan faktoja
   Font "Voittaja:", tc, 65, 114, 1, ""
    Font hahmo(voittaja).johtaja, tc, 125, 114, 1, ""
 END IF

 '' Otetaan kuolleet (pisteet) yls loppu nytt varten (:
 IF voittaja = vastus(1).vastus THEN hahmo(voittaja).pisteet = hahmo(voittaja).pisteet + menehtyneet(1, 1) + menehtyneet(1, 2) ELSE hahmo(voittaja).pisteet = menehtyneet(2, 1) + menehtyneet(2, 2) + hahmo(voittaja).pisteet
 IF haviaja = vastus(1).vastus THEN hahmo(haviaja).pisteet = hahmo(haviaja).pisteet + menehtyneet(1, 1) + menehtyneet(1, 2) ELSE hahmo(haviaja).pisteet = menehtyneet(2, 1) + menehtyneet(2, 2) + hahmo(haviaja).pisteet
 IF voittaja < 4 THEN hahmo(voittaja).voitot = hahmo(voittaja).voitot + 1
 IF haviaja < 4 THEN hahmo(haviaja).haviot = hahmo(haviaja).haviot + 1

 '' Esitetn taistelusta kertynyt potti
 IF NOT nakymaton THEN
  Font "Saaliit:", tc, 65, 122, 1, ""
  Font " Hopeaa:" + Fixed(kultaa) + " grammaa", 41, 65, 130, 1, ""
  '' Jos haviaja liittouma otetaan ruoka Tiloilta
  '' Muuten jos haviaja pitj otetaan ruoka ruuasta, kjeh, kjeh?
  IF mapnum <= 3 THEN
    Font " Ruokaa " + Fixed(hahmo(haviaja).tiloja * 4) + " annosta", 189, 65, 138, 1, ""
  ELSE
    Font " Ruokaa " + Fixed(hahmo(mapnum).ruokaa * 5) + " annosta", 189, 65, 138, 1, ""
  END IF
 END IF

 '' Jaetaan saalis ellei ole tehty sovintoa (char666)
 IF NOT char = 666 THEN
  IF voittaja <= 3 THEN
   '' Lisataan voittajalle taistelusta kertynyt saaliis
   hahmo(voittaja).rahaa = hahmo(voittaja).rahaa + kultaa
   hahmo(voittaja).ruokaa = hahmo(voittaja).ruokaa + hahmo(haviaja).tiloja * 4
   hahmo(voittaja).maine = hahmo(voittaja).maine + 1
  END IF

  '' hvij - liittouma, voittaja - liittouma = (kylkartta)
  IF voittaja <= 3 AND haviaja <= 3 AND mapnum <= 3 THEN
    hahmo(haviaja).rahaa = 0
    hahmo(haviaja).ruokaa = 0
    IF hahmo(vastus(haviaja).vastus).meleeukot + hahmo(vastus(haviaja).vastus).ampujat > 5 THEN hahmo(voittaja).moraali = hahmo(voittaja).moraali + 1
    IF NOT menehtyneet(1, 1) + menehtyneet(1, 2) + menehtyneet(1, 0) + menehtyneet(2, 1) + menehtyneet(2, 2) + menehtyneet(2, 0) = 0 THEN
     IF ABS(((menehtyneet(1, 1) + menehtyneet(1, 2) + menehtyneet(1, 0)) - (menehtyneet(2, 1) + menehtyneet(2, 2) + menehtyneet(2, 0))) / (menehtyneet(1, 1) + menehtyneet(1, 2) + menehtyneet(1, 0) + menehtyneet(2, 1) + menehtyneet(2, 2) +  _
menehtyneet(2, 0)) * 100) >= 80 THEN hahmo(voittaja).maine = hahmo(voittaja).maine + 1
    END IF
 
  '' hvij - pitj, voittaja - liittouma
  ELSEIF voittaja <= 3 AND mapnum > 3 THEN
   hahmo(mapnum).liittouma = hahmo(voittaja).liittouma
   hahmo(mapnum).ampujat = 1
   hahmo(mapnum).johtaja = hahmo(voittaja).johtaja
 
  '' voittaja - pitj, hvij - liittouma,
  ELSEIF voittaja > 3 AND mapnum <= 3 THEN
    hahmo(haviaja).rahaa = 0
    hahmo(haviaja).ruokaa = 0
    IF hahmo(voittaja).rahaa < 5 THEN
        hahmo(voittaja).rahaa = hahmo(voittaja).rahaa + 1
    ELSEIF hahmo(voittaja).ruokaa < 5 THEN
        hahmo(voittaja).ruokaa = hahmo(voittaja).ruokaa + 1
    END IF
  END IF
 
  END IF
  IF NOT nakymaton THEN DO: LOOP UNTIL INKEY$ <> ""

   '' Vahennetaan taistelussa menehtyneet miehet!!!!
   FOR i = 1 TO 2
    IF voittaja = vastus(i).vastus THEN
     hahmo(voittaja).meleeukot = hahmo(voittaja).meleeukot - (vastus(i).miekat - hengis(i, 1))
     hahmo(voittaja).ampujat = hahmo(voittaja).ampujat - (vastus(i).jouset - hengis(i, 0))
     hahmo(voittaja).heitto = hahmo(voittaja).heitto - (vastus(i).heitto - hengis(i, 2))
    ELSEIF haviaja = vastus(i).vastus AND vastus(i).vastus <= 3 THEN
     hahmo(haviaja).meleeukot = hahmo(haviaja).meleeukot - (vastus(i).miekat - hengis(i, 1))
     hahmo(haviaja).ampujat = hahmo(haviaja).ampujat - (vastus(i).jouset - hengis(i, 0))
     hahmo(haviaja).heitto = hahmo(haviaja).heitto - (vastus(i).heitto - hengis(i, 2))
    END IF
   NEXT
   
  
    '' Jos hvij liittoumalta loppui miehist
    IF hahmo(haviaja).meleeukot + hahmo(haviaja).ampujat + hahmo(haviaja).heitto <= 0 AND haviaja <= 3 THEN
        IF NOT nakymaton THEN
         PiirraTaulu 90, 60, 200, 120, 0, 0
         tc = 44
         Font RTRIM$(hahmo(haviaja).johtaja) + " sek", tc, 98, 67, 1, ""
         Font "tmn liittouma", tc, 98, 75, 1, ""
         Font "ovat kaatuneet!", tc, 98, 83, 1, ""
         HiiriShow
         Hyvaksy 110, 180, 103, 113
        END IF
        '' Siirretn hvijn maat voittajalle
        'FOR i = 4 TO 6
        'IF hahmo(i).liittouma = hahmo(haviaja).liittouma THEN hahmo(i).liittouma = 4: hahmo(i).pelaaja = "Tietokone"
        'NEXT
     END IF
  
   '' Jos pelataan klassista peli, haviaja kuolletetaan!
   IF klassinen AND hahmo(haviaja).meleeukot + hahmo(haviaja).ampujat + hahmo(haviaja).heitto <= 0 AND haviaja < 4 THEN
     hahmo(haviaja).liittouma = 0
     ''Katsotaan viel voittiko voittaja koko pelin
     kultaa = 0
     FOR i = 1 TO 3
       IF RTRIM$(hahmo(i).pelaaja) > "" OR hahmo(i).liittouma > 0 THEN kultaa = kultaa + 1
     NEXT
     IF kultaa <= 1 THEN voitto = voittaja: finished = TRUE
     ''Lopetetaan peli, jos ei pelaajien hahmoja jljell
     kultaa = 0
     FOR i = 1 TO 3
       IF NOT hahmo(i).pelaaja = "Tietokone" AND hahmo(i).liittouma > 0 THEN kultaa = kultaa + 1
     NEXT
     IF kultaa = 0 THEN finished = TRUE
   END IF
  
   '' Koska taisteluun siirrytn aina vasta kun kaikki ovat tehneet pivn
   '' vuoronsa voimme aloittaa suoraan uuden kierrosksen (siirretn vuoro pivn ensimmisell pelaajalle)
   IF hahmo(1).pelaaja > "" THEN
     vuorossa = 1
   ELSEIF hahmo(2).pelaaja > "" THEN
     vuorossa = 2
   ELSE
     vuorossa = 3
   END IF
  
   ''Lopuksi tyhjennetaan vastus -taulukot vanhoista tiedoista
    FOR i = 1 TO 2
     TyhjaaVastus (i)
    NEXT
    FOR i = 1 TO 40
      Ukko(i).tila = ""
      Kaytetty(i) = 0
    NEXT
    loppu = FALSE  ''merkitn taistutila lopetetuksi
    taisto = FALSE   ''merkitn taistelu pttyneeksi
 END IF
 '' Alotetaan uusipiv
 VaihdaPaiva
END SUB

FUNCTION MikaLiitto$ (liitto)
'' Funktio, joka palauttaa liitontunnuksen liittouman nimena.
'' (esim. MikaLiitto$ (1) palauttaa "Aateliset")
  SELECT CASE liitto
    CASE 1: MikaLiitto$ = "Aateliset"
    CASE 2: MikaLiitto$ = "Talonpojat"
    CASE 3: MikaLiitto$ = "Metsnvki"
    CASE 4, 5, 6: MikaLiitto$ = "Juntit"
  END SELECT
END FUNCTION

REM $DYNAMIC
FUNCTION MikaSotilas$ (liitto, hahmo)
'' Funktio, joka palauttaa tietyn liiton (liitto) hahmon tunnuksen. 1=melee, muuten jousi
DIM ret AS STRING
  SELECT CASE liitto
    CASE 1:
        IF hahmo = 1 THEN ret = "Ritari"
        IF hahmo = 0 THEN ret = "Jousimies"
        IF hahmo = 2 THEN ret = "Keihsmies"
    CASE 2:
        IF hahmo = 1 THEN ret = "Soturi"
        IF hahmo = 0 THEN ret = "Metsstj"
        IF hahmo = 2 THEN ret = "Seivsmies"
    CASE 3:
        IF hahmo = 1 THEN ret = "Maahinen"
        IF hahmo = 0 THEN ret = "Tonttu"
        IF hahmo = 2 THEN ret = "Susimies"
    CASE 4, 5, 6: ret = "Juntti"
  END SELECT
  MikaSotilas$ = ret
END FUNCTION

SUB MuutaSankariksi
 DIM spritenum
 IF char > 0 THEN AktivoiTile 0, 0       '' resetoidaan aktivoitu tile
 AsetaTekstit TRUE, TRUE, FALSE
 Font "Valitse ukko", 49, 5, 184, 1, "shade"
 Font "sankariksi!", 49, 5, 191, 1, "shade"

 DO
  key$ = INKEY$
  HiiriShow
  HiiriStatus VH, OH, MX, MY, hx, hy
  IF VH <> 0 THEN
        HiiriHide
        TarkistaRuutu hx, hy, spritenum
        IF KenenSotilas(Ukko(spritenum).nimi) = vuorossa THEN
          '' Asetetaan hahmon tila raivohulluksi
          MID$(Ukko(spritenum).tila, 3, 1) = "S"
          '' Piirretn ukko
          Piirraukko KenenSotilas(Ukko(spritenum).nimi), SotilaanTyyppi(Ukko(spritenum).nimi), Ukko(spritenum).x * 16 - 9, Ukko(spritenum).y * 16 - 15, spritenum
          '' Jos ukko on(oli) akt.hahmo niin otamme uuden kuvan hahmosta.
          IF Ukko(spritenum).x = tempX AND Ukko(spritenum).y = tempY THEN
                '' Otetaan uusi kuva vanhasta
                GET ((Ukko(spritenum).x - 1) * 16 + 7, (Ukko(spritenum).y - 1) * 16 + 1)-(Ukko(spritenum).x * 16 + 6, Ukko(spritenum).y * 16), korostus
          END IF
          '' nollataan Taito -pisteet
          IF vuorossa = vastus(1).vastus THEN vastus(1).mana = 1 ELSE vastus(2).mana = 1
          key$ = "q"
        END IF
  ELSEIF OH <> 0 THEN
         HiiriHide
         CALL NaytaTile(hx, hy)
  END IF
 LOOP UNTIL key$ = "q" OR key$ = CHR$(27)

 AsetaTekstit TRUE, TRUE, FALSE
 IF NOT nakymaton THEN Delay .2
END SUB

SUB NaytaAste (mittari$, kumpi)
 IF NOT nakymaton THEN
 SELECT CASE mittari$
 CASE "viha"
  IF vastus(kumpi).viha < 1 THEN vastus(kumpi).viha = 1
  LINE (7, 177)-(112, 182), 19, BF
  LINE (8, 178)-(8, 182), 28
  LINE (110, 178)-(110, 182), 28
   LINE (9, 179)-(109, 181), 86, BF  '20
  LINE (9, 178)-(9 + vastus(kumpi).viha, 178), 84, BF
  LINE (9, 182)-(9 + vastus(kumpi).viha, 182), 84, BF
  LINE (9, 179)-(9 + vastus(kumpi).viha, 181), 83, BF
  LINE (10, 180)-(8 + vastus(kumpi).viha, 180), 81, BF
  IF vastus(kumpi).viha >= 30 THEN Font "v", 87, 35, 176, 1, "shade"
  IF vastus(kumpi).viha >= 40 THEN Font "  i", 87, 35, 176, 1, "shade"
  IF vastus(kumpi).viha >= 55 THEN Font "    h", 87, 35, 176, 1, "shade"
  IF vastus(kumpi).viha > 65 THEN Font "      a", 87, 35, 176, 1, "shade"
 CASE "mana"
  LINE (197, 177)-(312, 182), 19, BF
  LINE (198, 178)-(198, 182), 28
  LINE (310, 178)-(310, 182), 28
   LINE (199, 179)-(309, 181), 110, BF
  IF vastus(kumpi).mana < 1 THEN vastus(kumpi).mana = 1
  LINE (199, 178)-(199 + vastus(kumpi).mana, 178), 104, BF
  LINE (199, 182)-(199 + vastus(kumpi).mana, 182), 104, BF
  LINE (199, 179)-(199 + vastus(kumpi).mana, 181), 103, BF
  LINE (200, 180)-(198 + vastus(kumpi).mana, 180), 102, BF
  IF vastus(kumpi).mana > 42 THEN Font "t", 108, 235, 176, 1, "shade"
  IF vastus(kumpi).mana >= 52 THEN Font "  a", 108, 235, 176, 1, "shade"
  IF vastus(kumpi).mana >= 67 THEN Font "    i", 108, 235, 176, 1, "shade"
  IF vastus(kumpi).mana >= 77 THEN Font "      t", 108, 235, 176, 1, "shade"
  IF vastus(kumpi).mana > 87 THEN Font "        o", 108, 235, 176, 1, "shade"
 END SELECT
 END IF
END SUB

SUB NaytaTile (locX, locY)
'' Nayttaa annetussa sijainnissa alla olevan tilen tiedot!
 HiiriHide
 DIM under(3390)
 TarkistaRuutu locX, locY, tilenum
 IF tilenum > 0 THEN
  GET (200, 110)-(310, 170), under  ''kuva ennen taulun piirtoa
   PiirraTaulu 200, 110, 300, 165, 0, 48
   tc = 43
  Font RTRIM$(Ukko(tilenum).nimi), tc, 210, 117, 1, ""
   tc = 48
   Font " Teho:  " + Fixed(LataaTile(Ukko(tilenum).nimi, "teho", tilenum)), tc, 210, 127, 1, "shade"
    IF LataaTile(Ukko(tilenum).nimi, "kanto", tilenum) > 1 THEN Font "(" + Fixed(LataaTile(Ukko(tilenum).nimi, "tehoK", tilenum)) + ")", tc, 265, 127, 1, "shade"
   Font " Pb:    " + Fixed(LataaTile(Ukko(tilenum).nimi, "pb", tilenum)), tc, 210, 135, 1, "shade"
   Font " Kanto: " + Fixed(LataaTile(Ukko(tilenum).nimi, "kanto", tilenum)), tc, 210, 143, 1, "shade"
   tc = 43
   FOR mika = 1 TO 6
    IF KenenSotilas(Ukko(tilenum).nimi) = mika THEN Font MikaLiitto$(mika), tc, 210, 154, 1, ""
   NEXT

 HiiriShow
 Delay (.2)
 DO
  HiiriStatus VH, OH, MX, MY, hx, hy
 LOOP WHILE OH <> 0
 HiiriHide
 PUT (200, 110), under, PSET  ''palautetaan pohja
 END IF
END SUB

SUB NaytaTulilinja (VH, OH)
'--- Nayta hahmon hyokkays etaisyyden! HUOM. (VH,OH) ei pakollinen, laittaa
'--- vain muistiin lahtiessa mita painettiin. (nopeuttaa..)
 HiiriHide

 ''Piirretaan laatikot!
 nX = 1: nY = 0
 GOSUB naytaAlue:
 nX = -1: nY = 0
 GOSUB naytaAlue:
 nX = 0: nY = 1
 GOSUB naytaAlue:
 nX = 0: nY = -1
 GOSUB naytaAlue:
 nX = 1: nY = 1
 GOSUB naytaAlue:
 nX = -1: nY = 1
 GOSUB naytaAlue:
 nX = -1: nY = -1
 GOSUB naytaAlue:
 nX = 1: nY = -1
 GOSUB naytaAlue:
 DO
 key$ = INKEY$
  HiiriShow
  HiiriStatus VH, OH, MX, MY, hx, hy                       'tutkitaan hiiren sijainti ja nappien tilat
  IF OH <> 0 OR OH <> 0 THEN
        NaytaTile hx, hy
  ELSEIF VH <> 0 OR OH <> 0 THEN
        EXIT DO
  END IF
 LOOP WHILE key$ = ""
 HiiriHide
 PiirraKentta 0
 LINE (0, 0)-(319, 0), 22
 ''Korostetaan valittu hahmo
 LINE ((Ukko(char).x - 1) * 16 + 7, (Ukko(char).y - 1) * 16 + 1)-(Ukko(char).x * 16 + 6, Ukko(char).y * 16), 82, B, &H7777
 

 EXIT SUB

naytaAlue:
 FOR P = 1 TO LataaTile(Ukko(char).nimi, "kanto", char)
  c = 88 + (1 * P)
  IF Ukko(char).y + (nY * P) > 11 THEN EXIT FOR
  IF Ukko(char).x + (nX * P) > 19 THEN EXIT FOR
  IF (Ukko(char).x + nX * P) + (n * nX) <= 0 THEN EXIT FOR
  IF (Ukko(char).y + nY * P) + (n * nY) <= 0 THEN EXIT FOR
  LINE (16 * (Ukko(char).x + nX * P) + (n * nX + 8), 16 * (Ukko(char).y + nY * P) + (n * nY))-(16 * (Ukko(char).x + nX * P) + (n * nX - 8), 16 * (Ukko(char).y + nY * P) + (n * nY - 16)), c, B
 NEXT
 RETURN
END SUB

REM $STATIC
SUB Parannus
 ''Kyd taistelijat lpi. Parannetaan omat!
 FOR i = 1 TO ukkoja
  IF KenenSotilas(Ukko(i).nimi) = vuorossa AND MID$(Ukko(i).tila, 2, 1) = "H" THEN
     MID$(Ukko(i).tila, 2, 1) = " "
  END IF
 NEXT

 PiirraKentta 0
 '' nollataan Taito -pisteet
 IF vuorossa = vastus(1).vastus THEN vastus(1).mana = 1 ELSE vastus(2).mana = 1
END SUB

REM $DYNAMIC
SUB PiirraKentta (mode%)
DIM ruutuX, ruutuY, tilenum
 FOR ruutuY = 1 TO 11
 FOR ruutuX = 1 TO 19
  tilenum = 0
  CALL PiirraTile(tilenum, ruutuX, ruutuY)
 NEXT: NEXT

 FOR ruutuY = 1 TO 11
 FOR ruutuX = 1 TO 19
  tilenum = map(mapnum, ruutuX, ruutuY)
  IF tilenum > 0 THEN CALL PiirraTile(tilenum, ruutuX * 16 - 9, ruutuY * 16 - 15)
   IF LataaTile(MikaTile(tilenum), "koko", 0) = 2 THEN CALL PiirraTile(tilenum + 1, (ruutuX - 1) * 16 - 9, ruutuY * 16 - 15)
 NEXT: NEXT
 
 FOR tilenum = 1 TO ukkoja
  IF RTRIM$(Ukko(tilenum).nimi) > "" THEN
    IF mode% = 0 THEN CALL Piirraukko(KenenSotilas(Ukko(tilenum).nimi), SotilaanTyyppi(Ukko(tilenum).nimi), Ukko(tilenum).x * 16 - 9, Ukko(tilenum).y * 16 - 15, tilenum)
    IF mode% <> 0 THEN
        i = INT(RND * 5) + 1
        IF i >= 4 THEN CALL Piirraukko(KenenSotilas(Ukko(tilenum).nimi), SotilaanTyyppi(Ukko(tilenum).nimi), Ukko(tilenum).x * 16 - 9, Ukko(tilenum).y * 16 - 15, tilenum)
        IF i >= 1 AND i < 4 THEN PUT (Ukko(tilenum).x * 16 - 9, Ukko(tilenum).y * 16 - 15), kysym2, AND: PUT (Ukko(tilenum).x * 16 - 9, Ukko(tilenum).y * 16 - 15), kysym, OR
    END IF
    '' Jos hahmo on toiminut merkataan niin monta rastia
    IF Kaytetty(tilenum) > 0 THEN
      FOR i = 1 TO Kaytetty(tilenum)
       PSET (16 * Ukko(tilenum).x + 2, 16 * Ukko(tilenum).y - 11 + (Kaytetty(tilenum) * 4) - 4), 80: DRAW "e4g2h2f4"
      NEXT
    END IF
  END IF
 NEXT
END SUB

SUB PikaApu
 HiiriHide
 GET (200, 110)-(310, 170), tempget
  
 PiirraTaulu 200, 110, 300, 165, 0, 49
 tc = 44
 Font "VH= vasen hiiri", tc, 208, 117, 1, ""
 Font "OH= oikea hiiri", tc, 208, 124, 1, ""
 Font "[n] Nyt kanto", tc, 207, 133, 1, ""
 Font "[tab] Ohita vro", tc, 207, 140, 1, ""
 Font "[?] Pikaapu", tc, 207, 147, 1, ""
 Delay (.2)
 HiiriShow
 DO
  key$ = INKEY$
  HiiriStatus VH, OH, MX, MY, hx, hy
 LOOP UNTIL VH <> 0 OR INKEY$ <> ""
 HiiriHide
 PUT (200, 110), tempget, PSET
END SUB

FUNCTION SotilaanTyyppi (hahmo$)
  SELECT CASE RTRIM$(hahmo$)
    CASE "Ritari", "Soturi", "Maahinen": SotilaanTyyppi = 1
    CASE "Jousimies", "Metsstj", "Tonttu", "Juntti": SotilaanTyyppi = 0
    CASE "Keihsmies", "Seivsmies", "Susimies": SotilaanTyyppi = 2
  END SELECT
END FUNCTION

REM $STATIC
SUB Sovinto
 DIM hinta, vinner

 ''Jos vastassa EPH (pitj) ei sovintoa voi tehd
 IF vastus(1).vastus = vuorossa THEN
   IF vastus(2).vastus > 3 THEN EXIT SUB
 ELSEIF vastus(2).vastus = vuorossa THEN
   IF vastus(1).vastus > 3 THEN EXIT SUB
 END IF

 '' Luovutuksen kustannukset
 hinta = 20

 GET (90, 50)-(228, 133), tempget
 PiirraTaulu 90, 50, 222, 127, 0, 0
 
 IF vuorossa = vastus(1).vastus THEN vinner = 2 ELSE vinner = 1
 IF vastus(vinner).vastus = 1 THEN PUT (100, 60), face, PSET
 IF vastus(vinner).vastus = 2 THEN PUT (100, 60), face2, PSET
 IF vastus(vinner).vastus = 3 THEN PUT (100, 60), face3, PSET

 tc = 43
 Font RTRIM$(hahmo(vastus(vinner).vastus).johtaja) + " suo-", 43, 124, 60, 1, ""
 Font "stuu sovintoon", tc, 124, 68, 1, ""
 Font Fixed(hinta) + "g:lla hopeaa!", tc, 124, 76, 1, ""
 CALL PiirraNappi(105, 95, 210, 105, "")
 Font "   Maksa " + Fixed(hinta) + ",-", tc - 1, 110, 97, 1, ""
 CALL PiirraNappi(105, 110, 210, 120, "")
 Font "    Peruuta", tc - 1, 110, 112, 1, ""

 Delay (.2)
 HiiriShow
 DO
  key$ = INKEY$
  HiiriStatus VH, OH, MX, MY, hx, hy
    IF VH <> 0 THEN
      IF MX > 210 AND MY > 95 AND MX < 420 AND MY < 105 THEN
        IF hahmo(vastus(vuorossa).vastus).rahaa >= hinta THEN
           hahmo(vastus(vuorossa).vastus).rahaa = hahmo(vastus(vuorossa).vastus).rahaa - hinta
        ELSE
        '' Jos ei varaa maksaa maksetaan 'valtion pussista'
            hahmo(vastus(vuorossa).vastus).rahaa = 0
            hahmo(vastus(vinner).vastus).rahaa = hahmo(vastus(2).vastus).rahaa + hinta
        END IF
        HiiriHide
        hinta = 0
        char = 666      '' sovinnon 'koodi'
        loppu = TRUE    '' todetaan taistelu loppuneeksi
        Delay .2
      END IF
    END IF
 LOOP UNTIL INKEY$ <> "" OR MX > 210 AND MY > 110 AND MX < 420 AND MY < 120 AND VH <> 0 OR hinta = 0
 HiiriHide
 PUT (90, 50), tempget, PSET
 Delay .2
END SUB

SUB Taistelu
 ''- Taisteluiden pohjelma
 DIM bb

 '' Jos tietokone pelaa tietokonetta vastaan asetetaan ns. nkymtntil plle!
 IF hahmo(vastus(1).vastus).pelaaja = "Tietokone" AND hahmo(vastus(2).vastus).pelaaja = "Tietokone" THEN
    PiirraTaulu 90, 60, 200, 120, 0, 0
    Font RTRIM$(hahmo(vastus(1).vastus).johtaja) + " sek", 44, 98, 67, 1, ""
    Font RTRIM$(hahmo(vastus(2).vastus).johtaja), 44, 98, 75, 1, ""
    Font "kyvt taistoon...", 44, 98, 83, 1, ""
    nakymaton = TRUE
 END IF

 '' Tehdn taistelun alukuvalmistelut, grafiikat
 ValmisteleTaistelu

 '' Ukkojen kentalle asettelu
 vuorossa = vastus(2).vastus
 IF NOT nakymaton THEN AsetaTekstit TRUE, TRUE, TRUE
 UkkojenAsettelu   ''puolustaja asettaa
 '' Piilotetaan osa puolustajista (jos hykkj ei tietokone)
 IF NOT nakymaton THEN
   IF NOT hahmo(vastus(1).vastus).pelaaja = "Tietokone" THEN PiirraKentta 1 ELSE PiirraKentta 0
 END IF
 vuorossa = vastus(1).vastus
 IF NOT nakymaton THEN AsetaTekstit TRUE, TRUE, TRUE
 UkkojenAsettelu   ''sitten hyokkaaja
 IF nakymaton THEN Font "Asettelu Ok!", 44, 98, 90, 1, ""
 IF NOT nakymaton THEN PiirraKentta 0

 VuoronVaihto                        '' Puolustaja saa alottaa..
 IF hahmo(vuorossa).tornit > 0 AND mapnum < 4 THEN  '' ..jos kartalla torneja!
        vuorot = hahmo(vuorossa).tornit * 2
        IF vuorot > vastus(2).heitto + vastus(2).miekat + vastus(2).jouset THEN vuorot = vastus(2).miekat + vastus(2).jouset + vastus(2).heitto
 ELSE                                '' muutoin hyokkaaja aloittaa
        VuoronVaihto
        IF vastus(1).heitto + vastus(1).miekat + vastus(1).jouset > 1 THEN vuorot = 2 ELSE vuorot = 1
 END IF
 
 IF NOT nakymaton THEN
  '' Viela vahan grafiikkaa...
  AsetaTekstit TRUE, TRUE, TRUE
  Font "Valiste hahmo (VH)", 47, 204, 184, 1, ""
  Font "Nyt kyvyt   (OH)", 47, 204, 191, 1, ""
  tempX = 1: tempY = 1
  GET ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1)-(tempX * 16 + 6, tempY * 16), korostus
 END IF
 AktivoiAi 1 ''Pivitetn ukkojen mr

Paalooppi:
 DO
  IF hahmo(vuorossa).pelaaja = "Tietokone" THEN '' Vuoro on AI:lla"
    HiiriHide
    '' Jos aipl=vastus(2).vastus, niin AI on puolustaja jolloin kutsutaan
    '' AI-liikett puolustajille. Muuten kutsutaan AI-liikett
    '' hykkjille.
    'AktivoiAi 1 ''Pivitetn ukkojen mr
   
    '' Aktivoidaan, 1=hykkj ja nollataan liikemiinukset
    '' AI liikuttaa hahmojaan max. mrn
      IF loppu THEN CALL LoppuTili: EXIT SUB
      '' Haetaan uudet vkiluvut, varmuuden vuoksi
      '' Liikutetaan vastustajia
      IF vuorossa = vastus(1).vastus THEN CALL AImove(1) ELSE CALL AImove(2)
  END IF
  IF NOT nakymaton OR NOT hahmo(vuorossa).pelaaja = "Tietokone" THEN
   '' muutoin pelaaja suorittaa vuoron
   key$ = INKEY$
   HiiriShow
   HiiriStatus VH, OH, MX, MY, hx, hy
   IF OH <> 0 THEN
         HiiriHide
         CALL NaytaTile(hx, hy)
   ELSEIF VH <> 0 THEN
          HiiriHide
          IF MX >= 620 AND MX <= 634 AND MY >= 184 AND MY <= 198 THEN
            CALL Sovinto
          ELSEIF MX >= 398 AND MX <= 618 AND MY >= 178 AND MY <= 182 THEN
            IF vuorossa < 4 AND vuorossa = vastus(1).vastus AND vastus(1).mana >= 110 AND NOT nakymaton OR vuorossa < 4 AND vuorossa = vastus(2).vastus AND vastus(2).mana >= 110 THEN CALL TeeTaito
          ELSEIF hx <= 19 AND hy <= 11 THEN
            CALL AktivoiTile(hx, hy)
          END IF
   END IF
  END IF
  IF loppu THEN CALL LoppuTili: EXIT SUB
 LOOP UNTIL key$ <> "" OR finished = TRUE
 IF NOT nakymaton THEN
  IF key$ = "A" THEN
      AktivoiAi 1 '' Aktivoidaan, 1=hykkj
      HiiriHide
      IF hahmo(vastus(2).vastus).pelaaja = "Tietokone" THEN CALL AImove(1) ELSE CALL AImove(2)
      HiiriShow
  END IF
  IF key$ = "n" AND char > 0 THEN NaytaTulilinja VH, OH
  IF key$ = "?" THEN CALL PikaApu
  IF key$ = CHR$(9) OR key$ = "O" THEN
         ''poistetaan vanhan hahmon korostus
         PUT ((tempX - 1) * 16 + 7, (tempY - 1) * 16 + 1), korostus, PSET
         vuorot = 0
         Turnit
  END IF
  IF key$ = "q" OR key$ = CHR$(27) THEN
        HiiriHide
        LopetaPeli
        IF finished THEN EXIT SUB ELSE GOTO Paalooppi
  ELSE
       GOTO Paalooppi
  END IF
  END IF
  HiiriHide
END SUB

REM $DYNAMIC
SUB TarkistaRuutu (kohtaX, kohtaY, tilenum)
'- Tarkistetaan onko annetussa ruudussa ketaan!
 tilenum = 0   'oletus (tyhja)
 FOR i = 1 TO ukkoja
  IF RTRIM$(Ukko(i).nimi) <> "" THEN
   IF Ukko(i).x = kohtaX AND Ukko(i).y = kohtaY THEN
     ''Jos annetusta ositteesta loytyy hahmo...
     tilenum = i                   ''...hahmon numero (muistipaikka)!
   END IF
  END IF
 NEXT
END SUB

REM $STATIC
SUB TeeTaito
''- Subi joka ilmestyy Taito pisteiden tydetty
 IF hahmo(vuorossa).pelaaja = "Tietokone" THEN
   IF vuorossa = vastus(1).vastus THEN
      CALL AiLinkotuli
   ELSE
      CALL Parannus
   END IF
 END IF

 IF hahmo(vuorossa).pelaaja = "Tietokone" THEN EXIT SUB
 HiiriHide
 AsetaTekstit TRUE, TRUE, TRUE
 Font "      Valiste (VH)", 20, 204, 184, 1, ""
 Font "Ohita toiminta (Q)", 20, 204, 191, 1, ""
 GET (80, 30)-(235, 145), tempget
 PiirraTaulu 80, 30, 230, 110, 0, 0  '72,145,49
 tc = 48
 Font "Miehistsi on valmiina", tc, 92 + x, 40, 1, "shade"
 Font "suorittamaan erikois-", tc, 92 + x, 48, 1, "shade"
 Font "toimintansa! Tee ?", tc, 92, 56, 1, "shade"

 PiirraNappi 103, 73, 197, 83, ""
 PiirraNappi 103, 91, 210, 101, ""
 PiirraNappi 200, 73, 210, 83, ""

 tc = 42
 IF MID$(hahmo(vuorossa).taito, 1, 1) = "L" THEN Font " Linkotuli", tc, 115, 74, 1, ""
 IF MID$(hahmo(vuorossa).taito, 1, 1) = "P" THEN Font " Parannus", tc, 115, 74, 1, ""
 IF MID$(hahmo(vuorossa).taito, 1, 1) = "S" THEN Font " Sankaruus", tc, 115, 74, 1, ""
 Font "Ohita toiminta", tc + 1, 116, 92, 1, ""
 Font "?", 48, 202, 75, 1, ""

 DO
  key$ = INKEY$
  HiiriShow
  HiiriStatus VH, OH, MX, MY, hx, hy
  IF VH <> 0 THEN
    HiiriHide
    IF MX >= 400 AND MX <= 420 AND MY >= 73 AND MY <= 83 THEN
         PiirraTaulu 80, 117, 230, 133, 0, 0  '72,145,49
         IF MID$(hahmo(vuorossa).taito, 1, 1) = "L" THEN Font "Tuhoaa rakennuksia", 49, 105, 124, 1, "shade"
         IF MID$(hahmo(vuorossa).taito, 1, 1) = "P" THEN Font "Parantaa miehistn", 49, 105, 124, 1, "shade"
         IF MID$(hahmo(vuorossa).taito, 1, 1) = "S" THEN Font "Buustaa taistelijaa", 49, 105, 124, 1, "shade"
         Delay .1
    ELSEIF MX >= 206 AND MX < 393 AND MY >= 73 AND MY <= 83 THEN
         PUT (80, 30), tempget, PSET
         Delay .1
           IF MID$(hahmo(vuorossa).taito, 1, 1) = "L" THEN CALL LinkoTuli
           IF MID$(hahmo(vuorossa).taito, 1, 1) = "P" THEN CALL Parannus
           IF MID$(hahmo(vuorossa).taito, 1, 1) = "S" THEN CALL MuutaSankariksi
         key$ = "qu": tc = 1
    ELSEIF MX >= 206 AND MX < 420 AND MY >= 91 AND MY <= 101 THEN
         ''Ohita
         key$ = "qu"
         PUT (80, 30), tempget, PSET
    END IF
    ELSEIF key$ = "q" OR key$ = CHR$(27) THEN
         key$ = "qu"
         PUT (80, 30), tempget, PSET
  END IF
 LOOP UNTIL key$ = "qu"
 HiiriHide
 AsetaTekstit TRUE, TRUE, TRUE
 Font "Valiste hahmo (VH)", 20, 204, 184, 1, ""
 Font "Nyt kyvyt   (OH)", 20, 204, 191, 1, ""
 IF vuorossa = vastus(1).vastus THEN NaytaAste "viha", 1: NaytaAste "mana", 1 ELSE NaytaAste "viha", 2: NaytaAste "mana", 2
END SUB

REM $DYNAMIC
SUB Turnit
'' Suoritetaan vuoronvhennys. Merkitn kytetty hahmo ja vuoronvaihto tarvittaessa
DIM toimintoja
HiiriHide

 '' Hahmoa kytetty kerran lis
 Kaytetty(char) = Kaytetty(char) + 1
 IF NOT nakymaton THEN PSET (16 * Ukko(char).x + 2, 16 * Ukko(char).y - 11), 80: DRAW "e4g2h2f4"
 IF NOT nakymaton AND Kaytetty(char) = 2 THEN PSET (16 * Ukko(char).x + 2, 16 * Ukko(char).y - 11 + 4), 80: DRAW "e4g2h2f4"
 
 ''Vahennetaan vuoroja
 vuorot = vuorot - Kaytetty(char) ''toimintoja
 '' nollaataan ain liike laskuri
 aiLiike = 0

 ''Jos vuorot loppuu vaihdetaan vuoronsuoirttajaa!
 IF vuorot <= 0 THEN
        '' Kydn hahmot lpi
        FOR i = 1 TO 40 'ukkoja
         IF RTRIM$(Ukko(i).nimi) <> "" THEN
            '' jos hahmo ei toiminut nostetaan manaa
            IF KenenSotilas(Ukko(i).nimi) = vuorossa AND Kaytetty(i) = 0 THEN
              IF vuorossa = vastus(1).vastus THEN vastus(1).mana = vastus(1).mana + 6 ELSE vastus(2).mana = vastus(2).mana + 6
            END IF
            '' Poistetaan vanhat kaytetty merkit (x) ukoista ja
            '' resetoidaan kaytetty-taulukko uutta kayttoa varten,
            IF KenenSotilas(Ukko(i).nimi) = vuorossa THEN
              IF NOT nakymaton THEN PiirraTile map(mapnum, Ukko(i).x, Ukko(i).y), Ukko(i).x, Ukko(i).y
              IF NOT nakymaton THEN Piirraukko KenenSotilas(Ukko(i).nimi), SotilaanTyyppi(Ukko(i).nimi), 16 * Ukko(i).x - 9, 16 * Ukko(i).y - 15, i
              Kaytetty(i) = 0
            END IF
         END IF
        NEXT
        IF vuorossa = vastus(1).vastus AND vastus(1).mana > 110 OR vuorossa = vastus(2).vastus AND vastus(2).mana > 110 THEN
         IF vuorossa = vastus(1).vastus THEN vastus(1).mana = 110 ELSE vastus(2).mana = 110
        END IF
        ''vaihdetaan vuoro toiselle pelaajalle
        VuoronVaihto
        char = 0
        IF vuorossa = vastus(1).vastus THEN NaytaAste "viha", 1: NaytaAste "mana", 1 ELSE NaytaAste "viha", 2: NaytaAste "mana", 2
       
        vuorot = 0
        '' Lasketaan uudet vuorot
        FOR i = 1 TO 40
          IF RTRIM$(Ukko(i).nimi) > "" THEN
           IF KenenSotilas(Ukko(i).nimi) = vuorossa THEN vuorot = vuorot + 1
          END IF
        NEXT

        IF NOT nakymaton THEN
         ''Poistetaan vanhan hahmon korostus. Varmuudeksi
         PiirraTile map(mapnum, Ukko(char).x, Ukko(char).y), Ukko(char).x, Ukko(char).y
         Piirraukko KenenSotilas(Ukko(char).nimi), SotilaanTyyppi(Ukko(char).nimi), 16 * tempX - 9, 16 * tempY - 15, 0
        END IF

         ''Jos taitopisteet tysi tehdn Taito
        IF vuorossa < 4 AND vuorossa = vastus(1).vastus AND vastus(1).mana >= 110 AND NOT nakymaton OR vuorossa < 4 AND vuorossa = vastus(2).vastus AND vastus(2).mana >= 110 AND NOT nakymaton THEN
         IF NOT nakymaton THEN Delay .5
         CALL TeeTaito
        END IF
 END IF
 IF NOT nakymaton THEN
  AsetaTekstit TRUE, TRUE, FALSE
  HiiriShow
 END IF
END SUB

'' tyhjaa hahmon tiedot Ukko()-taulukosta
SUB TyhjaaUkko (i)
 Ukko(i).nimi = ""
 Ukko(i).x = 0
 Ukko(i).y = 0
END SUB

SUB TyhjaaVastus (i)

 vastus(i).vastus = 0
 vastus(i).miekat = 0
 vastus(i).jouset = 0
 vastus(i).heitto = 0
 vastus(i).mana = 0
 vastus(i).viha = 0
 FOR x = 1 TO 20
  oliolinkit(i, x) = 0
 NEXT

END SUB

SUB UkkojenAsettelu
 '' - SUBI joka suorittaa sotilaiden asettelun kentlle
 DIM Ukot(2)
 '' Ai asettaa jos kone vuorossa ...
 IF hahmo(vuorossa).pelaaja = "Tietokone" THEN
  CALL AiAseta(vuorossa)
  EXIT SUB
 ELSE
  ''Muutoin pelaaja asetaa
  ''Otetaan hahmot valiaikaisiin nimekkeisiin (ukko1 jne..)
  FOR i = 1 TO 2
   IF vastus(i).vastus = vuorossa THEN Ukot(1) = vastus(i).miekat
   IF vastus(i).vastus = vuorossa THEN Ukot(0) = vastus(i).jouset
   IF vastus(i).vastus = vuorossa THEN Ukot(2) = vastus(i).heitto
  NEXT
  '' Onko sotilaita asetettu ennemmin kartalle
  IF vuorossa = vastus(1).vastus THEN
     '' puolustus on asetettu, jatketaan viimeisest
     i = vastus(2).miekat + vastus(2).jouset + vastus(2).heitto
  ELSE
     i = 0   '' Muutoin lahdetaan nollasta
  END IF
 
asetus:
  Font "Aseta hahmo   (VH)", 47, 200, 184, 1, ""
  Font "Vaihda hahmoa [tab", 47, 200, 191, 1, ""

  tc = 45
  ''Piirretaan kentan rajoitukset
  IF vuorossa = vastus(1).vastus THEN
   FOR x = 7 TO 310 STEP 2
     PSET (x, 33), tc: DRAW "d111"
   NEXT
  ELSE
   FOR x = 7 TO 310 STEP 2
     PSET (x, 1), tc: DRAW "d31"
     PSET (x, 145), tc: DRAW "d31"
   NEXT
  END IF
 
  DO
  key$ = INKEY$
   HiiriShow
   HiiriStatus VH, OH, MX, MY, hx, hy
   IF Ukot(0) <= 0 AND Ukot(1) <= 0 AND Ukot(2) = 0 THEN
         EXIT SUB
   END IF
   IF key$ = " " AND hx <= 19 AND hx > 0 AND hy <= 11 AND hy > 0 OR VH <> 0 AND hx <= 19 AND hx > 0 AND hy <= 11 AND hy > 0 THEN
    HiiriHide
     '' Onko ruutu tyhja?
     TarkistaRuutu hx, hy, tilenum
     '' Jos sijainti ei ylit rajoja voidaan asetus suorittaa
     IF vuorossa = vastus(1).vastus AND hy <= 2 OR vuorossa = vastus(1).vastus AND hy >= 10 OR vuorossa = vastus(2).vastus AND hy > 2 AND hy < 10 THEN
       '' tarkistetaan tulos... Jos ruutu tyhja niin asetetaan ukko!
       IF tilenum = 0 AND map(mapnum, hx, hy) = 0 THEN
          IF Ukot(num) > 0 THEN
                 LINE (5, 192)-(95, 198), 19, BF
                 Ukot(num) = Ukot(num) - 1
                 i = i + 1
                 AsetaUkko vuorossa, num, hx, hy, i
           ELSE
                 tilenum = 0           'Jos hahmoja jaljella 0
           END IF
          
          Font "Jljell:" + Fixed(Ukot(num)), 49, 7, 191, 1, "shade"
       ELSE
        tilenum = 0                   'Jos paikka on varattu tai muutoin kielletty
       END IF
     Delay (.2)
    END IF
   END IF
  LOOP WHILE key$ = ""
   IF key$ = "q" OR key$ = CHR$(27) THEN
          HiiriHide
          LopetaPeli
          IF finished THEN END
   ELSEIF key$ = CHR$(9) AND hx <= 19 AND hy <= 11 THEN
          num = num + 1
          IF num > 2 THEN num = 0
          LINE (5, 185)-(95, 198), 19, BF
          Font MikaSotilas$(vuorossa, num), 49, 7, 184, 1, "shade"
          Font "Jljell:" + Fixed(Ukot(num)), 49, 7, 191, 1, "shade"
          HiiriHide
   END IF
  GOTO asetus
 END IF
END SUB

REM $STATIC
SUB ValmisteleTaistelu

 '' Asetetaan taistelutila plle
 taisto = TRUE
 '' Oletus - vastus 1 alottaa
 vuorossa = vastus(1).vastus
 vuorot = 0
 aiLiike = 0
 ukkoja = vastus(1).miekat + vastus(1).jouset + vastus(1).heitto + vastus(2).miekat + vastus(2).jouset + vastus(2).heitto
 ' alustetaan olioiden mrt
 CrNum(1) = vastus(1).miekat + vastus(1).jouset + vastus(1).heitto: CrNum(2) = vastus(2).miekat + vastus(2).jouset + vastus(2).heitto

 '' Tyhjtn vanhat tiedot ukoista (varmuudeksi)
 FOR i = 1 TO 40
   TyhjaaUkko i
 NEXT

 IF NOT nakymaton THEN
 '' Piirretaan kaunistuksia
 HiiriRange 0, 0, 630, 195
 PAINT (1, 1), 22
 FOR y = 1 TO 186 STEP 6
  PUT (0, y), reuna5, PSET
  PUT (313, y), reuna5, PSET
 NEXT
 
 FOR x = 0 TO 300 STEP 20
  PUT (x, 177), tiili, PSET
  PUT (x, 180), tiili, PSET
 NEXT
 PUT (300, 177), tiili, PSET
 PUT (300, 180), tiili, PSET

 LINE (5, 177)-(117, 183), 19, BF
 LINE (192, 177)-(314, 183), 19, BF

 DRAW "bm0,177c24r5c21d7r112c24u7r74d7c21r123c24u7r6"

 NaytaAste "viha", 1
 NaytaAste "mana", 1

 '' Lopuksi piirretn pohjakartta
 PiirraKentta 0
 END IF
END SUB

