100 REM Basic Month 4 : Lunar Corps Atari 1.0 110 REM original AppleII by FozzTexx 120 REM Atari Turbo Basic XL 1.5 version by papa_robot 135 DIM C1$(1),C2$(1),C3$(1),C4$(1),C5$(1),C6$(1),P$(1),T$(2) 136 DIM S$(5) 200 REM Clear Screen and setup 210 GRAPHICS 0:POKE 82,0:POSITION 0,23:POKE 752,1 215 SETCOLOR 2,0,0:SETCOLOR 1,1,14 220 DIM PEAK$(4):PEAK$=" /\_" 230 COLS=39:ROWS=23:SIZ=COLS+4 232 REM All strings have to be DIMmmed before used 235 DIM L1$(SIZ),L2$(SIZ),BL$(SIZ),SP$(SIZ),SE$(10),LM$(10),ML$(10),LE$(10) 300 EXEC DRAWSF 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 400 EXEC SPRITES:LM$=SP$ 410 EXEC SPRITES:ML$=SP$:LE$=SE$ 420 FOR I=1 TO YS 430 SP$=LE$:EXEC DRAW 440 YV=YV+1 450 X=X+XV:Y=Y+YV 460 SP$=LM$:IF I>=YS-2 THEN SP$=ML$ 470 EXEC DRAW 480 FOR J=1 TO 400:NEXT J 490 NEXT I 500 SP$=LE$:EXEC DRAW 510 X=(ZE-ZS)/2+ZS-1:Y=ROWS-TL+ZL-1 520 SP$=LM$:EXEC DRAW 530 SP$="The Eagle has landed":X=(COLS-LEN(SP$))/2:Y=ROWS/2:EXEC DRAW 590 SP$="09-JUL-2019":X=(COLS-LEN(SP$))/2:Y=2:EXEC DRAW 600 SP$="/u/papa_robot":X=(COLS-LEN(SP$))/2:Y=3:EXEC DRAW 605 SP$="Press Start to exit":X=(COLS-LEN(SP$))/2:Y=4:EXEC DRAW 610 REM pause until user press START 890 IF PEEK($D01F)<>6 THEN GOTO 890 900 GRAPHICS 0 999 END 1499 REM Draw sprite in SP$ at X,Y 1500 PROC DRAW 1510 IF Y<1 OR Y>ROWS OR X<1 OR X>COLS THEN ENDPROC 1520 REM Set the left margin to the X position 1530 POSITION 0,1:PRINT :POSITION X,Y:POKE 82,X-1:PRINT :PRINT SP$; 1540 POKE 82,0 1550 ENDPROC 2000 REM Load a sprite from DATA into SP$ 2010 PROC SPRITES 2012 REM 2015 SP$="":SE$="":SR=0:SC=0 2020 READ T$,S$:IF LEN(SP$)>0 THEN SP$(LEN(SP$)+1)=CHR$(155) 2030 SP$(LEN(SP$)+1)=S$:SR=SR+1:IF LEN(S$)>SC THEN SC=LEN(S$) 2040 BL$="":FOR I=1 TO LEN(S$):BL$(LEN(BL$)+1)=" ":NEXT I 2050 IF LEN(SE$)>0 THEN SE$(LEN(SE$)+1)=CHR$(155) 2060 SE$(LEN(SE$)+1)=BL$ 2070 IF T$<>"SE" THEN GOTO 2020 2080 ENDPROC 2500 REM Draw lunar surface 2501 PROC DRAWSF 2510 DIDUP=0:L1$="":FOR I=1 TO COLS+4:L1$(LEN(L1$)+1)=" ":NEXT I 2520 ZS=0:ZE=0:TL=0 2530 L2$=" ":UP=DIDUP:IF NOT UP AND L1$(3,3)<>" " 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 ".";CHR$(30); 2562 REM CHR8 left Arrow 2565 REM MID$ in AppleBasic mid to inexistent index returns empty, in Atari fails as out of bounds, add a space 2567 IF LEN(L1$)" " 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$=PEAK$(PEAK+1,PEAK+1):PRINT P$;:L2$(LEN(L2$)+1)=P$ 2740 IF PEAK=3 AND NOT Z1 THEN Z1=I 2750 IF PEAK<>3 AND C2$="_" THEN Z2=I 2760 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 2770 IF PEAK<>3 OR (C1$="_" AND C2$="_") THEN PEAK=0 2780 NEXT I 2790 L1$=L2$ 2800 C2=0 2810 FOR I=3 TO COLS+2 2820 IF L1$(I,I)=" " THEN C2=C2+1 2830 NEXT I 2840 TL=TL+1 2850 IF C2