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

  1. ; Many cubes/objects. A screen that uses u-fly. For the delta-demo.
  2.  
  3. ******** OBJECT EQUATES ********
  4.  
  5. SxT4Cubes.DIMENSION:    =    5            ; <6  (!!!)
  6. SxT4Cubes.DIMSQR:    =    SxT4Cubes.DIMENSION*SxT4Cubes.DIMENSION
  7.  
  8. ******** OBJECT TABLE ********
  9.  
  10. * Must be first in object!!
  11. SxT4Cubes.table:
  12.     DC.L    SxT4Cubes.mainLoop
  13.     DC.L    SxT4Cubes.init
  14.     DC.L    rts
  15.     DC.L    SxT4Cubes.switchRot
  16.     DC.L    SxT4Cubes.resetTime
  17.     DC.L    0
  18.  
  19.     IFND    DEMO_SYSTEM
  20.     INCLUDE    SFLY_DSP.S                * Include the CPU-DSP engine.
  21.     TEXT
  22.     INCLUDE    OBJECT3D.I
  23.     TEXT
  24.     ENDC
  25.  
  26. ******** INIT SUBROUTINE ********
  27.  
  28. * OUTPUT: d0.l: 0   = All clear.
  29. *               neg = Error! Not initialized!
  30. SxT4Cubes.init:
  31.     lea    sine_tbl,a1
  32.     bsr.l    Matrix.init
  33.  
  34.     bsr    SxT4Cubes.calcWave
  35.  
  36. .success:
  37.     moveq    #0,d0
  38.     rts
  39. .error:    moveq    #-1,d0
  40.     rts
  41.  
  42. ******** REALTIME INIT SUBROUTINE ********
  43.  
  44. SxT4Cubes.realtimeInit:
  45. ; Init u fly..
  46.     bsr.l    HumanFly.init
  47.  
  48.     lea    Viewport.settingsTable,a0
  49.     move.w    #320,Viewport.XSCREEN(a0)
  50.     move.w    #200,Viewport.YSCREEN(a0)
  51.     move.w    #0,Viewport.XSTART(a0)
  52.     move.w    #0,Viewport.YSTART(a0)
  53.     move.w    #320,Viewport.XEND(a0)
  54.     move.w    #200,Viewport.YEND(a0)
  55.     move.w    #160,Viewport.XCENTER(a0)
  56.     move.w    #100,Viewport.YCENTER(a0)
  57.     move.w    #256+32,Viewport.ASPECT(a0)
  58.     move.w    #$100,Viewport.FOCAL(a0)
  59.     bsr.l    Viewport.update
  60.  
  61.     lea    SxT4Cubes.textureTable,a0
  62.     bsr.l    Polygon.init
  63.  
  64.     bsr.l    ObjectRegistry.clear
  65.  
  66.     lea    Object3d.spikey,a1
  67.     move.l    #Object3d.spikeyEnd-Object3d.spikey,d0
  68.     lea    SxT4Cubes.spikey,a0
  69.     bsr.l    Object3d.copy
  70.  
  71.     lea    SxT4Cubes.spikey,a0
  72.     move.w    #0,d0
  73.     move.w    #8,d1
  74.     move.w    #$200/5,d2
  75.     bsr.l    Object3d.scale
  76.  
  77.     lea    SxT4Cubes.spikey,a0
  78.     move.l    #Object3d.spikeyEnd-Object3d.spikey,d0
  79.     bsr.l    ObjectRegistry.set
  80.     tst.w    d0
  81.     bmi.s    .error
  82.  
  83.     clr.w    SxT4Cubes.objRotating
  84.  
  85.     clr.l    d0
  86.     move.w    monitormode,d1
  87.     cmpi.w    #vga60,d1
  88.     beq.s    .vga60
  89.     cmpi.w    #vga100,d1
  90.     beq.s    .vga100
  91.     cmpi.w    #rgb50,d1
  92.     beq.s    .rgb50
  93. * Unknown monitormode..
  94.     rts
  95. .vga60:    move.l    #vga60_16bit_320_200,SxT4Cubes.resRout
  96.     rts
  97. .vga100:move.l    #vga100_16bit_320_200,SxT4Cubes.resRout
  98.     rts
  99. .rgb50:    move.l    #rgb50_16bit_320_200,SxT4Cubes.resRout
  100.     rts
  101. .error:    moveq    #-1,d0
  102.     rts
  103.  
  104. ******** SCREENINIT SUBROUTINE ********
  105.  
  106. SxT4Cubes.initScreen:
  107.     rts
  108.  
  109. ******** MAINLOOP SUBROUTINE ********
  110.  
  111. SxT4Cubes.mainLoop:
  112.     IFNE    0
  113.     movec    cacr,d0
  114.     move.l    d0,-(sp)
  115.     bclr    #13,d0                    ; no write alloc
  116.     bset    #11,d0                    ; clear d cache
  117.     bclr    #8,d0                    ; d cache
  118.     bset    #4,d0                    ; i burst
  119.     bset    #0,d0                    ; i cache
  120.     movec    d0,cacr
  121.     ENDC
  122.  
  123.     movea.l    scr,a0
  124.     bsr.l    Primitive.setScreenbuffer
  125.  
  126.     move.l    frmcnt,d0
  127.     sub.l    lastframecount,d0
  128.     bne.s    .end_realtime_init
  129.     move.l    d0,-(sp)
  130.     bsr    SxT4Cubes.realtimeInit
  131.     move.l    (sp)+,d0
  132. .end_realtime_init:
  133.     cmpi.l    #3,d0
  134.     bhs.s    .end_screeninit
  135.     bsr    SxT4Cubes.initScreen
  136. .end_screeninit:
  137.  
  138.     bsr.l    PrimitiveMesh.new
  139.  
  140.     move.w    $04BC.w,d0
  141.     sub.w    SxT4Cubes.startTime,d0
  142.     move.w    d0,SxT4Cubes.time
  143.  
  144.     bsr    SxT4Cubes.addCubes
  145.  
  146.     bsr.l    PrimitiveMesh.sortZ
  147.     bsr.l    PrimitiveMesh.complete
  148.  
  149.     lea    Viewport.settingsTable,a0
  150.     movem.w    Viewport.XSTART(a0),d0/d6
  151.     movem.w    Viewport.YSTART(a0),d1/d7
  152.     moveq    #$00000000,d4
  153.     movea.l    scr,a0
  154.     bsr.l    Viewport.paintRectangle
  155.  
  156.     movea.l    rectangleTableAddresses,a0
  157.     bsr.l    PrimitiveMesh.paint
  158.  
  159.     lea    scr,a0
  160.     move.l    (a0)+,d0
  161.     move.l    (a0)+,d1
  162.     move.l    (a0),-4(a0)
  163.     move.l    d0,(a0)
  164.     move.l    d1,-8(a0)
  165.  
  166.     movea.l    SxT4Cubes.resRout,a0
  167.     suba.l    a1,a1
  168.     move.l    d0,a2
  169. .again:    bsr.l    Screen.requestUpdate
  170.     tst.l    d0
  171.     bmi.s    .again
  172.     clr.l    SxT4Cubes.resRout
  173.  
  174.     IFNE    0
  175.     move.l    (sp)+,d0
  176.     movec    d0,cacr
  177.     ENDC
  178.  
  179.     rts
  180.  
  181. ******** OBJECT SUBROUTINES ********
  182.  
  183. SxT4Cubes.switchRot:
  184.     not.w    SxT4Cubes.objRotating
  185.  
  186. SxT4Cubes.resetTime:
  187.     move.w    $04BC.w,SxT4Cubes.startTime
  188.     rts
  189.  
  190. SxT4Cubes.calcWave:
  191.     lea    SxT4Cubes.waveMatrix,a0
  192.     moveq    #SxT4Cubes.DIMENSION-1,d7
  193.  
  194. .yloop:    moveq    #SxT4Cubes.DIMENSION-1,d6
  195.  
  196. .xloop:    move.w    d6,d0
  197.     move.w    d7,d1
  198. ; x2
  199.     add.w    d0,d0
  200.     add.w    d1,d1
  201. ; center..
  202.     subq.w    #SxT4Cubes.DIMENSION-1,d0
  203.     subq.w    #SxT4Cubes.DIMENSION-1,d1
  204.  
  205.     muls.w    d0,d0
  206.     muls.w    d1,d1
  207.     add.l    d0,d1
  208.     bsr.l    Math.sqrt
  209.     mulu.l    #200,d0
  210.     swap    d0
  211.     move.w    d0,(a0)+
  212.     dbf    d6,.xloop
  213.  
  214.     dbf    d7,.yloop
  215.     rts
  216.  
  217. SxT4Cubes.addCubes:
  218. ; Push world rotation matrix.
  219.     move.w    $04BC.w,d0
  220.     move.w    d0,d1
  221.     move.w    d0,d2
  222.     mulu.w    #5,d1
  223.     lsr.l    #3,d1
  224.     mulu.w    #7,d2
  225.     lsr.l    #3,d2
  226.     bsr.l    Matrix.generate
  227.     move.w    #0,d0
  228.     move.w    #0,d1
  229.     move.w    #7000,d2
  230.     bsr.l    Matrix.translate
  231.     bsr.l    Matrix.push
  232.  
  233. ; Transform all cubes.
  234.     lea    SxT4Cubes.rotTable,a1
  235.     clr.w    .count
  236.     clr.w    .ycount
  237.     move.w    #-1500,.yc
  238.  
  239. .yloop:    clr.w    .xcount
  240.     move.w    #-1500,.xc
  241.     
  242. .xloop:
  243. ; Rotate object..
  244.     tst.w    SxT4Cubes.objRotating
  245.     beq.s    .skip_rot
  246.     movem.w    (a1)+,d0-d2
  247.     move.w    SxT4Cubes.time,d3
  248.     mulu.w    d3,d0
  249.     mulu.w    d3,d1
  250.     mulu.w    d3,d2
  251.     lsr.l    #8,d0
  252.     lsr.l    #8,d1
  253.     lsr.l    #8,d2
  254.     bra.s    .rotate_it
  255. .skip_rot:
  256.     clr.w    d0
  257.     clr.w    d1
  258.     clr.w    d2
  259. .rotate_it:
  260.     move.l    a1,-(sp)
  261.     bsr.l    Matrix.generate
  262.  
  263. ; Translate object in matrix..
  264. ; Fetch wave-height..
  265.     move.w    .count(pc),d7
  266.     move.w    (SxT4Cubes.waveMatrix,d7.w*2),d0
  267.     add.w    $04BC.w,d0
  268.     Do_SinModulo    d0
  269.     Get_Sin    sine_tbl,d0,d2
  270.     asr.w    #4,d2
  271.  
  272.     movem.w    .xc(pc),d0-d1
  273.     bsr.l    Matrix.translate
  274.     bsr.l    Matrix.push
  275.  
  276.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  277.     moveq    #0,d1
  278.     bsr.l    TransformObject.transform
  279.  
  280.     bsr.l    Matrix.pop
  281.  
  282.     move.l    (sp)+,a1
  283.  
  284.     addq.w    #1,.count
  285.     addi.w    #1200,.xc
  286.  
  287.     addq.w    #1,.xcount
  288.     cmpi.w    #SxT4Cubes.DIMENSION,.xcount(pc)
  289.     blt    .xloop
  290.  
  291.     addi.w    #1200,.yc
  292.  
  293.     addq.w    #1,.ycount
  294.     cmpi.w    #SxT4Cubes.DIMENSION,.ycount(pc)
  295.     blt    .yloop
  296.  
  297.     bsr.l    Matrix.pop
  298.  
  299.     rts
  300.  
  301. .count:    DC.W    0
  302. .xcount:DC.W    0
  303. .ycount:DC.W    0
  304. .xc:    DC.W    0
  305. .yc:    DC.W    0
  306.  
  307. ******** OBJECT DATA ********
  308.  
  309.     DATA
  310.  
  311. ; x,y,z rotation speed table, for matrix of objects.
  312. SxT4Cubes.rotTable:
  313.     DC.W    $0100,$0180,$00C0
  314.     DC.W    $01B0,$0120,$0110
  315.     DC.W    $0120,$00D0,$0130
  316.     DC.W    $0110,$0170,$0090
  317.     DC.W    $0130,$01A0,$0070
  318.     DC.W    $00C0,$0160,$0120
  319.     DC.W    $00D0,$0070,$00A0
  320.     DC.W    $00E0,$00F0,$0170
  321.     DC.W    $0140,$0080,$0120
  322.     DC.W    $01E0,$0160,$0130
  323.     DC.W    $0090,$0110,$00B0
  324.     DC.W    $00E0,$0080,$0100
  325.     DC.W    $0150,$0090,$00E0
  326.     DC.W    $00F0,$0100,$0120
  327.     DC.W    $00A0,$0130,$0090
  328.     DC.W    $0160,$0150,$0110
  329.     DC.W    $01E0,$00E0,$0170
  330.     DC.W    $0140,$0180,$0020
  331.     DC.W    $01E0,$0060,$0130
  332.     DC.W    $0090,$0010,$00B0
  333.     DC.W    $00E0,$0080,$0100
  334.     DC.W    $0110,$0090,$01C0
  335.     DC.W    $00F0,$0100,$0120
  336.     DC.W    $0200,$0110,$0190
  337.     DC.W    $0160,$0150,$0090
  338.     DC.W    $0130,$0080,$0110
  339.  
  340. SxT4Cubes.textureTable:
  341.     DC.L    FlareGen.chromeBuffer
  342.     DC.L    0
  343.  
  344. rectangleTableAddresses:
  345.     DC.L    rectangleTable
  346.     DC.L    rectangleTable2
  347.     DC.L    rectangleTable3
  348.  
  349. ******** OBJECT RESERVES ********
  350.  
  351.     BSS
  352.  
  353. SxT4Cubes.resRout:
  354.     DS.L    1
  355.  
  356. rectangleTable:
  357.     DS.W    1+4*32
  358. rectangleTable2:
  359.     DS.W    1+4*32
  360. rectangleTable3:
  361.     DS.W    1+4*32
  362.  
  363. SxT4Cubes.time:
  364.     DS.W    1
  365. SxT4Cubes.startTime:
  366.     DS.W    1
  367. SxT4Cubes.objRotating:
  368.     DS.W    1
  369.  
  370. SxT4Cubes.waveMatrix:
  371.     DS.W    SxT4Cubes.DIMSQR
  372.  
  373. SxT4Cubes.spikey:
  374.     DS.W    1000
  375.  
  376. ******** END OF DEMO-EFFECT OBJECT ********