Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 100 REM BASIC Month 4: Lunar Corps
- 110 REM http://reddit.com/r/RetroBattlestations
- 120 REM written by FozzTexx
- 130 REM modified by EkriirkE
- 200 REM Clear screen and setup variables
- 210 CLS : RANDOMIZE TIMER
- 220 PEAKS$ = " /\_"
- 230 COLS = 79: ROWS = 24
- 240 LOCATE ROWS
- 300 GOSUB 2510
- 310 YS = SQR(2) * SQR(ROWS - TL + ZL) - 1
- 320 XE = INT((ZE - ZS) / 2) + ZS
- 330 XV = XE / YS: YV = 0
- 340 X = 1: Y = 1
- 420 FOR I = 1 TO YS
- 430 RESTORE 9050: GOSUB 1510
- 440 YV = YV + 1
- 450 X = X + XV: Y = Y + YV
- 460 IF I >= YS - 2 THEN RESTORE 9020 ELSE RESTORE 9000
- 470 GOSUB 1510
- 480 J = TIMER: WHILE TIMER - J < 1: WEND
- 490 NEXT I
- 500 RESTORE 9050: GOSUB 1510
- 510 X = ZE - 1: Y = ROWS - TL + ZL - 1
- 520 RESTORE 9000: GOSUB 1510
- 530 S$ = "The Eagle has landed": LOCATE ROWS / 2, (COLS - LEN(S$)) / 2: PRINT S$
- 999 END
- 1500 REM Draw sprite from DATA at X, Y
- 1510 IF Y < 1 OR Y > ROWS OR X < 1 OR X > COLS THEN RETURN
- 1520 LOCATE Y, X
- 1530 READ T$, S$: PRINT S$: LOCATE CSRLIN, X
- 1540 IF T$ = "SP" GOTO 1530
- 1550 RETURN
- 2500 REM Draw lunar surface
- 2510 DIDUP = 0: L1$ = "": FOR I = 1 TO COLS + 4: L1$ = L1$ + " ": NEXT I
- 2520 ZS = 0: ZE = 0: TL = 0
- 2530 L2$ = " ": UP = DIDUP: IF NOT UP AND MID$(L1$, 3, 1) <> " " THEN UP = 1
- 2540 IF NOT DIDUP AND UP THEN DIDUP = UP
- 2550 Z1 = 0: Z2 = 0
- 2560 FOR I = 3 TO COLS + 2: PRINT "."; : LOCATE CSRLIN, POS(0) - 1
- 2565 J = TIMER: WHILE TIMER - J < .1: WEND
- 2570 C1$ = MID$(L2$, I - 2, 1): C2$ = MID$(L2$, I - 1, 1)
- 2580 C3$ = MID$(L1$, I - 1, 1): C4$ = MID$(L1$, I, 1)
- 2590 C5$ = MID$(L1$, I + 1, 1): C6$ = MID$(L1$, I + 2, 1)
- 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)
- 2610 IF C2$ = "/" AND C4$ = " " THEN PEAK = 2
- 2620 IF (C1$ = "_" OR C1$ = "\") AND C2$ = " " THEN PEAK = 0
- 2630 IF C4$ <> " " THEN PEAK = 0
- 2640 IF (C3$ = "\" OR C3$ = "_") AND C4$ = " " THEN PEAK = 2
- 2650 IF C2$ = "_" AND C6$ = "/" THEN PEAK = 3
- 2660 IF (C2$ = "\" OR C2$ = " " OR C2$ = "_") AND C4$ = " " AND (C5$ = "_" OR C5$ = "/") THEN PEAK = 1
- 2670 IF C2$ = "\" AND C6$ <> " " THEN PEAK = 3
- 2680 IF (C5$ = "/" OR C5$ = "_") THEN PEAK = 1
- 2690 IF C4$ <> " " THEN PEAK = 0
- 2700 IF UP AND PEAK <> 2 THEN PEAK = 0
- 2710 IF PEAK = 1 THEN UP = 1
- 2720 IF PEAK = 2 THEN UP = 0
- 2730 P$ = MID$(PEAKS$, PEAK + 1, 1): PRINT P$; : L2$ = L2$ + P$
- 2740 REM IF PEAK = 3 AND NOT Z1 THEN Z1 = I
- 2750 REM IF PEAK <> 3 AND C2$ = "_" THEN Z2 = I
- 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
- 2765 IF PEAK = 3 AND (I < COLS - 4 OR ZL = 0) THEN ZE = I: ZS = ZE: ZL = TL
- 2770 IF PEAK <> 3 OR (C1$ = "_" AND C2$ = "_") THEN PEAK = 0
- 2780 NEXT
- 2790 L1$ = L2$
- 2800 C2 = 0
- 2810 FOR I = 3 TO COLS + 2
- 2820 IF MID$(L1$, I, 1) = " " THEN C2 = C2 + 1
- 2830 NEXT
- 2840 TL = TL + 1
- 2850 IF C2 < COLS THEN PRINT : GOTO 2530
- 2860 ZS = ZS - 2: ZE = ZE - 2: RETURN
- 9000 DATA SP,"(I)"
- 9010 DATA SE,"/T\"
- 9020 DATA SP,"(I)"
- 9030 DATA SP,"/T\"
- 9040 DATA SE," V "
- 9050 DATA SP," "
- 9060 DATA SP," "
- 9070 DATA SE," "
Add Comment
Please, Sign In to add comment