home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / HMMMCUBE.SO < prev    next >
Text File  |  2002-12-31  |  19KB  |  732 lines

  1. ; Hhhmm cube.. Shameless ripping ;)
  2. ; A screen for delta requiring ufly.
  3.  
  4. ;======= OBJECT EQUATES ====================================================
  5.  
  6. HmmmCube.SILHOUETTE:    =    1
  7.  
  8. ;======= OBJECT TABLE ======================================================
  9.  
  10. ; Must be first in object!!
  11. HhhmCube.table:
  12.     DC.L    HhhmCube.mainLoop
  13.     DC.L    HhhmCube.init
  14.     DC.L    HhhmCube.setRes
  15.     DC.L    HhhmCube.setClose
  16.     DC.L    HhhmCube.setFar
  17.     DC.L    0
  18.  
  19.     IFND    DEMO_SYSTEM
  20.     INCLUDE    SFLY_DSP.S                ; Include the CPU-DSP engine.
  21.     TEXT
  22.     ENDC
  23.  
  24. ;======= RESOLUTION SETTING ROUTINE ========================================
  25.  
  26. HhhmCube.setRes:
  27.     IFEQ    testmode
  28.     move.l    #rts,vbl_gfx
  29.  
  30.     move.w    monitormode,d0
  31.     cmpi.w    #vga60,d0
  32.     beq.s    .vga60
  33.     cmpi.w    #vga100,d0
  34.     beq.s    .vga100
  35.     cmpi.w    #rgb50,d0
  36.     beq.s    .rgb50
  37. ; Unknown monitormode..
  38.     rts
  39. .vga60:    bra.l    vga60_16bit_320_200
  40. .vga100:bra.l    vga100_16bit_320_200
  41. .rgb50:    bra.l    rgb50_16bit_320_200
  42.     ENDC
  43.     rts
  44.  
  45. ;======= INIT SUBROUTINE ===================================================
  46.  
  47. ; OUTPUT:
  48. ; d0.l: =0: All clear, <0: Error! Not initialized!
  49. HhhmCube.init:
  50.     lea    sine_tbl,a1
  51.     bsr.l    Matrix.init
  52.  
  53. .success:
  54.     moveq    #0,d0
  55.     rts
  56. .error:    moveq    #-1,d0
  57.     rts
  58.  
  59. ;======= REALTIME INIT SUBROUTINE ==========================================
  60.  
  61. HhhmCube.realtimeInit:
  62.     bsr.l    HumanFly.init
  63.  
  64.     lea    Viewport.settingsTable,a0
  65.     move.w    #320,Viewport.XSCREEN(a0)
  66.     move.w    #200,Viewport.YSCREEN(a0)
  67.     move.w    #0,Viewport.XSTART(a0)
  68.     move.w    #0,Viewport.YSTART(a0)
  69.     move.w    #320,Viewport.XEND(a0)
  70.     move.w    #200,Viewport.YEND(a0)
  71.     move.w    #160,Viewport.XCENTER(a0)
  72.     move.w    #100,Viewport.YCENTER(a0)
  73.     move.w    #256+32,Viewport.ASPECT(a0)
  74.     move.w    #$100,Viewport.FOCAL(a0)
  75.     bsr.l    Viewport.update
  76.  
  77.     lea    HmmmCube.textureTable,a0
  78.     bsr.l    Polygon.init
  79.  
  80.     bsr.l    ObjectRegistry.clear
  81.  
  82.     lea    HmmmCube.cube,a0
  83.     move.l    #HmmmCube.cubeEnd-HmmmCube.cube,d0
  84.     bsr.l    ObjectRegistry.set
  85.  
  86.     lea    HmmmCube.blackCube,a0
  87.     move.l    #HmmmCube.blackCubeEnd-HmmmCube.blackCube,d0
  88.     bsr.l    ObjectRegistry.set
  89.  
  90.     lea    HmmmCube.delta,a0
  91.     move.l    #HmmmCube.deltaEnd-HmmmCube.delta,d0
  92.     bsr.l    ObjectRegistry.set
  93.  
  94.     bsr    HhhmCube.setFar
  95.     rts
  96.  
  97. ;======= SCREENINIT SUBROUTINE =============================================
  98.  
  99. HhhmCube.initScreen:
  100.     movea.l    scr,a0
  101.     bsr.l    CLEAR_320200TSCR
  102.     rts
  103.  
  104. ;======= MAINLOOP SUBROUTINE ===============================================
  105.  
  106. HhhmCube.mainLoop:
  107.     move.w    $0468.w,.old468
  108.  
  109.     move.l    frmcnt,d0
  110.     sub.l    lastframecount,d0
  111.     bne.s    .end_realtime_init
  112.     move.l    d0,-(sp)
  113.     bsr    HhhmCube.realtimeInit
  114.     move.l    (sp)+,d0
  115. .end_realtime_init:
  116.     cmpi.l    #3,d0
  117.     bhs.s    .end_screeninit
  118.     bsr    HhhmCube.initScreen
  119. .end_screeninit:
  120.  
  121.     IFNE    0
  122. ; Turn write-alloc and datacache lameness off (better for random access).
  123.     movec    cacr,d0
  124.     move.l    d0,-(sp)
  125.     bclr    #13,d0                ; Disable write-alloc.
  126.     bclr    #8,d0                 ; Disable datacache.
  127.     bset    #11,d0                ; Clear datacache.
  128.     bset    #0,d0                ; Enable instruction-burst.
  129.     movec    d0,cacr
  130.     ENDC
  131.  
  132. ; foreground cube
  133.     move.w    $04BC.w,d0
  134.     move.w    d0,HmmmCube.timeTable
  135.     moveq    #0,d1
  136.     bsr    HmmmCube.paint
  137.  
  138.     IFNE    0
  139. ; Restore cache to original state.
  140.     move.l    (sp)+,d0
  141.     movec    d0,cacr
  142.     ENDC
  143.  
  144.     lea    HmmmCube.timeTable,a0
  145.     move.w    (a0),d0
  146.     move.w    4(a0),(a0)
  147.     move.w    2(a0),4(a0)
  148.     move.w    d0,2(a0)
  149.  
  150.     IFEQ    testmode
  151.     lea    scr,a0
  152.     move.l    (a0)+,d0
  153.     move.l    (a0)+,d1
  154.     move.l    (a0),-4(a0)
  155.     move.l    d0,(a0)
  156.     move.l    d1,-8(a0)
  157.     move.l    d0,d1
  158.     lsr.w    #8,d0
  159.     move.l    d0,$ffff8200.w
  160.     move.b    d1,$ffff820d.w
  161.     ENDC
  162.  
  163.     move.w    .old468(pc),d0
  164.     moveq    #1,d3
  165.     cmpi.w    #vga100,monitormode
  166.     bne.s    .wait
  167.     moveq    #2,d3
  168. .wait:    move.w    $0468.w,d2
  169.     sub.w    d0,d2
  170.     cmp.w    d3,d2
  171.     blt.s    .wait
  172.  
  173.     move.l    frmcnt,d0
  174.     sub.l    lastframecount,d0
  175.     bne.s    .res_done
  176.     bsr    HhhmCube.setRes
  177. .res_done:
  178.  
  179.     rts
  180.  
  181. .old468:DC.W    0
  182.  
  183. ;======= OBJECT SUBROUTINES ================================================
  184.  
  185. HhhmCube.setClose:
  186.     move.w    #1000,HhhmCube.z
  187.     rts
  188.  
  189. HhhmCube.setFar:
  190.     move.w    #3000,HhhmCube.z
  191.     rts
  192.  
  193. ; INPUT:
  194. ; d0.w=time
  195. ; d1.w=object handle
  196. HmmmCube.paint:
  197.     movem.w    d0-d1,-(sp)
  198.  
  199.     movea.l    scr,a0
  200.     bsr.l    Primitive.setScreenbuffer
  201.  
  202.     IFNE    HmmmCube.SILHOUETTE
  203.     movea.l    HmmmCube.shadowAdrAdr,a0    ; a0: log table adrs
  204.     movea.l    (a0),a0                ; a0: current log table
  205.     bsr.l    PrimitiveMesh.newShadowed
  206.     ELSE
  207.     bsr.l    PrimitiveMesh.new
  208.     ENDC
  209.  
  210.     movem.w    (sp),d0-d1
  211.  
  212. ; the cube
  213.     move.w    d0,d1
  214.     move.w    d0,d2
  215.     mulu.w    #3,d1
  216.     lsr.l    d1
  217.     mulu.w    #5,d2
  218.     lsr.l    d2
  219.     bsr.l    Matrix.generate
  220.     move.w    #0,d0
  221.     move.w    #0,d1
  222.     move.w    HhhmCube.z,d2
  223.     bsr.l    Matrix.translate
  224.     bsr.l    Matrix.push
  225.  
  226.     movem.w    (sp),d0-d1
  227.  
  228.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  229.     bsr.l    TransformObject.transform
  230.  
  231. ; delta symbol (inside the cube!)
  232.     movem.w    (sp),d0-d1
  233.     move.w    d0,d1
  234.     move.w    d0,d2
  235.     mulu.w    #11,d0
  236.     lsr.l    #3,d0
  237.     mulu.w    #7,d1
  238.     lsr.l    d1
  239. ;    clr.w    d0
  240. ;    clr.w    d1
  241.     mulu.w    #13,d2
  242.     bsr.l    Matrix.generate
  243.     lea    sine_tbl,a1
  244.     movem.w    (sp),d3-d4
  245.     move.w    d3,d4
  246.     move.w    d3,d5
  247.     mulu.w    #13,d3
  248.     lsr.l    #2,d3
  249.     mulu.w    #17,d4
  250.     lsr.l    #3,d4
  251.     mulu.w    #19,d5
  252.     lsr.l    #3,d5
  253.     Do_SinModulo    d3
  254.     Do_SinModulo    d4
  255.     Do_SinModulo    d5
  256.     Get_Sin    a1,d3,d0
  257.     Get_Sin    a1,d4,d1
  258.     Get_Sin    a1,d5,d2
  259.     asr.w    #7,d0
  260.     asr.w    #7,d1
  261.     asr.w    #7,d2
  262.     bsr.l    Matrix.translate
  263.     bsr.l    Matrix.push
  264.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  265.     moveq    #2,d1
  266.     bsr.l    TransformObject.transform
  267.     bsr.l    Matrix.pop
  268.  
  269.     bsr.l    Matrix.pop
  270.  
  271.  
  272.     movem.w    (sp)+,d0-d1
  273.     tst.w    d1
  274.     bne.s    .skip
  275.     bsr.l    PrimitiveMesh.sortZ
  276. .skip:
  277.     bsr.l    PrimitiveMesh.complete
  278.  
  279. ; parallel shit
  280.  
  281.     IFEQ    HmmmCube.SILHOUETTE
  282.     movea.l    HmmmCube.rectAddressTable,a0
  283.     move.w    (a0)+,d7
  284.     beq.s    .end_restore
  285.     subq.w    #1,d7
  286. .restore_loop:
  287.     move.w    d7,-(sp)
  288.     movem.w    (a0)+,d1/d7
  289.     movem.w    (a0)+,d0/d6
  290.     move.l    a0,-(sp)
  291.     moveq    #$00000000,d4
  292.     bsr.l    Viewport.paintRectangle
  293.     movea.l    (sp)+,a0
  294.     move.w    (sp)+,d7
  295.     dbra    d7,.restore_loop
  296. .end_restore:
  297.     ELSE
  298.     movea.l    HmmmCube.shadowAdrAdr+4,a1    ; a1: phys table adrs
  299.     movea.l    (a1),a1                ; a1: current phys table
  300.     clr.l    d0
  301.     bsr.l    Polygon.clearShadows
  302.     ENDC
  303.  
  304. ; end of parallel shit
  305.  
  306.     movea.l    HmmmCube.rectAddressTable,a0
  307.     bsr.l    PrimitiveMesh.paint
  308.  
  309.     lea    HmmmCube.rectAddressTable,a0
  310.      move.l    (a0)+,d0
  311.     move.l    (a0)+,d1
  312.     move.l    (a0),-(a0)
  313.     move.l    d0,4(a0)
  314.     move.l    d1,-(a0)
  315.  
  316. ;= shadow swapping =
  317.  
  318.     movea.l    HmmmCube.shadowAdrAdr,a0
  319.      move.l    (a0)+,d0
  320.     move.l    (a0)+,d1
  321.     move.l    (a0),-(a0)
  322.     move.l    d0,4(a0)
  323.     move.l    d1,-(a0)
  324.  
  325.     movea.l    HmmmCube.shadowAdrAdr+4,a0
  326.      move.l    (a0)+,d0
  327.     move.l    (a0)+,d1
  328.     move.l    (a0),-(a0)
  329.     move.l    d0,4(a0)
  330.     move.l    d1,-(a0)
  331.  
  332.     move.w    .swapcount(pc),d0
  333.     addq.w    #1,d0
  334.     cmpi.w    #3,d0
  335.     blt.s    .end_swapcount
  336.  
  337. ; Clear count and swap phys/log shadow tables..
  338.     clr.w    d0
  339.     lea    HmmmCube.shadowAdrAdr,a0
  340.     move.l    (a0),d1
  341.     move.l    4(a0),(a0)+
  342.     move.l    d1,(a0)
  343.  
  344. .end_swapcount:
  345.     move.w    d0,.swapcount
  346.  
  347. ;= end shadow swapping =
  348.  
  349.     rts
  350.  
  351. .swapcount:
  352.     DC.W    0
  353.  
  354. ;======= OBJECT DATA =======================================================
  355.  
  356.     DATA
  357.  
  358. HmmmCube.textureTable:
  359.     DC.L    FlareGen.chromeBuffer
  360.     DC.L    0
  361.  
  362. HmmmCube.rectAddressTable:
  363.     DC.L    HmmmCube.rectTable
  364.     DC.L    HmmmCube.rectTable2
  365.     DC.L    HmmmCube.rectTable3
  366.  
  367. HmmmCube.cube:
  368.     DC.W    .vn                ; amount of vertices
  369.     DC.W    .n                ; amount of normals
  370. .start:    DC.W    -800,-800,-800
  371.     DC.W    -800,+800,-800
  372.     DC.W    +800,+800,-800
  373.     DC.W    +800,-800,-800
  374.     DC.W    -680,-680,-800
  375.     DC.W    -680,+680,-800
  376.     DC.W    +680,+680,-800
  377.     DC.W    +680,-680,-800
  378.     DC.W    -680,-680,-680
  379.     DC.W    -680,+680,-680
  380.     DC.W    +680,+680,-680
  381.     DC.W    +680,-680,-680
  382.     DC.W    -800,-680,-680
  383.     DC.W    -800,+680,-680
  384.     DC.W    -680,-800,-680
  385.     DC.W    +680,-800,-680
  386.     DC.W    +800,-680,-680
  387.     DC.W    +800,+680,-680
  388.     DC.W    -680,+800,-680
  389.     DC.W    +680,+800,-680
  390.     DC.W    -800,-800,+800
  391.     DC.W    -800,+800,+800
  392.     DC.W    +800,+800,+800
  393.     DC.W    +800,-800,+800
  394.     DC.W    -680,-680,+800
  395.     DC.W    -680,+680,+800
  396.     DC.W    +680,+680,+800
  397.     DC.W    +680,-680,+800
  398.     DC.W    -680,-680,+680
  399.     DC.W    -680,+680,+680
  400.     DC.W    +680,+680,+680
  401.     DC.W    +680,-680,+680
  402.     DC.W    -800,-680,+680
  403.     DC.W    -800,+680,+680
  404.     DC.W    -680,-800,+680
  405.     DC.W    +680,-800,+680
  406.     DC.W    +800,-680,+680
  407.     DC.W    +800,+680,+680
  408.     DC.W    -680,+800,+680
  409.     DC.W    +680,+800,+680
  410.  
  411. .normstart:
  412.     DC.W    -073,-073,-073
  413.     DC.W    -073,+073,-073
  414.     DC.W    +073,+073,-073
  415.     DC.W    +073,-073,-073
  416.     DC.W    +073,+073,-073
  417.     DC.W    +073,-073,-073
  418.     DC.W    -073,-073,-073
  419.     DC.W    -073,+073,-073
  420.     DC.W    +073,+073,+073
  421.     DC.W    +073,-073,+073
  422.     DC.W    -073,-073,+073
  423.     DC.W    -073,+073,+073
  424.     DC.W    -073,+073,+073
  425.     DC.W    -073,-073,+073
  426.     DC.W    +073,-073,+073
  427.     DC.W    -073,-073,+073
  428.     DC.W    +073,+073,+073
  429.     DC.W    +073,-073,+073
  430.     DC.W    +073,+073,+073
  431.     DC.W    -073,+073,+073
  432.     DC.W    -073,-073,+073
  433.     DC.W    -073,+073,+073
  434.     DC.W    +073,+073,+073
  435.     DC.W    +073,-073,+073
  436.     DC.W    +073,+073,+073
  437.     DC.W    +073,-073,+073
  438.     DC.W    -073,-073,+073
  439.     DC.W    -073,+073,+073
  440.     DC.W    +073,+073,-073
  441.     DC.W    +073,-073,-073
  442.     DC.W    -073,-073,-073
  443.     DC.W    -073,+073,-073
  444.     DC.W    -073,+073,-073
  445.     DC.W    -073,-073,-073
  446.     DC.W    +073,-073,-073
  447.     DC.W    -073,-073,-073
  448.     DC.W    +073,+073,-073
  449.     DC.W    +073,-073,-073
  450.     DC.W    +073,+073,-073
  451.     DC.W    -073,+073,-073
  452.  
  453.  
  454. .end:
  455.  
  456. .vn:    =    (.end-.start)/Vertex.SIZE
  457. .n:    =    (.end-.normstart)/Vertex.SIZE
  458. .v:    =    .vn-.n
  459.  
  460.     DC.W    0                ; amount of 2d vertices
  461.  
  462.  
  463.     DC.W    48                ; amount of primitives
  464.  
  465. ; top 'square'.
  466.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,0,1,5,4,.v+0,.v+1,.v+5,.v+4
  467.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,1,2,6,5,.v+1,.v+2,.v+6,.v+5
  468.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,2,3,7,6,.v+2,.v+3,.v+7,.v+6
  469.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,3,0,4,7,.v+3,.v+0,.v+4,.v+7
  470.  
  471.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,04,05,09,08,.v+04,.v+05,.v+09,.v+08
  472.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,05,06,10,09,.v+05,.v+06,.v+10,.v+09
  473.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,06,07,11,10,.v+06,.v+07,.v+11,.v+10
  474.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,07,04,08,11,.v+07,.v+04,.v+08,.v+11
  475.  
  476.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,12,13,01,00,.v+12,.v+13,.v+01,.v+00
  477.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,18,19,02,01,.v+18,.v+19,.v+02,.v+01
  478.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,00,03,15,14,.v+00,.v+03,.v+15,.v+14
  479.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,03,02,17,16,.v+03,.v+02,.v+17,.v+16
  480.  
  481.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,13,12,08,09,.v+13,.v+12,.v+08,.v+09
  482.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,14,15,11,08,.v+14,.v+15,.v+11,.v+08
  483.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,16,17,10,11,.v+16,.v+17,.v+10,.v+11
  484.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,19,18,09,10,.v+19,.v+18,.v+09,.v+10
  485.  
  486. ; 'pillars'.
  487.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,12,00,20,32,.v+12,.v+00,.v+20,.v+32
  488.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,00,14,34,20,.v+00,.v+14,.v+34,.v+20
  489.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,14,08,28,34,.v+14,.v+08,.v+28,.v+34
  490.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,08,12,32,28,.v+08,.v+12,.v+32,.v+28
  491.  
  492.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,01,13,33,21,.v+01,.v+13,.v+33,.v+21
  493.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,18,01,21,38,.v+18,.v+01,.v+21,.v+38
  494.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,13,09,29,33,.v+13,.v+09,.v+29,.v+33
  495.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,09,18,38,29,.v+09,.v+18,.v+38,.v+29
  496.  
  497.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,17,02,22,37,.v+17,.v+02,.v+22,.v+37
  498.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,02,19,39,22,.v+02,.v+19,.v+39,.v+22
  499.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,10,17,37,30,.v+10,.v+17,.v+37,.v+30
  500.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,19,10,30,39,.v+19,.v+10,.v+30,.v+39
  501.  
  502.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,15,03,23,35,.v+15,.v+03,.v+23,.v+35
  503.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,03,16,36,23,.v+03,.v+16,.v+36,.v+23
  504.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,11,15,35,31,.v+11,.v+15,.v+35,.v+31
  505.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,16,11,31,36,.v+16,.v+11,.v+31,.v+36
  506.  
  507. ; bottom 'square'.
  508.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,21,20,24,25,.v+21,.v+20,.v+24,.v+25
  509.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,22,21,25,26,.v+22,.v+21,.v+25,.v+26
  510.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,23,22,26,27,.v+23,.v+22,.v+26,.v+27
  511.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,20,23,27,24,.v+20,.v+23,.v+27,.v+24
  512.  
  513.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,25,24,28,29,.v+25,.v+24,.v+28,.v+29
  514.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,26,25,29,30,.v+26,.v+25,.v+29,.v+30
  515.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,27,26,30,31,.v+27,.v+26,.v+30,.v+31
  516.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,24,27,31,28,.v+24,.v+27,.v+31,.v+28
  517.  
  518.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,33,32,20,21,.v+33,.v+32,.v+20,.v+21
  519.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,39,38,21,22,.v+39,.v+38,.v+21,.v+22
  520.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,23,20,34,35,.v+23,.v+20,.v+34,.v+35
  521.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,22,23,36,37,.v+22,.v+23,.v+36,.v+37
  522.  
  523.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,32,33,29,28,.v+32,.v+33,.v+29,.v+28
  524.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,35,34,28,31,.v+35,.v+34,.v+28,.v+31
  525.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,37,36,31,30,.v+37,.v+36,.v+31,.v+30
  526.     DC.W    Polygon.QUAD|Polygon.ENVMAPPED|0,38,39,30,29,.v+38,.v+39,.v+30,.v+29
  527. HmmmCube.cubeEnd:
  528.  
  529. ; flatshaded cube (silhouette)
  530. HmmmCube.blackCube:
  531.     DC.W    40                ; amount of vertices
  532.     DC.W    0                ; amount of normals
  533. .start:    DC.W    -800,-800,-800
  534.     DC.W    -800,+800,-800
  535.     DC.W    +800,+800,-800
  536.     DC.W    +800,-800,-800
  537.     DC.W    -680,-680,-800
  538.     DC.W    -680,+680,-800
  539.     DC.W    +680,+680,-800
  540.     DC.W    +680,-680,-800
  541.     DC.W    -680,-680,-680
  542.     DC.W    -680,+680,-680
  543.     DC.W    +680,+680,-680
  544.     DC.W    +680,-680,-680
  545.     DC.W    -800,-680,-680
  546.     DC.W    -800,+680,-680
  547.     DC.W    -680,-800,-680
  548.     DC.W    +680,-800,-680
  549.     DC.W    +800,-680,-680
  550.     DC.W    +800,+680,-680
  551.     DC.W    -680,+800,-680
  552.     DC.W    +680,+800,-680
  553.     DC.W    -800,-800,+800
  554.     DC.W    -800,+800,+800
  555.     DC.W    +800,+800,+800
  556.     DC.W    +800,-800,+800
  557.     DC.W    -680,-680,+800
  558.     DC.W    -680,+680,+800
  559.     DC.W    +680,+680,+800
  560.     DC.W    +680,-680,+800
  561.     DC.W    -680,-680,+680
  562.     DC.W    -680,+680,+680
  563.     DC.W    +680,+680,+680
  564.     DC.W    +680,-680,+680
  565.     DC.W    -800,-680,+680
  566.     DC.W    -800,+680,+680
  567.     DC.W    -680,-800,+680
  568.     DC.W    +680,-800,+680
  569.     DC.W    +800,-680,+680
  570.     DC.W    +800,+680,+680
  571.     DC.W    -680,+800,+680
  572.     DC.W    +680,+800,+680
  573. .normstart:
  574. .end:
  575.  
  576.     DC.W    0                ; amount of 2d vertices
  577.  
  578.  
  579.     DC.W    48                ; amount of primitives
  580.  
  581. ; top 'square'.
  582.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,00,01,05,04
  583.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,01,02,06,05
  584.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,02,03,07,06
  585.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,03,00,04,07
  586.  
  587.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,04,05,09,08
  588.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,05,06,10,09
  589.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,06,07,11,10
  590.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,07,04,08,11
  591.  
  592.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,12,13,01,00
  593.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,18,19,02,01
  594.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,00,03,15,14
  595.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,03,02,17,16
  596.  
  597.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,13,12,08,09
  598.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,14,15,11,08
  599.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,16,17,10,11
  600.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,19,18,09,10
  601.  
  602. ; 'pillars'.
  603.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,12,00,20,32
  604.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,00,14,34,20
  605.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,14,08,28,34
  606.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,08,12,32,28
  607.  
  608.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,01,13,33,21
  609.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,18,01,21,38
  610.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,13,09,29,33
  611.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,09,18,38,29
  612.  
  613.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,17,02,22,37
  614.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,02,19,39,22
  615.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,10,17,37,30
  616.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,19,10,30,39
  617.  
  618.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,15,03,23,35
  619.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,03,16,36,23
  620.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,11,15,35,31
  621.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,16,11,31,36
  622.  
  623. ; bottom 'square'.
  624.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,21,20,24,25
  625.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,22,21,25,26
  626.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,23,22,26,27
  627.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,20,23,27,24
  628.  
  629.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,25,24,28,29
  630.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,26,25,29,30
  631.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,27,26,30,31
  632.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,24,27,31,28
  633.  
  634.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,33,32,20,21
  635.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,39,38,21,22
  636.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,23,20,34,35
  637.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,22,23,36,37
  638.  
  639.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,32,33,29,28
  640.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,35,34,28,31
  641.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,37,36,31,30
  642.     DC.W    Polygon.QUAD|Polygon.FLATSHADED|0,38,39,30,29
  643. HmmmCube.blackCubeEnd:
  644.  
  645. HmmmCube.delta:
  646.     DC.W    (.end-.start)/Vertex.SIZE    * amount of vertices
  647.     DC.W    (.end-.normstart)/Vertex.SIZE    * amount of normals
  648. .start:    DC.W    +000,-400,+50
  649.     DC.W    -300,+250,+50
  650.     DC.W    +300,+250,+50
  651.     DC.W    +000,-200,+000
  652.     DC.W    -150,+150,+000
  653.     DC.W    +150,+150,+000
  654.     DC.W    +000,-400,-50
  655.     DC.W    -300,+250,-50
  656.     DC.W    +300,+250,-50
  657. .normstart:
  658. .end:
  659.  
  660.     DC.W    (.end2d-.start2d)/Vertex2d.SIZE    * amount of 2d vertices
  661. .start2d:
  662.     DC.W    063,063
  663.     DC.W    063,191
  664.     DC.W    191,191
  665.     DC.W    191,063
  666. .end2d:
  667.  
  668.     DC.W    15                ; amount of primitives
  669.  
  670.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+03,04,01,+0,1,2
  671.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+03,01,00,+0,2,3
  672.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+04,05,02,+0,1,2
  673.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+04,02,01,+0,2,3
  674.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+05,03,00,+0,1,2
  675.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+05,00,02,+0,2,3
  676.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+06,07,04,+0,1,2
  677.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+06,04,03,+0,2,3
  678.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+07,08,05,+0,1,2
  679.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+07,05,04,+0,2,3
  680.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+08,06,03,+0,1,2
  681.     DC.W    Polygon.TRI|Polygon.TEXTUREMAPPED|0,+08,03,05,+0,2,3
  682.     DC.W    Polygon.QUAD|Polygon.TEXTUREMAPPED|0,+01,07,06,00,+1,2,3,0
  683.     DC.W    Polygon.QUAD|Polygon.TEXTUREMAPPED|0,+02,08,07,01,+1,2,3,0
  684.     DC.W    Polygon.QUAD|Polygon.TEXTUREMAPPED|0,+00,06,08,02,+1,2,3,0
  685. HmmmCube.deltaEnd:
  686.  
  687. HhhmCube.z:
  688.     DC.W    3000
  689.  
  690. HmmmCube.shadowAdrAdr:
  691.     DC.L    HmmmCube.shadowAdr
  692.     DC.L    HmmmCube.shadowAdr2
  693.  
  694. HmmmCube.shadowAdr:
  695.     DC.L    HmmmCube.shadowTable
  696.     DC.L    HmmmCube.shadowTable2
  697.     DC.L    HmmmCube.shadowTable3
  698.  
  699. HmmmCube.shadowAdr2:
  700.     DC.L    HmmmCube.shadowTable4
  701.     DC.L    HmmmCube.shadowTable5
  702.     DC.L    HmmmCube.shadowTable6
  703.  
  704. ;======= OBJECT RESERVES ===================================================
  705.  
  706.     BSS
  707.  
  708. HmmmCube.timeTable:
  709.     DS.W    3
  710.  
  711. HmmmCube.rectTable:
  712.     DS.W    1+4*32
  713. HmmmCube.rectTable2:
  714.     DS.W    1+4*32
  715. HmmmCube.rectTable3:
  716.     DS.W    1+4*32
  717.  
  718. HmmmCube.shadowTable:
  719.     DS.W    1+4*2*500
  720. HmmmCube.shadowTable2:
  721.     DS.W    1+4*2*500
  722. HmmmCube.shadowTable3:
  723.     DS.W    1+4*2*500
  724.  
  725. HmmmCube.shadowTable4:
  726.     DS.W    1+4*2*500
  727. HmmmCube.shadowTable5:
  728.     DS.W    1+4*2*500
  729. HmmmCube.shadowTable6:
  730.     DS.W    1+4*2*500
  731.  
  732.