Help anyone who can figure out what's wrong with this code: essentially the missile won't show up on either ship, though other functions work fine. Here's the code, it's from Hands On DarkBasic Pro pg 666-671
Rem Project: duel01
Rem Created: Sunday, September 29, 2013
Rem ***** Main Source File *****
` Declare constants
#CONSTANT leftshipid 1
#CONSTANT rightshipid 2
#CONSTANT maximumshipspeed 30
#CONSTANT missilespeed 15
#CONSTANT screenheight 1024
#CONSTANT screenwidth 1280
` Define types
TYPE MissileType
spriteno AS INTEGER
trajectory AS INTEGER
moves AS INTEGER
ENDTYPE
TYPE ShipType
spriteno AS INTEGER ` Ship's sprite number
velocity AS INTEGER ` Ship's velocity vector number
angle AS FLOAT ` Angle of rotation of the ship
missile AS MissileType ` Ship's missile sprite number
ENDTYPE
` Declare globals
GLOBAL leftship AS ShipType
GLOBAL rightship AS ShipType
` Main program logic
InitialiseGame()
REPEAT
keyspressed = HandleKeyboard()
leftship.angle = HandleShip(leftship, keyspressed)
rightship.angle = HandleShip(rightship, keyspressed >> 4)
kill = HandleMissiles()
WAIT 5
UNTIL kill <> 0
GameOver(kill)
WAIT KEY
END
FUNCTION InitialiseGame()
SetUpScreen()
InitialiseShipsData()
PrepareSprites()
ENDFUNCTION
FUNCTION SetUpScreen()
` Set screen resolution
SET WINDOW POSITION 400, 20
SET DISPLAY MODE screenwidth, screenheight, 32
` Create a black background
COLOR BACKDROP 0
BACKDROP ON
ENDFUNCTION
FUNCTION InitialiseShipsData()
` Initialise left ship variable
leftship.spriteno = leftshipid
leftship.velocity = leftshipid
leftship.angle = 0
leftship.missile.spriteno = leftshipid + 10
leftship.missile.trajectory = leftshipid + 10
leftship.missile.moves = 0
` Create ship's velocity vector
result = MAKE VECTOR2(leftship.velocity)
SET VECTOR2 leftship.velocity, 0, 0
` Initialise right ship variable
rightship.spriteno = rightshipid
rightship.velocity = rightshipid
rightship.angle = 0
rightship.missile.spriteno = rightshipid + 10
rightship.missile.trajectory = rightshipid + 10
rightship.missile.moves = 0
` Create ship's velocity vector
result = MAKE VECTOR2(rightship.velocity)
SET VECTOR2 rightship.velocity, 0, 0
ENDFUNCTION
FUNCTION PrepareSprites()
` Load left ship's animated sprite
CREATE ANIMATED SPRITE leftship.spriteno, "media\ship01.bmp", 3, 1, 1
` Move its origin to centre
OFFSET SPRITE leftship.spriteno, SPRITE WIDTH(leftship.spriteno)/2, SPRITE HEIGHT(leftship.spriteno)/2
` Position left ship
SPRITE leftship.spriteno, 100, SCREEN HEIGHT()/2, 1
` Load right ship's animated sprite
CLONE SPRITE leftship.spriteno, rightship.spriteno
` Position right ship
SPRITE rightship.spriteno, SCREEN WIDTH()-100, SCREEN HEIGHT()/2, 2
` Load image used by missiles
LOAD IMAGE "media\missile.bmp", 2
ENDFUNCTION
FUNCTION HandleKeyboard()
` No keys pressed
keyspressed = 0
` IF z pressed set bit 0
IF KEYSTATE(44) = 1
keyspressed = keyspressed || %1
ENDIF
` IF x pressed set bit 1
IF KEYSTATE(45) = 1
keyspressed = keyspressed || %10
ENDIF
` IF c pressed set bit 2
IF KEYSTATE(46) = 1
keyspressed = keyspressed || %100
ENDIF
` IF v pressed set bit 3
IF KEYSTATE(47) = 1
keyspressed = keyspressed || %1000
ENDIF
` IF 1 pressed set bit 4
IF KEYSTATE(79) = 1
keyspressed = keyspressed || %10000
ENDIF
` IF 2 pressed set bit 5
IF KEYSTATE(80) = 1
keyspressed = keyspressed || %100000
ENDIF
` IF . pressed set bit 6
IF KEYSTATE(83) = 1
keyspressed = keyspressed || %1000000
ENDIF
` IF ENTER pressed set bit 7
IF KEYSTATE(156) = 1
keyspressed = keyspressed || %10000000
ENDIF
ENDFUNCTION keyspressed
FUNCTION HandleShip(ship AS ShipType, keyspressed)
` IF bit 0, add to angle
IF (keyspressed && 1) > 0
ship.angle = WRAPVALUE(ship.angle-5)
ENDIF
` IF bit 1, subtract from angle
IF (keyspressed && 2) > 0
ship.angle = WRAPVALUE(ship.angle+5)
ENDIF
` IF bit 2 THEN
IF (keyspressed && 4) > 0
` Calculate thrust vector
thrustxoffset# = COS(ship.angle+270)
thrustyoffset# = SIN(ship.angle+270)
thrustvector = 5
result = MAKE VECTOR2(thrustvector)
SET VECTOR2 thrustvector, thrustxoffset#, thrustyoffset#
` Add thrust to velocity
ADD VECTOR2 ship.velocity, ship.velocity, thrustvector
` Reduce speed if too fast
IF LENGTH VECTOR2(ship.velocity) > maximumshipspeed
MULTIPLY VECTOR2 ship.velocity, maximumshipspeed/ LENGTH VECTOR2(ship.velocity)
ENDIF
` Show engine firing
PLAY SPRITE ship.spriteno, 2, 3, 20
ELSE
` Show normal ship
SET SPRITE FRAME ship.spriteno, 1
ENDIF
` IF bit 3 AND missile does not currently exist
IF (keyspressed && 8) > 0 AND (NOT SPRITE EXIST(ship.missile.spriteno))
CreateMissile(ship)
ENDIF
` Rotate sprite to latest angle
ROTATE SPRITE ship.spriteno, ship.angle
` Move sprite velocity amount
SPRITE ship.spriteno, SPRITE X(ship.spriteno) + X VECTOR2(ship.velocity), SPRITE Y(ship.spriteno) + Y VECTOR2(ship.velocity), 1
WrapShip(ship)
ENDFUNCTION ship.angle
FUNCTION CreateMissile(ship AS ShipType)
` IF missile already exists, exit routine
IF SPRITE EXIST(ship.missile.spriteno)
EXITFUNCTION
ENDIF
` Missile's basic velocity based on ship's angle
launchvector = 31
result = MAKE VECTOR2(launchvector)
launchmissileX# = COS(ship.angle+270)*15
launchmissileY# = SIN(ship.angle+270)*15
SET VECTOR2 launchvector, launchmissileX#, launchmissileY#
` Missile's path is basic velocity + ship's velocity
result = MAKE VECTOR2(ship.missile.trajectory)
ADD VECTOR2 ship.missile.trajectory, ship.velocity, launchvector
` Rotate and position sprite to front of ship
SPRITE ship.missile.spriteno, SPRITE X(ship.spriteno), SPRITE Y(ship.spriteno), 2
ROTATE SPRITE ship.missile.spriteno, SPRITE ANGLE(ship.spriteno)
MOVE SPRITE ship.missile.spriteno, 50
` Delete the basic velocity vector used earlier
result = DELETE VECTOR2(launchvector)
ENDFUNCTION
FUNCTION WrapShip(ship AS ShipType)
` IF off left edge, bring back on right edge
IF SPRITE X(ship.spriteno) < 0
SPRITE ship.spriteno, SCREEN WIDTH(), SPRITE Y(ship.spriteno), ship.spriteno
ELSE
` IF off right edge, bring back at left
IF SPRITE X(ship.spriteno) > SCREEN WIDTH()
SPRITE ship.spriteno, 0, SPRITE Y(ship.spriteno), ship.spriteno
ELSE
` IF off top, bring on at bottom
IF SPRITE Y(ship.spriteno) < 0
SPRITE ship.spriteno, SPRITE X(ship.spriteno), SCREEN HEIGHT(), ship.spriteno
ELSE
IF SPRITE Y(ship.spriteno) > SCREEN HEIGHT()
SPRITE ship.spriteno, SPRITE X(ship.spriteno), 0, ship.spriteno
ENDIF
ENDIF
ENDIF
ENDIF
ENDFUNCTION
FUNCTION HandleMissiles()
kill = 0
` IF the left ship's missile exists THEN
IF SPRITE EXIST(leftship.missile.spriteno)
` Move missile on screen
MOVE SPRITE leftship.missile.spriteno, LENGTH VECTOR2(leftship.missile.trajectory)
` IF missile hits ship
IF SPRITE HIT(leftship.missile.spriteno, rightship.spriteno) > 0
` Delete missile and right ship
DELETE SPRITE leftship.missile.spriteno
result = DELETE VECTOR2(leftship.missile.trajectory)
leftship.missile.moves = 0
DELETE SPRITE rightship.spriteno
kill = rightship.spriteno
ELSE
` Increment the number of moves made
INC leftship.missile.moves
` IF more than 30 moves, destroy missile
IF leftship.missile.moves > 30
DELETE SPRITE leftship.missile.spriteno
result = DELETE VECTOR2(leftship.missile.trajectory)
leftship.missile.moves = 0
ENDIF
ENDIF
ENDIF
IF SPRITE EXIST(rightship.missile.spriteno)
MOVE SPRITE rightship.missile.spriteno, LENGTH VECTOR2(rightship.missile.trajectory)
IF SPRITE HIT(rightship.missile.spriteno, leftship.spriteno) > 0
` Delete missile and right ship
DELETE SPRITE rightship.missile.spriteno
result = DELETE VECTOR2(rightship.missile.trajectory)
rightship.missile.moves = 0
DELETE SPRITE leftship.spriteno
kill = leftship.spriteno
ELSE
INC rightship.missile.moves
IF rightship.missile.moves > 30
DELETE SPRITE rightship.missile.spriteno
result = DELETE VECTOR2(rightship.missile.trajectory)
rightship.missile.moves = 0
ENDIF
ENDIF
ENDIF
ENDFUNCTION kill
FUNCTION GameOver(kill)
` Hide bany sprite on screen
HIDE ALL SPRITES
` Create a new sprite
CREATE ANIMATED SPRITE 3, "media\ship01.bmp", 3, 1, 1
OFFSET SPRITE 3, SPRITE WIDTH(3)/2, SPRITE HEIGHT(3)/2
SPRITE 3, 640, 480, 1
` Set sprite's angle to zero
angle = 0
` Set font details
SET TEXT FONT "Arial Black"
SET TEXT SIZE 40
` Record start time
starttime = TIMER()
REPEAT
` Display screen title
SET CURSOR 550, 100
PRINT "Game Over"
` Rotate ship
ROTATE SPRITE 3, angle
angle = WRAPVALUE(angle + 5)
` Display winner details
SET CURSOR 510, 900
IF kill = 2
PRINT "Left ship wins"
ELSE
PRINT "Right ship wins"
ENDIF
UNTIL TIMER() - starttime > 8000
ENDFUNCTION
sorry if i didn't post properly (code snippet)