Code: Select all
//tehtävä C3
//Hieman ohjelman rakenteesta:
// 1.0 Lataa ja asettaa muuttujia
// 2.0 Pääsilmukka
// 3.0 Syöttö (ohjaus)
// 4.0 Päivitys (liikutetaan ukkeleita ja tarkistetaan josko ammukset osuvat jne.)
// 5.0 Piirto (HUD)
// 6.0 Pääsilmukan loppu
// Funktiot
//Muuta:
// Vihollisia hallitaan taulukoilla, koska niitä on ennaltamäärätty määrä.
// Luoteja ja partikkeleita taas tyypeillä, koska se on helpompaa.
// Käytän jännää "continue" menetelmää (gotolla). koska CoolBasicista puuttuu Continue-käsky joka mahdollistaisi for-loopin alkuun hyppäämisen
//INFO LOPPU
Const enemies = 5
//ASETA RUUTU
SCREEN 640,480
SetWindow "Ultimate Death"
FrameLimit 60
//--//1.0 LADATAAN ja ALUSTETAAN
//--//FONTIT
Global font_0,font_1 'fontit ovat globaaleja, jotta niitä voi käyttää funktioissa
font_0 = LoadFont("Arial",12)
font_1 = LoadFont("Arial",22)
//--//KARTTA
map = LoadMap("Media\cdm2.til", "Media\tileset.bmp")
ObjectPickable map, ON
//--//PELAAJA
//OBJEKTI
player = LoadObject("media\soldier.bmp",72)
SetupCollision player, map, 2, 4, 2
Dim player_gun As Byte 'mikä ase käytössä (0=pistooli, 1=plasmakivääri, 2=liekinheitin, 3=raketti)
Dim player_shoot_delay As integer 'milloin saa ampua (kun timer()>tämä muuttuja)
Dim player_shoot_lock As Byte 'jos 1 niin pelaaja joutuu päästämäänn ampumanäppäimen jotta hän voi ampua uudestaan
Dim player_reload As integer 'reload-palkki (arvo 0-100)
//--//ASEET ja liittyvät muuttujat
Const guns = 3
Dim gun_delay(guns) As integer 'kuinka pitkä aika ammusten välillä on (esim. konekivääri = lyhyt aika), -1=ampuu kerran
gun_delay(0) = 700
gun_delay(1) = 300
gun_delay(2) = 100
gun_delay(3) = 2000
Dim gun_retrigger(guns) As Byte 'ampuuko ase uudestaan jos näppäintä pidetään pohjassa, 1= kyllä
gun_retrigger(0) = 0
gun_retrigger(1) = 0
gun_retrigger(2) = 0
gun_retrigger(3) = 1
Dim gun_damage(guns) As Byte 'paljonko healthia menettää
gun_damage(0) = 10
gun_damage(1) = 5
gun_damage(2) = 5
gun_damage(3) = 40
Dim gun_name(guns) As String 'aseen nöytöllä näkyvä nimi
gun_name(0) = "Pistol"
gun_name(1) = "Plasma Gun"
gun_name(2) = "Flamethrower"
gun_name(3) = "Rocket Laucher"
Dim gun_speed(guns) As integer 'aseen nopeus pikseli/frame. -1 = instant hit, eli luoti kulkee äärettömällä nopeudella
gun_speed(0) = -1
gun_speed(1) = 3.0
gun_speed(2) = 3.0
gun_speed(3) = 3.0
Dim gun_lifetime(guns) As integer 'luodin olemassaoloaika millisekunteina, -1 = ikuinen
gun_lifetime(0) = -1
gun_lifetime(1) = 1500
gun_lifetime(2) = 1000
gun_lifetime(3) = 3000
//LUODIT
Type bullet
Field obj 'jokainen luoti on objekti
Field lifetime 'elinaika, kuolee jos timer()>lifetime
Field shot_by 'kenen ampuma, -1=pelaaja, 0...n = botti. Tämä on tärkeä silloin kun pistoolilla ammuttaessa piirretään viiva ampujasta luotiin
Field speed# 'nopeus pikseleissä per frame
Field damage 'paljonko healthia lasketaan osuttaessa
Field bul 'tyyppi 0=pistooli,1=plaskakivääri, jne.
Field angle 'mhin suuntaan mennään (mahdollistaa itse objektin pyörittämisen ilman että suunta muuttuu)
EndType
//luotien "originaali" objektit joista ne sitten kloonataan
Dim gun_bullet(guns)
gun_bullet(0) = LoadObject("Media\bullet.bmp")
gun_bullet(1) = MakeObject(4)
gun_bullet(2) = LoadAnimObject("Media\bang.bmp",32,32,0,8,8)
gun_bullet(3) = LoadObject("Media\bigbullet.bmp",72)
For i = 0 to 3 'piilotetaan ne
ShowObject gun_bullet(i), OFF
Next i
//--//VIHOLLISET
//itse vihollisobjektit (kloonataan pelaajasta ja sijoitetaan taulukkoon)
Dim enemy(enemies)
Dim enemy_turn_delay(enemies) As integer
Dim enemy_ox(enemies) As Float
Dim enemy_oy(enemies) As Float
Dim enemy_mode(enemies) As Byte ' 0=kuljeskelee, 1=kääntyy, 2=ampuu
Dim enemy_mode_timer(enemies) As integer 'onko aika siirtyä tilaan 0? (on jos timer()>tämä)
Dim enemy_maxd(enemies) As Float 'kääntymiseen liityviä
Dim enemy_maxda(enemies) As integer 'se kulma josta on pisin matka seinään (botit katsovat siis tilassa 1 aina pisimmän matkan ja menevät sinne)
Dim enemy_turn_dir(enemies) As integer 'vähän satunnaisuutta. mihin suuntaan käännytään
Dim enemy_shoot_delay(enemies) As integer 'pelaaja saa ampua kun timer()>tämä
Dim enemy_oa(enemies) 'original_angle... eli
Dim enemy_health(enemies)
Dim enemy_dead(enemies) As Byte 'vihollista ei päivitetä jos se on kuollut
Dim enemies_left As integer
enemies_left = enemies
'alustetaan viholliset
For i = 0 To enemies
enemy_health(i) = 50 'aloittavat 50hp
enemy(i) = CloneObject(player)
SetupCollision enemy(i), map, 2, 4, 2
Next i
//--//PARTIKKELIlLÄHTEET (efektit)
Type emitter
Field obj
Field lifetime
EndType
//KONSOLI
Dim console_line(4) As String 'konsolirivi
//--//HIEMAN GENEROINTIA
//PLASMATEKSTUURI
plasma_texture = MakeImage(16,16)
DrawToImage plasma_texture
For i=0 To 36
Color 0, Rand(50,200), Rand(0, 50)
Circle Rand(0,14), Rand(0,14), 2
Next i
DrawToScreen
PaintObject gun_bullet(1), -plasma_texture 'miinusmerkki viittaa kuvaan, tämä on tojain coolbasicin omaa säveltämistä
DeleteImage plasma_texture
//KIPINÄT
spark = MakeImage(2,2)
DrawToImage spark
Color 255,172,0
Box 0,0,2,2
DrawToScreen
//VERI
splat = MakeImage(2,2)
DrawToImage splat
Color 255,0,0
Box 0,0,2,2
DrawToScreen
//plasmaroiske
blob = MakeImage(2,2)
DrawToImage blob
Color 0,202,0
Box 0,0,2,2
DrawToScreen
//rakettiblast
boom = MakeImage(5,5)
DrawToImage boom
Color 255,150,0
Box 0,0,5,5
DrawToScreen
//--//ALUSTETAAN JUTTUJA
console_write("-------------ULTIMATE DEATH-----------")
console_write("arrows: aim")
console_write("space: shoot")
console_write("ctrl: change weapon")
console_write("---------------------------------------------------")
//sijoitetaan viholliset
For i = 0 To enemies
PositionObject enemy(i), Rand(-500,500), Rand(-500,500)
collisions = CountCollisions(enemy(i))
While collisions <> 0 //jos seinän sisässä...tehdään uudestaan
//näin ei kannata tehdä, koska viholliset voivat joutua seinän sisään tai pelikentän ulkopuolelle, mutta 500<mapw/2 joten eivät ainakaan mene ulkopuolelle
PositionObject enemy(i), Rand(-500,500), Rand(-500,500)
collisions = CountCollisions(enemy(i))
Wend
Next i
//pelaaja
player_health = 100
PositionObject player, -130, 1050 'alkupaikka
//-----------------------------------------//MAIN 2.0
Repeat
//--//3.0 SYÖTTÖ
//PELAAJAN SYÖTTÖ
'ohjaus
If LeftKey() Then TurnObject player, 2
If RightKey() Then TurnObject player, -2
If UpKey() Then MoveObject player, 2
If DownKey() Then MoveObject player, -2
'aseen vaihto
If KeyHit(cbKeyLControl) Then player_gun = (player_gun + 1) Mod 4 //todo: tässä on joku jännä juttu että asetta ei voi vaihtaa ammuttaessa...
'ampuminen
If KeyDown(cbKeySpace) And (Timer()>player_shoot_delay) And (player_shoot_lock = 0) And (player_reload > 0) Then
//AMMUTAAN VAAN
'luodaan luoti
handle.bullet = New(bullet)
handle\obj = CloneObject(gun_bullet(player_gun)) 'kloonataan se luoti joka vastaa käytössä olevaa asetta
'laitetaan luoti kuntoon
CloneObjectPosition handle\obj, player 'sijoitetaan pelaajan kohdalle
CloneObjectOrientation handle\obj, player 'asetetaan lähtösuunta
handle\angle = ObjectAngle(player)
MoveObject handle\obj, 20 'piipun päähän
handle\speed = gun_speed(player_gun) 'asetetaan nopeus
If gun_lifetime(player_gun) <> -1 Then 'asetetaan elinaika
handle\lifetime = Timer() + gun_lifetime(player_gun) 'elinaikaa tästä hetkestää se määrätty aika
Else
handle\lifetime = -1 'luotia ei poisteta automaattisesti
EndIf
//TÖRMÄYKSENTUNNISTUS
SetupCollision handle\obj, map, 2, 4, 2 'törmäilyä
ObjectRange handle\obj, 2 'luodin halkaisija on 2px
For i = 0 To enemies
SetupCollision handle\obj, enemy(i), 2,2,2 'luoti tunnistaa viholliset
Next i
//minkälainen luoti kyseessä?
handle\bul = player_gun 'bul = luoti...eli minkä aseen luoti?
handle\shot_by = -1 '-1 = pelaaja. 0...n = botit
//ESTETÄÄN HETI PERÄÄN AMPUMISTA
player_shoot_delay = Timer() + gun_delay(player_gun)
player_shoot_lock = gun_retrigger(player_gun)
//EFEKTIT
If handle\bul = 3 Then //raketti saa peräänsä komeat lieskat
//KIPINÄT
rocket_particle = MakeEmitter (spark, 7) 'näin ei tietenkään kannattaisi tehdä. YKSI objekti, vaikka raketteja perjaatteessa voi olla monta. niitä ei kuitenkaan ole.
CloneObjectPosition rocket_particle, handle\obj
RotateObject rocket_particle, ObjectAngle(handle\obj) + 180
ParticleMovement rocket_particle ,2 ,0
ParticleEmission rocket_particle ,1, 8,60
EndIf
If player_gun <> 2 Then player_reload = 0 Else player_reload = player_reload - 15 //RELOAD nollataan...liekinheitin reloadaa erilailla kuin muut.
ElseIf player_reload<100 And player_gun = 2 And (Timer()>player_shoot_delay)
//FLAMETHROWERIN RELOAD
player_reload = player_reload + 1
player_reload = Min(100,player_reload)
EndIf
If KeyUp(cbKeySpace) And player_shoot_lock = 1 Then //lukituksen poisto. joillakin aseilla on näppäintä nostettava ennen uudelleenampumista
player_shoot_lock = 0
EndIf
//--//4.0 PÄIVITETÄÄN
//AMMUKSET
For handle.bullet = Each bullet
//ELINAIKA
If Timer() > handle\lifetime And handle\lifetime <> -1 Then
//poista luoti
DeleteObject handle\obj
Delete handle
//poista raketin partikkelit
If handle\bul = 3
DeleteObject rocket_particle
EndIf
//homma hoidettu
Goto continue ' tämä luoti on nyt käsitelty
EndIf
//ANIMOINTI
If handle\bul = 1 Then TurnObject handle\obj, 11.25
If handle\bul = 2 Then PlayObject handle\obj, 0, 8, 0.008
//RAKETIN kipinät kiinni rakettiin
If handle\bul = 3 Then
CloneObjectPosition rocket_particle, handle\obj
MoveObject rocket_particle, 5
EndIf
//LIIKE, liike suoritetaan niin että luotia liikutetaan aina yksi pikseli kerralla ja tarkistetaan osuuko se johonkin
speed_steps = Int(handle\speed) 'haluan painostaa tuota INT:ttiä. eli hypellään aina pikseli (kokonaisluku)
i = 0
While (i <> speed_steps) //kikkailtu for-looppi :D
blood = 0 'alustetaan. jos blood=1 niin luodaan veriemissio luodin loppupäähän... SPLÄT!
//liikutetaan pikselin verran kulkusuuntaan
TranslateObject handle\obj, Cos(handle\angle), Sin(handle\angle)
UpdateGame 'ilman tätä peli ei huomaisi tötmäyksiä
//TÖRMÄYKSENTARKISTUS
collisions = CountCollisions(handle\obj)
If collisions > 0 Then
//MIHIN OSUTTIIN?
For j = 0 To collisions
collision = GetCollision(handle\obj, j)
//PELAAJA
If collision = player Then
player_health = player_health - gun_damage(handle\bul)
If player_health<=0 Then splash("Game Over","You have died. That's soo sad :( BUT HEY... YOU CAN PLAY AGAIN..."):End
//VERI
blood = 1
Exit
EndIf
//VIHOLLISET
For k = 0 To enemies
If collision = enemy(k) And enemy_dead(k)=0 Then
enemy_health(k) = enemy_health(k) - gun_damage(handle\bul)
//kuoleeko vihollinen?
If enemy_health(k)<=0 Then ShowObject enemy(k),OFF:enemy_dead(k)=1:enemies_left - 1:console_write("Enemy killed! "+(enemies_left+1)+" enemies l"+"eft")
If enemies_left<0 Then splash("Mission accomplished!","Congratulations! You managed To take down all the enemies. You are now a hero."):End
//veri
blood = 1
Exit
EndIf
Next k
If handle\bul = 3 And collision = map Then // jos on raketti niin seinään tulee reikä
//nämä kusee vähän, koska jostain syystä collisionx() ei toiminut vaan palautti aina 0,0
x = (ObjectX(handle\obj) +16 )/32.0 + MapWidth()/2.0
y = -(ObjectY(handle\obj) -16)/32.0 + MapHeight()/2.0 - sgn(Sin(ObjectAngle(handle\obj)))
SetWindow ""+CollisionX(handle\obj,j)
For jj=0 To 8
//tarkistaetaan getmapilla, että poistettava tosiaan on seinä
If GetMap2(2,x+Cos(jj*45), y-Sin(jj*45))=1 Then
EditMap map, 0, x+Cos(jj*45), y-Sin(jj*45), 137
EditMap map, 2, x+Cos(jj*45), y-sin(jj*45), 0
EndIf
Next jj
EditMap map, 0, x, y, 137 'muutetaan karttaa
EditMap map, 2, x, y, 0 'poistetaan törmäys
UpdateGame//bugi: kaikki näkee pelaajan kun karttaa muutetaan. siksi updategame
EndIf
Next j
//LUO VÄHÄN KIPINÖITÄ riippuen aseesta(cool!)
If handle\bul = 0 Then //PISTOOLI
//KIPINÄT
If blood = 0
par.emitter = New(emitter)
par\obj = MakeEmitter (spark, 10)
CloneObjectPosition par\obj, handle\obj
ParticleMovement par\obj ,2 ,0
ParticleEmission par\obj ,5, 4,360
par\lifetime = Timer() + 200
EndIf
Color 200,200,200
//hieno viiva kuvaamaan lentorataa
DrawGame : game_drawn = 1
DrawToWorld ON
If handle\shot_by = -1 Then
Line ObjectX(player) + Cos(ObjectAngle(player))*25, ObjectY(player) + Sin(ObjectAngle(player))*25, ObjectX(handle\obj), ObjectY(handle\obj)
Else
Line ObjectX(enemy(handle\shot_by)) + Cos(ObjectAngle(enemy(handle\shot_by)))*25, ObjectY(enemy(handle\shot_by)) + Sin(ObjectAngle(enemy(handle\shot_by)))*25, ObjectX(handle\obj), ObjectY(handle\obj)
EndIf
DrawToWorld OFF
ElseIf handle\bul = 1 //PLASMAKIVÄÄRI
//KIPINÄT
If blood=0 Then
par.emitter = New(emitter)
par\obj = MakeEmitter (blob, 10)
CloneObjectPosition par\obj, handle\obj
ParticleMovement par\obj ,2 ,0
ParticleEmission par\obj ,2, 4,360
par\lifetime = Timer() + 200
EndIf
ElseIf handle\bul = 3 //RAKETTI
//poista kipinät
DeleteObject rocket_particle
//boom
par.emitter = New(emitter)
par\obj = MakeEmitter (boom, 30)
CloneObjectPosition par\obj, handle\obj
ParticleMovement par\obj ,2 ,0
ParticleEmission par\obj ,2, 14,360
par\lifetime = Timer() + 400
EndIf
//VERI, eli verta tulee jos blood=1
If blood Then
par.emitter = New(emitter)
par\obj = MakeEmitter (splat, 10)
CloneObjectPosition par\obj, handle\obj
ParticleMovement par\obj ,2 ,0
ParticleEmission par\obj ,5, 8,360
par\lifetime = Timer()+200
EndIf
//poista luoti, sehän osui johonkin
DeleteObject handle\obj
Delete handle
Goto continue' tämä luoti on nyt käsitelty
EndIf
i = i + 1
Wend
//Muista ohjelmointikielistä tuttu continue mahdollistaa sen että tämänhetkisen luodin käsittelyn voi lopettaa ja hypätä seuraavaan
continue:
Next handle
//PARTIKKELIT (niiden poisto)
For handle2.emitter = Each emitter
If Timer() > handle2\lifetime Then 'eloaika loppui
DeleteObject handle2\obj
Delete handle2
EndIf
Next handle2
//BOTIT - AI on huonosti komentoitua. tärkeää on että botit toimivat eri "moodeissa". 0=kävely, 1=pyöriominen, 2=ampuminen
For i = 0 To enemies
If enemy_dead(i)=0 Then 'ei päivitetä kuolleita
If enemy_mode(i)=0 Then
//käänny randomilla
'If Rand(0,200) = 0 Then TurnObject enemy(i),Rand(-1,0)*180+90
//OLLAANKO JUMISSA?
If enemy_ox(i) = ObjectX(enemy(i)) And enemy_oy(i) = ObjectY(enemy(i)) And Distance2(enemy(i), player)>60 Then 'tuo distance on tuossa sen takia ettei bot pysähtyessään luulisi olevan jumissa
TurnObject enemy(i), Rand(-2,2)*45 : enemy_turn_delay(i) = Timer() + Rand(0,1000)
EndIf
//MENNÄÄNKÖ PÄIN SEINIÄ?
oa = ObjectAngle(enemy(i)) 'old_angle
na = oa 'new_angle
maxd = 50 'max_distance
For k=-10 To 10 'käydään läpi kulmat (-45...45 pelaajasta käsin). tarkistetaan ettei olla menossa päin seinää
RotateObject enemy(i),oa+k*45/10
ObjectPick enemy(i)
d = Distance(ObjectX(enemy(i)), ObjectY(enemy(i)), PickedX(), PickedY())
If d<30 Then enemy_mode(i) = 1:enemy_maxd(i)=0:enemy_mode_timer(i) = Timer()+ Rand(2,5)*1000 :enemy_turn_dir(i)=Rand(-1,0)*2+1:enemy_oa(i)=oa 'seinä edessä! aika kääntyä!
If k=0 Then maxd=d 'liittyy käytävien etsintään (sivuilla)
Next k
//OISKO SIVUILLA KÄYTÄVIÄ?
na = oa+Rand(-1,1)*90
RotateObject enemy(i),na
ObjectPick enemy(i)
d = Distance(ObjectX(enemy(i)), ObjectY(enemy(i)), PickedX(), PickedY())
If d>maxd And d>100 And rand(0,50)=0 Then oa=na
//PAALAUTELLAAN takaisin kulmaan (edellä käänneltiin jotta huomattaisiin seinät)
RotateObject enemy(i), oa
enemy_ox(i)=ObjectX(enemy(i)) : enemy_oy(i)=ObjectY(enemy(i)) 'tallennetaan "vanhat" koordinaatit jotta voidaan huomata jumitukset
//ONKO PELAAJA NÄKYVISSÄ?
If ObjectSight(enemy(i), player) And (Timer() > enemy_turn_delay(i)) Then
na = Int(GetAngle2(enemy(i), player)/45.0)*45
RotateObject enemy(i), na
enemy_turn_delay(i) = Timer() + Rand(1000,2000)
If Distance2(enemy(i), player)<300 And Timer()>enemy_shoot_delay(i) Then enemy_mode(i)=2:enemy_mode_timer(i)=Timer()+1000 'AMMUTAAN!
EndIf
//LIIKUTAAN jos ei olla menossa pelaajan päälle
If Distance2(enemy(i), player)>60 Then MoveObject enemy(i),1
EndIf
//ROTATEMODE, eli pyöritään (kryptinen toteutus)
If enemy_mode(i)=1 Then
//ROTATEEEE
enemy_maxd(i)=0
oa = ObjectAngle(enemy(i))
na = oa
For k=-2 To 2 'tarkistetaan kulmat -90, -45, 0, 45, 90 josko löytyisi mukavia pitkiä matkoja = käytäviä
RotateObject enemy(i),oa+k*45
ObjectPick enemy(i)
d = Distance(ObjectX(enemy(i)), ObjectY(enemy(i)), PickedX(), PickedY())
If d>enemy_maxd(i) And k<>0 And d>30 Then enemy_maxd(i)=d: enemy_maxda(i) = oa+k*45 'talletaan paras suunta
Next k
enemy_mode(i)=0
RotateObject enemy(i),enemy_maxda(i)
EndIf
//AMPUMODE, ammuskellaan pelaajaa kohti
If enemy_mode(i)=2 Then
If Timer() > enemy_shoot_delay(i) Then //ammutaan jos ei olla ammuttu
oa = ObjectAngle(enemy(i))
PointObject enemy(i),player //tähdätään pelaajaan
TurnObject enemy(i), Rand(-15, 15) //..randomia...että voi ampua hutikin
enemy_shoot_delay(i)=Timer()+gun_delay(0)+1500 //1500 siksi etteivät kokoajan tulittaisi, olisi liian vaikeaa :D
//AMMUTAAN
'luodaan luoti
handle.bullet = New(bullet)
handle\obj = CloneObject(gun_bullet(0)) 'kloonataan pistoolin panos
CloneObjectPosition handle\obj, enemy(i) 'sijoitetaan pelaajan kohdalle
CloneObjectOrientation handle\obj, enemy(i) 'asetetaan lähtösuunta
handle\angle = ObjectAngle(enemy(i))
MoveObject handle\obj, 20 'piipun päähän
handle\speed = gun_speed(0) 'asetetaan nopeus
handle\lifetime = Timer() + gun_lifetime(0)+100 'elinaikaa tästä hetkestää se määrätty aika
//TÖRMÄYKSENTUNNISTUS
SetupCollision handle\obj, map, 2, 4, 2 'törmäilyä (bugivaroitus, 2,4,1 = bugi)
SetupCollision handle\obj, player, 2,2,2
ObjectRange handle\obj, 2
//minkälainen luoti kyseessä?
handle\bul = 0
handle\shot_by = i
EndIf
//nyt on seisty hetki, aika jatkaa matkaa
If timer()>enemy_mode_timer(i) Then enemy_mode(i)=0:RotateObject enemy(i), oa
EndIf
//HEALTHBAR
If game_drawn = 0 Then DrawGame : game_drawn = 1
DrawToWorld ON,OFF,ON
Color 80,0,0
Box ObjectX(enemy(i))-15,ObjectY(enemy(i))+30,30,2,0
Color 255,0,0
Box ObjectX(enemy(i))-15,ObjectY(enemy(i))+30,enemy_health(i)*0.6,2
DrawToWorld OFF
EndIf
Next i
//KAMERA
CloneCameraPosition player
//RELOAD-PALKKI
If player_gun <> 2 Then 'flamethrowerin reload-palkki
player_reload = 100-(Float(max(0,player_shoot_delay-Timer()))/float(gun_delay(player_gun)))*100 'hoho, prosenttilaskua jne...
EndIf
//--//4.0 PIIRRETÄÄN
If game_drawn = 0 Then DrawGame
game_drawn = 0
//KÄYTTÖLIITTYMÄ (harmaat palkit jne)
'harmaa palkki
Color 40,40,40
Box 0,420,640,60
Color 20,20,20
Box 0,420,640,2
'käytössä oleva ase
SetFont font_1
Color 190,190,190
Text 10, 440, gun_name( player_gun)
'health palkki
Color 80,0,0
Box 159,430,102,17
Color 200,0,0
Box 159,430,player_health,17
Color 200,100,100
Box 159,430,102,17,0
'reload palkki
Color 20,20,20
Box 159,452,102,17
Color 100,100,100
Box 159,452,102,17,0
Color 80,80,80
Box 160,453,player_reload,15
'keskipalkki
Color 20,20,20
Box 319,420,2,60
'konsoli
SetFont font_0
Color 200,200,0
For i=0 To 4
Text 325,420+i*12,console_line(i)
Next i
DrawScreen
Forever
//-----------------------------------------//END MAIN 6.0
Function console_write(s$) 'kirjoita konsoliin
For i=0 To 3
console_line(i)=console_line(i+1)
Next i
console_line(4)=s
EndFunction
Function sgn(f#) 'sign +/-1
If f>=0 Then Return 1.0 Else Return -1.0
EndFunction
Function splash(otsikko$,viesti$) 'viesti ruudulle
SetFont font_1
h=(Len(viesti)/26)*20+100
DrawGame
//loota
Color 80,80,80
Box 320-150,100,300,h
Color 20,20,20
Box 320-150,100,300,h,0
//otsikko
Color 155,155,155
CenterText 322,122,otsikko
Color 255,255,255
CenterText 320,120,otsikko
//teksti (lolol rivitys)
For i=0 To Len(viesti)/26
Text 180,160+i*20,Mid(viesti,i*26+1,26)
Next i
DrawScreen OFF
WaitKey
WaitKey
EndFunction