Kun ampuu pelaajalla 2, ääni kuuluu myös pelaajalta 1. Kun pelaajalla 2 vaihtaa asetta, se palaa aloituspaikkaansa?
Myös kasa muita ongelmia on että jos joku viitsisi vähän korjailla koodia.
Code: Select all
SCREEN 640, 480
//********************************************************************************
// Weapon.cb
//
// Aseet ja ammukset
//********************************************************************************
//--------------------------------------------------------------------------------
// Globaalit
//--------------------------------------------------------------------------------
Global gLastShoot : gLastShoot = 0 // Koska on viimeksi ammuttu
Global gLastShoot2 : gLastShoot2 = 0
//--------------------------------------------------------------------------------
// Aseet
//--------------------------------------------------------------------------------
Const WPN_PISTOL = 1 // DESSUT
Const WPN_SMG = 2 // ak 47!
Const WPN_SPAS = 3 // sinko
Const WPN_COUNT = 3 // kaikki aseet
//--------------------------------------------------------------------------------
// Aseiden ominaisuudet
//--------------------------------------------------------------------------------
Const WPNF_CHARACTER = 1 // Pelihahmon objekti
Const WPNF_RELOADTIME = 2 // Aseen latausaika
Const WPNF_BULLET = 3 // Ammusobjekti
Const WPNF_BULLETSPEED = 4 // Ammuksen lentonopeus
Const WPNF_BULLET_FORTH = 5 // Ammuksen lähtöpaikka pelaajan etupuolella (aseen piipun sijainti pelaajaan nähden)
Const WPNF_BULLET_YAW = 6 // Ammuksen lähtöpaikka sivusuunnassa (aseen piipun sijainti pelaajaan nähden)
Const WPNF_IMAGE = 7 // Aseen infokuva
Const WPNF_SPREAD = 8 // Ammusten hajonta asteina
Const WPNF_SHOOTSOUND = 9 // Ampumisen ääni
Const WPNF_COUNT = 9 // Tietoalkioiden lukumäärä
//--------------------------------------------------------------------------------
// Asetaulukko ja sen alustus
//--------------------------------------------------------------------------------
Dim aWeapon(WPN_COUNT, WPNF_COUNT)
// DESSUT
aWeapon(WPN_PISTOL, WPNF_CHARACTER) = LoadObject("media/pelaaja1.bmp", 45)
aWeapon(WPN_PISTOL, WPNF_RELOADTIME) = 500
aWeapon(WPN_PISTOL, WPNF_BULLET) = LoadObject("media/pistol_bullet.png", 45)
aWeapon(WPN_PISTOL, WPNF_BULLETSPEED) = 19
aWeapon(WPN_PISTOL, WPNF_BULLET_FORTH) = 33
aWeapon(WPN_PISTOL, WPNF_BULLET_YAW) = 10
aWeapon(WPN_PISTOL, WPNF_IMAGE) = LoadImage("media/pistol.png")
aWeapon(WPN_PISTOL, WPNF_SPREAD) = 0
aWeapon(WPN_PISTOL, WPNF_SHOOTSOUND) = LoadSound("media/pistol_shot.wav")
// AK 47!!
aWeapon(WPN_SMG, WPNF_CHARACTER) = LoadObject("media/pelaaja1.bmp", 45)
aWeapon(WPN_SMG, WPNF_RELOADTIME) = 100
aWeapon(WPN_SMG, WPNF_BULLET) = LoadObject("media/tracer_bullet.png", 45)
aWeapon(WPN_SMG, WPNF_BULLETSPEED) = 15
aWeapon(WPN_SMG, WPNF_BULLET_FORTH) = 35
aWeapon(WPN_SMG, WPNF_BULLET_YAW) = 8
aWeapon(WPN_SMG, WPNF_IMAGE) = LoadImage("media/smg.png")
aWeapon(WPN_SMG, WPNF_SPREAD) = 3
aWeapon(WPN_SMG, WPNF_SHOOTSOUND) = LoadSound("media/smg_shot.wav")
//SINKO
aWeapon(WPN_SPAS, WPNF_CHARACTER) = LoadObject("media/pelaaja1.bmp", 45)
aWeapon(WPN_SPAS, WPNF_RELOADTIME) = 2000
aWeapon(WPN_SPAS, WPNF_BULLET) = LoadObject("media/rocket.png", 45)
aWeapon(WPN_SPAS, WPNF_BULLETSPEED) = 8
aWeapon(WPN_SPAS, WPNF_BULLET_FORTH) = 35
aWeapon(WPN_SPAS, WPNF_BULLET_YAW) = 8
aWeapon(WPN_SPAS, WPNF_IMAGE) = LoadImage("media/sinko.png")
aWeapon(WPN_SPAS, WPNF_SPREAD) = 3
aWeapon(WPN_SPAS, WPNF_SHOOTSOUND) = LoadSound("media\bazooka_shot.wav")
// Piilotetaan objektit
For i = 1 To WPN_COUNT
ShowObject aWeapon(i, WPNF_CHARACTER), OFF
ShowObject aWeapon(i, WPNF_BULLET), OFF
Next i
//--------------------------------------------------------------------------------
// Kokoelma ammuksille
//--------------------------------------------------------------------------------
Type BULLETS
Field obj // Ammusobjekti
Field weapon // Millä aseella tämä on ammuttu
EndType
Type BULLETS2
Field obj
Field weapon
EndType
Global gMap : gMap = LoadMap("media/uustestmap.til", "media/negative2.bmp")
// Luodaan tyhjä pelaajaobjekti
Global ville : ville = MakeObject()
Global jorma : jorma = MakeObject()
'botti
// Asetetaan törmäys
SetupCollision ville, gMap, 2, 4, 2
SetupCollision jorma, gMap, 2, 4, 2
SetupCollision jorma, ville, 2, 2, 2
SetupCollision ville, jorma, 2, 2, 2
// Pelaajan ase
Global gCurrentWeapon : gCurrentWeapon = WPN_PISTOL
Global gCurrentWeapon2 : gCurrentWeapon2 = WPN_PISTOL
// Pääsilmukka
Repeat
UpdateBullets()
UpdateBullets2()
Paintville()
ControlPlayer()
ControlPlayer2()
Paintjorma()
DrawGame
DrawImage aWeapon(gCurrentWeapon, WPNF_IMAGE), 0, 0
DrawImage aWeapon(gCurrentWeapon2, WPNF_IMAGE), 0, 0
DrawScreen
Forever
//================================================================================
// Maalataan pelaajaobjekti sen mukaan mikä ase sillä on
//================================================================================
Function Paintville()
// Käytössä olevan aseen tietoa säilytetään objektin integer-muuttujassa
currentWeapon = ObjectInteger(ville)
// Ei maalailla turhaan jos oikea pelihahmo on jo valittu
If currentWeapon = gCurrentWeapon Then Return True
// Maalataan pelaajaobjekti aseen mukaisella kuvalla
PaintObject ville, aWeapon(gCurrentWeapon, WPNF_CHARACTER)
ObjectInteger ville, gCurrentWeapon
EndFunction
Function Paintjorma()
// Käytössä olevan aseen tietoa säilytetään objektin integer-muuttujassa
currentWeapon2 = ObjectInteger(jorma)
// Ei maalailla turhaan jos oikea pelihahmo on jo valittu
If currentWeapon2 = gCurrentWeapon2 Then Return True
// Maalataan pelaajaobjekti aseen mukaisella kuvalla
PaintObject jorma, aWeapon(gCurrentWeapon2, WPNF_CHARACTER)
ObjectInteger jorma, gCurrentWeapon2
PositionObject jorma, 20,40
EndFunction
//================================================================================
// Pelaajan kontrollointi
//================================================================================
Function ControlPlayer()
// Pelaajan liikuttelu
If LeftKey() Then TurnObject ville,5
If RightKey() Then TurnObject ville,-5
If UpKey() Then MoveObject ville,3
If DownKey() Then MoveObject ville,-4
// Asetta voidaan vaihtaa tai sillä voidaan ampua vain
// jos aseen latausaika on mennyt umpeen.
If gLastShoot + aWeapon(gCurrentWeapon, WPNF_RELOADTIME) < Timer() Then
// Aseen vaihto Tab-näppäimellä
If KeyHit(54) Then gCurrentWeapon + 1
// Varmistetaan vielä että ase on olemassa
If gCurrentWeapon < 1 Then gCurrentWeapon = WPN_COUNT
If gCurrentWeapon > WPN_COUNT Then gCurrentWeapon = 1
// Ampuminen
If KeyDown(28) Then Shoot()
EndIf
EndFunction
Function ControlPlayer2()
// Pelaajan liikuttelu
If KeyDown(30) Then TurnObject jorma,5
If KeyDown(32) Then TurnObject jorma,-5
If KeyDown(17) Then MoveObject jorma,3
If KeyDown(31) Then MoveObject jorma,-4
// Asetta voidaan vaihtaa tai sillä voidaan ampua vain
// jos aseen latausaika on mennyt umpeen.
If gLastShoot2 + aWeapon(gCurrentWeapon2, WPNF_RELOADTIME) < Timer() Then
// Aseen vaihto shift-näppäimellä
If KeyHit(18) Then gCurrentWeapon2 + 1
// Varmistetaan vielä että ase on olemassa
If gCurrentWeapon2 < 1 Then gCurrentWeapon2 = WPN_COUNT
If gCurrentWeapon2 > WPN_COUNT Then gCurrentWeapon2 = 1
// Ampuminen
If KeyDown(34) Then Shoot2()
EndIf
EndFunction
//================================================================================
// Ampuminen
//================================================================================
Function Shoot(_yaw = 1)
// Luodaan uusi ammus
b.BULLETS = New(BULLETS)
b\obj = CloneObject(aWeapon(gCurrentWeapon, WPNF_BULLET))
b\weapon = gCurrentWeapon
// Asetetaan oikeaan asentoon
CloneObjectOrientation b\obj, ville
// Hajonta
TurnObject b\obj, Rnd(-aWeapon(gCurrentWeapon, WPNF_SPREAD), aWeapon(gCurrentWeapon, WPNF_SPREAD))
// Asetetaan oikeaan paikkaan
CloneObjectPosition b\obj, ville
// Siirretään vielä piipun kohdalle.
// Sopivat siirtymäarvot haetaan asetaulukosta.
MoveObject b\obj, aWeapon(gCurrentWeapon, WPNF_BULLET_FORTH), aWeapon(gCurrentWeapon, WPNF_BULLET_YAW) * _yaw
// Jos ammuttiin pistoolilla niin tehdään vielä toinen ammus toiselle aseelle
If _yaw = 1 And gCurrentWeapon = WPN_PISTOL Then Shoot(-1)
// Soitetaan vielä ampumisen ääni
PlaySound aWeapon(gCurrentWeapon, WPNF_SHOOTSOUND)
gLastShoot = Timer()
EndFunction
//================================================================================
// Päivitetään ammuksia
//================================================================================
Function UpdateBullets()
For b.BULLETS = Each BULLETS
// Liikutetaan ammusta ja sen nopeus riippuu siitä millä aseella se on ammuttu
MoveObject b\obj, aWeapon(b\weapon, WPNF_BULLETSPEED)
// Tarkistetaan ettei osunut seinään
If GetMap(2, ObjectX(b\obj), ObjectY(b\obj)) <> 0 Then
DeleteObject b\obj
Delete b
EndIf
Next b
EndFunction
Function Shoot2(_yaw = 1)
// Luodaan uusi ammus
b.BULLETS = New(BULLETS)
b\obj = CloneObject(aWeapon(gCurrentWeapon2, WPNF_BULLET))
b\weapon = gCurrentWeapon2
// Asetetaan oikeaan asentoon
CloneObjectOrientation b\obj, jorma
// Hajonta
TurnObject b\obj, Rnd(-aWeapon(gCurrentWeapon2, WPNF_SPREAD), aWeapon(gCurrentWeapon2, WPNF_SPREAD))
// Asetetaan oikeaan paikkaan
CloneObjectPosition b\obj, jorma
// Siirretään vielä piipun kohdalle.
// Sopivat siirtymäarvot haetaan asetaulukosta.
MoveObject b\obj, aWeapon(gCurrentWeapon2, WPNF_BULLET_FORTH), aWeapon(gCurrentWeapon2, WPNF_BULLET_YAW) * _yaw2
// Jos ammuttiin pistoolilla niin tehdään vielä toinen ammus toiselle aseelle
If _yaw2 = 1 And gCurrentWeapon2 = WPN_PISTOL Then Shoot(-1)
// Soitetaan vielä ampumisen ääni
PlaySound aWeapon(gCurrentWeapon, WPNF_SHOOTSOUND)
gLastShoot2 = Timer()
EndFunction
Function UpdateBullets2()
For b.BULLETS = Each BULLETS
// Liikutetaan ammusta ja sen nopeus riippuu siitä millä aseella se on ammuttu
MoveObject b\obj, aWeapon(b\weapon, WPNF_BULLETSPEED)
// Tarkistetaan ettei osunut seinään
If GetMap(2, ObjectX(b\obj), ObjectY(b\obj)) <> 0 Then
DeleteObject b\obj
Delete b
EndIf
Next b
EndFunction