A early testing demo of my game by Laak15th Apr 2006 21:07
|
---|
Summary this is a testing version of my game. please tell me what you think and any suggestions. right now it does not have any effects, interface, or good graphics. will put in mine, rock Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com Rem Project: BOBBLE2A Rem Created: 3/27/2006 6:19:01 PM Rem ***** Main Source File ***** REM USEFUL DATA REMSTART HEADER: 1-10: PLAYER 1 10-20: PLAYER 2 20-100: WORLD AND EFFECTS 100-300: BULLETS 300-400: INTERACTIVE OBJECTS(POWERUPS,TURRETS,ETC) POWERUP IDS: 1=HEALTH 2=SPEED 3=MINES 4=ROCKETS REMEND REM COMPLETE REMAKE OF THE ORIGINAL BOBBLE GAME RANDOMIZE TIMER() SYNC ON SET DISPLAY MODE 1280,1024,0 `SET WINDOW SIZE 960,768 `SET WINDOW POSITION 160,128 HIDE MOUSE GOSUB LOAD_SEQ GOSUB INIT_PLAYER_1 GOSUB INIT_PLAYER_2 GOSUB INIT_GLOBAL_VARS GOSUB INIT_BULLETS GOSUB INIT_POWERUPS GOSUB MAKE_TERRAIN GOSUB MAKE_BOUNDING GOSUB MAKE_LIGHTING GOSUB MAKE_WATER GOSUB INIT_EFFECTS GOSUB UPDATE_OBJECTS GOSUB INIT_SOUNDS DO GOSUB REFRESH GOSUB GLOBAL_TIMER REM UPDATES TIMER FOR INTERPOLATION BASED MOVEMENT IF LOOP_COUNT > 10 GOSUB CONTROLS_Q_MOVEMENT ENDIF REM THIS ALSO UPDATES PLAYER POSITION GOSUB UPDATE_PLAYER_EFFECTS REM FOR DIFFERENT PLAYER GRAPHICS EFFECTS GOSUB BULLETS REM THIS UPDATES AND CONTROLS BULLETS. FIRE COMMAND IS GENERATED IN THE CONTROLS SECTION GOSUB WATER_ENGINE REM FOR DECIDING WHICH WATER MESHES TO RENDER AS ALPHA GOSUB COLLISIONS_BULLETS REM GOSUB COLLISIONS_TANKS GOSUB EFFECTS REM SMOKE,WATER FOAM,EXPLOSIONS,ETC GOSUB UPDATE_POWERUPS GOSUB GLOBAL_SOUNDS GOSUB UPDATE_CAMERA LOOP LOAD_SEQ: TANK_TEX = 1 MATRIX_TEX = 2 SKYBOX_TEX = 4 WATER_TEX = 3 EXPL_TEX = 5 POW1_TEX = 6 POW2_TEX = 7 FIRE1_SND = 2 HIT1_SND = 3 WATER1_SND = 4 TANK1_SND = 5 TANK2_SND = 6 M1= 1 SET CURSOR 500,480 PRINT "LOADING" SYNC LOAD IMAGE "LEAD.BMP",TANK_TEX LOAD IMAGE "GRASSTEX2.JPG",MATRIX_TEX LOAD IMAGE "WATERSHINE2.BMP",WATER_TEX,1 LOAD IMAGE "allround.bmp",SKYBOX_TEX,1 load image "health_powerup.bmp",POW1_TEX,1 LOAD IMAGE "SPEED_powerup.JPG",POW2_TEX,1 LOAD SOUND "BUTTON 2.WAV",FIRE1_SND LOAD SOUND "HIT TUBE.WAV",HIT1_SND LOAD SOUND "ROWING BOAT LOOP.WAV",WATER1_SND LOAD SOUND "SKIDOO LOOP.WAV",TANK1_SND CLONE SOUND TANK2_SND,TANK1_SND SET SOUND VOLUME TANK1_SND,92 SET SOUND VOLUME TANK2_SND,92 LOAD MUSIC "ARCADE6.MIDI",M1 RETURN INIT_PLAYER_1: TYPE PLAYER R AS INTEGER G AS INTEGER B AS INTEGER SX AS FLOAT SY AS FLOAT SZ AS FLOAT X as float Y as float Z AS FLOAT SPEED AS FLOAT TANK_ANG AS FLOAT TURRET_ANG AS FLOAT HEALTH AS FLOAT ACCELERATE_ON AS INTEGER MOVE_ON AS INTEGER TURN_TANK_ON AS INTEGER TURN_TURRET_ON AS INTEGER ACCEL_RATE AS FLOAT DECCEL_RATE AS FLOAT TURN_TANK_RATE AS FLOAT TURN_TURRET_RATE AS FLOAT SPEED_CAP AS FLOAT FIRE_W_1 AS BOOLEAN FIRE_W_2 AS BOOLEAN CURRENT_BULLET AS INTEGER COL_RAD AS FLOAT JOYX AS FLOAT JOYY AS FLOAT JOYZ AS FLOAT CONTROL_TYPE AS FLOAT BUL_DEL AS FLOAT COLLISION AS BOOLEAN COL_COUNT AS INTEGER SPEED_COUNT AS INTEGER ENDTYPE P1 AS PLAYER P1.R = RND(255) P1.G = RND(255) P1.B = RND(255) P1.SX = 0 P1.SY = 0 P1.SZ = 300 P1.HEALTH = 100 P1.TURN_TANK_RATE = .1 P1.ACCEL_RATE = .0007 P1.DECCEL_RATE = .00007 P1.SPEED_CAP = .2 P1.CURRENT_BULLET = 0 P1.COL_RAD = 11 P1.BUL_DEL = 9 P1.SPEED = .00001 TYPE CAMERA X AS INTEGER Y AS INTEGER Z AS INTEGER AX AS INTEGER AY AS INTEGER AZ AS INTEGER DIST AS FLOAT HEIGHT AS FLOAT SMOOTH AS INTEGER RANGE AS INTEGER ENDTYPE C1 AS CAMERA C1.DIST = 100 C1.HEIGHT = 30 C1.SMOOTH = 25 C1.RANGE = 6000 Autocam off make camera 1 POSITION CAMERA 1,0,0,0 POSITION CAMERA 1,0,50,400 YROTATE CAMERA 1,180 set camera view 1,0,0,1280,512 set camera aspect 1,2.25 SET CAMERA RANGE 1,1,C1.RANGE MAKE OBJECT CUBE 1,20 SCALE OBJECT 1,100,30,100 MAKE OBJECT SPHERE 2,20 MAKE OBJECT CYLINDER 3,10 XROTATE OBJECT 3,90 FIX OBJECT PIVOT 3 SCALE OBJECT 3,50,225,50 SET OBJECT CULL 3,0 FOR T=4 TO 7 MAKE OBJECT SPHERE T,9 NEXT T POSITION OBJECT 1,P1.SX,P1.SY,P1.SZ POSITION OBJECT 2,P1.SX,P1.SY,P1.SZ POSITION OBJECT 3,P1.SX,P1.SY,P1.SZ `COLOR OBJECT 1,RGB(P1.R,P1.G,P1.B) TEXTURE OBJECT 1,TANK_TEX TEXTURE OBJECT 2,TANK_TEX TEXTURE OBJECT 3,TANK_TEX FOR T= 4 TO 7 TEXTURE OBJECT T,TANK_TEX NEXT T `COLOR OBJECT 2,RGB(P1.R,P1.G,P1.B) `COLOR OBJECT 3,RGB(P1.R,P1.G,P1.B) SET OBJECT EMISSIVE 1,RGB(0,50,255) SET OBJECT EMISSIVE 2,RGB(0,50,255) SET OBJECT EMISSIVE 3,RGB(0,50,255) FOR T= 4 TO 7 SET OBJECT EMISSIVE T,RGB(0,50,255) NEXT T RETURN INIT_PLAYER_2: P2 AS PLAYER P2.R = RND(255) P2.G = RND(255) P2.B = RND(255) P2.X = 0 P2.Y = 0 P2.Z = -500 P2.HEALTH = 100 P2.TURN_TANK_RATE = .1 P2.ACCEL_RATE = .0007 P2.DECCEL_RATE = .00007 P2.SPEED_CAP = .2 P2.TURN_TURRET_RATE = .2 P2.CURRENT_BULLET = 0 P2.COL_RAD = 11 P2.CONTROL_TYPE = 1 P2.SPEED = .00001 C2 AS CAMERA C2.DIST = 100 C2.HEIGHT = 30 C2.SMOOTH = 25 C2.RANGE = 6000 make camera 2 position camera 2,0,50,-400 YROTATE CAMERA 2,0 set camera view 2,0,512,1280,1024 set camera aspect 2,2.25 SET CAMERA RANGE 2,1,C2.RANGE MAKE OBJECT CUBE 11,20 SCALE OBJECT 11,100,30,100 MAKE OBJECT SPHERE 12,20 MAKE OBJECT CYLINDER 13,10 XROTATE OBJECT 13,90 FIX OBJECT PIVOT 13 SCALE OBJECT 13,50,225,50 SET OBJECT CULL 13,0 FOR T=14 TO 17 MAKE OBJECT SPHERE T,9 NEXT T POSITION OBJECT 11,P2.SX,P2.SY,P2.SZ POSITION OBJECT 12,P2.SX,P2.SY,P2.SZ POSITION OBJECT 13,P2.SX,P2.SY,P2.SZ `COLOR OBJECT 11,RGB(P2.R,P2.G,P2.B) TEXTURE OBJECT 11,TANK_TEX TEXTURE OBJECT 12,TANK_TEX TEXTURE OBJECT 13,TANK_TEX FOR T= 14 TO 17 TEXTURE OBJECT T,TANK_TEX NEXT T `COLOR OBJECT 12,RGB(P2.R,P2.G,P2.B) `COLOR OBJECT 13,RGB(P2.R,P2.G,P2.B) SET OBJECT EMISSIVE 11,RGB(0,50,255) SET OBJECT EMISSIVE 12,RGB(0,50,255) SET OBJECT EMISSIVE 13,RGB(0,50,255) FOR T= 14 TO 17 SET OBJECT EMISSIVE T,RGB(0,50,255) NEXT T RETURN INIT_GLOBAL_VARS: TIME1 AS INTEGER ` VARIABLES TO DEDUCE ELAPSED TIME FROM CYCLE TO CYCLE TIME2 AS INTEGER ` '' ELAPSED AS INTEGER ` '' AMBIENT AS INTEGER`AMBIENT LIGHT LEVEL MATOFFSETX AS INTEGER ` OFFSET VALUE OF MATRIX FROM ORIGIN MATOFFSETX AS INTEGER ` '' START_COUNTER AS INTEGER REM USE TO LOCK MOVEMENT UNTIL FRAME RATE STEADIES. LOOP_COUNT AS INTEGER REM USED TO FIND OUT AVERAGE FRAME RATE FOR ENTIRE PROGRAM AND ADJUST CAMERA SMOOTH VALUES ACCORDINGLY `SOMETIMES A RAPID CHANGE IN FPS CAN DISRUPT THE INTERPOLATION ENGINE TEXT_SIZE AS INTEGER ` KINDOF OBVIOUS TEXT_FONT AS STRING NMOUSE AS INTEGER ` TWO MOUSE VALUES FOR DETERMINING MOUSE SPEED PMOUSE AS INTEGER ` '' MOVEMOUSE AS INTEGER BULLET_DELAY AS FLOAT CURRENT_EXPLOSION AS INTEGER AMBIENT = 40 START_COUNTER = 150 MATOFFSETX = -500 MATOFFSETZ = -500 ELAPSED = 1 TEXT_FONT = "ARIAL" TEXT_SIZE = 18 CURRENT_EXPLOSION = 0 BUL_RATE = 100 RETURN INIT_BULLETS: type bullet ID AS INTEGER SPEED AS FLOAT COLORR AS INTEGER COLORB AS INTEGER COLORG AS INTEGER ALIVE AS BOOLEAN START_X_POS AS FLOAT START_Y_POS AS FLOAT START_Z_POS AS FLOAT X AS FLOAT Y AS FLOAT Z AS FLOAT X_ANGLE AS FLOAT Y_ANGLE AS FLOAT Z_ANGLE AS FLOAT SIZE AS FLOAT RANGE AS FLOAT DAMAGE AS FLOAT HEIGHT AS FLOAT endtype DIM P1_BULLETS(100) AS BULLET DIM P2_BULLETS(100) AS BULLET FOR T=0 TO 99 P1_BULLETS(T).ID = T P1_BULLETS(T).SPEED = .25 P1_BULLETS(T).COLORR = RND(255) P1_BULLETS(T).COLORG = RND(255) P1_BULLETS(T).COLORB = RND(255) P1_BULLETS(T).START_X_POS = P1.X P1_BULLETS(T).START_Y_POS = P1.Y P1_BULLETS(T).START_Z_POS = P1.Z P1_BULLETS(T).Y_ANGLE = P1.TANK_ANG P1_BULLETS(T).SIZE = 6.5 P1_BULLETS(T).RANGE = 3000 P1_BULLETS(T).DAMAGE = 1 P1_BULLETS(T).HEIGHT = 5 MAKE OBJECT SPHERE T+100,P1_BULLETS(T).SIZE,5,5 POSITION OBJECT T+100,P1_BULLETS(T).START_X_POS,P1_BULLETS(T).START_Y_POS,P1_BULLETS(T).START_Z_POS COLOR OBJECT T+100,RGB(P1_BULLETS(T).COLORR,P1_BULLETS(T).COLORG,P1_BULLETS(T).COLORB) SET OBJECT EMISSIVE T+100,RGB(P1_BULLETS(T).COLORR/2,P1_BULLETS(T).COLORG/2,P1_BULLETS(T).COLORB/2) NEXT T FOR T=0 TO 99 P2_BULLETS(T).ID = T P2_BULLETS(T).SPEED = .25 P2_BULLETS(T).COLORR = RND(255) P2_BULLETS(T).COLORG = RND(255) P2_BULLETS(T).COLORB = RND(255) P2_BULLETS(T).START_X_POS = P2.X P2_BULLETS(T).START_Y_POS = P2.Y P2_BULLETS(T).START_Z_POS = P2.Z P2_BULLETS(T).Y_ANGLE = P2.TANK_ANG P2_BULLETS(T).SIZE = 6.5 P2_BULLETS(T).RANGE = 3000 P2_BULLETS(T).DAMAGE = 1 P2_BULLETS(T).HEIGHT = 5 MAKE OBJECT SPHERE T+200,P2_BULLETS(T).SIZE,5,5 POSITION OBJECT T+200,P2_BULLETS(T).START_X_POS,P2_BULLETS(T).START_Y_POS,P2_BULLETS(T).START_Z_POS COLOR OBJECT T+200,RGB(P2_BULLETS(T).COLORR,P2_BULLETS(T).COLORG,P2_BULLETS(T).COLORB) SET OBJECT EMISSIVE T+200,RGB(P2_BULLETS(T).COLORR/2,P2_BULLETS(T).COLORG/2,P2_BULLETS(T).COLORB/2) NEXT T RETURN INIT_POWERUPS: TYPE POWERUP VARIANT AS INTEGER `defines type of powerup when spawned COL_RAD AS FLOAT ALIVE AS BOOLEAN HIT AS BOOLEAN ON AS BOOLEAN X AS FLOAT Y AS FLOAT Z AS FLOAT DURATION AS INTEGER ENDTYPE DIM POW(10) AS POWERUP FOR T=0 TO 10 `TEMP = RND(100) `IF TEMP=<40 THEN POW(T).VARIANT = 1 `IF TEMP>40 AND TEMP =<65 THEN POW(T).VARIANT = 2 `IF TEMP>65 AND TEMP =<90 THEN POW(T).VARIANT = 3 `IF TEMP>90 THEN POW(T).VARIANT = 4 `POW(T).VARIANT = RND(1)+1 pow(t).variant = 1 SPAWN_POWERUP(T,T+300,POW(T).VARIANT) NEXT T RETURN MAKE_TERRAIN: MAKE MATRIX 1,1000,1000,75,75 POSITION MATRIX 1,MATOFFSETX,0,MATOFFSETZ PREPARE MATRIX TEXTURE 1,MATRIX_TEX,1,1 FILL MATRIX 1,0,1 FOR T= 1 TO RND(7)+3 SET MATRIX HEIGHT 1,RND(40)+5,RND(40)+5,RND(300)+100 SET MATRIX HEIGHT 1,RND(40)+5,RND(40)+5,RND(300)+100 NEXT T FOR T=3 TO 72 FOR M=72 TO 3 STEP -1 PREVX# = GET MATRIX HEIGHT(1,T-1,M) PREVZ# = GET MATRIX HEIGHT(1,T,M-1) NEXX# = GET MATRIX HEIGHT(1,T+1,M) NEXZ# = GET MATRIX HEIGHT(1,T,M+1) DPREVX# = GET MATRIX HEIGHT(1,T-2,M) DPREVZ# = GET MATRIX HEIGHT(1,T,M-2) DNEXX# = GET MATRIX HEIGHT(1,T+2,M) DNEXZ# = GET MATRIX HEIGHT(1,T,M+2) TPREVX# = GET MATRIX HEIGHT(1,T-3,M) TPREVZ# = GET MATRIX HEIGHT(1,T,M-3) TNEXX# = GET MATRIX HEIGHT(1,T+3,M) TNEXZ# = GET MATRIX HEIGHT(1,T,M+3) ADD# = PREVX# + PREVZ# + NEXX# +NEXZ# + DPREVX# + DPREVZ# + DNEXX# + DNEXZ# + TPREVX# + TPREVZ# + TNEXX# + TNEXZ# H#= ADD# / 6 SET MATRIX HEIGHT 1,T,M,H# NEXT M NEXT T set normalization on For Z =0 To 74 For X = 0 To 74 ` Make Vectors r=Make Vector3(1) r=Make Vector3(2) r=Make Vector3(3) tw#=13 ` need to adjust according to "look" - heavy/light shadows 0-15 `Make two vectors at each vertex in same plane AX# = X: AZ# = Z:AY# = Get matrix Height(1, AX#, AZ#) dzx#=((Get matrix Height(1, AX#, AZ#))- (Get matrix Height(1, AX#+1, AZ#))) dzy#=((Get matrix Height(1, AX#, AZ#))- (Get matrix Height(1, AX#, AZ#+1))) ` Set vectors - based on your axis, might need to change (-) signs Set Vector3 1, -tw#,dzx#,0 Set Vector3 2, 0,-dzy#,tw# ` Get cross product of 2 vertex vectors - gives the normal Cross Product Vector3 3,1,2 `Pull out x,y,z of Normal nx#=x vector3(3) ny#=y vector3(3) nz#=z vector3(3) set matrix normal 1, x,z,nx#,ny#,nz# Next X Next Z UPDATE MATRIX 1 RETURN MAKE_BOUNDING: MAKE OBJECT CUBE 10,5000 SET OBJECT CULL 10,0 TEXTURE OBJECT 10,SKYBOX_TEX SET OBJECT LIGHT 10,0 SET OBJECT TEXTURE 10,2,0 set object texture 10,1,0 RETURN MAKE_LIGHTING: SET AMBIENT LIGHT AMBIENT RETURN MAKE_WATER: rem center water object MAKE OBJECT PLAIN 20,5000,5000 XROTATE OBJECT 20,90 FIX OBJECT PIVOT 20 POSITION OBJECT 20,0,1,0 `color object 20,rgb(0,120,255) TEXTURE OBJECT 20,WATER_TEX `SET ALPHA MAPPING ON 20,70 SET OBJECT EMISSIVE 20,RGB(30,80,180) RETURN INIT_EFFECTS: remstart TYPE EXPLOSION X AS FLOAT Y AS FLOAT Z AS FLOAT ALPHA AS FLOAT SCALE AS FLOAT ALIVE AS BOOLEAN ENDTYPE DIM EXPL(5) AS EXPLOSION FOR T= 0 TO 5 EXPL(T).ALPHA = 100 EXPL(T).SCALE = 100 EXPL(T).ALIVE = 0 MAKE OBJECT SPHERE T+30,10,10,10 HIDE OBJECT T+30 NEXT T remend RETURN UPDATE_OBJECTS: `PLAYER 1 POSITION OBJECT 1,OBJECT POSITION X(1),GET GROUND HEIGHT(1,OBJECT POSITION X(1),OBJECT POSITION Z(1)),OBJECT POSITION Z(1) POSITION OBJECT 2,OBJECT POSITION X(2),GET GROUND HEIGHT(1,OBJECT POSITION X(2),OBJECT POSITION Z(2)),OBJECT POSITION Z(2) POSITION OBJECT 3,OBJECT POSITION X(3),GET GROUND HEIGHT(1,OBJECT POSITION X(3),OBJECT POSITION Z(3)),OBJECT POSITION Z(3) POSITION OBJECT 11,OBJECT POSITION X(11),GET GROUND HEIGHT(1,OBJECT POSITION X(11),OBJECT POSITION Z(11)),OBJECT POSITION Z(11) POSITION OBJECT 12,OBJECT POSITION X(12),GET GROUND HEIGHT(1,OBJECT POSITION X(12),OBJECT POSITION Z(12)),OBJECT POSITION Z(12) POSITION OBJECT 13,OBJECT POSITION X(13),GET GROUND HEIGHT(1,OBJECT POSITION X(13),OBJECT POSITION Z(13)),OBJECT POSITION Z(13) RETURN INIT_SOUNDS: `LOOP SOUND TANK1_SND `LOOP SOUND TANK2_SND LOOP MUSIC M1 RETURN REFRESH: SYNC `FRAME_RATE=50-ELAPSED `IF FRAME_RATE<0 THEN FRAME_RATE= 0 `IF LOOP_COUNT < 100 `IF ELAPSED < 33 THEN WAIT 33-ELAPSED `ENDIF ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` WAIT 0 `ADJUST THIS VALUE TO DECREASE OR INCREASE FRAME RATE. THE `ELAPSED VALUE IS A COUNTER THAT STORES THE NUMBER OF MILLESECONDS SINCE THE LAST UPDATE. SUBTRACT `THIS FROM 33 AND YOU SHOULD HAVE A PRETTY SMOOTH FRAME RATE. FOR FASTER COMPUTERS SUBTRACT FROM 66. `````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````` ```````````````````````````````````````````````````````````````````````````` SET CURSOR 0,0 SET TEXT SIZE TEXT_SIZE SET TEXT FONT TEXT_FONT PRINT "P1.X=",P1.X PRINT "P1.Y=",P1.Y PRINT "P1.Z=",P1.Z PRINT "P2.X=",P2.X PRINT "P2.Y=",P2.Y PRINT "P2.Z=",P2.Z PRINT "ELAPSED =",ELAPSED PRINT "COUNTER=",COUNTER PRINT "P1.SPEED=",P1.SPEED PRINT "P2.SPEED=",P2.SPEED PRINT "FPS=",SCREEN FPS() PRINT "MOUSEMOVEX=",MOVEMOUSE PRINT "W KEY=",KEYSTATE(17) PRINT "P2.ACCEL=",P2.ACCELERATE_ON PRINT "KEY=",SCANCODE() PRINT "P1.CB=",P1.CURRENT_BULLET print "P2.CB=",P2.CURRENT_BULLET PRINT "C1.SMOOTH =",C1.SMOOTH PRINT "LOOPCOUNT=",LOOP_COUNT INK RGB(200,0,90),0 PRINT "P1.HEALTH=",P1.HEALTH PRINT "P2.HEALTH=",P2.HEALTH INK RGB(255,255,255),0 PRINT "JOYX = ",JOYX PRINT "JOYY = ",JOYY PRINT "P2.ACCEL_RATE = ",P2.ACCEL_RATE PRINT "JIO#",JY# PRINT "JY/1000=",JY#/1000 PRINT "P1.COL_COUNT=",P1.COL_COUNT PRINT "P1.COLLISION=",P1.COLLISION PRINT "P1.SPEED_COUNT+",P1.SPEED_COUNT IF KEYSTATE(157) = 1 THEN P1.HEALTH = 100 AND P2.HEALTH = 200 RETURN GLOBAL_TIMER: TIME1 = TIMER() ELAPSED = TIME1-TIME2 TIME2 = TIMER() INC LOOP_COUNT RETURN CONTROLS_Q_MOVEMENT: REM DETECT CONTROLS IF UPKEY() = 1 INC P1.SPEED,ELAPSED*P1.ACCEL_RATE ENDIF IF DOWNKEY() = 1 DEC P1.SPEED,ELAPSED*P1.ACCEL_RATE ENDIF IF RIGHTKEY() = 1 INC P1.TANK_ANG,ELAPSED*P1.TURN_TANK_RATE ENDIF IF LEFTKEY() = 1 DEC P1.TANK_ANG,ELAPSED*P1.TURN_TANK_RATE ENDIF IF MOUSECLICK() = 1 THEN P1.FIRE_W_1 = 1 ELSE P1.FIRE_W_1 = 0 IF P2.CONTROL_TYPE = 1 IF KEYSTATE(17) = 1 AND P2.SPEED<P2.SPEED_CAP INC P2.SPEED,ELAPSED*P2.ACCEL_RATE endif IF KEYSTATE(31) = 1 AND P1.SPEED>-P2.SPEED_CAP DEC P2.SPEED,ELAPSED*P2.ACCEL_RATE ENDIF IF KEYSTATE(32) = 1 INC P2.TANK_ANG,ELAPSED*P2.TURN_TANK_RATE ENDIF IF KEYSTATE(30) = 1 DEC P2.TANK_ANG,ELAPSED*P2.TURN_TANK_RATE ENDIF IF KEYSTATE(51) = 1 DEC P2.TURRET_ANG,ELAPSED*P2.TURN_TURRET_RATE ENDIF IF KEYSTATE(52) = 1 INC P2.TURRET_ANG,ELAPSED*P2.TURN_TURRET_RATE ENDIF IF SPACEKEY() = 1 P2.FIRE_W_1 = 1 ELSE P2.FIRE_W_1 = 0 ENDIF ENDIF IF P2.CONTROL_TYPE =2 JOYX = CONTROL DEVICE X() JOYY = CONTROL DEVICE Y() JOYZ = CONTROL DEVICE Z() JY# = JOYY JX# = JOYX JZ# = JOYZ P2.ACCEL_RATE = JY# / 2000000 P2.TURN_TANK_RATE = JX# / 8000 P2.TURN_TURRET_RATE = JZ# / 5000 IF JOYSTICK FIRE X(5) P2.FIRE_W_1 = 1 ELSE P2.FIRE_W_1 = 0 ENDIF INC P2.SPEED,ELAPSED*P2.ACCEL_RATE INC P2.TANK_ANG,ELAPSED*P2.TURN_TANK_RATE INC P2.TURRET_ANG,ELAPSED*P2.TURN_TURRET_RATE ENDIF REM BEGIN HANDLE FORWARD BACK MOVEMENT IF P1.SPEED > 0 THEN DEC P1.SPEED,P1.DECCEL_RATE*ELAPSED IF P1.SPEED < 0 THEN INC P1.SPEED,P1.DECCEL_RATE*ELAPSED if P1.SPEED > P1.SPEED_CAP THEN P1.SPEED = P1.SPEED_CAP if P1.SPEED < -P1.SPEED_CAP THEN P1.SPEED = -P1.SPEED_CAP P1.X = P1.X + SIN(P1.TANK_ANG)*(P1.SPEED*ELAPSED) P1.Z = P1.Z + COS(P1.TANK_ANG)*(P1.SPEED*ELAPSED) REM PLAYER 2 IF P2.SPEED > 0 THEN DEC P2.SPEED,P2.DECCEL_RATE*ELAPSED IF P2.SPEED < 0 THEN INC P2.SPEED,P2.DECCEL_RATE*ELAPSED if P2.SPEED > P2.SPEED_CAP THEN P2.SPEED = P2.SPEED_CAP if P2.SPEED < -P2.SPEED_CAP THEN P2.SPEED = -P2.SPEED_CAP P2.X = P2.X + SIN(P2.TANK_ANG)*(P2.SPEED*ELAPSED) P2.Z = P2.Z + COS(P2.TANK_ANG)*(P2.SPEED*ELAPSED) REM END HANDLE F+B MOVEMENT REM BEGIN HANDLE TURNING INC P1.TURRET_ANG,MOUSEMOVEX()/3 REM END HANDLE TURNING REM END DETECT REM BEGIN PLAYER UPDATE P1.Y = GET GROUND HEIGHT(1,OBJECT POSITION X(1)-MATOFFSETX,OBJECT POSITION Z(1)-MATOFFSETZ) P2.Y = GET GROUND HEIGHT(1,OBJECT POSITION X(11)-MATOFFSETX,OBJECT POSITION Z(11)-MATOFFSETZ) REM BEFORE POSITIONING, DO A BOUNDS CHECK REM END BOUNDS CHECK REM UPDATE POSITION POSITION OBJECT 1,P1.X,P1.Y,P1.Z POSITION OBJECT 2,P1.X,P1.Y,P1.Z POSITION OBJECT 3,P1.X+SIN(P1.TURRET_ANG)*6,P1.Y+5,P1.Z+COS(P1.TURRET_ANG)*6 YROTATE OBJECT 1,P1.TANK_ANG YROTATE OBJECT 2,P1.TANK_ANG YROTATE OBJECT 3,P1.TURRET_ANG P1.X = OBJECT POSITION X(1) P1.Y = OBJECT POSITION Y(1) P1.Z = OBJECT POSITION Z(1) P1.TANK_ANG = OBJECT ANGLE Y(1) M=45 FOR T=4 TO 7 POSITION OBJECT T,P1.X+(SIN(P1.TANK_ANG+M)*11),P1.Y,P1.Z+(COS(P1.TANK_ANG+M)*11) YROTATE OBJECT T,P1.TANK_ANG INC M,90 NEXT T POSITION OBJECT 11,P2.X,P2.Y,P2.Z POSITION OBJECT 12,P2.X,P2.Y,P2.Z POSITION OBJECT 13,P2.X+SIN(P2.TURRET_ANG)*6,P2.Y+5,P2.Z+COS(P2.TURRET_ANG)*6 YROTATE OBJECT 11,P2.TANK_ANG YROTATE OBJECT 12,P2.TANK_ANG YROTATE OBJECT 13,P2.TURRET_ANG P2.X = OBJECT POSITION X(11) P2.Y = OBJECT POSITION Y(11) P2.Z = OBJECT POSITION Z(11) P2.TANK_ANG = OBJECT ANGLE Y(11) M=45 FOR T=14 TO 17 POSITION OBJECT T,P2.X+(SIN(P2.TANK_ANG+M)*11),P2.Y,P2.Z+(COS(P2.TANK_ANG+M)*11) YROTATE OBJECT T,P2.TANK_ANG INC M,90 NEXT T REM END POSITION UPDATE RETURN UPDATE_PLAYER_EFFECTS: RETURN BULLETS: DEC P2.BUL_DEL DEC P1.BUL_DEL IF P2.CURRENT_BULLET => 100 THEN P2.CURRENT_BULLET = 0 IF P2.FIRE_W_1 = 1 AND P2.BUL_DEL =< 0 P2_BULLETS(P2.CURRENT_BULLET).RANGE = 1000 P2_BULLETS(P2.CURRENT_BULLET).ALIVE = 1 P2_BULLETS(P2.CURRENT_BULLET).X = P2_BULLETS(P2.CURRENT_BULLET).START_X_POS P2_BULLETS(P2.CURRENT_BULLET).Y = P2_BULLETS(P2.CURRENT_BULLET).START_Y_POS P2_BULLETS(P2.CURRENT_BULLET).Z = P2_BULLETS(P2.CURRENT_BULLET).START_Z_POS position object P2.CURRENT_BULLET+200,P2_BULLETS(P2.CURRENT_BULLET).X,P2_BULLETS(P2.CURRENT_BULLET).Y,P2_BULLETS(P2.CURRENT_BULLET).Z P2_BULLETS(P2.CURRENT_BULLET).X_ANGLE = 0 P2_BULLETS(P2.CURRENT_BULLET).Y_ANGLE = P2.TURRET_ANG P2_BULLETS(P2.CURRENT_BULLET).Z_ANGLE = 0 ROTATE OBJECT P2.CURRENT_BULLET+200,P2_BULLETS(P2.CURRENT_BULLET).X_ANGLE,P2_BULLETS(P2.CURRENT_BULLET).Y_ANGLE,P2_BULLETS(P2.CURRENT_BULLET).Z_ANGLE PLAY SOUND FIRE1_SND P2.BUL_DEL = BUL_RATE/ELAPSED INC P2.CURRENT_BULLET ENDIF FOR T=0 TO 99 IF P2_BULLETS(T).RANGE <= 0 THEN P2_BULLETS(T).ALIVE = 0 IF P2_BULLETS(T).ALIVE = 1 DEC P2_BULLETS(T).RANGE SHOW OBJECT T+200 MOVE OBJECT T+200,P2_BULLETS(T).SPEED * ELAPSED ELSE HIDE OBJECT T+200 POSITION OBJECT T+200,P2_BULLETS(T).START_X_POS,P2_BULLETS(T).START_Y_POS,P2_BULLETS(T).START_Z_POS ROTATE OBJECT T+200,P2_BULLETS(T).X_ANGLE,P2_BULLETS(T).Y_ANGLE,P2_BULLETS(T).Z_ANGLE, ENDIF NEXT T FOR T=0 TO 99 P2_BULLETS(T).START_X_POS = P2.X P2_BULLETS(T).START_Y_POS = P2.Y P2_BULLETS(T).START_Z_POS = P2.Z P2_BULLETS(T).X_ANGLE = 0 P2_BULLETS(T).Y_ANGLE = P2.TURRET_ANG P2_BULLETS(T).Z_ANGLE = 0 NEXT T IF P1.CURRENT_BULLET => 100 THEN P1.CURRENT_BULLET = 0 IF P1.FIRE_W_1 = 1 AND P1.BUL_DEL =< 0 P1_BULLETS(P1.CURRENT_BULLET).RANGE = 1000 P1_BULLETS(P1.CURRENT_BULLET).ALIVE = 1 P1_BULLETS(P1.CURRENT_BULLET).X = P1_BULLETS(P1.CURRENT_BULLET).START_X_POS P1_BULLETS(P1.CURRENT_BULLET).Y = P1_BULLETS(P1.CURRENT_BULLET).START_Y_POS P1_BULLETS(P1.CURRENT_BULLET).Z = P1_BULLETS(P1.CURRENT_BULLET).START_Z_POS position object P1.CURRENT_BULLET+100,P1_BULLETS(P1.CURRENT_BULLET).X,P1_BULLETS(P1.CURRENT_BULLET).Y,P1_BULLETS(P1.CURRENT_BULLET).Z P1_BULLETS(P1.CURRENT_BULLET).X_ANGLE = 0 P1_BULLETS(P1.CURRENT_BULLET).Y_ANGLE = P1.TURRET_ANG P1_BULLETS(P1.CURRENT_BULLET).Z_ANGLE = 0 ROTATE OBJECT P1.CURRENT_BULLET+100,P1_BULLETS(P1.CURRENT_BULLET).X_ANGLE,P1_BULLETS(P1.CURRENT_BULLET).Y_ANGLE,P1_BULLETS(P1.CURRENT_BULLET).Z_ANGLE PLAY SOUND FIRE1_SND P1.BUL_DEL = BUL_RATE/ELAPSED INC P1.CURRENT_BULLET ENDIF FOR T=0 TO 99 IF P1_BULLETS(T).RANGE <= 0 THEN P1_BULLETS(T).ALIVE = 0 IF P1_BULLETS(T).ALIVE = 1 DEC P1_BULLETS(T).RANGE SHOW OBJECT T+100 MOVE OBJECT T+100,P1_BULLETS(T).SPEED * ELAPSED ELSE HIDE OBJECT T+100 POSITION OBJECT T+100,P1_BULLETS(T).START_X_POS,P1_BULLETS(T).START_Y_POS,P1_BULLETS(T).START_Z_POS ROTATE OBJECT T+100,P1_BULLETS(T).X_ANGLE,P1_BULLETS(T).Y_ANGLE,P1_BULLETS(T).Z_ANGLE, ENDIF NEXT T FOR T=0 TO 99 P1_BULLETS(T).START_X_POS = P1.X P1_BULLETS(T).START_Y_POS = P1.Y P1_BULLETS(T).START_Z_POS = P1.Z P1_BULLETS(T).X_ANGLE = 0 P1_BULLETS(T).Y_ANGLE = P1.TURRET_ANG P1_BULLETS(T).Z_ANGLE = 0 NEXT T FOR T=0 TO 99 P1_BULLETS(T).X = OBJECT POSITION X(T+100) P1_BULLETS(T).Z = OBJECT POSITION Z(T+100) P1_BULLETS(T).Y = GET GROUND HEIGHT(1,P1_BULLETS(T).X-MATOFFSETX,P1_BULLETS(T).Z-MATOFFSETZ)+P1_BULLETS(T).HEIGHT POSITION OBJECT T+100,P1_BULLETS(T).X,P1_BULLETS(T).Y,P1_BULLETS(T).Z P2_BULLETS(T).X = OBJECT POSITION X(T+200) P2_BULLETS(T).Z = OBJECT POSITION Z(T+200) P2_BULLETS(T).Y = GET GROUND HEIGHT(1,P2_BULLETS(T).X-MATOFFSETX,P2_BULLETS(T).Z-MATOFFSETZ)+P2_BULLETS(T).HEIGHT POSITION OBJECT T+200,P2_BULLETS(T).X,P2_BULLETS(T).Y,P2_BULLETS(T).Z NEXT T RETURN WATER_ENGINE: RETURN COLLISIONS_BULLETS: IF OBJECT COLLISION(1,11) = 0 FOR T=0 TO 99 IF P1_BULLETS(T).X > P2.X - P2.COL_RAD AND P1_BULLETS(T).X < P2.X + P2.COL_RAD AND P1_BULLETS(T).Z > P2.Z - P2.COL_RAD AND P1_BULLETS(T).Z < P2.Z + P2.COL_RAD P1_BULLETS(T).ALIVE = 0 DEC P2.HEALTH PLAY SOUND HIT1_SND ENDIF IF P2_BULLETS(T).X > P1.X - P1.COL_RAD AND P2_BULLETS(T).X < P1.X + P1.COL_RAD AND P2_BULLETS(T).Z > P1.Z - P1.COL_RAD AND P2_BULLETS(T).Z < P1.Z + P1.COL_RAD P2_BULLETS(T).ALIVE = 0 DEC P1.HEALTH PLAY SOUND HIT1_SND ELSE ENDIF NEXT T ENDIF RETURN COLLISIONS_TANKS: RETURN EFFECTS: `DEC P1.COL_COUNT `IF P1.COLLISION = 1 THEN P1.COL_COUNT = 100 `IF P1.COL_COUNT >0 THEN SET CARTOON SHADING ON 2,EXPL_TEX,EXPL_TEX ELSE SET SHADING OFF 1 RETURN UPDATE_POWERUPS: FOR T=0 TO 10 IF POW(T).VARIANT = 1 ROTATE OBJECT T+300,OBJECT ANGLE X(T+300)+2,OBJECT ANGLE Y(T+300)+2,OBJECT ANGLE Z(T+300)+2 ENDIF IF POW(T).VARIANT = 2 ROTATE OBJECT T+300,OBJECT ANGLE X(T+300)+2,OBJECT ANGLE Y(T+300)+2,OBJECT ANGLE Z(T+300)+2 ENDIF IF P1.X > POW(T).X - POW(T).COL_RAD AND P1.X < POW(T).X + POW(T).COL_RAD AND P1.Z > POW(T).Z - POW(T).COL_RAD AND P1.Z < POW(T).Z + POW(T).COL_RAD POW(T).ALIVE = 0 INC P1.HEALTH,20 PLAY SOUND HIT1_SND POW(T).HIT = 1 IF POW(T).VARIANT = 2 POW(T).ALIVE = 0 P1.SPEED_CAP=.4 P1.SPEED_COUNT = LOOP_COUNT PLAY SOUND HIT1_SND POW(T).HIT = 1 ENDIF ENDIF IF P2.X > POW(T).X - POW(T).COL_RAD AND P2.X < POW(T).X + POW(T).COL_RAD AND P2.Z > POW(T).Z - POW(T).COL_RAD AND P2.Z < POW(T).Z + POW(T).COL_RAD IF POW(T).VARIANT = 1 POW(T).ALIVE = 0 INC P2.HEALTH,20 PLAY SOUND HIT1_SND POW(T).HIT = 1 POW(T).ON = 1 ENDIF IF POW(T).VARIANT = 2 POW(T).ALIVE = 0 P2.SPEED_CAP= .4 P2.SPEED_COUNT = LOOP_COUNT PLAY SOUND HIT1_SND POW(T).HIT = 1 POW(T).ON = 1 ENDIF ENDIF if POW(T).ALIVE = 0 DELETE OBJECT T+300 `CORRECT VARIANT HERE `POW(T).VARIANT = RND(3)+1 `POW(T).VARIANT = RND(1)+1 POW(T).VARIANT = 1 SPAWN_POWERUP(T,T+300,POW(T).VARIANT) ENDIF `POWERUP EFFECTS MANAGEMENT IF POW(T).ON = 1 IF POW(T).VARIANT = 2 IF ABS(LOOP_COUNT - P2.SPEED_COUNT) > 20 P2.SPEED_CAP = .2 ENDIF IF ABS(LOOP_COUNT - P1.SPEED_COUNT) > 20 P1.SPEED_CAP = .2 ENDIF ENDIF ENDIF NEXT T RETURN GLOBAL_SOUNDS: `IF P1.SPEED > 0 THEN SET SOUND SPEED TANK1_SND,ABS((P1.SPEED*50000)+7000) `IF P1.SPEED < 0 THEN SET SOUND SPEED TANK1_SND,ABS((P1.SPEED*50000)-7000) `IF P2.SPEED > 0 THEN SET SOUND SPEED TANK2_SND,ABS((P2.SPEED*50000)+7000) `IF P2.SPEED < 0 THEN SET SOUND SPEED TANK2_SND,ABS((P2.SPEED*50000)-7000) RETURN UPDATE_CAMERA: IF LOOP_COUNT < 100 C1.SMOOTH = 50 - ELAPSED*1.2 IF C1.SMOOTH <= 0 THEN C1.SMOOTH = 1 C2.SMOOTH = 50-ELAPSED*1.2 IF C2.SMOOTH <= 0 THEN C2.SMOOTH = 1 ENDIF SET CAMERA TO FOLLOW 1,P1.X,P1.Y,P1.Z,P1.TURRET_ANG,C1.DIST,C1.HEIGHT,C1.SMOOTH,0 SET CAMERA TO FOLLOW 2,P2.X,P2.Y,P2.Z,P2.TURRET_ANG,C2.DIST,C2.HEIGHT,C2.SMOOTH,0 C1.AX = CAMERA ANGLE X(1) C1.AY = CAMERA ANGLE Y(1) C1.AZ = CAMERA ANGLE Z(1) C2.AX = CAMERA ANGLE X(2) C2.AY = CAMERA ANGLE Y(2) C2.AZ = CAMERA ANGLE Z(2) RETURN FUNCTION SPAWN_POWERUP(ID,OBJ_NUM,VARIANT) POW(ID).ALIVE = 1 POW(ID).X = RND(6000)-3000 ` JUST GAVE UP ON FORMULA AND MADE A CONSTANT POW(ID).Z = RND(6000)-3000 POW(ID).COL_RAD = 40 SELECT VARIANT CASE 1 MAKE OBJECT CUBE OBJ_NUM,20 POSITION OBJECT OBJ_NUM,POW(ID).X,20,POW(ID).Z TEXTURE OBJECT OBJ_NUM,6 POW(ID).DURATION = 0 ENDCASE CASE 2 MAKE OBJECT CYLINDER OBJ_NUM,20 POSITION OBJECT OBJ_NUM,POW(ID).X,20,POW(ID).Z TEXTURE OBJECT OBJ_NUM,7 ROTATE OBJECT OBJ_NUM,RND(359),RND(359),RND(359) SET OBJECT CULL OBJ_NUM,0 POW(ID).DURATION = 10 ENDCASE CASE 3 ENDCASE CASE 4 ENDCASE ENDSELECT ENDFUNCTION |