home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION FrameFix$ (frm AS SINGLE)
- DECLARE SUB ShowGrid ()
- '----------------------------------------------------------------------------
- ' 09/17/91 CamPATH v1.0 John Hammerton
- '----------------------------------------------------------------------------
- ' Here's the QuickBASIC 4.5 for CamPATH1.EXE. One warning: I write some
- ' very sloppy BASIC code; I've made no attempt at order or optimization.
- ' If you want to experiment with other Polar shapes, the variables are
- ' a, b and c and the equation I used begins at line 2500. This is a very
- ' simple & general equation and can be altered almost endlessly. For
- ' continuous animations, however, we must make paths that return to their
- ' origin. For instance, spirals with the equation r^p = m*theta^n make very
- ' interesting animations, spining through countless revolutions and zooming
- ' in on your object as it goes, but they're not continuous. The animation
- ' plays great until it's over - then it jerks to a restart.
- ' This program is extremely basic and is just a taste of what you can
- ' do with paths. You could also use the XPOS and ZPOS in an object's
- ' TRANSLATE command instead - to send IT flying in strange new orbits!
- ' Having several objects orbit seperately AS the camera follows a CamPATH
- ' paths is very simple to code also (just add in the inputs and increment
- ' those variables inside the main loop) but that's just too much junk for
- ' a "basic" user to worry about at first...maybe next time.
- ' If you come up with a path equation that does something new
- ' (and worthwhile) LET ME KNOW - and we'll get it into the next version.
- '
- '----------------------------------------------------------------------------
-
- 10 SCREEN 12 ' 640x480x16 VGA mode
- WINDOW (-320, 240)-(320, -240) ' Center screen about (0,0) using
- pi = 3.14159 ' rectangular coord. standards
-
- 20 ShowGrid
- LOCATE 19, 1: COLOR 15: PRINT " PATH TYPE:";
- LOCATE 19, 14: COLOR 11: PRINT "1) Circle";
- LOCATE 20, 14: COLOR 14: PRINT "2) Ellipse";
- LOCATE 21, 14: COLOR 10: PRINT "3) Lemniscate (Rose)";
- LOCATE 22, 14: COLOR 9: PRINT "4) Limacon (Loop)";
- LOCATE 23, 14: COLOR 12: PRINT "5) About CamPATH";
- DO: t$ = INKEY$
- IF t$ = "1" OR t$ = "C" OR t$ = "c" THEN col = 11: GOTO 100
- IF t$ = "2" OR t$ = "E" OR t$ = "e" THEN col = 14: GOTO 200
- IF t$ = "3" OR t$ = "R" OR t$ = "r" THEN col = 10: GOTO 300
- IF t$ = "4" OR t$ = "L" OR t$ = "l" THEN col = 9: GOTO 400
- IF t$ = "5" OR t$ = "H" OR t$ = "h" OR t$ = "A" OR t$ = "a" THEN 7000
- IF t$ = CHR$(27) OR t$ = "Q" OR t$ = "q" OR t$ = "X" OR t$ = "x" THEN 9000
- LOOP
-
- 100 ' ----- Get data for CIRCLE -----
- ShowGrid
- LOCATE 19, 2
- COLOR col: PRINT "CIRCLE:"
- COLOR 15: PRINT " Radius of circle";
- COLOR col: INPUT " [Enter] = 200 "; r(1)
- IF r(1) = 0 THEN r(1) = 200
- r(2) = r(1)
- COLOR 15: PRINT " X-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Xoff
- COLOR 15: PRINT " Z-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Zoff
- COLOR 15: PRINT " How many FRAMES for this path";
- COLOR col: INPUT " [Enter] = 120 "; num
- IF num = 0 THEN num = 120
- GOTO 1000
-
- 200 ' ----- Get data for ELLPISE -----
- ShowGrid
- LOCATE 19, 2
- COLOR col: PRINT "ELLIPSE:"
- COLOR 15: PRINT " Major axis (X-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(1)
- COLOR 15: PRINT " Minor axis (Z-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(2)
- IF r(1) = 0 OR r(2) = 0 THEN r(1) = 300: r(2) = 140
- COLOR 15: PRINT " X-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Xoff
- COLOR 15: PRINT " Z-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Zoff
- COLOR 15: PRINT " How many FRAMES for this path";
- COLOR col: INPUT " [Enter] = 120 "; num
- IF num = 0 THEN num = 120
- GOTO 1000
-
- 300 ' ----- Get data for LEMNISCATE -----
- ShowGrid
- LOCATE 19, 2
- COLOR col: PRINT "LEMNISCATE (rose):"
- COLOR 15: PRINT " Number of rose petals (3-12)";
- COLOR col: INPUT " [Enter] = 3 "; pet
- IF pet < 1 THEN pet = 3
- COLOR 15: PRINT " Major axis (X-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(1)
- COLOR 15: PRINT " Minor axis (Z-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(2)
- IF r(1) = 0 OR r(2) = 0 THEN r(1) = 200: r(2) = 200
- COLOR 15: PRINT " X-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Xoff
- COLOR 15: PRINT " Z-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Zoff
- COLOR 15: PRINT " How many FRAMES for this path";
- COLOR col: INPUT " [Enter] = 120 "; num
- IF num = 0 THEN num = 120
- IF pet / 2 = INT(pet / 2) THEN 2000 ELSE 2010 'test for even or odd
-
- 400 ' ----- Get data for LIMACON -----
- ShowGrid
- LOCATE 19, 2
- COLOR col: PRINT "LIMACON (loop):"
- COLOR 15: PRINT " Number of inner loops (1-5)";
- COLOR col: INPUT " [Enter] = 1 "; lup
- IF lup < 1 THEN lup = 1
- COLOR 15: PRINT " S)ingle or D)ouble limacon?";
- COLOR col: INPUT " [Enter] = single "; t$
- IF t$ = "" OR t$ = CHR$(13) THEN t$ = "SINGLE"
- COLOR 15: PRINT " Major axis (X-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(1)
- COLOR 15: PRINT " Minor axis (Z-Axis)";
- COLOR col: INPUT " [Enter] = 200 "; r(2)
- IF r(1) = 0 OR r(2) = 0 THEN r(1) = 200: r(2) = 200
- COLOR 15: PRINT " X-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Xoff
- COLOR 15: PRINT " Z-Offset from center";
- COLOR col: INPUT " [Enter] = none "; Zoff
- COLOR 15: PRINT " How many FRAMES for this path";
- COLOR col: INPUT " [Enter] = 120 "; num
- IF num = 0 THEN num = 120
- IF t$ = "s" OR t$ = "S" OR t$ = "single" OR t$ = "SINGLE" THEN 2020 ELSE 2030
-
- 1000 ' ----- Draw CIRCLE or ELLIPSE -----
- IF r(1) = r(2) THEN path = 1 ELSE path = 2
- ShowGrid
- FOR theta = 0 TO 2 * pi STEP ((2 * pi) / num)
- x = r(1) * COS(theta) + Xoff ' basic polar coords. +/- X offset
- Z = r(2) * SIN(theta) + Zoff ' basic polar coords. +/- Y offset
- LINE (x, Z)-(x + 1, Z + 1), col, B ' draw bigger points than PSET can
- NEXT theta
- GOTO 5000
-
- 2000 ' ----- Draw LEMNISCATE & LIMACON ' Leaving b=1 and c=1 gives us
- a = (pet / 2): B = 1: c = 1 ' an equation for a lemniscate:
- e = 2: f = 1 '
- path = 4 ' x = SIN(A*theta)*COS(theta) + Xoff
- GOTO 2500 ' y = SIN(A*theta)*SIN(theta) + Zoff
- '
- ' if A is odd, A = # of petals
- 2010 a = pet: B = 1: c = 1 ' and theta must make one half
- e = 1: f = 2 ' revolutions (from 0 to pi)
- path = 3 ' if A is even, 2*A = # of petals
- GOTO 2500 ' and theta must make one full
- ' revolution (from 0 to 2*pi)
-
- 2020 a = 1: B = 1: c = (lup * 2) + 1 ' Leaving a=1 and b=1 gives us
- e = 1: f = 2 ' an equation for a limacon:
- path = 5 '
- GOTO 2500 ' x = SIN(theta)*COS(C*theta) + Xoff
- ' y = SIN(theta)*SIN(C*theta) + Zoff
- '
- 2030 a = 1: B = 1: c = lup * 2 ' if C is odd, it's a single limacon
- e = 2: f = 1 ' with (C-1)/2 loops & a half rev.
- path = 6 ' if C is even, it's a double limacon
- GOTO 2500 ' with (C/2) loops & a full rev.
- '
-
- 2500 ' ------ MY (Polar) equation using a, b, and c ------
- ' Send different combinations of a, b, and c to this
- ' equation to see the results. Basically, I've covered
- ' the MAJOR ones (lemniscate and limacon), but you can alter
- ' the general shape as well. This just one of a million
- ' equations that will work - please experiment!
- ' Note: the SIN(a*theta)'s could be COS(a*theata)'s...this just
- ' determines it's orientation in space. (COS makes the
- ' paths lay sideways on the screen instead of vertical)
- ShowGrid
- FOR theta = 0 TO e * pi STEP ((2 * pi) / num / f)
- x = r(1) * SIN(a * theta) ^ B * COS(c * theta) + Xoff
- Z = r(2) * SIN(a * theta) ^ B * SIN(c * theta) + Zoff
- LINE (x, Z)-(x + 1, Z + 1), col, B
- NEXT theta
- GOTO 5000
-
- 5000 LOCATE 27, 59
- IF path = 1 THEN COLOR 11: PRINT "CIRCLE"
- IF path = 2 THEN COLOR 14: PRINT "ELLPISE"
- IF path = 3 THEN COLOR 10: PRINT "LEMNISCATE, ODD"
- IF path = 4 THEN COLOR 10: PRINT "LEMNISCATE, EVEN"
- IF path = 5 THEN COLOR 9: PRINT "LIMACON, SINGLE"
- IF path = 6 THEN COLOR 9: PRINT "LIMACON, DOUBLE"
- LOCATE 28, 59: COLOR 15: PRINT "SAVE this path? (Y/N)";
- DO: save$ = INKEY$: LOOP WHILE save$ = ""
- IF save$ = "Y" OR save$ = "y" THEN 5010 ELSE 20
-
- 5010 ' ----- Save the current CamPATH to disk -----
- CLS : COLOR 14
- PRINT "The current camera path is ready for output..."
- COLOR 15
- LINE (205, 220)-(320, 220): LINE -(320, 25)
- LINE -(205, 25): LINE -(205, 220)
- LOCATE 3, 2: INPUT "Name for the batch file (anim.bat)"; batch$
- IF batch$ = "" THEN batch$ = "anim.bat"
- COLOR 14: LOCATE 3, 68: PRINT batch$: COLOR 15
- LOCATE 5, 2: INPUT "Name for the include file (campath.inc)"; incl$
- IF incl$ = "" THEN incl$ = "campath.inc"
- COLOR 14: LOCATE 5, 68: PRINT incl$: COLOR 15
- LOCATE 7, 2: INPUT "Name of the datafile to animate (test.dat)"; file$
- IF file$ = "" THEN file$ = "test.dat"
- COLOR 14: LOCATE 7, 68: PRINT file$: COLOR 15
- LOCATE 9, 2: INPUT "Name of the command definition file (trace.def)"; defi$
- IF defi$ = "" THEN defi$ = "trace.def"
- COLOR 14: LOCATE 9, 68: PRINT defi$: COLOR 15
- LOCATE 11, 2: INPUT "Name of your executable file (dkb.exe)"; dkb$
- IF dkb$ = "" THEN dkb$ = "dkb.exe"
- COLOR 14: LOCATE 11, 68: PRINT dkb$: COLOR 15
- LOCATE 13, 2: INPUT "Up to 4 letters for the TGA output files (anim)"; tga$
- IF tga$ = "" THEN tga$ = "anim"
- COLOR 14: LOCATE 13, 68: PRINT tga$ + "0000.tga"
- LOCATE 15, 1
- PRINT "(C)reate CamPATH batch file, (R)e-enter names, or (Q)uit "
- 5020 k$ = INKEY$: IF k$ = "" THEN 5020
- IF (k$ = "C" OR k$ = "c" OR k$ = CHR$(13)) AND path <= 2 THEN 5500
- IF (k$ = "C" OR k$ = "c" OR k$ = CHR$(13)) AND path >= 3 THEN 5520
- IF k$ = "R" OR k$ = "r" THEN 5010
- GOTO 20
-
- 5500 ' ----- Create batch file for CIRCLE or ELLIPSE -----
- frm = 1
- ShowGrid
- COLOR 15: LOCATE 29, 1
- PRINT "Opening "; batch$; ": Inserting data...";
- OPEN batch$ FOR OUTPUT AS #1
- PRINT #1, "@ECHO OFF"
- PRINT #1, "cls"
- PRINT #1, "echo This CamPATH batch file will render"; num; "frames of "; file$; "."
- PRINT #1, "echo."
- PRINT #1, "echo Be sure to INCLUDE "; CHR$(34); incl$; CHR$(34); " in your "; file$; " file,"
- PRINT #1, "echo and insert the XPOS and ZPOS varaibles into your camera's LOCATION statement."
- PRINT #1, "echo."
- PRINT #1, "echo This batch file uses "; defi$; " for resolution, quality, etc."
- PRINT #1, "echo and will save the frames as "; tga$ + "0001.tga through "; tga$; FrameFix(num); ".tga."
- PRINT #1, "echo."
- PRINT #1, "echo Press CTRL-C to abort, or"
- PRINT #1, "PAUSE"
- FOR theta = 0 TO (2 * pi) STEP ((2 * pi) / num)
- PRINT #1, ""
- PRINT #1, "rem --- FRAME #"; frm; "---"
- x = r(1) * COS(theta) + Xoff
- Z = r(2) * SIN(theta) + Zoff
- LINE (x, Z)-(x + 1, Z + 1), col, B
- IF x > -.001 AND x < .001 THEN x = 0 ' Keeps negative exponents
- IF Z > -.001 AND Z < .001 THEN Z = 0 ' out of the include file
- PRINT #1, "echo DECLARE XPOS ="; x; "> "; incl$
- PRINT #1, "echo DECLARE ZPOS ="; Z; ">> "; incl$
- PRINT #1, dkb$; " -i"; file$; " -o"; tga$ + FrameFix$(frm) + ".tga "; defi$
- frm = frm + 1
- IF frm > num THEN CLOSE #1: GOTO 6000 '<-- This is SLOPPY but it
- NEXT theta ' insures that there will be
- CLOSE #1 ' exactally the correct
- GOTO 6000 ' number of frames.
-
- 5520 ' ----- Create batch file for LEMNISCATE or LIMACON -----
- frm = 1
- ShowGrid
- COLOR 15: LOCATE 30, 1
- PRINT "Opening "; batch$; ": Inserting data...";
- OPEN batch$ FOR OUTPUT AS #1
- PRINT #1, "@ECHO OFF"
- PRINT #1, "cls"
- PRINT #1, "echo This CamPATH batch file will render"; num; "frames of "; file$; "."
- PRINT #1, "echo."
- PRINT #1, "echo Be sure to INCLUDE "; CHR$(34); incl$; CHR$(34); " in your "; file$; " file,"
- PRINT #1, "echo and insert the XPOS and ZPOS varaibles into your camera's LOCATION statement."
- PRINT #1, "echo."
- PRINT #1, "echo This batch file uses "; defi$; " for resolution, quality, etc."
- PRINT #1, "echo and will save the frames as "; tga$ + "0001.tga through "; tga$; FrameFix(num); ".tga."
- PRINT #1, "echo."
- PRINT #1, "echo Press CTRL-C to abort, or"
- PRINT #1, "PAUSE"
- FOR theta = 0 TO (e * pi) STEP ((2 * pi) / num / f)
- PRINT #1, ""
- PRINT #1, "rem --- FRAME #"; frm; "---"
- x = r(1) * SIN(a * theta) ^ B * COS(c * theta) + Xoff
- Z = r(2) * SIN(a * theta) ^ B * SIN(c * theta) + Zoff
- LINE (x, Z)-(x + 1, Z + 1), col, B
- IF x > -.001 AND x < .001 THEN x = 0 ' Keeps negative exponents
- IF Z > -.001 AND Z < .001 THEN Z = 0 ' out of the include file
- PRINT #1, "echo DECLARE XPOS ="; x; "> "; incl$
- PRINT #1, "echo DECLARE ZPOS ="; Z; ">> "; incl$
- PRINT #1, dkb$; " -i"; file$; " -o"; tga$ + FrameFix$(frm) + ".tga "; defi$
- frm = frm + 1
- IF frm > num THEN CLOSE #1: GOTO 6000 ' <--- You see, just getting
- NEXT theta ' the loop to end at one step
- CLOSE #1 ' less than (e*pi) IS NOT
- GOTO 6000 ' good enough. This is BAD,
- ' but it IS cheap insurance.
- 6000 saved = 1: GOSUB 9000
- LOCATE 5, 10: COLOR 14, 0
- PRINT ; "The file "; batch$; " has been created in the current directory."
- PRINT : COLOR 15, 0
- PRINT "1. Edit your datafile ("; file$; "), inserting the line INCLUDE "; CHR$(34); incl$; CHR$(34); ","
- PRINT " and substitute XPOS and ZPOS into your camera's LOCATION command."
- PRINT " (ie. LOCATION <XPOS 70 ZPOS> where 70 is some fixed height of the path.)"
- PRINT " Also, be sure that your LOOK_AT is aimed at the 'main part' of the scene."
- PRINT
- PRINT "2. Edit your definition file ("; defi$; ") so it's set up for THIS animation."
- PRINT " ("; dkb$; " will look there for resolution, quality, etc. for all frames.)"
- PRINT
- PRINT "3. Move "; batch$; " into your raytrace directory and execute it..."
- PRINT " it will render all"; num; "frames of "; file$; " automatically, and"
- PRINT " save each in targa format, starting with "; tga$ + "0001.tga"
- PRINT : COLOR 7, 0
- GOTO 9999
-
- 7000 ' -------- ABOUT CamPATH ---------
- CLS : COLOR 14
- LOCATE 1, 34: PRINT "CamPATH v1.0"
- LOCATE 2, 31: PRINT "By: John Hammerton"
- LOCATE 4, 17: PRINT CHR$(34); "This is your CAMERA on drugs, any questions?"; CHR$(34)
- LOCATE 6, 1: COLOR 7
- PRINT " CamPATH was inspired from an earlier program of mine called Rotate, which"
- PRINT "simply incremented one variable for DKB's ROTATE command in the VIEW_POINT"
- PRINT "declaration by a certain number of degrees. DKB's ROTATE command makes these"
- PRINT "circular paths VERY simple to implement - but after a good number of animations"
- PRINT "simply rotating the camera about a fixed radius isn't enough."
- PRINT
- PRINT " Instead of using the ROTATE command, CamPATH solves a set of equations"
- PRINT "for XPOS and ZPOS (the X and Z position of the camera's LOCATION.) These"
- PRINT "equations are converted from the Polar Coordinate system and include"
- PRINT "the Ellipse, the Lemniscate (rose), the Limacon (loop) and the good old Circle."
- PRINT
- PRINT " CamPATH asks you for your input on size, shape and number of points (frames)"
- PRINT "and gives you a preview of the path. Each point represents the actual"
- PRINT "position of the camera from frame to frame. You can then SAVE this data as"
- PRINT "a batch file, which will render all of the frames for you, automatically."
- PRINT
- PRINT " Disclaimer: CamPATH v1.0 does NOT have a delete function and could only harm"
- PRINT "an existing file if it saves 'over' it with the same name. It also can NOT"
- PRINT "access any file except for the batch file it creates. (ie. it can't alter your"
- PRINT "data or definition files) It allows YOU to name all files involved with the"
- PRINT "process so there's no mix-ups. Therefore, I cannot be held liable for any"
- PRINT "damages resulting from the use or misuse of this program."
- LOCATE 30, 1: COLOR 14
- PRINT "Press any key to continue...or <ESC> to Begin";
- 7010 k$ = INKEY$: IF k$ = "" THEN 7010
- IF k$ = "B" OR k$ = "b" OR k$ = CHR$(27) THEN 20
-
- CLS : COLOR 14
- LOCATE 1, 34: PRINT "CamPATH v1.0"
- LOCATE 2, 31: PRINT "By: John Hammerton"
- LOCATE 4, 1: COLOR 7
- PRINT " CamPATH v1.0 moves the camera using the XPOS and ZPOS variables asuming your"
- PRINT "datafile uses Y as the UP direction - but since YOU have to put these into"
- PRINT "your LOCATION command by hand, you could just as easily swap them around for"
- PRINT "a different cooridinate system (or for a vertical path, for example)."
- PRINT
- PRINT " Be sure your LOOK_AT command is set appropriately because the camera will"
- PRINT "look right at THAT point the ENTIRE length of the animation, no matter where"
- PRINT "the camera path goes. With complex scenes this decision can take some figuring."
- PRINT
- PRINT " If your camera path passes very close to or through objects in your scene,"
- PRINT "unwanted effects can occur, like suddenly jumping INSIDE of a sphere that you"
- PRINT "meant to pass by or moving INTO a plane which blocks your view of the scene for"
- PRINT "a number of frames. The best way to aviod this is to begin an animation idea"
- PRINT "with FIRST designing the path, INCLUDING AN OFFSET...and THEN start to build"
- PRINT "the datafile around the (0,0) spot, assuming your LOOK_AT is (0,0). Failure to"
- PRINT "offset the path, especially with lemniscates and limacons, can make a mess."
- PRINT
- PRINT " CamPATH v1.0 is a toy. It is just the first few bits of an animation designer"
- PRINT "that may have some potential down the road. CamPATH v2.0 is well on the way and"
- PRINT "it will have a more informative interface (perhaps a little gooey), it will"
- PRINT "support a YPOS as well for more Freedom of Path and some new 3D path types,"
- PRINT "and v2.0 will have a less limiting way of picking the actual SIZE of the path."
- PRINT
- PRINT " Enjoy! It DOES add a needed dimention (or two) to animations. PLEASE drop me"
- PRINT "a message on YCCMR with your ideas and suggestions for v2.0 and beyond."
- LOCATE 30, 1: COLOR 14
- PRINT "Press any key to Begin";
- 7020 k$ = INKEY$: IF k$ = "" THEN 7020
- GOTO 20
-
- 9000 SCREEN 0: WIDTH 80: COLOR 7, 0
- FOR wipe = 1 TO 25: LOCATE wipe, 1: PRINT SPC(79); " "; : NEXT wipe
- COLOR 15, 4
- LOCATE 1, 30: PRINT " CamPATH v1.0 "
- LOCATE 2, 30: PRINT " By: John Hammerton "
- LOCATE 3, 30: PRINT " 09/17/91 "
- COLOR 7, 0
- IF saved = 1 THEN RETURN
-
- 9999 END
-
- FUNCTION FrameFix$ (frm AS SINGLE) ' This function takes the
- frame$ = (STR$(frm)) ' input variable, (in this
- fix$ = RIGHT$(frame$, LEN(frame$) - 1) ' case, our frame number)
- IF frm < 10000 THEN FrameFix$ = fix$ ' chops the leading space
- IF frm < 1000 THEN FrameFix$ = "0" + fix$ ' away, and attaches the
- IF frm < 100 THEN FrameFix$ = "00" + fix$ ' correct number of zeroes
- IF frm < 10 THEN FrameFix$ = "000" + fix$ ' for easy post-processing.
- END FUNCTION
-
- SUB ShowGrid
-
- CLS
- FOR Grid = -300 TO 300 STEP 50
- IF Grid = 0 THEN gc = 12 ELSE gc = 8
- LINE (Grid, 200)-(Grid, -200), gc
- LINE (-300, Grid)-(300, Grid), gc
- NEXT Grid
- COLOR 15
- LOCATE 15, 38: PRINT "(0,0)"; ' center To keep things simple,
- LOCATE 3, 37: PRINT " +200 "; ' top for now I'm using the
- LOCATE 15, 1: PRINT "-300 "; ' left individual VGA pixels
- LOCATE 15, 75: PRINT " +300"; ' right as an unscaleable
- LOCATE 28, 37: PRINT " -200 "; ' bottom unit of measure.
- LINE (-2, -2)-(2, 2), 14, BF ' (this will be changed)
- COLOR 12
- LOCATE 2, 41: PRINT "Z"
- LOCATE 16, 79: PRINT "X"
-
- END SUB
-
-