setupbase: mov objbase[ 0*16+ 0],offset cube1a mov objbase[ 0*16+ 4],offset cube1b mov objbase[ 0*16+ 8],offset cube1c mov objbase[ 0*16+12],offset cube1d mov objbase[ 1*16+ 0],offset cube2a mov objbase[ 1*16+ 4],offset cube2b mov objbase[ 1*16+ 8],offset cube2c mov objbase[ 1*16+12],offset cube2d mov objbase[ 2*16+ 0],offset ringa mov objbase[ 2*16+ 4],offset ringb mov objbase[ 2*16+ 8],offset ringc mov objbase[ 2*16+12],offset ringd mov objbase[ 3*16+ 0],offset rubinea mov objbase[ 3*16+ 4],offset rubineb mov objbase[ 3*16+ 8],offset rubinec mov objbase[ 3*16+12],offset rubined mov objbase[ 4*16+ 0],offset diamonda mov objbase[ 4*16+ 4],offset diamondb mov objbase[ 4*16+ 8],offset diamondc mov objbase[ 4*16+12],offset diamondd mov objbase[ 5*16+ 0],offset cube3a mov objbase[ 5*16+ 4],offset cube3b mov objbase[ 5*16+ 8],offset cube3c mov objbase[ 5*16+12],offset cube3d ret ; shape data can be almost as large as you need it 'till it crashes. try a cube ; 20000x20000x20000. calculations use 32 bit registers and can handle ; up to 16 bit locations. keeping the object size small will allow a larger ; visible space. but larger objects will allow you to get closer with more ; accuracy in the mathematics of rotations. ; ; list of command bits to date: ; ; 00000001 - 1 steel texture for surface 0 = none, colour offset determines ; screen offset for texture. eg 16+7 will use colour block 16-31 ; but make the sine wave texture 14 (7*2) lines down. this is so ; all sine wave textures do not appear on the same line. ; 00000010 - 2 side is always visible no matter angle ; 00000100 - 4 side is always visible but other side has high byte colour ; note: if this is used, bits 2 and 6 must NOT be set (+2 or +32) ; 00001000 - 8 if other side IS used (above), this determines if steel texture ; 00010000 - 16 if used, defines a line (must be set to define a true line) ; 00100000 - 32 if set, defines a bitmap,eg: point #, bitmap #, x scale,y scale ; 01000000 - 64 defines a single point; must be repeated! eg dw 64,col,3,3 ; 10000000 - xx not used, entire high byte also not used (define your own) ; ; there are two kinds of bitmaps and points. those which are inside objects ; and those which are seperate objects themselvs. if userotate object command ; is set to 32 or 64, then the entire object is considered to be either a point ; or bitmap. but if userotate is not set this way, then a normal object is ; drawn and bitmaps then come from within the object definitions (below). this ; way, bitmaps and points can be either part of a larger object, or they are ; computed fast on their own. (eg explosions and bullets as seperate objects) ; ; note: when writing surface descriptions, try to make the first value unique ; from any other first value. this way, the sort routine will give a more ; accurate sorting of sides. eg 1,3,6,1 2,4,1,2 rather than 1,3,6,1 1,2,4,1 align 4 cube1a: cube1b: cube1c: cube1d dw 8 ; how many points dw 6 ; how many surfaces ; x y z dw -70, 70, 70 ;0 dw -70,-70, 70 ;1 dw 70,-70, 70 ;2 dw 70, 70, 70 ;3 dw -70, 70,-70 ;4 dw -70,-70,-70 ;5 dw 70,-70,-70 ;6 dw 70, 70,-70 ;7 dw 1,16*3+8 ,0,1,2,3,0 ; surface connection data, and colours dw 0,16*2+4 ,7,6,5,4,7 ; end point=start point means done side dw 0,16*1+15 ,3,2,6,7,3 dw 1,16*2+12 ,4,5,1,0,4 dw 0,16*3+0 ,4,0,3,7,4 dw 1,16*4+10 ,1,5,6,2,1 cube2a: cube2b: cube2c: cube2d dw 8 ; how many points dw 9 ; how many surfaces ; x y z dw -70, 70, 70 ;0 dw -70,-70, 70 ;1 dw 70,-70, 70 ;2 dw 70, 70, 70 ;3 dw -70, 70,-70 ;4 dw -70,-70,-70 ;5 dw 70,-70,-70 ;6 dw 70, 70,-70 ;7 dw 4+8, 16*3+8+(16*1+1)*256, 0,1,2,3,0 ; surface connection data, and colours dw 16,16*2+4 ,5,1,5 ; end point=start point means done side dw 16,16*1+15 ,6,2,6 dw 16,16*2+12 ,7,3,7 dw 16,16*3+0 ,4,0,4 dw 16,16*4+10 ,5,6,5 dw 16,16*4+10 ,6,7,6 dw 16,16*4+10 ,7,4,7 dw 16,16*4+10 ,4,5,4 cube3a: cube3b dw 45 ; how many points dw 45 ; how many surfaces ; x y z dw -70, 70, 70 ;0 dw -70, 70, 35 ;1 dw -70, 70, 0 ;2 dw -70, 70,-35 ;3 dw -70,-70, 70 ;4 dw -70,-70, 35 ;5 dw -70,-70, 0 ;6 dw -70,-70,-35 ;7 dw 70,-70, 70 ;8 dw 70,-70, 35 ;9 dw 70,-70, 0 ;10 dw 70,-70,-35 ;11 dw 70, 70, 70 ;12 dw 70, 70, 35 ;13 dw 70, 70, 0 ;14 dw 70, 70,-35 ;15 dw -70, 70,-70 ;16 dw -70, 35,-70 ;17 dw -70, 0,-70 ;18 dw -70,-35,-70 ;19 dw -70,-70,-70 ;20 dw 70, 70,-70 ;21 dw 70, 35,-70 ;22 dw 70, 0,-70 ;23 dw 70,-35,-70 ;24 dw 70,-70,-70 ;25 dw -70, 35, 70 ;26 dw -70, 0, 70 ;27 dw -70,-35, 70 ;28 dw 70, 35, 70 ;29 dw 70, 0, 70 ;30 dw 70,-35, 70 ;31 dw -35,-70, 70 ;32 dw 0,-70, 70 ;33 dw 35,-70, 70 ;34 dw -35,-70,-70 ;35 dw 0,-70,-70 ;36 dw 35,-70,-70 ;37 dw -35, 70,-70 ;38 dw 0, 70,-70 ;39 dw 35, 70,-70 ;40 dw -35, 70, 70 ;41 dw 0, 70, 70 ;42 dw 35, 70, 70 ;43 dw 0,0,0 ; 44 dw 32,00,0,5,5 dw 32,01,0,5,5 dw 32,02,0,5,5 dw 32,03,0,5,5 dw 32,04,0,5,5 dw 32,05,0,5,5 dw 32,06,0,5,5 dw 32,07,0,5,5 dw 32,08,0,5,5 dw 32,09,0,5,5 dw 32,10,0,5,5 dw 32,11,0,5,5 dw 32,12,0,5,5 dw 32,13,0,5,5 dw 32,14,0,5,5 dw 32,15,0,5,5 dw 32,16,0,5,5 dw 32,17,0,5,5 dw 32,18,0,5,5 dw 32,19,0,5,5 dw 32,20,0,5,5 dw 32,21,0,5,5 dw 32,22,0,5,5 dw 32,23,0,5,5 dw 32,24,0,5,5 dw 32,25,0,5,5 dw 32,26,0,5,5 dw 32,27,0,5,5 dw 32,28,0,5,5 dw 32,29,0,5,5 dw 32,30,0,5,5 dw 32,31,0,5,5 dw 32,32,0,5,5 dw 32,33,0,5,5 dw 32,34,0,5,5 dw 32,35,0,5,5 dw 32,36,0,5,5 dw 32,37,0,5,5 dw 32,38,0,5,5 dw 32,39,0,5,5 dw 32,40,0,5,5 dw 32,41,0,5,5 dw 32,42,0,5,5 dw 32,43,0,5,5 dw 32,44,0,30,30 cube3c: cube3d dw 45 ; this is same as above but since bitmaps can't be seen dw 45 ; from far, i use the same cube with points instead. ; x y z dw -70, 70, 70 ;0 ; this is an example of how to use the dw -70, 70, 35 ;1 ; different resolutions based on distance dw -70, 70, 0 ;2 ; you could get rid of half of these points dw -70, 70,-35 ;3 ; and still have it "look" the same because dw -70,-70, 70 ;4 ; of the great distance at which this will dw -70,-70, 35 ;5 ; be seen dw -70,-70, 0 ;6 dw -70,-70,-35 ;7 dw 70,-70, 70 ;8 dw 70,-70, 35 ;9 dw 70,-70, 0 ;10 dw 70,-70,-35 ;11 dw 70, 70, 70 ;12 dw 70, 70, 35 ;13 dw 70, 70, 0 ;14 dw 70, 70,-35 ;15 dw -70, 70,-70 ;16 dw -70, 35,-70 ;17 dw -70, 0,-70 ;18 dw -70,-35,-70 ;19 dw -70,-70,-70 ;20 dw 70, 70,-70 ;21 dw 70, 35,-70 ;22 dw 70, 0,-70 ;23 dw 70,-35,-70 ;24 dw 70,-70,-70 ;25 dw -70, 35, 70 ;26 dw -70, 0, 70 ;27 dw -70,-35, 70 ;28 dw 70, 35, 70 ;29 dw 70, 0, 70 ;30 dw 70,-35, 70 ;31 dw -35,-70, 70 ;32 dw 0,-70, 70 ;33 dw 35,-70, 70 ;34 dw -35,-70,-70 ;35 dw 0,-70,-70 ;36 dw 35,-70,-70 ;37 dw -35, 70,-70 ;38 dw 0, 70,-70 ;39 dw 35, 70,-70 ;40 dw -35, 70, 70 ;41 dw 0, 70, 70 ;42 dw 35, 70, 70 ;43 dw 0,0,0 ; 44 dw 64,28,00,00 dw 64,28,01,01 dw 64,28,02,02 dw 64,28,03,03 dw 64,28,04,04 dw 64,28,05,05 dw 64,28,06,06 dw 64,28,07,07 dw 64,28,08,08 dw 64,28,09,09 dw 64,28,10,10 dw 64,28,11,11 dw 64,28,12,12 dw 64,28,13,13 dw 64,28,14,14 dw 64,28,15,15 dw 64,28,16,16 dw 64,28,17,17 dw 64,28,18,18 dw 64,28,19,19 dw 64,28,20,20 dw 64,28,21,21 dw 64,28,22,22 dw 64,28,23,23 dw 64,28,24,24 dw 64,28,25,25 dw 64,28,26,26 dw 64,28,27,27 dw 64,28,28,28 dw 64,28,29,29 dw 64,28,30,30 dw 64,28,31,31 dw 64,28,32,32 dw 64,28,33,33 dw 64,28,34,34 dw 64,28,35,35 dw 64,28,36,36 dw 64,28,37,37 dw 64,28,38,38 dw 64,28,39,39 dw 64,28,40,40 dw 64,28,41,41 dw 64,28,42,42 dw 64,28,43,43 dw 64,28,44,44 ringa: ringb: ringc: ringd dw 32 dw 32 ; x y z dw -40, 80, 30 ; 0 dw -80, 40, 30 ; 1 dw -80,-40, 30 ; 2 dw -40,-80, 30 ; 3 dw 40,-80, 30 ; 4 dw 80,-40, 30 ; 5 dw 80, 40, 30 ; 6 dw 40, 80, 30 ; 7 dw -40, 20, 45 ; 8 dw -40,-20, 45 ; 9 dw -20,-40, 45 ;10 dw 20,-40, 45 ;11 dw 40,-20, 45 ;12 dw 40, 20, 45 ;13 dw 20, 40, 45 ;14 dw -20, 40, 45 ;15 dw -40, 80,-30 ;16 dw -80, 40,-30 ;17 dw -80,-40,-30 ;18 dw -40,-80,-30 ;19 dw 40,-80,-30 ;20 dw 80,-40,-30 ;21 dw 80, 40,-30 ;22 dw 40, 80,-30 ;23 dw -40, 20,-45 ;24 dw -40,-20,-45 ;25 dw -20,-40,-45 ;26 dw 20,-40,-45 ;27 dw 40,-20,-45 ;28 dw 40, 20,-45 ;29 dw 20, 40,-45 ;30 dw -20, 40,-45 ;31 dw 0,16+7 ,1,8,15,0,1 dw 0,16+9 ,2,9,8,1,2 dw 0,16+5 ,3,10,9,2,3 dw 0,16+3 ,4,11,10,3,4 dw 0,16+6 ,5,12,11,4,5 dw 0,16+9 ,6,13,12,5,6 dw 0,16+7 ,7,14,13,6,7 dw 0,16+11 ,0,15,14,7,0 dw 0,16+7 ,0,16,17,1,0 dw 0,16+6 ,1,17,18,2,1 dw 0,16+5 ,2,18,19,3,2 dw 0,16+4 ,3,19,20,4,3 dw 0,16+13 ,4,20,21,5,4 dw 0,16+1 ,5,21,22,6,5 dw 0,16+15 ,6,22,23,7,6 dw 0,16+14 ,7,23,16,0,7 dw 0,16+9 ,9,25,24,8,9 dw 0,16+13 ,10,26,25,9, 10 dw 0,16+12 ,11,27,26,10,11 dw 0,16+10 ,12,28,27,11,12 dw 0,16+6 ,13,29,28,12,13 dw 0,16+7 ,14,30,29,13,14 dw 0,16+8 ,14,15,31,30,14 dw 0,16+5 ,31,15,8,24,31 dw 0,16+6 ,17,24,25,18,17 dw 0,16+9 ,18,25,26,19,18 dw 0,16+8 ,19,26,27,20,19 dw 0,16+7 ,20,27,28,21,20 dw 0,16+8 ,21,28,29,22,21 dw 0,16+12 ,22,29,30,23,22 dw 0,16+15 ,23,30,31,16,23 dw 0,16+7 ,16,31,24,17,16 diamonda: diamondb: diamondc: diamondd dw 13 dw 17 dw -100, 50, 0 dw -100, -50, 0 dw -50,-100, 0 dw 50,-100, 0 dw 100, -50, 0 dw 100, 50, 0 dw 50, 100, 0 dw -50, 100, 0 dw -50, 50, 40 dw -50, -50, 40 dw 50, -50, 40 dw 50, 50, 40 dw 0, 0,-120 dw 0,32+7 ,0,1,9,8,0 dw 0,32+9 ,9,2,3,10,9 dw 0,32+5 ,11,10,4,5,11 dw 0,32+3 ,7,8,11,6,7 dw 0,32+6 ,1,2,9,1 dw 0,32+9 ,10,3,4,10 dw 0,32+7 ,6,11,5,6 dw 0,32+11 ,0,8,7,0 dw 0,32+7 ,8,9,10,11,8 dw 0,32+6 ,7,12,0,7 dw 0,32+5 ,0,12,1,0 dw 0,32+4 ,1,12,2,1 dw 0,32+13 ,2,12,3,2 dw 0,32+1 ,3,12,4,3 dw 0,32+15 ,4,12,5,4 dw 0,32+14 ,5,12,6,5 dw 0,32+9 ,6,12,7,6 rubinea: rubineb: rubinec: rubined dw 16 dw 18 dw -100, 50, 0 dw -100, -50, 0 dw -50,-100, 0 dw 50,-100, 0 dw 100, -50, 0 dw 100, 50, 0 dw 50, 100, 0 dw -50, 100, 0 dw -50, 50, 40 dw -50, -50, 40 dw 50, -50, 40 dw 50, 50, 40 dw -50, 50, -40 dw -50, -50, -40 dw 50, -50, -40 dw 50, 50, -40 dw 1,32+7 ,0,1,9,8,0 dw 0,32+9 ,9,2,3,10,9 dw 1,32+11 ,11,10,4,5,11 dw 0,32+3 ,7,8,11,6,7 dw 1,32+4 ,1,2,9,1 dw 0,32+9 ,10,3,4,10 dw 1,32+8 ,6,11,5,6 dw 0,32+11 ,0,8,7,0 dw 1,32+3 ,8,9,10,11,8 dw 0,32+6 ,5,4,14,15,5 dw 1,32+5 ,14,3,2,13,14 dw 0,32+4 ,12,13,1,0,12 dw 1,32+12 ,6,15,12,7,6 dw 0,32+1 ,4,3,14,4 dw 1,32+15 ,13,2,1,13 dw 0,32+14 ,7,12,0,7 dw 1,32+9 ,5,15,6,5 dw 0,32+13 ,15,14,13,12,15