SCREEN 13: VIEW SCREEN (1, 90)-(150, 1), , 7 O1H = 4: O1V = 3 O2H = 6: O2V = 3 O3H = 5: O3V = 7 D = 1 TimeOfDay = 1 '1 = day; 2 = night Count = 0 GOSUB DrawBackground GOSUB ScanGrid GOSUB SetupRain GOTO GetKey ScanGrid: COLOR 7: LOCATE 13, 1 H = 5: V = 5: Zoom = 0 IF D = 1 THEN V = V - 6: PRINT "Facing: North" IF D = 2 THEN H = H + 6: PRINT "Facing: East " IF D = 3 THEN V = V + 6: PRINT "Facing: South" IF D = 4 THEN H = H - 6: PRINT "Facing: West " FOR MainLoop = 1 TO 5 IF D = 1 THEN V = V + 1: H = 0 IF D = 2 THEN H = H - 1: V = 0 IF D = 3 THEN V = V - 1: H = 10 IF D = 4 THEN H = H + 1: V = 10 Zoom = Zoom + 10: Horizontal = 75 - (Zoom * 5) FOR SearchRow = 1 TO 10 IF H = O1H AND V = O1V THEN GOSUB DrawBlock IF H = O2H AND V = O2V THEN GOSUB DrawBlock IF H = O3H AND V = O3V THEN GOSUB DrawBlock IF D = 1 THEN H = H + 1 IF D = 2 THEN V = V + 1 IF D = 3 THEN H = H - 1 IF D = 4 THEN V = V - 1 Horizontal = Horizontal + Zoom NEXT NEXT H = 5: V = 5 RETURN DrawBackground: IF TimeOfDay = 1 THEN GOSUB DayGraphics ELSE GOSUB NightGraphics DIM SkyBuffer(1200): GET (1, 1)-(150, 29), SkyBuffer DIM GroundBuffer(3000): GET (1, 22)-(150, 90), GroundBuffer RETURN DayGraphics: PSET (0, 0) FOR DrawSky = 1 TO 4: DRAW "C128 R150DL150D": NEXT FOR DrawSky = 1 TO 3: DRAW "C129 R150DL150D": NEXT FOR DrawSky = 1 TO 3: DRAW "C130 R150DL150D": NEXT FOR DrawSky = 1 TO 10: DRAW "C131 R150DL150": NEXT FOR DrawGrass = 1 TO 10: DRAW "C165 R150DL150": NEXT FOR DrawGrass = 1 TO 20: DRAW "C166 R150DL150": NEXT FOR DrawGrass = 1 TO 20: DRAW "C167 R150DL150": NEXT FOR DrawGrass = 1 TO 10: DRAW "C168 R150DL150": NEXT RETURN NightGraphics: PSET (0, 0) FOR DrawSky = 1 TO 15: DRAW "C0 R150DL150D": NEXT FOR DrawGrass = 1 TO 10: DRAW "C19 R150DL150": NEXT FOR DrawGrass = 1 TO 15: DRAW "C20 R150DL150": NEXT FOR DrawGrass = 1 TO 18: DRAW "C21 R150DL150": NEXT FOR DrawGrass = 1 TO 18: DRAW "C22 R150DL150": NEXT RETURN DrawBlock: Vertical = 24: PSET (Horizontal, Vertical) FOR DrawSide1 = 1 TO Zoom / 7 FOR DLR = 1 TO Zoom: DRAW "C173 R": NEXT: DRAW "BD" FOR DLL = 1 TO Zoom: DRAW "L": NEXT: DRAW "BL" NEXT FOR DrawSide2 = 1 TO Zoom FOR DLR = 1 TO Zoom: DRAW "C174 R": NEXT: DRAW "BD" FOR DLL = 1 TO Zoom: DRAW "L": NEXT NEXT FOR DLR = 1 TO Zoom + 1: DRAW "R": NEXT FOR DrawSide3 = 1 TO Zoom / 7 FOR DLU = 1 TO Zoom: DRAW "C175 U": NEXT FOR DLD = 1 TO Zoom: DRAW "D": NEXT: DRAW "RU" FOR DLU = 1 TO Zoom: DRAW "U": NEXT FOR DLD = 1 TO Zoom: DRAW "D": NEXT NEXT RETURN Flash: PSET (0, 0): FOR Flash = 1 TO 15: DRAW "C14 R150DL150D": NEXT NOW = TIMER: WHILE (TIMER - .1) < NOW: WEND PUT (1, 1), SkyBuffer, PSET: GOSUB ScanGrid RETURN Spark: H1 = RND * 150: H2 = RND * 150: H3 = RND * 150: H4 = RND * 150 LINE (H1, 0)-(H2, 13), 14: LINE (H2, 13)-(H3, 20), 14: LINE (H3, 20)-(H4, 29), 14 NOW = TIMER: WHILE (TIMER - .1) < NOW: WEND PUT (1, 1), SkyBuffer, PSET: GOSUB ScanGrid RETURN SetupRain: R1 = 10: R2 = 70: R3 = -40: R4 = 21: R5 = -5: R6 = -20: R7 = 3: R8 = 55 RETURN Rain: Col1 = POINT(10, R1): Col2 = POINT(20, R2): Col3 = POINT(50, R3): Col4 = POINT(80, R4) Col5 = POINT(100, R5): Col6 = POINT(55, R6): Col7 = POINT(70, R7): Col8 = POINT(140, R8) FOR SpeedControl = 1 TO 35 PSET (10, R1), 15: PSET (20, R2), 15: PSET (50, R3), 15: PSET (80, R4), 15 PSET (100, R5), 15: PSET (55, R6), 15: PSET (70, R7), 15: PSET (140, R8), 15 NEXT PSET (10, R1), Col1: PSET (20, R2), Col2: PSET (50, R3), Col3: PSET (80, R4), Col4 PSET (100, R5), Col5: PSET (55, R6), Col6: PSET (70, R7), Col7: PSET (140, R8), Col8 IF R1 < 90 THEN R1 = R1 + 1 ELSE R1 = 0 IF R2 < 90 THEN R2 = R2 + 1 ELSE R2 = 0 IF R3 < 90 THEN R3 = R3 + 1 ELSE R3 = 0 IF R4 < 90 THEN R4 = R4 + 1 ELSE R4 = 0 IF R5 < 90 THEN R5 = R5 + 1 ELSE R5 = 0 IF R6 < 90 THEN R6 = R6 + 1 ELSE R6 = 0 IF R7 < 90 THEN R7 = R7 + 1 ELSE R7 = 0 IF R8 < 90 THEN R8 = R8 + 1 ELSE R8 = 0 RETURN GetKey: Key$ = INKEY$ IF Key$ = "8" THEN GOSUB Up: GOSUB Refresh: GOSUB ScanGrid IF Key$ = "2" THEN GOSUB Down: GOSUB Refresh: GOSUB ScanGrid IF Key$ = "4" THEN GOSUB Left: GOSUB Refresh: GOSUB ScanGrid IF Key$ = "6" THEN GOSUB Right: GOSUB Refresh: GOSUB ScanGrid IF Key$ = "Q" OR Key$ = CHR$(27) THEN SCREEN 0: WIDTH 80, 25: END GOSUB Rain IF Count = 500 THEN GOSUB Flash IF Count = 1000 THEN GOSUB Spark IF Count = 1100 THEN GOSUB Spark IF Count = 1900 THEN GOSUB Flash IF Count = 2100 THEN GOSUB Spark IF Count = 2500 THEN GOSUB Flash IF Count = 3000 THEN Count = 0 ELSE Count = Count + 1 GOTO GetKey Up: IF D = 1 THEN O1V = O1V + 1: O2V = O2V + 1: O3V = O3V + 1 IF D = 2 THEN O1H = O1H - 1: O2H = O2H - 1: O3H = O3H - 1 IF D = 3 THEN O1V = O1V - 1: O2V = O2V - 1: O3V = O3V - 1 IF D = 4 THEN O1H = O1H + 1: O2H = O2H + 1: O3H = O3H + 1 RETURN Down: IF D = 1 THEN O1V = O1V - 1: O2V = O2V - 1: O3V = O3V - 1 IF D = 2 THEN O1H = O1H + 1: O2H = O2H + 1: O3H = O3H + 1 IF D = 3 THEN O1V = O1V + 1: O2V = O2V + 1: O3V = O3V + 1 IF D = 4 THEN O1H = O1H - 1: O2H = O2H - 1: O3H = O3H - 1 RETURN Left: IF D = 1 THEN D = 4 ELSE D = D - 1 RETURN Right: IF D = 4 THEN D = 1 ELSE D = D + 1 RETURN Refresh: PUT (1, 22), GroundBuffer, PSET RETURN