Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Tyhmät kysymykset

Post by MAVmaggot »

Monesti painetaan vaan hit-kerros näkyviin, mutta kuitenkin piirrettään jollain muulla. Mutta jos olet aivan varma, että hitit on kohdallaan pastee vaikka koodisi tänne.
Tilester bug

Re: Tyhmät kysymykset

Post by Tilester bug »

Edelleen, koodissa eikä karttojen teossa ole tehty mitään väärin. olen tarkistanut useita kertoja. kysyn vain satutteko tietämään mitään muuta mahdollisesti vaikuttavaa asiaa?
Ris
Active Member
Posts: 142
Joined: Wed Jul 02, 2008 8:27 pm

Re: Tyhmät kysymykset

Post by Ris »

Tilester bug wrote:Edelleen, koodissa eikä karttojen teossa ole tehty mitään väärin. olen tarkistanut useita kertoja. kysyn vain satutteko tietämään mitään muuta mahdollisesti vaikuttavaa asiaa?
Veikkaisin että se on tilesterin bugi, nimittäin vanhalla foorumilla näin:
http://finhost8.futuron.fi/~coolbasi/ol ... ost&p=8240
Astigma wrote:Mutta luulenpa silti, että törmäyksentunnistuksen pitäisi toimia ihan millä tahansa tilellä eikä pelkästään tilesetin ensimmäisellä tilellä... itsellänikin on se bugi. Bugi on luultavasti Tilesterissä, koska valmiit tilemapit toimivat moitteettomasti, mutta omatekemät eivät toimi. Ukko menee seinien läpi niin että hurahtaa.

EDIT: Näyttäisi siltä, ettei Tilester tallenna ollenkaan törmäyskerrosta. Tein ohjelman, joka näyttää onko tietyssä koordinaateissa seinä, mutta mihinkään kohtaan tilemappia ei ollut tallentunut seinää.
Kannattaa kokeilla Marcoderin Tilegenia tai Astigman Stigmatoria.

Täältä Tilegen: http://koti.mbnet.fi/marcoder/tilegen/

Täältä Astigmator: http://charged.relaa.net/dl_astigmator.php
DumBasZ
Newcomer
Posts: 20
Joined: Fri Aug 29, 2008 7:52 am

Re: Tyhmät kysymykset

Post by DumBasZ »

Miten kannattaisi toteuttaa pausemenu? Siinä pitäis näkyä kaikenlaisia hahmojen tietoja sekä inventory.
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by Eräs cb koodaaja »

Erilliseen looppiin:

Code: Select all

If pause = 1 Then 
Repeat 
'ja piirretään kaikki oleellinen
Drawscreen 
Forever 
Endif
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Ei kai siinä mitään erillisiä luuppeja tarvita.

Code: Select all

    Global x#,d
    d = 1
    
    While 1
      If GetKey()
        Pause=not Pause
      EndIf 
      If Pause Then
        Paused()
      Else
        Playing()
      EndIf 
      Draw()
      DrawScreen 
    Wend 

    // Movement and play
    Function Playing()
      Text 0,0,"Playing, press ANY key"
      x=x+d
      If(x>390 Or x<0)Then d=-d
      // ...
    EndFunction 

    // Pausing
    Function Paused()
      Text 0,0,"Paused, press ANY key"
      // ...
    EndFunction
    
    // Drawing
    Function Draw()
      Color 255,0,0
      Circle x,145,10
      // ...
    EndFunction 
Funktiot taas ovat hyvä ratkaisu, kunhan projektista ei tule massiivista. CoolBasic sisältää nimittäin funktiorajan.
DumBasZ
Newcomer
Posts: 20
Joined: Fri Aug 29, 2008 7:52 am

Re: Tyhmät kysymykset

Post by DumBasZ »

No voiko funktiossa käyttää typen fieldejä? Esim.:

Code: Select all

Function testi()
    Text 125,30,"HP: "+ukko1\health+" / "+ukko1\healthMAX
