@@ -23,6 +23,7 @@ VAR I = 0
2323VAR J = 0
2424DIM AS VECTOR3 PLAYER_POS = VECTOR3( 0 , 0 , 0 )
2525DIM AS DOUBLE OLDTIME = 0
26+ DIM AS DOUBLE GAMETIME = 0
2627DIM AS DOUBLE ROTATION = 0
2728DIM AS DOUBLE SIN_CAM = 0
2829DIM AS DOUBLE COS_CAM = 0
@@ -38,15 +39,27 @@ VAR COLLIDETEST = FALSE
3839VAR SPEED = 0
3940VAR CORRECTION_OFFSET = 0
4041VAR SOLVEDCOLLISION = FALSE
42+ VAR JOYSTICKID = 0
4143VAR STRIG = 0
4244DIM X_AXIS AS SINGLE
4345DIM Y_AXIS AS SINGLE
46+ DIM SHOULDER AS SINGLE
47+ DIM CSTICK_X AS SINGLE
48+ DIM CSTICK_Y AS SINGLE
49+ DIM DPAD_X AS SINGLE
50+ DIM DPAD_Y AS SINGLE
4451CONST FORWARDS = TRUE
4552CONST BACKWARDS = FALSE
4653VAR DIRECTION = FORWARDS
4754VAR ISHURT = 0
4855VAR IFRAMES = 0
4956VAR ISONGROUND = FALSE
57+ VAR ISPAUSED = FALSE
58+
59+ FOR I = 0 TO 10
60+ GETJOYSTICK(I,STRIG)
61+ IF STRIG <> - 1 THEN JOYSTICKID = I
62+ NEXT I
5063
5164VAR CHERRIES = 0
5265VAR LIVES = 3
@@ -184,8 +197,32 @@ DIM AS SOUND CHERRYSFX = LOADSOUND("CHERRYSFX.WAV")
184197'PLAYSOUNDMULTI(BGM)
185198
186199MAIN:
187- OLDTIME = GETTIME()
188-
200+
201+
202+ GETJOYSTICK(JOYSTICKID,STRIG,X_AXIS,Y_AXIS,SHOULDER,CSTICK_Y,CSTICK_X,,DPAD_X,DPAD_Y)
203+
204+ IF DEBOUNCE = 0 AND BIT(STRIG, 7 ) THEN
205+ DEBOUNCE = 20
206+ IF ISPAUSED THEN ISPAUSED = FALSE ELSE ISPAUSED = TRUE
207+
208+ IF ISPAUSED THEN
209+ BEGINDRAWING()
210+ DRAWTEXT( "PAUSED" ,SCREEN_HEIGHT * ( 2.25 / 5 ),SCREEN_WIDTH * ( 1 / 3 ), 80 ,BLACK)
211+ ENDDRAWING()
212+
213+ END IF
214+ END IF
215+
216+ IF DEBOUNCE > 0 THEN DEBOUNCE -= 1
217+
218+ IF ISPAUSED THEN
219+ SLEEP 10
220+ GOTO REST
221+ END IF
222+
223+ GAMETIME += GETTIME() - OLDTIME
224+
225+
189226 BEGINDRAWING()
190227 CLEARBACKGROUND(SKYBLUE)
191228 BEGINMODE3D(CAMERA)
@@ -216,10 +253,10 @@ MAIN:
216253 ENDMODE3D()
217254 DRAWRECTANGLE( 0 , 0 ,SCREEN_WIDTH, 40 ,BLACK)
218255
219- IF OLDTIME MOD 60 < 10 THEN
220- DRAWTEXT( "TIME: " + STR(INT(OLDTIME / 60 )) + ":0" + STR(OLDTIME MOD 60 ), SCREEN_WIDTH * ( 2 / 5 ), 0 , 40 , WHITE)
256+ IF GAMETIME MOD 60 < 10 THEN
257+ DRAWTEXT( "TIME: " + STR(INT(GAMETIME / 60 )) + ":0" + STR(GAMETIME MOD 60 ), SCREEN_WIDTH * ( 2 / 5 ), 0 , 40 , WHITE)
221258 ELSE
222- DRAWTEXT( "TIME: " + STR(INT(OLDTIME / 60 )) + ":" + STR(OLDTIME MOD 60 ), SCREEN_WIDTH * ( 2 / 5 ), 0 , 40 , WHITE)
259+ DRAWTEXT( "TIME: " + STR(INT(GAMETIME / 60 )) + ":" + STR(GAMETIME MOD 60 ), SCREEN_WIDTH * ( 2 / 5 ), 0 , 40 , WHITE)
223260 END IF
224261
225262 DRAWTEXT( "CHERRIES: " + STR(CHERRIES), 10 , 0 , 40 , WHITE)
@@ -228,10 +265,9 @@ MAIN:
228265
229266 'IF NOT ISSOUNDPLAYING(BGM) THEN PLAYSOUNDMULTI(BGM)
230267
231- GETJOYSTICK( 0 ,STRIG,X_AXIS,Y_AXIS)
268+ ' GETJOYSTICK(0,STRIG,X_AXIS,Y_AXIS)
232269
233-
234- IF (ISKEYDOWN(KEY_SPACE) OR STRIG > 0 ) AND (PLAYER_POS.Y = JUMP_FLOOR AND ISJUMPREADY) THEN
270+ IF (ISKEYDOWN(KEY_SPACE) OR (STRIG AND 15 ) > 0 ) AND (PLAYER_POS.Y = JUMP_FLOOR AND ISJUMPREADY) THEN
235271 ISJUMPING = TRUE
236272 HANGTIME = 10
237273 ISJUMPREADY = FALSE
@@ -256,7 +292,7 @@ MAIN:
256292 IF BOXSPHERECOLLISION(VECTOR3(PLAYER_POS.X, PLAYER_POS.Y - FALLING_SPEED, PLAYER_POS.Z),PLAYER_RADIUS,CUBE_POSITIONS(I),CUBE_DIMENSIONS(I)) THEN
257293 COLLIDETEST = TRUE
258294 JUMP_FLOOR = PLAYER_POS.Y
259- IF ISFALLING AND (( NOT ISKEYDOWN(KEY_UP) AND NOT ISKEYDOWN(KEY_DOWN)) OR Y_AXIS < .9 ) THEN
295+ IF ISFALLING AND (( NOT ( ISKEYDOWN(KEY_UP) OR DPAD_Y = - 1 ) AND NOT ( ISKEYDOWN(KEY_DOWN) OR DPAD_Y = 1 ) ) OR Y_AXIS < . 9 ) THEN
260296 IF SPEED > 5 THEN SPEED = 5
261297 END IF
262298 ISFALLING = FALSE
@@ -266,7 +302,7 @@ MAIN:
266302
267303 IF COLLIDETEST = FALSE THEN PLAYER_POS.Y -= FALLING_SPEED
268304 ELSE
269- IF ISFALLING AND (( NOT ISKEYDOWN(KEY_UP) AND NOT ISKEYDOWN(KEY_DOWN)) OR Y_AXIS > - .9 ) THEN
305+ IF ISFALLING AND (( NOT ( ISKEYDOWN(KEY_UP) OR DPAD_Y = - 1 ) AND NOT ( ISKEYDOWN(KEY_DOWN) OR DPAD_Y = 1 ) ) OR Y_AXIS > -. 9 ) THEN
270306 IF SPEED > 5 THEN SPEED = 5
271307 END IF
272308 JUMP_FLOOR = 0
@@ -285,14 +321,38 @@ MAIN:
285321 ELSE
286322 IF CAMERA_Y_OFF > 7 THEN IF CAMERA_Y_OFF < 8 THEN CAMERA_Y_OFF = 7 ELSE CAMERA_Y_OFF -= . 5
287323 END IF
324+
325+ IF X_AXIS <> - 1000 AND CSTICK_X <> - 1000 THEN
326+ IF ABS(X_AXIS) > ABS(CSTICK_X) THEN
327+ ROTATION = X_AXIS/ 9
328+ ELSE
329+ ROTATION = CSTICK_X/ 9
330+ ENDIF
331+ ELSEIF X_AXIS <> - 1000 THEN
332+ ROTATION = X_AXIS/ 9
333+ END IF
288334
335+ IF X_AXIS = - 1000 OR (ABS(X_AXIS) < . 1 AND ABS(CSTICK_X) < . 1 ) THEN
336+ IF SHOULDER = - 1000 OR ABS(SHOULDER) < . 9 THEN
337+ IF (ISKEYDOWN(KEY_LEFT) OR DPAD_X = - 1 ) THEN
338+ ROTATION = - .075
339+ ELSEIF (ISKEYDOWN(KEY_RIGHT) OR DPAD_X = 1 ) THEN
340+ ROTATION = .075
341+ ELSE
342+ ROTATION = 0
343+ END IF
344+ ELSE
345+ IF SHOULDER > .9 THEN
346+ ROTATION = - .075
347+ ELSEIF SHOULDER < - .9 THEN
348+ ROTATION = .075
349+ ELSE
350+ ROTATION = 0
351+ END IF
352+ END IF
353+ END IF
289354
290355
291- IF X_AXIS <> - 1000 THEN ROTATION = X_AXIS/ 9
292-
293- IF X_AXIS = - 1000 OR ABS(X_AXIS) < . 1 THEN
294- IF ISKEYDOWN(KEY_LEFT) THEN ROTATION = - .075 ELSE IF ISKEYDOWN(KEY_RIGHT) THEN ROTATION = . 075 ELSE ROTATION = 0
295- END IF
296356
297357 SIN_CAM = SIN(ROTATION)
298358 COS_CAM = COS(ROTATION)
@@ -301,15 +361,17 @@ MAIN:
301361 TEMPZ = CAMERA.POSITION.Z - PLAYER_POS.Z
302362
303363 CAMERA.POSITION.X = (COS_CAM * TEMPX - SIN_CAM * TEMPZ) + PLAYER_POS.X
304- CAMERA.POSITION.Y = PLAYER_POS.Y + CAMERA_Y_OFF
364+ CAMERA.POSITION.Y = PLAYER_POS.Y + CAMERA_Y_OFF + (CSTICK_Y * 10 )
305365 CAMERA.POSITION.Z = (SIN_CAM * TEMPX + COS_CAM * TEMPZ) + PLAYER_POS.Z
306366
307367 CAMERA.TARGET = VECTOR3(PLAYER_POS.X, PLAYER_POS.Y + CAMERA_HEIGHT, PLAYER_POS.Z)
308368
309369 TEMPX = PLAYER_POS.X - CAMERA.POSITION.X
310370 TEMPZ = PLAYER_POS.Z - CAMERA.POSITION.Z
311371
312- IF ISKEYDOWN(KEY_UP) THEN
372+ 'PRINT DPAD_X
373+
374+ IF (ISKEYDOWN(KEY_UP) OR DPAD_Y = - 1 ) THEN
313375 IF DIRECTION = BACKWARDS THEN IF SPEED > 0 THEN SPEED -= 1 ELSE DIRECTION = FORWARDS
314376
315377 IF DIRECTION = FORWARDS THEN
@@ -319,7 +381,7 @@ MAIN:
319381 SPEED += 1
320382 END IF
321383 END IF
322- ELSEIF ISKEYDOWN(KEY_DOWN) THEN
384+ ELSEIF ( ISKEYDOWN(KEY_DOWN) OR DPAD_Y = 1 ) THEN
323385 IF DIRECTION = FORWARDS THEN IF SPEED > 0 THEN SPEED -= 1 ELSE DIRECTION = BACKWARDS
324386
325387 IF DIRECTION = BACKWARDS THEN
@@ -359,7 +421,7 @@ MAIN:
359421 END IF
360422 END IF
361423
362- IF ( NOT ISKEYDOWN(KEY_UP) AND NOT ISKEYDOWN(KEY_DOWN)) AND (ABS(Y_AXIS) < .1 OR Y_AXIS = - 1000 ) THEN
424+ IF ( NOT ( ISKEYDOWN(KEY_UP) OR DPAD_Y = - 1 ) AND NOT ( ISKEYDOWN(KEY_DOWN) OR DPAD_Y = 1 ) ) AND (ABS(Y_AXIS) < . 1 OR Y_AXIS = - 1000 ) THEN
363425 IF SPEED > 0 AND NOT (ISJUMPING OR ISFALLING) THEN SPEED -= 1
364426 END IF
365427
@@ -520,12 +582,18 @@ MAIN:
520582
521583 PLAYER_POS = VECTOR3( 0 , 0 , 0 )
522584 CAMERA.POSITION = VECTOR3(PLAYER_POS.X, PLAYER_POS.Y + CAMERA_Y_OFF, PLAYER_POS.Z + CAMERA_Z_OFF)
585+ FOR I = 0 TO UBOUND(CHERRY_EXISTS)
586+ CHERRY_EXISTS(I) = TRUE
587+ NEXT I
588+
523589 END IF
524590 END IF
525591 END IF
526592
527593REST:
528- IF GETTIME() - OLDTIME < 1 / 60 THEN SLEEP 1 : GOTO REST
594+ OLDTIME = GETTIME()
595+ REST_WAIT:
596+ IF GETTIME() - OLDTIME < 1 / 60 THEN SLEEP 1 : GOTO REST_WAIT
529597
530598IF NOT WINDOWSHOULDCLOSE() THEN GOTO MAIN
531599
0 commit comments