wmail: formatting improvements.
[dockapps.git] / wmdots / old_dos_demo / dow.a
blob85bc6d91637edf782f316fa277218f886863b598
1 ;Dogs of war demo by OnlyMe (now called I440r :)
2 ;-------------------------------------------------------------------------
4 ;Assembles with A386.COM (Registered A86).
6 ;-------------------------------------------------------------------------
7 ;Equates
9 MaxPoints equ 125 ;Maximum number of points in an object
10 BumpMap equ Bumps+320 ;Pointer to second scan line of bump map
11 SpotX equ 160 ;Position of static bump map spotlight
12 SpotY equ 80
14 ;-------------------------------------------------------------------------
15 ;A based structure (See A86 documentation for explanation)
17 struc [bx] ;Structure does NOT need a name
18 Counter dw ? ;Countdown to change
19 Reset dw ? ;Counter reset value
20 Position dw ? ;Points to item being modified
21 Delta dw ? ;Speed of change (also direction)
22 Upper dw ? ;Upper limit for position
23 Lower dw ? ;Lower limit for position
24 ends
26 ;-------------------------------------------------------------------------
27 ;Un-Initialised data
29 data segment
31 XAngle dw ? ;Angles of rotation for each axis
32 YAngle dw ? ; higher numbers rotate faster
33 ZAngle dw ?
35 X dw ? ;Coordinates of point being calculated
36 Y dw ?
37 Z dw ?
39 XSin dw ? ;Sin and Cos for each axis angle of rotation
40 YSin dw ?
41 ZSin dw ?
42 XCos dw ?
43 YCos dw ?
44 ZCos dw ?
46 NumPoints dw ? ;Number of points in current object
48 ; V---MaxPoints
49 Trail1: dw 125 dup ? ;Display address of previous 8 positions for
50 Trail2: dw 125 dup ? ; each point being rotated. We only erase a
51 Trail3: dw 125 dup ? ; points 8'th previous position. This makes
52 Trail4: dw 125 dup ? ; the points leave a trail 7 pixles long
53 Trail5: dw 125 dup ?
54 Trail6: dw 125 dup ?
55 Trail7: dw 125 dup ?
56 Trail8: dw 125 dup ?
58 CharP dw ? ;Pointer to font def for scrollie char
59 BumpX dw ? ;Bump map coordinates being calculated
60 BumpY dw ?
62 ;-------------------------------------------------------------------------
63 ;A copy of the ROM font moved here so we can reference it using DS
65 Font: db 256*8 dup ?
67 ;-------------------------------------------------------------------------
68 ;Note:
70 ; The following buffer is the whole of the bump map. There is 1 scan
71 ;line of ZERO data above and below the area that will contain the bumps.
73 ;Therefore the bumpmap is at Bumps+320 (See Equates Above)
75 Bumps: db 320*18 dup ?
77 ;-------------------------------------------------------------------------
78 ;Da Beeph (moo)
80 code segment
82 Start:
83 jmp Main ;Do it...
85 ;-------------------------------------------------------------------------
86 ;Pre initialised data...
88 Shape dw Cube ;Pointer to current object
90 HalfH dw 160 ;Screen coordinates for centre of object
91 HalfV dw 100
93 XOff dw 150 ;Position of object in world space
94 YOff dw 150
95 ZOff dw 800
97 DeltaX dw 5 ;Rotational speeds on each axis
98 DeltaY dw 4
99 DeltaZ dw 7
101 ;-------------------------------------------------------------------------
102 ;Modifiers: Tables follows this format: (as per above based structure)
104 ; Counter Count down to next speed/position change
105 ; Retet Value to reset counter to
106 ; Position Pointer to data item to modify
107 ; Delta Ammount to change item (also direction)
108 ; Upper Upper limit fot item
109 ; Lower Lower limit for item
111 W1: dw 30,30,offset DeltaX,2,15,2 ;Modifies X Rotational speed
112 W2: dw 20,20,offset DeltaY,-2,12,4 ;Modifies Y Rotational speed
113 W3: dw 40,40,offset DeltaZ,2,10,7 ;Modifies Z Rotational speed
114 W4: dw 02,02,offset ZOff,-3,800,180 ;Zooms object in and out of screen
116 ;-------------------------------------------------------------------------
117 ;Bump mapped scrollie banner text stuffz
119 Bannerp dw Banner ;Points to next character
120 CharColumn db 080 ;Mask for next colunn of font def
122 Banner:
123 db ' *** The Dogs Of WAR demo by OnlyMe! *** '
124 db 'Begin! '
126 Begin:
127 db 'Oh the dogs they had a meeting '
128 db 'They came from near and far '
129 db 'And some dogs came by motor bus '
130 db 'And some by motor car '
132 db 0
133 dw Flies,Hall
135 Hall:
136 db 'On entering the meeting hall '
137 db 'Each dog could take a look '
138 db 'Where he had to hang his asshole '
139 db 'Up high upon a hook '
141 db 0
142 dw Cross,Fire
144 Fire:
145 db 'And when they were assembled '
146 db 'Each canine son and sire '
147 db 'Some dirty bulldog son of a bitch '
148 db 'Jumped up and hollared FIRE '
150 db 0
151 dw Square,Panic
153 Panic:
154 db 'All was in a panic '
155 db 'Twas hell upon to look '
156 db 'Each doggie grabbed at random '
157 db 'An asshole from a hook '
159 db 0
160 dw Cube,Sore
162 Sore:
163 db 'Now the assholes were all mixed up '
164 db 'Which made each doggie sore '
165 db 'To have to wear another dogs ass '
166 db 'He''d never worn before '
168 db 0
169 dw Star,Bone
171 Bone:
172 db 'And that is why until this day '
173 db 'A dog will drop a bone '
174 db 'To go and smell another dogs ass '
175 db 'To see if it''s his OWN! '
177 db '*** THE END *** ??? '
178 db 'Now what have i forgotz ???? '
179 db 'ERM..... Oh Yea.... '
181 db 'Greetings *** ROTATE *** Out To ~~~~~~ '
183 db 0
184 dw Heart,Catgirl
186 Catgirl:
187 db 'Catgirl - Jeg Elsker DEG - Purrrrrrrrrrrrr :) '
188 db 'Myriaam - Cute Sexy BABE Princess DOLL :) - heheheheheh - '
189 db 'okokokokokokokokokokokokokokokokokokokokokokokokokok '
190 db 'LuvrsCrs - Manager''ess and savior''ess of UnderNUT #CODERS '
191 db '--> '
193 db 0
194 dw Square,Unf
196 Unf:
197 db 'Unf - Fatar - Debonaire - Isomer - Hexsane & MrsHex - '
198 db 'nop - mole - oreo - RatKing - \hatred\ - KBerg - '
199 db 'RyanT - Mafia - Yosha - Jungle - Fid - Binary - '
200 db 'PRIM8 - IiTM - Topanga - Tig2 - deRanged - RuneStar - '
201 db '_RyAn_ - DaParasit - Spansh - CodeX - Wicked - '
202 db 'Likwid - KingTroll - tpanther - ED_Lead - Reptile - '
204 db 0
205 dw Cross,NoIdea
207 NoIdea:
208 db 'Noidea - ^Para^ - Wh0is - Chiew - [QWORD] - LoneWolf - '
209 db 'DaveDavis - PsYkOtIk - ^Ion^ - Weathros - LittleLoc - '
210 db 'MissMilla - Centmo - Entlin - CreepGuy - eom - Xico - '
211 db '^Axe^ & Sturnella - Almighty - o - Zyklon - hammr - '
212 db '|Geo| - '
213 db 'MarkIII (Hi Dad) - Diamond1 & Mermaid1 (Hi Sis1 and Sis2 :) - '
215 db 0
216 dw Flies,Snoo
218 Snoo:
219 db 'Snoo - Queen1 & Truely - Shama - Pink^Rose - Divebum - '
220 db 'DEWDROP - KaDaM2 - Freakmama - mr007 - SIOK - Alih - '
221 db 'Asterix - MoKie - Rats - RoadRoach - masdale - mystie - '
223 db 'e|ectricTom - Techa^ - TX-Cowboy - buch - luth - '
225 db 0
226 dw Cross,Eche
228 Eche:
229 db 'BaBs - Ratty - Lexzy - PJ - Blondii - dew - Kittie - '
230 db '^Kristi - strawbery - grlafraid - Krystal1 - ortho - '
231 db 'Danni_ - Anne^ - brokngrl - keldog - AnGelDevo - '
232 db '^DE^ - Avantyful & Niece babe :) - mauddib - lil_miss - '
233 db 'Eche & Godis^ hehehehe - lowlife - X & W - '
234 db '******** And Everyone else OnlyMe! dun MISSED '
235 db '*** THE END IS NOT NEIGH *** '
236 db '---====*** Begin Again ---> ',0
238 dw Cube,Begin
240 ;-------------------------------------------------------------------------
241 ;Do IT!
243 Main:
244 mov ax,013 ;VGA GFX mode = 320 x 200 x 256
245 int 010
247 mov cx,(320*18)/2 ;Erase bump map buffer
248 mov di,Bumps
249 xor ax,ax
250 rep stosw
252 call GetPalette ;Create shaded palette
253 call GetFont ;Read font data out of ROM into current DS
254 call InitScroll ;Point to font data for first char of banner
256 mov ax,0a000 ;Point ES at video segment
257 mov es,ax
260 call ChangeAngles ;Get next angle of rotation for all axis
261 call GetSinCos ;Calculate Sin and Cos for all rotation angles
262 call DoFrame ;Rotate all points of shape and display
263 call DoScroll ;Scroll text through bump map buffer
264 call DoBump ;Bump map scrolly text and display it
265 call Retrace ;Wait for next raster frame
266 call ErasePoints ;Erase all pixles that are 8 frames old
267 call DoDeltas ;Modify rotational speeds etc
269 in al,060 ;Read keyboard port
270 cmp al,081 ;Escape key released?
271 jne L0
273 ;-------------------------------------------------------------------------
274 ;Exit nicely
276 mov ax,3 ;Back to textmode
277 int 010
278 mov ah,2 ;Place cursor at bottom left of display
279 mov dx,01700
280 xor bx,bx
281 int 010
282 mov dx,AuRevoir
283 mov ah,9
284 int 021
285 mov ah,04c ;Return control to dos
286 int 021
288 ;-------------------------------------------------------------------------
289 ;Do one frame of rotating object. Calculate and plot all points
291 ;DI points to first trail buffer. We store the address of every pixle
292 ;we write into this buffer. When it comes time to erase these pixles we
293 ;do not need to recalculat them. We just collect the address!
295 DoFrame:
296 xor ch,ch ;Clear hi byte of loop counter
297 xor di,di ;Point to start of trail buffer
298 mov si,[Shape] ;Point to object to be rotated
299 mov cl,[si] ;Get number of points
300 mov NumPoints,cx ;We need this count later too...
301 inc si
303 movsx ax,[si] ;Get X coordinate of point
304 mov [X],ax
305 movsx ax,[si+1] ;Get Y coordinate
306 mov [Y],ax
307 movsx ax,[si+2] ;Get Z coordinate
308 mov [Z],ax
309 call Rotate ;Rotate point in 3d
310 call Draw ;Draw this point
311 add si,3 ;Point to next point
312 add di,2 ;point to next slot of trail buffer
313 dec cx
314 jne L0
317 ;-------------------------------------------------------------------------
318 ;Project a single XYZ point into 2D space on screen
320 Draw:
321 mov ax,[YOff] ;YOff * Y / Z+ZOff = Screen Y
322 imul [Y]
323 mov bx,[Z]
324 add bx,[ZOff]
325 idiv bx
326 add ax,[HalfV] ;Centre object on screen
328 cmp dx,0 ;Clip this pixle if outside display area
329 jb short ret
330 cmp ax,200
331 ja short ret
333 mov bx,320 ;Calculate 320 * Y...
334 imul bx
336 mov bx,ax
338 mov ax,[XOff] ;XOff * X / Z+ ZOff = Screen X
339 mov bp,[X]
340 imul bp
341 mov bp,[Z]
342 add bp,[ZOff] ;Distance
343 idiv bp
344 add ax,[HalfH]
346 cmp dx,0 ;Clip pixle if outside display area
347 jb short ret
348 cmp ax,320
349 ja short ret
351 add bx,ax
353 mov ax,-1 ;Generate colour for point based on X Y and Z axis
354 sub ax,[Z] ; of dot
355 xor ax,[X] ;Divides cube into 8 smaller cubes and alternates
356 or ax,[Y] ; light/dark (opposite corners same shade)
357 shr ax,4
358 add ax,[X] ;This addition makes the cube stripey man :)
359 add ax,[Y]
361 es mov [bx],al ;Place a dot with color al
362 mov Trail8[di],bx ;Save address for erase
365 ;-------------------------------------------------------------------------
366 ;Erase pixles that are 8 frames old.
368 ;Every time a pixles is drawn to the display we remember its video
369 ;offset (address). This saves time when we want to erase that dot
370 ;because we dont need to recalculate the address given an XYZ
372 ErasePoints:
373 xor di,di
374 mov cx,MaxPoints
376 mov bx,Trail8[di] ;Pixles added to display on THIS frame
377 ; es dec b[bx] ; Make them less bright
378 xchg bx,Trail7[di] ;Pixles one frame old
379 ; es dec b[bx] ; Make them less bright
380 xchg bx,Trail6[di] ;Etc...
381 ; es dec b[bx]
382 xchg bx,Trail5[di]
383 ; es dec b[bx]
384 xchg bx,Trail4[di]
385 ; es dec b[bx]
386 xchg bx,Trail3[di]
387 ; es dec b[bx]
388 xchg bx,Trail2[di]
389 ; es dec b[bx]
390 xchg bx,Trail1[di] ;Pixles 8 frames old
391 es mov b[bx],0 ;Erase them
392 inc di,2
393 dec cx
394 jne L0
397 ;-------------------------------------------------------------------------
398 ;Rotate a single point in 3D space
400 Rotate:
401 push cx ;Need to keep this....
403 ;Rotate object about X axis (changes Y and Z)
405 ;Y' = Y * Cos(Xang) - Z. Sin(Xang)
406 ;Z' = Y * Sin(Xang) + Z. Cos(Xang)
408 movsx eax,[Z] ;Get Z * Sin(X)
409 movsx ebx,[XSin]
410 mul ebx
411 mov ecx,eax ;Save in cx...
412 movsx eax,[Y] ;Get Y * Cos(x)
413 movsx ebx,[XCos]
414 imul ebx
415 sub eax,ecx ;Get Y * Cos(X) - Z * Sin(X)
416 sar eax,14 ;Sin and Cos Table values are scaled up
417 mov bp,ax ; by 16384. SHR scales results back down
419 ;We just calculated our new Y coordinate. We cant yet overwrite the old
420 ;Y because we still need it to calculated the new Z
422 movsx eax,[Z] ;Get Z * Cos(X) Exact opposite of above!
423 movsx ebx,[XCos]
424 imul ebx
425 mov ecx,eax ;Save value...
426 movsx eax,[Y] ;Get Y * Sin(X)
427 movsx ebx,[XSin]
428 imul ebx
429 add eax,ecx ;Get Y * Sin(X) + Z * Cos(X)
430 sar eax,14 ;Scale results down by 16384
432 mov [Y],bp ;Set newly calculated Y and Z coordinates
433 mov [Z],ax
435 ;Rotate point in Y axis
437 ;X' = X * Cos(Yang) - Z * Sin(Yang)
438 ;Z' = X * Sin(Yang) + Z * Cos(Yang)
440 movsx eax,[Z] ;Following code is very similar to above.
441 movsx ebx,[YSin] ;It rotates the point in the Y axis
442 imul ebx ;I.E. It calculates new X and Z
443 mov ecx,eax
444 movsx eax,[X]
445 movsx ebx,[YCos]
446 imul ebx
447 sub eax,ecx
448 sar eax,14
449 mov bp,ax ;Save new X coord
451 movsx eax,[Z] ;Calculate Z
452 movsx ebx,[YCos]
453 imul ebx
454 mov ecx,eax
455 movsx eax,[X]
456 movsx ebx,[YSin]
457 imul ebx
458 add eax,ecx
459 sar eax,14
461 mov [X],bp ;Set new X and Z for point
462 mov [Z],ax
464 ;Rotate objecct along Z axis
466 ;X' = X * Cos(Zang) - Y * Sin(Zang)
467 ;Y' = X * Sin(Zang) + Y * Cos(Zang)
469 movsx eax,[Y] ;Hmmm isnt this... the same, arent we just
470 movsx ebx,[ZSin] ;doing the same, calculations on in exactly
471 imul ebx ;The same, way but using different
472 mov ecx,eax ;Variables? Couldnt we optimise here ???
473 movsx eax,[X]
474 movsx ebx,[ZCos] ;Answer...
475 imul ebx ;
476 sub eax,ecx ;Yes! But that is a space optimisation
477 sar eax,14 ;Not a speed optimisation. The INLINE
478 mov bp,ax ;method is faster
480 movsx eax,[Y] ;There is also a much better way to do this
481 movsx ebx,[ZCos] ;that is both smaller and faster.
482 imul ebx
483 mov ecx,eax ;I.E. Use a Matrix to rotates points
484 movsx eax,[X] ;This however is much easier to follow
485 movsx ebx,[ZSin] ;and MAFFZ wuzz never my strong suit :)
486 imul ebx
487 add eax,ecx ;Maybe if this gets too.. slow ill use
488 sar eax,14 ;matricies tho :)
490 mov [X],bp
491 mov [Y],ax
492 pop cx
495 ;-------------------------------------------------------------------------
496 ;calculate new angles of rotation for all points (to angles)
498 ;We do NOT rotate a point by 1 degree on one frame and then rotate that
499 ;rotated point by 1 degree in the next. We rotate by 1 degree in the
500 ;first frame, by 2 in the next, by 3 in the next etc.
502 ;Every time a point is rotated there is a slight ammount of error in our
503 ;calculation. If we rotated previously rotated points we would accumulate
504 ;errors on each rotation of the point and our object would distort.
506 ;By rotating the SAME points (i.e the original shape) on every frame but
507 ;by different ammounts each time, we never distort our shape by more
508 ;than ONE rotations worth of error (which u cant see :)
510 ChangeAngles:
511 mov ax,[DeltaX] ;Adjust X angles of rotation
512 add [XAngle],ax
513 mov ax,[DeltaY] ;And Y
514 add [YAngle],ax
515 mov ax,[DeltaZ] ;And Z
516 add [ZAngle],ax
519 ;-------------------------------------------------------------------------
520 ;Get Sin and Cos of all 3 angles of rotation.
522 GetSinCos:
523 mov ax,[XAngle] ;Get angle
524 call SinCos ;Get Sin and Cos
525 mov [XSin],ax ;Save em!
526 mov [XCos],bx
528 mov ax,[YAngle] ;Same but different :)
529 call SinCos
530 mov [YSin],ax
531 mov [YCos],bx
533 mov ax,[ZAngle] ;Same but different :)
534 call SinCos
535 mov [ZSin],ax
536 mov [ZCos],bx
539 ;-------------------------------------------------------------------------
540 ;This moves a value between two limits at a specific rate.
542 ;This code uses the structure defined at the top of the source file.
544 ;The structure is defined as...
546 ; struc [bx]
548 ;This makes the address in BX the base of the structure. A86 now allows
549 ;us to just name the structure element without reference to BX, This makes
550 ;the code easier to read if you understand the mechanism but impossible to
551 ;follow if you dont :)
553 ;Where you see a something like
555 ; dec Counter
557 ;read....
559 ; dec Counter[bx]
562 DoDeltas:
563 mov bx,W1 ;Modify X rotation
564 call >L0
565 mov bx,W2 ;Modify Y rotation
566 call >L0
567 mov bx,W3 ;Modify Z rotation
568 call >L0
569 mov bx,W4 ;Zoom in and out
572 dec Counter ;Count down to next change
573 jne ret
574 mov ax,Reset ;Counter hit ZERO. Reset it
575 mov Counter,ax
576 mov ax,Delta ;Get rate. of change (also direction)
577 mov si,Position ;Get pointer to variable to modify
578 add ax,[si] ;Add delta to variable
579 mov [si],ax ;Store back
580 cmp ax,Upper ;Did variable reach upper limit?
581 jl >L2
583 neg Delta ;Change direction!
586 cmp ax,Lower ;Did variable reach lower limit?
587 jl L1
590 ;-------------------------------------------------------------------------
591 ;MOA's bump mapping routine. (Yea im uzing this again hehe I like it :)
592 ;-------------------------------------------------------------------------
594 DoBump:
595 mov ax,0a000 ;Point to video
596 mov es,ax
598 mov si,BumpMap+320*16 ;Point to end of last line of bumpmap
600 mov di,16 ;16 scan lines
601 mov ax,di
602 sub ax,SpotY
603 mov BumpY,ax
605 ;-------------------------------------------------------------------------
608 mov ax,320-2 ;320 Pels per scan
609 mov cx,ax
610 sub ax,SpotX
611 mov BumpX,ax
614 mov ax,-1[si] ;Look... No spotlight :) (Addition by OnlyMe)
615 or al,1[si]
616 or ax,-321[si]
617 or al,321[si]
618 test ax
619 jz >L9
621 xor ah,ah ;Clear scratch registers
622 xor bh,bh
623 mov al,[si+1] ;Read bump heights to left and right of this bump
624 mov bl,[si-1]
625 sub ax,bx ;Compute differenct
626 sub ax,BumpX ;I think this gets a 2D normal (erm)
628 xor ax,dx
629 sub ax,dx ;But Maff izznt my strong suit
630 mov bx,07f
631 sub bx,ax
632 mov ax,bx
634 not dx
635 and bx,dx
636 push bx
638 xor ah,ah ;When i understand how this code actually
639 xor bh,bh ; works ill add propper comments. Maybe someone
640 mov al,[si+0141] ; can fill me in eh
641 mov bl,[si-0140]
642 sub ax,bx
643 sub ax,BumpY
645 xor ax,dx
646 sub ax,dx
647 mov bx,07F
648 sub bx,ax
649 mov ax,bx
651 not dx
652 and bx,dx
654 pop ax
655 mul bl
656 shr ax,6+2
659 ; shr ax,2
660 ; add ax,5
661 es mov 0e600-BumpMap[si],al
663 dec BumpX
664 dec si
665 loop L1
667 dec BumpY
668 sub si,2
669 dec di
670 jnz L0
673 ;-------------------------------------------------------------------------
675 DoScroll:
676 xor si,si ;First pixle row in current column
678 mov bx,BumpMap ;Erm... Actually.... This is wrong... hehehe
679 mov bp,[CharP] ;Point to characters font data
680 mov dh,b[CharColumn] ;Get column mask
682 xor cx,cx ;Assume no bumps (0 pixle)
683 mov al,[bp+si] ;Get character row from font
684 and al,dh ;Mask out all but current column
685 if nz mov cx,03030 ;Raise bumps
686 mov [bx],cx ;Write double width pixle
687 mov 320[bx],cx ;Double height too!
688 add bx,2*320
689 inc si ;Add 1 to row
690 cmp si,8 ;Font is 8 by 8
691 jne L0
693 mov ax,ds
694 mov es,ax
696 mov si,BumpMap ;Scroll bumpmap 2 pixles left
697 mov di,si ;pixles at far left move to far right hehehe
698 add si,2
699 mov cx,320*16/2
700 rep movsw
702 ror CharColumn,1 ;Shift row mask 1
703 jnc short ret ;Wrap round and compute next char
705 InitScroll:
706 mov si,[BannerP] ;Get pointer to next char in banner
707 test b[si] ;End of text?
708 jnz >L0
710 inc si
711 lodsw
712 mov [Shape],ax
713 lodsw
714 mov si,ax
717 xor ah,ah
718 lodsb ;Get text character
719 mov [BannerP],si
720 shl ax,3 ;Compute chars ROM offset
721 add ax,Font
722 mov CharP,ax ;Points to font data for character
725 ;-------------------------------------------------------------------------
726 ;Get a copy of the font data out of ROM into default DS
728 GetFont:
729 mov ax,0f000 ;Point to ROM
730 mov ds,ax
731 mov si,0fa6e ;Offset to font data in ROM
732 mov di,Font
733 mov cx,256*2
734 rep movsw
735 mov ax,cs
736 mov ds,ax
739 ;-------------------------------------------------------------------------
740 ;Write a KEWL purple palette (Shut Up! I like PuRplE :P)
742 GetPalette:
743 mov dx,03C8 ;Write new palette
744 xor cx,cx
745 xor ax,ax
746 out dx,al
747 inc dx
749 mov al,cl ;Select colour number to updata
750 out dx,al ;Write Red
751 xchg ah,al
752 out dx,al ;Write Green (Zero)
753 xchg ah,al
754 out dx,al ;Write Blue
755 inc cl
756 jnz L0
759 ;-------------------------------------------------------------------------
760 ;Shape structure defined as....
762 ; db number-of-points
763 ; db x,y,z of first point
764 ; db x,y,z ... of rest
766 Cube:
767 db 125
768 db -35,-35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45
769 db -35,-15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45
770 db -35, 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45
771 db -35, 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45
772 db -35, 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45
773 db -15,-35,-35,-15,-35,-15,-15,-35, 05,-15,-35, 25,-15,-35, 45
774 db -15,-15,-35,-15,-15,-15,-15,-15, 05,-15,-15, 25,-15,-15, 45
775 db -15, 05,-35,-15, 05,-15,-15, 05, 05,-15, 05, 25,-15, 05, 45
776 db -15, 25,-35,-15, 25,-15,-15, 25, 05,-15, 25, 25,-15, 25, 45
777 db -15, 45,-35,-15, 45,-15,-15, 45, 05,-15, 45, 25,-15, 45, 45
778 db 05,-35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45
779 db 05,-15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45
780 db 05, 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45
781 db 05, 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45
782 db 05, 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45
783 db 25,-35,-35, 25,-35,-15, 25,-35, 05, 25,-35, 25, 25,-35, 45
784 db 25,-15,-35, 25,-15,-15, 25,-15, 05, 25,-15, 25, 25,-15, 45
785 db 25, 05,-35, 25, 05,-15, 25, 05, 05, 25, 05, 25, 25, 05, 45
786 db 25, 25,-35, 25, 25,-15, 25, 25, 05, 25, 25, 25, 25, 25, 45
787 db 25, 45,-35, 25, 45,-15, 25, 45, 05, 25, 45, 25, 25, 45, 45
788 db 45,-35,-35, 45,-35,-15, 45,-35, 05, 45,-35, 25, 45,-35, 45
789 db 45,-15,-35, 45,-15,-15, 45,-15, 05, 45,-15, 25, 45,-15, 45
790 db 45, 05,-35, 45, 05,-15, 45, 05, 05, 45, 05, 25, 45, 05, 45
791 db 45, 25,-35, 45, 25,-15, 45, 25, 05, 45, 25, 25, 45, 25, 45
792 db 45, 45,-35, 45, 45,-15, 45, 45, 05, 45, 45, 25, 45, 45, 45
794 Star:
795 db 65
796 db -35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45, 05
797 db -15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45, 05
798 db 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45, 05
799 db 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45, 05
800 db 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45, 05
801 db 05,-35,-35, 05,-35,-15, 05,-35, 25, 05,-35, 45,-35, 05,-35
802 db 05,-15,-35, 05,-15,-15, 05,-15, 25, 05,-15, 45,-15, 05,-35
803 db 05, 05,-35, 05, 05,-15, 05, 05, 25, 05, 05, 45, 05, 05,-35
804 db 05, 25,-35, 05, 25,-15, 05, 25, 25, 05, 25, 45, 25, 05,-35
805 db 05, 45,-35, 05, 45,-15, 05, 45, 25, 05, 45, 45, 45, 05,-35
806 db -35, 05,-15,-35, 05, 25,-35, 05, 45,-15, 05,-15,-15, 05, 25
807 db -15, 05, 45, 05, 05,-15, 05, 05, 25, 05, 05, 45, 25, 05,-15
808 db 25, 05, 25, 25, 05, 45, 45, 05,-15, 45, 05, 25, 45, 05, 45
810 Flies:
811 db 6
812 db -35,-35,-35,-35,-35, 45, 45, 45,-35, 45, 45, 45, 5,-35, 5
813 db 5, 45, 5
815 Square:
816 db 25
817 db -35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45,-35
818 db -15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45,-35
819 db 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45,-35
820 db 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45,-35
821 db 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45,-35
823 Heart:
824 db 32
825 db -35,-15,-35,-35, 25,-35,-15,-35,-35,-15,-15,-35,-15, 05,-35
826 db -15, 25,-35,-15, 45,-35, 05,-35,-35, 05,-15,-35, 05, 05,-35
827 db 05, 25,-35, 05, 45,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35
828 db 45, 05,-35
829 db -30,-10,-30,-30, 20,-30,-10,-30,-30,-10,-10,-30,-10, 00,-30
830 db -10, 20,-30,-10, 40,-30, 00,-30,-30, 00,-10,-30, 00, 00,-30
831 db 00, 20,-30, 00, 40,-30, 20,-10,-30, 20, 00,-30, 20, 20,-30
832 db 40, 00,-30
834 ;-------------------------------------------------------------------------
835 ;I discovered this one completely by accident. I moved a table from the
836 ;end of this file to somewhere up there... but forgot to move the label
837 ;(hehehe). I was therfor referencing a table that is INCLUDED here by my
838 ;assembler. It had lotsa junk in with it at first but i cleaned that out
839 ;and this was the result. I love this object :) its KEWKL hehehe!
841 Cross:
842 db 75
843 db 000,000,019,000,005,019,000,014,001,000,032,000,000,07D,000
844 db 000,0C9,000,001,05F,001,001,0AB,001,001,0F6,001,002,041,002
845 db 002,08D,002,002,0D8,002,003,023,003,003,005,004,003,06F,003
846 db 003,0BA,003,004,051,004,004,09C,004,004,0E7,004,005,013,006
847 db 005,032,005,005,07D,005,005,0C8,005,006,05E,006,006,0A9,006
848 db 006,0F4,006,007,03F,007,007,08A,007,007,0D5,007,008,000,009
849 db 008,020,008,008,06B,008,008,0B5,008,009,04B,009,009,095,009
850 db 009,0E0,009,00A,009,00B,00A,02A,00A,00A,075,00A,00A,0BF,00A
851 db 00B,054,00B,00D,007,026,00F,002,028,019,009,032,01E,004,037
852 db 022,00B,03B,02C,006,045,02D,001,046,039,008,052,03D,003,056
853 db 043,00A,05C,04B,000,064,04B,005,064,058,007,071,05B,002,074
854 db 064,009,07C,084,008,09C,088,003,0A1,08D,00A,0A6,096,000,0AF
855 db 096,005,0AF,0A3,007,0BC,0A6,002,0BF,0AE,009,0C7,0B5,004,0CE
856 db 0C2,006,0DB,0C4,001,0DD,0CE,008,0E7,0D3,003,0EC,0D8,00A,0F1
857 db 0E1,005,0FA,0E2,000,0FB,0EE,007,007,0F1,002,00A,0F9,009,011
859 ;=========================================================================