DECLARE SUB palman (ent!, r!, g!, B!) 'The idea was from 3dland only that missed a lot. ' Here the smoothing is better and the 3d is more realistic (besides the '(fact that you are still looking at a square of land). 'It doesn't goes faster (with solid with or without grid) but the effects are 'nice enough to learn from this program I think. ' please if you have any questions about qbasic (or quickbasic) then please 'ask me (in e-mail at gamma51@hotmail.com). 'greetz SPIRIT 'alter these values for some funny effects Ysize = 50 'the y size in pixels (the more the intenser the picture) Xsize = 50 'guess Zscale = 50 'scale for height the higher the Zscale 'the lower the diffrence between the mountains Smooth = 3 'smoothing value (the more the smoother, 0 doesn't work that nice) Water = 5 ' amount of water (100= much, 0= little) KindOfPal = 0 'what kind of pallette do you like (0=Sea, 1=Mist, 2=lava) 'use the numbers 3 to 5 for some groovy effects landscape = 2 'kind of landscape (0=dots, 1=lines, 2=solid, 3=solid with grid) SCREEN 12 DIM xcor(3) DIM ycor(3) DIM a(Xsize, Ysize) pi = 3.1415927# / 180 RANDOMIZE TIMER Scale = 2 'scaling the 3d effect 'just a palette pl = 15 IF KindOfPal = 0 THEN GOTO sea IF KindOfPal = 1 THEN GOTO land IF KindOfPal = 2 THEN GOTO lava IF KindOfPal = 3 THEN GOTO st1 IF KindOfPal = 4 THEN GOTO st2 IF KindOfPal = 5 THEN GOTO st3 sea: palman 1, 0, 0, 33 palman 2, 0, 0, 43 palman 3, 0, 0, 53 palman 4, 0, 0, 63 FOR i = 0 TO pl - 4 palman i + 4, i / (pl - 4) * 63, 43, i / (pl - 4) * 43 NEXT i GOTO ok land: FOR i = 1 TO pl palman i, i / pl * 63, 43, i / pl * 23 NEXT i GOTO ok lava: FOR i = 1 TO pl palman i, 63, i / pl * 63, 0 NEXT i GOTO ok st1: FOR i = 1 TO pl palman i, 0, 0, i / pl * 43 NEXT i GOTO ok st2: FOR i = 1 TO pl palman i, 23, 23 + i / pl * 23, 23 NEXT i GOTO ok st3: FOR i = 1 TO pl palman i, 23 + (i / pl * 33), 23, 23 NEXT i GOTO ok ok: 'land generator Water = Water + 1 FOR x = 0 TO Xsize STEP 1 FOR y = 0 TO Ysize STEP 1 vaul = INT(RND * Water) + 1 IF vaul = 1 THEN vaul = 15 ELSE vaul = 0 PSET (x, y), vaul NEXT y NEXT x 'smothing formula IF Smooth <> 0 THEN FOR i = 0 TO Smooth - 1 FOR y = 0 TO Ysize FOR x = 0 TO Xsize c = (POINT(x - 1, y) + POINT(x + 1, y) + POINT(x, y - 1) + POINT(x, y + 1) + POINT(x, y) + POINT(x, y) + POINT(x + 1, y + 1) + POINT(x - 1, y + 1) + POINT(x + 1, y - 1) + POINT(x - 1, y - 1)) / 9 IF c < 1 THEN c = 1 a(x, y) = c NEXT x NEXT y FOR y = 0 TO Ysize FOR x = 0 TO Xsize PSET (x, y), a(x, y) NEXT x NEXT y NEXT i END IF LINE (-1, -1)-(Xsize + 2, Ysize + 2), 16, B 'The diffrent landscapes IF landscape = 0 THEN GOTO dots IF landscape = 1 THEN GOTO lines IF landscape = 2 THEN GOTO solid IF landscape = 3 THEN GOTO solidwithgrid dots: FOR y = Ysize TO 0 STEP -1 FOR x = 0 TO Xsize xc = x yc = y z = Zscale - POINT(Xsize - x, Ysize - y) xc = 320 + 320 * Scale / 2 - xc / Xsize * (320 * Scale) zc = yc / Ysize * (320 * Scale) yc = z / Zscale * (240 * Scale) xcor = 320 + (xc - 320) / (zc / 640 + 1) ycor = 0 + (yc - 0) / (zc / 640 + 1) PSET (xcor, ycor), POINT(Xsize - x, Ysize - y) NEXT x, y GOTO stopping lines: FOR y = Ysize TO 0 STEP -1 FOR x = 0 TO Xsize FOR i = 0 TO 2 IF i = 0 THEN xc = x: yc = y: z = Zscale - POINT(Xsize - x, Ysize - y) IF i = 1 THEN xc = x + 1: yc = y: z = Zscale - POINT(Xsize - (x + 1), Ysize - y) IF i = 2 THEN xc = x: yc = y + 1: z = Zscale - POINT(Xsize - x, Ysize - (y + 1)) xc = 320 + 320 * Scale / 2 - xc / Xsize * (320 * Scale) zc = yc / Ysize * (320 * Scale) yc = z / Zscale * (240 * Scale) xcor(i) = 320 + (xc - 320) / (zc / 640 + 1) ycor(i) = 0 + (yc - 0) / (zc / 640 + 1) NEXT i LINE (xcor(0), ycor(0))-(xcor(1), ycor(1)), POINT(Xsize - x, Ysize - y) LINE (xcor(0), ycor(0))-(xcor(2), ycor(2)), POINT(Xsize - x, Ysize - y) NEXT x, y GOTO stopping solid: FOR y = Ysize TO 0 STEP -1 FOR x = 0 TO Xsize STEP 1 FOR i = 0 TO 3 IF i = 0 THEN xc = x: yc = y: z = Zscale - POINT(Xsize - x, Ysize - y) IF i = 1 THEN xc = x + 1: yc = y: z = Zscale - POINT(Xsize - (x + 1), Ysize - y) IF i = 2 THEN xc = x: yc = y + 1: z = Zscale - POINT(Xsize - x, Ysize - (y + 1)) IF i = 3 THEN xc = x + 1: yc = y + 1: z = Zscale - POINT(Xsize - (x + 1), Ysize - (y + 1)) xc = 320 + 320 * Scale / 2 - xc / Xsize * (320 * Scale) zc = yc / Ysize * (320 * Scale) yc = z / Zscale * (240 * Scale) xcor(i) = 320 + (xc - 320) / (zc / 640 + 1) ycor(i) = 0 + (yc - 0) / (zc / 640 + 1) NEXT i dxy = ((xcor(1) - xcor(0)) ^ 2 + (ycor(1) - ycor(0)) ^ 2) ^ .5 FOR r = 0 TO (Scale * dxy) x1 = xcor(0) + (xcor(1) - xcor(0)) / (Scale * dxy) * r x2 = xcor(2) + (xcor(3) - xcor(2)) / (Scale * dxy) * r y1 = ycor(0) + (ycor(1) - ycor(0)) / (Scale * dxy) * r y2 = ycor(2) + (ycor(3) - ycor(2)) / (Scale * dxy) * r x3 = xcor(0) + (xcor(2) - xcor(0)) / (Scale * dxy) * r x4 = xcor(1) + (xcor(3) - xcor(1)) / (Scale * dxy) * r y3 = ycor(0) + (ycor(2) - ycor(0)) / (Scale * dxy) * r y4 = ycor(1) + (ycor(3) - ycor(1)) / (Scale * dxy) * r LINE (x1, y1)-(x2, y2), POINT(Xsize - x, Ysize - y) LINE (x3, y3)-(x4, y4), POINT(Xsize - x, Ysize - y) NEXT r, x, y GOTO stopping solidwithgrid: FOR y = Ysize TO 0 STEP -1 FOR x = 0 TO Xsize STEP 1 FOR i = 0 TO 3 IF i = 0 THEN xc = x: yc = y: z = Zscale - POINT(Xsize - x, Ysize - y) IF i = 1 THEN xc = x + 1: yc = y: z = Zscale - POINT(Xsize - (x + 1), Ysize - y) IF i = 2 THEN xc = x: yc = y + 1: z = Zscale - POINT(Xsize - x, Ysize - (y + 1)) IF i = 3 THEN xc = x + 1: yc = y + 1: z = Zscale - POINT(Xsize - (x + 1), Ysize - (y + 1)) xc = 320 + 320 * Scale / 2 - xc / Xsize * (320 * Scale) zc = yc / Ysize * (320 * Scale) yc = z / Zscale * (240 * Scale) xcor(i) = 320 + (xc - 320) / (zc / 640 + 1) ycor(i) = 0 + (yc - 0) / (zc / 640 + 1) NEXT i dxy = ((xcor(1) - xcor(0)) ^ 2 + (ycor(1) - ycor(0)) ^ 2) ^ .5 FOR r = 0 TO (Scale * dxy) x1 = xcor(0) + (xcor(1) - xcor(0)) / (Scale * dxy) * r x2 = xcor(2) + (xcor(3) - xcor(2)) / (Scale * dxy) * r y1 = ycor(0) + (ycor(1) - ycor(0)) / (Scale * dxy) * r y2 = ycor(2) + (ycor(3) - ycor(2)) / (Scale * dxy) * r x3 = xcor(0) + (xcor(2) - xcor(0)) / (Scale * dxy) * r x4 = xcor(1) + (xcor(3) - xcor(1)) / (Scale * dxy) * r y3 = ycor(0) + (ycor(2) - ycor(0)) / (Scale * dxy) * r y4 = ycor(1) + (ycor(3) - ycor(1)) / (Scale * dxy) * r LINE (x1, y1)-(x2, y2), POINT(Xsize - x, Ysize - y) LINE (x3, y3)-(x4, y4), POINT(Xsize - x, Ysize - y) NEXT r LINE (xcor(0), ycor(0))-(xcor(1), ycor(1)), 15 LINE (xcor(0), ycor(0))-(xcor(2), ycor(2)), 15 LINE (xcor(3), ycor(3))-(xcor(1), ycor(1)), 15 LINE (xcor(3), ycor(3))-(xcor(2), ycor(2)), 15 NEXT x, y stopping: SLEEP STOP SUB palman (colr, re, gr, bl) PALETTE colr, 256 ^ 2 * INT(bl) + 256 * INT(gr) + INT(re) END SUB