EkriirkE

PLANDERo.BAS

Jul 16th, 2019
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 100 REM BASIC Month 4: Lunar Corps
  2. 110 REM http://reddit.com/r/RetroBattlestations
  3. 120 REM Based on the original by FozzTexx
  4. 130 REM Rewritten by EkriirkE
  5. 140 REM Today is 2019-07-15
  6.  
  7. 200 REM Clear screen and setup variables
  8. 210 CLS : RANDOMIZE TIMER
  9. 220 COLS = 80: ROWS = 24
  10. 230 ITER = 10
  11.  
  12. 300 GOSUB 2510
  13. 310 YS = SQR(LY) / ITER
  14. 320 XV = RND(1) / ITER: YV = 0
  15. 330 X = 1: Y = 1
  16. 340 FUEL = 100
  17.  
  18. 350 SP$ = "NASA has determined the only landing position is on the X"
  19. 360 GOSUB 1210
  20. 370 LOCATE LY + 1, LX + 1: COLOR 2: PRINT "X"
  21. 380 WHILE INKEY$ = "": GOSUB 2700: WEND
  22. 390 LOCATE ROWS / 2: PRINT SPACE$(COLS)
  23.  
  24. 400 LE$ = SPACE$(9)
  25. 410 LM$ = "(I)/T\"
  26. 420 IF ABS(TD) = 1 AND X >= 2 AND X < COLS - 2 AND Y > 1 THEN LOCATE INT(Y) + 1, INT(X) - 1: PRINT "     ";
  27. 430 SP$ = LE$: GOSUB 1510
  28. 440 YV = YV + 1 / (ITER * ITER)
  29. 450 X = X + XV: Y = Y + YV: FUEL = FUEL - 1 / ITER
  30. 460 GOSUB 5010
  31. 470 IF ABS(Y - YY) > 2 THEN YY = Y: SOUND 200, .5: SOUND 2000, 1
  32. 480 IF FUEL < 20 THEN SOUND 80, .2 ELSE SOUND 40, .1
  33. 490 IF K > 32 AND TD <> 0 THEN FOR J = 0 TO 5: SOUND 2000, .1: SOUND 200, .1: NEXT
  34. 500 SP$ = LM$: IF TIMER - UT < 1 THEN GOSUB 3010 ELSE TD = 0
  35. 510 GOSUB 1510
  36. 520 J = TIMER: WHILE TIMER - J < 1 / ITER: WEND
  37. 530 IF (YV * ITER < -5 AND Y < 0) OR Y < -10 OR X < -5 OR X > COLS + 5 GOTO 690
  38. 540 IF Y < LY GOTO 420
  39. 550 SP$ = LE$: GOSUB 1510
  40. 560 SP$ = LM$: GOSUB 1510
  41. 570 IF INT(Y) = LY AND INT(X) = LX AND INT(YV * ITER) < 4 GOTO 610 ELSE GOTO 710
  42.  
  43. 600 REM Draw flag, start anthem
  44. 610 LOCATE ROWS - 4, COLS / 2: COLOR 15, 1: PRINT "**"; : COLOR , 4: PRINT "==="
  45. 620 LOCATE ROWS - 3, COLS / 2: COLOR , 4: PRINT "====="
  46. 630 LOCATE ROWS - 2, COLS / 2: COLOR , 0: PRINT "| "
  47. 640 COLOR 10: SP$ = "The Eagle has landed": PLAY "l5gl15el5ceg>c"
  48. 650 GOTO 730
  49.  
  50. 680 REM Too far out of frame
  51. 690 COLOR 12: LOCATE ROWS / 2, (COLS - 30) / 2: PRINT "~ The Eagle is "; : PLAY "l30efp15ee-p15efp15ee-": PRINT "LOST IN SPACE ~"
  52. 700 END
  53.  
  54. 705 REM Loser, start taps
  55. 710 COLOR 12: SP$ = "! The Eagle has crashed !": PLAY "l10c..cl1f"
  56. 730 GOSUB 1210
  57.  
  58.  
  59. 999 COLOR 7: END
  60.  
  61. 1200 REM Centre a message
  62. 1210 LOCATE ROWS / 2, (COLS - LEN(SP$)) / 2: PRINT SP$
  63. 1220 RETURN
  64.  
  65. 1500 REM EkriirkE's Draw sprite in SP$ at X, Y
  66. 1510 IF Y < 1 OR Y > ROWS OR X < 1 OR X > COLS THEN RETURN
  67. 1520 FOR J = 1 TO LEN(SP$) STEP 3
  68. 1530 COLOR INT(16 - J / 2): LOCATE INT(Y + J / 3), INT(X): PRINT MID$(SP$, J, 3);
  69. 1540 NEXT
  70. 1550 RETURN
  71.  
  72. 2500 REM EkriirkE's Draw lunar surface, choose landing pad
  73. 2510 DEEP = 4: WIDE = 3: COLOR 7
  74. 2520 Y = INT(RND(1) * DEEP) + 1: PC = 0: LX = 0
  75. 2530 FOR I = 1 TO COLS
  76. 2540 OY = Y
  77. 2550 IF PC = 0 THEN Y = Y + SGN(INT(RND(1) * 7 - 3))
  78. 2560 IF Y < 1 THEN Y = 1
  79. 2570 IF Y > DEEP THEN Y = DEEP
  80. 2580 IF LI + 1 = I AND Y = OY THEN GOTO 2550
  81. 2590 IF Y > OY THEN LOCATE ROWS - Y + 1: PRINT "/";  ELSE LOCATE ROWS - Y
  82. 2600 IF Y < OY THEN PRINT "\";
  83. 2610 IF Y = OY THEN PRINT "_"; : PC = PC + 1: IF PC >= WIDE THEN PC = 0: LI = I: IF LX = 0 OR RND(1) > .8 THEN LX = I - INT(WIDE / 2 + .5): LY = ROWS - Y - 1
  84. 2620 GOSUB 2700
  85. 2630 NEXT
  86. 2640 IF LX = 0 THEN LX = COLS / 1.5
  87. 2650 RETURN
  88. 2700 J = TIMER: WHILE TIMER - J < .05: WEND
  89. 2710 SOUND 40, .05
  90. 2720 RETURN
  91.  
  92.  
  93. 3000 REM Animate thrusters
  94. 3010 FC = FC + 1: IF FC > 3 THEN FC = 1
  95. 3020 IF TD = -2 THEN SP$ = LM$ + " " + MID$("VW^", FC, 1) + " "
  96. 3030 IF INT(X) < 2 OR INT(X) >= COLS - 4 OR Y < 1 THEN RETURN
  97. 3040 IF TD = 1 THEN LOCATE INT(Y) + 1, INT(X) - 1: COLOR 8: PRINT MID$(">=-", FC, 1)
  98. 3050 IF TD = -1 THEN LOCATE INT(Y) + 1, INT(X) + 3: COLOR 8: PRINT MID$("<=-", FC, 1)
  99. 3060 RETURN
  100.  
  101. 5000 REM Read keyboard, update HUD
  102. 5010 IF FUEL THEN K = ASC(RIGHT$(" " + INKEY$, 1)) OR 32
  103. 5020 IF K = 27 THEN END
  104. 5030 IF FUEL < 1 THEN K = 0
  105. 5040 IF K = 97 OR K = 107 THEN XV = XV - .1: TD = -1
  106. 5050 IF K = 100 OR K = 109 THEN XV = XV + .1: TD = 1
  107. 5060 IF K = 119 OR K = 104 THEN YV = YV - .1: TD = -2
  108. 5070 REM IF K = 115 OR K = 112 THEN YV = YV + .1        TD=2
  109. 5080 IF K > 32 THEN FUEL = FUEL - 1: UT = TIMER
  110. 5090 IF TIMER - UT < 3 THEN FUEL = FUEL - .2
  111. 5100 IF FUEL < 0 THEN FUEL = 0
  112.  
  113. 5120 COLOR 7: LOCATE 1, COLS - 4: PRINT "FUEL": LOCATE 4, COLS - 7: PRINT "DESCENT"
  114. 5130 LOCATE 2, COLS - 4: COLOR 7 - (INT(FUEL / 34) + 3): PRINT INT(FUEL)
  115. 5140 IF YV * ITER > 4 THEN COLOR 4 ELSE COLOR 2
  116. 5150 LOCATE 5, COLS - 4: PRINT CHR$(18) + STR$(INT(YV * ITER * 2)) + " "
  117. 5160 REM COLOR 7: LOCATE , COLS - 4: PRINT "=" + STR$(INT(XV * ITER)) + " "
  118. 5170 LOCATE 1, 1: COLOR 7: PRINT "MISSION TIME"; TIMER
  119. 5180 RETURN
Add Comment
Please, Sign In to add comment