Dark Bit Factory & Gravity
PROGRAMMING => Freebasic => Topic started by: Shockwave on January 19, 2010
-
This routine was used in Nzo's coppermaster remake, it allows you to have 2D flatshaded objects and zoom them in and out and pan them around.
Since the remake didn't require rotations and it was done in a rush, these are not yet implimented.
I put the 7 objects from the demo in this example, use f1 - f7 to change the object.
If you use this a credit to dbfinteractive.com would be cool :)
'*******************************************************************************
'*
'* VECTOR FUNCTIONS (V 1.0) CODED FOR NZO BY SHOCKWAVE 2010
'*
'* BE CAREFUL OF DIVISIONS BY ZERO AND OUT OF DATA ERRORS.
'*
'* TO ADD AN OBJECT, CREATE A LABEL AT THE END OF THE CODE.
'* EG: OBJECT1:
'* OBJECT2:
'* OBJECT3: ETC...
'*
'* ADD VERTEX DATA FIRST.
'* DATA X,Y,Z , X,Y,Z , X,Y,Z , X,Y,Z ETC..
'* ADD FACE DATA NEXT.
'* DATA 1,2,3 (CONNECT POINTS 1,2,3)
'* DATA 3,4,1 (CONNECT POINTS 3,4,1)
'*
'* GO TO THE SUB INITIALISE_OBJECT()
'* AND LOCATE THE CASE STATEMENTS.
'* ADD A NEW CONDITION. EG:
'*
'* CASE 3
'* VERT_READ=130:' 130 VERTICES IN OBJECT
'* FACE_READ=51 :' 51 FACES IN OBJECT
'*
'* THAT TELLS THE PROGRAM THAT OBJECT 3 HAS 130 X,Y,Z TRIPLES AND 51 POLYGONS.
'*
'* TO USE YOUR OBJECT..
'* RESTORE OBJECT3: (MUST BE CALLED FROM MAIN PROGRAM). TO SET THE DATA POINTER IN THE RIGHT PLACE.
'* INITIALISE_OBJECT(3) (THIS LOADS YOUR OBJECT)
'* YOU MAY NOW DRAW YOUR OBJECT ON SCREEN:
'* DRAW_OBJECT (X,Y,Z,RGB(RR,GG,BB))
'*
'*------------------------------------------------------------------------------
'* THE OBJECT DATA AND DRAW CO-ORDINATES MAY BE EXPRESSED AS FLOATING POINT NUMBERS.
'* YOU SHOULD NOT TRY AND DRAW ANYTHING AT A Z POS OF 0
'* USE THE SCALE VARIABLES TO STRETCH EACH AXIS ALLOWING YOU TO TWEAK THE LOOK OF THE LETTERS.
'* POLYGONS ARE CLIPPED TO SCREEN BOUNDARIES SET BY XRES AND YRES
'*------------------------------------------------------------------------------
'*
'* PLANNED CHANGES...
'* ADD X,Y,Z ROTATION
'*
'*******************************************************************************
'-------------------------------------------------------------------------------
' LIBS;
'-------------------------------------------------------------------------------
#INCLUDE "TINYPTC_EXT.BI"
#INCLUDE "WINDOWS.BI"
OPTION STATIC
OPTION EXPLICIT
'-------------------------------------------------------------------------------
' 800 * 600 SCREEN AND SCREEN BUFFER.
'-------------------------------------------------------------------------------
CONST XRES = 800
CONST YRES = 600
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
'-------------------------------------------------------------------------------
' DEFINITIONS FOR OBJECTS.
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE XSCALE,YSCALE,ZSCALE
XSCALE=30.0:' HOW MUCH TO STRETCH X
YSCALE=15.0:' HOW MUCH TO STRETCH Y
ZSCALE=15.0:' HOW MUCH TO STRETCH Z
DIM SHARED AS INTEGER VERTICES=1000:' INCREASE THESE IF YOU RUN OUT OF POINTS!
DIM SHARED AS INTEGER FACES =1000:'
DIM SHARED AS INTEGER VERT_READ,FACE_READ:' STORES POINTS AND FACES IN OBJECT.
'-------------------------------------------------------------------------------
' STORAGE FOR OBJECT 1
'-------------------------------------------------------------------------------
DIM SHARED AS INTEGER TX(VERTICES),TY(VERTICES): ' HOLDS TRANSFORMED OBJECT
DIM SHARED AS DOUBLE OBJ_X(VERTICES):' HOLDS RAW X CO-ORD
DIM SHARED AS DOUBLE OBJ_Y(VERTICES):' HOLDS RAW Y CO-ORD
DIM SHARED AS DOUBLE OBJ_Z(VERTICES):' HOLDS RAW Z CO-ORD
DIM SHARED AS INTEGER CONNECT1(FACES):' POLY POINT 1
DIM SHARED AS INTEGER CONNECT2(FACES):' POLY POINT 2
DIM SHARED AS INTEGER CONNECT3(FACES):' POLY POINT 3
DECLARE SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER)
DECLARE SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER)
DECLARE SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT)
'
RESTORE OBJECT1:' SET OBJECT POINTER!
INITIALISE_OBJECT(1):' LOAD OBJECT!
'-------------------------------------------------------------------------------
' OPEN THE SCREEN;
'-------------------------------------------------------------------------------
PTC_ALLOWCLOSE(0)
PTC_SETDIALOG(1,"COPPERMASTER VECTOR FUNCTIONS"+CHR$(13)+"FULL SCREEN?",0,1)
IF (PTC_OPEN("BY SHOCKWAVE",XRES,YRES)=0) THEN
END-1
END IF
'*******************************************************************************
'* MAIN LOOP;
'*******************************************************************************
DIM GADD AS DOUBLE
WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE)
IF GETASYNCKEYSTATE(VK_F1)= -32767 THEN
RESTORE OBJECT1:' SET OBJECT POINTER!
INITIALISE_OBJECT(1):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F2)= -32767 THEN
RESTORE OBJECT2:' SET OBJECT POINTER!
INITIALISE_OBJECT(2):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F3)= -32767 THEN
RESTORE OBJECT3:' SET OBJECT POINTER!
INITIALISE_OBJECT(3):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F4)= -32767 THEN
RESTORE OBJECT4:' SET OBJECT POINTER!
INITIALISE_OBJECT(4):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F5)= -32767 THEN
RESTORE OBJECT5:' SET OBJECT POINTER!
INITIALISE_OBJECT(5):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F6)= -32767 THEN
RESTORE OBJECT6:' SET OBJECT POINTER!
INITIALISE_OBJECT(6):' LOAD OBJECT!
END IF
IF GETASYNCKEYSTATE(VK_F7)= -32767 THEN
RESTORE OBJECT7:' SET OBJECT POINTER!
INITIALISE_OBJECT(7):' LOAD OBJECT!
END IF
DRAW_OBJECT(333*COS(GADD),333*SIN(GADD),7+6.99*SIN(GADD*5),RGB(55,100,155))
PTC_UPDATE@BUFFER(0)
ERASE BUFFER
SLEEP 1
GADD=GADD+.002
WEND
'*******************************************************************************
'* EXIT.
'*******************************************************************************
EXITPROCESS(0)
'-------------------------------------------------------------------------------
' SUBROUTINES.
'-------------------------------------------------------------------------------
SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT)
DIM AS INTEGER L
DIM AS DOUBLE RX,RY,RZ
'-------------------------------------------------------------------------------
' CHOOSE AN OBJECT!
'-------------------------------------------------------------------------------
SELECT CASE OBJECT_NUMBER
CASE 1
VERT_READ=70:' 70 VERTICES IN OBJECT
FACE_READ=56:' 56 FACE IN OBJECT
CASE 2
VERT_READ=34:' 34 VERTICES IN OBJECT
FACE_READ=24:' 24 FACE IN OBJECT
CASE 3
VERT_READ=79:' 79 VERTICES IN OBJECT
FACE_READ=59:' 59 FACE IN OBJECT
CASE 4
VERT_READ=61:' 61 VERTICES IN OBJECT
FACE_READ=49:' 49 FACE IN OBJECT
CASE 5
VERT_READ=70:' 70 VERTICES IN OBJECT
FACE_READ=48:' 48 FACE IN OBJECT
CASE 6
VERT_READ=78:' 78 VERTICES IN OBJECT
FACE_READ=58:' 58 FACE IN OBJECT
CASE 7
VERT_READ=42:' 42 VERTICES IN OBJECT
FACE_READ=33:' 33 FACE IN OBJECT
CASE ELSE
END SELECT
'---------------------------------------------------------------------------
' READ OBJECT
'---------------------------------------------------------------------------
'-----------------------------------------------------------------------
' VERTICES;
'-----------------------------------------------------------------------
FOR L=1 TO VERT_READ
READ RX,RY,RZ
OBJ_X(L) = RX*XSCALE
OBJ_Y(L) = RY*YSCALE
OBJ_Z(L) = RZ*ZSCALE
NEXT
'-----------------------------------------------------------------------
'CONNECTIONS;
'-----------------------------------------------------------------------
FOR L=1 TO FACE_READ
READ CONNECT1(L)
READ CONNECT2(L)
READ CONNECT3(L)
NEXT
END SUB
'*******************************************************************************
'*
'* DRAW OBJECT : USAGE:
'* DRAW_OBJECT ( X , Y , Z , COLOUR )
'* X,Y,Z (FLOATING POINT)
'* COLOUR = &HRRGGBB
'*******************************************************************************
SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER)
DIM AS INTEGER L
DIM AS DOUBLE HALFX,HALFY
HALFX = (XRES SHR 1)
HALFY = (YRES SHR 1)
'---------------------------------------------------------------------------
' TRANSFORM AND STORE POINTS;
'---------------------------------------------------------------------------
FOR L=1 TO VERT_READ
TX(L)=((OBJ_X(L)+OX) / (OBJ_Z(L)+OZ))+HALFX
TY(L)=((OBJ_Y(L)+OY) / (OBJ_Z(L)+OZ))+HALFY
NEXT
'---------------------------------------------------------------------------
' DRAW THE OBJECT;
'---------------------------------------------------------------------------
FOR L=1 TO FACE_READ
TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC)
NEXT
END SUB
SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER)
'-------------------------------------------------------------------------------
' FLAT TRIANGLE RENDERER BY SHOCKWAVE 2006.
'
' USAGE : TRIANGLE ( X1 , Y1 , X2 , Y2 , X3 , Y3 , &HRRGGBB)
' CLIPS TO SCREEN BOUNDARIES DEFINED AS XRES AND YRES.
'
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' WE NEED TO SORT THE POINTS INTO ORDER FROM TOP TO BOTTOM, EXCHANGE SORT IS OK.
' AS WE ONLY HAVE GOT 3 POINTS TO ARRANGE.
'-------------------------------------------------------------------------------
DIM AS INTEGER TEMPX,TEMPY,LO,LI
DIM AS INTEGER PX(3)
DIM AS INTEGER PY(3)
DIM TFLAG AS INTEGER
DIM PP AS UINTEGER PTR
DIM AS INTEGER IL1,IL2,SLICE
TFLAG=0
PX(1)= X1
PX(2)= X2
PX(3)= X3
PY(1)= Y1
PY(2)= Y2
PY(3)= Y3
FOR LO = 1 TO 2
FOR LI =1 TO 2
IF PY(LI+1) <= PY(LI) THEN
TEMPX = PX(LI) : TEMPY = PY(LI)
PX(LI) = PX(LI+1)
PY(LI) = PY(LI+1)
PX(LI+1) = TEMPX
PY(LI+1) = TEMPY
END IF
NEXT LI
NEXT LO
'-------------------------------------------------------------------------------
' BOOT OUT INVISIBLE TRIANGLES!
'-------------------------------------------------------------------------------
IF PX(1)<0 AND PX(2)<0 AND PX(3)< 0 THEN TFLAG=1
IF PX(1)>XRES AND PX(2)>XRES AND PX(3)>XRES THEN TFLAG=1
IF PY(1)>YRES AND PY(2)>YRES AND PY(3)>YRES THEN TFLAG=1
DIM AS DOUBLE XP1,XP2:' SCREEN POSITIONS.
DIM AS DOUBLE XI1,XI2:' INTERPOLATIONS.
'-------------------------------------------------------------------------------
' REGULAR TRIANGLE (Y1<Y2 Y2<Y3)
'-------------------------------------------------------------------------------
IF PY(1)<PY(2) AND PY(2)<PY(3) or (PY(2) = PY(3)) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(1)
XI1 = (PX(1)-PX(2)) / (PY(2) - PY(1))
XI2 = (PX(1)-PX(3)) / (PY(3) - PY(1))
FOR LO = PY(1) TO PY(2)-1
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
ASM
MOV EAX,DWORD ptr[TC]
MOV ECX, [SLICE]
MOV EDI, [PP]
REP STOSD
END ASM
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
XI1 = (PX(2)-PX(3)) / (PY(3) - PY(2))
XP1 = PX(2)
FOR LO = PY(2) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
ASM
MOV EAX,DWORD ptr[TC]
MOV ECX, [SLICE]
MOV EDI, [PP]
REP STOSD
END ASM
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
'-------------------------------------------------------------------------------
' FLAT TOPPED TRIANGLE Y1=Y2
'-------------------------------------------------------------------------------
IF TFLAG=0 AND PY(1) = PY(2) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(2)
XI1 = (PX(1)-PX(3)) / (PY(3) - PY(1))
XI2 = (PX(2)-PX(3)) / (PY(3) - PY(2))
FOR LO = PY(1) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
ASM
MOV EAX,DWORD ptr[TC]
MOV ECX, [SLICE]
MOV EDI, [PP]
REP STOSD
END ASM
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
END SUB
OBJECT1:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70
' "BYE.BYE"
'VERTICES : 70
DATA -38,-9,0,-38,9,0,-28,9,0,-28,6,0,-31,0,0,-28,-6,0,-28,-9,0,-35,-6,0,-35,6,0,-31,6,0,-34,0,0,-31,-6,0,-26,-9,0,-23,5,0,-23,9,0,-19,9,0,-19,5,0,-16,-9,0
DATA -19,-9,0, -21,-1,0, -23,-9,0, -14,-9,0, -14,9,0, -4,9,0, -4,6,0, -11,6,0, -11,1,0, -6,1,0, -6,-1,0, -11,-1,0, -11,-6,0, -4,-6,0, -4,-9,0, -2,9,0
DATA -2,4,0,2,4,0,2,9,0,4,-9,0,4,9,0,14,9,0,14,6,0,11,0,0,14,-6,0,14,-9,0,7,-6,0,7,6,0,11,6,0,8,0,0,11,-6,0
DATA 16,-9,0,19,5,0,19,9,0,23,9,0,23,5,0,26,-9,0,23,-9,0,21,-1,0,19,-9,0,28,-9,0,28,9,0,38,9,0,38,6,0
DATA 31,6,0,31,1,0,36,1,0,36,-1,0,31,-1,0,31,-6,0,38,-6,0,38,-9,0
'FACES : 56
DATA 1,2,8,2,8,9,2,9,3,9,3,10
DATA 10,3,4,10,4,5,10,11,5,11
DATA 5,6,11,12,6,12,6,7,12,7,1,8,12,1
DATA 13,21,14,14,20,21,19,18,17,19,20,17,14,20,17,14,17,15,15,16,17
DATA 22,23,26,22,26,31,23,26,24,26,24,25,27,28,29,27,29,30,22,31,32,22,32,33
DATA 34,35,36,34,36,37
DATA 38,39,46,38,46,45,39,46,40,46,40,41,47,41,42,47,42,48,48,42,43,48,49,43,43,44,49,38,45,49,38,49,44
DATA 50,51,58,51,58,57,51,57,54,57,54,56,56,54,55,51,52,53,51,53,54
DATA 59,60,63,59,68,63,60,63,61,63,61,62,64,65,66,64,66,67,68,69,70,68,70,59
OBJECT2:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :34
'VERTICES: 34
DATA -21,-10,0,-19,1,0,-15,1,0,-13,-10,0,-19,5,0,-19,10,0,-15,10,0,-15,5,0,-11,-10,0
DATA -11,10,0,-8,10,0,-8,-7,0,-6,-7,0,-4,-4,0,-4,10,0,-1,10,0,-1,-7,0,-3,-10,0,1,-10,0,1,10,0,11,10,0,11,-10,0
DATA 4,-7,0,4,7,0,8,7,0,8,-7,0,13,-10,0,15,1,0,19,1,0
DATA 21,-10,0,15,5,0,15,10,0,19,10,0,19,5,0
' FACES: 24
DATA 1,2,3,1,3,4
DATA 5,6,7,5,7,8
DATA 9,10,11,9,11,12,9,12,18,12,18,13,13,18,17,13,17,14,14,17,15,15,16,17
DATA 19,20,24,19,24,23,24,20,21,24,21,25,21,22,25,22,25,26,22,19,26,19,23,26
DATA 27,28,29,27,29,30,31,32,33,31,33,34
OBJECT3:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :79
'VERTICES:79
DATA -44,-10,0,-44,10,0,-41,10,0,-41,-7,0,-40,-7,0,-40,10,0,-38,10,0,-38,-7,0,-37,-7,0,-37,10,0,-34,10,0,-34,-7,0,-37,-10,0
DATA -32,-10,0,-32,10,0,-29,10,0,-29,-7,0,-25,-7,0,-27,0,0,-25,7,0,-25,10,0,-22,10,0,-22,7,0,-24,0,0,-22,-7,0,-22,-10,0,-20,6,0
DATA -20,10,0,-16,10,0,-16,6,0,-14,-10,0,-11,10,0,-7,10,0,-4,-10,0,-6,-10,0,-9,6,0,-12,-10,0,-2,-10,0,-2,-6,0,2,-6,0,2,6,0,-2,6,0,-2,10,0,9,10,0
DATA 9,6,0,5,6,0,5,-6,0,9,-6,0,9,-10,0,11,-10,0,11,10,0,21,10,0,21,-2,0,18,-10,0,14,-7,0,14,7,0,18,7,0,18,-4,0,16,-7,0
DATA 23,-10,0,23,10,0,33,10,0,33,6,0,26,6,0,26,1,0,31,1,0,31,-1,0,26,-1,0,26,-6,0,33,-6,0,33,-10,0,35,-10,0
DATA 35,10,0,45,10,0,45,-10,0,38,-7,0,38,7,0,42,7,0,42,-7,0
'FACES:59
DATA 1,2,3,1,3,4,5,6,7,5,7,8,9,12,11,9,10,11,1,4,12,1,12,13
DATA 14,17,15,15,16,17,14,17,26,17,26,18,26,18,25,18,25,19,25,19,24,19,24,20,24,20,23,20,21,22,20,22,23,27,28,29,27,29,30
DATA 31,32,37,37,32,36,32,36,33,36,33,34,34,35,36
DATA 38,39,48,38,48,49,42,43,44,42,44,45,40,41,46,40,46,47
DATA 50,51,56,50,55,56,51,52,56,56,57,52,52,57,53,53,58,57,58,53,59,59,54,52,50,54,55,54,55,59
DATA 53,54,58
DATA 60,61,64,60,64,69,60,69,71,69,70,71,65,66,67,65,67,68,61,64,62,64,62,63
DATA 72,73,77,72,77,76,73,74,77,77,78,74,74,78,75,78,79,75,72,76,79,72,75,79
OBJECT4:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :61
'VERTICES : 61
DATA -35,-10,0,-35,10,0,-25,10,0,-25,7,0,-32,7,0,-32,-7,0,-25,-7,0,-25,-10,0
DATA -23,-10,0,-23,10,0,-13,10,0,-13,-10,0,-20,-7,0,-20,7,0,-16,7,0,-16,-7,0,-11,-10,0,-11,10,0
DATA -8,10,0,-8,5,0,-1,5,0,-1,-10,0,-8,-7,0,-8,2,0,-4,2,0,-4,-7,0,1,-10,0
DATA 1,10,0,4,10,0,4,5,0,11,5,0,11,-10,0,4,-7,0,4,2,0,8,2,0,8,-7,0
DATA 13,-10,0,13,10,0,24,10,0,24,7,0,16,7,0,16,1,0,22,1,0,22,-1,0,16,-1,0
DATA 16,-7,0,24,-7,0,24,-10,0,26,-10,0,26,10,0,29,10,0,29,-7,0,32,-7,0
DATA 30,0,0,32,7,0,32,10,0,35,10,0,35,7,0,33,0,0,35,-7,0,35,-10,0
'
' FACES : 49
DATA 1,2,5,1,6,5,2,3,4,2,4,5,1,8,6,6,8,7
DATA 9,10,14,9,14,13,10,11,14,14,15,11,15,11,12,15,12,16,9,12,13,13,12,16
DATA 17,18,19,17,23,19,20,21,25,24,20,25,21,22,25,25,26,22,17,22,23,22,23,26
DATA 37,38,41,37,41,46,37,46,48,46,47,48,38,39,40,38,40,41,42,43,44,42,44,45
DATA 49,50,51,49,51,52,49,52,53,49,53,61,61,60,53
DATA 53,54,59,59,60,53,54,55,58,54,58,59,55,56,57,55,57,58
DATA 27,28,29,27,33,29,30,31,34,34,35,31,31,32,35,35,36,32,27,32,36,27,33,36
OBJECT5:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70
'VERTICES: 70
DATA -35,-10,0,-35,10,0,-32,10,0,-32,-7,0,-31,-7,0,-31,10,0,-29,10,0,-29,-7,0,-28,-7,0,-28,10,0
DATA -25,10,0,-25,-7,0,-28,-10,0,-23,-10,0,-23,10,0,-20,10,0,-20,5,0,-16,5,0,-16,10,0,-13,10,0
DATA -13,-10,0,-20,-6,0,-20,1,0,-16,1,0,-16,-6,0,-11,-10,0,-11,2,0,-4,2,0,-4,6,0,-11,6,0
DATA -11,10,0,-1,10,0,-1,-2,0,-8,-2,0,-8,-6,0,-1,-6,0,-1,-10,0,1,-10,0,1,-6,0,4,-6,0
DATA 4,10,0,8,10,0,8,-6,0,11,-6,0,11,-10,0,13,-10,0,13,10,0,23,10,0,23,6,0
DATA 16,6,0,16,1,0,21,1,0,21,-1,0,16,-1,0,16,-6,0,23,-6,0,23,-10,0,25,-10,0,25,10,0
DATA 28,10,0,28,-7,0,32,-7,0,30,0,0,32,6,0,32,10,0,35,10,0,35,6,0,33,0,0,35,-7,0,35,-10,0
'FACES: 48
DATA 1,2,3,1,3,4,1,4,12,1,12,13,5,6,7,5,7,8,9,10,11,9,11,12
DATA 14,15,16,14,16,22,14,22,25,14,25,21,19,20,21,25,21,19,17,18,24,17,24,23
DATA 26,27,34,26,34,35,26,36,35,26,36,37,27,28,33,27,33,34,28,29,32,28,32,33,30,31,32,30,32,29
DATA 38,39,44,38,44,45,40,41,42,40,42,43
DATA 46,47,50,46,50,55,46,55,56,46,56,57,51,52,53,51,53,54,47,48,49,47,49,50
DATA 58,59,60,58,60,61,58,70,69,58,69,61,62,63,68,62,68,69,63,64,67,63,67,68,64,65,66,64,66,67
OBJECT6:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :78
DATA -41,-10,0,-41,10,0,-31,10,0,-31,7,0,-38,7,0,-38,-7,0,-31,-7,0,-31,-10,0,-29,-10,0,-29,10,0,-19,10,0,-19,-10,0
DATA -26,-7,0,-26,7,0,-22,7,0,-22,-7,0,-17,-10,0,-17,10,0,-14,10,0,-14,-7,0,-10,-7,0,-12,0,0,-10,6,0,-10,10,0
DATA -7,10,0,-7,6,0,-9,0,0,-7,-7,0,-7,-10,0,-5,-10,0,-5,2,0,2,2,0,2,6,0,-5,6,0,-5,10,0,5,10,0
DATA 5,-2,0,-2,-2,0,-2,-6,0,5,-6,0,5,-10,0,7,-10,0,7,10,0,10,10,0,10,5,0,14,5,0,14,10,0,17,10,0
DATA 17,-10,0,10,-7,0,10,1,0,14,1,0,14,-7,0,19,-10,0,19,-6,0,23,-6,0,23,6,0,19,6,0,19,10,0,29,10,0
DATA 29,6,0,25,6,0,25,-6,0,29,-6,0,29,-10,0,31,-10,0,31,10,0,34,10,0,34,-7,0,38,-7,0,36,0,0,38,6,0
DATA 38,10,0,41,10,0,41,6,0,39,0,0,41,-7,0,41,-10,0
'FACES: 58
DATA 1,2,5,1,5,6,1,6,7,1,7,8,2,3,4,2,4,5
DATA 9,10,14,9,13,14,9,13,16,9,16,12,10,11,14,14,11,15,11,12,15,15,12,16
DATA 17,18,19,17,19,20,17,20,28,17,28,29,21,28,27,21,27,22,22,23,26,22,26,27,23,24,25,23,26,25
DATA 30,31,38,30,38,39,30,39,40,30,40,41,31,32,37,31,37,38,32,33,36,32,36,37,33,34,35,33,35,36
DATA 42,43,44,42,44,50,42,50,53,42,53,49,47,48,49,47,49,53,45,46,52,45,51,52
DATA 54,55,64,54,64,65,56,57,62,56,62,63,58,59,60,58,60,61
DATA 66,67,68,68,69,66,69,77,78,66,69,78,70,71,76,70,76,77,71,72,75,71,75,76,72,73,74,72,74,75
OBJECT7:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :42
DATA -23,-10,0,-23,10,0,-20,10,0,-20,-7,0,-19,-7,0,-19,10,0,-17,10,0,-17,-7,0,-16,-7,0,-16,10,0,-13,10,0
DATA -13,-7,0,-16,-10,0,-11,-10,0,-11,10,0,-1,10,0,-1,-10,0,-8,-7,0,-8,7,0,-4,7,0,-4,-7,0
DATA 1,-10,0,1,10,0,11,10,0,11,6,0,8,0,0,11,-6,0,11,-10,0,4,-7,0,4,7,0,8,7,0,5,0,0,8,-7,0
DATA 13,-10,0,16,5,0,16,10,0,20,10,0,20,5,0,23,-10,0,20,-10,0,18,-2,0,16,-10,0
'FACES:33
DATA 1,2,3,1,3,4,1,4,12,1,13,12,5,6,7,5,7,8,9,10,11,9,11,12
DATA 14,15,19,14,19,18,14,18,21,14,21,17,15,16,19,19,16,20,20,21,17,20,16,17
DATA 22,23,30,22,29,30,22,29,27,22,27,28,23,24,25,23,30,25,33,27,26,26,32,33,31,32,26,31,26,25
DATA 34,35,42,41,42,35,38,39,40,38,40,41,35,38,41,35,36,37,35,37,38
-
Oh, and here's a very! basic editor (no apologies for this!)
See attachment..
-
FYI:
When compiled with -exx I am getting an out of bounds error at:
FOR L=1 TO FACE_READ
TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC)
NEXT
This is in the object draw code.
-
Thanks Rick. It's written on an old version of FB again (shame on me) and probably has bugs.