commit b20967daecda3e949759476d1b679a096b4b7d45 Author: Neil Date: Sat Jun 12 20:36:23 2021 -0700 Under version-control. diff --git a/3dland.bas b/3dland.bas new file mode 100644 index 0000000..35fe728 --- /dev/null +++ b/3dland.bas @@ -0,0 +1,314 @@ +'''''''''''''''' +' Let's see if we can make us some 3D graphics! In Basic, Hehe. + +DECLARE FUNCTION maxval% (v1%, v2%, limit%) +DECLARE FUNCTION minval% (v1%, v2%, v3%) +DECLARE SUB hline (x1%, x2%, y%, c%) +DECLARE FUNCTION min% (v1%, v2%, v3%) +DECLARE FUNCTION max% (v1%, v2%, v3%) +DECLARE SUB pal () +DECLARE SUB pixel (x%, y%, c%) + +DEFINT A-Z 'set default var type to int 'cos it's my fav. +'$STATIC 'use static arrays +CLS 'clear the screen. duh +SCREEN 13 'initialize screen mode 13 (0x013 (19) 4 real) + +CONST SCRX = 320 'sort of like #define so I can use SCRX/Y instead +CONST SCRY = 200 'of the actual #'s in case the width changes, etc. +CONST CLRS = 255 'ditto w/ color depth +CONST HLFX = 160 'half the screen width +CONST HLFY = 100 'half screen height (both use lots, should save calc.) +CONST PI = 3.141592654# 'close enuf +CONST VIEWRANGE = 16 'how far before fade to blackness +CONST MSZE = 16 'size of the map (x & y are = ) +CONST MHGT = 4 'height of random mountains (TEMP) +CONST MININT = -32768 'lowest possible integer +CONST CONTRAST = 20 'multiplied by light values +CONST AMBIENT = 50 'added to light values + +LOCATE 1, 1: COLOR 200: PRINT "Loading" + +' make lookup-tables +DIM sine(0 TO 255) AS SINGLE +DIM cosine(0 TO 255) AS SINGLE +FOR i = 0 TO 255 + sine(i) = SIN(i) * PI / 200 'Convert rad to "hex" + cosine(i) = COS(i) * PI / 200 'Convert rad to "hex" +NEXT i +'Note to self: REMEMBER I'm using "hexians" (256) NOT degrees (360) + +'Layout of the landscape. . . just some random sample data for now! +DIM land(1 TO MSZE, 1 TO MSZE) AS INTEGER 'array containing landscape +RANDOMIZE TIMER 'use timer to seed random + '# generator +FOR x = 1 TO MSZE + FOR y = 1 TO MSZE + land(x, y) = INT(RND * MHGT) 'fill w/ random data + NEXT y +NEXT x + +'make a variable to hold edge buffers +TYPE edge + ls AS INTEGER + rs AS INTEGER +END TYPE +DIM edge(0 TO SCRY) AS edge + +'. . . and make an gradiant green palette +OUT &H3C8, 0 ' tell port whole palette is coming (otherwise # of color) +FOR i = 0 TO 255 + OUT &H3C9, 0 'red + OUT &H3C9, INT(i / 4) 'green + OUT &H3C9, 0 'blue + 'Hahaha! I'll never use THIS command again, + 'PALETTE i, INT(i / 4) * 256 +NEXT i + +' Initialize the player variale to hold info on player position +TYPE spot + x AS INTEGER 'x runs horizontally to player (pitch) + y AS INTEGER 'y runs out from player (roll) + z AS INTEGER 'z runs up and down (yaw) aka altitude + 'I know these are not std. but they fit better w/ the flat map +END TYPE +DIM pov AS spot +DIM currentpoint AS spot ' used w/i the program loop +pov.x = 8 +pov.y = -8 +pov.z = 7 + +'temp +DIM points(1 TO MSZE, 1 TO MSZE) AS spot'uses x and y as screen co-ords & z as + 'distance +DIM ver(1 TO 3) AS spot 'vertex: used for drawing polygons, x + 'and y are co-ords & z is color +DIM tmp(1 TO 3) AS spot 'used w/ ver for sorting + +BEEP +CLS + +DO + a$ = INKEY$ + SELECT CASE a$ + CASE "a": pov.x = pov.x + 1: CLS + CASE "d": pov.x = pov.x - 1: CLS + CASE "w": pov.y = pov.y + 1: CLS + CASE "s": pov.y = pov.y - 1: CLS + CASE "e": pov.z = pov.z + 1: CLS + CASE "c": pov.z = pov.z - 1: CLS + CASE CHR$(27): SYSTEM + END SELECT + FOR x = 1 TO MSZE + FOR y = 1 TO MSZE + 'in front of us + rely = y - pov.y + relx = x - pov.x + relz = land(x, y) - pov.z + IF rely > 0 AND ABS(relx) <= rely AND ABS(relz) <= rely THEN + points(x, y).y = HLFY - relz * HLFY / rely + points(x, y).x = HLFX - relx * HLFX / rely + 'a^3 = b^3 + c^3 + d^3 to find z (pixel dist.) + points(x, y).z = (ABS(relz) ^ 3 + ABS(rely) ^ 3 + ABS(relx) ^ 3) ^ (1 / 3) + ELSE points(x, y).z = -1 + IF points(x, y).y < 0 OR points(x, y).y > SCRY OR points(x, y).x < 0 OR points(x, y).x > SCRX OR points(x, y).z > VIEWRANGE THEN points(x, y).z = -1 + END IF + NEXT y + NEXT x + + FOR y = MSZE - 1 TO 1 STEP -1 + FOR x = MSZE - 1 TO 1 STEP -1 + 'if the current point has not been flagged as offscreen, out of FOV, or not w/i range of VIEWRANGE (z=-1) + IF points(x, y).z >= 0 THEN + 'seperate into two triangles + FOR p = 0 TO 1 + 'get points of tri. + IF p = 0 THEN + ver(1).x = points(x, y).x: ver(1).y = points(x, y).y: ver(1).z = points(x, y).z + ver(2).x = points(x, y + 1).x: ver(2).y = points(x, y + 1).y: ver(2).z = points(x, y + 1).z + ver(3).x = points(x + 1, y + 1).x: ver(3).y = points(x + 1, y + 1).y: ver(3).z = points(x + 1, y + 1).z + ELSE + 'sides 1 & 3 are reversed so will be + 'in same rotational order (this could + 'be more efficient - swap lables) + ver(3).x = points(x, y).x: ver(3).y = points(x, y).y: ver(3).z = points(x, y).z + ver(1).x = points(x + 1, y + 1).x: ver(1).y = points(x + 1, y + 1).y: ver(1).z = points(x + 1, y + 1).z + 'side 2 is other corner of square + ver(2).x = points(x + 1, y).x: ver(2).y = points(x + 1, y).y: ver(2).z = points(x + 1, y).z + END IF + + 'translate tri. so ver[1] is origin + 'of tmp, w/ V2 & V3 as vectors + tmp(2).x = ver(2).x - ver(1).x + tmp(2).y = ver(2).y - ver(1).y + tmp(3).x = ver(3).x - ver(1).x + tmp(3).y = ver(3).y - ver(1).y + + 'if we are facing the polygon (uses + 'vectors to find if c.clockwise) + IF tmp(2).x * tmp(3).y < tmp(3).x * tmp(2).y THEN + 'sort ver[] tp-bt + GOSUB sort + + 'find tri. height + dy = ver(1).y - ver(3).y + + 'delta-y for short side 1 + dy1 = ver(1).y - ver(2).y + + 'slope of long side + m! = (ver(3).x - ver(1).x) / dy + + 'find width at middle + midwidth = ver(2).x - (ver(1).x + (m! * dy1)) + + 'if long side is on the left + 'IF midwidth > 1 THEN + 'if width is big enough to see + IF ABS(midwidth) > 1 THEN + 'if height is big enough to see + IF dy > 1 THEN + 'delta-y of short side 2 + dy2 = ver(2).y - ver(3).y + 'slope of short side 1 (clause prevents div by 0) + IF ABS(dy1) > 0 THEN m1! = (ver(2).x - ver(1).x) / dy1 + 'slope of short side 2 (clause prevents division by 0) + IF ABS(dy2) > 0 THEN m2! = (ver(3).x - ver(2).x) / dy2 + 'calculate the color + 'colr = points(x, y).y - points(x + 1, y + 1).y + 30'VIEWRANGE - ver(1).z + 20 + IF p = 0 THEN + colr = (land(x, y + 1) - (land(x, y) + land(x + 1, y + 1)) / 2) * CONTRAST + AMBIENT + ELSE + colr = ((land(x, y) + land(x + 1, y + 1)) / 2 - land(x + 1, y)) * CONTRAST + AMBIENT + END IF + FOR h = 0 TO dy + ypos = ver(1).y - h + IF h <= dy1 THEN + LINE (ver(1).x + (m! * h), ypos)-(ver(1).x + (m1! * h), ypos), colr + 'xa = ver(1).x + (m! * h) + 'xb = ver(1).x + (m1! * h) + 'x1 = minval(xa, xb, 0) + 'x2 = maxval(xa, xb, SCRX) + 'hline x1, x2, ypos, colr + ELSE + LINE (ver(1).x + (m! * h), ypos)-(ver(2).x + (m2! * (h - dy1)), ypos), colr + 'xa = ver(1).x + (m! * h) + 'xb = ver(2).x + (m2! * h) + 'x1 = minval(xa, xb, 0) + 'x2 = maxval(xa, xb, SCRX) + 'hline x1, x2, ypos, colr + END IF + NEXT h + END IF + END IF + 'END IF + + 'if long side is on the right + 'IF midwidth < -1 THEN + 'END IF + + 'else is too thin to see + 'LINE (ver(1).x, ver(1).y)-(ver(2).x, ver(2).y), 255'VIEWRANGE - ver(1).z + 'LINE (ver(2).x, ver(2).y)-(ver(3).x, ver(3).y), 255'VIEWRANGE - ver(1).z + 'LINE (ver(3).x, ver(3).y)-(ver(1).x, ver(1).y), 255'VIEWRANGE - ver(1).z + END IF + NEXT p + END IF + NEXT x + NEXT y +LOOP + +sort: +'assign tmp the values of ver +FOR i = 1 TO 3 + tmp(i).x = ver(i).x + tmp(i).y = ver(i).y + tmp(i).z = ver(i).z +NEXT i + +'order them top to bottom [1st pnt] +flag = max(tmp(1).y, tmp(2).y, tmp(3).y) +'used to skip 3rd calculation +topflag = flag +'assign values to the first vertex +ver(1).x = tmp(flag).x: ver(1).y = tmp(flag).y: ver(1).z = tmp(flag).z +'make y lowest possible # 4 further compares +tmp(flag).y = MININT + +'order top-bottom 2 (prev. top is now -32768) +flag = max(tmp(1).y, tmp(2).y, tmp(3).y) +'add to flag to find which of 3 is not used +topflag = topflag + flag +'assign values to the 2nd vertex +ver(2).x = tmp(flag).x: ver(2).y = tmp(flag).y: ver(2).z = tmp(flag).z + +'use topflag to find last point in order +SELECT CASE topflag + CASE 3 'used 1 & 2 + flag = 3 + CASE 4 'used 1 & 3 + flag = 2 + CASE 5 'used 2 & 3 + flag = 1 + CASE ELSE 'just in case + BEEP + flag = 1 +END SELECT +'assign values to the 3rd vertex +ver(3).x = tmp(flag).x: ver(3).y = tmp(flag).y: ver(3).z = tmp(flag).z + +RETURN + +SUB hline (x1, x2, y, c) +FOR i = x1 TO x2 + pixel i, y, c +NEXT i +END SUB + +'''''''''''''''' +' Returns 1, 2, or 3, depending on which value: 1st, 2nd, or 3d is largest +FUNCTION max (v1, v2, v3) +r = 0 +IF v1 >= v2 AND v1 >= v3 THEN r = 1 +IF v2 >= v1 AND v2 >= v3 THEN r = 2 +IF v3 >= v2 AND v3 >= v1 THEN r = 3 +max = r +END FUNCTION + +'''''''''''''''' +' Returns the largest of the three values passed to it w/i limit +FUNCTION maxval (v1, v2, limit) +r = 0 +IF v1 >= v2 THEN r = v1 +IF v2 >= v1 THEN r = v2 +IF r > limit THEN r = limit +maxval = r +END FUNCTION + +'''''''''''''''' +' Returns the smallest of the three values passed to it w/i limit +FUNCTION minval (v1, v2, limit) +r = 0 +IF v1 <= v2 THEN r = v1 +IF v2 <= v1 THEN r = v2 +IF r < limit THEN r = limit +minval = r +END FUNCTION + +'This SUB does the same thing as PSET only by writing directly to the video +'memory which *should* be much faster (Muahahaha!) +' +SUB pixel (x, y, c) +DEF SEG = &HA000 'A000h is where the video mem. starts in mode + '13h, which we're using +IF x < 0 OR x > SCRX THEN EXIT SUB 'make sure x is on the screen +IF y < 0 OR y > SCRY THEN EXIT SUB 'make sure y is on the screen + '(We do NOT want to be writing directly into + 'memory somewhere we're not supposed to!) +IF c < 0 OR c > CLRS THEN EXIT SUB 'make sure c is w/i the color palette +y& = y 'needed to prevent overflow (where's an + 'unsigned int when you need it?) +POKE y& * SCRX + x, c 'put c into the right spot offset from A000h + '(pixels go lt-rt, tp-bt in a linear fashion) +END SUB + diff --git a/3dland.bas.d b/3dland.bas.d new file mode 100644 index 0000000..705fe25 --- /dev/null +++ b/3dland.bas.d @@ -0,0 +1,2 @@ +3D Landscape - ADSWEC Controls; a good example of what a 3D engine looks like +without important stuff like clipping and rotation. diff --git a/3dland.exe b/3dland.exe new file mode 100644 index 0000000..a658ae1 Binary files /dev/null and b/3dland.exe differ diff --git a/3dland.exe.d b/3dland.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/3dland.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/3dobject.bas b/3dobject.bas new file mode 100644 index 0000000..16ef1a3 --- /dev/null +++ b/3dobject.bas @@ -0,0 +1,266 @@ +'default integer type +DEFINT A-Z + +'screen mode 13h +SCREEN 13 + +'set palette +'. . . and make an gradiant green palette +OUT &H3C8, 0 ' tell port whole palette is coming (otherwise # of color) +FOR i = 0 TO 255 + OUT &H3C9, 10 'red + OUT &H3C9, INT(i / 4) 'green + OUT &H3C9, 50 'blue +NEXT i + +'define program constants +'CONST SCRX = 320 unused +'CONST SCRY = 200 +'CONST CLRS = 255 +CONST HLFX = 160 +CONST HLFY = 100 +CONST PI = 3.141592654# +CONST FACES = 11 +CONST SHAPES = 0 + +'trig lookup-tables +DIM sine(255) AS SINGLE: DIM cosine(255) AS SINGLE +FOR i = 0 TO 255 + sine(i) = SIN(i * PI / 128) + cosine(i) = COS(i * PI / 128) +NEXT i + +'data types: +'integer vector (for initial shape data) +TYPE vec3it + x AS INTEGER + y AS INTEGER + z AS INTEGER +END TYPE +'real vector +TYPE vec3t + x AS SINGLE + y AS SINGLE + z AS SINGLE +END TYPE +'a face +TYPE face3t + 'object vertices + ov1 AS vec3it + ov2 AS vec3it + ov3 AS vec3it + 'world verteces + wv1 AS vec3t + wv2 AS vec3t + wv3 AS vec3t +END TYPE +'an object +TYPE objt + p AS vec3t 'position + r AS vec3it 'rotation +END TYPE +'a pixel point +TYPE vec2it + x AS INTEGER + y AS INTEGER +END TYPE +'a triangle on-screen +TYPE face2t + v1 AS vec2it + v2 AS vec2it + v3 AS vec2it +END TYPE + +'make a 12-polygon shape +DIM shape(0 TO SHAPES, 0 TO FACES) AS face3t 'holds shape's form (obj spc) +DIM obj(0 TO SHAPES) AS objt 'holds shape's pos (wrld spc) +'make the viewer +DIM pov AS objt +'make a variable to hold mapped 2d drawing data +DIM tri AS face2t + +'load the shape's data + 'base (-y) +DATA -10,-10,-10, -10,-10,10, 10,-10,-10 +DATA -10,-10,10, 10,-10,10, 10,-10,-10 + 'front (-z) +DATA -10,-10,-10, 10,-10,-10, -10,10,-10 +DATA -10,10,-10, 10,-10,-10, 10,10,-10 + 'left (-x) +DATA -10,-10,-10, -10,10,-10, -10,-10,10 +DATA -10,-10,10, -10,10,-10, -10,10,10 + 'top (+y) +DATA 10,10,10, -10,10,-10, 10,10,-10 +DATA 10,10,10, -10,10,10, -10,10,-10 + 'back (+z) +DATA 10,10,10, 10,-10,10, -10,10,10 +DATA -10,10,10, 10,-10,10, -10,-10,10 + 'right (+x) +DATA 10,10,10, 10,10,-10, 10,-10,10 +DATA 10,-10,10, 10,10,-10, 10,-10,-10 +FOR i = 0 TO FACES + READ shape(0, i).ov1.x 'read first vertex position + READ shape(0, i).ov1.y + READ shape(0, i).ov1.z + READ shape(0, i).ov2.x 'read second vertex position + READ shape(0, i).ov2.y + READ shape(0, i).ov2.z + READ shape(0, i).ov3.x 'read third vertex position + READ shape(0, i).ov3.y + READ shape(0, i).ov3.z +NEXT i +'read shape's starting position +'imput strating pov position +pov.p.x = 20 +pov.p.y = 30 +pov.p.z = -70 + +DO +'draw the shapes +FOR j = 0 TO SHAPES 'go through @ shape + FOR i = 0 TO FACES 'go through @ face + obj(j).r.y = (obj(j).r.y + 1) MOD 256 + 'transform @ point from object to world space + rx = obj(j).r.x 'extra 2-letter vars are for + ry = obj(j).r.y 'simplification only + rz = obj(j).r.z + + vx = shape(j, i).ov1.x + vy = shape(j, i).ov1.y + vz = shape(j, i).ov1.z + shape(j, i).wv1.x = ((vx * cosine(ry) - vz * sine(ry)) - pov.p.x)' * sine(pov.r.y) + shape(j, i).wv1.y = vy - pov.p.y + shape(j, i).wv1.z = ((vx * sine(ry) + vz * cosine(ry)) - pov.p.z)' * cosine(pov.r.y) + + vx = shape(j, i).ov2.x + vy = shape(j, i).ov2.y + vz = shape(j, i).ov2.z + shape(j, i).wv2.x = ((vx * cosine(ry) - vz * sine(ry)) - pov.p.x)' * sine(pov.r.y) + shape(j, i).wv2.y = vy - pov.p.y + shape(j, i).wv2.z = ((vx * sine(ry) + vz * cosine(ry)) - pov.p.z)' * cosine(pov.r.y) + + vx = shape(j, i).ov3.x + vy = shape(j, i).ov3.y + vz = shape(j, i).ov3.z + shape(j, i).wv3.x = ((vx * cosine(ry) - vz * sine(ry)) - pov.p.x)' * sine(pov.r.y) + shape(j, i).wv3.y = vy - pov.p.y + shape(j, i).wv3.z = ((vx * sine(ry) + vz * cosine(ry)) - pov.p.z)' * cosine(pov.r.y) + + 'map the world-space coords into a 2d triangle + tri.v1.x = HLFX + (shape(j, i).wv1.x / shape(j, i).wv1.z * HLFX) + tri.v1.y = HLFY - (shape(j, i).wv1.y / shape(j, i).wv1.z * HLFY) + + tri.v2.x = HLFX + (shape(j, i).wv2.x / shape(j, i).wv2.z * HLFX) + tri.v2.y = HLFY - (shape(j, i).wv2.y / shape(j, i).wv2.z * HLFY) + + tri.v3.x = HLFX + (shape(j, i).wv3.x / shape(j, i).wv3.z * HLFX) + tri.v3.y = HLFY - (shape(j, i).wv3.y / shape(j, i).wv3.z * HLFY) + + 'check if clockwise (backface culling) + x1 = tri.v2.x - tri.v1.x 'make (x1, y1) & (x2, y2) + x2 = tri.v3.x - tri.v1.x 'normalized + y1 = tri.v2.y - tri.v1.y + y2 = tri.v3.y - tri.v1.y + IF x1 * y2 < x2 * y1 THEN + 'order the vertices top-bottom + IF tri.v1.y > tri.v2.y THEN + tmp = tri.v1.y + tri.v1.y = tri.v2.y + tri.v2.y = tmp + tmp = tri.v1.x + tri.v1.x = tri.v2.x + tri.v2.x = tmp + END IF + IF tri.v1.y > tri.v3.y THEN + tmp = tri.v1.y + tri.v1.y = tri.v3.y + tri.v3.y = tmp + tmp = tri.v1.x + tri.v1.x = tri.v3.x + tri.v3.x = tmp + END IF + IF tri.v2.y > tri.v3.y THEN + tmp = tri.v2.y + tri.v2.y = tri.v3.y + tri.v3.y = tmp + tmp = tri.v2.x + tri.v2.x = tri.v3.x + tri.v3.x = tmp + END IF + + 'find the color of the face + colr = 255 - shape(j, i).wv1.z + + ''fill in the 2d triangle + 'dx = tri.v3.x - tri.v1.x + 'dy = tri.v3.y - tri.v1.y + 'dx1 = tri.v2.x - tri.v1.x + 'dy1 = tri.v2.y - tri.v1.y + 'dx1 = tri.v3.x - tri.v2.x + 'dy1 = tri.v3.y - tri.v2.y + ' + 'sdx = SGN(dx) 'sign of dy is always positive + 'sdx1 = SGN(dx1) 'since they've been sorted top to + 'sdx2 = SGN(dx2) 'bottom: sdy = 1; ady = dy + ' + 'adx = ABS(dx) + 'adx1 = ABS(dx1) + 'adx2 = ABS(dx2) + ' + 'px = tri.v1.x + 'px1 = tri.v1.x + 'x = 0 + 'x1 = 0 + 'x2 = 0 + 'IF dy > adx THEN 'the line is tall + ' FOR h = 0 TO dy + ' x = x + adx + ' IF x > dy THEN px = px + sdx: x = x - dy + ' NEXT h + 'ELSE 'the line is wide + 'END IF + + 'wireframe + IF colr >= 0 AND colr <= 255 THEN + LINE (tri.v1.x, tri.v1.y)-(tri.v2.x, tri.v2.y), colr + LINE (tri.v2.x, tri.v2.y)-(tri.v3.x, tri.v3.y), colr + LINE (tri.v3.x, tri.v3.y)-(tri.v1.x, tri.v1.y), colr + END IF + END IF 'end backface cull + NEXT i +NEXT j +a$ = INKEY$ +SELECT CASE a$ + CASE CHR$(27) + SYSTEM + CASE CHR$(13) + SYSTEM + CASE "w" 'forward + pov.p.z = pov.p.z + 1 + CASE "s" 'back + pov.p.z = pov.p.z - 1 + CASE "a" 'strafe left + pov.p.x = pov.p.x - 1 + CASE "d" 'strafe right + pov.p.x = pov.p.x + 1 + CASE "e" 'jump + pov.p.y = pov.p.y + 1 + CASE "c" 'crouch + pov.p.y = pov.p.y - 1 + CASE "f" 'yaw left + pov.r.y = pov.r.y + 1 + CASE "h" 'yaw right + pov.r.y = pov.r.y - 1 + CASE "e" 'roll left + pov.r.z = pov.r.z + 1 + CASE "t" 'roll right + pov.r.z = pov.r.z - 1 + CASE "r" 'pitch forward + pov.r.x = pov.r.x - 1 + CASE "f" 'pitch backward + pov.r.x = pov.r.x + 1 +END SELECT +t! = TIMER: DO: LOOP UNTIL TIMER > t! + .01 +CLS +LOOP + diff --git a/3dobject.bas.d b/3dobject.bas.d new file mode 100644 index 0000000..3d6bcf1 --- /dev/null +++ b/3dobject.bas.d @@ -0,0 +1,2 @@ +3D Wireframe Box - ADSWEC Controls; can you figure out the fastest way to cause +an interger overflow? diff --git a/3dobject.exe b/3dobject.exe new file mode 100644 index 0000000..472eddf Binary files /dev/null and b/3dobject.exe differ diff --git a/3dobject.exe.d b/3dobject.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/3dobject.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/asciitur.bas b/asciitur.bas new file mode 100644 index 0000000..55503ff --- /dev/null +++ b/asciitur.bas @@ -0,0 +1,683 @@ +DECLARE SUB pause (timeval!) + +'filename: picture4.bas +'picture of turtle +CLS +LOCATE 20, 20 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 15 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 14 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 10 +PRINT "XXXXX" +LOCATE 22, 20 +PRINT "XXXXX" +LOCATE 23, 20 +PRINT "XXXXX" +LOCATE 23, 25 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 30 +PRINT "XXXXX" +LOCATE 23, 30 +PRINT "XXXXX" +LOCATE 23, 35 +COLOR 7 +PRINT "\" +LOCATE 22, 37 +COLOR 2 + +LOCATE 22, 37 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 48 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 21 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 16 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 15 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 11 +PRINT "XXXXX" +LOCATE 22, 20 +PRINT "XXXXX" +LOCATE 23, 20 +PRINT "XXXXX" +LOCATE 23, 25 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 30 +PRINT "XXXXX" +LOCATE 23, 30 +PRINT "XXXXX" +LOCATE 23, 35 +COLOR 7 +PRINT "\" + +LOCATE 22, 38 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 49 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 22 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 17 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 16 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 12 +PRINT "XXXXX" +LOCATE 22, 20 +PRINT "XXXXX" +LOCATE 23, 20 +PRINT "XXXXX" +LOCATE 23, 25 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 30 +PRINT "XXXXX" +LOCATE 23, 30 +PRINT "XXXXX" +LOCATE 23, 35 +COLOR 7 +PRINT "\" + +LOCATE 22, 39 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 50 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 23 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 18 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 17 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 13 +PRINT "XXXXX" +LOCATE 22, 23 +PRINT "XXXXX" +LOCATE 23, 23 +PRINT "XXXXX" +LOCATE 23, 28 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 33 +PRINT "XXXXX" +LOCATE 23, 33 +PRINT "XXXXX" +LOCATE 23, 38 +COLOR 7 +PRINT "\" + +LOCATE 22, 40 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 51 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 24 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 19 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 18 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 14 +PRINT "XXXXX" +LOCATE 22, 23 +PRINT "XXXXX" +LOCATE 23, 23 +PRINT "XXXXX" +LOCATE 23, 28 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 33 +PRINT "XXXXX" +LOCATE 23, 33 +PRINT "XXXXX" +LOCATE 23, 38 +COLOR 7 +PRINT "\" + +LOCATE 22, 41 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 52 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 25 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 20 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 19 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 15 +PRINT "XXXXX" +LOCATE 22, 23 +PRINT "XXXXX" +LOCATE 23, 23 +PRINT "XXXXX" +LOCATE 23, 28 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 33 +PRINT "XXXXX" +LOCATE 23, 33 +PRINT "XXXXX" +LOCATE 23, 38 +COLOR 7 +PRINT "\" + +LOCATE 22, 42 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 53 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 26 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 21 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 20 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 16 +PRINT "XXXXX" +LOCATE 22, 26 +PRINT "XXXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 23, 31 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 36 +PRINT "XXXXX" +LOCATE 23, 36 +PRINT "XXXXX" +LOCATE 23, 41 +COLOR 7 +PRINT "\" + +LOCATE 22, 43 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 54 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 27 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 22 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 21 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 17 +PRINT "XXXXX" +LOCATE 22, 26 +PRINT "XXXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 23, 31 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 36 +PRINT "XXXXX" +LOCATE 23, 36 +PRINT "XXXXX" +LOCATE 23, 41 +COLOR 7 +PRINT "\" + +LOCATE 22, 44 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 55 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 28 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 23 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 22 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 18 +PRINT "XXXXX" +LOCATE 22, 26 +PRINT "XXXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 23, 31 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 36 +PRINT "XXXXX" +LOCATE 23, 36 +PRINT "XXXXX" +LOCATE 23, 41 +COLOR 7 +PRINT "\" + +LOCATE 22, 45 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 56 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 29 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 24 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 23 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 19 +PRINT "XXXXX" +LOCATE 22, 29 +PRINT "XXXXX" +LOCATE 23, 29 +PRINT "XXXXX" +LOCATE 23, 34 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 39 +PRINT "XXXXX" +LOCATE 23, 39 +PRINT "XXXXX" +LOCATE 23, 44 +COLOR 7 +PRINT "\" + +LOCATE 22, 46 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 57 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 30 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 25 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 24 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 20 +PRINT "XXXXX" +LOCATE 22, 29 +PRINT "XXXXX" +LOCATE 23, 29 +PRINT "XXXXX" +LOCATE 23, 34 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 39 +PRINT "XXXXX" +LOCATE 23, 39 +PRINT "XXXXX" +LOCATE 23, 44 +COLOR 7 +PRINT "\" + +LOCATE 22, 47 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 58 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 31 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 26 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 25 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 21 +PRINT "XXXXX" +LOCATE 22, 29 +PRINT "XXXXX" +LOCATE 23, 29 +PRINT "XXXXX" +LOCATE 23, 34 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 39 +PRINT "XXXXX" +LOCATE 23, 39 +PRINT "XXXXX" +LOCATE 23, 44 +COLOR 7 +PRINT "\" + +LOCATE 22, 48 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 59 +COLOR 1 +PRINT "0" + +pause .1 +CLS +LOCATE 20, 32 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 27 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 26 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 22 +PRINT "XXXXX" +LOCATE 22, 32 +PRINT "XXXXX" +LOCATE 23, 32 +PRINT "XXXXX" +LOCATE 23, 37 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 42 +PRINT "XXXXX" +LOCATE 23, 42 +PRINT "XXXXX" +LOCATE 23, 47 +COLOR 7 +PRINT "\" + + +LOCATE 22, 49 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 60 +COLOR 1 +PRINT "0" +pause .1 +CLS +LOCATE 20, 33 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 28 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 27 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 23 +PRINT "XXXXX" +LOCATE 22, 32 +PRINT "XXXXX" +LOCATE 23, 32 +PRINT "XXXXX" +LOCATE 23, 37 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 42 +PRINT "XXXXX" +LOCATE 23, 42 +PRINT "XXXXX" +LOCATE 23, 47 +COLOR 7 +PRINT "\" + +LOCATE 22, 50 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 61 +COLOR 1 +PRINT "0" +pause .1 +CLS +LOCATE 20, 34 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 29 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 28 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 24 +PRINT "XXXXX" +LOCATE 22, 32 +PRINT "XXXXX" +LOCATE 23, 32 +PRINT "XXXXX" +LOCATE 23, 37 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 42 +PRINT "XXXXX" +LOCATE 23, 42 +PRINT "XXXXX" +LOCATE 23, 47 +COLOR 7 +PRINT "\" + +LOCATE 22, 51 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 62 +COLOR 1 +PRINT "0" +pause .1 +CLS +LOCATE 20, 35 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 30 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 29 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 25 +PRINT "XXXXX" +LOCATE 22, 35 +PRINT "XXXXX" +LOCATE 23, 35 +PRINT "XXXXX" +LOCATE 23, 40 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 45 +PRINT "XXXXX" +LOCATE 23, 45 +PRINT "XXXXX" +LOCATE 23, 50 +COLOR 7 +PRINT "\" + +LOCATE 22, 52 +COLOR 2 +PRINT "XXXXXXXXXXX XXXXX" +LOCATE 22, 63 +COLOR 1 +PRINT "0" +pause .1 +CLS +LOCATE 20, 36 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 31 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 30 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 22, 35 +PRINT "XXXXX" +LOCATE 23, 35 +PRINT "XXXXX" +LOCATE 23, 40 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 45 +PRINT "XXXXX" +LOCATE 23, 45 +PRINT "XXXXX" +LOCATE 23, 50 +COLOR 7 +PRINT "\" + +LOCATE 22, 53 +COLOR 2 +PRINT "XXXXXXXXX" +LOCATE 23, 56 +PRINT "XXXXX" +LOCATE 23, 57 +COLOR 1 +PRINT "0" +LOCATE 23, 59 +PRINT "0" +pause .1 +CLS +LOCATE 20, 36 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 31 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 30 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 22, 35 +PRINT "XXXXX" +LOCATE 23, 35 +PRINT "XXXXX" +LOCATE 23, 40 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 45 +PRINT "XXXXX" +LOCATE 23, 45 +PRINT "XXXXX" +LOCATE 23, 50 +COLOR 7 +PRINT "\" + +LOCATE 22, 53 +COLOR 2 +PRINT "XXXXXXXXX" +LOCATE 23, 56 +PRINT "XXXXX" +LOCATE 23, 57 +COLOR 1 +PRINT "0" +PLAY "D" +pause .1 +CLS +LOCATE 20, 36 +COLOR 6 +PRINT "XXXXXXXXXXXXXXXXXXXX" +LOCATE 21, 31 +PRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +LOCATE 22, 30 +COLOR 2 +PRINT "XXXX" +LOCATE 23, 26 +PRINT "XXXXX" +LOCATE 22, 35 +PRINT "XXXXX" +LOCATE 23, 35 +PRINT "XXXXX" +LOCATE 23, 40 +COLOR 7 +PRINT "\" +COLOR 2 +LOCATE 22, 45 +PRINT "XXXXX" +LOCATE 23, 45 +PRINT "XXXXX" +LOCATE 23, 50 +COLOR 7 +PRINT "\" + +LOCATE 22, 53 +COLOR 2 +PRINT "XXXXXXXXX" +LOCATE 23, 56 +PRINT "XXXXX" +LOCATE 23, 57 +COLOR 1 +PRINT "0" +LOCATE 23, 59 +PRINT "0" + +SYSTEM + +SUB pause (timeval) +w = TIMER + timeval +DO +LOOP UNTIL TIMER > w +END SUB diff --git a/asciitur.bas.d b/asciitur.bas.d new file mode 100644 index 0000000..c23f167 --- /dev/null +++ b/asciitur.bas.d @@ -0,0 +1 @@ +ASCII Turtle - awful ASCII art. diff --git a/asciitur.exe b/asciitur.exe new file mode 100644 index 0000000..47ff5f7 Binary files /dev/null and b/asciitur.exe differ diff --git a/asciitur.exe.d b/asciitur.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/asciitur.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/feuru.bas b/feuru.bas new file mode 100644 index 0000000..0fed645 --- /dev/null +++ b/feuru.bas @@ -0,0 +1,1283 @@ +DECLARE SUB m () +DECLARE SUB help () +DECLARE SUB story () +DECLARE SUB playgame () +DECLARE SUB menu () +DECLARE SUB intro () +ON PLAY(1) GOSUB music +CLS +SCREEN 13 +DATA 1,2,3,4,5 +intro +PLAY ON +DO +menu +LOOP + +music: +'more sounds from M$'s sample files +music$ = "MBT180o2P2P8L8GGGL2E-P24P8L8FFFL2D" +PLAY music$ + +SUB help +CLS +SCREEN 12 +PRINT "commands:" +PRINT "go [n or s or w or e or up]" +PRINT "play with [object]" +PRINT "menu" +PRINT "take [object]" +'PRINT "use [object]" +'PRINT "throw [object]" +'PRINT "open [object]" +PRINT "look [object]" +PRINT "buy [object]" +PRINT "talk to man" +PRINT "give man [object]" +PRINT "help" +SLEEP +END SUB + +SUB intro +CLS +FOR i = 16 TO 30 +COLOR i +LOCATE 10, 7 +PRINT "Neil Edelman's (1995) . . . " +t = TIMER + .004: DO: LOOP WHILE TIMER < t +NEXT i +FOR j = 16 TO 30 +i = 46 - j +COLOR i +LOCATE 10, 7 +PRINT "Neil Edelman's (1995) . . . " +t = TIMER + .1: DO: LOOP WHILE TIMER < t +NEXT j +CLS +FOR i = 16 TO 30 +COLOR i +LOCATE 10, 7 +PRINT "'The Secret of Feuru Island'" +t = TIMER + .004: DO: LOOP WHILE TIMER < t +NEXT i +FOR j = 16 TO 30 +i = 46 - j +COLOR i +LOCATE 10, 7 +PRINT "'The Secret of Feuru Island'" +t = TIMER + .1: DO: LOOP WHILE TIMER < t +NEXT j +'(awful speaker beeping) +'music$ = "MBT180o2P2P8L8GGGL2E-P24P8L8FFFL2D" +'PLAY music$ +'FOR i = 30 TO 255 +'COLOR i +'LOCATE 10, 7 +'PRINT "The Secret of Feuru Island" +'t = TIMER + .004: DO: LOOP WHILE TIMER < t +'NEXT i +END SUB + +SUB m +COLOR 15 +LINE (0, 290)-(60, 360), 15, B +LINE (20, 300)-(30, 310), 15, B'building +LINE (30, 300)-(40, 310), 15, B +LINE (20, 310)-(30, 320), 15, B +LINE (10, 320)-(20, 330), 15, B +LINE (20, 320)-(30, 330), 15, B +LINE (30, 320)-(40, 330), 15, B +LINE (10, 330)-(20, 340), 15, B +LINE (20, 330)-(30, 340), 15, B +LINE (30, 330)-(40, 340), 15, B +LINE (10, 340)-(40, 350), 15, B +COLOR 1 +PAINT (45, 335), 1, 15'water +PAINT (20, 345), 8, 15'airport +PAINT (35, 325), 4, 15'beach +PAINT (15, 335), 4, 15'beach +PAINT (25, 325), 4, 15'beach +PAINT (25, 335), 5, 15'hotel +PAINT (35, 335), 9, 15'terminal +PAINT (15, 325), 11, 15'joes scuba shop +PAINT (25, 315), 2, 15'nudest's +PAINT (25, 305), 12, 15'building +PAINT (35, 305), 4, 15'beach +'LINE (0, 280)-(5, 289), 1, BF +'LINE (0, 270)-(5, 279), 8, BF +'LINE (0, 260)-(5, 269), 4, BF +'LINE (0, 250)-(5, 259), 5, BF +'LINE (0, 240)-(5, 249), 9, BF +'LINE (0, 230)-(5, 239), 11, BF +'LINE (0, 220)-(5, 229), 12, BF +LOCATE 18, 1 +COLOR 1 +PRINT "water" +LOCATE 17, 1 +COLOR 8 +PRINT "airport" +LOCATE 16, 1 +COLOR 4 +PRINT "beach" +LOCATE 15, 1 +COLOR 5 +PRINT "hotel" +LOCATE 14, 1 +COLOR 9 +PRINT "air termial" +LOCATE 13, 1 +COLOR 11 +PRINT "boats" +LOCATE 12, 1 +COLOR 2 +PRINT "nude beach" +LOCATE 11, 1 +COLOR 12 +PRINT "a building" +COLOR 15 +END SUB + +SUB menu +CLS +SCREEN 13 +FOR c = 16 TO 30 +COLOR c +FOR t = 1 TO 13 +LINE (0, (c - 16) * 13 + t)-(400, (c - 16) * 13 + t), c +NEXT t +NEXT c +LOCATE 1, 17 +PRINT "M E N U" +PRINT +PRINT +PRINT "1. Begin a new game" +PRINT +PRINT "2. Story" +PRINT +PRINT "3. Keyboard help" +PRINT +PRINT "4. Continue game" +PRINT +PRINT "5. Quit (you wouldn't want to do that!)" +PRINT +INPUT "1 to 5:"; s$ +SELECT CASE VAL(s$) +CASE 1 +PLAY OFF +playgame +CASE 2 +story +CASE 3 +help +menu +CASE 4 +SCREEN 12 +CASE 5 +SYSTEM +CASE ELSE +menu +END SELECT +END SUB + +SUB playgame +so = 1 +dollar = 1 +SCREEN 12 +0 CLS +IF map = 1 THEN GOTO 2 +PRINT "You have just come out of your plane into the air terminal with exits n,w,s" +PRINT "you want to go to the hotel" +PRINT "(type help at any point for a list of possible actions)" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 0 +CASE "" +CLS +GOTO 0 +CASE "Neil Rules!" +GOTO 21 +CASE "" +GOTO 0 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 0 +CASE "look brochure" +map = 1 +GOTO 0 +CASE "go n" +PRINT "You should find out where the hotel is first" +SLEEP +GOTO 0 +CASE "go e" +PRINT "you don't know how to swim, so you decide not to jump into the water" +SLEEP +GOTO 0 +CASE "go w" +PRINT "You should find out where the hotel is first" +SLEEP +GOTO 0 +CASE "go s" +PRINT "that would be pointless, considering that you just got off your plane, you should to go to your hotel" +SLEEP +CLS +GOTO 0 +CASE "menu" +menu +GOTO 0 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 0 +END SELECT + + + + + + +2 CLS +PRINT "You look at the brochure, and see a map. You copy it onto your hand so you can know where you are going" +SLEEP +3 CLS +PRINT "You have just come out of your plane, you are in the air terminal" +PRINT "you want to go to the hotel" +m +PSET (35, 335), 14 +PSET (36, 336), 14 +PSET (36, 335), 14 +PSET (35, 336), 14 +LOCATE 3, 1 +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 3 +CASE "" +CLS +GOTO 3 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 3 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 3 +CASE "go n" +PRINT "You should go to the hotel first" +SLEEP +GOTO 3 +CASE "go e" +PRINT "you don't know how to swim, so you decide not to jump into the water" +SLEEP +GOTO 3 +CASE "go w" +GOTO 4 +CASE "go s" +PRINT "that would be pointless, considering that you just got off your plane you should to go to your hotel" +SLEEP +GOTO 3 +CASE "menu" +menu +GOTO 3 +CASE "" +GOTO 3 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 3 +END SELECT + + + + + +4 CLS +m +PSET (25, 335), 14 +PSET (26, 336), 14 +PSET (26, 335), 14 +PSET (25, 336), 14 +LOCATE 1, 1 +PRINT "You are in the hotel, your room is upstairs, you may go up or e" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 4 +CASE "" +CLS +GOTO 4 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 4 +CASE "go n" +PRINT "You try, but you only bump into a wall" +SLEEP +GOTO 4 +CASE "go e" +PRINT "you are too tired" +SLEEP +GOTO 4 +CASE "go w" +PRINT "You try, but you only bump into a wall" +GOTO 4 +CASE "go s" +PRINT "You try, but you only bump into a wall" +SLEEP +GOTO 4 +CASE "menu" +menu +GOTO 4 +CASE "" +GOTO 4 +CASE "go up" +PRINT "you go up to your room and sleep very well, you wake up the next day" +SLEEP +GOTO 5 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 4 +END SELECT + + + + + + + +5 CLS +m +PSET (25, 335), 14 +PSET (26, 336), 14 +PSET (26, 335), 14 +PSET (25, 336), 14 +LOCATE 1, 1 +PRINT "You are in the hotel, your room is upstairs, you may go up or e" +PRINT "there is a table with jello on it" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 5 +CASE "" +CLS + +GOTO 5 +CASE "take jello" +PRINT "you eat a little, then stuff some into your pocket" +jello = 1 +SLEEP +GOTO 5 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 5 +CASE "go n" +PRINT "You try, but you only bump into a wall" +SLEEP +GOTO 5 +CASE "go e" +IF jello = 1 THEN GOTO 6 +PRINT "you need to get food first" +SLEEP +GOTO 5 +CASE "go w" +PRINT "You try, but you only bump into a wall" +SLEEP +GOTO 5 +CASE "go s" +PRINT "You try, but you only bump into a wall" +SLEEP +GOTO 5 +CASE "menu" +menu +GOTO 5 +CASE "" +GOTO 5 +CASE "go up" +PRINT "you are not tired" +GOTO 5 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 5 +END SELECT + + + + + + +6 CLS +PRINT "you are in the air terminal, exits are s,n,w" +m +PSET (35, 335), 14 +PSET (36, 336), 14 +PSET (36, 335), 14 +PSET (35, 336), 14 +LOCATE 2, 1 +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 6 +CASE "" +CLS +GOTO 6 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 6 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 6 +CASE "go n" +GOTO 7 +CASE "go e" +PRINT "you don't know how to swim, so you decide not to jump into the water" +SLEEP +GOTO 6 +CASE "go w" +PRINT "you don't need to right now" +SLEEP +GOTO 6 +CASE "go s" +PRINT "you don't need to" +SLEEP +GOTO 6 +CASE "menu" +menu +GOTO 6 +CASE "" +GOTO 6 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 6 +END SELECT + + + + + +7 CLS +m +PSET (35, 325), 14 +PSET (36, 326), 14 +PSET (36, 325), 14 +PSET (35, 326), 14 +LOCATE 1, 1 +PRINT "you are on a beach exits are s,w" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 7 +CASE "" +CLS +GOTO 7 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 7 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 7 +CASE "go n" +PRINT "you can't swim!!!" +SLEEP +GOTO 7 +CASE "go e" +PRINT "you don't know how to swim, so you decide not to jump into the water" +SLEEP +GOTO 7 +CASE "go w" +GOTO 8 +CASE "go s" +GOTO 6 +CASE "menu" +menu +GOTO 7 +CASE "" +GOTO 7 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 7 +END SELECT + + + + +8 CLS +m +PSET (25, 325), 14 +PSET (26, 326), 14 +PSET (26, 325), 14 +PSET (25, 326), 14 +LOCATE 1, 1 +PRINT "you are on a beach, a sign to the north says: NUDISTS ONLY, exits are w,n,e" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 8 +CASE "" +CLS +GOTO 8 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 8 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 8 +CASE "go n" +PRINT "no way, read the sign" +SLEEP +GOTO 8 +CASE "go e" +GOTO 7 +CASE "go w" +GOTO 9 +CASE "go s" +PRINT "you can't just walk through walls as you please!" +SLEEP +GOTO 8 +CASE "menu" +menu +GOTO 8 +CASE "" +GOTO 8 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 8 +END SELECT + + + + +9 CLS +m +PSET (15, 325), 14 +PSET (16, 326), 14 +PSET (16, 325), 14 +PSET (15, 326), 14 +LOCATE 1, 1 +PRINT "you are beside a store that says: JOE'S BOAT RENTALS, there is a boat dock to the north, exits are s,e" +PRINT "a man is in the shop" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 9 +CASE "" +CLS +GOTO 9 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 9 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 9 +CASE "give man boat" +IF oldboat <> 1 THEN GOTO 9 +oldboat = 0 +boat = 1 +PRINT "you trade your boat for a new one" +SLEEP +GOTO 9 +CASE "go n" +IF boat = 1 THEN GOTO 11 +PRINT "you can't swim!!!" +SLEEP +GOTO 9 +CASE "go e" +GOTO 8 +CASE "go w" +PRINT "you can't swim!!!" +SLEEP +GOTO 9 +CASE "go s" +GOTO 10 +CASE "menu" +menu +GOTO 9 +CASE "talk to man" +PRINT "Hi" +SLEEP +GOTO 9 +CASE "" +GOTO 9 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 9 +END SELECT + + + + + +10 CLS +m +PSET (15, 335), 14 +PSET (16, 336), 14 +PSET (16, 335), 14 +PSET (15, 336), 14 +LOCATE 1, 1 +IF oldboat <> 1 THEN PRINT "you are on a beach, there is a man with an old boat full of holes sitting on the sand, there is a boat dock, exit is n" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 10 +CASE "" +CLS +GOTO 10 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 10 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 10 +CASE "go n" +GOTO 9 +CASE "go e" +PRINT "you try again and again, but you do not succeed in breaking down the wall" +SLEEP +GOTO 10 +CASE "go w" +IF oldboat = 1 THEN PRINT "the boat has holes in it" +PRINT "you don't know how to swim, so you decide not to jump into the water" +SLEEP +GOTO 10 +CASE "go s" +PRINT "there is a fence" +SLEEP +GOTO 10 +CASE "menu" +menu +GOTO 10 +CASE "" +GOTO 10 +CASE "talk to man" +IF dollar = 0 THEN +PRINT "Leave me alone." +ELSE +oldboat = 1 +dollar = 0 +PRINT "you buy his boat." +END IF +SLEEP +GOTO 10 +CASE "buy boat" +IF oldboat = 1 OR dollar = 0 THEN +PRINT "your current financial situation won't allow it" +ELSE +dollar = 0 +oldboat = 1 +PRINT "you buy his boat with 1$" +END IF +SLEEP +GOTO 10 +CASE "give man dollar" +IF oldboat = 1 OR dollar = 0 THEN +PRINT "your current financial situation won't allow it" +ELSE +dollar = 0 +oldboat = 1 +PRINT "you trade your dollar for his boat" +END IF +SLEEP +GOTO 10 +CASE "give man money" +dollar = 0 +oldboat = 1 +PRINT "you trade your dollar for his boat" +SLEEP +GOTO 10 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 10 +END SELECT + + + + + +11 CLS +m +PSET (15, 315), 14 +PSET (16, 316), 14 +PSET (16, 315), 14 +PSET (15, 316), 14 +LOCATE 1, 1 +PRINT "you are in the water" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 11 +CASE "go n" +GOTO 12 +CASE "go e" +PRINT "you aren't allowed on the nudist beach" +SLEEP +GOTO 11 +CASE "go s" +PRINT "that man in the shop is probably pretty mad at you for that bad trade you did, you don't want to go back" +SLEEP +GOTO 11 +CASE "go up" +PRINT "your boat isn't magic!" +SLEEP +GOTO 11 +CASE "go w" +PRINT "there is a shark warning for that area, you decide to stay away!" +SLEEP +GOTO 11 +CASE "menu" +menu +GOTO 11 +CASE "" +GOTO 11 +CASE ELSE +PRINT "no way!" +SLEEP +GOTO 11 +END SELECT + + + +12 CLS +m +PSET (15, 305), 14 +PSET (16, 306), 14 +PSET (16, 305), 14 +PSET (15, 306), 14 +LOCATE 1, 1 +PRINT "you are in the water" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 12 +CASE "go n" +GOTO 13 +CASE "go e" +PRINT "a building is in the way" +SLEEP +GOTO 12 +CASE "go s" +GOTO 11 +CASE "go up" +PRINT "your boat isn't magic!" +SLEEP +GOTO 12 +CASE "go w" +PRINT "stay close to the shore: for safety" +SLEEP +GOTO 12 +CASE "menu" +menu +GOTO 12 +CASE "" +GOTO 12 +CASE ELSE +PRINT "no way!" +SLEEP +GOTO 12 +END SELECT + + + + + + +13 CLS +m +PSET (15, 295), 14 +PSET (16, 296), 14 +PSET (16, 295), 14 +PSET (15, 296), 14 +LOCATE 1, 1 +PRINT "you are in the water" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 13 +CASE "go n" +PRINT "if you want to go home take an airplane" +SLEEP +GOTO 13 +CASE "go e" +GOTO 14 +CASE "go s" +GOTO 12 +CASE "go up" +PRINT "your boat isn't magic!" +SLEEP +GOTO 13 +CASE "go w" +PRINT "stay close to the shore: for safety" +SLEEP +GOTO 13 +CASE "menu" +menu +GOTO 13 +CASE ELSE +PRINT "no way!" +SLEEP +GOTO 13 +END SELECT + + + + +14 CLS +m +PSET (25, 295), 14 +PSET (26, 296), 14 +PSET (26, 295), 14 +PSET (25, 296), 14 +LOCATE 1, 1 +PRINT "you are in the water" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 14 +CASE "go n" +PRINT "if you want to go home take an airplane" +SLEEP +GOTO 14 +CASE "go e" +GOTO 15 +CASE "go s" +PRINT "a building is in the way" +SLEEP +GOTO 14 +CASE "go up" +PRINT "your boat isn't magic!" +SLEEP +GOTO 14 +CASE "go w" +GOTO 13 +CASE "menu" +menu +GOTO 14 +CASE ELSE +PRINT "no way!" +SLEEP +GOTO 14 +END SELECT + + + + +15 CLS +m +PSET (35, 295), 14 +PSET (36, 296), 14 +PSET (36, 295), 14 +PSET (35, 296), 14 +LOCATE 1, 1 +PRINT "you are in the water" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 15 +CASE "" +GOTO 15 +CASE "go n" +PRINT "if you want to go home take an airplane" +SLEEP +GOTO 15 +CASE "go e" +PRINT "that way is a designated swimming area: no boats allowed" +SLEEP +GOTO 15 +CASE "go s" +GOTO 16 +CASE "go up" +PRINT "your boat isn't magic!" +SLEEP +GOTO 15 +CASE "go w" +GOTO 14 +CASE "menu" +menu +GOTO 15 +CASE ELSE +PRINT "no way!" +SLEEP +GOTO 15 +END SELECT + + + + + +16 CLS +PRINT "you tie your boat to a post" +SLEEP +17 CLS +m +PSET (35, 305), 14 +PSET (36, 306), 14 +PSET (36, 305), 14 +PSET (35, 306), 14 +LOCATE 1, 1 +PRINT "you are on a beach, the building is to the west, there is a boat dock, exits are n, w" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 17 +CASE "" +CLS +GOTO 17 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 17 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 17 +CASE "go n" +CLS +PRINT "you untie your boat and hop in!" +SLEEP +GOTO 15 +CASE "go e" +PRINT "you can't swim" +SLEEP +GOTO 17 +CASE "go w" +GOTO 18 +CASE "go s" +PRINT "you can't swim!!!" +SLEEP +GOTO 17 +CASE "menu" +menu +GOTO 17 +CASE "" +GOTO 17 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 17 +END SELECT + + + + + + + +18 CLS +m +PSET (25, 305), 14 +PSET (26, 306), 14 +PSET (26, 305), 14 +PSET (25, 306), 14 +LOCATE 1, 1 +PRINT "you are beside a door that leads into the building" +IF ggone <> 1 THEN PRINT "there is a guard at the door; he has an intimidating air about him" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 18 +CASE "" +CLS +GOTO 18 +CASE "go up" +PRINT "you can't fly" +SLEEP +GOTO 18 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 18 +CASE "go n" +PRINT "you can't swim!" +SLEEP +GOTO 18 +CASE "play with jello" +IF ggone = 0 THEN +ggone = 1 +PRINT "you see beads of sweat gather on the guard's head," +SLEEP +PRINT "suddenly he breaks out laughing," +SLEEP +PRINT "a man steps out the door and says to the guard:" +PRINT "YOU'RE FIRED" +SLEEP +PRINT "the man goes inside, and the guard walks off, taking your jello with him" +SLEEP +ELSE +PRINT "you don't have it any more" +SLEEP +END IF +GOTO 18 +CASE "go e" +GOTO 17 +CASE "go w" +IF ggone = 1 THEN GOTO 19 +PRINT "even though it seems like the guard is not looking, you know he is" +SLEEP +GOTO 18 +CASE "go s" +PRINT "you can't go on the nudist beach" +SLEEP +GOTO 18 +CASE "menu" +menu +GOTO 18 +CASE "" +GOTO 18 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 18 +END SELECT + + + + + + + + +19 CLS +m +PSET (25, 305), 14 +PSET (26, 306), 14 +PSET (26, 305), 14 +PSET (25, 306), 14 +LOCATE 1, 1 +PRINT "you are inside of the building, a man is sitting at his desk but he does not notice you, there _seems_ to be only one way out, e" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 19 +CASE "give man bomb" +IF bomb <> 1 THEN PRINT "no way!" +IF bomb <> 1 THEN GOTO 19 +GOTO 21 +CASE "" +CLS +GOTO 19 +CASE "go up" +PRINT "a roof is in the way!" +SLEEP +GOTO 19 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 19 +CASE "go n" +PRINT "you hit your head on the wall" +SLEEP +GOTO 19 +CASE "go e" +GOTO 18 +CASE "go w" +PRINT "you try, but the wall won't budge" +SLEEP +GOTO 19 +CASE "go s" +PRINT "you walk into the wall, but instead of hitting your head, the wall opens into a secret room" +SLEEP +GOTO 20 +CASE "menu" +menu +GOTO 19 +CASE "" +GOTO 19 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 19 +END SELECT + + + + + +20 CLS +m +PSET (25, 305), 14 +PSET (26, 306), 14 +PSET (26, 305), 14 +PSET (25, 306), 14 +LOCATE 1, 1 +PRINT "you are in a small, dark room, there is a desk in the middle with a map. There is a strange button on the desk. You see a bomb on the floor" +INPUT do$ +SELECT CASE do$ +CASE "help" +help +GOTO 20 +CASE "" +CLS +GOTO 20 +CASE "go up" +PRINT "a roof is in the way!" +SLEEP +GOTO 20 +CASE "look brochure" +PRINT "you don't need to" +SLEEP +GOTO 20 +CASE "go n" +GOTO 19 +CASE "look bomb" +IF bomb = 1 THEN PRINT "it has been activated" +IF bomb <> 1 THEN PRINT "you do not know what it is doing here; it looks like it is set off by movement" +SLEEP +GOTO 20 +CASE "go e" +PRINT "no secret entrance in this wall" +SLEEP +GOTO 20 +CASE "take bomb" +PRINT "you stuff it into your pocket" +bomb = 1 +SLEEP +GOTO 20 +CASE "go w" +PRINT "you try, but the wall won't budge" +SLEEP +GOTO 20 +CASE "go s" +PRINT "you walk into the wall, BONK!" +SLEEP +GOTO 20 +CASE "menu" +menu +GOTO 20 +CASE "" +GOTO 20 +CASE "look map" +PRINT "this is a map, on which there is a big X and a large circle. the X is marked *where to hit*, the circle *explosion radius* there is a note scrowled on the side thet says: launch nuclear missiles as planed on specified dates," +PRINT "proceed as planned with operation escargot blue" +SLEEP +CLS +PRINT "oh no, you think to yourself, they want to blow up that critical target! I must stop them!" +SLEEP +GOTO 20 +CASE "push button" +PRINT "you don't know what it does!" +SLEEP +GOTO 20 +CASE ELSE +PRINT "no way!" +SLEEP +CLS +GOTO 20 +END SELECT + + + + + + +21 CLS +PRINT "You give the bomb to the man, he says: thank you, what is it?" +SLEEP +PRINT "before you answer, you run out of the building to the airport and get on a plane, just as it's about to lift off" +SLEEP +PRINT "as you are flying you look out the window at the island" +SLEEP +PRINT "a small explosion occors, which triggers several larger ones" +SLEEP +'sounds from M$'s gorillas.bas! +FOR i = 1 TO 4 +PLAY "T160O0L32EFGEFDC" +NEXT i +FOR i = 1 TO 400 +s = INT(RND * 3) +e = INT(RND * 6) +CIRCLE (320, 240), i, 4, s, e, .7 +NEXT i +FOR i = 1 TO 4 +PLAY "T160O0L32EFGEFDC" +NEXT i +FOR i = 1 TO 400 +s = INT(RND * 3) +e = INT(RND * 6) +CIRCLE (300, 210), i, 4, s, e, .7 +NEXT i +FOR i = 1 TO 4 +PLAY "T160O0L32EFGEFDC" +NEXT i +FOR i = 1 TO 400 +s = INT(RND * 3) +e = INT(RND * 6) +CIRCLE (340, 290), i, 4, s, e, .7 +NEXT i +PLAY "t120o1l16b9n0baan0bn0bn0baaan0b9n0baan0bo2l16e-9n0e-d-d-n0e-n0e-n0e-d-d-d-n0e-9n0e-d-d-n0e-o2l16g-9n0g-een0g-n0g-n0g-eeen0g-9n0g-een0g-o2l16b9n0baan0g-n0g-n0g-eeen0o1b9n0baan0b" +PRINT "you have saved eliminated the awful menace! what a feat" +SLEEP +DO +menu +LOOP +END SUB + +SUB story +SCREEN 12 +CLS +PRINT "You flip through your junk-mail, looking for someplace to go on vacation. . ." +SLEEP 3 +PRINT "A brochure catches your eye:" +SLEEP 3 +PRINT "Feuru - a small tropical island, perfect to escape pollution and cold. . . ect." +SLEEP 3 +PRINT "You book reservations to the luxury hotel, and buy a plane ticket. . ." +SLEEP 3 +PRINT "you set off, not knowing what awaits you. . ." +PRINT +PRINT "when you start you will have a brochure and 1 dollar" +PRINT +PRINT "press c to continue" +DO +LOOP WHILE INKEY$ <> "c" +CLS +SCREEN 13 +menu +END SUB + diff --git a/feuru.bas.d b/feuru.bas.d new file mode 100644 index 0000000..a62083b --- /dev/null +++ b/feuru.bas.d @@ -0,0 +1 @@ +Annoying Adventure Game - set on the tropical island of Feuru. diff --git a/index.d b/index.d new file mode 100644 index 0000000..9864894 --- /dev/null +++ b/index.d @@ -0,0 +1,3 @@ +This dusty diskette from ages past comes up and I go to the library and +read it; it's my old QBasic programmes. Remember when muti-player meant +you sit around the same computer and use different controls? diff --git a/index.html b/index.html new file mode 100644 index 0000000..1ae6d34 --- /dev/null +++ b/index.html @@ -0,0 +1,149 @@ + + + + + +http://neil.chaosnet.org/code/qbasic/ + + + + + + + + + + + + + +

[ Mælström ]

+

+This dusty diskette from ages past comes up and I go to the library and +read it; it's my old QBasic programmes. Remember when muti-player meant +you sit around the same computer and use different controls? +

+ +
+ +
+[ Dir ] + +
+Programming. +
+ +
+[ File ] +
3dland.bas (15 KB)
+
+3D Landscape - ADSWEC Controls; a good example of what a 3D engine looks like +without important stuff like clipping and rotation. +
+ +
+[ File ] +
3dland.exe (41 KB)
+
+Compiled. +
+ +
+[ File ] + +
+3D Wireframe Box - ADSWEC Controls; can you figure out the fastest way to cause +an interger overflow? +
+ +
+[ File ] +
3dobject.exe (41 KB)
+
+Compiled. +
+ +
+[ File ] + +
+ASCII Turtle - awful ASCII art. +
+ +
+[ File ] +
asciitur.exe (40 KB)
+
+Compiled. +
+ +
+[ File ] +
feuru.bas (20 KB)
+
+Annoying Adventure Game - set on the tropical island of Feuru. +
+ +
+[ File ] +
noschool.bas (10 KB)
+
+Battleship-Style UFO Game - dish out some DFA. +
+ +
+[ File ] +
noschool.exe (62 KB)
+
+Compiled. +
+ +
+[ File ] +
pop.bas (2 KB)
+
+Balloon Animation - why laser pointers and land mines should be banned from +public parks. +
+ +
+[ File ] +
pop.exe (41 KB)
+
+Compiled. +
+ +
+[ File ] + +
+Wormish Animation - a screen-saver wanna-be. +
+ +
+[ File ] +
scrworms.exe (36 KB)
+
+Compiled. +
+ +
+[ File ] + +
+UFO Attack - senseless, wanton animated destruction. +
+ +
+[ File ] +
ufovisit.exe (44 KB)
+
+Compiled. +
+ +
-- +π
+

From http://neil.chaosnet.org/code/qbasic/.

+ + + diff --git a/noschool.bas b/noschool.bas new file mode 100644 index 0000000..b6d6899 --- /dev/null +++ b/noschool.bas @@ -0,0 +1,481 @@ +DEFINT A-Z +DECLARE SUB pause (timeval!) +DECLARE SUB win () +DECLARE SUB die () +DECLARE SUB f1 () +DECLARE SUB f3 () +DECLARE SUB main () +DECLARE SUB chrage (z) +DECLARE SUB intro () +DECLARE SUB framework () +DECLARE SUB shot () +DECLARE SUB palett () +DECLARE SUB e1 () +DECLARE SUB e2 () +DECLARE SUB e3 () +DECLARE SUB e4 () +DECLARE SUB SCHOOL () +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 +DATA 196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,197,196,180 +DATA 000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179,000,179 + +'inputs + +DIM SHARED crt(1 TO 20, 1 TO 22) AS INTEGER + +CLS +SCREEN 13 +intro +main + +SUB chrage (z) +CLS +SCREEN 12 +WIDTH 80, 60 +IF z = 1 THEN +LOCATE 1, 1 +word$ = "ANALIZING SURFACE . . ." +FOR p = 1 TO LEN(word$) +LOCATE 1, p +PRINT MID$(word$, p, 1) +PLAY "o1t255l20b" +pause .01 +IF INKEY$ <> "" THEN GOTO 9 +NEXT p +LOCATE 3, 1 +word$ = "Welcome to Earth." +FOR p = 1 TO LEN(word$) +PRINT MID$(word$, p, 1); +PLAY "o1t255l20b" +pause .01 +IF INKEY$ <> "" THEN GOTO 9 +NEXT p +LOCATE 5, 1 +word$ = "You are controlling the UFO. Target the school's grid coordinates before nuclear counterstrikes target you! Arbitrary proximity sensors will tell you how close each shot is. Good luck . . . " +FOR p = 1 TO LEN(word$) +PRINT MID$(word$, p, 1); +PLAY "o1t255l20b" +pause .01 +IF INKEY$ <> "" THEN GOTO 9 +NEXT p + +9 +'IF z = 1 THEN +FOR h = 1 TO 20 +FOR i = 1 TO 22 +READ crt(h, i) +NEXT i +NEXT h +END IF + +'output + +FOR n = 1 TO 20 +FOR o = 1 TO 22 +LOCATE 10 + n, 1 + o +PRINT CHR$(crt(n, o)) +'IF z = 1 THEN pause .00005 +NEXT o +NEXT n + +FOR l = 1 TO 10 +LOCATE 9, l * 2 + 2 +PRINT CHR$(64 + l) +NEXT l + +FOR n = 1 TO 10 +LOCATE 10 + n * 2, 1 +PRINT n - 1 +NEXT n + +END SUB + +SUB die +SCREEN 13 +CIRCLE (200, 100), 50, 4, , , .5 +PAINT (200, 100), 4, 4 +CIRCLE (200, 100), 25, 5, , , .7 +PAINT (200, 100), 5, 5 +rocket$ = "c4u1l1d4r4u4l4r4c7r10f2g2l10" +FOR i = 1 TO 200 +PSET (i, 100), 4 +DRAW "X" + VARPTR$(rocket$) +PAINT (i, 100), 4, 4 +pause .01 +NEXT i +FOR t = 1 TO 120 +CIRCLE (200 + t, 100), t / 3 + 50, 4 +NEXT t +FOR i = 1 TO 63 +c = 64 - i +PALETTE 4, c +NEXT i +CLS +SCREEN 12 +COLOR 15 +LOCATE 1, 1 +PRINT "YOU HAVE BEEN HIT!!!" +SLEEP +SYSTEM +END SUB + +SUB e1 +'184,-3,-4,-5,64 + +FOR i = 1 TO 400 +x = INT(RND * 60) + 131 +y = INT(RND * 25) + 176 +PSET (x, y), 65 +NEXT i + +FOR i = 1 TO 20 +a = INT(RND * 220) + 51 +b = INT(RND * 30) + 171 +debris$ = "c184r3d3l2c183d2r1l1u4" +PSET (a, b), 185: DRAW "X" + VARPTR$(debris$) +NEXT i + +FOR i = 1 TO 100 +c = INT(RND * 220) + 51 +d = INT(RND * 30) + 171 +debris$ = "c183r1d1l2c184d1r3" +PSET (c, d), 185: DRAW "X" + VARPTR$(debris$) +NEXT i + +FOR i = 1 TO 500 +e = INT(RND * 220) + 51 +f = INT(RND * 30) + 171 +PSET (e, f), 64 +NEXT i + +END SUB + +SUB e2 + +LINE (57, 2)-(57, 13), 49 +LINE (63, 2)-(63, 13), 49 +LINE (56, 3)-(56, 10), 50 +LINE (64, 3)-(64, 10), 50 +LINE (55, 6)-(55, 7), 51 +LINE (65, 6)-(65, 7), 51 + +DIM pic(55 TO 65, 2 TO 13) AS INTEGER +GET (55, 2)-(65, 13), pic + +LINE (57, 2)-(57, 13), 0 +LINE (63, 2)-(63, 13), 0 +LINE (56, 3)-(56, 10), 0 +LINE (64, 3)-(64, 10), 0 +LINE (55, 6)-(55, 7), 0 +LINE (65, 6)-(65, 7), 0 + +FOR p = 0 TO 170 +PUT (155, p), pic, XOR +PUT (155, p), pic, XOR +NEXT p + +END SUB + +SUB e3 +'185,184,183,182 +FOR r = 0 TO 30 +CIRCLE (250, 200), r + 20, 185 - r / 10, 0, 2 +CIRCLE (220, 200), r + 15, 185 - r / 10, 1, 2 +CIRCLE (170, 190), r + 15, 185 - r / 10, 0, 3 +CIRCLE (140, 185), r + 5, 185 - r / 10, 1, 3 +CIRCLE (100, 185), r + 20, 185 - r / 10, .5, 3 +CIRCLE (60, 200), r + 5, 184 - r / 10, .5, 4 +NEXT r +e1 +END SUB + +SUB e4 + +LINE (150, 0)-(170, 155), 0, BF +'49,50,51,46,45,44 + +'15,64,183,184,185 + +FOR i = 1 TO 63 STEP 10 +a = 64 - i +PALETTE 15, a +PALETTE 64, a +PALETTE 65, a +PALETTE 181, a +PALETTE 182, a +PALETTE 183, a +PALETTE 184, a +PALETTE 185, a +PALETTE 45, a +PALETTE 46, a +pause .005 +NEXT i +PALETTE 15, 0 +PALETTE 64, 0 +PALETTE 65, 0 +PALETTE 181, 0 +PALETTE 182, 0 +PALETTE 183, 0 +PALETTE 184, 0 +PALETTE 185, 0 +PALETTE 45, 0 +PALETTE 46, 0 + +END SUB + +SUB f1 +FOR i = 1 TO 50 +x = INT(RND * 60) + 131 +y = INT(RND * 25) + 176 +PSET (x, y), 65 +NEXT i + +FOR i = 1 TO 50 +e = INT(RND * 80) + 111 +f = INT(RND * 10) + 171 +PSET (e, f), 64 +NEXT i + +END SUB + +SUB f3 +FOR r = 0 TO 100 +CIRCLE (200, 200), r / 3, 185 - r / 34, 0, 2 +CIRCLE (140, 200), r / 3, 185 - r / 34, 1, 3 +CIRCLE (170, 200), r / 3, 185 - r / 34, 0, 3 +NEXT r + +END SUB + +SUB framework +LINE (60, 175)-(260, 200), 0, BF +LINE (160 - 100, 200)-(160 - 20, 180), 184, BF +LINE (160 - 20, 200)-(160 + 20, 175), 183, BF +LINE (160 + 20, 200)-(160 + 100, 180), 184, BF + +FOR i = 1 TO 20 STEP 9 +FOR o = 1 TO 75 STEP 7 +LINE (60 + o, 180 + i)-(65 + o, 185 + i), 65, BF +NEXT o +NEXT i + +FOR i = 1 TO 20 STEP 9 +FOR o = 1 TO 75 STEP 7 +LINE (255 - o, 180 + i)-(260 - o, 185 + i), 65, BF +NEXT o +NEXT i + +END SUB + +SUB intro +CIRCLE (100, 100), 30, 2 +PAINT (100, 100), 1, 2 + +FOR i = 1 TO 80 +CIRCLE (200 - i, 200 - i), 10 - i / 10, 4, , , .5 +PAINT (200 - i, 200 - i), 4, 4 + +CIRCLE (200 - i, 200 - i), 5 - i / 20, 5, , , .5 +PAINT (200 - i, 200 - i), 5, 5 + +pause .001 + +CIRCLE (200 - i, 200 - i), 10 - i / 10, 0, , , .5 + +IF INKEY$ <> "" THEN GOTO 8 +NEXT i + +8 +CLS +END SUB + +SUB main +z = 1 +chrage (z) +z = 0 +chrage (z) + +RANDOMIZE TIMER + +acr = INT(RND * 10) +across$ = CHR$(acr + 97) +down = INT(RND * 10) + +acr = INT(RND * 10) +yacross$ = CHR$(acr + 97) +ydown = INT(RND * 10) + +DO +LOCATE 5, 5 +PRINT "Enter Letter" +DO +l$ = INKEY$ +IF LEN(l$) <> 1 THEN l$ = " " +IF l$ = CHR$(27) OR l$ = CHR$(13) OR l$ = "q" THEN SYSTEM +l$ = LCASE$(l$) +LOOP UNTIL ASC(l$) >= 97 AND ASC(l$) <= 106 +LOCATE 7, 5 +PRINT "Enter Number" +DO +n$ = INKEY$ +IF LEN(n$) <> 1 THEN n$ = " " +IF n$ = CHR$(27) OR n$ = CHR$(13) OR n$ = "q" THEN SYSTEM +LOOP UNTIL ASC(n$) >= 48 AND ASC(n$) <= 57 + +dist = INT(SQR(ABS(ASC(l$) - ASC(across$)) ^ 2 + ABS(VAL(n$) - down) ^ 2)) + 48 +IF dist >= 58 THEN dist = 45 +crt((VAL(n$) + 1) * 2, 2 * (ASC(l$) - 96) + 1) = dist + +IF l$ = across$ AND VAL(n$) = down THEN SCREEN 13: SCHOOL: SLEEP 1: shot: framework: e1: e2: e3: e4: win: SYSTEM ELSE SCREEN 13: SLEEP 1: shot: f1: e2: f3: e4: SCREEN 12: chrage (z) + +'LOCATE 1, 1: PRINT across$: PRINT down + +LOCATE 45, 5 +COLOR 12 +PRINT "Automatic anti-UFO weapons systems are now firing at you! Please wait." +pause .5 +LOCATE 45, 5 +PRINT " " +pause .1 +LOCATE 45, 5 +COLOR 12 +PRINT "Automatic anti-UFO weapons systems are now firing at you! Please wait." +pause .5 +LOCATE 45, 5 +PRINT " " + +k = INT(RND * 10): l$ = CHR$(k + 97) +n = INT(RND * 10) +IF l$ = yacross$ AND n = ydown THEN die + +k = INT(RND * 10): l$ = CHR$(k + 97) +n = INT(RND * 10) +IF l$ = yacross$ AND n = ydown THEN die + +k = INT(RND * 10): l$ = CHR$(k + 97) +n = INT(RND * 10) +IF l$ = yacross$ AND n = ydown THEN die + +k = INT(RND * 10): l$ = CHR$(k + 97) +n = INT(RND * 10) +IF l$ = yacross$ AND n = ydown THEN die + +LOOP +END SUB + +DEFSNG A-Z +SUB pause (timeval) +w = TIMER + timeval +DO +LOOP UNTIL TIMER > w +END SUB + +DEFINT A-Z +SUB SCHOOL +LINE (160 - 100, 200)-(160 - 20, 180), 184, BF +LINE (160 - 20, 200)-(160 + 20, 175), 183, BF +LINE (160 + 20, 200)-(160 + 100, 180), 184, BF + +FOR i = 1 TO 20 STEP 9 +FOR o = 1 TO 75 STEP 7 +LINE (60 + o, 180 + i)-(65 + o, 185 + i), 0, BF +NEXT o +NEXT i + +FOR i = 1 TO 20 STEP 9 +FOR o = 1 TO 75 STEP 7 +LINE (255 - o, 180 + i)-(260 - o, 185 + i), 0, BF +NEXT o +NEXT i + +PSET (151, 177), 15 +PSET (152, 176), 15 +PSET (152, 178), 15 +PSET (151, 179), 15 + +PSET (155, 177), 15 +PSET (154, 178), 15 +PSET (155, 179), 15 + +PSET (157, 176), 15 +PSET (157, 177), 15 +PSET (157, 178), 15 +PSET (157, 179), 15 + +PSET (158, 178), 15 +PSET (159, 178), 15 +PSET (159, 179), 15 + +PSET (161, 177), 15 +PSET (161, 178), 15 +PSET (161, 179), 15 +PSET (163, 177), 15 +PSET (163, 178), 15 +PSET (163, 179), 15 +PSET (162, 177), 15 +PSET (162, 179), 15 + +PSET (165, 177), 15 +PSET (165, 178), 15 +PSET (165, 179), 15 +PSET (167, 177), 15 +PSET (167, 178), 15 +PSET (167, 179), 15 +PSET (166, 177), 15 +PSET (166, 179), 15 + +PSET (169, 176), 15 +PSET (169, 177), 15 +PSET (169, 178), 15 +PSET (169, 178), 15 +PSET (169, 179), 15 + +COLOR 7 +man$ = "e3f3h3u3r2l4r2e2h2g2f2" +PSET (300, 200) +DRAW "X" + VARPTR$(man$) +PSET (310, 200) +DRAW "x" + VARPTR$(man$) +END SUB + +SUB shot +'40-43 +'49,50,51,46,45,44 +LINE (158, 0)-(158, 200), 46 +LINE (159, 0)-(159, 200), 45 +LINE (160, 0)-(160, 200), 44 +LINE (161, 0)-(161, 200), 45 +LINE (162, 0)-(162, 200), 46 +END SUB + +SUB win +LOCATE 20, 21 +COLOR 7 +LINE (300, 187)-(270, 160) +PRINT "Way cool man!" +SLEEP +CLS +COLOR 14 +LOCATE 1, 1 +SCREEN 12 +PRINT "THE SCHOOL HAS BEEN ELIMINATED - GOOD WORK, RETURN TO BASE!" +SLEEP +END SUB + diff --git a/noschool.bas.d b/noschool.bas.d new file mode 100644 index 0000000..6aadf35 --- /dev/null +++ b/noschool.bas.d @@ -0,0 +1 @@ +Battleship-Style UFO Game - dish out some DFA. diff --git a/noschool.exe b/noschool.exe new file mode 100644 index 0000000..3c24c27 Binary files /dev/null and b/noschool.exe differ diff --git a/noschool.exe.d b/noschool.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/noschool.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/pop.bas b/pop.bas new file mode 100644 index 0000000..b4dd03b --- /dev/null +++ b/pop.bas @@ -0,0 +1,100 @@ +DECLARE SUB pause (time!) +DECLARE SUB fire () +DECLARE SUB laser () +DECLARE SUB pop () +DECLARE SUB icbm () +DECLARE SUB trees () +DECLARE SUB baloons () +CLS +SCREEN 12 +trees +baloons +laser +pop +fire +SYSTEM + +SUB baloons +FOR q = 1 TO 100 +CIRCLE (q, 100), 10, 4, , , 2 +LINE (0 + q, 110)-(-100 + q * 2, 150 + q / 10), 7 +pause .05 +CIRCLE (q, 100), 10, 0, , , 2 +LINE (q, 110)-(-100 + q * 2, 150 + q / 10), 0 +NEXT q +CIRCLE (0 + q, 100), 10, 4, , , 2 +LINE (q, 110)-(-100 + q * 2, 150 + q / 10), 7 +END SUB + +SUB fire +FOR noo = 1 TO 3 +PLAY "T160O0L32EFGEFDC" +FOR n = 1 TO 6 +FOR q = 1 TO 60 'hight of flame +a = SIN(n + q / 10) * 10 +FOR b = 1 TO q / 6 'width of flame +PSET (100 + (noo * 20) + a + b, 480 - 60 + q), 4 +NEXT b +NEXT q +pause .001 +FOR q = 1 TO 60 'hight of flame +a = SIN(n + q / 10) * 10 +FOR b = 1 TO q / 6 'width of flame +PSET (100 + (noo * 20) + a + b, 480 - 60 + q), 0 +NEXT b +NEXT q +NEXT n +NEXT noo +FOR i = 1 TO 3 +PLAY "T160O0L32EFGEFDC" +NEXT i +FOR f = 1 TO 650 +CIRCLE (190, 480), f, 4 +pause .000001 +NEXT f +END SUB + +SUB laser +FOR b = 1 TO 15 +LINE (640, 300)-(100, 100), b +pause .005 +NEXT b +LINE (640, 300)-(100, 100), 0 +END SUB + +SUB pause (time) +t = TIMER + time +DO: LOOP WHILE TIMER < t +END SUB + +SUB pop +FOR i = 1 TO 3 +PLAY "T160O0L32EFGEFDC" +NEXT i +FOR r = 1 TO 20 +CIRCLE (100, 100), r, 4 +pause .0001 +NEXT r +FOR r = 1 TO 380 +CIRCLE (100, 100 + r), 20 + r / 10, 4 +PAINT (100, 100 + r), 4, 4 +pause .00001 +PAINT (100, 100 + r), 0, 0 +NEXT r +CIRCLE (100, 100 + r - 1), 20 + r / 10, 0 +FOR i = 1 TO 3 +PLAY "T160O0L32EFGEFDC" +NEXT i +END SUB + +SUB trees +DRAW "bm0,430" +FOR t = 0 TO 11 +tree$ = "c2g10r5g10r5g10r5g10r50h10r5h10r5h10r5h10bd40r2d1c6d4l4u5c2r2bu40" +DRAW "br50X" + VARPTR$(tree$) +NEXT t +CIRCLE (190, 480), 10, 5, , , .5 +PAINT (190, 478), 5, 5 +pause .5 +END SUB + diff --git a/pop.bas.d b/pop.bas.d new file mode 100644 index 0000000..a346eda --- /dev/null +++ b/pop.bas.d @@ -0,0 +1,2 @@ +Balloon Animation - why laser pointers and land mines should be banned from +public parks. diff --git a/pop.exe b/pop.exe new file mode 100644 index 0000000..2edae5a Binary files /dev/null and b/pop.exe differ diff --git a/pop.exe.d b/pop.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/pop.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/scrworms.bas b/scrworms.bas new file mode 100644 index 0000000..472151e --- /dev/null +++ b/scrworms.bas @@ -0,0 +1,60 @@ +DECLARE FUNCTION around! (spot!) +CLS +SCREEN 12 +RANDOMIZE TIMER +TYPE coor +x AS INTEGER +y AS INTEGER +END TYPE +DIM newspot(6) AS coor +FOR c = 1 TO 15 +PALETTE c, c * 3 +NEXT c +newspot(1).x = 200 +newspot(1).y = 200 +newspot(2).x = 200 +newspot(2).y = 200 +newspot(3).x = 200 +newspot(3).y = 200 +newspot(4).x = 200 +newspot(4).y = 200 +newspot(5).x = 200 +newspot(5).y = 200 + +DO +i = i + 1 +IF INKEY$ <> "" THEN SYSTEM +CIRCLE (newspot(1).x, newspot(1).y), 1, i MOD 15 +CIRCLE (newspot(2).x, newspot(2).y), 1, i MOD 15 +CIRCLE (newspot(3).x, newspot(3).y), 1, i MOD 15 +CIRCLE (newspot(4).x, newspot(4).y), 1, i MOD 15 +CIRCLE (newspot(5).x, newspot(5).y), 1, i MOD 15 +oldspot = newspot(1).x +newspot(1).x = newspot(1).x + around(oldspot) +oldspot = newspot(1).y +newspot(1).y = newspot(1).y + around(oldspot) +oldspot = newspot(2).x +newspot(2).x = newspot(2).x + around(oldspot) +oldspot = newspot(2).y +newspot(2).y = newspot(2).y + around(oldspot) +oldspot = newspot(3).x +newspot(3).x = newspot(3).x + around(oldspot) +oldspot = newspot(3).y +newspot(3).y = newspot(3).y + around(oldspot) +oldspot = newspot(4).x +newspot(4).x = newspot(4).x + around(oldspot) +oldspot = newspot(4).y +newspot(4).y = newspot(4).y + around(oldspot) +oldspot = newspot(5).x +newspot(5).x = newspot(5).x + around(oldspot) +oldspot = newspot(5).y +newspot(5).y = newspot(5).y + around(oldspot) +LOOP + +FUNCTION around (spot) +a = INT(RND * 3) - 1 +IF spot < 100 THEN a = 200 +IF spot > 300 THEN a = -200 +around = a +END FUNCTION + diff --git a/scrworms.bas.d b/scrworms.bas.d new file mode 100644 index 0000000..287e52b --- /dev/null +++ b/scrworms.bas.d @@ -0,0 +1 @@ +Wormish Animation - a screen-saver wanna-be. diff --git a/scrworms.exe b/scrworms.exe new file mode 100644 index 0000000..41e8274 Binary files /dev/null and b/scrworms.exe differ diff --git a/scrworms.exe.d b/scrworms.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/scrworms.exe.d @@ -0,0 +1 @@ +Compiled. diff --git a/ufovisit.bas b/ufovisit.bas new file mode 100644 index 0000000..30a980b --- /dev/null +++ b/ufovisit.bas @@ -0,0 +1,377 @@ +DECLARE SUB pause (time!) +DECLARE SUB lafin () +DECLARE SUB opening () +DECLARE SUB stars () +DECLARE SUB resetstars () +DECLARE SUB photon () +DECLARE SUB dematerialize () +DECLARE SUB city () +DECLARE SUB fire () +DECLARE SUB materialize () +SCREEN 9 +CLS +stars +city +materialize +fire +photon +resetstars +dematerialize +SYSTEM + +SUB city +FOR q = 1 TO 15 +PSET (30, 350 - q * 3) +PSET (34, 350 - q * 3) +PSET (38, 350 - q * 3) +PSET (42, 350 - q * 3) +PSET (46, 350 - q * 3) +PSET (50, 350 - q * 3) +NEXT q +FOR q = 1 TO 9 +PSET (57, 350 - q * 5) +PSET (65, 350 - q * 5) +PSET (73, 350 - q * 5) + +NEXT q +FOR q = 1 TO 18 +PSET (80, 350 - q * 3) +PSET (84, 350 - q * 3) +PSET (88, 350 - q * 3) +PSET (92, 350 - q * 3) +PSET (96, 350 - q * 3) +PSET (100, 350 - q * 3) +PSET (104, 350 - q * 3) +NEXT q +PSET (84, 293) +FOR q = 1 TO 2 +PSET (88, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 3 +PSET (92, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 4 +PSET (96, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 5 +PSET (100, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 6 +PSET (104, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 15 +PSET (109, 355 - q * 5 - 3) +PSET (117, 355 - q * 5 - 3) +PSET (125, 355 - q * 5 - 3) +NEXT q + +FOR q = 1 TO 35 +PSET (150, 350 - q * 3) +PSET (151, 350 - q * 3) +PSET (153, 350 - q * 3) +PSET (156, 350 - q * 3) +PSET (160, 350 - q * 3) +NEXT q +FOR q = 145 TO 165 +PSET (q, 243) +NEXT q +FOR q = 135 TO 175 +PSET (q, 240) +NEXT q +FOR q = 143 TO 167 +PSET (q, 237) +NEXT q +FOR q = 1 TO 10 +PSET (155, 235 - q) +NEXT q + +FOR q = 1 TO 30 +PSET (230, 350 - q * 3) +PSET (234, 350 - q * 3) +PSET (238, 350 - q * 3) +PSET (242, 350 - q * 3) +PSET (246, 350 - q * 3) +PSET (250, 350 - q * 3) +NEXT q +FOR q = 1 TO 18 +PSET (257, 350 - q * 5) +PSET (265, 350 - q * 5) +PSET (273, 350 - q * 5) +NEXT q + +FOR q = 1 TO 15 +PSET (330, 350 - q * 3) +PSET (334, 350 - q * 3) +PSET (338, 350 - q * 3) +PSET (342, 350 - q * 3) +PSET (346, 350 - q * 3) +PSET (350, 350 - q * 3) +NEXT q +FOR q = 1 TO 9 +PSET (357, 350 - q * 5) +PSET (365, 350 - q * 5) +PSET (373, 350 - q * 5) +NEXT q + +FOR q = 1 TO 18 +PSET (390, 350 - q * 3) +PSET (394, 350 - q * 3) +PSET (398, 350 - q * 3) +PSET (402, 350 - q * 3) +PSET (406, 350 - q * 3) +PSET (410, 350 - q * 3) +PSET (414, 350 - q * 3) +NEXT q +FOR q = 1 TO 11 +PSET (419, 355 - q * 5 - 3) +PSET (427, 355 - q * 5 - 3) +PSET (435, 355 - q * 5 - 3) +NEXT q + +FOR q = 1 TO 18 +PSET (480, 350 - q * 3) +PSET (484, 350 - q * 3) +PSET (488, 350 - q * 3) +PSET (492, 350 - q * 3) +PSET (496, 350 - q * 3) +PSET (500, 350 - q * 3) +PSET (504, 350 - q * 3) +NEXT q +PSET (484, 293) +FOR q = 1 TO 2 +PSET (488, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 3 +PSET (492, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 4 +PSET (496, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 5 +PSET (500, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 6 +PSET (504, 293 + 3 - q * 3) +NEXT q +FOR q = 1 TO 15 +PSET (509, 355 - q * 5 - 3) +PSET (517, 355 - q * 5 - 3) +PSET (525, 355 - q * 5 - 3) +NEXT q + +FOR q = 1 TO 30 +PSET (550, 350 - q * 3) +PSET (554, 350 - q * 3) +PSET (558, 350 - q * 3) +PSET (562, 350 - q * 3) +PSET (566, 350 - q * 3) +PSET (570, 350 - q * 3) +NEXT q +FOR q = 1 TO 18 +PSET (577, 350 - q * 5) +PSET (585, 350 - q * 5) +PSET (593, 350 - q * 5) +NEXT q + +END SUB + +SUB dematerialize +SLEEP 1 +FOR z = 1 TO 50 +COLOR 0 +a% = INT(RND * 30) + 1 +PSET (300 + a%, 30) +b% = INT(RND * 28) + 1 +PSET (301 + b%, 31) +c% = INT(RND * 28) + 1 +COLOR 0 +PSET (301 + c%, 29) +pause .005 +NEXT z +COLOR 0 +LINE (300, 30)-(330, 30) +LINE (301, 31)-(329, 31) +COLOR 0 +LINE (301, 29)-(329, 29) + +END SUB + +SUB fire +FOR a = 1 TO 31 +COLOR 4 +PSET (299 + a, 30) +pause .005 +NEXT a + +FOR i = 2 TO 15 +COLOR i +LINE (316, 32)-(40, 350) +pause .002 +NEXT i + +COLOR 4 +FOR s = 1 TO 100 +CIRCLE (40, 350), s +pause .00001 +NEXT s + +COLOR 0 +LINE (316, 32)-(40, 350) + +FOR a = 1 TO 100 +CIRCLE (40, 350), a +pause .00001 +NEXT a + +COLOR 15 +LINE (300, 30)-(330, 30) + +FOR a = 1 TO 31 +COLOR 4 +PSET (299 + a, 30) +pause .005 +NEXT a + +FOR i = 2 TO 15 +COLOR i +LINE (316, 32)-(150, 250) +pause .002 +NEXT i + +COLOR 4 +FOR s = 1 TO 100 +CIRCLE (150, 250), s +pause .00001 +NEXT s + +COLOR 0 +LINE (316, 32)-(150, 250) + +FOR a = 1 TO 100 +CIRCLE (150, 250), a +pause .00001 +NEXT a + +COLOR 15 +LINE (300, 30)-(330, 30) + +FOR a = 1 TO 31 +COLOR 4 +PSET (299 + a, 30) +pause .005 +NEXT a + +FOR i = 2 TO 15 +COLOR i +LINE (316, 32)-(410, 350) +pause .002 +NEXT i + +COLOR 4 +FOR s = 1 TO 100 +CIRCLE (410, 350), s +pause .00001 +NEXT s + +COLOR 0 +LINE (316, 32)-(410, 350) + +FOR a = 1 TO 100 +CIRCLE (410, 350), a +pause .00001 +NEXT a + +COLOR 15 +LINE (300, 30)-(330, 30) + +FOR a = 1 TO 31 +COLOR 4 +PSET (299 + a, 30) +pause .005 +NEXT a + +FOR i = 2 TO 15 +COLOR i +LINE (316, 32)-(570, 300) +pause .002 +NEXT i + +COLOR 4 +FOR s = 1 TO 100 +CIRCLE (570, 300), s +pause .00001 +NEXT s + +COLOR 0 +LINE (316, 32)-(570, 300) + +FOR a = 1 TO 100 +CIRCLE (570, 300), a +pause .00001 +NEXT a + +COLOR 15 +LINE (300, 30)-(330, 30) + +END SUB + +SUB materialize +SLEEP 1 +FOR z = 1 TO 50 +COLOR 15 +a% = INT(RND * 30) + 1 +PSET (300 + a%, 30) +b% = INT(RND * 28) + 1 +PSET (301 + b%, 31) +c% = INT(RND * 28) + 1 +COLOR 3 +PSET (301 + c%, 29) +pause .005 +NEXT z +COLOR 15 +LINE (300, 30)-(330, 30) +LINE (301, 31)-(329, 31) +COLOR 3 +LINE (301, 29)-(329, 29) + +END SUB + +SUB pause (time) +t = TIMER + time +DO: LOOP WHILE TIMER < t +END SUB + +SUB photon +FOR o = 1 TO 350 +COLOR 14 +CIRCLE (315, 33 + o), 2 +pause .00004 +COLOR 0 +CIRCLE (315, 33 + o), 2 +NEXT o +COLOR 4 +FOR i = 1 TO 400 +CIRCLE (315, 400), i +pause .00001 +NEXT i +COLOR 0 +FOR i = 1 TO 400 +CIRCLE (315, 400), i +pause .00001 +NEXT i +END SUB + +SUB resetstars +COLOR 15 +FOR s = 1 TO 50 +PSET (INT(RND * 640), (INT(RND * 230) + 120)) +NEXT s +END SUB + +SUB stars +COLOR 15 +FOR s = 1 TO 200 +PSET (INT(RND * 640), (INT(RND * 350))) +NEXT s +END SUB + diff --git a/ufovisit.bas.d b/ufovisit.bas.d new file mode 100644 index 0000000..9c47b0d --- /dev/null +++ b/ufovisit.bas.d @@ -0,0 +1 @@ +UFO Attack - senseless, wanton animated destruction. diff --git a/ufovisit.exe b/ufovisit.exe new file mode 100644 index 0000000..43ae470 Binary files /dev/null and b/ufovisit.exe differ diff --git a/ufovisit.exe.d b/ufovisit.exe.d new file mode 100644 index 0000000..eaf8ee8 --- /dev/null +++ b/ufovisit.exe.d @@ -0,0 +1 @@ +Compiled.