`Created by David `18/12/06 `---------------- `Name: Undecided `Genre: Arcade Style Fighting Game sync on : sync rate 60 backdrop on color backdrop RGB(255,0,0) hide mouse autocam off `Load Objects `---skip this for now, use primitives--- load image "image.png",1 load image "lava.jpg",2 load object "skull.x",500 gosub MakePrimitives gosub DeclaringVariables gosub Lighting do if mouseclick()=1 and NormalAttack=0 gosub NormalAttack NormalAttack=1 endif if NormalAttack=1 if object exist(10)=1 move object 10,10 if Object Position X(10)>1100 or Object Position Z(10)>1100 or Object Position X(10)<-1100 or Object Position Z(10)<-1100 delete object 10 Normalattack=0 endif endif endif if mouseclick()=2 and MeleeAttack=0 MeleeAttack=1 gosub MeleeAttack endif gosub PositionP1 gosub Stats gosub Jumping gosub Movement gosub Death gosub ThirdPersonCam gosub MakeEnemies gosub EnemyGravity gosub PositionEnemies gosub KillEnemy gosub RePosEnemy gosub EnemyAttack gosub EnemyMoveAttack gosub MoveEnemy gosub EnemyDodge gosub Setupenemyshot gosub EnemyJump gosub KnockBack gosub MeleeAttackTimer sync loop `Declares the Variables required to run the game (does not include player position) DeclaringVariables: XDist#=200.0: YDist#=200.0: ZDist#=200.0 enemyamount=3 type EnemyLocation x z y alive counter movecounter enemyshoot jump jumpspeed# jumpspeedset dodging dodgetimer endtype dim enemylocation(enemyamount+20) as EnemyLocation for a=20 to enemyamount+19 enemylocation(a).alive=0 enemylocation(a).counter=rnd(2)+3 enemylocation(a).movecounter=0 enemylocation(a).enemyshoot=0 next a alive=1 MeleeAttack=0 MeleeAttackTimer=0 return `Controls all the variables responsible for jumping and also gravity Jumping: IF SPACEKEY()=1 AND Jumping#=0 THEN Jump#=1 IF Jump#=1 Jump_Speed#=5 Jumping#=1 Jump#=0 ENDIF IF Jumping#=1 DEC Jump_Speed#,.1 POSITION OBJECT 1,X#,Y#+Jump_Speed#,Z# ENDIF IF Object Collision (1,5)=1 Jumping#=0 ELSE IF Jumping#=0 Jumping#=1: Jump_Speed#=-3 ENDIF ENDIF return `Points P1 in the right direction and also rotates the camera ThirdPersonCam: MMx = Mousemovex()/3 Xc# = WrapValue(Xc# + MMx) Zc# = WrapValue(Zc# + MMx) Position Camera newxvalue(Object Position X(1),Xc#,XDist#),newyvalue(Object Position Y(1)+50,10.0,0),newzvalue(Object Position Z(1),Zc#,ZDist#) Yrotate Object 1,WrapValue(Camera Angle Y()+MMx) Point Camera Object Position X(1),Object Position Y(1),Object Position Z(1) return `Makes the primitives to play the game MakePrimitives: make object sphere 1,50 color object 1,RGB(255,0,255) make object box 5,1000,1000,3 color object 5,0 XROTATE OBJECT 5,-90 position object 5,0,-100,0 texture object 5,1 return `Places P1 at the correct coordinates PositionP1: if alive=1 X#=OBJECT POSITION X(1) Y#=OBJECT POSITION Y(1) Z#=OBJECT POSITION Z(1) position object 1,X#,Y#,Z# endif if alive=0 inc alivecounter endif if alivecounter>300 alivecounter=0 alive=1 endif return `Shows status of the game (camera position, fps, etc) Stats: ink RGB(0,255,0),0 FPS#=SCREEN FPS() TEXT 0,0,"FPS: "+STR$(FPS#) TEXT 0,20,"CAMERA POSITION: "+STR$(cpx)+","+STR$(cpy)+","+STR$(cpz) TEXT 0,40,"EnemyShoot: "+STR$(enemylocation(20).enemyshoot) TEXT 0,60,"SCORE: "+STR$(score) TEXT 0,80,"Counter: "+STR$(enemylocation(20).counter) TEXT 0,100,"MoveCounter: "+STR$(enemylocation(20).movecounter) TEXT 0,120,"Enemy Y Pos: "+STR$(enemylocation(20).y) TEXT 0,140,"Dodge Variable: "+STR$(enemylocation(20).dodging) TEXT 0,160,"Dodge Timer: "+STR$(enemylocation(20).dodgetimer) TEXT 0,180,"Enemy Jump Speed: "+STR$(enemylocation(20).jumpspeed#) TEXT 0,200,"KnockBackTime: "+STR$(KnockBackTime) TEXT 0,220,"Melee Attack: "+STR$(MeleeAttack) TEXT 0,240,"Melee Attack Timer: "+STR$(MeleeAttackTimer) cpx=camera position x() cpy=camera position y() cpz=camera position z() return `Controls player movement using the keys WASD Movement: if object exist(1)=1 IF KEYSTATE(17)=1 MOVE OBJECT 1,4 ENDIF IF KEYSTATE(31)=1 MOVE OBJECT 1,-4 ENDIF IF KEYSTATE(30)=1 MOVE OBJECT LEFT 1,3 endif IF KEYSTATE(32)=1 MOVE OBJECT RIGHT 1,3 endif endif return NormalAttack: make object sphere 10,10 texture object 10,2 position object 10,X#,Y#+20,Z# set object to object orientation 10,1 gosub EnemySetDodgeVar return MakeEnemies: for a=20 to enemyamount+19 if object exist(a)=0 make object sphere a,50 color object a,RGB(0,0,0) enemylocation(a).x=rnd(500)-500 enemylocation(a).z=rnd(500)-500 enemylocation(a).y=1000 position object a,enemylocation(a).x,enemylocation(a).y,enemylocation(a).z enemylocation(a).alive=1 endif next a return EnemyGravity: for a=20 to enemyamount+19 if OBJECT EXIST (a)=1 if OBJECT COLLISION (a,5)=0 if enemylocation(a).jump=0 enemylocation(a).y=enemylocation(a).y-5 endif endif endif next a return PositionEnemies: for a=20 to enemyamount+19 if object exist (a)=1 position object a,enemylocation(a).x,enemylocation(a).y,enemylocation(a).z endif next a return KillEnemy: for a=20 to enemyamount+19 if object exist (a)=1 if object exist (10)=1 if object hit (a,10)=1 delete object a inc score,100 NormalAttack=0 delete object 10 endif endif endif next a return RePosEnemy: for a=20 to enemyamount+19 if object exist(a)=1 if OBJECT POSITION Y(a)<-2000 delete object a endif endif next a return EnemyAttack: for a=20 to enemyamount+19 if object exist(a)=1 point object a,X#,Y#,Z# if object exist (a+100)=0 if enemylocation(a).enemyshoot=0 and (enemylocation(a).y-Y#)^2<400 make object sphere a+100,20 position object a+100,enemylocation(a).x,enemylocation(a).y,enemylocation(a).z set object to object orientation a+100,a enemylocation(a).enemyshoot=RND(300)+100 endif endif if enemylocation(a).movecounter=400 enemylocation(a).movecounter=0 enemylocation(a).counter=rnd(2)+3 endif endif next a return MoveEnemy: for a=20 to 19+enemyamount if object exist(a)=1 if enemylocation(a).counter=0 and enemylocation(a).movecounter<500 point object a,X#,Y#,Z# move object a,3 inc enemylocation(a).movecounter enemylocation(a).x=Object Position x(a) enemylocation(a).z=Object Position z(a) endif endif next a return EnemyMoveAttack: for a=20 to enemyamount+19 if object exist(a+100)=1 move object a+100,15 if object hit(a+100,1)=1 delete object a+100 enemylocation(a).enemyshoot=RND(100)+100 endif if object exist(a+100)=1 if Object Position X(a+100)>1100 or Object Position Z(a+100)>1100 or Object Position X(a+100)<-1100 or Object Position Z(a+100)<-1100 delete object a+100 if enemylocation(a).counter>0 dec enemylocation(a).counter endif enemylocation(a).enemyshoot=RND(300)+100 endif endif endif next a return Death: if Object Position Y(1)<-2000 Position Object 1,0,30,0 Jumping#=0 endif for a=20 to enemyamount+10 if object exist(a+100)=1 if object hit(a+100,1)=1 delete object a+100 delete object 1 alive=0 endif endif next a return EnemyDodge: for a=20 to enemyamount+19 if object exist(a) if object exist(10) if intersect object (a,object position x(10),object position y(10),object position z(10),enemylocation(a).x,enemylocation(a).y,enemylocation(a).z)<200 if enemylocation(a).dodging=0 if enemylocation(a).dodgetimer>0 move object left a,4 enemylocation(a).x=object position x(a) enemylocation(a).z=object position z(a) dec enemylocation(a).dodgetimer endif endif if enemylocation(a).dodging=1 if enemylocation(a).dodgetimer>0 move object right a,4 enemylocation(a).x=object position x(a) enemylocation(a).z=object position z(a) dec enemylocation(a).dodgetimer endif endif if enemylocation(a).dodging=2 if enemylocation(a).jumpspeedset=0 enemylocation(a).jumpspeed#=5.6 enemylocation(a).jumpspeedset=1 endif endif endif endif endif next a return Setupenemyshot: for a=20 to enemyamount+19 if enemylocation(a).enemyshoot>0 dec enemylocation(a).enemyshoot endif next a return EnemyJump: for a=20 to enemyamount+19 if enemylocation(a).jumpspeedset=1 if enemylocation(a).jumpspeed#>-5.6 enemylocation(a).jump=1 enemylocation(a).y=enemylocation(a).y+enemylocation(a).jumpspeed# dec enemylocation(a).jumpspeed#,.2 endif if enemylocation(a).jumpspeed#<-5.6 enemylocation(a).jump=0 enemylocation(a).jumpspeedset=0 enemylocation(a).jumpspeed#=0 endif endif next a return EnemySetDodgeVar: for a=20 to enemyamount+19 enemylocation(a).dodging=RND(2) enemylocation(a).dodgetimer=30 next a return Lighting: Position Light 0,500,200,500 point light 0,0,0,0 Make Light 1 Position Light 1,-500,200,-500 point light 1,0,0,0 return MeleeAttack: for a=20 to enemyamount+19 play object 1,1,10 if object hit(1,a) KnockBack=1 KnockBackID=a KnockBackTime=20 endif next a MeleeAttackTimer=20 return KnockBack: if KnockBack=1 if KnockBackTime>0 dec KnockBackTime move object KnockBackID,-3 enemylocation(KnockBackID).x=Object Position X(KnockBackID) enemylocation(KnockBackID).z=Object Position Z(KnockBackID) endif If KnockBackTime<1 KnockBack=0 endif endif return MeleeAttackTimer: if MeleeAttackTimer>0 dec MeleeAttackTimer endif if MeleeAttackTimer=0 MeleeAttack=1 endif return