Code: Select all
SCREEN 800, 600
SAFEEXIT OFF
Global tausta
'Vaikeustaso (100 on jo vaikea, nostaminen helpottaa)
'LEVINC on vaikeustason muutosnopeus
Dim LEVEL As Float
LEVEL = 50.0
Const LEVINC = 0.5
'Liikkeen moninkertaistus (Pikseliä/frame)
Const MVMUL = 8
Const ZMVMUL = 6
Const DIACOM = 0.707106781 'Vinottaisliikkeen kompensointii ( 1 / sqrt( 2 ) )
'Säädä tähän 1 ja kärsi
Const EPILEPSY = 1
'Cooldown ja patien dama ja nopeus
Const CLDOWN = 10
Const BLTDMG = 25
Const BLTSPD = 15
Const CLIPSZ = 16
Const RLDTIEM = 60
'Pisteitä per osuma
Const PNTAMO = 5
'Zombien spawnietäisyys
Const MINRNG = 64
Const MAXRNG = 256
'Zombien vaurio ja kesto
Const ZOMDMG = 2.0
Const ZOMHEA = 10.0
'Ruudun rajat
Const _RBORD = 378
Const _LBORD = -378
Const _UBORD = -278
Const _DBORD = 278
FrameLimit 40
ClsColor 255, 255, 255 'Iloinen valkoinen mualima
Smooth2D ON
Type Bullet 'Pum ja sillee
Field obj As Integer
Field dmg As Float
Field spd As Float
EndType
Type Zombie 'Zombejaaaaaaaaa
Field obj As Integer
Field hp As Float
Field dmg As Float
EndType
Dim HP, _upmv, _sdmv As Float
Global MasterZombo As Integer
Dim Soldier, i, _pts, _x, _y, _fix, _fix2, _fix3, _fix4, _zsp, _cld, _clip, _empty As Integer
Dim iz.Zombie, z.Zombie, b.Bullet, pz.Bullet
Soldier = LoadObject( "media/soldier.bmp", 72 )
MasterZombo = LoadObject( "media/guy.bmp", 72 )
MasterBullet = LoadObject( "media/bullet.bmp", 72 )
ShowObject MasterZombo, OFF
ShowObject MasterBullet, OFF
_clip = CLIPSZ
_zsp = 0
_rld = 0
_pts = 0
HP = 100.0
tausta = MakeImage(800,600)
DrawToImage tausta
Lock Image(tausta)
For i=0 To 800
For j=0 To 600
vari = Rand(1,20) + (Rand(150,200) Shl 8) + (Rand(1,50) Shl 16) + (255 Shl 24)
PutPixel2 i,j,vari
Next j
Next i
Unlock Image(tausta)
DrawToScreen
Repeat
DrawImage tausta,0,0
_upmv = ( KeyDown( cbKeyD ) - KeyDown( cbKeyA ) )
_sdmv = ( KeyDown( cbKeyW ) - KeyDown( cbKeyS ) )
If _upmv > 0 And _sdmv > 0
'Molemmat näppäimet on painettu pohjaan
'Täten molempiin voidaan vain sijoittaa uusi arvo
_upmv = DIACOM
_sdmv = DIACOM
EndIf
'Hiiriohjaus + mitälie
TranslateObject Soldier, _upmv * MVMUL, _sdmv * MVMUL
RotateObject Soldier, -GetAngle( ObjectX( Soldier ), ObjectY( Soldier ), MouseWX(), MouseWY() )
_x = ObjectX( Soldier )
_y = ObjectY( Soldier )
DrawGame
'Jostain syystä vaatii tämän
_fix = _LBORD
If _x < _LBORD Then
PositionObject Soldier, _fix, _y
_x = ObjectX( Soldier )
_y = ObjectY( Soldier )
EndIf
If _y < _UBORD Then
PositionObject Soldier, _x, _UBORD
_x = ObjectX( Soldier )
_y = ObjectY( Soldier )
EndIf
If _x > _RBORD Then
PositionObject Soldier, _RBORD, _y
_x = ObjectX( Soldier )
_y = ObjectY( Soldier )
EndIf
If _y > _DBORD Then
PositionObject Soldier, _x, _DBORD
_x = ObjectX( Soldier )
_y = ObjectY( Soldier )
EndIf
_zsp = _zsp - 1
If _zsp =< 0 Then
_zsp = Int( LEVEL )
LEVEL = Max(LEVEL - LEVINC, 0)
SpawnZombo()
EndIf
_cld = _cld - 1
If KeyHit( cbKeyR ) Then
_clip = 0
_cld = 0
_empty = RLDTIEM
EndIf
If _clip > 0 And MouseDown( 1 ) And _cld =< 0 Then
_cld = CLDOWN
_clip = _clip - 1
b.Bullet = New( Bullet )
b\obj = CloneObject( MasterBullet )
b\dmg = BLTDMG
b\spd = BLTSPD
CloneObjectPosition b\obj, Soldier
CloneObjectOrientation b\obj, Soldier
ElseIf _clip =< 0 Then
If _empty =< 0 Then
_clip = CLIPSZ
_empty = RLDTIEM
Else
_empty = _empty - 1
EndIf
EndIf
For iz.Zombie = Each Zombie
PointObject iz\obj, Soldier
MoveObject iz\obj, ZMVMUL
Color cbBlack
If ObjectsOverlap( iz\obj, Soldier, 2 ) Then
'EPILEPSIA
DrawScreen
If EPILEPSY Then ClsColor Sin( Timer() + Rand( 360 ) ), Sin( Timer() + Rand( 360 ) ), Sin( Timer() + Rand( 360 ) )
HP = HP - iz\dmg
EndIf
For pz.Bullet = Each Bullet
If ObjectsOverlap( pz\obj, iz\obj, 2 ) Then
x1# = ObjectX(iz\obj)+400
y1# = Abs(ObjectY(iz\obj)-300)
_pts = _pts + PNTAMO
iz\hp = iz\hp - pz\dmg
angle# = GetAngle(_x + 400,Abs(_y - 300),x1#,y1#)
Blood(x1#,y1#,angle#)
DeleteObject pz\obj
Delete pz
EndIf
Next pz
If iz\hp =< 0 Then
DeleteObject iz\obj
Delete iz
EndIf
Next iz
For pz.Bullet = Each Bullet
MoveObject pz\obj, pz\spd
_x = ObjectX( pz\obj )
_y = ObjectY( pz\obj )
_fix = _LBORD
_fix2 = _UBORD
_fix3 = _RBORD
_fix4 = _DBORD
If ( _x < _fix ) Or ( _y < _fix2 ) Or ( _x > _fix3 ) Or ( _y > _fix4 ) Then
DeleteObject pz\obj
Delete pz
EndIf
Next pz
SetWindow "HP: " + HP + " Panokset: " + _clip + " Pisteet: " + _pts + " Seuraava: " + _zsp
DrawScreen
ClsColor 255, 255, 255
If HP < 0 Then MakeError "Hävisit, lopulliset pisteet " + _pts
Forever
Function SpawnZombo()
z.Zombie = New( Zombie )
z\obj = CloneObject( MasterZombo )
z\dmg = ZOMDMG
z\hp = ZOMHEA
_fix = _UBORD
_fix2 = _LBORD
Select Rand( 0, 3 )
Case 0
PositionObject z\obj, _RBORD + Rand( MINRNG, MAXRNG ), Rand( _fix, _DBORD )
Case 1
PositionObject z\obj, _LBORD - Rand( MINRNG, MAXRNG ), Rand( _fix, _DBORD )
Case 2
PositionObject z\obj, Rand( _fix2, _RBORD ), _DBORD + Rand( MINRNG, MAXRNG )
Case 3
PositionObject z\obj, Rand( _fix2, _RBORD ), _UBORD - Rand( MINRNG, MAXRNG )
EndSelect
ShowObject z\obj, ON
EndFunction
Function blood(x,y,angle)
DrawToImage tausta
Lock Image(tausta)
For i=0 To 200
vari = 0 + (0 Shl 8) + (Rand(100,255) Shl 16) + (255 Shl 24)
px# = x
py# = y
px = px + Cos(angle + Rand(-25,25))*Rand(1,55)
py = py - Sin(angle + Rand(-25,25))*Rand(1,55)
If px < 800 And px > 0 And py > 0 And py < 600 Then PutPixel2 px,py,vari
Next i
For i=0 To 400
vari = 0 + (0 Shl 8) + (Rand(100,255) Shl 16) + (255 Shl 24)
px# = x
py# = y
px = px + Cos(Rand(0,360))*Rand(1,35)
py = py - Sin(Rand(0,360))*Rand(1,35)
If px < 800 And px > 0 And py > 0 And py < 600 Then PutPixel2 px,py,vari
vari = 0 + (0 Shl 8) + (Rand(50,200) Shl 16) + (255 Shl 24)
px# = x
py# = y
px = px + Cos(Rand(0,360))*Rand(1,15)
py = py - Sin(Rand(0,360))*Rand(1,15)
If px < 800 And px > 0 And py > 0 And py < 600 Then PutPixel2 px,py,vari
Next i
Unlock Image(tausta)
DrawToScreen
EndFunction