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

  1. ; Include version!
  2. ; Lightning effect. Uses u-fly. Made for delta demo.
  3. ; Attempt to use fading works.. But ofcourse not with asynced bolts at the
  4. ; same time. Fading 320*200 hc is just too slow (even with ct2).
  5.  
  6. ;======= OBJECT EQUATES ========
  7.  
  8. Lightning.BOLTS:    =    5            ; max bolts per update
  9. Lightning.RESTORE:    =    1            ; Restore background y/n?
  10. Lightning.LEVELS:    =    20            ; #boltsegments
  11. Lightning.WIDTH:    =    7            ; width of bolt
  12.  
  13.                 RSRESET
  14. Lightning.SEGMENT_TABLE:    RS.L    Lightning.LEVELS*Lightning.BOLTS
  15. Lightning.START_ANGLE:        RS.W    Lightning.BOLTS
  16. Lightning.IN_RADIUS:        RS.W    1
  17. Lightning.NUM_BOLTS:        RS.W    1
  18. Lightning.BOLT_SIZE:        RS.B    0
  19.  
  20. ;======= INIT SUBROUTINE ========
  21.  
  22. ; OUTPUT:
  23. ; d0.l: =0 all clear, <0 error, not initialized!
  24. Lightning.init:
  25.     lea    sine_tbl,a1
  26.     bsr.l    Matrix.init
  27.  
  28.     lea    Lightning.blueInstTable,a1
  29.     lea    Lightning.prePal,a0
  30.     bsr.l    Pal.makeGradientHc
  31.  
  32. .success:
  33.     moveq    #0,d0
  34.     rts
  35. .error:    moveq    #-1,d0
  36.     rts
  37.  
  38. Lightning.initRealtime:
  39.     clr.w    Lightning.pulseMode
  40.     rts
  41.  
  42. ;======= OBJECT SUBROUTINES ========
  43.  
  44. Lightning.toggleMode:
  45.     not.w    Lightning.pulseMode
  46.     clr.w    Lightning.fade_count
  47.     bra.s    Lightning.pulseFast
  48.  
  49. Lightning.pulseSlow:
  50.     move.l    #32,Lightning.fadeSteps
  51.     bra.s    Lightning.pulse
  52.  
  53. Lightning.pulseNormal:
  54.     move.l    #64,Lightning.fadeSteps
  55.     bra.s    Lightning.pulse
  56.  
  57. Lightning.pulseFast:
  58.     move.l    #128,Lightning.fadeSteps
  59. ;    bra.s    Lightning.pulse
  60.  
  61. Lightning.pulse:
  62.     move.l    $04BA.w,Lightning.pulseStart
  63.     move.w    #3,Lightning.refresh
  64.     rts
  65.  
  66. Lightning.incInRadius:
  67.     addq.w    #1,Lightning.inRadius
  68.     rts
  69.  
  70. Lightning.decInRadius:
  71.     move.w    Lightning.inRadius,d0
  72.     subq.w    #1,d0
  73.     bmi.s    .end
  74.     move.w    d0,Lightning.inRadius
  75. .end:    rts
  76.  
  77. Lightning.incSegLength:
  78.     addq.w    #1,Lightning.segLength
  79.     rts
  80.  
  81. Lightning.decSegLength:
  82.     subq.w    #1,Lightning.segLength
  83.     rts
  84.  
  85. Lightning.incSegRandom:
  86.     addq.w    #1,Lightning.segRandom
  87.     rts
  88.  
  89. Lightning.decSegRandom:
  90.     subq.w    #1,Lightning.segRandom
  91.     rts
  92.  
  93. ; Paints normal (continuous) bolts.
  94. Lightning.paintNormal
  95.     bsr.w    Lightning.restoreBack
  96.     moveq    #3-1,d0
  97.     bsr.w    Lightning.calc
  98.     bsr.w    Lightning.paint
  99.     rts
  100.  
  101. ; Paints bolts in pulse-mode (faded)
  102. Lightning.paintPulsed:
  103.     bsr.w    Lightning.count
  104.  
  105.     tst.w    Lightning.refresh
  106.     beq.s    .end_restore
  107.     bsr.w    Lightning.restoreBack
  108. .end_restore:
  109.  
  110.     cmpi.w    #3,Lightning.refresh
  111.     blt.s    .copy_old
  112.  
  113. ; 2 pass multinomial chance-experiment.
  114.     moveq    #Lightning.BOLTS,d0
  115.     bsr.w    Lightning.getRandom
  116.     move.w    d2,d7
  117.     moveq    #Lightning.BOLTS,d0
  118.     bsr.w    Lightning.getRandom
  119.     add.w    d2,d7
  120.     lsr.w    #1,d7
  121.     bcc.s    .rounded
  122.     addq.w    #1,d7
  123. .rounded:
  124. ; d7.w=avg[rand(7)+rand(7)] (int)
  125.     move.w    d7,d0
  126.     bsr.w    Lightning.calc
  127.  
  128.     bra.s    .end_calc
  129. .copy_old:
  130.     bsr.w    Lightning.copyOldBolt
  131. .end_calc:
  132.  
  133.     bsr.w    Lightning.paint
  134.  
  135.     move.w    Lightning.refresh,d0
  136.     subq.w    #1,d0
  137.     bmi.s    .end_store
  138.     move.w    d0,Lightning.refresh
  139. .end_store:
  140.     rts
  141.  
  142. ; Control pulse timing stuff.
  143. Lightning.count:
  144.     move.l    $04BA.w,d0
  145.     sub.l    Lightning.pulseStart,d0
  146.     cmp.l    Lightning.fadeSteps,d0
  147.     blt.s    .end_count
  148.     move.w    Lightning.fadeSteps+2,d0
  149. .end_count:
  150.     move.w    d0,Lightning.fade_count
  151.     rts
  152.  
  153. ; Restore background..
  154. Lightning.restoreBack:
  155.     IFNE    Lightning.RESTORE
  156.     movea.l    Lightning.boltAddys,a0
  157.     move.w    (Lightning.NUM_BOLTS.l,a0),d7
  158.  
  159. .restore_loop:
  160.     movea.l    Lightning.boltAddys,a1
  161.     move.w    (Lightning.START_ANGLE.l,a1,d7.w*2),d0
  162.     move.w    (Lightning.IN_RADIUS.l,a1),d1
  163.     move.w    d7,d2
  164.     mulu.w    #Lightning.LEVELS*4,d2
  165.     adda.l    d2,a1
  166.     move.w    d7,-(sp)
  167.     bsr.w    Lightning.restorePolybolt
  168.     move.w    (sp)+,d7
  169.     dbf    d7,.restore_loop
  170.     ENDC
  171.     rts
  172.  
  173. ; Calculate lightning..
  174. ; INPUT:
  175. ; d0.w=#bolts-1
  176. Lightning.calc:
  177.     movea.l    Lightning.boltAddys,a0
  178.     move.w    d0,d7
  179.     move.w    d7,Lightning.NUM_BOLTS(a0)
  180.  
  181. .calc_loop:
  182.     movea.l    Lightning.boltAddys,a0
  183.     move.w    #sintbllen,d0
  184.     bsr.w    Lightning.getRandom
  185.     move.w    d2,d0
  186.     move.w    d0,(Lightning.START_ANGLE.l,a0,d7.w*2)
  187.     move.w    Lightning.inRadius,Lightning.IN_RADIUS(a0)
  188.     move.w    d7,d0
  189.     mulu.w    #Lightning.LEVELS*4,d0
  190.     adda.l    d0,a0
  191.     move.w    d7,-(sp)
  192.     bsr.w    Lightning.calcbolt
  193.     move.w    (sp)+,d7
  194.     dbf    d7,.calc_loop
  195.     rts
  196.  
  197. ; Copies previous bolt data to current buffer..
  198. Lightning.copyOldBolt:
  199.     lea    Lightning.boltAddys,a0
  200.     movea.l    8(a0),a1            ; a1: src
  201.     movea.l    (a0),a0                ; a0: dst
  202.     movea.l    a1,a3                ; a3: src
  203.     movea.l    a0,a2                ; a2: dst
  204.     move.w    Lightning.NUM_BOLTS(a1),d7    ; d7.w=#bolts-1
  205.     move.w    d7,Lightning.NUM_BOLTS(a0)    ; Store #bolts-1 to dst.
  206.     move.w    Lightning.IN_RADIUS(a1),Lightning.IN_RADIUS(a0)
  207.     move.w    d7,d5
  208. .copy_bolt_loop:
  209.     moveq    #Lightning.LEVELS-1,d6
  210.  
  211. .copy_seg_loop:
  212.     move.l    (a1)+,(a0)+
  213.     dbf    d6,.copy_seg_loop
  214.  
  215.     dbf    d7,.copy_bolt_loop
  216.  
  217.     adda.w    #Lightning.START_ANGLE,a2
  218.     adda.w    #Lightning.START_ANGLE,a3
  219.  
  220. .copy_angle_loop:
  221.     move.w    (a3)+,(a2)+
  222.     dbf    d5,.copy_angle_loop
  223.  
  224.     rts
  225.  
  226. ; Paint new bolts..
  227. Lightning.paint:
  228.     move.l    Lightning.fadeSteps,d3
  229.     sub.w    Lightning.fade_count,d3
  230.     lsl.l    #8,d3
  231.     divu.w    Lightning.fadeSteps+2,d3
  232.     lea    Lightning.pal,a0
  233.     lea    Lightning.prePal,a1
  234.     moveq    #32-1,d7
  235.  
  236. .shift_loop:
  237.     move.w    (a1)+,d0
  238.     move.w    d0,d1
  239.     move.w    d0,d2
  240.     andi.w    #%1111100000000000,d0
  241.     andi.w    #%0000011111100000,d1
  242.     andi.w    #%0000000000011111,d2
  243.     mulu.w    d3,d0
  244.     mulu.w    d3,d1
  245.     mulu.w    d3,d2
  246.     lsr.l    #8,d0
  247.     lsr.l    #8,d1
  248.     lsr.l    #8,d2
  249.     andi.w    #%1111100000000000,d0
  250.     andi.w    #%0000011111100000,d1
  251.     andi.w    #%0000000000011111,d2
  252.     or.w    d2,d0
  253.     or.w    d1,d0
  254.     move.w    d0,(a0)+
  255.     dbf    d7,.shift_loop
  256. .end_shift:
  257.  
  258.     movea.l    Lightning.boltAddys,a0
  259.     move.w    Lightning.NUM_BOLTS(a0),d7
  260.  
  261. .paint_loop:
  262.     movea.l    Lightning.boltAddys,a1
  263.     move.w    (Lightning.START_ANGLE.l,a1,d7.w*2),d0
  264.     move.w    Lightning.IN_RADIUS(a1),d1
  265.     move.w    d7,d2
  266.     mulu.w    #Lightning.LEVELS*4,d2
  267.     adda.l    d2,a1
  268.     move.w    d7,-(sp)
  269.     bsr.w    Lightning.paintPolybolt
  270.     move.w    (sp)+,d7
  271.     dbf    d7,.paint_loop
  272.     rts
  273.  
  274. ; Return random value in range [0,+r)
  275. ; INPUT:
  276. ; d0.w=r [0,65535]
  277. ; OUTPUT:
  278. ; d2.w=random value
  279. Lightning.getRandom:
  280.     lea    Lightning.random(pc),a4
  281.     move.l    (a4),d1
  282.     move.l    d1,d2
  283.     rol.l    #5,d1
  284.     addi.l    #$1A77F226,d1
  285.     eor.l    d2,d1
  286.     move.l    d1,(a4)
  287.     clr.l    d2
  288.     move.w    d1,d2
  289.     divu.w    d0,d2
  290.     swap    d2
  291.     rts
  292.  
  293. ; Return random value in range (-r,+r)
  294. ; INPUT:
  295. ; d0.w=r [0,32767]
  296. ; OUTPUT:
  297. ; d2.w=random value
  298. Lightning.getSignedRandom:
  299.     lea    Lightning.random(pc),a4
  300.     move.l    (a4),d1
  301.     move.l    d1,d2
  302.     rol.l    #5,d1
  303.     addi.l    #$1A77F226,d1
  304.     eor.l    d2,d1
  305.     move.l    d1,(a4)
  306.     move.w    d0,d3
  307.     add.w    d0,d0
  308.     addq.w    #1,d0
  309.     clr.l    d2
  310.     move.w    d1,d2
  311.     divu.w    d0,d2
  312.     swap    d2
  313.     sub.w    d3,d2
  314.     rts
  315.  
  316. Lightning.random:
  317.     DC.L    0
  318.  
  319. ; Calcs one lightning bolt. Outputs complex numbers [|c|, arg(c)].
  320. ; INPUT:
  321. ; a0: bolt buffer
  322. Lightning.calcbolt:
  323.     moveq    #Lightning.LEVELS-1,d7
  324.     move.w    #sintbllen,d0
  325.     mulu.w    #$1C00,d0
  326.     swap    d0
  327.     move.w    d0,d6
  328.     move.w    Lightning.segLength,d4
  329.     move.w    Lightning.segRandom,d5
  330.  
  331. .loop:
  332. ; Get angle..
  333.     move.w    d6,d0
  334.     bsr.w    Lightning.getSignedRandom
  335.     movea.l    d2,a2
  336. ; Get amp...
  337.     move.w    d4,d0
  338.     bsr.w    Lightning.getRandom
  339. ; d2.w=amp
  340.     add.w    d5,d2
  341.  
  342.     move.w    a2,(a0)+
  343.     move.w    d2,(a0)+
  344.  
  345.     dbra    d7,.loop
  346.     rts
  347.  
  348. ; Paints a bolt rotated round an initial angle using polys.
  349. ;
  350. ;   d.i       c.i=d.(i+1)
  351. ;   ^.........^
  352. ;   |   l.i   |
  353. ;o.i*--------->o.(i+1)
  354. ;   |         |
  355. ;   v.........v
  356. ;   a.i       b.i=a.(i+1)
  357. ;
  358. ; o.0=(0,0), o.(i+1)=o.i+l.i
  359. ;
  360. ; l.i.x=cos(angle.i)*amp.i
  361. ; l.i.y=sin(angle.i)*amp.i
  362. ;
  363. ; a.i=o.i+(-l.i.y,+l.i.x)/4
  364. ; d.i=o.i+(+l.i.y,-l.i.x)/4
  365. ;
  366. ; INPUT:
  367. ; d0.w=initial angle
  368. ; d1.w=inner radius
  369. ; d6.w=color
  370. ; a6: bolt table
  371. Lightning.paintPolybolt:
  372.     moveq    #Lightning.LEVELS-2,d7
  373.     bpl.s    .okay
  374.     rts
  375.  
  376. .okay:    move.w    d0,.angle
  377.     movea.l    a1,a6
  378.     movea.w    #160,a0
  379.     movea.w    #100,a1
  380.  
  381. ; Calc rotated inner radius..
  382.     Get_SinCos    sine_tbl,d0,d0,d2
  383.     muls.w    d1,d0
  384.     muls.w    d1,d2
  385.     add.l    d0,d0
  386.     add.l    d2,d2
  387.     swap    d0
  388.     swap    d2
  389.     adda.w    d0,a0
  390.     adda.w    d2,a1
  391.  
  392. ; We calculate l.0...
  393.     move.w    (a6)+,d2
  394.     move.w    (a6)+,d4
  395.     add.w    .angle(pc),d2
  396. ; d2.w=angle, d4.w=amp
  397.     Do_SinModulo    d2
  398.     Get_SinCos    sine_tbl,d2,d2,d3
  399. ; d2.w=sin(angle), d3.w=cos(angle)
  400.     move.w    d2,d5
  401.     move.w    d3,d6
  402.     muls.w    d4,d5
  403.     muls.w    d4,d6
  404.     add.l    d5,d5
  405.     add.l    d6,d6
  406.     swap    d5
  407.     swap    d6
  408. ; d5.w=l.0.x, d6.w=l.0.y
  409.  
  410. ; Now we can calculate a.0, d.0...
  411.     IFNE    0
  412.     move.w    d3,d0
  413.     move.w    d2,d1
  414.     moveq    #Lightning.WIDTH,d4
  415.     muls.w    d4,d0
  416.     muls.w    d4,d1
  417.     swap    d0
  418.     swap    d1
  419.     move.w    d0,d2
  420.     move.w    d1,d3
  421.     neg.w    d0
  422.     neg.w    d3
  423.     add.l    a0,d0
  424.     add.l    a1,d1
  425.     add.l    a0,d2
  426.     add.l    a1,d3
  427.     ELSE
  428.     move.l    a0,d0
  429.     move.l    a1,d1
  430.     move.l    a0,d2
  431.     move.l    a1,d3
  432.     ENDC
  433. ; a.0.x=d0.w, a.0.y=d1.w, d.0.x=d2.w, d.0.y=d3.w
  434. ; i=0
  435.  
  436. .loop:    lea    Lightning.gouPoly+4,a5
  437.     movem.w    d0/d1,(a5)                ; Output a.i (0)
  438.     movem.w    d2/d3,18(a5)                ; Output d.i (3)
  439.  
  440. ; Calculate o.(i+1)=o.i+l.i
  441.     add.w    d5,a0
  442.     add.w    d6,a1
  443.  
  444.     move.w    .angle(pc),d5
  445.     add.w    (a6)+,d5
  446.     move.w    (a6)+,d4
  447. ; d5.w=angle, d4.w=amp
  448.  
  449. ; Now Calculate l.(i+1)...
  450.     Do_SinModulo    d5
  451.     Get_SinCos    sine_tbl,d5,d5,d6
  452.     move.w    d5,d1
  453.     move.w    d6,d0
  454.     muls.w    d4,d5
  455.     muls.w    d4,d6
  456.     add.l    d5,d5
  457.     add.l    d6,d6
  458.     swap    d5
  459.     swap    d6
  460. ; d5=l.(i+1).x, d6=l.(i+1).y
  461.  
  462. ; Now calculate a.(i+1), d.(i+1)
  463.     muls.w    #Lightning.WIDTH,d0
  464.     muls.w    #Lightning.WIDTH,d1
  465.     swap    d0
  466.     swap    d1
  467.     move.w    d0,d2
  468.     move.w    d1,d3
  469.     neg.w    d0
  470.     neg.w    d3
  471.     add.l    a0,d0
  472.     add.l    a1,d1
  473.     add.l    a0,d2
  474.     add.l    a1,d3
  475. ; a2=a.(i+1).x, a3=a.(i+1).y, a4=d.(i+1).x, a5=d.(i+1).y
  476.  
  477.     movem.w    d0/d1,6(a5)                ; Output b.i (1)
  478.     movem.w    d2/d3,12(a5)                ; Output c.i (2)
  479.  
  480.     move.l    a6,-(sp)
  481.     movem.w    d5/d6/d7/a0/a1,-(sp)
  482.     lea    Lightning.gouPoly,a1
  483.     bsr.l    Polygon.paintClippedGouraudshaded
  484.     movem.w    (sp)+,d5/d6/d7/a0/a1
  485.     movea.l    (sp)+,a6
  486.  
  487.     lea    Lightning.gouPoly+4,a5
  488.     movem.w    6(a5),d0/d1                ; Fetch a.(i+1) (1)
  489.     movem.w    12(a5),d2/d3                ; Fetch d.(i+1) (2)
  490.  
  491.     dbra    d7,.loop
  492.  
  493.     rts
  494.  
  495. .angle:    DC.W    0
  496.  
  497. ; Paints a bolt rotated round an initial angle using polys.
  498. ;
  499. ;   d.i       c.i=d.(i+1)
  500. ;   ^.........^
  501. ;   |   l.i   |
  502. ;o.i*--------->o.(i+1)
  503. ;   |         |
  504. ;   v.........v
  505. ;   a.i       b.i=a.(i+1)
  506. ;
  507. ; o.0=(0,0), o.(i+1)=o.i+l.i
  508. ;
  509. ; l.i.x=cos(angle.i)*amp.i
  510. ; l.i.y=sin(angle.i)*amp.i
  511. ;
  512. ; a.i=o.i+(-l.i.y,+l.i.x)/4
  513. ; d.i=o.i+(+l.i.y,-l.i.x)/4
  514. ;
  515. ; INPUT:
  516. ; d0.w=initial angle
  517. ; d1.w=inner radius
  518. ; a1: bolt table
  519. Lightning.restorePolybolt:
  520.     moveq    #Lightning.LEVELS-2,d7
  521.     bpl.s    .okay
  522.     rts
  523.  
  524. .okay:    move.w    d0,.angle
  525.     movea.l    a1,a6
  526.     movea.w    #160,a0
  527.     movea.w    #100,a1
  528.  
  529. ; Calc rotated inner radius..
  530.     Get_SinCos    sine_tbl,d0,d0,d2
  531.     muls.w    d1,d0
  532.     muls.w    d1,d2
  533.     add.l    d0,d0
  534.     add.l    d2,d2
  535.     swap    d0
  536.     swap    d2
  537.     adda.w    d0,a0
  538.     adda.w    d2,a1
  539.  
  540. ; We calculate l.0...
  541.     move.w    (a6)+,d2
  542.     move.w    (a6)+,d4
  543.     add.w    .angle(pc),d2
  544. ; d2.w=angle, d4.w=amp
  545.     Do_SinModulo    d2
  546.     Get_SinCos    sine_tbl,d2,d2,d3
  547. ; d2.w=sin(angle), d3.w=cos(angle)
  548.     move.w    d2,d5
  549.     move.w    d3,d6
  550.     muls.w    d4,d5
  551.     muls.w    d4,d6
  552.     add.l    d5,d5
  553.     add.l    d6,d6
  554.     swap    d5
  555.     swap    d6
  556. ; d5.w=l.0.x, d6.w=l.0.y
  557.  
  558. ; Now we can calculate a.0, d.0...
  559.     move.w    d3,d0
  560.     move.w    d2,d1
  561.     moveq    #Lightning.WIDTH,d4
  562.     muls.w    d4,d0
  563.     muls.w    d4,d1
  564.     swap    d0
  565.     swap    d1
  566.     move.w    d0,d2
  567.     move.w    d1,d3
  568.     neg.w    d0
  569.     neg.w    d3
  570.     add.l    a0,d0
  571.     add.l    a1,d1
  572.     add.l    a0,d2
  573.     add.l    a1,d3
  574. ; a.0.x=d0.w, a.0.y=d1.w, d.0.x=d2.w, d.0.y=d3.w
  575. ; i=0
  576.  
  577. .loop:    lea    Lightning.flatPoly+4,a5
  578.     movem.w    d0/d1,(a5)                ; Output a.i
  579.     movem.w    d2/d3,12(a5)                ; Output d.i
  580.  
  581. ; Calculate o.(i+1)=o.i+l.i
  582.     add.w    d5,a0
  583.     add.w    d6,a1
  584.  
  585.     move.w    (a6)+,d5
  586.     move.w    (a6)+,d4
  587.     add.w    .angle(pc),d5
  588. ; d5.w=angle, d4.w=amp
  589.  
  590. ; Now Calculate l.(i+1)...
  591.     Do_SinModulo    d5
  592.     Get_SinCos    sine_tbl,d5,d5,d6
  593.     move.w    d5,d1
  594.     move.w    d6,d0
  595.     muls.w    d4,d5
  596.     muls.w    d4,d6
  597.     add.l    d5,d5
  598.     add.l    d6,d6
  599.     swap    d5
  600.     swap    d6
  601. ; d5=l.(i+1).x, d6=l.(i+1).y
  602.  
  603. ; Now calculate a.(i+1), d.(i+1)
  604.     muls.w    #Lightning.WIDTH,d0
  605.     muls.w    #Lightning.WIDTH,d1
  606.     swap    d0
  607.     swap    d1
  608.     move.w    d0,d2
  609.     move.w    d1,d3
  610.     neg.w    d0
  611.     neg.w    d3
  612.     add.l    a0,d0
  613.     add.l    a1,d1
  614.     add.l    a0,d2
  615.     add.l    a1,d3
  616. ; a2=a.(i+1).x, a3=a.(i+1).y, a4=d.(i+1).x, a5=d.(i+1).y
  617.  
  618.     movem.w    d0/d1,4(a5)                ; Output b.i
  619.     movem.w    d2/d3,8(a5)                ; Output c.i
  620.  
  621.     move.l    a6,-(sp)
  622.     movem.w    d5/d6/d7/a0/a1,-(sp)
  623.     lea    Lightning.flatPoly,a1
  624.     bsr.l    Polygon.paintClippedFlatshaded
  625.     movem.w    (sp)+,d5/d6/d7/a0/a1
  626.     movea.l    (sp)+,a6
  627.  
  628.     lea    Lightning.flatPoly+4,a5
  629.     movem.w    4(a5),d0/d1                ; Fetch a.(i+1)
  630.     movem.w    8(a5),d2/d3                ; Fetch d.(i+1)
  631.  
  632.     dbra    d7,.loop
  633.  
  634.     rts
  635.  
  636. .angle:    DC.W    0
  637.  
  638. ;======= OBJECT DATA ========
  639.  
  640.     DATA
  641.  
  642. Lightning.gouPoly:
  643.     DC.W    0
  644.     DC.W    4
  645.     DC.W    -32,+16,063
  646.     DC.W    +32,+16,063
  647.     DC.W    +32,-16,000
  648.     DC.W    -32,-16,000
  649.  
  650. Lightning.flatPoly:
  651.     DC.W    1
  652.     DC.W    4
  653.     DC.W    0,0
  654.     DC.W    0,0
  655.     DC.W    0,0
  656.     DC.W    0,0
  657.  
  658. Lightning.boltAddys:
  659.     DC.L    Lightning.boltTable
  660.     DC.L    Lightning.boltTable2
  661.     DC.L    Lightning.boltTable3
  662.  
  663. Lightning.blueInstTable:
  664.     DC.W    (.end-.start)/4-1
  665.     DC.W    2
  666.     IFNE    1
  667. .start:    DC.L    $0000001F
  668.     DC.L    $1f1f00dF
  669.     DC.L    $7f7f00ff
  670.     DC.L    $afaf00ff
  671.     DC.L    $FFFF00FF
  672.     DC.L    $afaf00ff
  673.     DC.L    $7f7f00ff
  674.     DC.L    $1f1f00dF
  675.     DC.L    $0000001F
  676. .end:
  677.     ELSE
  678. .start:    DC.L    $0000001F
  679.     DC.L    $1f1f00dF
  680.     DC.L    $7f7f00ff
  681.     DC.L    $cfcf00ff
  682.     DC.L    $FFFF00FF
  683.     DC.L    $cfcf00ff
  684.     DC.L    $7f7f00ff
  685.     DC.L    $1f1f00dF
  686.     DC.L    $0000001F
  687. .end:
  688.     ENDC
  689.  
  690. Lightning.segLength:
  691.     DC.W    8
  692. Lightning.segRandom:
  693.     DC.W    8
  694. Lightning.fadeSteps:
  695.     DC.L    32
  696. Lightning.inRadius:
  697.     DC.W    10
  698. Lightning.pulseMode:
  699.     DC.W    0
  700.  
  701. ;======= OBJECT RESERVES ========
  702.  
  703.     BSS
  704.  
  705.     DS.W    1000
  706. Lightning.pal:
  707.     DS.W    256
  708.     DS.W    1000
  709. Lightning.prePal:
  710.     DS.W    256
  711.     DS.W    1000
  712.  
  713. Lightning.boltTable:
  714.     DS.L    Lightning.BOLT_SIZE*Lightning.BOLTS
  715. Lightning.boltTable2:
  716.     DS.L    Lightning.BOLT_SIZE*Lightning.BOLTS
  717. Lightning.boltTable3:
  718.     DS.L    Lightning.BOLT_SIZE*Lightning.BOLTS
  719.  
  720. Lightning.pulseStart:
  721.     DS.L    1
  722. Lightning.refresh:
  723.     DS.W    1
  724. Lightning.fade_count:
  725.     DS.W    1
  726.  
  727. ;======= END OF DEMO-EFFECT OBJECT ========