Ajattelin taas aloittaa vanhan projun jatkoa ja muistinkin, että se kaatuu siihen mysteeri maviin.
Ei joku millään viittis selittää tuon mavin etsinnän alkeita, että pääsisin etiäppäin.
Laitan nyt vie koodinkin.
Code: Select all
SCREEN 800,600,0,1
FrameLimit 80
playerpoints = 0
Playerhealth=100
suit=100
clip=8
font = LoadFont("arial",30,1,0)
SetFont font
// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
Field obj
End Type
// Ladataan media
Gosub LoadMedia
// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
Field obj
Field energy
End Type
Gosub MakeEnemies
/////// PÄÄSILMUKKA ///////
Repeat
Gosub CheckButtons
Gosub EnemyAI
Gosub CheckBullets
Gosub DrawGUI
// Siirretään kameraa pelaajan mukana
CloneCameraPosition player
If playerhealth=<0 Then
playerhealth=0
EndIf
If suit=<0 Then
suit=0
EndIf
Color cbBlackSkin
Text 280,564,"FPS:"+FPS()
Color cbBlackSkin : Text 280,468, playerpoints
Color cbBlackSkin : Text 560,468,"Health: "+playerhealth
Color cbBlackSkin : Text 560,500,"Suit: "+suit
Color cbBlackSkin : Text 450,564,"Clip: "+clip
DrawScreen
Until EscapeKey()
/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
// Ladataan kartta ja animoidaan se
croshair = LoadObject("media/crosshair.bmp")
ShowMouse crosshair
map = LoadMap("media/finalbeta.til", "media/Tileset.bmp")
colt = LoadImage("media/colt.bmp")
screenbox = LoadImage("media/screenbox.bmp")
// Ladataan panosobjektin grafiikat ja piilotetaan objekti
bulletobject = LoadObject("Media\bullet.bmp", 360)
ShowObject bulletobject, OFF
// Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
player = LoadObject("Media\Player_Colt.bmp", 360)
SetupCollision player,map,2,4,2
PositionObject player, 120,30
PointObject player,crosshair
// Ladataan vihollinen ja piilotetaan objekti
enemyobject = LoadObject("Media\Enemy_Bar1918.bmp", 360)
ShowObject enemyobject, OFF
coltreload = LoadSound ("media\Colt_reload.wav")
shot = LoadSound("Media\colt_shot.wav")
scream = LoadSound("Media\scream1.wav")
Return
// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
If KeyDown(17) Then MoveObject player,3
If KeyDown(31) Then MoveObject player,-3
If KeyDown(30) Then TurnObject player,6
If KeyDown(32) Then TurnObject player,-6
// Tarkistetaan painetaanko ampumisnäppäintä ja jos,
// niin luodaan ammus ja törmäystunnistus sille
If MouseHit(1) And clip=>1 Then
clip=clip-1
PlaySound shot
blt.BULLETS = New(BULLETS)
blt\obj = CloneObject(bulletobject)
CloneObjectPosition blt\obj, player
CloneObjectOrientation blt\obj, player
MoveObject blt\obj,15
SetupCollision blt\obj,map,2,4,1
ResetObjectCollision blt\obj
EndIf
If KeyHit(cbkeyr) Then
clip=8
PlaySound coltreload
EndIf
If clip=<0 Then clip=0
Return
// Aliohjelma, jossa tehdään viholliselle alkeellinen tekoäly
EnemyAI:
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
// jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
If ObjectSight(enem\obj,player) Then
PointObject enem\obj, player
EndIf
If ObjectsOverlap (enem\obj,player) Then
playerhealth = playerhealth -2
suit = suit -5
EndIf
Next enem
Return
// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
For blt.BULLETS = Each BULLETS
MoveObject blt\obj, 50
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan osuuko ammus viholliseen
If ObjectsOverlap(blt\obj, enem\obj, 2) Then
deleteobj = 1
enem\energy = enem\energy - 40
playerpoints = playerpoints + 100
EndIf
Next enem
bulcollisions = CountCollisions(blt\obj)
For i = 1 To bulcollisions
// Tarkistetaan onko ammus osunut seinään
If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
Next i
If deleteobj = 1 Then
DeleteObject blt\obj
Delete blt
deleteobj = 0
EndIf
Next blt
Return
// Aliohjelma jossa piirretään "käyttöliittymä"
DrawGUI:
DrawGame
DrawToWorld ON
// Käydään viholliset läpi
For enem.ENEMIES = Each ENEMIES
PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
EnWidth = enem\energy / 3
Color cbWhite
Box PosX,PosY,33,6
Color cbBlue
Box PosX+1,PosY-1,EnWidth-2,4
If enem\energy <= 0 Then
// Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
PlaySound scream,20
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
// Kirjoitetaan muuttujat näytölle
DrawImage colt,31,466
DrawImage screenbox,0,452
Return
// Aliohjelma, jossa määritetään viholliset ja niiden energia
MakeEnemies:
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,100,-500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,100,500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,-500,100
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,500,100
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
Return
Niin ja taisi olla myös niin, että crosshairin käyttö hiiren tilalla ei ole minulta vielä kertaakaan onnistunut, joten siinä voi olla kans joitain virheitä. En muistaakseni saanut sitä tässä pelissä toimimaan, kun viimeksi yritin.