Skip to content

Commit 67ea8f3

Browse files
authored
Update PLAT.BAS
More robust controller support (incl. detection) and pause implemented
1 parent c7aed4d commit 67ea8f3

File tree

1 file changed

+88
-20
lines changed

1 file changed

+88
-20
lines changed

PLAT.BAS

Lines changed: 88 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ VAR I = 0
2323
VAR J = 0
2424
DIM AS VECTOR3 PLAYER_POS = VECTOR3(0,0,0)
2525
DIM AS DOUBLE OLDTIME = 0
26+
DIM AS DOUBLE GAMETIME = 0
2627
DIM AS DOUBLE ROTATION = 0
2728
DIM AS DOUBLE SIN_CAM = 0
2829
DIM AS DOUBLE COS_CAM = 0
@@ -38,15 +39,27 @@ VAR COLLIDETEST = FALSE
3839
VAR SPEED = 0
3940
VAR CORRECTION_OFFSET = 0
4041
VAR SOLVEDCOLLISION = FALSE
42+
VAR JOYSTICKID = 0
4143
VAR STRIG = 0
4244
DIM X_AXIS AS SINGLE
4345
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
4451
CONST FORWARDS = TRUE
4552
CONST BACKWARDS = FALSE
4653
VAR DIRECTION = FORWARDS
4754
VAR ISHURT = 0
4855
VAR IFRAMES = 0
4956
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
5063

5164
VAR CHERRIES = 0
5265
VAR LIVES = 3
@@ -184,8 +197,32 @@ DIM AS SOUND CHERRYSFX = LOADSOUND("CHERRYSFX.WAV")
184197
'PLAYSOUNDMULTI(BGM)
185198

186199
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+
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

527593
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
529597

530598
IF NOT WINDOWSHOULDCLOSE() THEN GOTO MAIN
531599

0 commit comments

Comments
 (0)