End Function 
Mulla ei ainakaan toimi =(
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 »

Omassa projektissani ratkaisin tuon ongelman (purkalla?) käyttämällä Gosubia. Se on parempi kuin Goto mutta ei ota parametejä kuten funktiot eikä käytä omia muuttujiaan (eli siis myös ei Globaalit toimivat).
Last edited by temu92 on Thu Sep 18, 2008 8:01 pm, edited 1 time in total.
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish »

DumBasZ wrote:No voiko funktiossa käyttää typen fieldejä? Esim.:

Code: Select all

Function testi()
    Text 125,30,"HP: "+ukko1\health+" / "+ukko1\healthMAX
End Function 
Mulla ei ainakaan toimi =(
Ei toimi, koska sinulla ei ole mitään ukko1:htä siellä funktiossa. Ota se joko parametrinä (käyttäen converttoInteger ja -type funktioita) tai hanki se esimerkiksi for-each loopilla.
CoolBasic henkilökuntaa
Kehittäjä
SuojelusPerkele
Newcomer
Posts: 37
Joined: Tue Sep 09, 2008 4:17 pm

Re: Tyhmät kysymykset

Post by SuojelusPerkele »

Moro, olisi taas pikkunen onkelma: Koetan lisätä räjähteiden käyttämismahdollisuutta, ja tällä hetkellä olen saanut sen verran aikaan että hahmo saa viskattua sen C4-paketin sinne eteensä. Semmonen ennää jotta miten sille saa soitettua räjähdysanimaatiota ja että se poistetaan sen jälkeen ja sen semmosta (hoksaatte varmaan mitä sen pitää tehdä jos räjähtämisestä kyse) painamalla esim. z-nappia. Tältä näyttää tuo c4:n lisääminen, jos auttaa ollenkaan:

Code: Select all

'Aseet & räjähteet''''''''''''''''''''''''''''''''''''''''
     If KeyHit (CBKEYx) Then 
     PlaySound heitto
     newC4.c4s=New(c4s)
     newC4\obj=CloneObject(c4)
     newC4\dmg=150
     CloneObjectPosition newC4\obj,hero
     CloneObjectOrientation newC4\obj,hero
     MoveObject newC4\obj,28
     SetupCollision newC4\obj,map,1,4,2
     EndIf 
Kiitoksia jo nyt ;)
Blooddrunk Game Industry [BGI] :

Unlimited 1.0 = 100%
-Päivityksiä suunnitteilla

Kollaa kestää!
-Suunnitteluvaiheessa
-Tower defence -tyylinen, torju kommunistivyöryt kannaksella
_____
Vertos
Ozcar
Advanced Member
Posts: 439
Joined: Mon Aug 27, 2007 8:43 pm
Location: Helsinki

Re: Tyhmät kysymykset

Post by Ozcar »

SuojelusPerkele: Hommahan hoituu simppelisti vain tarkistamalla, painetaanko sitä zetaa, sitten tarkistetaan onko pommeja laisin maassa (tee vaikkapa muuttuja pommielossa, jonka arvon muutat yhdeksi aina pommin pudotuksen yhteydessä ja nollaat räjäyttäessä), ja sitten isketään pommin paikalle räjähdysanimaatio CloneObjectPositionilla. Sitten vain poistat itse pommin ja toistat animaation ja ääniefektin, ja vot. Ja koska sen funktio on todennäköisesti tehdä kipiää vihuille niin vaikka kaiken päälliseksi tarkistetaan onko vihuja tarpeeksi lähellä räjähdystä, ja sitten siirrytään poistelemaan niitä tarpeen mukaan. Kokeileppa näiden ohjeiden varassa omaa viritelmääsi, ja jos ei toimi, tule koodin kanssa apua pyytelemään :).
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.

Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
Noobish cb coder

Re: Tyhmät kysymykset

Post by Noobish cb coder »

Miten saada aikaan zombie-tekoäly, joka pyrkii "levittäytymään", ei kasaantumaan(positionobject:illa(kun vihuja kiertää, ne niistä kasaantuu läjä))?
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 »

Laita randomisti strafea MoveObjectilla.

Code: Select all

MoveObject zombie, 2, rand(-2, 2)
Muokkaa itse.
Noobish cb coder

Re: Tyhmät kysymykset

Post by Noobish cb coder »

...ainoa vaikutus tuolla on että zombit tärisevät...voisiko zombi ottaa steppiä poispäin lähimmästä yms...?
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 »

Sanoinkin että muokkaa itse. Voit laittaa randomimäärän johonkin muuttujaan ja tietyn aikavälein muuttaa sitä. Sitten joka kierroksella samalla komennolla strafetetaan zombeja.

Ellet sitten halua tehdä mainitsemaasi systeemiä. Vihjeenä annan että komennot ovat Distance2, GetAngle2, WrapAngle, Sin, Cos ja TranslateObject. Strafe olisi vaan niin paljon helpompi tehdä vaikkei yhtä hieno olisikaan :)
SuojelusPerkele
Newcomer
Posts: 37
Joined: Tue Sep 09, 2008 4:17 pm

Re: Tyhmät kysymykset

Post by SuojelusPerkele »

Kokeilin tuota räjähde hommaa, vaan meni liian vaikias minulle.. :)

Tässä on tämä koodin pelkkä peliosa:

Code: Select all

PELI:
  
   FrameLimit 45
  

    'tyypit ja niiden kentät
    Type zombis'nimi
        Field obj'objecti
        Field hp'energiat
        Field dmg'vahinko
        Field speed'nopeus
        Field score'pisteet
        Field id'minkälainen zombie on
      EndType
    Type bullets'ammukset
        Field obj
        Field hp
        Field dmg
        Field speed
        Field id
      EndType
    Type upgs'asepäivitykset
        Field obj
        Field hp
        Field id
    EndType
   Type c4s
        Field obj
        Field hp
        Field dmg
        Field partikkeli
      EndType 
   Type räjähdykset
    Field partikkeli
   EndType 
    
    'ladataan media
    gun_sound=LoadSound ("unlimited\media\thompson.wav")
    map=LoadMap("unlimited\media\cdm2.til","unlimited\media\tileset.bmp")
    hero=LoadObject("unlimited\media\soldier.bmp",72)
    pelimusa=PlaySound ("unlimited\media\HGW_BogA_Tankdefense_v1.mp3")
    zombi=LoadObject("unlimited\media\guy.bmp",72)
    cow=LoadObject("unlimited\media\cow.bmp",32)
    bullet=LoadObject("unlimited\media\bullet.bmp",32)
    enemy_sound=LoadSound ("unlimited\media\kuolema2.wav")
    enemy_sound2=LoadSound ("unlimited\media\kuolema.mp3")
    enemy_sound3=LoadSound ("unlimited\media\kuolema3.wav")
    c4=LoadObject("Unlimited\media\c4.bmp")
    heitto=LoadSound ("Unlimited\media\whip.wav")
    imgPoks=LoadAnimImage("unlimited\media\bang.bmp",32,32,0,8)
        ShowObject bullet,OFF
        ShowObject zombi,OFF
        ShowObject cow,OFF
        ShowObject c4,OFF 
       
    SetupCollision hero,map,1,4,2

    hp=500'sinun energiat
    powupg=12'Aseen aloitus teho
    speedupg=5'aseen aloitus nopeus


    Repeat''''''''''''''''''''''''''''''

   If SoundPlaying (pelimusa)=0 Then 
    pelimusa= PlaySound("unlimited\media\HGW_BogA_Tankdefense_v1.mp3")
   EndIf 
        
    If hp>0 Then 'jos on energiaa niin suritetaan kaikki
    CloneCameraPosition hero
    MoveObject hero,UpKey()*6-DownKey()*4
    TurnObject hero,LeftKey()*5-RightKey()*5
    'Aseet''''''''''''''''''''''''''''''''''''''''
     If KeyHit (CBKEYx) Then 
     PlaySound heitto
     newC4.c4s=New(c4s)
     newC4\obj=CloneObject(c4)
     newC4\dmg=150
     CloneObjectPosition newC4\obj,hero
     CloneObjectOrientation newC4\obj,hero
     MoveObject newC4\obj,28
     SetupCollision newC4\obj,map,1,4,2
     EndIf 
     
    If KeyDown(CBKEYspace) And reload<0
        PlaySound gun_sound,40
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(bullet)
        newbullet\dmg=powupg
        newbullet\speed=speedupg
        CloneObjectPosition newBullet\obj,hero
        CloneObjectOrientation newbullet\obj,hero
        MoveObject newBullet\obj,24
        reload=5
        SetupCollision newbullet\obj,map,1,4,2
    EndIf
        
    reload-1
    For iBullet.BULLETS= Each BULLETS
    If CountCollisions(ibullet\obj) Then ibullet\hp-32
    MoveObject iBullet\obj,6'likutetaan luotia
    Next iBullet
    'Asepäivitykset''''''''''''''''''''''''''''''''
   
   
    'zombit''''''''''''''''''''''''''''''''''''''''
    If luo>130'jos luonti on suurempi kuin 130, niin tehdään zombie
        newzombi.zombiS= New(zombiS)
        newzombi\obj=CloneObject(zombi)
        'Asetetaan vihollinen kohtaan missä ei ole törmäystä
        For y=1 To MapWidth()
        For x=1 To MapWidth()
            If GetMap2(2,x,y)=0 Then PositionObject newzombi\obj,Rand(-600,500),Rand(-600,600)
        Next x
        Next y
       
        newzombi\id=Rand(1,2)
        If newzombi\id =1'Ykkös zombi
            newzombi\hp=Rand(90,110):newzombi\dmg=Rand(1,3):newzombi\speed=Rand(2,3):newzombi\score=Rand(10,20)'Asetetaan zombielle kentät
        EndIf
        If newzombi\id =2'kakkos zombi
            PaintObject newzombi\obj,cow
            newzombi\hp=Rand(110,130):newzombi\dmg=Rand(2,4):newzombi\speed=Rand(1,2):newzombi\score=Rand(15,25)'toiselle myös
        EndIf
        SetupCollision newzombi\obj,map,1,4,2
        luo=0
    EndIf
    luo+1
    For izombi.zombiS= Each zombiS 'Aloitetaan zombien läpikäynti
    'Typerä tekoäly
    sidle=Rand(-20,20)
    If CountCollisions(izombi\obj) Then MoveObject izombi\obj,0,sidle 'jos kosketaan seinään, niin stepataan

    PointObject izombi\obj,hero'zombi tähtää pelaajaan
    If ObjectsOverlap(izombi\obj,hero) Then hp-izombi\dmg
    For ibullet.bullets=Each bullets
    If ObjectsOverlap(ibullet\obj,izombi\obj) Then izombi\hp-ibullet\dmg Then ibullet\hp=-1
    If Distance2(iBullet\obj,hero)>600 Or ibullet\hp<0 Then 'jos...niin tuhotaan ammus
        DeleteObject iBullet\obj
        Delete iBullet
    EndIf
    Next ibullet

    MoveObject izombi\obj,izombi\speed 'liikutetaan zombia nopeutensa verran

    if izombi\hp<0
  ääni=rand(1,3)
  select ääni 'soita ääni
    case 1
      playsound enemy_sound
    case 2
      playsound enemy_sound2
    case 3
      playsound enemy_sound3
  EndSelect

        score+izombi\score
        DeleteObject izombi\obj
        Delete izombi
    EndIf
    Next izombi
    EndIf

    DrawGame'ettei teksti jää kartan alle
    Color cbwhite
    Text 530,10,"FPS "+FPS() 'tulosta FPS
    Text 470,30,"(FPS limit = 45)"
    Text 10,10,"HP "+hp
    Text 10,20,"score "+score
    If score<50 Then Text 10,40,"rank: MAGGOT"
    If score>50 And score<150 Then Text 10,40,"rank: PRIVATE"
    If score>150 And score<300 Then Text 10,40,"rank: CORPORAL"
    If score>300 And score<500 Then Text 10,40,"rank: SERGEANT"
    If score>500 And score<750 Then Text 10,40,"rank: LIEUTENANT"
    If score>750 And score<1000 Then Text 10,40,"rank: CAPTAIN"
    If score>1000 And score<1300 Then Text 10,40,"rank: MAJOR"
    If score>1300 And score<1650 Then Text 10,40,"rank: COLONEL"
    If score>1650 And score<2000 Then Text 10,40,"rank: BRIGADIER"
    If score>2000 Then Text 10,40,"rank: GENERAL"
    
      If hp<0 Or hp=0 Then Text 350,300,"GAME OVER"
      
   DrawScreen

    Forever 
Blooddrunk Game Industry [BGI] :

Unlimited 1.0 = 100%
-Päivityksiä suunnitteilla

Kollaa kestää!
-Suunnitteluvaiheessa
-Tower defence -tyylinen, torju kommunistivyöryt kannaksella
_____
Vertos
anttimoi
Newcomer
Posts: 25
Joined: Mon Aug 11, 2008 7:33 pm

Re: Tyhmät kysymykset

Post by anttimoi »

Miten saan tekstiä objektin päälle?
Coolbasic roguelike-projekti menossa 8)
Progress bar @@@@@10%@@@@@
Pahasti jäätymässä...
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: Tyhmät kysymykset

Post by KillBurn »

anttimoi wrote:Miten saan tekstiä objektin päälle?
Laita teksti drawgame komennon jälkeen.

Suojelusperkele:
Tuossa on jonkunlainen räjähdysjuttu vaikkakin aika huono:

Code: Select all

FrameLimit 40
SCREEN 800,600
Type c4s
Field obj
Field speed
Field id 
Field hp
EndType 
c4=LoadObject("media\cow.bmp")
hero=LoadObject("media\guy.bmp",32)
zombi=LoadObject("media\guy.bmp",32)
explow=LoadAnimObject("media\bang.bmp",32,32,0,8)
PositionObject zombi,Rand(-300,300),Rand(-200,200)

Repeat '''''''''''''''''''''''''''''''''''''''''''''''

MoveObject hero,UpKey()*6-DownKey()*4
TurnObject hero,LeftKey()*5-RightKey()*5
LoopObject explow,0,8,0.2
reload-1
    If KeyHit(cbkeyspace) And reload<0
    
        newc4.c4S= New(c4S)
        newc4\obj=CloneObject(c4)
        CloneObjectPosition newc4\obj,hero
        CloneObjectOrientation newc4\obj,hero
        newc4\hp=10
        newc4\speed=15
        MoveObject newc4\obj,24   
        reload=15
        
    EndIf

For ic4.c4S= Each c4S

    If KeyHit(CBKEYspace) And ic4\speed=0 Then ic4\hp=-1
    ic4\speed-1
    If ic4\speed<1 Then ic4\speed=0
    MoveObject ic4\obj,ic4\speed
    If ic4\hp<1 Then            
            CloneObjectPosition explow,ic4\obj'siirretään räjähdys samaan paikkaan c4n kanssa
            explow_time=30'räjähdysaika
            ShowObject explow,ON'näytetään räjähdys
            DeleteObject ic4\obj
            Delete ic4           
    EndIf
Next ic4
If explow_time<0 Then ShowObject explow,OFF'jos räjähdysaika loppuu niin piilotetaan räjähdys
explow_time-1
'Jos törmätään räjähdyksen kanssa
If ObjectsOverlap(explow,zombi) And explow_time>0 Then PositionObject zombi,Rand(-50,500),Rand(-50,500)
DrawScreen 
Forever  
Sumu Games: Sam, Ur eye!
SuojelusPerkele
Newcomer
Posts: 37
Joined: Tue Sep 09, 2008 4:17 pm

Re: Tyhmät kysymykset

Post by SuojelusPerkele »

Edited: Eipä nyt tyhmiä kysyttäviä, sain ratkaistua
Blooddrunk Game Industry [BGI] :

Unlimited 1.0 = 100%
-Päivityksiä suunnitteilla

Kollaa kestää!
-Suunnitteluvaiheessa
-Tower defence -tyylinen, torju kommunistivyöryt kannaksella
_____
Vertos
miten kenttää voi vaihtaa...?

Re: Tyhmät kysymykset

Post by miten kenttää voi vaihtaa...? »

olen yrittänyt väsätä jonkinlaista kentän vaihtoa, jossa uutta kenttää "ladatessa" määritellään omat spawn-arvot sun muut. homma on muuten hoidossa, paitsi että itse kentän vaihtaminen ei kunnolla onnistu...voisiko joku auttaa?

oma koodi:(mukana ampumissysteemit sun muut(jotka toimivat))

Code: Select all

'------------------------------------------------------------------------------------------------------------
SCREEN 1000,800

FrameLimit 50

'------------------------------------------------------------------
'--------------------------------MAPIT-----------------------------
'------------------------------------------------------------------

kartta = LoadMap("Media\map1.til","Media\tileset.bmp")

'------------------------------------------------------------------
'--------------------------------TYPET-----------------------------
'------------------------------------------------------------------

Type AMMUS
    Field obj
    Field id
    Field dmg
End Type

mAmmus = LoadObject("Media\bullet.bmp")
ShowObject mAmmus,OFF

'-------------------

Type VIHU
    Field obj
    Field health
End Type

mvihu=LoadObject("Media\guy.bmp",360)
ShowObject mvihu,OFF

uus = 25

'--------------------

Type IVIHU
    Field obj
    Field health
End Type

mivihu = LoadObject ("media\ukkeli3.bmp",360)
ShowObject mivihu,OFF

iuus = 1500

'-------------------

Type RUHO
   Field obj
End Type

mruho = LoadObject ("media\cow.bmp")
ShowObject mruho,OFF

'------------------

Type UPS
   Field obj
End Type

mups = LoadObject ("media\bigbullet.bmp")
ShowObject mups,OFF

'------------------------------------------------------------------------
'--------------------------MUUT-LATAUKSET--------------------------------
'------------------------------------------------------------------------

ukko = LoadObject("media\soldier.bmp",360)
PositionObject ukko,0,540
ukkohp = 100

'------------------------------------------------------------------------

aim=LoadObject("Media\target.bmp")

SetupCollision aim, ukko,2,2,2
SetupCollision ukko, aim,2,2,2

SetupCollision ukko, kartta,1,4,2
SetupCollision kartta, ukko,1,4,2


Minigun = 0
M4A1 = 0
M3 = 0

panokset1=12
panokset2=30
panokset3=100
panokset4=8

ASE=0
ASEIDEN_MÄÄRÄ = 4

p_dmg=14
r_dmg=10
kk_dmg=5
m_dmg=5

vihut=0

powerups = 0

spawn = 100
level = 500

tauko=0

kenttä=1

'------------------------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------------------------
Repeat
'------------------------------------------------------------------------------------------------------------
'--------------------------------------------------UKKO------------------------------------------------------
'------------------------------------------------------------------------------------------------------------
  
  level -1
  
  If level=0 Then 
  spawn -1
  level=500
  EndIf
  
  If vihut>49 Then uus=100
  
  If spawn<1 Then spawn=1
  
  If KeyHit(cbkeyo) Then tauko=1
  If tauko=1 Then uus+1
  
  If KeyHit (cbkeyp) Then WaitKey

  For v.VIHU= Each VIHU
    If Distance2(v\obj,ukko)<20 Then
    ukkohp - 1
    If ukkohp< 1 Then
    MakeError "lol"
   EndIf
  EndIf
 Next v
 
   For iv.IVIHU= Each IVIHU
    If Distance2(iv\obj,ukko)<20 Then
    ukkohp - 3
    If ukkohp< 1 Then
    MakeError "lol"
   EndIf
  EndIf
 Next iv
 
'------------------------------------------------------------------
 
    PositionObject aim,MouseWX(),MouseWY()
    PointObject ukko, aim
    
    If KeyDown(cbkeyw) Then MoveObject ukko, 3
    If KeyDown(cbkeys) Then MoveObject ukko, -3
    If KeyDown(cbkeyd) Then MoveObject ukko, 0, 3
    If KeyDown(cbkeya) Then MoveObject ukko, 0, -3
    
'---------------------------------------------------------------------    
'-------------------------AI+SPAWN--------------------------------
'---------------------------------------------------------------------

    If uus=0 And tauko=0 Then
        v.VIHU = New (VIHU)
        v\obj = CloneObject (mvihu)
        uus = spawn
        v\health = Rand (80,140)
        vihut +1
        PositionObject v\obj,Rand(200,-200),Rand(-300,-500)
         For v.VIHU = Each VIHU
         SetupCollision v\obj,kartta,1,4,2
         SetupCollision kartta,v\obj,1,4,2

    vv.vihu = First(vihu)
    vv = After(v)
    While vv<>NULL
        SetupCollision vv\obj,v\obj,2,2,2
        SetupCollision v\obj,vv\obj,2,2,2
        vv = After(vv)
    Wend    
   Next v
   
  EndIf

    uus = uus-1  
    
'------------------------
    
   For v.VIHU = Each VIHU
       PointObject v\obj,ukko 
       MoveObject v\obj,1
    Next v 
    
'-----------------------------------------------------
    
    If iuus=0 Then
        iv.IVIHU = New (IVIHU)
        iv\obj = CloneObject (mivihu)
        iuus = 1500
        iv\health = Rand (500,800)
        vihut +1
        PositionObject iv\obj,Rand(200,-200),Rand(200,-200)
         For iv.IVIHU = Each IVIHU
         SetupCollision iv\obj,kartta,1,4,2
         SetupCollision kartta,iv\obj,1,4,2
        Next iv
       EndIf
   
    iuus = iuus-1  
    
'------------------------
    
     For iv.IVIHU = Each IVIHU
       PointObject iv\obj,ukko 
       MoveObject iv\obj,1
    Next iv 
    
'-------------------------------------------------------------------------
'-----------------------------OSUMAT--------------------------------------
'-------------------------------------------------------------------------

     For luoti.AMMUS = Each AMMUS
     For v.VIHU = Each VIHU
        If ObjectsOverlap (v\obj,luoti\obj) Then
          v\health -luoti\dmg
           MoveObject v\obj, -5
          If v\health<1 Then
            tapot +1
            uusi -1
            vihut -1
              ruhoo.RUHO = New (RUHO)
               ruhoo\obj = CloneObject (mruho)
               CloneObjectPosition ruhoo\obj,v\obj
               ObjectLife ruhoo\obj,250
            drop=Rand (1,3)
              If drop=1 Then
               uppi.UPS = New (UPS)
               uppi\obj = CloneObject (mups)
               CloneObjectPosition uppi\obj,v\obj
             EndIf
           DeleteObject v\obj
           Delete v
          EndIf
        EndIf
      Next v
    Next luoti

'--------------------------------------------------
    
   For luoti.AMMUS = Each AMMUS
   For v.VIHU = Each VIHU
     If ObjectsOverlap (v\obj,luoti\obj) Then
     DeleteObject luoti\obj
     Delete luoti
     Exit
   EndIf
  Next v
 Next luoti
    
'---------------------------------------------------
    
     For luoti.AMMUS = Each AMMUS
     For iv.IVIHU = Each IVIHU
       If ObjectsOverlap (iv\obj,luoti\obj) Then
         iv\health -luoti\dmg
         MoveObject iv\obj, -5
         If iv\health<1 Then
            tapot +1
            powerups +1
            vihut -1
              ruhoo.RUHO = New (RUHO)
              ruhoo\obj = CloneObject (mruho)
              CloneObjectPosition ruhoo\obj,v\obj
              ObjectLife ruhoo\obj,250
                uppi.UPS = New (UPS)
                uppi\obj = CloneObject (mups)
                CloneObjectPosition uppi\obj,v\obj
             DeleteObject iv\obj
             Delete iv
           EndIf
         EndIf
       Next iv
     Next luoti
    
'---------------------------------------------------
    
   For luoti.AMMUS = Each AMMUS
   For iv.IVIHU = Each IVIHU
     If ObjectsOverlap (iv\obj,luoti\obj) Then
     DeleteObject luoti\obj
     Delete luoti
     Exit
   EndIf
  Next iv
 Next luoti

'------------------------------------------------------------------------------------------------------------
'-------------------------------------AMPUMINEN---------------------------------------------------------
'------------------------------------------------------------------------------------------------------------

If KeyHit (2) Then ase = 0
If KeyHit (3) Then ase = 1
If KeyHit (4) Then ase = 2
If KeyHit (5) Then ase = 3

'pistooli
If MouseDown(1) And reload=0 Then
    Select ASE
      Case 0
        If panokset1>0 Then
            panokset1-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=0
            luoti\dmg=p_dmg
            luoti\obj=CloneObject(mammus)     
            CloneObjectPosition luoti\obj,ukko
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,5,-3
            TurnObject luoti\obj,Rand(3,-3)
            reload=25
        Else
            reload=25
            If Timer()>lataus+500 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset1=12  
            EndIf     
        EndIf
       'rynnäkkökivääri
      Case 1
        If panokset2>0 And m4a1>29 Then
            panokset2-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=1
            luoti\dmg=r_dmg
            luoti\obj=CloneObject(mammus)     
            CloneObjectPosition luoti\obj,ukko               
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,3,0
            TurnObject luoti\obj,Rand(7,-7)
            reload=5
        Else
            reload=50
            If Timer()>lataus+500 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                m4a1-30
                panokset2=30 
            EndIf 
        EndIf
      'konekivääri
      Case 2
        If panokset3>0 And minigun>99 Then
            panokset3-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=1
            luoti\dmg=kk_dmg
             luoti\obj=CloneObject(mammus)     
             CloneObjectPosition luoti\obj,ukko               
             CloneObjectOrientation luoti\obj,ukko
             ResetObjectCollision luoti\obj
             MoveObject luoti\obj,3,0
             TurnObject luoti\obj,Rand(10,-10)
             reload=1
         Else
            reload=100
            If Timer()>lataus+500 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset3=100 
                minigun-100
            EndIf     
        EndIf
        'haulikko
        Case 3
          If panokset4>0 And m3>7 Then
            panokset4 -1
            For i=1 To 10
            luoti.AMMUS = New(AMMUS)
            luoti\dmg=m_dmg
            luoti\obj=CloneObject(mammus)
            CloneObjectPosition luoti\obj,ukko                
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,3,0
            TurnObject luoti\obj,Rand(-15,15)
            Next i
            reload=50
        Else
            reload=50
            If Timer()>lataus+500 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset4=8
                m3 -8
            EndIf     
        EndIf

       
    EndSelect   
   EndIf

If reload>0 Then reload=reload-1


    For luoti.AMMUS = Each AMMUS
        Select luoti\id
        
          Case 0
            MoveObject luoti\obj,15
            If Distance2(luoti\obj,ukko)>200 Then           
                DeleteObject luoti\obj
                Delete luoti
            EndIf
            
          Case 1
            MoveObject luoti\obj,24
            If Distance2(luoti\obj,ukko)>400 Then           
                DeleteObject luoti\obj
                Delete luoti
            EndIf
            
          Case 2
            MoveObject luoti\obj,32
            If Distance2(luoti\obj,ukko)>1000 Then           
                DeleteObject luoti\obj
                Delete luoti
            EndIf
            
          Case 3
            MoveObject luoti\obj,18
            If Distance2(luoti\obj,ukko)>300 Then           
                DeleteObject luoti\obj
                Delete luoti
            EndIf
            
        End Select 
    Next luoti
        
   If m4a1<0 Then m4a1 +100
   If minigun<0 Then minigun +30
   If m3<0 Then m3 +8
    
'---------------------------------------------------------

  For uppi.UPS = Each UPS
    If ObjectsOverlap (uppi\obj,ukko) Then
      padit = Rand (1,6)
       If padit=1 Then m4a1+30
       If padit=2 Then m4a1+30
       If padit=3 Then m4a1+30
       If padit=4 Then minigun+100
       If padit=5 Then m3+8
       If padit=6 Then m3+8
      DeleteObject uppi\obj
      Delete uppi
     EndIf
    Next uppi

'---------------------------------------------------------


If tapot=1 then kenttä=2
If kenttä = 2 then Gosub map2


'---------------------------------------------------------
     
    UpdateGame     
     
    CloneCameraPosition ukko
     
  DrawGame
  
  ShowMouse OFF
  
  DrawScreen

'----------------------------------------------------------
Until EscapeKey()
End
'----------------------------------------------------------

map2: 
kartta = LoadMap("Media\map1.til","Media\tileset.bmp")

  For v.VIHU = Each VIHU
   DeleteObject v\obj
   Delete v
  Next v
  
ukko = LoadObject("media\soldier.bmp",360)
PositionObject ukko,0,540

Return
Locked