10 REM ======================================================================== = 20 REM JUPITER LANDER 1:1 REMAKE - ADVANCED BASIC ENGINE 30 REM ======================================================================== = 40 CLS: SCREEN 176, 184: REM MATCH ORIGINAL VIC-20 CANVAS RESOLUTION 50 SETGRAVITY 0.0156: REM INJECTS CONSTANT DOWNWARD ACCELERATION INTO ENVIRONMENT 60 REM --- INITIALIZE SCENERY & PADS --- 70 RANDOMTERRAIN 10, 150, 184: REM GENERATE BASELINE BETWEEN Y:150 AND Y:184 80 RECT 1, 20, 160, 40, 165, 2: REM PAD 1: X:20-40, Y:160-165, SCORE MULTIPLIER 2X 90 RECT 2, 110, 155, 135, 160, 5: REM PAD 2: X:110-135, Y:155-160, SCORE MULTIPLIER 5X 100 REM --- DECLARE SPRITES --- 110 SPRITE 1, "LANDER": REM ENGINE LOADS INTERNAL SHAPE AND SETS HANDLE TO ID 1 120 FUEL = 800: SAFEVEL = 1.15: REM SET PERFORMANCE PARAMS 130 PX = 80: PY = 10: REM SET START POSITIONS FOR TOP-CENTER SPOTS 140 MOVE SPRITE 1, PX, PY: REM SNAP TO START LOCATION 150 REM ======================================================================= == 160 REM MAIN GAME ENGINE LOOP 170 REM ======================================================================= == 180 K$ = INKEY$ 190 IF FUEL <= 0 THEN GOTO 320: REM LOCK THRUSTERS OUT IF DRIED OUT 200 REM --- VERTICAL THRUST REGISTER UPDATES --- 210 IF K$ = "F1" THEN ADDSPEEDY 1, -0.0703: FUEL = FUEL - 3: GOTO 240: REM HARD 220 IF K$ = "F3" THEN ADDSPEEDY 1, -0.0390: FUEL = FUEL - 2: GOTO 240: REM MEDIUM 230 IF K$ = "F5" THEN ADDSPEEDY 1, -0.0234: FUEL = FUEL - 1: GOTO 240: REM LIGHT 240 REM --- HORIZONTAL THRUST REGISTER UPDATES --- 250 IF K$ = "A" THEN ADDSPEEDX 1, -0.0312: FUEL = FUEL - 0.5: REM LEFT THRUST 260 IF K$ = "D" THEN ADDSPEEDX 1, 0.0312: FUEL = FUEL - 0.5: REM RIGHT THRUST 270 REM --- SYSTEM UPDATES --- 280 REM BACKGROUND ENGINE NOW AUTOMATICALLY ADDS GRAVITY TO SPEEDY, 290 REM MULTIPLIES SPEED BY INERTIA, UPDATES PX/PY POSITION VALUES, AND BLITS 300 GOSUB 500: REM RUN LIVE HUD INTERFACE ROUTINE 310 WAIT VBLANK: REM STABILIZE SYSTEM INTERRUPT TIMING TO EXACTLY 60HZ 320 REM --- CONTINUOUS BACKGROUND PHYSICS INTERSECTION CHECKS --- 330 CHECKCOLLISION 1 INTO C: REM CHECK THE STATUS OF SPRITE 1 AGAINST ENVIRONMENT 340 IF C = 0 THEN GOTO 180: REM SAFELY IN MID-AIR, CONTINUE LOOP 350 REM ======================================================================= == 360 REM TOUCHDOWN EVALUATION 370 REM ======================================================================= == 380 GETSPEEDY 1 INTO VY: REM POLL LIVE ACCUMULATED SPEED VAL FROM SPRITE 390 IF C = -1 THEN GOTO 460: REM HIT ROCKY GROUND (IMPACT FAILURE) 400 REM --- PAD LANDING LOGIC EVALUATION --- 410 IF VY > SAFEVEL THEN GOTO 460: REM CRASHED ON PAD (VELOCITY TOO HIGH) 420 PRINT "SUCCESSFUL TOUCHDOWN!" 430 POINTS = 100 * C: REM C CONTAINS TARGET MULTIPLIER INT (2 OR 5) 440 PRINT "SCORE AWARDED: "; POINTS 450 END 460 REM --- IMPACT FAILURE ROUTINE --- 470 SPRITE 1, "EXPLOSION": REM CHANGE ASSET MODEL MESH TO SMOKE/SHRAPNEL EFFECT 480 PRINT "BOOM! LANDER DESTROYED." 490 END 500 REM ======================================================================= == 510 REM UI DISPLAY HUD 520 REM ======================================================================= == 530 LOCATE 1, 1: PRINT "FUEL: "; INT(FUEL); " " 540 LOCATE 1, 20: GETSPEEDY 1 INTO VY 550 IF VY > SAFEVEL THEN COLOR 2: REM SET WARNING RED 560 IF VY <= SAFEVEL THEN COLOR 5: REM SET SAFE GREEN 570 LOCATE 1, 15: PRINT "SPEED: "; VY 580 COLOR 1: REM RESET FOREGROUND DISPLAY COLOR BALANCES 590 RETURN