home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / games / alienbreed3d2 / source_4000 / multianims < prev    next >
Text File  |  1997-01-31  |  62KB  |  4,481 lines

  1. TypeOfSplat: dc.w 0
  2. BRIGHTY: dc.l 0
  3.  
  4. BRIGHTENPOINTS:
  5.  
  6.  tst.b LIGHTING
  7.  bne.s .dolight
  8.  rts
  9. .dolight:
  10.  
  11. ; d0=brightness value
  12. ; d1=XPOS
  13. ; d2=ZPOS
  14. ; d3=ROOMNUMBER
  15.  
  16.  tst.w d0
  17.  bgt DARKENPOINTS
  18.  
  19.  movem.l d0-d7/a0-a6,-(a7)
  20.  
  21.  move.l ZoneAdds,a0
  22.  move.l (a0,d3.w*4),a0
  23.  add.l LEVELDATA,a0
  24.  move.l #CurrentPointBrights,a2
  25.  move.l Points,a3
  26.  move.l ZoneBorderPts,a4
  27.  
  28.  lea ToListOfGraph(a0),a1
  29. BRIGHTPTS:
  30.  move.w (a1),d4
  31.  blt brightall
  32.  
  33.  move.l ZoneAdds,a0
  34.  move.l (a0,d4.w*4),a0
  35.  add.l LEVELDATA,a0
  36.  
  37.  add.w #8,a1
  38.  moveq #9,d7
  39.  
  40.  muls #20,d4
  41.  
  42.  lea (a4,d4.w),a5
  43.  move.l #CurrentPointBrights,a2
  44.  lea (a2,d4.w*4),a2
  45.  
  46. ; Do a room.
  47.  
  48. ROOMPTLOP
  49.  move.w (a5)+,d4
  50.  blt BRIGHTPTS
  51.  
  52.  move.w (a3,d4.w*4),d5
  53.  move.w 2(a3,d4.w*4),d6
  54.  sub.w d1,d5
  55.  bgt.s .okpos1
  56.  neg.w d5
  57. .okpos1
  58.  
  59.  sub.w d2,d6
  60.  bgt.s .okpos2
  61.  neg.w d6
  62. .okpos2
  63.  
  64.  add.w d6,d5
  65.  
  66.  move.l BRIGHTY,d4
  67.  cmp.l ToZoneFloor(a0),d4
  68.  bgt .noBRIGHT1
  69.  cmp.l ToZoneRoof(a0),d4
  70.  blt .noBRIGHT1
  71.  
  72.  move.w d5,d6
  73.  move.l ToZoneRoof(a0),d4 
  74.  sub.l BRIGHTY,d4
  75.  bgt.s .noBRIGHT2
  76.  neg.l d4
  77.  asr.l #7,d4
  78.  add.w d4,d6
  79.  
  80.  asr.w #5,d6
  81.  add.w d0,d6
  82.  
  83.  bge.s .noBRIGHT2
  84.  tst.w 2(a2)
  85.  bge.s .okbr2
  86.  neg.w 2(a2)
  87. .okbr2:
  88.  
  89.  add.w 2(a2),d6
  90.  cmp.w #300,d6
  91.  bge.s .notoobr2
  92.  move.w #300,d6
  93. .notoobr2:
  94.  move.w d6,2(a2)
  95.  
  96. .noBRIGHT2
  97.  
  98.  move.w d5,d6
  99.  move.l ToZoneFloor(a0),d4
  100.  sub.l BRIGHTY,d4
  101.  blt.s .noBRIGHT1
  102.  asr.l #7,d4
  103.  add.w d4,d6
  104.  
  105.  asr.w #5,d6
  106.  add.w d0,d6
  107.  
  108.  bge.s .noBRIGHT1 
  109.  tst.w (a2)
  110.  bge.s .okbr1
  111.  neg.w (a2)
  112. .okbr1:
  113.  
  114.  add.w (a2),d6
  115.  cmp.w #300,d6
  116.  bge.s .notoobr1
  117.  move.w #300,d6
  118. .notoobr1:
  119.  move.w d6,(a2)
  120.  
  121.  
  122. .noBRIGHT1
  123.  
  124.  move.l BRIGHTY,d4
  125.  cmp.l ToUpperFloor(a0),d4
  126.  bgt .noBRIGHT4
  127.  cmp.l ToUpperRoof(a0),d4
  128.  blt .noBRIGHT4
  129.  
  130.  move.w d5,d6
  131.  move.l ToUpperFloor(a0),d4
  132.  sub.l BRIGHTY,d4
  133.  blt.s .noBRIGHT3
  134.  asr.l #7,d4
  135.  add.w d4,d6
  136.  
  137.  asr.w #5,d6
  138.  add.w d0,d6
  139.  
  140.  bge.s .noBRIGHT3
  141.  tst.w 4(a2)
  142.  bge.s .okbr3
  143.  neg.w 4(a2)
  144. .okbr3:
  145.  
  146.  add.w 4(a2),d6
  147.  cmp.w #300,d6
  148.  bge.s .notoobr3
  149.  move.w #300,d6
  150. .notoobr3:
  151.  move.w d6,4(a2)
  152.  
  153.  
  154. .noBRIGHT3
  155.  
  156.  
  157.  move.w d5,d6
  158.  move.l ToUpperRoof(a0),d4
  159.  sub.l BRIGHTY,d4
  160.  bgt.s .noBRIGHT4
  161.  neg.l d4
  162.  asr.l #7,d4
  163.  add.w d4,d6
  164.  
  165.  asr.w #5,d6
  166.  add.w d0,d6
  167.  
  168.  bge.s .noBRIGHT4
  169.  tst.w 6(a2)
  170.  bge.s .okbr4
  171.  neg.w 6(a2)
  172. .okbr4:
  173.  
  174.  add.w 6(a2),d6
  175.  cmp.w #300,d6
  176.  bge.s .notoobr4
  177.  move.w #300,d6
  178. .notoobr4:
  179.  move.w d6,6(a2)
  180.  
  181. .noBRIGHT4
  182.  
  183.  addq #8,a2
  184.  
  185.  dbra d7,ROOMPTLOP
  186.  
  187.  bra BRIGHTPTS
  188.  
  189. brightall:
  190.  
  191.  movem.l (a7)+,d0-d7/a0-a6
  192.  rts
  193.  
  194.  
  195. BRIGHTENPOINTSANGLE:
  196. ; d0=brightness value
  197. ; d1=XPOS
  198. ; d2=ZPOS
  199. ; d3=ROOMNUMBER
  200. ; d4=ANGLE
  201.  
  202.  tst.b LIGHTING
  203.  bne.s .dolight
  204.  rts
  205. .dolight:
  206.  
  207.  movem.l d0-d7/a0-a6,-(a7)
  208.  
  209.  move.l #SineTable,a0
  210.  lea (a0,d4.w),a6
  211.  
  212.  move.l ZoneAdds,a0
  213.  move.l (a0,d3.w*4),a0
  214.  add.l LEVELDATA,a0
  215.  move.l #CurrentPointBrights,a2
  216.  move.l Points,a3
  217.  move.l ZoneBorderPts,a4
  218.  
  219.  lea ToListOfGraph(a0),a1
  220.   
  221. BRIGHTPTSA:
  222.  move.w (a1),d4
  223.  blt brightallA
  224.  move.l ZoneAdds,a0
  225.  move.l (a0,d4.w*4),a0
  226.  add.l LEVELDATA,a0
  227.  
  228.  add.w #8,a1
  229.  moveq #9,d3
  230.  
  231.  muls #20,d4
  232.  
  233.  lea (a4,d4.w),a5
  234.  move.l #CurrentPointBrights,a2
  235.  lea (a2,d4.w*4),a2
  236.  
  237. ROOMPTLOPA
  238.  move.w (a5)+,d4
  239.  blt BRIGHTPTSA
  240.  move.w 2(a3,d4.w*4),d5
  241.  move.w (a3,d4.w*4),d4
  242.  
  243.  sub.w d1,d4
  244.  move.w d4,d6
  245.  bgt.s .okpos1
  246.  neg.w d4
  247. .okpos1
  248.  
  249.  sub.w d2,d5
  250.  move.w d5,d7
  251.  bgt.s .okpos2
  252.  neg.w d5
  253. .okpos2
  254.  
  255.  movem.l d0/d1/d2/d3/d4/d5,-(a7)
  256.  
  257.  move.w (a6),d0
  258.  move.w 2048(a6),d1
  259.  muls d7,d1
  260.  muls d6,d0
  261.  add.l d0,d1
  262.  ble BEHINDPT
  263.  move.l d1,d5
  264.  neg.l d5
  265.  add.l #30*65536,d5
  266.  bge.s .okkkkk
  267.  moveq #0,d5
  268. .okkkkk
  269.  
  270.  move.w (a6),d0
  271.  move.w 2048(a6),d1
  272. ; ext.l d0
  273. ; ext.l d1
  274. ; asl.l #6,d1
  275. ; asl.l #6,d0
  276. ; swap d0
  277. ; swap d1
  278. ; neg.w d0
  279. ; neg.w d1
  280. ; add.w d6,d0
  281. ; add.w d7,d1
  282.  
  283.  muls d0,d7
  284.  muls d1,d6
  285.  sub.l d6,d7
  286.  bgt.s .okkk
  287.  neg.l d7
  288. .okkk
  289.  
  290.  add.l d5,d7
  291.  asl.l #2,d7
  292.  swap d7
  293.  
  294.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  295.  
  296.  add.w d7,d5
  297.  add.w d4,d5
  298.  
  299.  move.l BRIGHTY,d4
  300.  cmp.l ToZoneFloor(a0),d4
  301.  bgt .noBRIGHT1
  302.  cmp.l ToZoneRoof(a0),d4
  303.  blt .noBRIGHT1
  304.  
  305.  move.w d5,d6
  306.  move.l ToZoneRoof(a0),d4
  307.  sub.l BRIGHTY,d4
  308.  bgt.s .noBRIGHT2
  309.  neg.l d4
  310.  asr.l #7,d4
  311.  add.w d4,d6
  312.  
  313.  asr.w #5,d6
  314.  add.w d0,d6
  315.  
  316.  bge.s .noBRIGHT2
  317.  tst.w 2(a2)
  318.  bge.s .okbr2
  319.  neg.w 2(a2)
  320. .okbr2:
  321.  add.w 2(a2),d6
  322.  cmp.w #300,d6
  323.  bge.s .notoobr2
  324.  move.w #300,d6
  325. .notoobr2:
  326.  move.w d6,2(a2)
  327. .noBRIGHT2
  328.  
  329.  
  330.  move.w d5,d6
  331.  move.l ToZoneFloor(a0),d4
  332.  sub.l BRIGHTY,d4
  333.  blt.s .noBRIGHT1
  334.  asr.l #7,d4
  335.  add.w d4,d6
  336.  
  337.  asr.w #5,d6
  338.  add.w d0,d6
  339.  
  340.  bge.s .noBRIGHT1 
  341.  tst.w (a2)
  342.  bge.s .okbr1
  343.  neg.w (a2)
  344. .okbr1:
  345.  add.w (a2),d6
  346.  cmp.w #300,d6
  347.  bge.s .notoobr1
  348.  move.w #300,d6
  349. .notoobr1:
  350.  move.w d6,(a2)
  351. .noBRIGHT1
  352.  
  353.  move.l BRIGHTY,d4
  354.  cmp.l ToUpperFloor(a0),d4
  355.  bgt .noBRIGHT4
  356.  cmp.l ToUpperRoof(a0),d4
  357.  blt .noBRIGHT4
  358.  
  359.  move.w d5,d6
  360.  move.l ToUpperFloor(a0),d4
  361.  sub.l BRIGHTY,d4
  362.  blt.s .noBRIGHT3
  363.  
  364.  asr.l #7,d4
  365.  add.w d4,d6
  366.  
  367.  asr.w #5,d6
  368.  add.w d0,d6
  369.  
  370.  bge.s .noBRIGHT3
  371.  tst.w 4(a2)
  372.  bge.s .okbr3
  373.  neg.w 4(a2)
  374. .okbr3:
  375.  add.w 4(a2),d6
  376.  cmp.w #300,d6
  377.  bge.s .notoobr3
  378.  move.w #300,d6
  379. .notoobr3:
  380.  move.w d6,4(a2)
  381. .noBRIGHT3
  382.  
  383.  
  384.  move.w d5,d6
  385.  move.l ToUpperRoof(a0),d4
  386.  sub.l BRIGHTY,d4
  387.  bgt.s .noBRIGHT4
  388.  neg.l d4
  389.  asr.l #7,d4
  390.  add.w d4,d6
  391.  
  392.  asr.w #5,d6
  393.  add.w d0,d6
  394.  
  395.  bge.s .noBRIGHT4
  396.  tst.w 6(a2)
  397.  bge.s .okbr4
  398.  neg.w 6(a2)
  399. .okbr4:
  400.  add.w 6(a2),d6
  401.  cmp.w #300,d6
  402.  bge.s .notoobr4
  403.  move.w #300,d6
  404. .notoobr4:
  405.  move.w d6,6(a2)
  406. .noBRIGHT4
  407.  
  408.  addq #8,a2
  409.  
  410.  dbra d3,ROOMPTLOPA
  411.  
  412.  bra BRIGHTPTS
  413.  
  414. BEHINDPT:
  415.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  416.  addq #8,a2
  417.  
  418.  dbra d7,ROOMPTLOPA
  419.  
  420.  bra BRIGHTPTSA 
  421.  
  422. brightallA:
  423.  
  424.  movem.l (a7)+,d0-d7/a0-a6
  425.  rts
  426.  
  427. DARKENPOINTS
  428.  movem.l d0-d7/a0-a6,-(a7)
  429.  
  430.  move.l ZoneAdds,a0
  431.  move.l (a0,d3.w*4),a0
  432.  add.l LEVELDATA,a0
  433.  move.l #CurrentPointBrights,a2
  434.  move.l Points,a3
  435.  
  436.  move.l a0,a1
  437.  add.w ToZonePts(a0),a1
  438. DARKPTS:
  439.  move.w (a1)+,d4
  440.  blt.s DARKall
  441.  move.w (a3,d4.w*4),d5
  442.  move.w 2(a3,d4.w*4),d6
  443.  sub.w d1,d5
  444.  bgt.s .okpos1
  445.  neg.w d5
  446. .okpos1
  447.  
  448.  sub.w d2,d6
  449.  bgt.s .okpos2
  450.  neg.w d6
  451. .okpos2
  452.  
  453.  add.w d5,d6
  454.  asr.w #5,d6
  455.  add.w d0,d6
  456.  ble.s DARKPTS
  457.  
  458.  add.w d6,(a2,d4.w*4)
  459.  add.w d6,2(a2,d4.w*4)
  460.  bra.s DARKPTS
  461.  
  462. DARKall:
  463.  
  464.  movem.l (a7)+,d0-d7/a0-a6
  465.  rts
  466.  
  467. Flash:
  468.  
  469. ; D0=number of a zone, D1=brightness change
  470.  
  471.  cmp.w #-20,d1
  472.  bgt.s .okflash
  473.  move.w #-20,d1
  474. .okflash:
  475.  
  476.  movem.l d0/a0/a1,-(a7)
  477.  
  478.  move.l #CurrentPointBrights,a1
  479.  
  480.  move.l ZoneAdds,a0
  481.  move.l (a0,d0.w*4),a0
  482.  add.l LEVELDATA,a0
  483.  
  484.  move.l a0,-(a7)
  485.  
  486.  add.w ToZonePts(a0),a0
  487. flashpts:
  488.  move.w (a0)+,d2
  489.  blt.s flashedall
  490.  add.w d1,(a1,d2.w*4)
  491.  add.w d1,2(a1,d2.w*4)
  492.  bra flashpts
  493.  
  494. flashedall:
  495.  move.l (a7)+,a0
  496.  
  497.  move.l #ZoneBrightTable,a1
  498.  add.w d1,(a1,d0.w*4)
  499.  add.w d1,2(a1,d0.w*4)
  500.  
  501.  add.l #ToListOfGraph,a0
  502.  
  503. doemall:
  504.  move.w (a0),d0
  505.  blt.s doneemall
  506.  add.w d1,(a1,d0.w*4)
  507.  add.w d1,2(a1,d0.w*4)
  508.  addq #8,a0
  509.  bra.s doemall
  510.  
  511. doneemall:
  512.  movem.l (a7)+,d0/a0/a1
  513.  
  514.  rts
  515.  
  516. prot2: dc.w 0
  517.  
  518. radius: dc.w 0
  519.  
  520. ExplodeIntoBits:
  521.  
  522.  move.w d3,radius
  523.  
  524.  cmp.w #7,d2
  525.  ble.s .oksplut
  526.  move.w #7,d2
  527. .oksplut:
  528.  
  529.  move.l NastyShotData,a5
  530.  move.w #19,d1
  531. .findeight
  532.  move.w 12(a5),d0
  533.  blt.s .gotonehere
  534.  adda.w #64,a5
  535.  dbra d1,.findeight
  536.  rts
  537.  
  538. .gotonehere
  539.  
  540.  move.b #0,shotpower(a5)
  541.  
  542.  
  543.  move.l ObjectPoints,a2
  544.  move.w (a5),d3
  545.  lea (a2,d3.w*8),a2
  546. ; jsr GetRand
  547. ; lsr.w #4,d0
  548. ; move.w radius,d1
  549. ; and.w d1,d0
  550. ; asr.w #1,d1
  551. ; sub.w d1,d0
  552.  move.w newx,d0
  553.  move.w d0,(a2)
  554. ; jsr GetRand
  555. ; lsr.w #4,d0
  556. ; move.w radius,d1
  557. ; and.w d1,d0
  558. ; asr.w #1,d1
  559. ; sub.w d1,d0
  560.  move.w newz,d0
  561.  move.w d0,4(a2)
  562.  
  563.  move.b #2,16(a2)
  564.  
  565.  jsr GetRand
  566.  and.w #8190,d0
  567.  move.l #SineTable,a2
  568.  adda.w d0,a2
  569.  move.w (a2),d3
  570.  move.w 2048(a2),d4
  571.  Jsr GetRand
  572.  and.w #3,d0
  573.  add.w #1,d0
  574.  ext.l d3
  575.  ext.l d4
  576.  asl.l d0,d3
  577.  asl.l d0,d4
  578.  move.l ImpactX(a0),d0
  579.  swap d4
  580.  asr.w #1,d0
  581.  add.w d0,d4
  582.  swap d0
  583.  move.w d4,shotzvel(a5)
  584.  swap d3
  585.  asr.w #1,d0
  586.  add.w d0,d3
  587.  move.w d3,shotxvel(a5)
  588.  jsr GetRand
  589.  and.w #1023,d0
  590.  add.w #2*128,d0
  591.  neg.w d0
  592.  move.w d0,shotyvel(a5)
  593.  move.l #0,EnemyFlags(a5)
  594.  move.w 12(a0),12(a5)
  595.  
  596. ; jsr GetRand
  597. ; lsr.w #4,d0
  598. ; move.w radius,d1
  599. ; and.w d1,d0
  600. ; asr.w #1,d1
  601. ; sub.w d1,d0
  602.  move.w 4(a0),d0
  603.  move.w d0,4(a5)
  604.  add.w #6,d0
  605.  ext.l d0
  606.  asl.l #7,d0
  607.  
  608.  move.l d0,accypos(a5)
  609. ; move.w d2,d0
  610. ; and.w #3,d0
  611. ; add.w #50,d0
  612.  move.b TypeOfSplat,shotsize(a5)
  613. ; move.w #40,shotgrav(a5)
  614.  move.w #0,shotflags(a5)
  615.  move.w #0,shotlife(a5)
  616.  clr.b shotstatus(a5)
  617.  move.b ObjInTop(a0),ObjInTop(a5)
  618.  st worry(a5)
  619.  adda.w #64,a5
  620.  sub.w #1,d2
  621.  blt.s .gotemall
  622.  dbra d1,.findeight
  623.  
  624. .gotemall
  625.  
  626.  rts
  627.  
  628. brightanim:
  629.  
  630.  move.l #BrightAnimTable,a1
  631.  move.l #BrightAnimPtrs,a3
  632.  move.l #BrightAnimStarts,a4
  633. dobrightanims
  634.  move.l (a3),d0
  635.  blt nomoreanims
  636.  move.l d0,a2
  637.  move.w (a2)+,d0
  638.  cmp.w #999,d0
  639.  bne.s itsabright
  640.  move.l (a4),a2
  641.  move.w (a2)+,d0
  642. itsabright:
  643.  move.l a2,(a3)+
  644.  addq #4,a4
  645.  move.w d0,(a1)+
  646.  bra.s dobrightanims
  647.  
  648. nomoreanims:
  649.  rts
  650.  
  651. BrightAnimTable: ds.w 20
  652. BrightAnimPtrs:
  653.  dc.l PulseANIM1
  654.  dc.l PulseANIM2
  655.  dc.l PulseANIM3
  656.  dc.l PulseANIM4
  657.  dc.l PulseANIM5
  658.  dc.l FlickerANIM
  659.  dc.l FireFlickerANIM
  660.  dc.l -1
  661.  
  662. BrightAnimStarts:
  663.  dc.l PulseANIM1
  664.  dc.l PulseANIM2
  665.  dc.l PulseANIM3
  666.  dc.l PulseANIM4
  667.  dc.l PulseANIM5
  668.  dc.l FlickerANIM
  669.  dc.l FireFlickerANIM
  670.  
  671. PulseANIM1:
  672.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
  673.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  674.  dc.w 999
  675.  
  676. PulseANIM2:
  677.  dc.w 9,10,11,12,13,14,15,16,17,18,19,20
  678.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  679.  dc.w 1,2,3,4,5,6,7,8
  680.  dc.w 999
  681.  
  682. PulseANIM3:
  683.  dc.w 17,18,19,20
  684.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  685.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
  686.  dc.w 999
  687.  
  688.  
  689. PulseANIM4:
  690.  
  691.  dc.w 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  692.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,19,18,17
  693.  
  694.  dc.w 999
  695.  
  696. PulseANIM5:
  697.  
  698.  dc.w 8,7,6,5,4,3,2,1
  699.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,19,18,17,16,15,14,13,12,11,10,9
  700.  dc.w 999
  701.  
  702.  
  703. FlickerANIM:
  704.  dcb.w 20,20
  705.  dc.w 1
  706.  dcb.w 30,20
  707.  dc.w 1
  708.  dcb.w 5,20
  709.  dc.w 1
  710.  dc.w 999
  711.  
  712. FireFlickerANIM:
  713.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  714.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  715.  dc.w -5,-5
  716.  dc.w 999
  717.  
  718. realtab:
  719.  dc.l prot1-78935450
  720.  dc.l prot2-78935450
  721.  dc.l prot3-78935450
  722.  dc.l prot4-78935450
  723.  dc.l prot5-78935450
  724.  dc.l prot6-78935450
  725.  dc.l prot7-78935450
  726.  dc.l prot8-78935450
  727.  dc.l prot9-78935450
  728.  dc.l protA-78935450
  729.  
  730. objvels: ds.l 8
  731.  
  732. FramesToDraw: dc.w 0
  733. TempFrames: dc.w 0
  734.  
  735. TimeToNoise: dc.w 0
  736.  
  737. ODDEVEN: dc.w 0
  738.  
  739. BACKSFX:
  740.  
  741.  move.w TempFrames,d0
  742.  sub.w d0,TimeToNoise
  743.  bgt .nosfx
  744.  
  745.  jsr GetRand
  746.  lsr.w #3,d0
  747.  and.w #127,d0
  748.  add.w #100,d0
  749.  move.w d0,TimeToNoise
  750.  
  751.  move.l Roompt,a0
  752.  
  753.  add.w ODDEVEN,a0
  754.  
  755.  move.w #2,d0
  756.  sub.w ODDEVEN,d0
  757.  move.w d0,ODDEVEN
  758.  
  759.  move.w ToBackSFX(a0),d1    ; mask for sfx
  760.  beq .nosfx
  761.  
  762.  jsr GetRand
  763.  lsr.w #3,d0
  764.  
  765. .notfound
  766.  addq #1,d0
  767.  and.w #15,d0
  768.  btst d0,d1
  769.  beq.s .notfound
  770.  
  771.  move.l LINKFILE,a0
  772.  add.l #BackSFX,a0
  773.  move.w (a0,d0.w*2),Samplenum
  774.  move.w #$fff0,IDNUM
  775.  st.b notifplaying
  776.  move.l #0,Noisex
  777.  move.b #0,Echo
  778.  jsr GetRand
  779.  and.w #15,d0
  780.  add.w #32,d0
  781.  move.w d0,Noisevol
  782.  
  783.  jsr MakeSomeNoise
  784.  
  785. .nosfx:
  786.  
  787.  rts
  788.  
  789. objmoveanim:
  790.  
  791.  move.l PLR1_Roompt,a0
  792.  move.w (a0),PLR1_Zone
  793.  move.l PLR2_Roompt,a0
  794.  move.w (a0),PLR2_Zone
  795.  move.l PLR3_Roompt,a0
  796.  move.w (a0),PLR3_Zone
  797.  
  798.  cmp.b #'n',mors
  799.  bne.s .okp2
  800.  move.w #-5,PLR2_Zone
  801. .okp2:
  802.  
  803.  move.w #0,PLAYERONENOISEVOL
  804.  move.w #0,PLAYERTWONOISEVOL
  805.  
  806.  move.l #BOREDOMSPACE,BOREDOMPTR
  807.  
  808.  bsr BACKSFX
  809.  
  810.  bsr Player1Shot
  811.  bsr Player2Shot
  812.  bsr Player3Shot
  813. ; bsr SwitchRoutine
  814.  bsr ObjectHandler
  815.  bsr DoorRoutine
  816.  
  817.  
  818.  move.w #0,PLR1_FloorSpd
  819.  move.w #0,PLR2_FloorSpd
  820.  move.w #0,PLR3_FloorSpd
  821.  
  822.  bsr LiftRoutine
  823.  bsr brightanim
  824.  
  825.  subq.w #1,animtimer
  826.  bgt.s notzero
  827.  move.w #2,animtimer
  828.  move.l otherrip,d0
  829.  move.l RipTear,otherrip
  830.  move.l d0,RipTear
  831. notzero:
  832.  
  833.  rts
  834.  
  835. ******************************
  836.  
  837. tstdir: dc.w 0
  838.  
  839. liftheighttab: ds.w 40
  840. doorheighttab: ds.w 40
  841. PLR1_stoodonlift: dc.b 0
  842. PLR2_stoodonlift: dc.b 0
  843. PLR3_stoodonlift: dc.b 0
  844. liftattop: dc.b 0
  845. liftatbot: dc.b 0
  846.  
  847.  
  848. DoorLocks: dc.w 0
  849. LiftLocks: dc.w 0
  850.  
  851. ZoneBrightTable:
  852.  ds.l 300
  853.  
  854. DoWaterAnims:
  855.  
  856.  move.w #20,d0
  857. wateranimlop:
  858.  move.l (a0)+,d1
  859.  move.l (a0)+,d2
  860.  move.l (a0),d3
  861.  move.w 4(a0),d4
  862.  move.w d4,d5
  863.  muls TempFrames,d5
  864.  add.l d5,d3
  865.  cmp.l d1,d3
  866.  bgt.s waternotattop
  867.  
  868.  move.l d1,d3
  869.  move.w #128,d4
  870.  bra waterdone
  871.  
  872. waternotattop:
  873.  
  874.  cmp.l d2,d3
  875.  blt.s waterdone
  876.  
  877.  move.l d2,d3
  878.  move.w #-128,d4
  879.  
  880. waterdone:
  881.  
  882.  move.l d3,(a0)+
  883.  move.w d4,(a0)+
  884.  move.l d3,d1
  885. morezones:
  886.  move.w (a0)+,d2
  887.  bge.s okzone
  888.  
  889.  
  890.  dbra d0,wateranimlop
  891.  rts
  892.  
  893. okzone:
  894.  
  895.  move.l (a0)+,a1
  896.  add.l LEVELGRAPHICS,a1
  897.  move.l d1,d3
  898.  asr.l #6,d3
  899.  move.w d3,2(a1)
  900.  move.l ZoneAdds,a1
  901.  move.l (a1,d2.w*4),a1
  902.  add.l LEVELDATA,a1
  903.  move.l d1,ToZoneWater(a1)
  904.  
  905.  bra.s morezones
  906.  
  907.  rts
  908.  
  909. FLOORMOVESPD: dc.w 0
  910.  
  911.  even
  912. LiftRoutine:
  913.  
  914.  move.w #-1,ThisDoor
  915.  move.l LiftData,a0
  916.  move.l #liftheighttab,a6
  917.  
  918. doalift:
  919.  add.w #1,ThisDoor
  920.  move.w (a0)+,d0    ; bottom of lift movement
  921.  cmp.w #999,d0
  922.  bne notallliftsdone
  923.  move.w #999,(a6)
  924.  
  925.  move.w #0,LiftLocks
  926.  
  927.  bsr DoWaterAnims
  928.  
  929.  rts
  930.  
  931. notallliftsdone:
  932.  move.w (a0)+,d1    ; top of lift movement.
  933.  
  934.  move.w (a0)+,OPENINGSPEED
  935.  neg.w OPENINGSPEED
  936.  move.w (a0)+,CLOSINGSPEED
  937.  move.w (a0)+,STAYOPENFOR
  938.  move.w (a0)+,OPENINGSFX
  939.  move.w (a0)+,CLOSINGSFX
  940.  move.w (a0)+,OPENSFX
  941.  move.w (a0)+,CLOSEDSFX
  942.  subq.w #1,OPENINGSFX
  943.  subq.w #1,CLOSINGSFX
  944.  subq.w #1,OPENSFX
  945.  subq.w #1,CLOSEDSFX
  946.  move.w (a0)+,d2
  947.  move.w (a0)+,d3
  948.  sub.w THISPLRxoff,d2
  949.  sub.w THISPLRzoff,d3
  950.  move.w cosval,d4
  951.  move.w sinval,d5
  952.  
  953.  muls d2,d4
  954.  muls d3,d5
  955.  sub.l d5,d4
  956.  add.l d4,d4
  957.  swap d4
  958.  move.w d4,Noisex
  959.  
  960.  move.w sinval,d4
  961.  move.w cosval,d5
  962.  
  963.  muls d2,d4
  964.  muls d3,d5
  965.  sub.l d5,d4
  966.  add.l d4,d4
  967.  swap d4
  968.  move.w d4,Noisez
  969.    
  970.  move.w (a0),d3
  971.  move.w d3,(a6)+
  972.  move.w 2(a0),d2
  973.  
  974.  move.w 8(a0),d7
  975.  move.l ZoneAdds,a1
  976.  move.l (a1,d7.w*4),a1
  977.  add.l LEVELDATA,a1
  978.  move.b ToEcho(a1),Echo
  979.  
  980.  move.w d2,d7    ; speed of movement.
  981.  
  982.  move.w d2,FLOORMOVESPD
  983.  
  984.  muls TempFrames,d2
  985.  add.w d2,d3
  986.  move.w d7,d2
  987.  cmp.w d3,d0
  988.  sle.s liftatbot
  989.  bgt.s .nolower
  990.  
  991.  tst.w d2
  992.  beq.s .nonoise3
  993.  move.w #50,Noisevol
  994.  move.w CLOSEDSFX,Samplenum
  995.  blt.s .nonoise3
  996.  move.b #1,chanpick
  997.  clr.b notifplaying
  998.  move.w #$fffd,IDNUM
  999.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1000.  jsr MakeSomeNoise
  1001.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1002. .nonoise3:
  1003.   
  1004.  moveq #0,d2
  1005.  move.w d0,d3
  1006. .nolower:
  1007.  
  1008.  cmp.w d3,d1
  1009.  sge.s liftattop
  1010.  blt.s .noraise
  1011.  
  1012.  tst.w d2
  1013.  beq.s .nonoise
  1014.  move.w #0,(a6)
  1015.  move.w #50,Noisevol
  1016.  move.w OPENSFX,Samplenum
  1017.  blt.s .nonoise
  1018.  move.b #1,chanpick
  1019.  clr.b notifplaying
  1020.  move.w #$fffd,IDNUM
  1021.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1022.  jsr MakeSomeNoise
  1023.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1024. .nonoise
  1025.  
  1026.  moveq #0,d2
  1027.  move.w d1,d3
  1028. .noraise:
  1029.  
  1030.  sub.w d3,d0
  1031.  cmp.w #15*16,d0
  1032.  slt d6
  1033.  
  1034.  move.w d3,(a0)+
  1035.  move.l a0,a5
  1036.  move.w d2,(a0)+
  1037.  move.w d2,d7
  1038.  
  1039.  move.l (a0)+,a1
  1040.  add.l LEVELGRAPHICS,a1
  1041.  asr.w #2,d3
  1042.  move.w d3,d0
  1043.  asl.w #2,d0
  1044.  move.w d0,2(a1)
  1045.  move.w d3,d0
  1046.  muls #256,d3
  1047.  move.w (a0)+,d5
  1048.  
  1049.  move.l ZoneAdds,a1
  1050.  move.l (a1,d5.w*4),a1
  1051.  add.l LEVELDATA,a1
  1052.  move.w (a1),d5
  1053.  move.l PLR1_Roompt,a3
  1054.  move.l d3,2(a1)
  1055.  neg.w d0
  1056.  
  1057.  cmp.w (a3),d5
  1058.  seq.s PLR1_stoodonlift
  1059.  bne.s .nosetfloorspd1
  1060.  
  1061.  move.w FLOORMOVESPD,PLR1_FloorSpd
  1062.  
  1063. .nosetfloorspd1:
  1064.  
  1065.  move.l PLR2_Roompt,a3
  1066.  cmp.w (a3),d5
  1067.  seq.s PLR2_stoodonlift
  1068.  bne.s .nosetfloorspd2
  1069.  
  1070.  move.w FLOORMOVESPD,PLR2_FloorSpd
  1071.  
  1072. .nosetfloorspd2:
  1073.  
  1074.  move.l PLR3_Roompt,a3
  1075.  cmp.w (a3),d5
  1076.  seq.s PLR3_stoodonlift
  1077.  bne.s .nosetfloorspd3
  1078.  
  1079.  move.w FLOORMOVESPD,PLR3_FloorSpd
  1080.  
  1081. .nosetfloorspd3:
  1082.  
  1083.  
  1084.  move.w (a0)+,d2    ; conditions
  1085. ; and.w Conditions,d2
  1086. ; cmp.w -2(a0),d2
  1087.  move.w ThisDoor,d2
  1088.  move.w LiftLocks,d5
  1089.  btst d2,d5
  1090.  beq.s .satisfied 
  1091.  
  1092.  move.w (a0)+,d5
  1093.  
  1094. .dothesimplething:
  1095.  move.l FloorLines,a3
  1096. .simplecheck:
  1097.  move.w (a0)+,d5
  1098.  blt nomoreliftwalls
  1099.  asl.w #4,d5
  1100.  lea (a3,d5.w),a4
  1101.  move.w #0,14(a4)
  1102.  move.l (a0)+,a1
  1103.  add.l LEVELGRAPHICS,a1
  1104.  move.l (a0)+,a2
  1105.  adda.w d0,a2
  1106.  move.l a2,10(a1)
  1107.  move.l d3,20(a1)
  1108.  bra.s .simplecheck
  1109.  bra nomoreliftwalls 
  1110.  
  1111. .satisfied:
  1112.  
  1113.  move.l FloorLines,a3
  1114.  moveq #0,d4
  1115.  moveq #0,d5
  1116.  move.b (a0)+,d4
  1117.  move.b (a0)+,d5
  1118.  tst.b liftattop
  1119.  bne tstliftlower
  1120.  tst.b liftatbot
  1121.  bne tstliftraise
  1122.  move.w #0,d1
  1123.  
  1124. backfromlift
  1125.  
  1126.  and.w #255,d0
  1127.  
  1128. liftwalls:
  1129.  move.w (a0)+,d5
  1130.  blt nomoreliftwalls
  1131.  
  1132.  asl.w #4,d5
  1133.  lea (a3,d5.w),a4
  1134.  move.w 14(a4),d4
  1135.  move.w #$8000,14(a4)
  1136.  and.w d1,d4
  1137.  beq.s .nothinghit
  1138.  move.w d7,(a5)
  1139.  move.w #50,Noisevol
  1140.  move.w ACTIONNOISE,Samplenum
  1141.  blt.s .nothinghit
  1142.  move.b #1,chanpick
  1143.  st notifplaying
  1144.  move.w #$fffe,IDNUM
  1145.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  1146.  jsr MakeSomeNoise
  1147.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  1148. .nothinghit:
  1149.  move.l (a0)+,a1
  1150.  add.l LEVELGRAPHICS,a1
  1151.  move.l (a0)+,a2
  1152.  adda.w d0,a2
  1153.  move.l a2,10(a1)
  1154.  move.l d3,20(a1)
  1155.  bra liftwalls
  1156.  
  1157. nomoreliftwalls 
  1158.  bra doalift
  1159.  
  1160.  rts
  1161.  
  1162. tstliftlower:
  1163.  move.w CLOSINGSFX,ACTIONNOISE
  1164.  cmp.b #1,d5
  1165.  blt.s lift0
  1166.  beq.s lift1
  1167.  cmp.b #3,d5
  1168.  blt lift2
  1169.  beq lift3
  1170.  
  1171. lift0:
  1172.  
  1173.  moveq #0,d1
  1174.  tst.b p1_spctap
  1175.  beq.s .noplr1
  1176.  move.w #%100000000,d1
  1177.  move.w CLOSINGSPEED,d7
  1178.  tst.b PLR1_stoodonlift
  1179.  beq.s .noplr1
  1180.  move.w #$8000,d1
  1181.  bra backfromlift
  1182.  
  1183. .noplr1:
  1184.  tst.b p2_spctap
  1185.  beq.s .noplr2
  1186.  or.w #%100000000000,d1
  1187.  move.w CLOSINGSPEED,d7
  1188.  tst.b PLR2_stoodonlift
  1189.  beq.s .noplr2
  1190.  move.w #$8000,d1
  1191.  bra backfromlift
  1192.  
  1193. .noplr2:
  1194.  
  1195.  tst.b p3_spctap
  1196.  beq.s .noplr3
  1197.  or.w #%100000000000,d1
  1198.  move.w CLOSINGSPEED,d7
  1199.  tst.b PLR3_stoodonlift
  1200.  beq.s .noplr3
  1201.  move.w #$8000,d1
  1202.  bra backfromlift
  1203.  
  1204. .noplr3:
  1205.  bra backfromlift
  1206.  
  1207. lift1:
  1208.  move.w CLOSINGSPEED,d7
  1209.  tst.b PLR1_stoodonlift
  1210.  bne.s lift1b
  1211.  tst.b PLR2_stoodonlift
  1212.  bne.s lift1b
  1213.  tst.b PLR3_stoodonlift
  1214.  bne.s lift1b
  1215.  move.w #%100100000000,d1
  1216.  bra backfromlift
  1217. lift1b:
  1218.  move.w #$8000,d1
  1219.  bra backfromlift
  1220.  
  1221. lift2:
  1222.  move.w #$8000,d1
  1223.  move.w CLOSINGSPEED,d7
  1224.  bra backfromlift
  1225.  
  1226. lift3:
  1227.  move.w #$0,d1
  1228.  bra backfromlift
  1229.  
  1230. tstliftraise:
  1231.  move.w OPENINGSFX,ACTIONNOISE
  1232.  cmp.b #1,d4
  1233.  blt.s rlift0
  1234.  beq.s rlift1
  1235.  cmp.b #3,d4
  1236.  blt rlift2
  1237.  beq rlift3
  1238.  
  1239. rlift0:
  1240.  
  1241.  moveq #0,d1
  1242.  tst.b p1_spctap
  1243.  beq.s .noplr1
  1244.  move.w #%100000000,d1
  1245.  move.w OPENINGSPEED,d7
  1246.  tst.b PLR1_stoodonlift
  1247.  beq.s .noplr1
  1248.  move.w #$8000,d1
  1249.  bra backfromlift
  1250.  
  1251. .noplr1:
  1252.  tst.b p2_spctap
  1253.  beq.s .noplr2
  1254.  or.w #%100000000000,d1
  1255.  move.w OPENINGSPEED,d7
  1256.  tst.b PLR2_stoodonlift
  1257.  beq.s .noplr2
  1258.  move.w #$8000,d1
  1259.  bra backfromlift
  1260.  
  1261. .noplr2:
  1262.  
  1263.  tst.b p3_spctap
  1264.  beq.s .noplr3
  1265.  or.w #%100000000000,d1
  1266.  move.w OPENINGSPEED,d7
  1267.  tst.b PLR3_stoodonlift
  1268.  beq.s .noplr2
  1269.  move.w #$8000,d1
  1270.  bra backfromlift
  1271.  
  1272. .noplr3:
  1273.  
  1274.  
  1275.  bra backfromlift
  1276.  
  1277. rlift1:
  1278.  move.w OPENINGSPEED,d7
  1279.  tst.b PLR1_stoodonlift
  1280.  bne.s rlift1b
  1281.  tst.b PLR2_stoodonlift
  1282.  bne.s rlift1b
  1283.  tst.b PLR3_stoodonlift
  1284.  bne.s rlift1b
  1285.  move.w #%100100000000,d1
  1286.  bra backfromlift
  1287. rlift1b:
  1288.  move.w #$8000,d1
  1289.  bra backfromlift
  1290.  
  1291. rlift2:
  1292.  move.w #$8000,d1
  1293.  move.w OPENINGSPEED,d7
  1294.  bra backfromlift
  1295.  
  1296. rlift3:
  1297.  move.w #$0,d1
  1298.  bra backfromlift
  1299.  
  1300.  
  1301. animtimer: dc.w 2
  1302.  
  1303.  
  1304. doordir: dc.w -1
  1305. doorpos: dc.w -9
  1306. dooropen: dc.b 0
  1307. doorclosed: dc.b 0 
  1308. ThisDoor: dc.w 0
  1309. OPENINGSPEED: dc.w 0
  1310. CLOSINGSPEED: dc.w 0
  1311. STAYOPENFOR: dc.w 0
  1312. OPENINGSFX: dc.w 0
  1313. CLOSINGSFX: dc.w 0
  1314. OPENSFX: dc.w 0
  1315. CLOSEDSFX: dc.w 0
  1316.  
  1317.  even 
  1318.  DoorRoutine:
  1319.  
  1320.  move.l #doorheighttab,a6
  1321.  move.l DoorData,a0
  1322.  move.w #-1,ThisDoor
  1323.  
  1324. doadoor:
  1325.  
  1326.  add.w #1,ThisDoor
  1327.  move.w (a0)+,d0    ; bottom of door movement
  1328.  cmp.w #999,d0
  1329.  bne notalldoorsdone
  1330.  move.w #999,(a6)
  1331.  move.w #0,DoorLocks
  1332.  rts
  1333. notalldoorsdone:
  1334.  move.w (a0)+,d1    ; top of door movement.
  1335.  
  1336.  move.w (a0)+,OPENINGSPEED
  1337.  neg.w OPENINGSPEED
  1338.  move.w (a0)+,CLOSINGSPEED
  1339.  move.w (a0)+,STAYOPENFOR
  1340.  move.w (a0)+,OPENINGSFX
  1341.  move.w (a0)+,CLOSINGSFX
  1342.  move.w (a0)+,OPENSFX
  1343.  move.w (a0)+,CLOSEDSFX
  1344.  subq.w #1,OPENINGSFX
  1345.  subq.w #1,CLOSINGSFX
  1346.  subq.w #1,OPENSFX
  1347.  subq.w #1,CLOSEDSFX
  1348.  move.w (a0)+,d2
  1349.  move.w (a0)+,d3
  1350.  sub.w p1_xoff,d2
  1351.  sub.w p1_zoff,d3
  1352.  move.w cosval,d4
  1353.  move.w sinval,d5
  1354.  
  1355.  muls d2,d4
  1356.  muls d3,d5
  1357.  sub.l d5,d4
  1358.  add.l d4,d4
  1359.  swap d4
  1360.  move.w d4,Noisex
  1361.  
  1362.  move.w sinval,d4
  1363.  move.w cosval,d5
  1364.  
  1365.  muls d2,d4
  1366.  muls d3,d5
  1367.  sub.l d5,d4
  1368.  add.l d4,d4
  1369.  swap d4
  1370.  move.w d4,Noisez
  1371.  
  1372.  move.w (a0),d3
  1373.  move.w 2(a0),d2
  1374.  
  1375.  move.w 8(a0),d7
  1376.  move.l ZoneAdds,a1
  1377.  move.l (a1,d7.w*4),a1
  1378.  add.l LEVELDATA,a1
  1379.  move.b ToEcho(a1),Echo
  1380.  
  1381.  muls TempFrames,d2
  1382.  add.w d2,d3
  1383.  move.w 2(a0),d2
  1384.  cmp.w d3,d0
  1385.  sle.s doorclosed
  1386.  bgt.s nolower
  1387.  
  1388.  tst.w d2
  1389.  beq.s .nonoise
  1390.  move.w #50,Noisevol
  1391.  move.w CLOSEDSFX,Samplenum
  1392.  blt.s .nonoise
  1393.  move.b #1,chanpick
  1394.  clr.b notifplaying
  1395.  move.w #$fffd,IDNUM
  1396.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1397.  jsr MakeSomeNoise
  1398.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1399. .nonoise 
  1400.  
  1401.  moveq #0,d2
  1402.  move.w d3,d0
  1403.  
  1404. nolower:
  1405.  
  1406.  cmp.w d3,d1
  1407.  sge.s dooropen
  1408.  blt.s noraise
  1409.  
  1410.  
  1411.  tst.w d2
  1412.  beq.s .nonoise
  1413.  move.w #0,(a6)
  1414.  move.w #50,Noisevol
  1415.  move.w OPENSFX,Samplenum
  1416.  blt.s .nonoise
  1417.  move.b #1,chanpick
  1418.  clr.b notifplaying
  1419.  move.w #$fffd,IDNUM
  1420.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1421.  jsr MakeSomeNoise
  1422.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1423. .nonoise
  1424.  
  1425.  move.w d1,d3
  1426.  moveq #0,d2
  1427. noraise:
  1428.  
  1429. NOTMOVING:
  1430.  
  1431.  sub.w d3,d0
  1432.  cmp.w #15*16,d0
  1433.  sge d6
  1434.  
  1435.  move.w d3,(a0)+
  1436.  move.l a0,a5
  1437.  move.w d2,(a0)+
  1438.  move.w d2,d7
  1439.  
  1440.  move.l (a0)+,a1
  1441.  add.l LEVELGRAPHICS,a1
  1442.  asr.w #2,d3
  1443.  move.w d3,d0
  1444.  asl.w #2,d0
  1445.  move.w d0,2(a1)
  1446.  move.w d3,d0
  1447.  muls #256,d3
  1448.  move.l ZoneAdds,a1
  1449.  move.w (a0)+,d5
  1450.  
  1451.  
  1452.  move.l (a1,d5.w*4),a1
  1453.  add.l LEVELDATA,a1
  1454.  move.l d3,6(a1)
  1455.  neg.w d0
  1456.  and.w #255,d0
  1457. ; add.w #64,d0
  1458.  
  1459.  cmp.w PLR2_Zone,d5
  1460.  beq.s .gobackup
  1461.  cmp.w PLR3_Zone,d5
  1462.  beq.s .gobackup
  1463.  cmp.w PLR1_Zone,d5
  1464.  bne.s NotGoBackUp
  1465. .gobackup: 
  1466.  tst.b dooropen
  1467.  bne.s NotGoBackUp
  1468.  tst.w d2
  1469.  blt.s NotGoBackUp
  1470.  move.w #-16,d7
  1471.  move.w #$8000,d1
  1472.  move.w (a0)+,d2
  1473.  move.w (a0)+,d5
  1474.  bra backfromtst
  1475. NotGoBackUp:
  1476.  
  1477.  move.w (a0)+,d2    ; conditions
  1478. ; and.w Conditions,d2
  1479.  move.w ThisDoor,d2
  1480.  move.w DoorLocks,d5
  1481.  btst d2,d5
  1482.  beq.s satisfied 
  1483.  
  1484.  move.w (a0)+,d5
  1485.  
  1486. dothesimplething:
  1487.  move.l FloorLines,a3
  1488. simplecheck:
  1489.  move.w (a0)+,d5
  1490.  blt nomoredoorwalls
  1491.  asl.w #4,d5
  1492.  lea (a3,d5.w),a4
  1493.  move.w #0,14(a4)
  1494.  move.l (a0)+,a1
  1495.  add.l LEVELGRAPHICS,a1
  1496.  move.l (a0)+,a2
  1497.  adda.w d0,a2
  1498.  move.l a2,10(a1)
  1499.  move.l d3,24(a1)
  1500.  bra.s simplecheck
  1501.  bra nomoredoorwalls 
  1502.  
  1503.  
  1504. satisfied:
  1505.  
  1506.  moveq #0,d4
  1507.  moveq #0,d5
  1508.  move.b (a0)+,d5
  1509.  move.b (a0)+,d4
  1510.  tst.b dooropen
  1511.  bne tstdoortoclose
  1512.  tst.b doorclosed
  1513.  bne tstdoortoopen
  1514.  move.w #$0,d1
  1515.  
  1516. backfromtst:
  1517.  
  1518.  move.l FloorLines,a3
  1519.  
  1520. doorwalls:
  1521.  move.w (a0)+,d5
  1522.  blt.s nomoredoorwalls
  1523.  asl.w #4,d5
  1524.  lea (a3,d5.w),a4
  1525.  move.w 14(a4),d4
  1526.  move.w #$8000,14(a4)
  1527.  and.w d1,d4
  1528.  beq.s nothinghit
  1529.  move.w d7,(a5)
  1530.  move.w #50,Noisevol
  1531.  move.w ACTIONNOISE,Samplenum
  1532.  blt.s nothinghit
  1533.  move.b #1,chanpick
  1534.  clr.b notifplaying
  1535.  move.w #$fffd,IDNUM
  1536.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1537.  jsr MakeSomeNoise
  1538.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1539. nothinghit:
  1540.  move.l (a0)+,a1
  1541.  add.l LEVELGRAPHICS,a1
  1542.  move.l (a0)+,a2
  1543.  adda.w d0,a2
  1544.  move.l a2,10(a1)
  1545.  move.l d3,24(a1)
  1546.  bra.s doorwalls
  1547.  
  1548. nomoredoorwalls 
  1549.  addq #2,a6
  1550.  bra doadoor
  1551.  
  1552.  rts
  1553.  
  1554. ACTIONNOISE: dc.w 0
  1555.  
  1556. tstdoortoopen:
  1557.  move.w OPENINGSFX,ACTIONNOISE
  1558.  
  1559.  cmp.w #1,d5
  1560.  blt.s door0
  1561.  beq.s door1
  1562.  cmp.w #3,d5
  1563.  blt.s door2
  1564.  beq.s door3
  1565.  cmp.w #5,d5
  1566.  blt.s door4
  1567.  beq.s door5
  1568.  
  1569. door0:
  1570.  
  1571.  move.w #$0,d1
  1572.  tst.b p1_spctap
  1573.  beq.s .noplr1
  1574.  move.w #%100000000,d1
  1575. .noplr1:
  1576.  tst.b p2_spctap
  1577.  beq.s .noplr2
  1578.  or.w #%100000000000,d1
  1579. .noplr2:
  1580.  tst.b p3_spctap
  1581.  beq.s .noplr3
  1582.  or.w #%100000000000,d1
  1583. .noplr3:
  1584.  move.w OPENINGSPEED,d7
  1585.  bra backfromtst
  1586.  
  1587. door1:
  1588.  move.w #%100100000000,d1
  1589.  move.w OPENINGSPEED,d7
  1590.  bra backfromtst
  1591.  
  1592. door2:
  1593.  move.w #%10000000000,d1
  1594.  move.w OPENINGSPEED,d7
  1595.  bra backfromtst
  1596.  
  1597. door3:
  1598.  move.w #%1000000000,d1
  1599.  move.w OPENINGSPEED,d7
  1600.  bra backfromtst
  1601.  
  1602. door4:
  1603.  move.w #$8000,d1
  1604.  move.w OPENINGSPEED,d7
  1605.  bra backfromtst
  1606.  
  1607. door5:
  1608.  move.w #$0,d1
  1609.  bra backfromtst
  1610.  
  1611. tstdoortoclose:
  1612.  move.w TempFrames,d1
  1613.  add.w (a6),d1
  1614.  move.w d1,(a6)
  1615.  cmp.w STAYOPENFOR,d1
  1616.  bge.s .oktoclose
  1617.  move.w #1,d4
  1618.  
  1619. .oktoclose:
  1620.  
  1621.  move.w CLOSINGSFX,ACTIONNOISE
  1622.  tst.w d4
  1623.  beq.s dclose0
  1624.  bra.s dclose1
  1625.  
  1626. dclose0:
  1627.  move.w CLOSINGSPEED,d7
  1628.  move.w #$8000,d1
  1629.  bra backfromtst
  1630.  
  1631. dclose1:
  1632.  move.w #$0,d1
  1633.  bra backfromtst
  1634.  
  1635. SwitchRoutine:
  1636.  
  1637.  move.l SwitchData,a0
  1638.  move.w #7,d0
  1639.  move.l Points,a1
  1640. CheckSwitches
  1641.  
  1642.  tst.b p1_spctap
  1643.  bne p1_SpaceIsPressed
  1644. backtop2
  1645.  tst.b p2_spctap
  1646.  bne p2_SpaceIsPressed
  1647. backtoend
  1648.  
  1649.  tst.b 2(a0)
  1650.  beq nobutt
  1651.  
  1652.  tst.b 10(a0)
  1653.  beq nobutt
  1654.  
  1655.  move.w TempFrames,d1
  1656.  add.w d1,d1
  1657.  add.w d1,d1
  1658.  sub.b d1,3(a0)
  1659.  bne nobutt
  1660.  
  1661.  move.b #0,10(a0)
  1662.  move.l 6(a0),a3
  1663.  add.l LEVELGRAPHICS,a3
  1664.  move.w #11,4(a3)
  1665.  move.w (a3),d3
  1666.  and.w #%00000111100,d3
  1667.  move.w d3,(a3)
  1668.  move.w #7,d3
  1669.  sub.w d0,d3
  1670.  addq #4,d3
  1671.  move.w Conditions,d4
  1672.  bclr d3,d4
  1673.  move.w d4,Conditions
  1674.  move.w #0,Noisex
  1675.  move.w #0,Noisez
  1676.  move.w #50,Noisevol
  1677.  move.w #10,Samplenum
  1678.  move.b #1,chanpick
  1679.  st notifplaying
  1680.  move.w #$fffc,IDNUM
  1681.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1682.  jsr MakeSomeNoise
  1683.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1684.  
  1685. nobutt:
  1686.  
  1687.  adda.w #14,a0
  1688.  dbra d0,CheckSwitches
  1689.  rts
  1690.  
  1691. p1_SpaceIsPressed:
  1692.  move.w p1_xoff,d1
  1693.  move.w p1_zoff,d2
  1694.  move.w (a0),d3
  1695.  blt .NotCloseEnough
  1696.  move.w 4(a0),d3
  1697.  lea (a1,d3.w*4),a2
  1698.  move.w (a2),d3
  1699.  add.w 4(a2),d3
  1700.  asr.w #1,d3
  1701.  move.w 2(a2),d4
  1702.  add.w 6(a2),d4
  1703.  asr.w #1,d4
  1704.  sub.w d1,d3
  1705.  muls d3,d3
  1706.  sub.w d2,d4
  1707.  muls d4,d4
  1708.  add.l d3,d4
  1709.  cmp.l #60*60,d4
  1710.  bge .NotCloseEnough
  1711.  move.l 6(a0),a3
  1712.  add.l LEVELGRAPHICS,a3
  1713.  move.w #11,4(a3)
  1714.  move.w (a3),d3
  1715.  and.w #%00000111100,d3
  1716.  not.b 10(a0)
  1717.  beq.s .switchoff
  1718.  or.w #2,d3
  1719. .switchoff: 
  1720.  move.w d3,(a3)
  1721.  move.w #7,d3
  1722.  sub.w d0,d3
  1723.  addq #4,d3
  1724.  move.w Conditions,d4
  1725.  bchg d3,d4
  1726.  move.w d4,Conditions
  1727.  move.b #0,3(a0)
  1728.  move.w #0,Noisex
  1729.  move.w #0,Noisez
  1730.  move.w #50,Noisevol
  1731.  move.w #10,Samplenum
  1732.  move.b #1,chanpick
  1733.  st notifplaying
  1734.  move.w #$fffc,IDNUM
  1735.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1736.  jsr MakeSomeNoise
  1737.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1738.  
  1739. .NotCloseEnough:
  1740.  bra backtop2
  1741.  
  1742. p2_SpaceIsPressed:
  1743.  move.w p2_xoff,d1
  1744.  move.w p2_zoff,d2
  1745.  move.w (a0),d3
  1746.  blt .NotCloseEnough
  1747.  move.w 4(a0),d3
  1748.  lea (a1,d3.w*4),a2
  1749.  move.w (a2),d3
  1750.  add.w 4(a2),d3
  1751.  asr.w #1,d3
  1752.  move.w 2(a2),d4
  1753.  add.w 6(a2),d4
  1754.  asr.w #1,d4
  1755.  sub.w d1,d3
  1756.  muls d3,d3
  1757.  sub.w d2,d4
  1758.  muls d4,d4
  1759.  add.l d3,d4
  1760.  cmp.l #60*60,d4
  1761.  bge .NotCloseEnough
  1762.  move.l 6(a0),a3
  1763.  add.l LEVELGRAPHICS,a3
  1764.  move.w #11,4(a3)
  1765.  move.w (a3),d3
  1766.  and.w #%00000111100,d3
  1767.  not.b 10(a0)
  1768.  beq.s .switchoff
  1769.  or.w #2,d3
  1770. .switchoff: 
  1771.  move.w d3,(a3)
  1772.  move.w #7,d3
  1773.  sub.w d0,d3
  1774.  addq #4,d3
  1775.  move.w Conditions,d4
  1776.  bchg d3,d4
  1777.  move.w d4,Conditions
  1778.  movem.l a0/a1/d0,-(a7)
  1779.  move.w #0,Noisex
  1780.  move.w #0,Noisez
  1781.  move.w #50,Noisevol
  1782.  move.w #10,Samplenum
  1783.  move.b #1,chanpick
  1784.  st notifplaying
  1785.  move.w #$fffc,IDNUM
  1786.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  1787.  jsr MakeSomeNoise
  1788.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  1789.  
  1790.  movem.l (a7)+,a0/a1/d0
  1791.  
  1792. .NotCloseEnough:
  1793.  bra backtoend
  1794.  
  1795. prot1: dc.w 0
  1796.   
  1797. tempGotBigGun: dc.w 0 
  1798. tempGunDamage: dc.w 0
  1799. tempGunNoise: dc.w 1
  1800. tempxoff: dc.w 0
  1801. tempzoff: dc.w 0
  1802. tempRoompt: dc.l 0
  1803.  
  1804. PLR3_GunFrame: dc.l 0
  1805.  
  1806. PLR1_GotBigGun: dc.w 0
  1807. PLR1_GunDamage: dc.w 0
  1808. PLR1_GunNoise: dc.w 0
  1809. PLR2_GotBigGun: dc.w 0
  1810. PLR2_GunDamage: dc.w 0
  1811. PLR2_GunNoise: dc.w 0
  1812. bulyspd: dc.w 0 
  1813. closedist: dc.w 0
  1814.  
  1815. PLR1_ObsInLine:
  1816.  ds.b 400 
  1817. PLR3_ObsInLine:
  1818.  ds.b 400 
  1819. PLR2_ObsInLine:
  1820.  ds.b 400 
  1821.  
  1822. rotcount:
  1823.  dc.w 0
  1824.  
  1825. shotvels: ds.l 20
  1826.  
  1827.  include "MULTIPLAYERSHOOT.s"
  1828.  
  1829. PLR1_GunFrame: dc.w 0
  1830. PLR2_GunFrame: dc.w 0
  1831. NUMZONES: dc.w 0
  1832.  
  1833. duh: dc.w 0
  1834. double: dc.w 0
  1835. ivescreamed: dc.w 0
  1836.  
  1837. ObjectHandler:
  1838.  
  1839.  move.l #ObjWork,WORKPTR
  1840.  move.l #DAMAGED,DAMAGEPTR
  1841.  
  1842.  move.l ObjectData,a0
  1843. Objectloop:
  1844.  tst.w (a0)
  1845.  blt doneallobj
  1846.  move.w 12(a0),GraphicRoom(a0)
  1847.  
  1848.  move.b 16(a0),d0
  1849.  cmp.b #1,d0
  1850.  blt JUMPALIEN
  1851.  beq JUMPOBJECT
  1852.  cmp.b #2,d0
  1853.  beq JUMPBULLET
  1854.  
  1855. doneobj:
  1856.  
  1857. dontworryyourprettyhead:
  1858.  adda.w #64,a0
  1859.  add.l #8,WORKPTR
  1860.  add.l #2,DAMAGEPTR
  1861.  add.l #8,BOREDOMPTR
  1862.  bra Objectloop
  1863.  
  1864. doneallobj:
  1865.  rts
  1866.  
  1867. JUMPALIEN
  1868.  tst.w 12(a0)
  1869.  blt.s .dontworry
  1870.  
  1871.  tst.b numlives(a0)
  1872.  beq.s .nolock
  1873.  move.l DoorsHeld(a0),d0
  1874.  or.l d0,DoorLocks
  1875. .nolock
  1876.  
  1877.  tst.b worry(a0)
  1878.  beq .dontworry
  1879.  jsr ItsAnAlien
  1880.  
  1881.  tst.w 12-64(a0)
  1882.  blt.s .notanaux
  1883.  move.w 12(a0),12-64(a0)
  1884.  move.w 12(a0),GraphicRoom-64(a0)
  1885. .notanaux:
  1886.  
  1887. .dontworry
  1888.  bra doneobj
  1889.  
  1890. JUMPOBJECT
  1891.  tst.w 12(a0)
  1892.  blt.s .dontworry
  1893.  jsr ItsAnObject
  1894. .dontworry
  1895.  bra doneobj
  1896. JUMPBULLET:
  1897.  jsr ItsABullet
  1898.  bra doneobj
  1899.  
  1900. ItsAGasPipe:
  1901.  
  1902.  clr.b worry(a0)
  1903.  
  1904.  move.w TempFrames,d0
  1905.  tst.w ThirdTimer(a0)
  1906.  ble.s maybeflame
  1907.  
  1908.  sub.w d0,ThirdTimer(a0)
  1909.  move.w #5,SecTimer(a0)
  1910.  move.w #10,FourthTimer(a0)
  1911.  rts
  1912.  
  1913. maybeflame:
  1914.  
  1915.  sub.w d0,FourthTimer(a0)
  1916.  blt.s yesflame
  1917.  rts
  1918.  
  1919. yesflame:
  1920.  move.w #10,FourthTimer(a0)
  1921.  sub.w #1,SecTimer(a0)
  1922.  bgt.s notdoneflame
  1923.  
  1924.  move.w ObjTimer(a0),ThirdTimer(a0)
  1925.  
  1926. notdoneflame:
  1927.  
  1928.  cmp.w #4,SecTimer(a0)
  1929.  bne.s .nowhoosh
  1930.  
  1931.  movem.l d0-d7/a0-a6,-(a7)
  1932.  move.l #ObjRotated,a1
  1933.  move.w (a0),d0
  1934.  lea (a1,d0.w*8),a1
  1935.  move.l (a1),Noisex
  1936.  move.w #200,Noisevol
  1937.  move.w #22,Samplenum
  1938.  move.b #1,chanpick
  1939.  clr.b notifplaying
  1940.  move.w (a0),IDNUM
  1941.  jsr MakeSomeNoise
  1942.  movem.l (a7)+,d0-d7/a0-a6
  1943.  
  1944. .nowhoosh:
  1945.  
  1946. ; Gas pipe: facing direction is given by
  1947. ; leved (perpendicular to wall) so
  1948. ; just continuously spray out flame!
  1949.  move.l NastyShotData,a5
  1950.  move.w #19,d1
  1951. .findonefree
  1952.  move.w 12(a5),d0
  1953.  blt.s .foundonefree
  1954.  adda.w #64,a5
  1955.  dbra d1,.findonefree
  1956.  
  1957.  rts
  1958.  
  1959. .foundonefree:
  1960.  
  1961.  move.b #2,16(a5)
  1962.  move.w 12(a0),12(a5)
  1963.  move.w 4(a0),d0
  1964.  sub.w #80,d0
  1965.  move.w d0,4(a5)
  1966.  ext.l d0
  1967.  asl.l #7,d0
  1968.  move.l d0,accypos(a5)
  1969.  clr.b shotstatus(a5)
  1970.  move.w #0,shotyvel(a5)
  1971.  move.w (a0),d0
  1972.  move.w (a5),d1
  1973.  move.l ObjectPoints,a1
  1974.  move.l (a1,d0.w*8),(a1,d1.w*8)
  1975.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  1976.  move.b #3,shotsize(a5)
  1977.  move.w #0,shotflags(a5)
  1978.  move.w #0,shotgrav(a5)
  1979.  move.b #7,shotpower(a5)
  1980.  move.l #%100000100000,EnemyFlags(a5)
  1981.  move.w #0,shotanim(a5)
  1982.  move.w #0,shotlife(a5)
  1983.  move.l #SineTable,a1
  1984.  move.w Facing(a0),d0
  1985.  move.w (a1,d0.w),d1
  1986.  adda.w #2048,a1
  1987.  move.w (a1,d0.w),d2
  1988.  ext.l d1
  1989.  ext.l d2
  1990.  asl.l #4,d1
  1991.  asl.l #4,d2
  1992.  swap d1
  1993.  swap d2
  1994.  move.w d1,shotxvel(a5)
  1995.  move.w d2,shotzvel(a5)
  1996.  st worry(a5)
  1997.  
  1998.  rts
  1999.  
  2000. ; include "ab3:source/AI.s"
  2001.  
  2002. ItsABarrel:
  2003.  
  2004.  clr.b worry(a0)
  2005.  move.w 12(a0),GraphicRoom(a0)
  2006.  
  2007.  cmp.w #8,8(a0)
  2008.  bne.s notexploding
  2009.  
  2010.  add.w #$404,6(a0)
  2011.  
  2012.  move.w 10(a0),d0
  2013.  add.w #1,d0
  2014.  cmp.w #8,d0
  2015.  bne.s .notdone
  2016.  
  2017.  move.w #-1,12(a0)
  2018.  move.w #-1,GraphicRoom(a0)
  2019.  rts
  2020.  
  2021. .notdone:
  2022.  move.w d0,10(a0)
  2023.  rts
  2024.  
  2025. notexploding:
  2026.  
  2027.  move.w #$1f1f,14(a0)
  2028.  
  2029.  move.w 12(a0),d0
  2030.  move.l ZoneAdds,a1
  2031.  move.l (a1,d0.w*4),a1
  2032.  add.l LEVELDATA,a1
  2033.  move.l ToZoneFloor(a1),d0
  2034.  tst.b ObjInTop(a0)
  2035.  beq.s .okinbot
  2036.  move.l ToUpperFloor(a1),d0
  2037. .okinbot:
  2038.  asr.l #7,d0
  2039.  sub.w #60,d0
  2040.  move.w d0,4(a0)
  2041.  
  2042.  moveq #0,d2
  2043.  move.b damagetaken(a0),d2
  2044.  beq.s nodamage
  2045.  move.b #0,damagetaken(a0)
  2046.  sub.b d2,numlives(a0)
  2047.  bgt.s nodamage
  2048.  move.b #0,numlives(a0)
  2049.  
  2050.  movem.l d0-d7/a0-a6,-(a7)
  2051.  
  2052.  move.w (a0),d0
  2053.  move.l ObjectPoints,a1
  2054.  move.w (a1,d0.w*8),Viewerx
  2055.  move.w 4(a1,d0.w*8),Viewerz
  2056.  move.w #40,d0
  2057.  jsr ComputeBlast
  2058.  
  2059.  move.w (a0),d0
  2060.  move.l #ObjRotated,a1
  2061.  move.l (a1,d0.w*8),Noisex
  2062.  move.w #300,Noisevol
  2063.  move.w #15,Samplenum
  2064.  jsr MakeSomeNoise
  2065.  
  2066.  movem.l (a7)+,d0-d7/a0-a6
  2067.  move.w #8,8(a0)
  2068.  move.w #0,10(a0)
  2069.  move.w #$2020,14(a0)
  2070.  move.w #-30,2(a0)
  2071.  
  2072.  rts
  2073.  
  2074. nodamage:
  2075.  
  2076.  move.w (a0),d0
  2077.  move.l ObjectPoints,a1
  2078.  move.w (a1,d0.w*8),Viewerx
  2079.  move.w 4(a1,d0.w*8),Viewerz
  2080.  move.b ObjInTop(a0),ViewerTop
  2081.  move.b PLR1_StoodInTop,TargetTop
  2082.  move.l PLR1_Roompt,ToRoom
  2083.  
  2084.  move.w 12(a0),d0
  2085.  move.l ZoneAdds,a1
  2086.  move.l (a1,d0.w*4),a1
  2087.  add.l LEVELDATA,a1
  2088.  move.l a1,FromRoom
  2089.   
  2090.  move.w PLR1_xoff,Targetx
  2091.  move.w PLR1_zoff,Targetz
  2092.  move.l PLR1_yoff,d0
  2093.  asr.l #7,d0
  2094.  move.w d0,Targety
  2095.  move.w 4(a0),Viewery
  2096.  jsr CanItBeSeen
  2097.  
  2098.  clr.b 17(a0)
  2099.  tst.b CanSee
  2100.  beq .noseeplr1
  2101.  move.b #1,17(a0)
  2102.  
  2103. .noseeplr1:
  2104.  
  2105.  move.b PLR2_StoodInTop,TargetTop
  2106.  move.l PLR2_Roompt,ToRoom
  2107.  move.w PLR2_xoff,Targetx
  2108.  move.w PLR2_zoff,Targetz
  2109.  move.l PLR2_yoff,d0
  2110.  asr.l #7,d0
  2111.  move.w d0,Targety
  2112.  move.w 4(a0),Viewery
  2113.  jsr CanItBeSeen
  2114.  
  2115.  tst.b CanSee
  2116.  beq .noseeplr2
  2117.  or.b #2,17(a0)
  2118.  
  2119. .noseeplr2:
  2120.  
  2121.  
  2122.  rts
  2123.  
  2124.  include "ab3:source_4000/Multialiencontrol.s"
  2125.  
  2126. nextCPt: dc.w 0
  2127.  
  2128. RipTear: dc.l 256*17*65536
  2129. otherrip: dc.l 256*18*65536
  2130.  
  2131. ItsAMediKit:
  2132.  
  2133.  clr.b worry(a0)
  2134.  move.w 12(a0),GraphicRoom(a0)
  2135.  
  2136.  move.w 12(a0),d0
  2137.  move.l ZoneAdds,a1
  2138.  move.l (a1,d0.w*4),a1
  2139.  add.l LEVELDATA,a1
  2140.  move.l ToZoneFloor(a1),d0
  2141.  tst.b ObjInTop(a0)
  2142.  beq.s .okinbot
  2143.  move.l ToUpperFloor(a1),d0
  2144. .okinbot:
  2145.  asr.l #7,d0
  2146.  sub.w #32,d0
  2147.  move.w d0,4(a0)
  2148.  
  2149.  
  2150. HealFactor EQU 18
  2151.  
  2152.  
  2153.  cmp.w #127,PLR1_energy
  2154.  bge .NotSameZone
  2155.  
  2156.  move.b PLR1_StoodInTop,d0
  2157.  move.b ObjInTop(a0),d1
  2158.  eor.b d1,d0
  2159.  bne .NotSameZone
  2160.  
  2161.  move.w PLR1_xoff,oldx
  2162.  move.w PLR1_zoff,oldz
  2163.  move.w PLR1_Zone,d7
  2164.  
  2165.  cmp.w 12(a0),d7
  2166.  bne .NotSameZone
  2167.  move.w (a0),d0
  2168.  move.l ObjectPoints,a1
  2169.  move.w (a1,d0.w*8),newx
  2170.  move.w 4(a1,d0.w*8),newz
  2171.  move.l #100*100,d2
  2172.  jsr CheckHit
  2173.  tst.b hitwall
  2174.  beq .NotPickedUp
  2175.  
  2176.  move.l PLR1_Obj,a2
  2177.  move.w (a2),d0
  2178.  move.l #ObjRotated,a2
  2179.  move.l (a2,d0.w*8),Noisex
  2180.  move.w #50,Noisevol
  2181.  move.w #4,Samplenum
  2182.  move.b #2,chanpick
  2183.  clr.b notifplaying
  2184.  move.w (a0),IDNUM
  2185.  movem.l a0/a1/d2/d6/d7,-(a7)
  2186.  jsr MakeSomeNoise
  2187.  movem.l (a7)+,a0/a1/d2/d6/d7
  2188.  
  2189.  move.w #-1,12(a0)
  2190.  move.w #-1,GraphicRoom(a0)
  2191.  move.w HealFactor(a0),d0
  2192.  add.w PLR1_energy,d0
  2193.  cmp.w #127,d0
  2194.  ble.s .okokokokokok
  2195.  move.w #127,d0
  2196. .okokokokokok:
  2197.  move.w d0,PLR1_energy
  2198.  
  2199. .NotPickedUp:
  2200.  
  2201. .NotSameZone:
  2202.  
  2203. MEDIPLR2
  2204.  
  2205.  cmp.w #127,PLR2_energy
  2206.  bge .NotSameZone
  2207.  
  2208.  move.b PLR2_StoodInTop,d0
  2209.  move.b ObjInTop(a0),d1
  2210.  eor.b d1,d0
  2211.  bne .NotSameZone
  2212.  
  2213.  move.w PLR2_xoff,oldx
  2214.  move.w PLR2_zoff,oldz
  2215.  move.w PLR2_Zone,d7
  2216.  move.w 12(a0),d0
  2217.  
  2218.  cmp.w 12(a0),d7
  2219.  bne .NotSameZone
  2220.  move.w (a0),d0
  2221.  move.l ObjectPoints,a1
  2222.  move.w (a1,d0.w*8),newx
  2223.  move.w 4(a1,d0.w*8),newz
  2224.  move.l #100*100,d2
  2225.  jsr CheckHit
  2226.  tst.b hitwall
  2227.  beq .NotPickedUp
  2228.  
  2229.  move.l PLR2_Obj,a2
  2230.  move.w (a2),d0
  2231.  move.l #ObjRotated,a2
  2232.  move.l (a2,d0.w*8),Noisex
  2233.  move.w #50,Noisevol
  2234.  move.w #4,Samplenum
  2235.  move.b #2,chanpick
  2236.  clr.b notifplaying
  2237.  move.w (a0),IDNUM
  2238.  movem.l a0/a1/d2/d6/d7,-(a7)
  2239.  jsr MakeSomeNoise
  2240.  movem.l (a7)+,a0/a1/d2/d6/d7
  2241.  
  2242.  move.w #-1,12(a0)
  2243.  move.w #-1,GraphicRoom(a0)
  2244.  move.w HealFactor(a0),d0
  2245.  add.w PLR2_energy,d0
  2246.  cmp.w #127,d0
  2247.  ble.s .okokokokokok
  2248.  move.w #127,d0
  2249. .okokokokokok:
  2250.  move.w d0,PLR2_energy
  2251.  
  2252. .NotPickedUp:
  2253.  
  2254. .NotSameZone:
  2255.  
  2256.  
  2257.  rts
  2258.  
  2259.  
  2260. OFFSETTOGRAPH:
  2261.  dc.l (40*8)*43+10
  2262.  dc.l (40*8)*11+12
  2263.  dc.l (40*8)*11+22
  2264.  dc.l (40*8)*43+24
  2265.  
  2266. AmmoInGuns:
  2267.  dc.w 0
  2268.  dc.w 5
  2269.  dc.w 1
  2270.  dc.w 0
  2271.  dc.w 1
  2272.  dc.w 0
  2273.  dc.w 0
  2274.  dc.w 5
  2275.  
  2276. ItsAKey:
  2277.  
  2278.  move.w #$0f0f,14(a0)
  2279.  
  2280.  tst.b NASTY
  2281.  bne .yesnas
  2282.  move.w #-1,12(a0)
  2283.  rts
  2284. .yesnas:
  2285.  
  2286.  move.w 12(a0),GraphicRoom(a0)
  2287.  clr.b worry(a0)
  2288.  
  2289.  move.b PLR1_StoodInTop,d0
  2290.  move.b ObjInTop(a0),d1
  2291.  eor.b d1,d0
  2292.  bne .NotSameZone
  2293.  
  2294.  move.w PLR1_xoff,oldx
  2295.  move.w PLR1_zoff,oldz
  2296.  move.w PLR1_Zone,d7
  2297.  move.w 12(a0),d0
  2298.  move.l ZoneAdds,a1
  2299.  move.l (a1,d0.w*4),a1
  2300.  add.l LEVELDATA,a1
  2301.  move.l 2(a1),d0
  2302.  asr.l #7,d0
  2303.  sub.w #16,d0
  2304.  move.w d0,4(a0)
  2305.  cmp.w 12(a0),d7
  2306.  bne .NotSameZone
  2307.  move.w (a0),d0
  2308.  move.l ObjectPoints,a1
  2309.  move.w (a1,d0.w*8),newx
  2310.  move.w 4(a1,d0.w*8),newz
  2311.  move.l #100*100,d2
  2312.  jsr CheckHit
  2313.  tst.b hitwall
  2314.  beq .NotPickedUp
  2315.  
  2316.  move.w #0,Noisex
  2317.  move.w #0,Noisez
  2318.  move.w #50,Noisevol
  2319.  move.w #4,Samplenum
  2320.  move.b #2,chanpick
  2321.  clr.b notifplaying
  2322.  move.w (a0),IDNUM
  2323.  movem.l a0/a1/d2/d6/d7,-(a7)
  2324.  jsr MakeSomeNoise
  2325.  movem.l (a7)+,a0/a1/d2/d6/d7
  2326.  
  2327.  move.w #-1,12(a0)
  2328.  move.w #-1,GraphicRoom(a0)
  2329.  move.b 17(a0),d0
  2330.  or.b d0,Conditions+1
  2331.  
  2332.  move.l Panel,a2
  2333.  moveq #0,d1
  2334.  lsr.b #1,d0
  2335.  bcs.s .done
  2336.  addq #1,d1
  2337.  lsr.b #1,d0
  2338.  bcs.s .done
  2339.  addq #1,d1
  2340.  lsr.b #1,d0
  2341.  bcs.s .done
  2342.  addq #1,d1 
  2343. .done
  2344.  
  2345.  move.l #OFFSETTOGRAPH,a1
  2346.  add.l (a1,d1.w*4),a2
  2347.  move.l #PanelKeys,a1
  2348.  
  2349.  muls #6*22*8,d1
  2350.  
  2351.  adda.w d1,a1
  2352.  
  2353.  move.w #22*8-1,d0    ;lines
  2354. .lines:
  2355.  
  2356.  move.l (a1)+,d1
  2357.  or.l d1,(a2)
  2358.  move.w (a1)+,d1
  2359.  or.w d1,4(a2)
  2360.  adda.w #40,a2
  2361.  
  2362.  dbra d0,.lines
  2363.  
  2364.  
  2365. .NotPickedUp:
  2366.  
  2367. .NotSameZone:
  2368.  
  2369.  rts
  2370.  
  2371. Conditions: dc.l 0
  2372.  
  2373. ; Format of animations:
  2374. ; Size (-1 = and of anim) (w)
  2375. ; Address of Frame. (l)
  2376. ; height offset (w)
  2377.  
  2378. Bul1Anim:
  2379.  dc.w 20*256+15
  2380.  dc.w 6,8
  2381.  dc.w 0
  2382.  dc.w 17*256+17
  2383.  dc.w 6,9
  2384.  dc.w 0
  2385.  dc.w 15*256+20
  2386.  dc.w 6,10
  2387.  dc.w 0
  2388.  dc.w 17*256+17
  2389.  dc.w 6,11
  2390.  dc.w 0
  2391.  dc.l -1
  2392.  
  2393. Bul1Pop
  2394.  dc.b 25,25
  2395.  dc.w 1,6
  2396.  dc.w 0
  2397.  dc.b 25,25
  2398.  dc.w 1,7
  2399.  dc.w -4
  2400.  dc.b 25,25
  2401.  dc.w 1,8
  2402.  dc.w -4
  2403.  dc.b 25,25
  2404.  dc.w 1,9
  2405.  dc.w -4
  2406.  dc.b 25,25
  2407.  dc.w 1,10
  2408.  dc.w -4
  2409.  dc.b 25,25
  2410.  dc.w 1,11
  2411.  dc.w -4
  2412.  dc.b 25,25
  2413.  dc.w 1,12
  2414.  dc.w -4
  2415.  dc.b 25,25
  2416.  dc.w 1,13
  2417.  dc.w -4
  2418.  dc.b 25,25
  2419.  dc.w 1,14
  2420.  dc.w -4
  2421.  dc.b 25,25
  2422.  dc.w 1,15
  2423.  dc.w -4
  2424.  dc.b 25,25
  2425.  dc.w 1,16
  2426.  dc.w -4
  2427.  dc.l -1
  2428.  
  2429. Bul3Anim:
  2430.  dc.b 25,25
  2431.  dc.w 0,12
  2432.  dc.w 0
  2433.  dc.b 25,25
  2434.  dc.w 0,13
  2435.  dc.w 0
  2436.  dc.b 25,25
  2437.  dc.w 0,14
  2438.  dc.w 0
  2439.  dc.b 25,25
  2440.  dc.w 0,15
  2441.  dc.w 0
  2442.  dc.l -1
  2443.  
  2444. Bul3Pop:
  2445.  dc.l -1
  2446.  
  2447. Bul4Anim:
  2448.  dc.b 25,25
  2449.  dc.w 6,4
  2450.  dc.w 0
  2451.  dc.b 25,25
  2452.  dc.w 6,5
  2453.  dc.w 0
  2454.  dc.b 25,25
  2455.  dc.w 6,6
  2456.  dc.w 0
  2457.  dc.b 25,25
  2458.  dc.w 6,7
  2459.  dc.w 0
  2460.  dc.l -1
  2461.  
  2462. Bul4Pop:
  2463.  dc.b 20,20
  2464.  dc.w 6,4
  2465.  dc.w 0
  2466.  dc.b 15,15
  2467.  dc.w 6,5
  2468.  dc.w 0
  2469.  dc.b 10,10
  2470.  dc.w 6,6
  2471.  dc.w 0
  2472.  dc.b 5,5
  2473.  dc.w 6,7
  2474.  dc.w 0
  2475.  dc.l -1
  2476.  
  2477. Bul5Anim:
  2478.  dc.b 10,10
  2479.  dc.w 6,4
  2480.  dc.w 0
  2481.  dc.b 10,10
  2482.  dc.w 6,5
  2483.  dc.w 0
  2484.  dc.b 10,10
  2485.  dc.w 6,6
  2486.  dc.w 0
  2487.  dc.b 10,10
  2488.  dc.w 6,7
  2489.  dc.w 0
  2490.  dc.l -1
  2491.  
  2492. Bul5Pop:
  2493.  dc.b 8,8
  2494.  dc.w 6,4
  2495.  dc.w 0
  2496.  dc.b 6,6
  2497.  dc.w 6,5
  2498.  dc.w 0
  2499.  dc.b 4,4
  2500.  dc.w 6,6
  2501.  dc.w 0
  2502.  dc.l -1
  2503.  
  2504. grenAnim:
  2505.  dc.b 25,25
  2506.  dc.w 1,21
  2507.  dc.w 0
  2508.  dc.b 25,25
  2509.  dc.w 1,22
  2510.  dc.w 0
  2511.  dc.b 25,25
  2512.  dc.w 1,23
  2513.  dc.w 0
  2514.  dc.b 25,25
  2515.  dc.w 1,24
  2516.  dc.w 0
  2517.  dc.l -1
  2518.  
  2519. Bul2Anim:
  2520.  dc.b 25,25
  2521.  dc.w -18,4
  2522.  dc.w 0
  2523.  dc.b 25,25
  2524.  dc.w -18,5
  2525.  dc.w 0
  2526.  dc.b 25,25
  2527.  dc.w -18,6
  2528.  dc.w 0
  2529.  dc.b 25,25
  2530.  dc.w -18,7
  2531.  dc.w 0
  2532.  dc.b 25,25
  2533.  dc.w -18,4
  2534.  dc.w 0
  2535.  dc.b 25,25
  2536.  dc.w -18,5
  2537.  dc.w 0
  2538.  dc.b 25,25
  2539.  dc.w -18,6
  2540.  dc.w 0
  2541.  dc.b 25,25
  2542.  dc.w -18,7
  2543.  dc.w 0
  2544.  dc.w -1
  2545.  
  2546.  
  2547. Bul2Pop:
  2548.  dc.b 25,25
  2549.  dc.w 2,8
  2550.  dc.w -4
  2551.  dc.b 29,29
  2552.  dc.w 2,9
  2553.  dc.w -4
  2554.  dc.b 33,33
  2555.  dc.w 2,10
  2556.  dc.w -4
  2557.  dc.b 37,37
  2558.  dc.w 2,11
  2559.  dc.w -4
  2560.  dc.b 41,41
  2561.  dc.w 2,12
  2562.  dc.w -4
  2563.  dc.b 45,45
  2564.  dc.w 2,13
  2565.  dc.w -4
  2566.  dc.b 49,49
  2567.  dc.w 2,14
  2568.  dc.w -4
  2569.  dc.b 53,53
  2570.  dc.w 2,15
  2571.  dc.w -4
  2572.  dc.b 57,57
  2573.  dc.w 2,16
  2574.  dc.w -4
  2575.  dc.b 61,61
  2576.  dc.w 2,17
  2577.  dc.w -4
  2578.  dc.b 65,65
  2579.  dc.w 2,18
  2580.  dc.w -4
  2581.  dc.b 69,69
  2582.  dc.w 2,19
  2583.  dc.w -4
  2584.  dc.w -1
  2585.  
  2586. RockAnim:
  2587.  dc.b 16,16
  2588.  dc.w 6,0
  2589.  dc.w 0
  2590.  dc.b 16,16
  2591.  dc.w 6,1
  2592.  dc.w 0
  2593.  dc.b 16,16
  2594.  dc.w 6,2
  2595.  dc.w 0
  2596.  dc.b 16,16
  2597.  dc.w 6,3
  2598.  dc.w 0  
  2599.  dc.l -1
  2600.  
  2601. val SET 100
  2602.  
  2603. RockPop:
  2604.  dc.b val,val
  2605.  dc.w 8,0
  2606.  dc.w -4
  2607. val SET val+10 
  2608.  dc.b val,val
  2609.  dc.w 8,1
  2610.  dc.w 0
  2611. val SET val+10 
  2612.  dc.b val,val
  2613.  dc.w 8,2
  2614.  dc.w -4
  2615. val SET val+10 
  2616.  dc.b val,val
  2617.  dc.w 8,3
  2618.  dc.w -4
  2619. val SET val+10 
  2620.  dc.b val,val
  2621.  dc.w 8,4
  2622.  dc.w -4
  2623. val SET val+10 
  2624.  dc.b val,val
  2625.  dc.w 8,4
  2626.  dc.w -4
  2627. val SET val+10 
  2628.  dc.b val,val
  2629.  dc.w 8,5
  2630.  dc.w -4
  2631. val SET val+10 
  2632.  dc.b val,val
  2633.  dc.w 8,5
  2634.  dc.w -4
  2635. val SET val+10 
  2636.  dc.b val,val
  2637.  dc.w 8,6
  2638.  dc.w -4
  2639. val SET val+10 
  2640.  dc.b val,val
  2641.  dc.w 8,6
  2642.  dc.w -4
  2643. val SET val+10 
  2644.  dc.b val,val
  2645.  dc.w 8,7
  2646.  dc.w -4
  2647. val SET val+10 
  2648.  dc.b val,val
  2649.  dc.w 8,7
  2650.  dc.w -4
  2651. val SET val+10 
  2652.  dc.b val,val
  2653.  dc.w 8,8
  2654.  dc.w -4
  2655. val SET val+10 
  2656.  dc.b val,val
  2657.  dc.w 8,8
  2658.  dc.w -4
  2659.  dc.l -1
  2660.  
  2661.  
  2662. val SET 5
  2663.  
  2664. FlameAnim:
  2665.  
  2666.  dc.b val,val
  2667.  dc.w 8,0
  2668.  dc.w 0
  2669. val SET val+4 
  2670.  dc.b val,val
  2671.  dc.w 8,1
  2672.  dc.w 0
  2673. val SET val+4 
  2674.  dc.b val,val
  2675.  dc.w 8,2
  2676.  dc.w 0
  2677. val SET val+4 
  2678.  dc.b val,val
  2679.  dc.w 8,3
  2680.  dc.w 0
  2681. val SET val+4 
  2682.  dc.b val,val
  2683.  dc.w 8,4
  2684.  dc.w 0
  2685. val SET val+4 
  2686.  dc.b val,val
  2687.  dc.w 8,4
  2688.  dc.w 0
  2689. val SET val+4 
  2690.  dc.b val,val
  2691.  dc.w 8,5
  2692.  dc.w 0
  2693. val SET val+4 
  2694.  dc.b val,val
  2695.  dc.w 8,5
  2696.  dc.w 0
  2697. val SET val+4 
  2698.  dc.b val,val
  2699.  dc.w 8,5
  2700.  dc.w 0
  2701. val SET val+4 
  2702.  dc.b val,val
  2703.  dc.w 8,6
  2704.  dc.w 0
  2705. val SET val+4 
  2706.  dc.b val,val
  2707.  dc.w 8,6
  2708.  dc.w 0
  2709. val SET val+4 
  2710.  dc.b val,val
  2711.  dc.w 8,6
  2712.  dc.w 0
  2713. val SET val+6 
  2714.  dc.b val,val
  2715.  dc.w 8,7
  2716.  dc.w 0
  2717. val SET val+8 
  2718.  dc.b val,val
  2719.  dc.w 8,7
  2720.  dc.w 0
  2721. val SET val+8 
  2722.  dc.b val,val
  2723.  dc.w 8,7
  2724.  dc.w 0
  2725. val SET val+8 
  2726.  dc.b val,val
  2727.  dc.w 8,7
  2728.  dc.w 0
  2729. val SET val+8 
  2730.  dc.b val,val
  2731.  dc.w 8,8
  2732.  dc.w 0
  2733. val SET val+8 
  2734.  dc.b val,val
  2735.  dc.w 8,8
  2736.  dc.w 0
  2737. val SET val+8 
  2738.  dc.b val,val
  2739.  dc.w 8,8
  2740.  dc.w 0
  2741.  
  2742.  dc.l -1
  2743.  
  2744. FlamePop:
  2745. val SET 4*35
  2746.  dc.b val,val
  2747.  dc.w 8,7
  2748.  dc.w 0
  2749. val SET val+4 
  2750.  dc.b val,val
  2751.  dc.w 8,7
  2752.  dc.w 0
  2753. val SET val+4 
  2754.  dc.b val,val
  2755.  dc.w 8,7
  2756.  dc.w 0
  2757. val SET val+4 
  2758.  dc.b val,val
  2759.  dc.w 8,8
  2760.  dc.w 0
  2761. val SET val+4 
  2762.  dc.b val,val
  2763.  dc.w 8,8
  2764.  dc.w 0
  2765. val SET val+4 
  2766.  dc.b val,val
  2767.  dc.w 8,8
  2768.  dc.w 0
  2769.  
  2770.  dc.l -1
  2771.  
  2772. Explode1Anim: 
  2773.  dc.b 25,25
  2774.  dc.w 0,16
  2775.  dc.w 0
  2776.  dc.b 25,25
  2777.  dc.w 0,17
  2778.  dc.w 0
  2779.  dc.b 25,25
  2780.  dc.w 0,18
  2781.  dc.w 0
  2782.  dc.b 25,25
  2783.  dc.w 0,19
  2784.  dc.w 0
  2785.  dc.l -1
  2786.  
  2787. Explode1Pop:
  2788.  dc.b 20,20
  2789.  dc.w 0,16
  2790.  dc.w 1
  2791.  dc.b 20,20
  2792.  dc.w 0,16
  2793.  dc.w 1
  2794.  dc.b 20,20
  2795.  dc.w 0,16
  2796.  dc.w 1
  2797.  dc.b 20,20
  2798.  dc.w 0,16
  2799.  dc.w 1
  2800.  dc.b 20,20
  2801.  dc.w 0,16
  2802.  dc.w 1
  2803.  dc.b 20,20
  2804.  dc.w 0,16
  2805.  dc.w 1
  2806.  dc.b 20,20
  2807.  dc.w 0,16
  2808.  dc.w 1
  2809.  dc.b 20,20
  2810.  dc.w 0,16
  2811.  dc.w 1
  2812.  
  2813.  dc.b 17,17
  2814.  dc.w 0,16
  2815.  dc.w 1
  2816.  
  2817.  dc.b 13,13
  2818.  dc.w 0,16
  2819.  dc.w 1
  2820.  
  2821.  dc.b 9,9
  2822.  dc.w 0,16
  2823.  dc.w 1
  2824.  
  2825.  dc.l -1
  2826.  
  2827. Explode2Anim: 
  2828.  dc.b 20,20
  2829.  dc.w 0,20
  2830.  dc.w 0
  2831.  dc.b 20,20
  2832.  dc.w 0,21
  2833.  dc.w 0
  2834.  dc.b 20,20
  2835.  dc.w 0,22
  2836.  dc.w 0
  2837.  dc.b 20,20
  2838.  dc.w 0,23
  2839.  dc.w 0
  2840.  dc.l -1
  2841.  
  2842. Explode2Pop:
  2843.  dc.b 20,20
  2844.  dc.w 0,20
  2845.  dc.w 1
  2846.  dc.b 20,20
  2847.  dc.w 0,20
  2848.  dc.w 1
  2849.  dc.b 20,20
  2850.  dc.w 0,20
  2851.  dc.w 1
  2852.  dc.b 20,20
  2853.  dc.w 0,20
  2854.  dc.w 1
  2855.  dc.b 20,20
  2856.  dc.w 0,20
  2857.  dc.w 1
  2858.  dc.b 20,20
  2859.  dc.w 0,20
  2860.  dc.w 1
  2861.  dc.b 20,20
  2862.  dc.w 0,20
  2863.  dc.w 1
  2864.  dc.b 20,20
  2865.  dc.w 0,20
  2866.  dc.w 1
  2867.  
  2868.  dc.b 17,17
  2869.  dc.w 0,20
  2870.  dc.w 1
  2871.  
  2872.  dc.b 13,13
  2873.  dc.w 0,20
  2874.  dc.w 1
  2875.  
  2876.  dc.b 9,9
  2877.  dc.w 0,20
  2878.  dc.w 1
  2879.  
  2880.  dc.l -1
  2881.  
  2882.  
  2883. Explode3Anim: 
  2884.  dc.b 20,20
  2885.  dc.w 0,24
  2886.  dc.w 0
  2887.  dc.b 20,20
  2888.  dc.w 0,25
  2889.  dc.w 0
  2890.  dc.b 20,20
  2891.  dc.w 0,26
  2892.  dc.w 0
  2893.  dc.b 20,20
  2894.  dc.w 0,27
  2895.  dc.w 0
  2896.  dc.l -1
  2897.  
  2898. Explode3Pop:
  2899.  
  2900.  dc.b 17,17
  2901.  dc.w 0,24
  2902.  dc.w 1
  2903.  dc.b 17,17
  2904.  dc.w 0,24
  2905.  dc.w 1
  2906.  dc.b 17,17
  2907.  dc.w 0,24
  2908.  dc.w 1
  2909.  dc.b 17,17
  2910.  dc.w 0,24
  2911.  dc.w 1
  2912.  dc.b 17,17
  2913.  dc.w 0,24
  2914.  dc.w 1
  2915.  dc.b 17,17
  2916.  dc.w 0,24
  2917.  dc.w 1
  2918.  dc.b 17,17
  2919.  dc.w 0,24
  2920.  dc.w 1
  2921.  dc.b 17,17
  2922.  dc.w 0,24
  2923.  dc.w 1
  2924.  
  2925.  dc.b 13,13
  2926.  dc.w 0,24
  2927.  dc.w 1
  2928.  
  2929.  dc.b 9,9
  2930.  dc.w 0,24
  2931.  dc.w 1
  2932.  
  2933.   dc.l -1
  2934.  
  2935. Explode4Anim: 
  2936.  dc.b 30,30
  2937.  dc.w 0,28
  2938.  dc.w 0
  2939.  dc.b 30,30
  2940.  dc.w 0,29
  2941.  dc.w 0
  2942.  dc.b 30,30
  2943.  dc.w 0,30
  2944.  dc.w 0
  2945.  dc.b 30,30
  2946.  dc.w 0,31
  2947.  dc.w 0
  2948.  dc.l -1
  2949.  
  2950. Explode4Pop:
  2951.  
  2952.  dc.b 20,20
  2953.  dc.w 0,28
  2954.  dc.w 0
  2955.  dc.b 20,20
  2956.  dc.w 0,28
  2957.  dc.w 1
  2958.  dc.b 20,20
  2959.  dc.w 0,28
  2960.  dc.w 1
  2961.  dc.b 20,20
  2962.  dc.w 0,28
  2963.  dc.w 1
  2964.  dc.b 20,20
  2965.  dc.w 0,28
  2966.  dc.w 1
  2967.  dc.b 20,20
  2968.  dc.w 0,28
  2969.  dc.w 1
  2970.  dc.b 20,20
  2971.  dc.w 0,28
  2972.  dc.w 1
  2973.  dc.b 20,20
  2974.  dc.w 0,28
  2975.  dc.w 1
  2976.  
  2977.  dc.b 17,17
  2978.  dc.w 0,28
  2979.  dc.w 1
  2980.  
  2981.  dc.b 13,13
  2982.  dc.w 0,28
  2983.  dc.w 1
  2984.  
  2985.  dc.b 9,9
  2986.  dc.w 0,28
  2987.  dc.w 1
  2988.  
  2989.  dc.l -1
  2990.   
  2991. BulletSizes:
  2992.  dc.w $0f0f,$707
  2993.  dc.w $0f0f,$f0f
  2994.  dc.w $0f0f,$1f1f
  2995.  dc.w $1f1f,$1f1f
  2996.  dc.w $0707,$1f1f
  2997.  dc.w $0f0f,$0f0f
  2998.  dc.w $0f0f,$0f0f
  2999.  dc.w $707,$707
  3000.  dc.w 0,0,0,0
  3001. ;10 
  3002.  dc.w 0,0,0,0,0,0,0,0,0,0
  3003.  dc.w 0,0,0,0,0,0,0,0,0,0
  3004. ;20
  3005.  dc.w 0,0,0,0,0,0,0,0,0,0
  3006.  dc.w 0,0,0,0,0,0,0,0,0,0
  3007. ;30
  3008.  dc.w 0,0,0,0,0,0,0,0,0,0
  3009.  dc.w 0,0,0,0,0,0,0,0,0,0
  3010. ;40
  3011.  dc.w 0,0,0,0,0,0,0,0,0,0
  3012.  dc.w 0,0,0,0,0,0,0,0,0,0
  3013. ;50
  3014.  dc.w $0707,$0707,$0707,$0707
  3015.  dc.w $0707,$0707,$0707,$0707
  3016.  
  3017. HitNoises:
  3018. ; dc.l -1,-1
  3019.  dc.w 15,200
  3020.  dc.w 15,200
  3021.  dc.l -1
  3022.  dc.w 15,200
  3023.  dc.l -1,-1,-1,-1,-1
  3024.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  3025.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  3026.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  3027.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  3028.  
  3029.  dc.w 13,50,13,50,13,50,13,50
  3030.  
  3031. ExplosiveForce:
  3032.  dc.w 0,0,64,0,40,0,0,0,0,0
  3033.  dc.w 0,0,0,0,0,0,0,0,0,0
  3034.  dc.w 0,0,0,0,0,0,0,0,0,0
  3035.  dc.w 0,0,0,0,0,0,0,0,0,0
  3036.  dc.w 0,0,0,0,0,0,0,0,0,0
  3037.  dc.w 0,0,0,0
  3038.   
  3039. BulletTypes:
  3040.  dc.l Bul1Anim,Bul1Pop
  3041.  dc.l Bul2Anim,Bul2Pop
  3042.  dc.l RockAnim,RockPop
  3043.  dc.l FlameAnim,FlamePop
  3044.  dc.l grenAnim,RockPop
  3045.  dc.l Bul4Anim,Bul4Pop
  3046.  dc.l Bul5Anim,Bul5Pop
  3047.  dc.l Bul1Anim,Bul1Pop
  3048.  dc.l 0,0
  3049.  dc.l 0,0
  3050.  
  3051.  dc.l 0,0
  3052.  dc.l 0,0
  3053.  dc.l 0,0
  3054.  dc.l 0,0
  3055.  dc.l 0,0
  3056.  dc.l 0,0
  3057.  dc.l 0,0
  3058.  dc.l 0,0
  3059.  dc.l 0,0
  3060.  dc.l 0,0
  3061.  
  3062.  dc.l 0,0
  3063.  dc.l 0,0
  3064.  dc.l 0,0
  3065.  dc.l 0,0
  3066.  dc.l 0,0
  3067.  dc.l 0,0
  3068.  dc.l 0,0
  3069.  dc.l 0,0
  3070.  dc.l 0,0
  3071.  dc.l 0,0
  3072.  
  3073.  dc.l 0,0
  3074.  dc.l 0,0
  3075.  dc.l 0,0
  3076.  dc.l 0,0
  3077.  dc.l 0,0
  3078.  dc.l 0,0
  3079.  dc.l 0,0
  3080.  dc.l 0,0
  3081.  dc.l 0,0
  3082.  dc.l 0,0
  3083.  
  3084.  dc.l 0,0
  3085.  dc.l 0,0
  3086.  dc.l 0,0
  3087.  dc.l 0,0
  3088.  dc.l 0,0
  3089.  dc.l 0,0
  3090.  dc.l 0,0
  3091.  dc.l 0,0
  3092.  dc.l 0,0
  3093.  dc.l 0,0
  3094.  
  3095.  dc.l Explode1Anim,Explode1Pop
  3096.  dc.l Explode2Anim,Explode2Pop
  3097.  dc.l Explode3Anim,Explode3Pop
  3098.  dc.l Explode4Anim,Explode4Pop
  3099.  
  3100. tsta: dc.l 0
  3101. timeout: dc.w 0
  3102. BRIGHTNESS: dc.w 0
  3103.  
  3104. ItsABullet:
  3105.  
  3106.  move.b #0,timeout
  3107.  move.w 12(a0),d0
  3108.  move.w d0,GraphicRoom(a0)
  3109.  blt doneshot
  3110.  
  3111.  moveq #0,d1
  3112.  move.b shotsize(a0),d1
  3113.  muls #B_BulStatLen,d1
  3114.  move.l LINKFILE,a6
  3115.  lea BulletAnimData(a6),a6
  3116.  add.l d1,a6
  3117.  
  3118.  tst.b shotstatus(a0)
  3119.  bne.s noworrylife
  3120.  
  3121. ; a6 points at bullet data.
  3122.  
  3123.  move.w shotlife(a0),d2
  3124.  blt.s infinite
  3125.  
  3126.  move.l B_LifeTime(a6),d1
  3127.  blt.s infinite
  3128.  
  3129.  cmp.w d2,d1
  3130.  bge.s notdone
  3131.  
  3132.  st timeout
  3133.  bra.s infinite 
  3134.  
  3135. notdone:
  3136.  
  3137.  move.w TempFrames,d2
  3138.  add.w d2,shotlife(a0)
  3139.  
  3140. infinite:
  3141.  
  3142. noworrylife:
  3143.  
  3144.  move.w #0,extlen
  3145.  move.b #$ff,awayfromwall
  3146.  
  3147.  
  3148.  tst.b shotstatus(a0)
  3149.  beq notpopping
  3150.  
  3151.  lea B_StartOfPop(a6),a1
  3152.  moveq #0,d1
  3153.  move.b shotanim(a0),d1
  3154.  
  3155.  move.w d1,d2
  3156.  add.w d1,d1
  3157.  add.w d2,d1
  3158.  add.w d1,d1
  3159.  
  3160.  move.l #0,8(a0)
  3161.  
  3162.  cmp.l #1,B_ImpactGraphicType(a6)
  3163.  blt.s .bitmapgraph
  3164.  beq.s .glaregraph
  3165. .additivegraph:
  3166.  move.b (a1,d1.w),9(a0)
  3167.  move.b 1(a1,d1.w),11(a0)
  3168.  move.b #6,10(a0)
  3169.  move.w 2(a1,d1.w),6(a0)
  3170.  move.b 5(a1,d1.w),BRIGHTNESS
  3171.  
  3172.  bra.s .donegraph
  3173. .bitmapgraph:
  3174.  move.b (a1,d1.w),9(a0)
  3175.  move.b 1(a1,d1.w),11(a0)
  3176.  move.w 2(a1,d1.w),6(a0)
  3177.  move.b 5(a1,d1.w),BRIGHTNESS
  3178.  
  3179.  bra.s .donegraph
  3180. .glaregraph:
  3181.  move.b (a1,d1.w),d0
  3182.  ext.w d0
  3183.  neg.w d0
  3184.  move.w d0,8(a0)
  3185.  move.b 1(a1,d1.w),11(a0)
  3186.  move.w 2(a1,d1.w),6(a0)
  3187.  move.b 5(a1,d1.w),BRIGHTNESS
  3188.  
  3189. .donegraph:
  3190.  
  3191.  addq #1,d2
  3192.  cmp.w B_PopFrames+2(a6),d2
  3193.  ble.s notdonepopping
  3194.  
  3195.  move.w #-1,12(a0)
  3196.  move.w #-1,GraphicRoom(a0)
  3197.  clr.b shotstatus(a0)
  3198.  move.b #0,shotanim(a0)
  3199.  rts
  3200. notdonepopping:
  3201.  
  3202.  move.b d2,shotanim(a0)
  3203.  moveq #0,d0
  3204.  move.b BRIGHTNESS,d0
  3205.  beq.s .nobright
  3206.  neg.w d0
  3207.  move.w (a0),d2
  3208.  move.l ObjectPoints,a2
  3209.  move.w (a2,d2.w*8),d1
  3210.  move.w 4(a2,d2.w*8),d2
  3211.  move.w 4(a0),d3
  3212.  ext.l d3
  3213.  asl.l #7,d3
  3214.  move.l d3,BRIGHTY
  3215.  move.w 12(a0),d3
  3216.  jsr BRIGHTENPOINTS
  3217. .nobright
  3218.  rts
  3219.  
  3220. BLOODYGREATBOMB: dc.w 0
  3221.  
  3222. notpopping:
  3223.  
  3224.  move.b shotsize(a0),BLOODYGREATBOMB
  3225.  
  3226.  lea B_StartOfAnim(a6),a1
  3227.  moveq #0,d1
  3228.  move.b shotanim(a0),d1
  3229.  
  3230.  add.w d1,d1
  3231.  move.w d1,d2
  3232.  add.w d1,d1
  3233.  add.w d2,d1
  3234.  
  3235.  move.l #0,8(a0)
  3236.  
  3237.  cmp.l #1,B_GraphType(a6)
  3238.  blt.s .bitmapgraph
  3239.  beq.s .glaregraph
  3240. .additivegraph:
  3241.  move.b (a1,d1.w),9(a0)
  3242.  move.b 1(a1,d1.w),11(a0)
  3243.  move.b #6,10(a0)
  3244.  move.w 2(a1,d1.w),6(a0)
  3245.  move.b 5(a1,d1.w),BRIGHTNESS
  3246.  
  3247.  bra.s .donegraph
  3248. .bitmapgraph:
  3249.  move.b (a1,d1.w),9(a0)
  3250.  move.b 1(a1,d1.w),11(a0)
  3251.  move.w 2(a1,d1.w),6(a0)
  3252.  move.b 5(a1,d1.w),BRIGHTNESS
  3253.  
  3254.  bra.s .donegraph
  3255. .glaregraph:
  3256.  move.b (a1,d1.w),d0
  3257.  ext.w d0
  3258.  neg.w d0
  3259.  move.w d0,8(a0)
  3260.  move.b 1(a1,d1.w),11(a0)
  3261.  move.w 2(a1,d1.w),6(a0)
  3262.  move.b 5(a1,d1.w),BRIGHTNESS
  3263.  
  3264. .donegraph:
  3265.  
  3266.  addq #1,d2
  3267.  cmp.w B_AnimFrames+2(a6),d2
  3268.  ble.s notdoneanim
  3269.  
  3270.  move.w #0,d2
  3271.  
  3272. notdoneanim:
  3273.  
  3274.  move.b d2,shotanim(a0)
  3275.  
  3276.  move.l ZoneAdds,a2
  3277.  move.l (a2,d0.w*4),d0
  3278.  add.l LEVELDATA,d0
  3279.  move.l d0,objroom
  3280.  
  3281. ******************************** 
  3282.  move.l objroom,a3
  3283.  move.b ToEcho(a3),Echo
  3284.  
  3285.  tst.b ObjInTop(a0)
  3286.  beq.s .notintop
  3287.  adda.w #8,a3
  3288. .notintop:
  3289.  
  3290.  move.l 6(a3),d0
  3291.  sub.l accypos(a0),d0
  3292.  cmp.l #10*128,d0
  3293.  blt .nohitroof 
  3294.  
  3295.  btst #0,shotflags+1(a0)
  3296.  beq.s .nobounce
  3297.  
  3298.  neg.w shotyvel(a0)
  3299.  
  3300.  move.l 6(a3),d0
  3301.  add.l #10*128,d0
  3302.  move.l d0,accypos(a0)
  3303.  
  3304.  tst.l B_Gravity(a6)
  3305.  beq .nohitroof
  3306.  
  3307. ; btst #1,shotflags+1(a0)
  3308. ; beq .nohitroof
  3309.  
  3310.  move.l shotxvel(a0),d0
  3311.  asr.l #1,d0
  3312.  move.l d0,shotxvel(a0)
  3313.  move.l shotzvel(a0),d0
  3314.  asr.l #1,d0
  3315.  move.l d0,shotzvel(a0) 
  3316.  
  3317.  bra .nohitroof
  3318.  
  3319. .nobounce: 
  3320.  
  3321.  move.b #0,shotanim(a0)
  3322.  move.b #1,shotstatus(a0)
  3323.  
  3324.  move.l B_ImpactSFX(a6),d0
  3325.  subq.l #1,d0
  3326.  blt.s .nohitnoise
  3327.  
  3328.  move.l #ObjRotated,a1
  3329.  move.w (a0),d1
  3330.  move.l (a1,d1.w*8),Noisex
  3331. ; move.w d0,Noisevol
  3332. ; swap d0
  3333.  move.w #200,Noisevol
  3334.  move.w d0,Samplenum
  3335.  move.w d1,IDNUM
  3336.  movem.l d0-d7/a0-a6,-(a7)
  3337.  jsr MakeSomeNoise
  3338.  movem.l (a7)+,d0-d7/a0-a6
  3339.  
  3340. .nohitnoise:
  3341.  
  3342.  move.l B_ExplosiveForce(a6),d0
  3343.  beq.s .noexplosion
  3344.  
  3345.  move.w newx,Viewerx
  3346.  move.w newz,Viewerz
  3347.  
  3348.  move.w 4(a0),Viewery
  3349.  move.b ObjInTop(a0),ViewerTop
  3350.  
  3351.  movem.l d0-d7/a0-a6,-(a7)
  3352.  bsr ComputeBlast
  3353.  movem.l (a7)+,d0-d7/a0-a6
  3354.  
  3355. .noexplosion:
  3356.  
  3357. .nohitroof:
  3358.  
  3359.  move.l 2(a3),d0
  3360.  sub.l accypos(a0),d0
  3361.  cmp.l #10*128,d0
  3362.  bgt .nohitfloor 
  3363.  
  3364.  tst.l B_BounceOffFloors(a6)
  3365.  beq.s .nobounceup
  3366.  
  3367.  tst.w shotyvel(a0)
  3368.  blt .nohitfloor
  3369.  
  3370.  moveq #0,d0
  3371.  move.w shotyvel(a0),d0
  3372.  asr.w #1,d0
  3373.  neg.w d0
  3374.  move.w d0,shotyvel(a0)
  3375.  
  3376.  move.l 2(a3),d0
  3377.  sub.l #10*128,d0
  3378.  move.l d0,accypos(a0)
  3379.  
  3380. ; btst #1,shotflags+1(a0)
  3381. ; beq .nohitfloor
  3382.  tst.l B_Gravity(a6)
  3383.  beq .nohitfloor
  3384.  
  3385.  move.l shotxvel(a0),d0
  3386.  asr.l #1,d0
  3387.  move.l d0,shotxvel(a0)
  3388.  move.l shotzvel(a0),d0
  3389.  asr.l #1,d0
  3390.  move.l d0,shotzvel(a0) 
  3391.  
  3392.  
  3393.  bra .nohitfloor
  3394. .nobounceup: 
  3395.  
  3396.  
  3397.  move.b #0,shotanim(a0)
  3398.  move.b #1,shotstatus(a0)
  3399.  move.l B_ImpactSFX(a6),d0
  3400.  subq.l #1,d0
  3401.  blt.s .nohitnoise2
  3402.  
  3403.  move.l #ObjRotated,a1
  3404.  move.w (a0),d1
  3405.  move.l (a1,d1.w*8),Noisex
  3406.  move.w #200,Noisevol
  3407.  move.w d0,Samplenum
  3408.  move.w d1,IDNUM
  3409.  movem.l d0-d7/a0-a6,-(a7)
  3410.  jsr MakeSomeNoise
  3411.  movem.l (a7)+,d0-d7/a0-a6
  3412. .nohitnoise2:
  3413.  moveq #0,d0
  3414.  move.l B_ExplosiveForce(a6),d0
  3415.  beq.s .noexplosion2
  3416.  
  3417.  move.w 4(a0),Viewery
  3418.  move.w newx,Viewerx
  3419.  move.w newz,Viewerz
  3420.  move.b ObjInTop(a0),ViewerTop
  3421.  movem.l d0-d7/a0-a6,-(a7)
  3422.  bsr ComputeBlast
  3423.  movem.l (a7)+,d0-d7/a0-a6
  3424.  
  3425. .noexplosion2:
  3426. .nohitfloor:
  3427. ******************** 
  3428.  
  3429.  
  3430.  
  3431.  move.l ObjectPoints,a1
  3432.  move.w (a0),d1
  3433.  lea (a1,d1.w*8),a1
  3434.  move.l (a1),d2
  3435.  move.l d2,oldx
  3436.  move.l shotxvel(a0),d3
  3437.  move.w d3,d4
  3438.  swap d3
  3439.  move.w TempFrames,d5
  3440.  muls d5,d3
  3441.  mulu d5,d4
  3442.  swap d3
  3443.  clr.w d3
  3444.  add.l d4,d3
  3445.  add.l d3,d2
  3446.  move.l d2,newx
  3447.  move.l 4(a1),d2
  3448.  move.l d2,oldz
  3449.  move.l shotzvel(a0),d3
  3450.  move.w d3,d4
  3451.  swap d3
  3452.  muls d5,d3
  3453.  mulu d5,d4
  3454.  swap d3
  3455.  clr.w d3
  3456.  add.l d4,d3
  3457.  add.l d3,d2
  3458.  move.l d2,newz
  3459.  move.l accypos(a0),oldy 
  3460.  
  3461.  move.w shotyvel(a0),d3
  3462.  muls TempFrames,d3
  3463.  move.l B_Gravity(a6),d5
  3464.  beq.s nograv
  3465.  muls TempFrames,d5
  3466.  add.l d5,d3
  3467.  move.w shotyvel(a0),d6
  3468.  ext.l d6
  3469.  add.l d5,d6
  3470.  cmp.l #10*256,d6
  3471.  blt.s okgrav
  3472.  move.l #10*256,d6
  3473.  okgrav:
  3474.  move.w d6,shotyvel(a0)
  3475. nograv:
  3476.  move.l accypos(a0),d4 
  3477.  add.l d3,d4
  3478.  
  3479.  
  3480.  move.l d4,accypos(a0)
  3481.  sub.l #5*128,d4
  3482.  move.l d4,newy
  3483.  add.l #5*128,d4
  3484.  asr.l #7,d4
  3485.  move.w d4,4(a0)
  3486.  tst.l B_BounceOffWalls(a6)
  3487.  sne.s wallbounce
  3488.  seq.s exitfirst
  3489.  
  3490.  clr.b MOVING
  3491.  
  3492.  clr.b hitwall
  3493.  move.b ObjInTop(a0),StoodInTop
  3494.  move.w #%0000010000000000,wallflags
  3495.  move.l #0,StepUpVal
  3496.  move.l #$1000000,StepDownVal
  3497.  move.l #10*128,thingheight
  3498.  move.w oldx,d0
  3499.  cmp.w newx,d0
  3500.  bne.s lalal
  3501.  move.w oldz,d0
  3502.  cmp.w newz,d0
  3503.  beq.s nomovebul
  3504.  move.w #1,walllength
  3505.  
  3506. lalal:
  3507.  st MOVING
  3508.  movem.l d0/d7/a0/a1/a2/a4/a5/a6,-(a7)
  3509.  jsr MoveObject
  3510.  
  3511.  moveq #0,d0
  3512.  move.b BRIGHTNESS,d0
  3513.  beq.s .nobright
  3514.  neg.w d0
  3515.  move.w newx,d1
  3516.  move.w newz,d2
  3517.  move.l newy,BRIGHTY
  3518.  move.l objroom,a0
  3519.  move.w (a0),d3
  3520.  jsr BRIGHTENPOINTS
  3521.  
  3522. .nobright:
  3523.  
  3524.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5/a6
  3525. nomovebul:
  3526.  move.b StoodInTop,ObjInTop(a0)
  3527.   
  3528.  tst.b wallbounce
  3529.  beq.s .notabouncything
  3530.  
  3531.  tst.b hitwall
  3532.  beq .nothitwall
  3533.  
  3534. ; we have hit a wall....
  3535.  
  3536.  move.w shotzvel(a0),d0
  3537.  muls wallxsize,d0
  3538.  move.w shotxvel(a0),d1
  3539.  muls wallzsize,d1
  3540.  sub.l d1,d0
  3541.  divs walllength,d0
  3542.  
  3543.  move.w shotxvel(a0),d1
  3544.  move.w wallzsize,d2
  3545.  add.w d2,d2
  3546.  muls d0,d2
  3547.  divs walllength,d2
  3548.  add.w d2,d1
  3549.  move.w d1,shotxvel(a0)
  3550.  
  3551.  move.w shotzvel(a0),d1
  3552.  move.w wallxsize,d2
  3553.  add.w d2,d2
  3554.  muls d0,d2
  3555.  divs walllength,d2
  3556.  sub.w d2,d1
  3557.  move.w d1,shotzvel(a0)
  3558.  
  3559. ; btst #1,shotflags+1(a0)
  3560. ; beq .nothitwall
  3561.  
  3562.  tst.l B_Gravity(a6)
  3563.  beq .nothitwall
  3564.  
  3565.  move.l shotxvel(a0),d0
  3566.  asr.l #1,d0
  3567.  move.l d0,shotxvel(a0)
  3568.  move.l shotzvel(a0),d0
  3569.  asr.l #1,d0
  3570.  move.l d0,shotzvel(a0) 
  3571.   
  3572.  
  3573.  bra .nothitwall
  3574.  
  3575. .notabouncything:
  3576.   
  3577.  tst.b hitwall
  3578.  beq .nothitwall
  3579.  
  3580.  move.l wallhitheight,d4
  3581.  move.l d4,accypos(a0)
  3582.  asr.l #7,d4
  3583.  move.w d4,4(a0)
  3584.  
  3585. .hitsomething
  3586.  clr.b timeout
  3587.  move.b #0,shotanim(a0)
  3588.  move.b #1,shotstatus(a0)
  3589.  
  3590.  move.l B_ImpactSFX(a6),d0
  3591.  subq.l #1,d0
  3592.  blt.s .nohitnoise
  3593.  
  3594.  move.l #ObjRotated,a1
  3595.  move.w (a0),d1
  3596.  move.l (a1,d1.w*8),Noisex
  3597.  move.w #200,Noisevol
  3598.  move.w d0,Samplenum
  3599.  move.w d1,IDNUM
  3600.  movem.l d0-d7/a0-a6,-(a7)
  3601.  jsr MakeSomeNoise
  3602.  movem.l (a7)+,d0-d7/a0-a6
  3603.  
  3604. .nohitnoise:
  3605.  
  3606.  move.l B_ExplosiveForce(a6),d0
  3607.  beq.s .noexplosion
  3608.  
  3609.  move.w newx,Viewerx
  3610.  move.w newz,Viewerz
  3611.  move.w 4(a0),Viewery
  3612.  move.b ObjInTop(a0),ViewerTop
  3613.  movem.l d0-d7/a0-a6,-(a7)
  3614.  bsr ComputeBlast
  3615.  movem.l (a7)+,d0-d7/a0-a6
  3616.  
  3617. .noexplosion:
  3618.  
  3619.  
  3620. ; bra doneshot
  3621.  
  3622. ; rts
  3623.  
  3624. .nothitwall:
  3625.  
  3626.  tst.b timeout
  3627.  bne .hitsomething
  3628.  
  3629. lab:
  3630.  
  3631.  
  3632.  move.l objroom,a3
  3633.  move.w (a3),12(a0)
  3634.  move.w (a3),GraphicRoom(a0)
  3635.  move.l newx,(a1)
  3636.  move.l newz,4(a1)
  3637. ************ 
  3638. * Check if hit a nasty
  3639.  
  3640.  tst.l EnemyFlags(a0)
  3641.  bne.s notasplut
  3642.  rts
  3643. notasplut:
  3644.  
  3645.  
  3646.  move.l ObjectData,a3
  3647.  move.l ObjectPoints,a1
  3648.  move.w newx,d2
  3649.  sub.w oldx,d2
  3650.  move.w d2,xdiff
  3651.  move.w newz,d1
  3652.  sub.w oldz,d1
  3653.  move.w d1,zdiff
  3654.  move.w d1,d3
  3655.  move.w d2,d4
  3656.  muls d2,d2
  3657.  muls d1,d1
  3658.  move.l #1,d0
  3659.  add.l d1,d2
  3660.  beq .oksqr
  3661.  
  3662.  move.w #31,d0
  3663. .findhigh
  3664.  btst d0,d2
  3665.  bne .foundhigh
  3666.  dbra d0,.findhigh
  3667. .foundhigh
  3668.  asr.w #1,d0
  3669.  clr.l d3
  3670.  bset d0,d3
  3671.  move.l d3,d0
  3672.  
  3673.  move.w d0,d1
  3674.  muls d1,d1    ; x*x
  3675.  sub.l d2,d1    ; x*x-a
  3676.  asr.l #1,d1    ; (x*x-a)/2
  3677.  divs d0,d1    ; (x*x-a)/2x
  3678.  sub.w d1,d0    ; second approx
  3679.  bgt .stillnot0
  3680.  move.w #1,d0
  3681. .stillnot0
  3682.  
  3683.  move.w d0,d1
  3684.  muls d1,d1
  3685.  sub.l d2,d1
  3686.  asr.l #1,d1
  3687.  divs d0,d1
  3688.  sub.w d1,d0    ; second approx
  3689.  bgt .stillnot02
  3690.  move.w #1,d0
  3691. .stillnot02
  3692.  
  3693.  move.w d0,d1
  3694.  muls d1,d1
  3695.  sub.l d2,d1
  3696.  asr.l #1,d1
  3697.  divs d0,d1
  3698.  sub.w d1,d0    ; second approx
  3699.  bgt .stillnot03
  3700.  move.w #1,d0
  3701. .stillnot03
  3702.  
  3703. .oksqr
  3704.  move.w d0,Range
  3705.  add.w #80,d0
  3706.  muls d0,d0
  3707.  move.l d0,sqrnum
  3708.  
  3709. .checkloop:
  3710.  tst.w (a3)
  3711.  blt .checkedall
  3712.  tst.w 12(a3)
  3713.  blt .notanasty
  3714.  
  3715.  move.b ObjInTop(a0),d1
  3716.  move.b ObjInTop(a3),d2
  3717.  eor.b d2,d1
  3718.  bne .notanasty
  3719.  
  3720.  moveq #0,d1
  3721.  move.b 16(a3),d1
  3722.  
  3723.  move.l EnemyFlags(a0),d7
  3724.  btst d1,d7
  3725.  beq .notanasty
  3726.  
  3727.  cmp.b #1,d1
  3728.  bne.s .notanobj
  3729.  
  3730.  move.l LINKFILE,a4
  3731.  add.l #ObjectStats,a4
  3732.  move.b TypeOfThing(a3),d1
  3733.  muls #ObjectStatLen,d1
  3734.  cmp.w #2,O_Behaviour(a4,d1.w)
  3735.  bne .notanasty
  3736.  
  3737. .notanobj:
  3738.  
  3739.  tst.b numlives(a3)
  3740.  beq .notanasty
  3741.  
  3742. ; move.l #ColBoxTable,a6
  3743. ; lea (a6,d1.w*8),a6
  3744.  
  3745.  move.w 4(a3),d1
  3746.  move.w 4(a0),d2
  3747.  sub.w d1,d2
  3748.  bge .okh
  3749.  neg.w d2
  3750. .okh:
  3751.  
  3752. ; cmp.w 2(a6),d2
  3753.  
  3754.  tst.b MOVING
  3755.  beq.s .ignoreheight
  3756.  
  3757.  cmp.w #50,d2
  3758.  bgt .notanasty
  3759.  
  3760. .ignoreheight:
  3761.  
  3762.  move.w (a3),d1
  3763.  move.w (a1,d1.w*8),d2
  3764.  move.w d2,d4
  3765.  move.w 4(a1,d1.w*8),d3
  3766.  move.w d3,d5
  3767.  sub.w newx,d4
  3768.  sub.w oldx,d2
  3769.  move.w d2,d6
  3770.  sub.w newz,d5
  3771.  sub.w oldz,d3
  3772.  move.w d3,d7
  3773.  muls zdiff,d6
  3774.  muls xdiff,d7
  3775.  sub.l d7,d6
  3776.  bgt.s .pos
  3777.  neg.l d6
  3778. .pos:
  3779.  divs Range,d6
  3780.  
  3781.  move.w #80,d7
  3782.  cmp.b #1,16(a3)
  3783.  ble.s .okbig
  3784.  
  3785.  move.w #40,d7
  3786.  
  3787. .okbig:
  3788.  
  3789.  cmp.w d7,d6
  3790. ; cmp.w (a6),d6
  3791.  bgt .stillgoing
  3792.  
  3793.  muls d2,d2
  3794.  muls d3,d3
  3795.  add.l d3,d2
  3796.  cmp.l sqrnum,d2
  3797.  bgt .stillgoing
  3798.  muls d4,d4
  3799.  muls d5,d5
  3800.  add.l d5,d4
  3801.  cmp.l sqrnum,d4
  3802.  bgt .stillgoing
  3803.  
  3804.  move.b shotpower(a0),d6
  3805.  add.b d6,damagetaken(a3)
  3806.  move.w shotxvel(a0),ImpactX(a3)
  3807.  move.w shotzvel(a0),ImpactZ(a3)
  3808.  move.b #0,shotanim(a0)
  3809.  move.b #1,shotstatus(a0)
  3810.  
  3811.  move.l B_ImpactSFX(a6),d0
  3812.  subq.l #1,d0
  3813.  blt.s .nohitnoise3
  3814.  
  3815.  move.l #ObjRotated,a1
  3816.  move.w (a0),d1
  3817.  move.l (a1,d1.w*8),Noisex
  3818.  move.w #200,Noisevol
  3819.  move.w d0,Samplenum
  3820.  move.w d1,IDNUM
  3821.  movem.l d0-d7/a0-a6,-(a7)
  3822.  jsr MakeSomeNoise
  3823.  movem.l (a7)+,d0-d7/a0-a6
  3824. .nohitnoise3:
  3825.  move.l B_ExplosiveForce(a6),d0
  3826.  beq.s .noexplosion3
  3827.  
  3828.  move.w 4(a0),Viewery
  3829.  move.w newx,Viewerx
  3830.  move.w newz,Viewerz
  3831.  movem.l d0-d7/a0-a6,-(a7)
  3832.  bsr ComputeBlast
  3833.  movem.l (a7)+,d0-d7/a0-a6
  3834.  
  3835. .noexplosion3:
  3836.  
  3837.  
  3838.  bra .hitnasty
  3839. .stillgoing:
  3840. .notanasty:
  3841.  add.w #64,a3
  3842.  bra .checkloop
  3843. .hitnasty:
  3844. .checkedall
  3845.  
  3846. doneshot:
  3847.  
  3848.  rts
  3849.  
  3850. MOVING: dc.w 0
  3851. tmpnewx: dc.l 0
  3852. tmpnewz: dc.l 0
  3853. hithit: dc.l 0
  3854. sqrnum: dc.l 0
  3855. tmpangpos: dc.l 0
  3856. allbars: dc.l 0
  3857. backrout: ds.b 800
  3858. NUMTOCHECK: dc.w 0 
  3859.  
  3860. MAKEBACKROUT:
  3861. ; move.l #backrout+256,d0
  3862. ; clr.b d0
  3863. ; move.l d0,allbars
  3864. ; move.l d0,a1
  3865. ; move.l #fromback,a0
  3866. ; move.w #400,d0
  3867. ;putinback:
  3868. ; move.b (a0)+,(a1)+
  3869. ; dbra d0,putinback
  3870.  rts
  3871.  
  3872. **************************************** 
  3873.  ifeq CHEESEY
  3874.  
  3875. putinbackdrop:
  3876.  
  3877.  move.l a0,-(a7)
  3878.  
  3879.  move.w tmpangpos,d5
  3880.  and.w #4095,d5
  3881.  muls #648,d5
  3882.  divs #4096,d5
  3883.  muls #240,d5
  3884.  
  3885. ; CACHE_ON d1
  3886.  
  3887.  tst.b FULLSCR
  3888.  bne BIGBACK
  3889.  
  3890.  
  3891.  move.l FASTBUFFER,a0
  3892.  move.l BackPicture,a5
  3893.  move.l a5,a3
  3894.  add.l #155520,a3
  3895.  add.l #240,a5
  3896. ; move.l #EndBackPicture,a3
  3897. ; move.l #BackPicture+240,a5
  3898.  move.l BackPicture,a1
  3899. ; lea.l BackPicture,a1
  3900.  add.l d5,a1
  3901.  add.w #240,a1
  3902.  
  3903.  move.w MIDDLEY,d7
  3904.  
  3905.  move.w d7,d6
  3906.  move.w d6,d5
  3907.  asr.w #1,d5
  3908.  add.w d5,d6
  3909.  sub.w d6,a1
  3910.  sub.w d6,a5 
  3911.  
  3912.  asr.w #2,d7
  3913.  
  3914.  move.w #240,d1
  3915.  move.w #240,d2
  3916.  move.w #480,d5
  3917.  move.w #191,d4
  3918.  
  3919. horline:
  3920.  move.w d7,d3
  3921.  move.l a0,a2
  3922.  move.l a1,a4
  3923. vertline:
  3924.  move.w (a4)+,d0
  3925.  move.b d0,(a2)
  3926.  move.b (a4)+,d0
  3927.  move.b d0,320(a2)
  3928.  addq #1,a4
  3929.  move.b (a4)+,d0
  3930.  move.b d0,320*2(a2)
  3931.  move.b (a4)+,d0
  3932.  move.b d0,320*3(a2)
  3933.  
  3934.  adda.w #320*4,a2
  3935.  dbra d3,vertline
  3936.  
  3937.  add.w d1,a1
  3938.  cmp.l a1,a3
  3939.  bgt.s .noend
  3940.  move.l a5,a1
  3941. .noend
  3942.  
  3943.  exg d1,d2
  3944.  exg d2,d5
  3945.  
  3946.  addq.w #1,a0
  3947.  
  3948.  dbra d4,horline
  3949.  
  3950.  move.l (a7)+,a0
  3951.  rts
  3952.  
  3953.  
  3954. BIGBACK:
  3955.  
  3956.  
  3957.  move.l FASTBUFFER,a0
  3958.  move.l BackPicture,a5
  3959.  move.l a5,a3
  3960.  add.l #155520,a3
  3961.  add.l #240,a5
  3962. ; move.l #EndBackPicture,a3
  3963. ; move.l #BackPicture+240,a5
  3964.  move.l BackPicture,a1
  3965.  add.l d5,a1
  3966.  add.w #240,a1
  3967.  
  3968.  move.w MIDDLEY,d7
  3969.  
  3970.  move.w d7,d6
  3971.  sub.w d6,a1
  3972.  sub.w d6,a5 
  3973.  
  3974.  asr.w #2,d7
  3975.  move.w #287,d4
  3976.  
  3977.  
  3978. .horline:
  3979.  move.w d7,d3
  3980.  move.l a0,a2
  3981.  move.l a1,a4
  3982. .vertline:
  3983.  move.l (a4)+,d0
  3984.  move.b d0,320*3(a2)
  3985.  swap d0
  3986.  move.b d0,320(a2)
  3987.  lsr.l #8,d0
  3988.  move.b d0,(a2)
  3989.  swap d0
  3990.  move.b d0,320*2(a2)
  3991.  
  3992.  adda.w #320*4,a2
  3993.  dbra d3,.vertline
  3994.  
  3995.  add.w #240,a1
  3996.  cmp.l a1,a3
  3997.  bgt.s .noend
  3998.  move.l a5,a1
  3999. .noend
  4000.  
  4001.  addq.w #1,a0
  4002.  
  4003.  dbra d4,.horline
  4004.  
  4005.  move.l (a7)+,a0
  4006.  rts
  4007. ****************************************
  4008.  endc
  4009.  
  4010.  ifne CHEESEY 
  4011.  
  4012. putinbackdrop:
  4013.  
  4014.  move.l a0,-(a7)
  4015.  
  4016.  move.w tmpangpos,d5
  4017.  and.w #4095,d5
  4018.  muls #648,d5
  4019.  divs #4096,d5
  4020.  
  4021. ;xoffset of backdrop
  4022.  
  4023. ; CACHE_ON d1
  4024.  
  4025.  tst.b FULLSCR
  4026.  bne BIGBACK
  4027.  
  4028.  
  4029.  move.l FASTBUFFER,a0
  4030.  add.l d5,a1
  4031.  add.w #240,a1
  4032.  
  4033.  move.w MIDDLEY,d7
  4034.  
  4035.  move.w d7,d6
  4036.  move.w d6,d5
  4037.  asr.w #1,d5
  4038.  add.w d5,d6
  4039.  sub.w d6,a1
  4040.  sub.w d6,a5 
  4041.  
  4042.  asr.w #2,d7
  4043.  
  4044.  move.w #240,d1
  4045.  move.w #240,d2
  4046.  move.w #480,d5
  4047.  move.w #(192/8)-1,d4
  4048.  
  4049.  moveq #0,d0
  4050.  
  4051. horline:
  4052.  move.w d7,d3
  4053.  move.l a0,a2
  4054.  move.l a1,a4
  4055. vertline:
  4056.  move.l d0,(a2)
  4057.  move.l d0,320(a2)
  4058.  move.l d0,320*2(a2)
  4059.  move.l d0,320*3(a2)
  4060.  move.l d0,4(a2)
  4061.  move.l d0,4+320(a2)
  4062.  move.l d0,4+(320*2)(a2)
  4063.  move.l d0,4+(320*3)(a2)
  4064.  adda.w #320*4,a2
  4065.  dbra d3,vertline
  4066.  
  4067.  addq.w #8,a0
  4068.  
  4069.  dbra d4,horline
  4070.  
  4071.  move.l (a7)+,a0
  4072.  rts
  4073.  
  4074.  
  4075. BIGBACK:
  4076.  
  4077.  
  4078.  move.l FASTBUFFER,a0
  4079.  add.l d5,a1
  4080.  add.w #240,a1
  4081.  
  4082.  move.w MIDDLEY,d7
  4083.  
  4084.  move.w d7,d6
  4085.  sub.w d6,a1
  4086.  sub.w d6,a5 
  4087.  
  4088.  asr.w #2,d7
  4089.  move.w #(288/8)-1,d4
  4090.  move.l #0,d0
  4091.  
  4092. .horline:
  4093.  move.w d7,d3
  4094.  move.l a0,a2
  4095.  move.l a1,a4
  4096. .vertline:
  4097.  
  4098.  move.l d0,320*0(a2)
  4099.  move.l d0,320*1(a2)
  4100.  move.l d0,320*2(a2)
  4101.  move.l d0,320*3(a2)
  4102.  move.l d0,4+320*0(a2)
  4103.  move.l d0,4+320*1(a2)
  4104.  move.l d0,4+320*2(a2)
  4105.  move.l d0,4+320*3(a2)
  4106.  
  4107.  
  4108.  adda.w #320*4,a2
  4109.  dbra d3,.vertline
  4110.  
  4111.  addq #8,a0
  4112.  
  4113.  dbra d4,.horline
  4114.  
  4115.  move.l (a7)+,a0
  4116.  rts
  4117.  
  4118.  endc
  4119.  
  4120. MaxDamage: dc.w 0
  4121.  
  4122. ComputeBlast:
  4123.  
  4124.  clr.w doneflames
  4125.  
  4126.  move.w d0,d6
  4127.  move.w d0,MaxDamage
  4128.  
  4129.  move.w d0,d1
  4130.  ext.l d6
  4131.  neg.w d1
  4132.  move.w 12(a0),d0
  4133. ; jsr Flash
  4134.  
  4135.  move.l ZoneAdds,a2
  4136.  move.l (a2,d0.w*4),a2
  4137.  add.l LEVELDATA,a2
  4138.  move.l a2,MiddleRoom
  4139.  
  4140.  move.l ObjectData,a2
  4141.  suba.w #64,a2
  4142.  
  4143.  ext.l d6
  4144.  
  4145.  move.l a0,-(a7)
  4146.  
  4147. HitObjLoop:
  4148.  move.l MiddleRoom,FromRoom
  4149.  add.w #64,a2
  4150.  move.w (a2),d0
  4151.  blt CheckedEmAll
  4152.  tst.w 12(a2)
  4153.  blt.s HitObjLoop
  4154.  moveq #0,d1
  4155.  move.b 16(a2),d1
  4156.  cmp.b #1,d1
  4157.  beq.s HitObjLoop
  4158.  blt.s .checkalien
  4159.  cmp.b #3,d1
  4160.  beq.s HitObjLoop
  4161.  bgt.s .checkalien
  4162.  
  4163. ; check bullet
  4164.  moveq #0,d7
  4165.  move.b shotsize(a2),d7
  4166.  move.l LINKFILE,a3
  4167.  muls #B_BulStatLen,d7
  4168.  add.l #BulletAnimData,a3
  4169.  add.l d7,a3
  4170.  tst.l B_Gravity(a3)
  4171.  beq.s HitObjLoop
  4172.  bra.s .okblast
  4173.  
  4174. .checkalien
  4175.  tst.b numlives(a2)
  4176.  beq.s HitObjLoop
  4177.  
  4178. .okblast:
  4179.  
  4180.  
  4181.  move.w 12(a2),d1
  4182.  move.l ZoneAdds,a3
  4183.  move.l (a3,d1.w*4),a3
  4184.  add.l LEVELDATA,a3
  4185.  move.l a3,ToRoom
  4186.  move.l ObjectPoints,a3
  4187.  move.w (a3,d0.w*8),Targetx
  4188.  move.w 4(a3,d0.w*8),Targetz
  4189.  move.w 4(a2),Targety
  4190.  move.b ObjInTop(a2),TargetTop
  4191.  jsr CanItBeSeen
  4192.  tst.b CanSee
  4193.  beq HitObjLoop
  4194.  
  4195.  move.w Targetx,d0
  4196.  sub.w Viewerx,d0
  4197.  move.w d0,d2
  4198.  move.w Targetz,d1
  4199.  sub.w Viewerz,d1
  4200.  move.w d1,d3
  4201.  muls d2,d2
  4202.  muls d3,d3
  4203.  move.w #1,d4
  4204.  add.l d3,d2 
  4205.  beq .oksqr
  4206.  move.w #31,d4
  4207. .findhigh
  4208.  btst d4,d2
  4209.  dbne d4,.findhigh
  4210. .foundhigh
  4211.  asr.w #1,d4
  4212.  clr.l d3
  4213.  bset d4,d3
  4214.  move.l d3,d4
  4215.  
  4216.  move.w d4,d3
  4217.  muls d3,d3    ; x*x
  4218.  sub.l d2,d3    ; x*x-a
  4219.  asr.l #1,d3    ; (x*x-a)/2
  4220.  divs d4,d3    ; (x*x-a)/2x
  4221.  sub.w d3,d4    ; second approx
  4222.  bgt .stillnot0
  4223.  move.w #1,d4
  4224. .stillnot0
  4225.  
  4226.  move.w d4,d3
  4227.  muls d1,d3
  4228.  sub.l d2,d3
  4229.  asr.l #1,d3
  4230.  divs d4,d3
  4231.  sub.w d3,d4    ; second approx
  4232.  bgt .stillnot02
  4233.  move.w #1,d4
  4234. .stillnot02
  4235.  
  4236.  move.w d4,d3
  4237.  muls d3,d3
  4238.  sub.l d2,d3
  4239.  asr.l #1,d3
  4240.  divs d4,d3
  4241.  sub.w d3,d4    ; second approx
  4242.  bgt .stillnot03
  4243.  move.w #1,d4
  4244. .stillnot03
  4245.  
  4246. .oksqr
  4247.  
  4248.  move.w d4,d3
  4249.  move.w d3,d7
  4250.  
  4251.  cmp.w #256,d7
  4252.  bge.s .okd
  4253.  move.w #256,d7
  4254. .okd:
  4255.  
  4256.  asr.w #3,d3
  4257.  
  4258.  
  4259.  sub.w #4,d3
  4260.  bge.s OkItsnotzero
  4261.  moveq #0,d3
  4262. OkItsnotzero:
  4263.  
  4264.  cmp.w #64,d3
  4265.  bgt HitObjLoop
  4266.  neg.w d3
  4267.  add.w #64,d3
  4268.  
  4269.  move.w d6,d5
  4270.  muls d3,d5
  4271.  asr.l #5,d5
  4272.  cmp.w MaxDamage,d5
  4273.  blt.s okdamage
  4274.  move.w MaxDamage,d5
  4275. okdamage:
  4276.  add.b d5,damagetaken(a2)
  4277.  ext.l d0
  4278.  ext.l d1
  4279.  muls.l d6,d0
  4280.  muls.l d6,d1
  4281. ; asl.l #2,d0
  4282. ; asl.l #2,d1
  4283.  divs d7,d0
  4284.  divs d7,d1
  4285.  
  4286.  move.b 16(a2),d2
  4287.  cmp.b #2,d2
  4288.  bne.s .impactalien
  4289.  
  4290.  add.w d0,shotxvel(a2)
  4291.  add.w d1,shotzvel(a2)
  4292.  
  4293.  move.l d6,d1
  4294.  asl.l #8,d1
  4295.  asl.l #4,d1
  4296.  divs d7,d1
  4297.  
  4298.  neg.w d1
  4299.  cmp.w #-8*256,d1
  4300.  bge.s .okbl
  4301.  move.w #-8*256,d1
  4302. .okbl
  4303.  
  4304.  add.w d1,shotyvel(a2)
  4305.  
  4306.  bra.s .impactedbul
  4307. .impactalien: 
  4308.  
  4309.  move.w d0,ImpactX(a2)
  4310.  move.w d1,ImpactZ(a2)
  4311.  
  4312.  
  4313.  move.l d6,d1
  4314.  asl.l #4,d1
  4315.  divs d7,d1
  4316.  
  4317.  
  4318. ; move.w 4(a2),d0
  4319. ; sub.w 4(a0),d0    ;dy
  4320. ; bge.s .above
  4321.  neg.w d1
  4322. ;.above
  4323.  cmp.w #-8,d1
  4324.  bge.s .okbl2
  4325.  move.w #-8,d1
  4326. .okbl2
  4327.  
  4328.  move.w d1,ImpactY(a2)
  4329.  
  4330. .impactedbul:
  4331.  
  4332.  bra HitObjLoop 
  4333.  
  4334. CheckedEmAll:
  4335.  
  4336. ; Now put in the flames!
  4337.  move.l (a7)+,a0
  4338.  
  4339.  move.w (a0),d0
  4340.  move.l ObjectPoints,a2
  4341.  move.w (a2,d0.w*8),d1
  4342.  move.w 4(a2,d0.w*8),d2
  4343.  
  4344.  move.w d1,middlex
  4345.  move.w d2,middlez
  4346.  
  4347.  move.w #9,d7
  4348.  
  4349.  clr.b exitfirst
  4350.  st.b wallbounce
  4351.  move.w 12(a0),d0
  4352.  move.l ZoneAdds,a3
  4353.  move.l (a3,d0.w*4),a3
  4354.  add.l LEVELDATA,a3
  4355.  move.l a3,MiddleRoom
  4356.  
  4357.  move.l PlayerShotData,a3
  4358.  move.w 4(a0),d0
  4359.  ext.l d0
  4360.  asl.l #7,d0
  4361.  move.l d0,oldy
  4362.  
  4363.  moveq #2,d5
  4364.  move.w #19,NUMTOCHECK
  4365.  
  4366.  move.w #2,d6
  4367. radiusloop:
  4368.  move.w #1,d7
  4369.  
  4370. DOFLAMES:
  4371.  
  4372.  move.w NUMTOCHECK,d1
  4373. .findonefree
  4374.  move.w 12(a3),d2
  4375.  blt.s .foundonefree
  4376.  adda.w #64,a3
  4377.  dbra d1,.findonefree
  4378.  rts
  4379. .foundonefree
  4380.  
  4381.  move.b #2,16(a3)
  4382.  
  4383.  move.w d1,NUMTOCHECK
  4384.  
  4385.  add.w #1,doneflames
  4386.  move.w middlex,d1
  4387.  move.w middlez,d2
  4388.  move.w d1,oldx
  4389.  move.w d2,oldz
  4390.  move.b ObjInTop(a0),StoodInTop
  4391.  
  4392.  jsr GetRand
  4393.  ext.w d0
  4394.  muls d5,d0
  4395.  asr.w #1,d0
  4396.  bne.s .xnz
  4397.  moveq #2,d0
  4398. .xnz:
  4399.  add.w d0,d1
  4400.  jsr GetRand
  4401.  ext.w d0
  4402.  muls d5,d0
  4403.  asr.w #1,d0
  4404.  bne.s .znz
  4405.  moveq #2,d0
  4406. .znz: 
  4407.  add.w d0,d2
  4408.  move.l oldy,d3
  4409.  jsr GetRand
  4410.  muls d5,d0
  4411.  asr.l #3,d0
  4412.  add.l d0,d3
  4413.  move.l d3,newy
  4414.  
  4415.  move.w d1,newx
  4416.  move.w d2,newz
  4417.  move.l MiddleRoom,objroom
  4418.  
  4419.  
  4420.  movem.l d5/d6/a0/a1/a3/d7/a6,-(a7)
  4421.  move.w #80,extlen
  4422.  move.b #1,awayfromwall
  4423.  jsr MoveObject
  4424.  movem.l (a7)+,d5/d6/a0/a1/a3/d7/a6
  4425.  
  4426.  move.l objroom,a2
  4427.  move.w (a2),12(a3)
  4428.  
  4429.  move.l newy,d0
  4430.  
  4431.  move.l ToZoneFloor(a2),d1
  4432.  move.l ToZoneRoof(a2),d2
  4433.  tst.b ObjInTop(a0)
  4434.  beq.s .okinbot
  4435.  move.l ToUpperFloor(a2),d1
  4436.  move.l ToUpperRoof(a2),d2
  4437. .okinbot:
  4438.  
  4439.  cmp.l d0,d1
  4440.  bgt.s .abovefloor
  4441.  move.l d1,d0
  4442. .abovefloor: 
  4443.  
  4444.  cmp.l d0,d2
  4445.  blt.s .belowroof
  4446.  move.l d2,d0
  4447. .belowroof:
  4448.  
  4449.  move.l d0,accypos(a3)
  4450.  asr.l #7,d0
  4451.  move.w d0,4(a3)
  4452.  move.b #2,16(a3)
  4453.  move.b #0,shotanim(a3)
  4454. ; sub.b d5,shotanim(a3)
  4455.  st shotstatus(a3)
  4456.  move.b StoodInTop,ObjInTop(a3)
  4457.  move.b BLOODYGREATBOMB,shotsize(a3)
  4458.  st worry(a3)
  4459.  move.w (a3),d0
  4460.  move.l ObjectPoints,a2
  4461.  move.w newx,(a2,d0.w*8)
  4462.  move.w newz,4(a2,d0.w*8)
  4463.  
  4464.  adda.w #64,a3
  4465.  sub.w #1,NUMTOCHECK
  4466.  blt.s .nomore
  4467.  
  4468.  dbra d7,DOFLAMES
  4469.  add.w #2,d5
  4470.  dbra d6,radiusloop
  4471.  
  4472. .nomore:
  4473.  
  4474.  rts
  4475.  
  4476. MiddleRoom: dc.l 0
  4477. middlex: dc.w 0
  4478. middlez: dc.w 0
  4479. doneflames: dc.w 0
  4480.  
  4481.