Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

DarkBASIC Professional Discussion / DBPro FPS WEAPON HELP

Author
Message
Darkbasic FPS help
15
Years of Service
User Offline
Joined: 29th Mar 2011
Location:
Posted: 1st Apr 2011 03:01
Um well i\'m having big trouble with my animations and guns. Take a look and see if u could fix this coding so that it plays the animation when u walk,shoot,and reload and stops it when u would normally stop it. I\'ve searched around all day and still can\'t find a solution. Thanks.


`Setup Client Options

SYNC ON:SYNC RATE 0:HIDE MOUSE

`Create all media needed

` Our character
MAKE OBJECT SPHERE 1,50:COLOR OBJECT 1,RGB(000,255,000)OSITION OBJECT 1,0,0,-400
` An enemy
MAKE OBJECT SPHERE 2,50:COLOR OBJECT 2,RGB(255,000,000)OSITION OBJECT 2,130,0,0
` A large wall
load image \"brickwall01a.png\",1
MAKE OBJECT BOX 3 ,500,400,10OSITION OBJECT 3,0,0,150
texture object 3,1
scale object texture 3,5,3
` An ammo crate
MAKE OBJECT BOX 4,15,20,50:COLOR OBJECT 4,RGB(000,255,255)OSITION OBJECT 4,-40,0,0
` Some ground to walk on
load image \"Boden Clean.jpg\",2
MAKE OBJECT PLAIN 5,10000,10000:XROTATE OBJECT 5,-90
texture object 5,2
scale object texture 5,200,200

`Make sure all the objects are on ground level
FOR Object = 1 TO 4
POSITION OBJECT Object, OBJECT POSITION X(Object), OBJECT SIZE Y(Object)/2,OBJECT POSITION Z(Object)
NEXT Object

`Load Gun
set dir \"J:\\Final Game\\Weapons\\M203M402G\"
load object \"HUD.x\",10
XRotate Object 10,-15
YRotate Object 10,180
Fix object pivot 10
set object texture 10,1,1
Scale object 10,80,110,70
position object 10,3,2.5,5
Lock object on 10



`Load sounds
Load Sound \"footstep.wav\",3
Load Sound \"fire.wav\",4
Load Sound \"reload.wav\",5

`Add limb for intersection checks
MAKE OBJECT SPHERE 9999,10
MAKE MESH FROM OBJECT 1,9999
DELETE OBJECT 9999

`Bullet Intersection Limb
ADD LIMB 1,1,1
OFFSET LIMB 1,1,0,0,500
HIDE LIMB 1,1

`Front Intersection Limb
ADD LIMB 1,2,1
OFFSET LIMB 1,2,0,0,OBJECT SIZE Z(1)/2
HIDE LIMB 1,2

`Back Intersection Limb
ADD LIMB 1,3,1
OFFSET LIMB 1,3,0,0,-OBJECT SIZE Z(1)/2
HIDE LIMB 1,3

`Right Intersection Limb
ADD LIMB 1,4,1
OFFSET LIMB 1,4,OBJECT SIZE X(1)/2,0,0
HIDE LIMB 1,4

`Left Intersection Limb
ADD LIMB 1,5,1
OFFSET LIMB 1,5, -OBJECT SIZE X(1)/2,0,0
HIDE LIMB 1,5

`Define the main variables needed
EnemyHP=5000` Enemy\'s Health
Ammo=1000` Starting Ammo
MaxAmmo=1000` Maximum amount of Ammo
Clips=3` Starting Clips
MaxClips=3` Maximum amount of Clips
Jumping=0
ScreenWidth#=SCREEN WIDTH()
ScreenHeight#=SCREEN HEIGHT()

`Start main DO/LOOP
DO

`Screen FPS
FPS=SCREEN FPS()
TEXT 0,0,\"FPS: \"+STR$(FPS)

`Movement Controls
IF KEYSTATE(17)=1
XAngle#=OBJECT ANGLE X(1)
XROTATE OBJECT 1,0
MOVE OBJECT 1,.5
XROTATE OBJECT 1,XAngle#
ENDIF

IF KEYSTATE(31)=1
XAngle#=OBJECT ANGLE X(1)
XROTATE OBJECT 1,0
MOVE OBJECT 1,-.5
XROTATE OBJECT 1,XAngle#
ENDIF

IF KEYSTATE(30)=1 THEN MOVE OBJECT LEFT 1,.3
IF KEYSTATE(32)=1 THEN MOVE OBJECT RIGHT 1,.3


`Define variables for lag reduction
X#=OBJECT POSITION X(1)
Y#=OBJECT POSITION Y(1)
Z#=OBJECT POSITION Z(1)

`Camera Positioning
POSITION CAMERA X#,Y#,Z#



set object speed 10,15


if (KEYSTATE(17)= 1)
set object speed 10,35
rotate object 10,0,180,0
loop object 10 , 50 , 80
else
set object speed 10,20
rotate object 10,0,180,0
loop object 10, 21 , 49

endif

if (KEYSTATE(31)= 1)
set object speed 10,35
rotate object 10,0,180,0
loop object 10 , 50 , 79
endif

if (KEYSTATE(30)= 1)
set object speed 10,35
rotate object 10,0,180,0
loop object 10 , 50 , 79
endif

if (KEYSTATE(32)= 1)
set object speed 10,35
rotate object 10,0,180,0
loop object 10 , 50 , 79
endif




if mouseclick() = 1
loop object 10,81,82
play sound 4
endif


IF (KEYSTATE(19)=1)
set object speed 10,20
play object 10,96,160
PLAY SOUND 5
ENDIF

`Space key Controls
IF SPACEKEY()=1 AND Jumping=0 THEN Jump=1

