@@ -23,6 +23,7 @@ VAR I = 0
23
23
VAR J = 0
24
24
DIM AS VECTOR3 PLAYER_POS = VECTOR3( 0 , 0 , 0 )
25
25
DIM AS DOUBLE OLDTIME = 0
26
+ DIM AS DOUBLE GAMETIME = 0
26
27
DIM AS DOUBLE ROTATION = 0
27
28
DIM AS DOUBLE SIN_CAM = 0
28
29
DIM AS DOUBLE COS_CAM = 0
@@ -38,15 +39,27 @@ VAR COLLIDETEST = FALSE
38
39
VAR SPEED = 0
39
40
VAR CORRECTION_OFFSET = 0
40
41
VAR SOLVEDCOLLISION = FALSE
42
+ VAR JOYSTICKID = 0
41
43
VAR STRIG = 0
42
44
DIM X_AXIS AS SINGLE
43
45
DIM 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
44
51
CONST FORWARDS = TRUE
45
52
CONST BACKWARDS = FALSE
46
53
VAR DIRECTION = FORWARDS
47
54
VAR ISHURT = 0
48
55
VAR IFRAMES = 0
49
56
VAR 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
50
63
51
64
VAR CHERRIES = 0
52
65
VAR LIVES = 3
@@ -184,8 +197,32 @@ DIM AS SOUND CHERRYSFX = LOADSOUND("CHERRYSFX.WAV")
184
197
'PLAYSOUNDMULTI(BGM)
185
198
186
199
MAIN:
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
+
189
226
BEGINDRAWING()
190
227
CLEARBACKGROUND(SKYBLUE)
191
228
BEGINMODE3D(CAMERA)
@@ -216,10 +253,10 @@ MAIN:
216
253
ENDMODE3D()
217
254
DRAWRECTANGLE( 0 , 0 ,SCREEN_WIDTH, 40 ,BLACK)
218
255
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)
221
258
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)
223
260
END IF
224
261
225
262
DRAWTEXT( "CHERRIES: " + STR(CHERRIES), 10 , 0 , 40 , WHITE)
@@ -228,10 +265,9 @@ MAIN:
228
265
229
266
'IF NOT ISSOUNDPLAYING(BGM) THEN PLAYSOUNDMULTI(BGM)
230
267
231
- GETJOYSTICK( 0 ,STRIG,X_AXIS,Y_AXIS)
268
+ ' GETJOYSTICK(0,STRIG,X_AXIS,Y_AXIS)
232
269
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
235
271
ISJUMPING = TRUE
236
272
HANGTIME = 10
237
273
ISJUMPREADY = FALSE
@@ -256,7 +292,7 @@ MAIN:
256
292
IF BOXSPHERECOLLISION(VECTOR3(PLAYER_POS.X, PLAYER_POS.Y - FALLING_SPEED, PLAYER_POS.Z),PLAYER_RADIUS,CUBE_POSITIONS(I),CUBE_DIMENSIONS(I)) THEN
257
293
COLLIDETEST = TRUE
258
294
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
260
296
IF SPEED > 5 THEN SPEED = 5
261
297
END IF
262
298
ISFALLING = FALSE
@@ -266,7 +302,7 @@ MAIN:
266
302
267
303
IF COLLIDETEST = FALSE THEN PLAYER_POS.Y -= FALLING_SPEED
268
304
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
270
306
IF SPEED > 5 THEN SPEED = 5
271
307
END IF
272
308
JUMP_FLOOR = 0
@@ -285,14 +321,38 @@ MAIN:
285
321
ELSE
286
322
IF CAMERA_Y_OFF > 7 THEN IF CAMERA_Y_OFF < 8 THEN CAMERA_Y_OFF = 7 ELSE CAMERA_Y_OFF -= . 5
287
323
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
288
334
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
289
354
290
355
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
296
356
297
357
SIN_CAM = SIN(ROTATION)
298
358
COS_CAM = COS(ROTATION)
@@ -301,15 +361,17 @@ MAIN:
301
361
TEMPZ = CAMERA.POSITION.Z - PLAYER_POS.Z
302
362
303
363
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 )
305
365
CAMERA.POSITION.Z = (SIN_CAM * TEMPX + COS_CAM * TEMPZ) + PLAYER_POS.Z
306
366
307
367
CAMERA.TARGET = VECTOR3(PLAYER_POS.X, PLAYER_POS.Y + CAMERA_HEIGHT, PLAYER_POS.Z)
308
368
309
369
TEMPX = PLAYER_POS.X - CAMERA.POSITION.X
310
370
TEMPZ = PLAYER_POS.Z - CAMERA.POSITION.Z
311
371
312
- IF ISKEYDOWN(KEY_UP) THEN
372
+ 'PRINT DPAD_X
373
+
374
+ IF (ISKEYDOWN(KEY_UP) OR DPAD_Y = - 1 ) THEN
313
375
IF DIRECTION = BACKWARDS THEN IF SPEED > 0 THEN SPEED -= 1 ELSE DIRECTION = FORWARDS
314
376
315
377
IF DIRECTION = FORWARDS THEN
@@ -319,7 +381,7 @@ MAIN:
319
381
SPEED += 1
320
382
END IF
321
383
END IF
322
- ELSEIF ISKEYDOWN(KEY_DOWN) THEN
384
+ ELSEIF ( ISKEYDOWN(KEY_DOWN) OR DPAD_Y = 1 ) THEN
323
385
IF DIRECTION = FORWARDS THEN IF SPEED > 0 THEN SPEED -= 1 ELSE DIRECTION = BACKWARDS
324
386
325
387
IF DIRECTION = BACKWARDS THEN
@@ -359,7 +421,7 @@ MAIN:
359
421
END IF
360
422
END IF
361
423
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
363
425
IF SPEED > 0 AND NOT (ISJUMPING OR ISFALLING) THEN SPEED -= 1
364
426
END IF
365
427
@@ -520,12 +582,18 @@ MAIN:
520
582
521
583
PLAYER_POS = VECTOR3( 0 , 0 , 0 )
522
584
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
+
523
589
END IF
524
590
END IF
525
591
END IF
526
592
527
593
REST:
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
529
597
530
598
IF NOT WINDOWSHOULDCLOSE() THEN GOTO MAIN
531
599
0 commit comments