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