EkriirkE

LANDER.BAS

Jul 11th, 2019
110
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 written by FozzTexx
  4. 130 REM modified by EkriirkE
  5.  
  6. 200 REM Clear screen and setup variables
  7. 210 CLS : RANDOMIZE TIMER
  8. 220 PEAKS$ = " /\_"
  9. 230 COLS = 79: ROWS = 24
  10. 240 LOCATE ROWS
  11.  
  12. 300 GOSUB 2510
  13. 310 YS = SQR(2) * SQR(ROWS - TL + ZL) - 1
  14. 320 XE = INT((ZE - ZS) / 2) + ZS
  15. 330 XV = XE / YS: YV = 0
  16. 340 X = 1: Y = 1
  17.  
  18. 420 FOR I = 1 TO YS
  19. 430 RESTORE 9050: GOSUB 1510
  20. 440 YV = YV + 1
  21. 450 X = X + XV: Y = Y + YV
  22. 460 IF I >= YS - 2 THEN RESTORE 9020 ELSE RESTORE 9000
  23. 470 GOSUB 1510
  24. 480 J = TIMER: WHILE TIMER - J < 1: WEND
  25. 490 NEXT I
  26. 500 RESTORE 9050: GOSUB 1510
  27. 510 X = ZE - 1: Y = ROWS - TL + ZL - 1
  28. 520 RESTORE 9000: GOSUB 1510
  29. 530 S$ = "The Eagle has landed": LOCATE ROWS / 2, (COLS - LEN(S$)) / 2: PRINT S$
  30.  
  31. 999 END
  32.  
  33. 1500 REM Draw sprite from DATA at X, Y
  34. 1510 IF Y < 1 OR Y > ROWS OR X < 1 OR X > COLS THEN RETURN
  35. 1520 LOCATE Y, X
  36. 1530 READ T$, S$: PRINT S$: LOCATE CSRLIN, X
  37. 1540 IF T$ = "SP" GOTO 1530
  38. 1550 RETURN
  39.  
  40. 2500 REM Draw lunar surface
  41. 2510 DIDUP = 0: L1$ = "": FOR I = 1 TO COLS + 4: L1$ = L1$ + " ": NEXT I
  42. 2520 ZS = 0: ZE = 0: TL = 0
  43. 2530 L2$ = "  ": UP = DIDUP: IF NOT UP AND MID$(L1$, 3, 1) <> " " THEN UP = 1
  44. 2540 IF NOT DIDUP AND UP THEN DIDUP = UP
  45. 2550 Z1 = 0: Z2 = 0
  46. 2560 FOR I = 3 TO COLS + 2:  PRINT "."; : LOCATE CSRLIN, POS(0) - 1
  47. 2565 J = TIMER: WHILE TIMER - J < .1: WEND
  48. 2570 C1$ = MID$(L2$, I - 2, 1): C2$ = MID$(L2$, I - 1, 1)
  49. 2580 C3$ = MID$(L1$, I - 1, 1): C4$ = MID$(L1$, I, 1)
  50. 2590 C5$ = MID$(L1$, I + 1, 1): C6$ = MID$(L1$, I + 2, 1)
  51. 2600 IF PEAK = 0 AND MID$(L1$, I - 1, 4) = "    " THEN PEAK = INT(RND(1) * 3): PEAK = PEAK + (PEAK = 2): PEAK = PEAK * INT(RND(1) * 2)
  52. 2610 IF C2$ = "/" AND C4$ = " " THEN PEAK = 2
  53. 2620 IF (C1$ = "_" OR C1$ = "\") AND C2$ = " " THEN PEAK = 0
  54. 2630 IF C4$ <> " " THEN PEAK = 0
  55. 2640 IF (C3$ = "\" OR C3$ = "_") AND C4$ = " " THEN PEAK = 2
  56. 2650 IF C2$ = "_" AND C6$ = "/" THEN PEAK = 3
  57. 2660 IF (C2$ = "\" OR C2$ = " " OR C2$ = "_") AND C4$ = " " AND (C5$ = "_" OR C5$ = "/") THEN PEAK = 1
  58. 2670 IF C2$ = "\" AND C6$ <> " " THEN PEAK = 3
  59. 2680 IF (C5$ = "/" OR C5$ = "_") THEN PEAK = 1
  60. 2690 IF C4$ <> " " THEN PEAK = 0
  61. 2700 IF UP AND PEAK <> 2 THEN PEAK = 0
  62. 2710 IF PEAK = 1 THEN UP = 1
  63. 2720 IF PEAK = 2 THEN UP = 0
  64. 2730 P$ = MID$(PEAKS$, PEAK + 1, 1): PRINT P$; : L2$ = L2$ + P$
  65. 2740 REM IF PEAK = 3 AND NOT Z1 THEN Z1 = I
  66. 2750 REM IF PEAK <> 3 AND C2$ = "_" THEN Z2 = I
  67. 2760 REM IF Z1 AND Z2 THEN Z3 = Z1: Z4 = Z2: Z1 = 0: Z2 = 0: IF Z4 - Z3 >= 3 AND Z3 > ZS THEN ZS = Z3: ZE = Z4: ZL = TL
  68. 2765 IF PEAK = 3 AND (I < COLS - 4 OR ZL = 0) THEN ZE = I: ZS = ZE: ZL = TL
  69. 2770 IF PEAK <> 3 OR (C1$ = "_" AND C2$ = "_") THEN PEAK = 0
  70. 2780 NEXT
  71. 2790 L1$ = L2$
  72. 2800 C2 = 0
  73. 2810 FOR I = 3 TO COLS + 2
  74. 2820 IF MID$(L1$, I, 1) = " " THEN C2 = C2 + 1
  75. 2830 NEXT
  76. 2840 TL = TL + 1
  77. 2850 IF C2 < COLS THEN PRINT : GOTO 2530
  78. 2860 ZS = ZS - 2: ZE = ZE - 2: RETURN
  79.  
  80. 9000 DATA SP,"(I)"
  81. 9010 DATA SE,"/T\"
  82. 9020 DATA SP,"(I)"
  83. 9030 DATA SP,"/T\"
  84. 9040 DATA SE," V "
  85. 9050 DATA SP,"   "
  86. 9060 DATA SP,"   "
  87. 9070 DATA SE,"   "
Add Comment
Please, Sign In to add comment