DECLARE FUNCTION cg! (x!, y!) DECLARE SUB loadmap (xs!, ys!) DECLARE SUB engine () DECLARE SUB tree (x!, y!, v!, c!) DECLARE SUB tile (x!, y!, v!, c!) SCREEN 7, 0, 1, 0 DIM SHARED m(199), map(20, 20), mx, my m: DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,7,7,0,0,0,0 DATA 0,0,0,0,7,7,0,0,0,0 DATA 0,0,7,4,4,4,4,7,0,0 DATA 0,7,7,4,4,4,4,7,7,0 DATA 0,7,7,0,4,4,0,7,7,0 DATA 0,0,7,1,1,1,1,7,0,0 DATA 0,0,0,1,0,0,1,0,0,0 DATA 0,0,0,1,0,0,1,0,0,0 DATA 0,0,8,8,0,0,8,8,0,0 map: DATA 4,4 DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 DATA 3,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,1,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,1,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,2,3 DATA 3,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3 DATA 3,2,2,2,2,2,3,2,2,2,2,2,2,3,1,1,1,1,1,3 DATA 3,2,2,2,2,2,2,3,2,2,2,2,2,2,3,1,1,1,1,3 DATA 3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,1,1,2,3 DATA 3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 RESTORE m: FOR y = 1 TO 10: FOR x = 1 TO 10: READ c: PSET (x, y), c: NEXT: NEXT: GET (1, 1)-(10, 10), m(100) FOR y = 1 TO 10: FOR x = 1 TO 10: IF POINT(x, y) = 0 THEN PSET (x, y), 255 ELSE PSET (x, y), 0 NEXT: NEXT: GET (1, 1)-(10, 10), m RESTORE map: loadmap 20, 20 engine FUNCTION cg (x, y) IF map(mx + x, my + y) = 2 THEN cg = 1 ELSE cg = 0 END FUNCTION SUB engine v = 5 DO: CLS FOR x = 1 TO 7: FOR y = 1 TO 6 sx = mx - 4 + x: sy = my - 4 + y IF sx > 0 AND sy > 0 AND sx < 21 AND sy < 21 THEN IF map(sx, sy) = 1 THEN tile x, y, v, 1 IF map(sx, sy) = 2 THEN tile x, y, v, 2 IF map(sx, sy) = 3 THEN tree x, y, v, 10 IF sx = mx AND sy = my THEN tile x, y, v, 4 END IF NEXT: NEXT: PCOPY 1, 0 DO g$ = INKEY$ IF g$ = CHR$(27) THEN END IF g$ = CHR$(0) + "H" THEN IF cg(0, -1) = 1 THEN my = my - 1 IF g$ = CHR$(0) + "P" THEN IF cg(0, 1) = 1 THEN my = my + 1 IF g$ = CHR$(0) + "K" THEN IF cg(-1, 0) = 1 THEN mx = mx - 1 IF g$ = CHR$(0) + "M" THEN IF cg(1, 0) = 1 THEN mx = mx + 1 IF g$ = CHR$(0) + "G" THEN v = v + 1: IF v > 8 THEN v = 8 IF g$ = CHR$(0) + "O" THEN v = v - 1: IF v < 0 THEN v = 0 IF g$ <> "" THEN EXIT DO LOOP LOOP END SUB SUB loadmap (xs, ys) READ mx, my FOR y = 1 TO ys: FOR x = 1 TO xs: READ map(x, y): NEXT: NEXT END SUB SUB tile (x, y, v, c) DIM p(1 TO 4, 1 TO 3), mp(2) p(1, 1) = x p(1, 2) = y p(2, 1) = x p(2, 2) = y + 1 p(3, 1) = x + 1 p(3, 2) = y + 1 p(4, 1) = x + 1 p(4, 2) = y 'calculates tilt FOR i = 1 TO UBOUND(p, 1) IF p(i, 1) < 4 THEN p(i, 3) = -p(i, 2) ELSEIF p(i, 1) > 4 THEN p(i, 3) = p(i, 2) ELSE p(i, 3) = 0 END IF NEXT 'calculates point coordinates FOR i = 1 TO UBOUND(p, 1) p(i, 1) = (p(i, 1) * 15) + p(i, 3) p(i, 2) = (p(i, 2) * v) + 20 NEXT 'draws tile FOR i = 1 TO 3 LINE (p(i, 1), p(i, 2))-(p(i + 1, 1), p(i + 1, 2)), c NEXT LINE (p(4, 1), p(4, 2))-(p(1, 1), p(1, 2)), c 'finds midpoint between points 1&3,then fills tile with color mp(1) = (p(1, 1) + p(3, 1)) / 2: mp(2) = (p(1, 2) + p(3, 2)) / 2: PAINT (mp(1), mp(2)), c, c END SUB SUB tree (x, y, v, c) DIM p(1 TO 4, 1 TO 3), mp(2) p(1, 1) = x p(1, 2) = y p(2, 1) = x p(2, 2) = y + 1 p(3, 1) = x + 1 p(3, 2) = y + 1 p(4, 1) = x + 1 p(4, 2) = y 'calculates tilt FOR i = 1 TO UBOUND(p, 1) IF p(i, 1) < 4 THEN p(i, 3) = -p(i, 2) ELSEIF p(i, 1) > 4 THEN p(i, 3) = p(i, 2) ELSE p(i, 3) = 0 END IF NEXT 'calculates point coordinates FOR i = 1 TO UBOUND(p, 1) p(i, 1) = (p(i, 1) * 15) + p(i, 3) p(i, 2) = (p(i, 2) * v) + 20 NEXT 'draws tile FOR i = 1 TO 3 LINE (p(i, 1), p(i, 2))-(p(i + 1, 1), p(i + 1, 2)), c NEXT 'LINE (p(4, 1), p(4, 2))-(p(1, 1), p(1, 2)), c 'finds midpoint between points 1&3,then raises y for tree top mp(1) = (p(1, 1) + p(3, 1)) / 2: mp(2) = ((p(1, 2) + p(3, 2)) / 2) - (y * 10) FOR i = 1 TO 4 LINE (p(i, 1), p(i, 2))-(mp(1), mp(2)), c NEXT 'PAINT (mp(1), mp(2) + 2), c, c END SUB