`JUMP Variable Definition
IF Jump=1
Jump_Speed#=.5
Jumping=1
Jump=0
ENDIF

`Jumping
IF Jumping=1
DEC Jump_Speed#,.003
POSITION OBJECT 1,X#,Y#+Jump_Speed#, Z#
ENDIF

`Mouse Camera Movement
Camy#=Camy#+MOUSEMOVEX()*.1
Camx#=Camx#+MOUSEMOVEY()*.1
IF Camx#>90 AND Camx#<135 THEN Camx#=90
IF Camx#>270 AND Camx#<225 THEN Camx#=90
YROTATE CAMERA Camy#
XROTATE CAMERA Camx#
YROTATE OBJECT 1,Camy#
XROTATE OBJECT 1,Camx#

`Mouseclick Shooting
IF KEYSTATE(19)=0 AND MOUSECLICK()=1
IF Ammo>0 THEN DEC Ammo,1
IF OBJECT EXIST(2)=1
IF Ammo>0 AND INTERSECT OBJECT (2, LIMB POSITION X(1,1), LIMB POSITION Y(1,1), LIMB POSITION Z(1,1), X#,Y#,Z#)>0 THEN DEC EnemyHP,1
ENDIF
ENDIF

`Check if the enemy should die, if so delete it
IF EnemyHP=0 AND OBJECT EXIST(2)=1 THEN DELETE OBJECT 2

`Reloading (press R)
IF MOUSECLICK()=0 AND KEYSTATE(19)=1 AND Ammo<MaxAmmo AND Clips>0
Reload=1
ENDIF

`Reloading Part 2 (delay)
IF Reload=1 THEN INC Time#,.003
IF Time#>=1 THEN Ammo=MaxAmmoEC Clips,1:Time#=0:Reload=0

`Ammo Crate code (obtain ammo from ground)
IF OBJECT EXIST(4)=1
IF Ammo<MaxAmmo AND INTERSECT OBJECT (4, X#,Y#-50,Z#, X#,Y#,Z#)>0
INC Clips,(MaxClips-Clips)
INC Ammo,(MaxAmmo-Ammo)
DELETE OBJECT 4
ENDIF
ENDIF

`Display text above enemy and crate object
IF OBJECT EXIST(2)=1 THEN CENTER TEXT OBJECT SCREEN X(2),OBJECT SCREEN Y(2)-70,\"Enemy Health: \"+str$(EnemyHP)
IF OBJECT EXIST(4)=1 THEN CENTER TEXT OBJECT SCREEN X(4),OBJECT SCREEN Y(4)-20,\"Ammo Crate\"

`Display our Ammo and Clips on-screen
TEXT 0,ScreenHeight#-50,\"Ammo: \"+str$(Ammo)
TEXT 0,ScreenHeight#-40,\"Clips: \"+str$(Clips)

`Show that we\'re reloading
IF Reload=1 THEN CENTER TEXT ScreenWidth#/2,ScreenHeight#/2,\"Reloading...\"

`Add a target reticule to the screen
CIRCLE ScreenWidth#/2,ScreenHeight#/2,5

`Check for collision with objects, and handle appropriately

`Ground Intersection Check
IF INTERSECT OBJECT (5,X#,(Y#-OBJECT SIZE Y(1)/2),Z#,X#,Y#,Z#)>0
Jumping=0
ELSE
IF Jumping=0
Jumping=1: Jump_Speed=-1
ENDIF
ENDIF

`Front Intersection Check
IF INTERSECT OBJECT (3,LIMB POSITION X(1,2),LIMB POSITION Y(1,2),LIMB POSITION Z(1,2),X#,Y#,Z#)
`If intersection infront, move the user backwards
MOVE OBJECT 1,-1

ENDIF

`Back Intersection Check
IF INTERSECT OBJECT (3,LIMB POSITION X(1,3),LIMB POSITION Y(1,3),LIMB POSITION Z(1,3),X#,Y#,Z#)
`If intersection behind, move user forwards
MOVE OBJECT 1,1

ENDIF

`Right Intersection Check
IF INTERSECT OBJECT (3,LIMB POSITION X(1,4),LIMB POSITION Y(1,4),LIMB POSITION Z(1,4),X#,Y#,Z#)
`If intersection to the right, move the user left
MOVE OBJECT LEFT 1,1

ENDIF

`Left Intersection Check
IF INTERSECT OBJECT (3,LIMB POSITION X(1,5),LIMB POSITION Y(1,5),LIMB POSITION Z(1,5),X#,Y#,Z#)
`If intersection to the left, move user right
MOVE OBJECT RIGHT 1,1

ENDIF

`Refresh the screen(SYNC) and call the LOOP function

SYNC

LOOP
KISTech
18
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 1st Apr 2011 03:37
Put your code inside a code box.



[/code]

I've read in several places not to use PLAY OBJECT or LOOP OBJECT. The timing is apparently hard to keep synchronized or something...

Store the beginning and ending frames of each animation in an array, then keep a couple of variables for the object/character animation. The current frame, and the current animation. Then use SET OBJECT FRAME to set it to the desired frame. Depending on the speed of the animations you can set a timer to fire off animation updates.

Not sure what models you are using, but the current ones I'm using look good when their frame is updated every 50 milliseconds.

Login to post a reply

Server time is: 2026-07-11 14:56:10
Your offset time is: 2026-07-11 14:56:10