Under version-control.

This commit is contained in:
Neil 2021-06-12 20:36:23 -07:00
commit b20967daec
32 changed files with 3734 additions and 0 deletions

314
3dland.bas Normal file
View File

@ -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

2
3dland.bas.d Normal file
View File

@ -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.

BIN
3dland.exe Normal file

Binary file not shown.

1
3dland.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

266
3dobject.bas Normal file
View File

@ -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

2
3dobject.bas.d Normal file
View File

@ -0,0 +1,2 @@
3D Wireframe Box - ADSWEC Controls; can you figure out the fastest way to cause
an interger overflow?

BIN
3dobject.exe Normal file

Binary file not shown.

1
3dobject.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

683
asciitur.bas Normal file
View File

@ -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

1
asciitur.bas.d Normal file
View File

@ -0,0 +1 @@
ASCII Turtle - awful ASCII art.

BIN
asciitur.exe Normal file

Binary file not shown.

1
asciitur.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

1283
feuru.bas Normal file

File diff suppressed because it is too large Load Diff

1
feuru.bas.d Normal file
View File

@ -0,0 +1 @@
Annoying Adventure Game - set on the tropical island of Feuru.

3
index.d Normal file
View File

@ -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?

149
index.html Normal file
View File

@ -0,0 +1,149 @@
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>http://neil.chaosnet.org/code/qbasic/</title>
<meta name = "Content-type" http-equiv = "Content-Type" content = "text/html; charset=us-ascii">
<meta name = "Keywords" content = "code, qbasic, neil">
<meta name = "Description" content = "Do'n't go here. Ultra-secret archive."> <!-- bad form, print index.d -->
<meta name = "Author" content = "Neil">
<meta name = "Generator" content = "This pristine code lies unmarred by infantile editors!">
<link rel = "top" href = "http://neil.chaosnet.org/">
<link rel = "icon" href = "/favicon.ico" type = "image/x-icon">
<link rel = "shortcut icon" href = "/favicon.ico" type = "image/x-icon">
<link rel = "stylesheet" type = "text/css" href = "/neil.css">
<link rel = "alternate" type = "application/rss+xml" title = "News from Afar" href = "/newsfeed.rss">
</head>
<body>
<p class = "noprint"><img src = "/neil.jpeg" width = 528 height = 56 alt = "[ M&aelig;lstr&ouml;m ]"></p>
<p>
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?
</p>
<div class = "clear"></div>
<div class = "file"><div class = "file-leftfixed">
<a href = ".."><img src = "../../dir.jpeg" alt = "[ Dir ]"></a>
<div class = "icontext"><div><a href = "..">..</a></div></div>
</div><div class = "file-rightfixed">
Programming.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "3dland.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "3dland.bas">3dland.bas</a> (15 KB)</div></div>
</div><div class = "file-rightfixed">
3D Landscape - ADSWEC Controls; a good example of what a 3D engine looks like
without important stuff like clipping and rotation.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "3dland.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "3dland.exe">3dland.exe</a> (41 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "3dobject.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "3dobject.bas">3dobject.bas</a> (9 KB)</div></div>
</div><div class = "file-rightfixed">
3D Wireframe Box - ADSWEC Controls; can you figure out the fastest way to cause
an interger overflow?
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "3dobject.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "3dobject.exe">3dobject.exe</a> (41 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "asciitur.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "asciitur.bas">asciitur.bas</a> (9 KB)</div></div>
</div><div class = "file-rightfixed">
ASCII Turtle - awful ASCII art.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "asciitur.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "asciitur.exe">asciitur.exe</a> (40 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "feuru.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "feuru.bas">feuru.bas</a> (20 KB)</div></div>
</div><div class = "file-rightfixed">
Annoying Adventure Game - set on the tropical island of Feuru.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "noschool.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "noschool.bas">noschool.bas</a> (10 KB)</div></div>
</div><div class = "file-rightfixed">
Battleship-Style UFO Game - dish out some DFA.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "noschool.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "noschool.exe">noschool.exe</a> (62 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "pop.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "pop.bas">pop.bas</a> (2 KB)</div></div>
</div><div class = "file-rightfixed">
Balloon Animation - why laser pointers and land mines should be banned from
public parks.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "pop.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "pop.exe">pop.exe</a> (41 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "scrworms.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "scrworms.bas">scrworms.bas</a> (1 KB)</div></div>
</div><div class = "file-rightfixed">
Wormish Animation - a screen-saver wanna-be.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "scrworms.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "scrworms.exe">scrworms.exe</a> (36 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "ufovisit.bas"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "ufovisit.bas">ufovisit.bas</a> (6 KB)</div></div>
</div><div class = "file-rightfixed">
UFO Attack - senseless, wanton animated destruction.
</div></div>
<div class = "file"><div class = "file-leftfixed">
<a href = "ufovisit.exe"><img src = "../../file.jpeg" alt = "[ File ]"></a>
<div class = "icontext"><div><a href = "ufovisit.exe">ufovisit.exe</a> (44 KB)</div></div>
</div><div class = "file-rightfixed">
Compiled.
</div></div>
<div><img src = "/hline.gif" width = 528 height = 2 alt = "--">
<img src = "/pi.gif" width = 16 height = 16 alt = "&pi;" class = "right"></div>
<p class = "noscreen">From <a href = "http://neil.chaosnet.org/code/qbasic/">http://neil.chaosnet.org/code/qbasic/</a>.</p>
</body>
</html>

481
noschool.bas Normal file
View File

@ -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

1
noschool.bas.d Normal file
View File

@ -0,0 +1 @@
Battleship-Style UFO Game - dish out some DFA.

BIN
noschool.exe Normal file

Binary file not shown.

1
noschool.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

100
pop.bas Normal file
View File

@ -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

2
pop.bas.d Normal file
View File

@ -0,0 +1,2 @@
Balloon Animation - why laser pointers and land mines should be banned from
public parks.

BIN
pop.exe Normal file

Binary file not shown.

1
pop.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

60
scrworms.bas Normal file
View File

@ -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

1
scrworms.bas.d Normal file
View File

@ -0,0 +1 @@
Wormish Animation - a screen-saver wanna-be.

BIN
scrworms.exe Normal file

Binary file not shown.

1
scrworms.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.

377
ufovisit.bas Normal file
View File

@ -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

1
ufovisit.bas.d Normal file
View File

@ -0,0 +1 @@
UFO Attack - senseless, wanton animated destruction.

BIN
ufovisit.exe Normal file

Binary file not shown.

1
ufovisit.exe.d Normal file
View File

@ -0,0 +1 @@
Compiled.