home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / games / alienbreed3d2 / source_4000 / airoutine.s < prev    next >
Text File  |  1997-01-31  |  36KB  |  2,418 lines

  1. lastx EQU 0
  2. lasty EQU 2
  3. lastzone EQU 4
  4. lastcpt EQU 6
  5. SEENBY equ 8
  6. DAMAGEDONE equ 10
  7. DAMAGETAKEN equ 12
  8.  
  9. DEFAULTMODE: dc.w 0
  10. RESPONSEMODE: dc.w 0
  11. FOLLOWUPMODE: dc.w 0
  12. RETREATMODE: dc.w 0
  13. CURRENTMODE: dc.w 0
  14. prowlspeed: dc.w 0
  15. responsespeed: dc.w 0
  16. retreatspeed: dc.w 0
  17. followupspeed: dc.w 0
  18. FOLLOWUPTIMER: dc.w 0
  19. REACTIONTIME: dc.w 0
  20. MIDDLECPT: dc.w 0
  21. VECOBJ: dc.w 0
  22.  
  23. PLAYERONENOISEVOL: dc.w 0
  24. PLAYERTWONOISEVOL: dc.w 0
  25.  
  26. AIROUTINE:
  27.  
  28.  move.w #-20,2(a0)
  29.  
  30. ; bsr CHECKDAMAGE
  31. ; tst.b numlives(a0)
  32. ; bgt.s .notdeadyet
  33. ; rts
  34. ;.notdeadyet:
  35.  
  36.  cmp.b #1,currentmode(a0)
  37.  blt DODEFAULT
  38.  beq DORESPONSE
  39.  
  40.  cmp.b #3,currentmode(a0)
  41.  blt DOFOLLOWUP
  42.  beq DORETREAT
  43.  
  44.  cmp.b #5,currentmode(a0)
  45.  beq DODIE
  46.  
  47. DOTAKEDAMAGE:
  48.  
  49.  jsr WALKANIM
  50.  move.w 4(a0),-(a7)
  51.  bsr GETROOMSTATSSTILL
  52.  
  53.  move.w (a7)+,d0
  54.  cmp.w #1,DEFAULTMODE
  55.  blt .notflying
  56.  
  57.  move.w d0,4(a0)
  58. .notflying
  59.  
  60.  tst.b FINISHEDANIM
  61.  beq.s stillhurting
  62.  move.b #0,currentmode(a0)
  63.  move.b #0,WhichAnim(a0)
  64.  move.w #0,SecTimer(a0)
  65.  
  66. stillhurting:
  67.  
  68.  bsr DOTORCH
  69.  
  70.  tst.w 12-64(a0)
  71.  blt.s .nocopyin
  72.  move.w 12(a0),12-64(a0)
  73.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  74. .nocopyin:
  75.  
  76.  movem.l d0-d7/a0-a6,-(a7)
  77.  move.w PLR1_xoff,newx
  78.  move.w PLR1_zoff,newz
  79.  move.w (a0),d1
  80.  move.l ObjectPoints,a1
  81.  lea (a1,d1.w*8),a1
  82.  move.w (a1),oldx
  83.  move.w 4(a1),oldz
  84.  move.w #-20,Range
  85.  move.w #20,speed
  86.  jsr HeadTowardsAng
  87.  move.w AngRet,d0
  88.  add.w ANIMFACING,d0
  89.  move.w d0,Facing(a0)
  90.  movem.l (a7)+,d0-d7/a0-a6
  91.  
  92.  rts
  93.  
  94. DODIE:
  95.  jsr WALKANIM
  96.  bsr GETROOMSTATSSTILL
  97.  tst.b FINISHEDANIM
  98.  beq.s stilldying
  99.  move.w #-1,12(a0)
  100.  move.w #-1,GraphicRoom(a0)
  101.  move.b #0,16(a0)
  102.  clr.b worry(a0)
  103.  st getout
  104. stilldying:
  105.  move.b #0,numlives(a0)
  106.  tst.w 12-64(a0)
  107.  blt.s .nocopyin
  108.  move.w 12(a0),12-64(a0)
  109.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  110. .nocopyin:
  111.  
  112.  
  113.  rts
  114.  
  115. TAKEDAMAGE:
  116.  
  117.  clr.b getout
  118.  moveq #0,d0
  119.  move.b damagetaken(a0),d0
  120.  move.l DAMAGEPTR,a2
  121.  add.w d0,(a2)
  122.  move.w (a2),d0
  123.  
  124.  asr.w #2,d0    ; divide by 4
  125.  
  126.  moveq #0,d1
  127.  move.b numlives(a0),d1
  128.  
  129.  move.b #0,damagetaken(a0)
  130.  cmp.w d0,d1
  131.  ble JUSTDIED
  132.  move.w #0,ObjTimer(a0)
  133.  move.w #0,SecTimer(a0)
  134.  
  135.  jsr GetRand
  136.  and.w #3,d0
  137.  beq.s .dodododo
  138.  
  139.  move.l WORKPTR,a5
  140.  st 1(a5)
  141.  
  142.  move.b #1,currentmode(a0)
  143.  move.w #0,SecTimer(a0)
  144.  move.w #0,ObjTimer(a0)
  145.  move.b #1,WhichAnim(a0)
  146.  
  147.  move.w (a0),d0
  148.  move.l ObjectPoints,a1
  149.  move.w (a1,d0.w*8),oldx
  150.  move.w 4(a1,d0.w*8),oldz
  151.  move.w PLR1_xoff,newx
  152.  move.w PLR1_zoff,newz
  153.  
  154.  move.w #100,speed
  155.  move.w #-20,Range
  156.  jsr HeadTowardsAng
  157.  move.w AngRet,Facing(a0)
  158.  
  159.  st getout
  160.  
  161.  rts
  162. .dodododo
  163.  
  164. ; asr.w #2,d2
  165. ; cmp.w d0,d2
  166. ; bgt.s .nostop
  167.  
  168.  move.b #4,currentmode(a0)    ; do take damage.
  169.  move.b #2,WhichAnim(a0)    ; get hit anim.
  170.  move.l WORKPTR,a5
  171.  st 1(a5)
  172.  
  173.  st getout
  174.  rts
  175. .nostop:
  176.  rts 
  177.  
  178. getout: dc.w 0
  179.  
  180. JUSTDIED:
  181.  
  182.  move.b #0,numlives(a0)
  183.  
  184.  move.w TextToShow(a0),d0
  185.  blt.s .notext
  186.  
  187.  muls #160,d0
  188.  add.l LEVELDATA,d0
  189.  jsr SENDMESSAGE
  190. ; move.w #0,SCROLLXPOS
  191. ; move.l d0,SCROLLPOINTER
  192. ; add.l #160,d0
  193. ; move.l d0,ENDSCROLL
  194. ; move.w #40,SCROLLTIMER
  195.  
  196. .notext:
  197.  
  198.  
  199.  move.l ObjectPoints,a2
  200.  move.w (a0),d3
  201.  move.w (a2,d3.w*8),newx
  202.  move.w 4(a2,d3.w*8),newz
  203.  
  204.  moveq #0,d0
  205.  move.b TypeOfThing(a0),d0
  206.  muls #AlienStatLen,d0
  207.  move.l LINKFILE,a2
  208.  lea AlienStats(a2),a2
  209.  add.l d0,a2
  210.  
  211.  move.b A_TypeOfSplat+1(a2),d0
  212.  move.b d0,TypeOfSplat
  213.  cmp.b #20,d0
  214.  blt gosplutch
  215.  
  216.  sub.b #20,TypeOfSplat
  217.  sub.b #20,d0
  218.  ext.w d0
  219.  
  220.  move.l LINKFILE,a2
  221.  add.l #AlienStats,a2
  222.  muls #AlienStatLen,d0
  223.  add.l d0,a2
  224.  move.l a2,a4
  225.  
  226. * Spawn some smaller aliens...
  227.  
  228.  move.w #2,d7    ; number to do.
  229.  
  230.  move.l OtherNastyData,a2
  231.  add.l #64,a2
  232.  
  233.  move.l ObjectPoints,a1
  234.  move.w (a0),d1
  235.  move.l (a1,d1.w*8),d0
  236.  move.l 4(a1,d1.w*8),d1
  237.  move.w #9,d3
  238.  
  239. spawny:
  240.  
  241. .findonefree
  242.  move.w 12(a2),d2
  243.  blt.s .foundonefree
  244.  tst.b numlives(a2)
  245.  beq.s .foundonefree
  246.  
  247.  adda.w #128,a2
  248.  dbra d3,.findonefree
  249.  bra .cantshoot
  250.  
  251. .foundonefree
  252.  
  253.  move.b A_HitPoints+1(a4),numlives(a2)
  254.  move.b TypeOfSplat,TypeOfThing(a2)
  255.  move.b #-1,TextToShow(a2)
  256.  move.b #0,16(a2)
  257.  move.w (a2),d4
  258.  move.l d0,(a1,d4.w*8)
  259.  move.l d1,4(a1,d4.w*8)
  260.  move.w 4(a0),4(a2)
  261.  move.w 12(a0),12(a2)
  262.  move.w 12(a0),GraphicRoom(a2)
  263.  move.w #-1,12-64(a2)
  264.  move.w CurrCPt(a0),CurrCPt(a2)
  265.  move.w CurrCPt(a0),TargCPt(a2)
  266.  move.b #-1,teamnumber(a2)
  267.  move.w Facing(a0),Facing(a2)
  268.  move.b #0,currentmode(a2)
  269.  move.b #0,WhichAnim(a2)
  270.  move.w #0,SecTimer(a2)
  271.  move.b #0,damagetaken(a2)
  272.  move.w #0,ObjTimer(a2)
  273.  move.w #0,ImpactX(a2)
  274.  move.w #0,ImpactZ(a2)
  275.  move.w #0,ImpactY(a2)
  276.  move.b A_HitPoints+1(a4),18(a2)
  277.  move.b #0,19(a2)
  278.  move.l DoorsHeld(a0),DoorsHeld(a2)
  279.  move.b ObjInTop(a0),ObjInTop(a2)
  280.  move.b #3,16-64(a2)
  281.  
  282.  dbra d7,spawny
  283. .cantshoot
  284.  
  285.  bra spawned
  286.  
  287. gosplutch:
  288.  
  289.  move.w #8,d2
  290.  jsr ExplodeIntoBits
  291.  
  292. spawned:
  293.  move.b #5,currentmode(a0)
  294.  move.b #3,WhichAnim(a0)
  295.  move.w #0,SecTimer(a0)
  296.  move.l WORKPTR,a5
  297.  st 1(a5)
  298.  st getout
  299.  rts
  300.  
  301. DORETREAT
  302.  
  303.  rts
  304.  
  305. DODEFAULT:
  306.  
  307.  cmp.w #1,DEFAULTMODE
  308.  blt PROWLRANDOM
  309.  beq PROWLRANDOMFLYING
  310.  
  311.  rts
  312.  
  313. DORESPONSE:
  314.  
  315.  cmp.w #1,RESPONSEMODE
  316.  blt CHARGE
  317.  beq CHARGETOSIDE
  318.  
  319.  cmp.w #3,RESPONSEMODE
  320.  blt ATTACKWITHGUN
  321.  beq CHARGEFLYING
  322.  
  323.  cmp.w #5,RESPONSEMODE
  324.  blt CHARGETOSIDEFLYING
  325.  beq ATTACKWITHGUNFLYING
  326.  
  327.  rts
  328.  
  329. DOFOLLOWUP:
  330.  cmp.w #1,FOLLOWUPMODE
  331.  blt PAUSEBRIEFLY
  332.  beq APPROACH
  333.  
  334.  cmp.w #3,FOLLOWUPMODE
  335.  blt APPROACHTOSIDE
  336.  beq APPROACHFLYING
  337.  
  338.  cmp.w #5,FOLLOWUPMODE
  339.  blt APPROACHTOSIDEFLYING
  340.  
  341.  rts
  342.  
  343. ***************************************************
  344. *** DEFAULT MOVEMENTS *****************************
  345. ***************************************************
  346.  
  347. ; Need a FLYING prowl routine
  348.  
  349. FLYABIT: dc.w 0
  350.  
  351. PROWLRANDOMFLYING:
  352.  
  353.  move.l #1000*256,StepDownVal
  354.  
  355.  st FLYABIT
  356.  bra PROWLFLY
  357.  
  358. PROWLRANDOM:
  359.  
  360.  clr.b FLYABIT
  361.  move.l #30*256,StepDownVal
  362.  
  363. PROWLFLY:
  364.  
  365.  move.l #20*256,StepUpVal
  366.  
  367.  tst.b damagetaken(a0)
  368.  beq.s .nodamage
  369.  
  370.  bsr TAKEDAMAGE
  371.  tst.b getout
  372.  beq.s .nodamage
  373.  rts
  374.  
  375. .nodamage:
  376.  
  377.  jsr WALKANIM
  378.  
  379.  move.l BOREDOMPTR,a1
  380.  
  381.  move.w 2(a1),d1
  382.  move.w 4(a1),d2
  383.  
  384.  move.l ObjectPoints,a2
  385.  move.w (a0),d3
  386.  move.w 4(a2,d3.w*8),d4
  387.  move.w (a2,d3.w*8),d3
  388.  
  389.  move.w d3,d5
  390.  move.w d4,d6
  391.  
  392.  sub.w d1,d3
  393.  bge.s .okp1
  394.  neg.w d3
  395. .okp1:
  396.  
  397.  sub.w d2,d4
  398.  bge.s .okp2
  399.  neg.w d4
  400. .okp2
  401.  
  402.  add.w d3,d4    ; dist away
  403.  
  404.  cmp.w #50,d4
  405.  blt.s .NONEWSTORE
  406.  
  407.  move.w d5,2(a1)
  408.  move.w d6,4(a1)
  409.  move.w #100,(a1)
  410.  bra .NEWSTORE
  411.  
  412. .NONEWSTORE
  413.  
  414.  sub.w #1,(a1)
  415.  bgt.s .NEWSTORE
  416.  
  417.  bsr GETROOMCPT
  418.  
  419.  jsr GetRand
  420.  moveq #0,d1
  421.  move.w d0,d1
  422.  divs.w NumCPts,d1
  423.  swap d1
  424.  move.w #7,d7
  425.  
  426. .tryagain:
  427.  move.w d1,TargCPt(a0)
  428.  move.w CurrCPt(a0),d0
  429.  jsr GetNextCPt
  430.  cmp.w CurrCPt(a0),d0
  431.  beq.s .plusagain
  432.  cmp.b #$7f,d0
  433.  bne.s .okaway2
  434. .plusagain:
  435.  move.w TargCPt(a0),d1
  436.  add.w #1,d1
  437.  cmp.w NumCPts,d1
  438.  blt .nobin
  439.  moveq #0,d1
  440. .nobin
  441.  dbra d7,.tryagain
  442. .okaway2
  443.  
  444.  move.w #50,(a1)
  445.  
  446. .NEWSTORE
  447.  
  448. WIDGET:
  449.  
  450.  tst.w PLAYERONENOISEVOL
  451.  beq.s .noplayernoise
  452.  
  453.  move.l PLR1_Roompt,a1
  454.  tst.b PLR1_StoodInTop
  455.  beq.s .pnotintop
  456.  
  457.  addq #1,a1
  458.  
  459. .pnotintop:
  460.  
  461.  moveq #0,d1
  462.  move.b ToZoneCpt(a1),d1
  463.  
  464.  move.w CurrCPt(a0),d0
  465.  jsr GetNextCPt
  466.  
  467.  cmp.b #$7f,d0
  468.  bne.s .okaway
  469.  move.w CurrCPt(a0),d0
  470. .okaway
  471.  
  472.  move.w d0,TargCPt(a0)
  473.  
  474. .noplayernoise:
  475.  
  476.  moveq #0,d0
  477.  move.b teamnumber(a0),d0
  478.  blt.s .noteam
  479.  
  480.  lea TEAMWORK(pc),a2
  481.  asl.w #4,d0
  482.  add.w d0,a2
  483.  tst.w SEENBY(a2)
  484.  blt.s .noteam
  485.  move.w (a0),d0
  486.  cmp.w SEENBY(a2),d0
  487.  bne.s .noremove
  488.  move.w #-1,SEENBY(a2)
  489.  bra.s .noteam
  490. .noremove:
  491.  
  492.  asl.w #4,d0
  493.  lea NASTYWORK(pc),a1
  494.  add.w d0,a1
  495.  move.w #0,DAMAGEDONE(a1)
  496.  move.w #0,DAMAGETAKEN(a1)
  497.  move.l (a2),(a1)
  498.  move.l 4(a2),4(a1)
  499.  move.l 8(a2),8(a1)
  500.  move.l 12(a2),12(a1)
  501.  move.w lastcpt(a1),TargCPt(a0)
  502.  move.w #-1,lastzone(a1)
  503.  bra.s .notseen
  504.  
  505. .noteam:
  506.  
  507.  move.w (a0),d0
  508.  asl.w #4,d0
  509.  lea NASTYWORK(pc),a1
  510.  add.w d0,a1
  511.  move.w #0,DAMAGEDONE(a1)
  512.  move.w #0,DAMAGETAKEN(a1)
  513.  tst.w lastzone(a1)
  514.  blt.s .notseen
  515.  move.w lastcpt(a1),TargCPt(a0)
  516.  move.w #-1,lastzone(a1)
  517. .notseen:
  518.  
  519.  
  520.  move.w CurrCPt(a0),d0    ; where the alien is now.
  521.  move.w TargCPt(a0),d1
  522.  jsr GetNextCPt
  523.  cmp.b #$7f,d0
  524.  beq.s .yesrand
  525.  tst.b FLYABIT
  526.  bne.s .norand
  527.  tst.b ONLYSEE
  528.  beq.s .norand
  529. .yesrand
  530.  jsr GetRand
  531.  moveq #0,d1
  532.  move.w d0,d1
  533.  divs.w NumCPts,d1
  534.  swap d1
  535.  move.w #7,d7
  536.  
  537. .tryagain:
  538.  move.w d1,TargCPt(a0)
  539.  move.w CurrCPt(a0),d0
  540.  jsr GetNextCPt
  541.  cmp.w CurrCPt(a0),d0
  542.  beq.s .plusagain
  543.  cmp.b #$7f,d0
  544.  bne.s .okaway2
  545. .plusagain:
  546.  move.w TargCPt(a0),d1
  547.  add.w #1,d1
  548.  cmp.w NumCPts,d1
  549.  blt .nobin
  550.  moveq #0,d1
  551. .nobin
  552.  dbra d7,.tryagain
  553. .okaway2
  554.  
  555.  
  556. .norand: 
  557.  
  558.  
  559.  move.w d0,MIDDLECPT
  560.  
  561.  move.l CPtPos,a1
  562.  move.w (a1,d0.w*8),newx
  563.  move.w 2(a1,d0.w*8),newz
  564.  
  565.  asl.w #2,d0
  566.  add.w (a0),d0
  567.  muls #$1347,d0
  568.  and.w #4095,d0
  569.  move.l #SineTable,a1
  570.  move.w (a1,d0.w*2),d1
  571.  move.l #SineTable+2048,a1
  572.  move.w (a1,d0.w*2),d2
  573.  ext.l d1
  574.  ext.l d2
  575.  asl.l #4,d2
  576.  swap d2
  577.  asl.l #4,d1
  578.  swap d1
  579.  add.w d1,newx
  580.  add.w d2,newz
  581.  
  582.  move.w (a0),d1
  583.  move.l #ObjRotated,a6
  584.  move.l ObjectPoints,a1
  585.  lea (a1,d1.w*8),a1
  586.  lea (a6,d1.w*8),a6
  587.  move.w (a1),oldx
  588.  move.w 4(a1),oldz
  589.  move.w #0,speed
  590.  tst.b DoAction
  591.  beq.s .nospeed
  592.  moveq #0,d2
  593.  move.b DoAction,d2
  594.  asl.w #2,d2
  595.  
  596.  muls.w prowlspeed,d2
  597.  move.w d2,speed
  598. .nospeed:
  599.  move.w #40,Range
  600.  move.w 4(a0),d0
  601.  ext.l d0
  602.  asl.l #7,d0
  603.  move.l thingheight,d2
  604.  asr.l #1,d2
  605.  sub.l d2,d0
  606.  move.l d0,newy
  607.  move.l d0,oldy
  608.  
  609.  move.b ObjInTop(a0),StoodInTop
  610.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  611.  clr.b canshove
  612.  clr.b GotThere
  613.  jsr HeadTowardsAng
  614.  move.w AngRet,Facing(a0)
  615.  
  616. ; add.w #100,Facing(a0)
  617. ; and.w #8190,Facing(a0)
  618.  
  619.  tst.b GotThere
  620.  beq.s .notnextcpt
  621.  
  622.  move.w MIDDLECPT,d0
  623.  move.w d0,CurrCPt(a0)
  624.  cmp.w TargCPt(a0),d0
  625.  bne .notnextcpt
  626.  
  627. * We have arrived at the target contol pt. Pick a
  628. * random one and go to that...
  629.  
  630.  jsr GetRand
  631.  moveq #0,d1
  632.  move.w d0,d1
  633.  divs.w NumCPts,d1
  634.  swap d1
  635.  move.w d1,TargCPt(a0)
  636.  
  637. .notnextcpt:
  638.  
  639.  move.w #%1000000000,wallflags
  640.  move.l #%00001000110010000010,CollideFlags
  641.  jsr Collision
  642.  tst.b hitwall
  643.  beq.s .canmove
  644.  
  645.  move.w oldx,newx
  646.  move.w oldz,newz
  647.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  648.  bra .hitathing
  649.  
  650. .canmove:
  651.  
  652.  clr.b wallbounce
  653.  Jsr MoveObject
  654.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  655.  move.b StoodInTop,ObjInTop(a0)
  656.  
  657.  
  658. .hitathing:
  659.  tst.w 12-64(a0)
  660.  blt.s .nocopyin
  661.  move.w 12(a0),12-64(a0)
  662.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  663. .nocopyin:
  664.  
  665.  move.w 4(a0),-(a7)
  666.  bsr GETROOMSTATS
  667.  move.w (a7)+,d0
  668.  
  669.  tst.b FLYABIT
  670.  beq.s .noflymove
  671.  move.w d0,4(a0)
  672.  bsr FLYTOCPTHEIGHT
  673. .noflymove:
  674.  
  675.  bsr DOTORCH
  676.  
  677.  move.b #0,currentmode(a0)
  678.  bsr LOOKFORPLAYER1
  679.  move.b #0,WhichAnim(a0)
  680.  tst.b 17(a0)
  681.  beq.s .nosee
  682.  bsr CHECKINFRONT
  683.  tst.b d0
  684.  beq.s .nosee
  685.  
  686.  move.w TempFrames,d0
  687.  sub.w d0,ObjTimer(a0)
  688.  bgt.s .notreacted
  689.  bsr CHECKFORDARK
  690.  tst.b d0
  691.  beq.s .nosee
  692.  
  693. ; We have seen the player and reacted; can we attack him?
  694.  
  695.  tst.b FLYABIT
  696.  bne.s .yesattack
  697.  
  698.  cmp.w #2,RESPONSEMODE
  699.  beq.s .yesattack
  700.  cmp.w #5,RESPONSEMODE
  701.  beq.s .yesattack
  702.  
  703.  bsr CHECKATTACKONGROUND
  704.  tst.b d0
  705.  bne.s .yesattack
  706.  
  707. ; We can see the player
  708.  
  709.  bsr STOREPLAYERPOS
  710.  
  711. ; but we can't get to him
  712.  bra.s .nosee
  713.  
  714. .yesattack:
  715.  move.w #0,SecTimer(a0)
  716.  move.b #1,currentmode(a0)
  717.  move.b #1,WhichAnim(a0)
  718. .notreacted:
  719.  move.w ANIMFACING,d0
  720.  add.w d0,Facing(a0)
  721.  rts
  722. .nosee:
  723.  move.w REACTIONTIME,ObjTimer(a0)
  724.  
  725.  move.w ANIMFACING,d0
  726.  add.w d0,Facing(a0)
  727.  
  728.  rts
  729.  
  730. ***********************************************
  731. ** RESPONSE MOVEMENTS *************************
  732. ***********************************************
  733.  
  734. CHARGETOSIDE:
  735.  clr.b FLYABIT
  736.  st TOSIDE
  737.  move.l #30*256,StepDownVal
  738.  bra INTOCHA
  739.  
  740. CHARGE:
  741.  clr.b FLYABIT
  742.  clr.b TOSIDE
  743.  move.l #30*256,StepDownVal
  744.  
  745. INTOCHA:
  746.  
  747.  tst.b damagetaken(a0)
  748.  beq.s .nodamage
  749.  
  750.  bsr TAKEDAMAGE
  751.  tst.b getout
  752.  beq.s .nodamage
  753.  rts
  754.  
  755. .nodamage:
  756.  
  757.  jsr ATTACKANIM
  758. ; tst.b FINISHEDANIM
  759. ; beq.s .notfinishedattacking
  760. ; move.b #2,currentmode(a0)
  761. ; move.w FOLLOWUPTIMER,ObjTimer(a0)
  762. ; move.w #0,SecTimer(a0)
  763. ; rts
  764. ;.notfinishedattacking:
  765.  
  766.  move.w 12(a0),FromZone
  767.  jsr CheckTeleport
  768.  tst.b OKTEL
  769.  beq.s .notel
  770.  move.l floortemp,d0
  771.  asr.l #7,d0
  772.  add.w d0,4(a0)
  773.  bra .NoMunch
  774. .notel:
  775.  
  776.  move.w PLR1_xoff,newx
  777.  move.w PLR1_zoff,newz
  778.  move.w PLR1_sinval,tempsin
  779.  move.w PLR1_cosval,tempcos
  780.  move.w p1_xoff,tempx
  781.  move.w p1_zoff,tempz
  782.  tst.b TOSIDE
  783.  beq.s .noside
  784.  jsr RunAround
  785. .noside:
  786.  
  787.  
  788.  move.w (a0),d1
  789.  move.l #ObjRotated,a6
  790.  move.l ObjectPoints,a1
  791.  lea (a1,d1.w*8),a1
  792.  lea (a6,d1.w*8),a6
  793.  move.w (a1),oldx
  794.  move.w 4(a1),oldz
  795.  move.w responsespeed,d2
  796.  muls.w TempFrames,d2
  797.  move.w d2,speed
  798.  move.w #160,Range
  799.  move.w 4(a0),d0
  800.  ext.l d0
  801.  asl.l #7,d0
  802.  move.l thingheight,d2
  803.  asr.l #1,d2
  804.  sub.l d2,d0
  805.  move.l d0,newy
  806.  move.l d0,oldy
  807.  
  808.  move.b ObjInTop(a0),StoodInTop
  809.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  810.  clr.b canshove
  811.  clr.b GotThere
  812.  jsr HeadTowardsAng
  813.  move.w #%1000000000,wallflags
  814.  
  815.  move.l #%100000,CollideFlags
  816.  jsr Collision
  817.  tst.b hitwall
  818.  beq.s .nothitplayer
  819.  
  820.  move.w oldx,newx
  821.  move.w oldz,newz
  822.  st GotThere
  823.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  824.  bra .hitathing
  825.  
  826. .nothitplayer:
  827.  
  828.  move.l #%11111111110111000010,CollideFlags
  829.  jsr Collision
  830.  tst.b hitwall
  831.  beq.s .canmove
  832.  
  833.  move.w oldx,newx
  834.  move.w oldz,newz
  835.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  836.  bra .hitathing
  837.  
  838. .canmove:
  839.  
  840.  clr.b wallbounce
  841.  Jsr MoveObject
  842.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  843.  move.b StoodInTop,ObjInTop(a0)
  844.  
  845.  move.w AngRet,Facing(a0)
  846.  
  847. .hitathing:
  848.  tst.w 12-64(a0)
  849.  blt.s .nocopyin
  850.  move.w 12(a0),12-64(a0)
  851.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  852. .nocopyin:
  853.  
  854.  tst.b GotThere 
  855.  beq.s .NoMunch
  856.  tst.b DoAction
  857.  beq.s .NoMunch
  858.  move.l PLR1_Obj,a5
  859.  move.b DoAction,d0
  860.  asl.w #1,d0
  861.  add.b d0,damagetaken(a5)
  862.  
  863.  move.w newx,d0
  864.  sub.w oldx,d0
  865.  ext.l d0
  866.  divs TempFrames,d0
  867.  add.w d0,ImpactX(a5)
  868.  move.w newz,d0
  869.  sub.w oldz,d0
  870.  ext.l d0
  871.  divs TempFrames,d0
  872.  add.w d0,ImpactZ(a5)
  873.  
  874. .NoMunch: 
  875.  
  876.  bsr STOREPLAYERPOS
  877.  
  878.  bsr GETROOMSTATS
  879.  
  880.  bsr GETROOMCPT 
  881.  
  882.  bsr DOTORCH
  883.  
  884.  bsr LOOKFORPLAYER1
  885.  move.b #0,currentmode(a0)
  886.  tst.b 17(a0)
  887.  beq.s .nosee
  888.  bsr CHECKINFRONT
  889.  tst.b d0
  890.  beq.s .nosee
  891.  tst.b FLYABIT
  892.  bne.s .yesattack
  893.  
  894.  bsr CHECKATTACKONGROUND
  895.  tst.b d0
  896.  bne.s .yesattack
  897.  
  898.  bra.s .nosee
  899.  
  900. .yesattack
  901.  move.w ANIMFACING,d0
  902.  add.w d0,Facing(a0)
  903.  move.b #1,currentmode(a0)
  904.  move.b #1,WhichAnim(a0)
  905.  rts
  906. .nosee:
  907.  move.b #0,WhichAnim(a0)
  908.  move.w #0,SecTimer(a0)
  909.  move.w ANIMFACING,d0
  910.  add.w d0,Facing(a0)
  911.  rts
  912.  
  913.  
  914. ATTACKWITHGUNFLYING
  915.  st FLYABIT
  916.  bra intoatt
  917.  
  918. ATTACKWITHGUN:
  919.  clr.b FLYABIT
  920. intoatt:
  921.  
  922.  
  923.  
  924.  move.l LINKFILE,a1
  925.  lea AlienStats(a1),a1
  926.  moveq #0,d0
  927.  move.b TypeOfThing(a0),d0
  928.  muls #AlienStatLen,d0
  929.  add.w d0,a1
  930.  move.w A_BulletType(a1),d0
  931.  move.b d0,SHOTTYPE 
  932.  
  933.  move.l LINKFILE,a1
  934.  lea BulletAnimData(a1),a1
  935.  muls #B_BulStatLen,d0
  936.  add.l d0,a1
  937.  
  938.  move.l B_DamageToTarget(a1),d0
  939.  move.b d0,SHOTPOWER
  940.  clr.l d1
  941.  move.l B_MovementSpeed(a1),d0
  942.  bset d0,d1
  943.  move.w d1,SHOTSPEED
  944.  sub.w #1,d0
  945.  move.w d0,SHOTSHIFT
  946.  
  947.  
  948.  tst.l B_VisibleOrInstant(a1)
  949.  beq ATTACKWITHBULLETGUN
  950.  
  951. ATTACKWITHINSTANTGUN:
  952.  
  953.  tst.b damagetaken(a0)
  954.  beq.s .nodamage
  955.  
  956.  move.b #4,currentmode(a0)
  957.  bsr TAKEDAMAGE
  958.  tst.b getout
  959.  beq.s .nodamage
  960. ; move.w ANIMFACING,d0
  961. ; add.w d0,Facing(a0)
  962.  rts
  963.  
  964. .nodamage:
  965.  
  966.  jsr ATTACKANIM
  967.  
  968.  movem.l d0-d7/a0-a6,-(a7)
  969.  move.w PLR1_xoff,newx
  970.  move.w PLR1_zoff,newz
  971.  move.w (a0),d1
  972.  move.l ObjectPoints,a1
  973.  lea (a1,d1.w*8),a1
  974.  move.w (a1),oldx
  975.  move.w 4(a1),oldz
  976.  move.w #-20,Range
  977.  move.w #20,speed
  978.  jsr HeadTowardsAng
  979.  move.w AngRet,Facing(a0)
  980.  movem.l (a7)+,d0-d7/a0-a6
  981.  
  982.  
  983.  bsr STOREPLAYERPOS
  984.  
  985.  bsr LOOKFORPLAYER1
  986.  move.b #0,currentmode(a0)
  987.  tst.b 17(a0)
  988.  beq.s .nosee
  989.  bsr CHECKINFRONT
  990.  tst.b d0
  991.  beq.s .nosee
  992.  
  993.  move.b #1,currentmode(a0)
  994.  move.b #1,WhichAnim(a0)
  995.  move.w ANIMFACING,d0
  996.  add.w d0,Facing(a0)
  997.  bra .yessee
  998. .nosee:
  999.  move.b #0,WhichAnim(a0)
  1000.  move.w #0,SecTimer(a0)
  1001.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1002.  move.w #0,SecTimer(a0)
  1003.  move.w ANIMFACING,d0
  1004.  add.w d0,Facing(a0)
  1005.  rts
  1006.  
  1007. .yessee:
  1008.  
  1009.  tst.b DoAction
  1010.  beq .noshootythang
  1011.  
  1012.  move.w (a0),d1
  1013.  move.l #ObjRotated,a6
  1014.  move.l ObjectPoints,a1
  1015.  lea (a1,d1.w*8),a1
  1016.  lea (a6,d1.w*8),a6
  1017.  
  1018.  movem.l a0/a1,-(a7)
  1019.  jsr GetRand
  1020.  
  1021.  move.l #ObjRotated,a6
  1022.  move.w (a0),d1
  1023.  lea (a6,d1.w*8),a6
  1024.  
  1025. ; move.l (a6),Noisex
  1026. ; move.w #200,Noisevol
  1027. ; move.w #3,Samplenum
  1028. ; move.b #1,chanpick
  1029. ; clr.b notifplaying
  1030. ; movem.l d0-d7/a0-a6,-(a7)
  1031. ; move.b 1(a0),IDNUM
  1032. ; jsr MakeSomeNoise
  1033. ; movem.l (a7)+,d0-d7/a0-a6
  1034.  
  1035.  and.w #$7fff,d0
  1036.  move.w (a6),d1
  1037.  muls d1,d1
  1038.  move.w 2(a6),d2
  1039.  muls d2,d2
  1040.  add.l d2,d1
  1041.  asr.l #6,d1
  1042.  ext.l d0
  1043.  asl.l #2,d0
  1044.  cmp.l d1,d0
  1045.  bgt.s .hitplr
  1046.  jsr SHOOTPLAYER1
  1047.  bra.s .missplr
  1048. .hitplr: 
  1049.  move.l PLR1_Obj,a1
  1050.  move.b SHOTPOWER,d0
  1051.  add.b d0,damagetaken(a1)
  1052.  
  1053.  sub.l #ObjRotated,a6
  1054.  add.l ObjectPoints,a6
  1055.  move.w (a6),d0
  1056.  sub.w p1_xoff,d0    ;dx
  1057.  move.w 4(a6),d1
  1058.  sub.w p1_zoff,d1    ;dz
  1059.  
  1060.  move.w d0,d2
  1061.  move.w d1,d3
  1062.  muls d2,d2
  1063.  muls d3,d3
  1064.  add.l d3,d2
  1065.  jsr CALCSQROOT
  1066.  add.l d2,d2
  1067.  
  1068.  moveq #0,d3
  1069.  move.b SHOTPOWER,d3
  1070.  
  1071.  
  1072.  muls d3,d0
  1073.  divs d2,d0
  1074.  muls d3,d1
  1075.  divs d2,d1
  1076.  
  1077.  sub.w d0,ImpactX(a1)
  1078.  sub.w d1,ImpactZ(a1)
  1079.  
  1080. .missplr:
  1081.  movem.l (a7)+,a0/a1
  1082.  
  1083.  
  1084. .noshootythang:
  1085.  
  1086.  move.w (a0),d1
  1087.  move.l ObjectPoints,a1
  1088.  lea (a1,d1.w*8),a1
  1089.  
  1090.  move.w (a1),newx
  1091.  move.w 4(a1),newz
  1092.  
  1093.  bsr DOTORCH
  1094.  
  1095.  tst.b FINISHEDANIM
  1096.  beq.s .notfinishedattacking
  1097.  move.b #0,WhichAnim(a0)
  1098.  move.b #2,currentmode(a0)
  1099.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1100.  move.w #0,SecTimer(a0)
  1101.  move.w ANIMFACING,d0
  1102.  add.w d0,Facing(a0)
  1103.  rts
  1104. .notfinishedattacking:
  1105.  
  1106.  rts
  1107.  
  1108. ATTACKWITHBULLETGUN:
  1109.  
  1110.  tst.b damagetaken(a0)
  1111.  beq.s .nodamage
  1112.  
  1113.  move.b #4,currentmode(a0)
  1114.  bsr TAKEDAMAGE
  1115.  tst.b getout
  1116.  beq.s .nodamage
  1117. ; move.w ANIMFACING,d0
  1118. ; add.w d0,Facing(a0)
  1119.  rts
  1120.  
  1121. .nodamage:
  1122.  
  1123.  
  1124.  jsr ATTACKANIM
  1125.  
  1126.  movem.l d0-d7/a0-a6,-(a7)
  1127.  move.w PLR1_xoff,newx
  1128.  move.w PLR1_zoff,newz
  1129.  move.w (a0),d1
  1130.  move.l ObjectPoints,a1
  1131.  lea (a1,d1.w*8),a1
  1132.  move.w (a1),oldx
  1133.  move.w 4(a1),oldz
  1134.  move.w #-20,Range
  1135.  move.w #20,speed
  1136.  jsr HeadTowardsAng
  1137.  move.w AngRet,Facing(a0)
  1138.  movem.l (a7)+,d0-d7/a0-a6
  1139.  
  1140.  bsr STOREPLAYERPOS
  1141.  
  1142.  tst.b DoAction
  1143.  beq.s .noshootythang
  1144.   
  1145.  movem.l d0-d7/a0-a6,-(a7)
  1146.   
  1147.  move.w (a0),d1
  1148.  move.l ObjectPoints,a1
  1149.  lea (a1,d1.w*8),a1
  1150.  
  1151.  move.b ObjInTop(a0),SHOTINTOP
  1152.  
  1153.  jsr FireAtPlayer1
  1154.  movem.l (a7)+,d0-d7/a0-a6  
  1155. .noshootythang:
  1156.  
  1157.  move.w (a0),d1
  1158.  move.l ObjectPoints,a1
  1159.  lea (a1,d1.w*8),a1
  1160.  
  1161.  move.w (a1),newx
  1162.  move.w 4(a1),newz
  1163.  
  1164.  bsr DOTORCH
  1165.  
  1166.  
  1167.  tst.b FINISHEDANIM
  1168.  beq.s .notfinishedattacking
  1169.  move.b #0,WhichAnim(a0)
  1170.  move.b #2,currentmode(a0)
  1171.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1172.  move.w #0,SecTimer(a0)
  1173.  move.w ANIMFACING,d0
  1174.  add.w d0,Facing(a0)
  1175.  rts
  1176. .notfinishedattacking:
  1177.  
  1178.  bsr LOOKFORPLAYER1
  1179.  move.b #0,currentmode(a0)
  1180.  tst.b 17(a0)
  1181.  beq.s .nosee
  1182.  bsr CHECKINFRONT
  1183.  tst.b d0
  1184.  beq.s .nosee
  1185.  move.b #1,WhichAnim(a0)
  1186.  move.b #1,currentmode(a0)
  1187.  move.w ANIMFACING,d0
  1188.  add.w d0,Facing(a0)
  1189.  rts
  1190. .nosee:
  1191.  move.b #0,WhichAnim(a0)
  1192.  move.w #0,SecTimer(a0)
  1193.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1194.  move.w #0,SecTimer(a0)
  1195.  move.w ANIMFACING,d0
  1196.  add.w d0,Facing(a0)
  1197.  rts
  1198.  
  1199. CHARGETOSIDEFLYING:
  1200.  st FLYABIT
  1201.  st TOSIDE
  1202.  move.l #1000*256,StepDownVal
  1203.  bra INTOCHAFLY
  1204.  
  1205. CHARGEFLYING: 
  1206.  clr.b TOSIDE
  1207.  st FLYABIT
  1208.  
  1209.  move.l #1000*256,StepDownVal
  1210.  
  1211. INTOCHAFLY:
  1212.  
  1213.  tst.b damagetaken(a0)
  1214.  beq.s .nodamage
  1215.  
  1216.  bsr TAKEDAMAGE
  1217.  tst.b getout
  1218.  beq.s .nodamage
  1219. ; move.w ANIMFACING,d0
  1220. ; add.w d0,Facing(a0)
  1221.  rts
  1222.  
  1223. .nodamage:
  1224.  
  1225.  
  1226.  jsr ATTACKANIM
  1227. ; tst.b FINISHEDANIM
  1228. ; beq.s .notfinishedattacking
  1229. ; move.b #2,currentmode(a0)
  1230. ; move.w FOLLOWUPTIMER,ObjTimer(a0)
  1231. ; move.w #0,SecTimer(a0)
  1232. ; rts
  1233. ;.notfinishedattacking:
  1234.  
  1235.  move.w 12(a0),FromZone
  1236.  jsr CheckTeleport
  1237.  tst.b OKTEL
  1238.  beq.s .notel
  1239.  move.l floortemp,d0
  1240.  asr.l #7,d0
  1241.  add.w d0,4(a0)
  1242.  bra .NoMunch
  1243. .notel:
  1244.  
  1245.  move.w (a0),d1
  1246.  move.l #ObjRotated,a6
  1247.  move.l ObjectPoints,a1
  1248.  lea (a1,d1.w*8),a1
  1249.  lea (a6,d1.w*8),a6
  1250.  move.w (a1),oldx
  1251.  move.w 4(a1),oldz
  1252.  move.w PLR1_xoff,newx
  1253.  move.w PLR1_zoff,newz
  1254.  move.w PLR1_sinval,tempsin
  1255.  move.w PLR1_cosval,tempcos
  1256.  move.w p1_xoff,tempx
  1257.  move.w p1_zoff,tempz
  1258.  tst.b TOSIDE
  1259.  beq.s .noside
  1260.  jsr RunAround
  1261. .noside:
  1262.  
  1263.  move.w responsespeed,d2
  1264.  muls.w TempFrames,d2
  1265.  move.w d2,speed
  1266.  move.w #160,Range
  1267.  move.w 4(a0),d0
  1268.  ext.l d0
  1269.  asl.l #7,d0
  1270.  move.l thingheight,d2
  1271.  asr.l #1,d2
  1272.  sub.l d2,d0
  1273.  move.l d0,newy
  1274.  move.l d0,oldy
  1275.  
  1276.  move.b ObjInTop(a0),StoodInTop
  1277.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  1278.  clr.b canshove
  1279.  clr.b GotThere
  1280.  jsr HeadTowardsAng
  1281.  move.w #%1000000000,wallflags
  1282.  
  1283.  move.l #%100000,CollideFlags
  1284.  jsr Collision
  1285.  tst.b hitwall
  1286.  beq.s .nothitplayer
  1287.  
  1288.  move.w oldx,newx
  1289.  move.w oldz,newz
  1290.  st GotThere
  1291.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1292.  bra .hitathing
  1293.  
  1294. .nothitplayer:
  1295.  
  1296.  move.l #%11111111110111000010,CollideFlags
  1297.  jsr Collision
  1298.  tst.b hitwall
  1299.  beq.s .canmove
  1300.  
  1301.  move.w oldx,newx
  1302.  move.w oldz,newz
  1303.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1304.  bra .hitathing
  1305.  
  1306. .canmove:
  1307.  
  1308.  clr.b wallbounce
  1309.  Jsr MoveObject
  1310.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1311.  move.b StoodInTop,ObjInTop(a0)
  1312.  
  1313.  move.w AngRet,Facing(a0)
  1314.  
  1315. .hitathing:
  1316.  
  1317.  tst.b GotThere 
  1318.  beq.s .NoMunch
  1319.  tst.b DoAction
  1320.  beq.s .NoMunch
  1321.  move.l PLR1_Obj,a5
  1322.  move.b DoAction,d0
  1323.  asl.w #1,d0
  1324.  add.b d0,damagetaken(a5)
  1325. .NoMunch: 
  1326.  
  1327.  bsr STOREPLAYERPOS
  1328.  
  1329.  move.w 4(a0),-(a7)
  1330.  bsr GETROOMSTATS
  1331.  move.w (a7)+,4(a0)
  1332.  
  1333.  bsr GETROOMCPT
  1334.  
  1335.  bsr FLYTOPLAYERHEIGHT
  1336.  
  1337.  bsr DOTORCH
  1338.  
  1339.  bsr LOOKFORPLAYER1
  1340.  move.b #0,currentmode(a0)
  1341.  tst.b 17(a0)
  1342.  beq.s .nosee
  1343.  bsr CHECKINFRONT
  1344.  tst.b d0
  1345.  beq.s .nosee
  1346.  move.b #1,currentmode(a0)
  1347.  move.b #1,WhichAnim(a0)
  1348.  move.w ANIMFACING,d0
  1349.  add.w d0,Facing(a0)
  1350.  rts
  1351. .nosee:
  1352.  move.b #0,WhichAnim(a0)
  1353.  move.w #0,SecTimer(a0)
  1354.  move.w ANIMFACING,d0
  1355.  add.w d0,Facing(a0)
  1356.  rts
  1357.  
  1358.  
  1359. ***********************************************
  1360. ** Retreat Movements **************************
  1361. ***********************************************
  1362.  
  1363. ***********************************************
  1364. ** Followup Movements *************************
  1365. ***********************************************
  1366.  
  1367. PAUSEBRIEFLY
  1368.  
  1369.  tst.b damagetaken(a0)
  1370.  beq.s .nodamage
  1371.  
  1372.  bsr TAKEDAMAGE
  1373.  tst.b getout
  1374.  beq.s .nodamage
  1375. ; move.w ANIMFACING,d0
  1376. ; add.w d0,Facing(a0)
  1377.  rts
  1378.  
  1379. .nodamage:
  1380.  
  1381.  move.w #0,SecTimer(a0)
  1382.  jsr WALKANIM
  1383.  
  1384.  move.w TempFrames,d0
  1385.  sub.w d0,ObjTimer(a0)
  1386.  bgt.s .stillwaiting
  1387.  
  1388.  move.w (a0),d1
  1389.  move.l ObjectPoints,a1
  1390.  lea (a1,d1.w*8),a1
  1391.  
  1392.  move.w (a1),newx
  1393.  move.w 4(a1),newz
  1394.  
  1395.  bsr DOTORCH
  1396.  
  1397.  bsr LOOKFORPLAYER1
  1398.  move.b #0,currentmode(a0)
  1399.  tst.b 17(a0)
  1400.  beq.s .nosee
  1401.  bsr CHECKINFRONT
  1402.  tst.b d0
  1403.  beq.s .nosee
  1404.  bsr CHECKFORDARK
  1405.  tst.b d0
  1406.  beq.s .nosee
  1407.  move.b #1,WhichAnim(a0)
  1408.  move.b #1,currentmode(a0)
  1409.  move.w ANIMFACING,d0
  1410.  add.w d0,Facing(a0)
  1411.  rts
  1412. .nosee:
  1413.  move.b #0,WhichAnim(a0)
  1414.  move.w ANIMFACING,d0
  1415.  add.w d0,Facing(a0)
  1416.  rts
  1417.  
  1418. .stillwaiting:
  1419.  move.w ANIMFACING,d0
  1420.  add.w d0,Facing(a0)
  1421.  rts
  1422.  
  1423. TOSIDE: dc.w 0
  1424.  
  1425. APPROACH:
  1426.  clr.b FLYABIT
  1427.  move.l #30*256,StepDownVal
  1428.  clr.b TOSIDE
  1429.  bra INTOAPP
  1430.  
  1431. APPROACHFLYING:
  1432.  st FLYABIT
  1433.  move.l #1000*256,StepDownVal
  1434.  clr.b TOSIDE
  1435.  bra INTOAPP
  1436.  
  1437. APPROACHTOSIDEFLYING:
  1438.  st FLYABIT
  1439.  move.l #1000*256,StepDownVal
  1440.  st TOSIDE
  1441.  bra INTOAPP
  1442.  
  1443. APPROACHTOSIDE:
  1444.  st TOSIDE
  1445.  clr.b FLYABIT
  1446.  move.l #30*256,StepDownVal
  1447.  
  1448. INTOAPP:
  1449.  
  1450.  tst.b damagetaken(a0)
  1451.  beq.s .nodamage
  1452.  
  1453.  bsr TAKEDAMAGE
  1454.  tst.b getout
  1455.  beq.s .nodamage
  1456.  rts
  1457.  
  1458. .nodamage:
  1459.  
  1460.  jsr WALKANIM
  1461.  
  1462.  move.w 12(a0),FromZone
  1463.  jsr CheckTeleport
  1464.  tst.b OKTEL
  1465.  beq.s .notel
  1466.  move.l floortemp,d0
  1467.  asr.l #7,d0
  1468.  add.w d0,4(a0)
  1469.  bra .NoMunch
  1470. .notel:
  1471.  
  1472.  move.w (a0),d1
  1473.  move.l #ObjRotated,a6
  1474.  move.l ObjectPoints,a1
  1475.  lea (a1,d1.w*8),a1
  1476.  lea (a6,d1.w*8),a6
  1477.  move.w (a1),oldx
  1478.  move.w 4(a1),oldz
  1479.  
  1480.  move.w PLR1_xoff,newx
  1481.  move.w PLR1_zoff,newz
  1482.  move.w PLR1_sinval,tempsin
  1483.  move.w PLR1_cosval,tempcos
  1484.  move.w p1_xoff,tempx
  1485.  move.w p1_zoff,tempz
  1486.  tst.b TOSIDE
  1487.  beq.s .noside
  1488.  jsr RunAround
  1489. .noside:
  1490.  
  1491.  move.w #0,speed
  1492.  tst.b DoAction
  1493.  beq.s .nospeed
  1494.  moveq #0,d2
  1495.  move.b DoAction,d2
  1496.  asl.w #2,d2
  1497.  muls.w followupspeed,d2
  1498.  move.w d2,speed
  1499. .nospeed:
  1500.  move.w #160,Range
  1501.  move.w 4(a0),d0
  1502.  ext.l d0
  1503.  asl.l #7,d0
  1504.  move.l thingheight,d2
  1505.  asr.l #1,d2
  1506.  sub.l d2,d0
  1507.  move.l d0,newy
  1508.  move.l d0,oldy
  1509.  
  1510.  move.b ObjInTop(a0),StoodInTop
  1511.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  1512.  clr.b canshove
  1513.  clr.b GotThere
  1514.  jsr HeadTowardsAng
  1515.  move.w #%1000000000,wallflags
  1516.  
  1517.  move.l #%100000,CollideFlags
  1518.  jsr Collision
  1519.  tst.b hitwall
  1520.  beq.s .nothitplayer
  1521.  
  1522.  move.w oldx,newx
  1523.  move.w oldz,newz
  1524.  st GotThere
  1525.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1526.  bra .hitathing
  1527.  
  1528. .nothitplayer:
  1529.  
  1530.  move.l #%11111111110111000010,CollideFlags
  1531.  jsr Collision
  1532.  tst.b hitwall
  1533.  beq.s .canmove
  1534.  
  1535.  move.w oldx,newx
  1536.  move.w oldz,newz
  1537.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1538.  bra .hitathing
  1539.  
  1540. .canmove:
  1541.  
  1542.  clr.b wallbounce
  1543.  Jsr MoveObject
  1544.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1545.  move.b StoodInTop,ObjInTop(a0)
  1546.  
  1547.  move.w AngRet,Facing(a0)
  1548.  
  1549. .hitathing:
  1550.  
  1551.  tst.w 12-64(a0)
  1552.  blt.s .nocopyin
  1553.  move.w 12(a0),12-64(a0)
  1554.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  1555. .nocopyin:
  1556.  
  1557. ; tst.b GotThere 
  1558. ; beq.s .NoMunch
  1559. ; tst.w FourthTimer(a0)
  1560. ; ble.s .OKtomunch
  1561. ; move.w TempFrames,d0
  1562. ; sub.w d0,FourthTimer(a0)
  1563. ; bra.s .NoMunch
  1564. ;.OKtomunch:
  1565. ; move.w #40,FourthTimer(a0)
  1566. ; move.l PLR1_Obj,a5
  1567. ; add.b #2,damagetaken(a5)
  1568. .NoMunch: 
  1569.  
  1570.  bsr STOREPLAYERPOS
  1571.  
  1572.  tst.b FLYABIT
  1573.  beq.s .notfl
  1574.  
  1575.  bsr FLYTOPLAYERHEIGHT
  1576. .notfl:
  1577.  
  1578.  move.w 4(a0),-(a7)
  1579.  bsr GETROOMSTATS
  1580.  move.w (a7)+,d0
  1581.  tst.b FLYABIT
  1582.  beq.s .notflying
  1583.  move.w d0,4(a0)
  1584. .notflying:
  1585.  
  1586.  bsr GETROOMCPT
  1587.  
  1588.  bsr DOTORCH
  1589.  
  1590.  move.b #0,currentmode(a0)
  1591.  tst.b FLYABIT
  1592.  bne.s .inair
  1593.  bsr CHECKATTACKONGROUND
  1594.  tst.b d0
  1595.  beq .nosee
  1596. .inair:
  1597.  
  1598.  bsr LOOKFORPLAYER1
  1599.  tst.b 17(a0)
  1600.  beq.s .nosee
  1601.  bsr CHECKINFRONT
  1602.  tst.b d0
  1603.  beq.s .nosee
  1604.  move.b #2,currentmode(a0)
  1605.  move.w TempFrames,d0
  1606.  sub.w d0,ObjTimer(a0)
  1607.  bgt.s .nosee
  1608.  bsr CHECKFORDARK
  1609.  tst.b d0
  1610.  beq.s .nosee
  1611.  move.b #1,currentmode(a0)
  1612.  move.w #0,SecTimer(a0)
  1613.  move.b #1,WhichAnim(a0)
  1614.  move.w ANIMFACING,d0
  1615.  add.w d0,Facing(a0)
  1616.  rts
  1617. .nosee:
  1618.  move.b #0,WhichAnim(a0)
  1619.  move.w ANIMFACING,d0
  1620.  add.w d0,Facing(a0)
  1621.  rts
  1622.  
  1623. ***********************************************
  1624. ** GENERIC ROUTINES ***************************
  1625. ***********************************************
  1626.  
  1627. FLYTOCPTHEIGHT
  1628.  
  1629.  move.w MIDDLECPT,d0
  1630.  move.l CPtPos,a1
  1631.  move.w 4(a1,d0.w*8),d1
  1632.  
  1633.  bra intoflytoheight
  1634.  
  1635. FLYTOPLAYERHEIGHT:
  1636.  move.l PLR1_yoff,d1
  1637.  asr.l #7,d1
  1638.  
  1639. intoflytoheight:
  1640.  move.w 4(a0),d0
  1641.  cmp.w d0,d1
  1642.  bgt.s .flydown
  1643.  
  1644.  move.w objyvel(a0),d2
  1645.  
  1646.  sub.w #2,d2
  1647.  cmp.w #-32,d2
  1648.  bgt.s .nofastup
  1649.  move.w #-32,d2
  1650. .nofastup
  1651.  
  1652.  move.w d2,objyvel(a0)
  1653.  add.w d2,4(a0)
  1654.  
  1655.  bra CHECKFLOORCEILING
  1656.  
  1657. .flydown
  1658.  move.w objyvel(a0),d2
  1659.  
  1660.  add.w #2,d2
  1661.  cmp.w #32,d2
  1662.  blt.s .nofastdown
  1663.  move.w #32,d2
  1664. .nofastdown
  1665.  
  1666.  move.w d2,objyvel(a0)
  1667.  add.w d2,4(a0)
  1668.  
  1669. CHECKFLOORCEILING:
  1670.  
  1671.  move.w 4(a0),d2
  1672.  move.l thingheight,d4
  1673.  asr.l #8,d4
  1674.  move.w d2,d3
  1675.  sub.w d4,d2
  1676.  add.w d4,d3
  1677.  
  1678.  move.l objroom,a2
  1679.  
  1680.  move.l ToZoneFloor(a2),d0
  1681.  move.l ToZoneRoof(a2),d1
  1682.  tst.b ObjInTop(a0)
  1683.  beq.s .notintop
  1684.  move.l ToUpperFloor(a2),d0
  1685.  move.l ToUpperRoof(a2),d1
  1686. .notintop:
  1687.  
  1688.  asr.l #7,d0
  1689.  asr.l #7,d1
  1690.  
  1691.  cmp.w d0,d3
  1692.  blt.s .botnohit
  1693.  move.w d0,d3
  1694.  move.w d3,d2
  1695.  sub.w d4,d2
  1696.  sub.w d4,d2
  1697. .botnohit
  1698.  
  1699.  cmp.w d1,d2
  1700.  bgt.s .topnohit
  1701.  move.w d1,d2
  1702.  move.w d2,d3
  1703.  add.w d4,d3
  1704.  add.w d4,d3
  1705. .topnohit
  1706.  
  1707.  sub.w d4,d3
  1708.  move.w d3,4(a0)
  1709.  
  1710.  rts
  1711.  
  1712. STOREPLAYERPOS:
  1713.  move.w (a0),d0
  1714.  move.l #NASTYWORK,a2
  1715.  asl.w #4,d0
  1716.  add.w d0,a2
  1717.  move.w PLR1_xoff,lastx(a2)
  1718.  move.w PLR1_zoff,lasty(a2)
  1719.  move.l PLR1_Roompt,a3
  1720.  move.w (a3),lastzone(a2)
  1721.  
  1722.  moveq #0,d0
  1723.  move.b ToZoneCpt(a3),d0
  1724.  tst.b PLR1_StoodInTop
  1725.  beq.s .pnotintop
  1726.  move.b ToZoneCpt+1(a3),d0
  1727. .pnotintop:
  1728.  
  1729.  move.w d0,lastcpt(a2)
  1730.  
  1731.  move.b teamnumber(a0),d0
  1732.  blt.s .noteam
  1733.  move.l #TEAMWORK,a2
  1734.  asl.w #4,d0
  1735.  add.w d0,a2
  1736.  move.w PLR1_xoff,lastx(a2)
  1737.  move.w PLR1_zoff,lasty(a2)
  1738.  move.l PLR1_Roompt,a3
  1739.  move.w (a3),lastzone(a2)
  1740.  moveq #0,d0
  1741.  move.b ToZoneCpt(a3),d0
  1742.  tst.b PLR1_StoodInTop
  1743.  beq.s .pnotintop2
  1744.  move.b ToZoneCpt+1(a3),d0
  1745. .pnotintop2:
  1746.  move.w d0,lastcpt(a2)
  1747.  move.w (a0),SEENBY(a2)
  1748.  
  1749. .noteam:
  1750.  rts
  1751.  
  1752. GETROOMSTATS:
  1753.  
  1754.  move.w (a0),d0
  1755.  move.l ObjectPoints,a1
  1756.  lea (a1,d0.w*8),a1
  1757.  move.w newx,(a1)
  1758.  move.w newz,4(a1)
  1759.  
  1760. GETROOMSTATSSTILL: 
  1761.  move.l objroom,a2
  1762.  move.w (a2),12(a0)
  1763.  
  1764. ; move.w (a2),d0
  1765. ; move.l #ZoneBrightTable,a5
  1766. ; move.l (a5,d0.w*4),d0
  1767. ; tst.b ObjInTop(a0)
  1768. ; bne.s .okbit
  1769. ; swap d0
  1770. ;.okbit:
  1771. ; move.w d0,2(a0)
  1772.  
  1773.  move.l ToZoneFloor(a2),d0
  1774.  tst.b ObjInTop(a0)
  1775.  beq.s .notintop2
  1776.  move.l ToUpperFloor(a2),d0
  1777. .notintop2:
  1778.  move.l thingheight,d2
  1779.  asr.l #1,d2
  1780.  sub.l d2,d0
  1781.  asr.l #7,d0
  1782.  move.w d0,4(a0)
  1783.  
  1784.  move.w 12(a0),GraphicRoom(a0)
  1785.  
  1786.  rts
  1787.  
  1788. CHECKFORDARK:
  1789.  
  1790.  move.w (a0),d0
  1791.  move.l PLR1_Roompt,a3
  1792.  move.w (a3),d1
  1793.  cmp.w d1,d0
  1794.  beq.s NOTINDARK
  1795.  
  1796.  jsr GetRand
  1797.  and.w #31,d0
  1798.  cmp.w PLR1_RoomBright,d0
  1799.  bge.s NOTINDARK
  1800.  
  1801. INDARK:
  1802.  moveq #0,d0
  1803.  rts
  1804.  
  1805. NOTINDARK:
  1806.  moveq #-1,d0
  1807.  rts
  1808.  
  1809. CHECKINFRONT:
  1810.  
  1811. ; clr.b 17(a0)
  1812. ; rts
  1813.  
  1814.  move.w (a0),d0
  1815.  move.l ObjectPoints,a1
  1816.  move.w (a1,d0.w*8),newx
  1817.  move.w 4(a1,d0.w*8),newz
  1818.  
  1819.  move.w p1_xoff,d0
  1820.  sub.w newx,d0
  1821.  move.w p1_zoff,d1
  1822.  sub.w newz,d1
  1823.  
  1824.  move.w Facing(a0),d2
  1825.  and.w #8190,d2
  1826.  move.l #SineTable,a3
  1827.  move.w (a3,d2.w),d3
  1828.  add.l #2048,d2
  1829.  move.w (a3,d2.w),d4
  1830.  
  1831.  muls d3,d0
  1832.  muls d4,d1
  1833.  add.l d0,d1
  1834.  sgt.s d0
  1835.  rts
  1836.  
  1837. ANIMFACING: dc.w 0
  1838.  
  1839. LOOKFORPLAYER1:
  1840.  
  1841.  clr.b 17(a0)
  1842.  clr.b CanSee
  1843.  move.b ObjInTop(a0),ViewerTop
  1844.  move.b PLR1_StoodInTop,TargetTop
  1845.  move.l PLR1_Roompt,ToRoom
  1846.  move.l objroom,FromRoom
  1847.  move.w newx,Viewerx
  1848.  move.w newz,Viewerz
  1849.  move.w PLR1_xoff,Targetx
  1850.  move.w PLR1_zoff,Targetz
  1851.  move.l PLR1_yoff,d0
  1852.  asr.l #7,d0
  1853.  move.w d0,Targety
  1854.  move.w 4(a0),Viewery
  1855.  jsr CanItBeSeen
  1856.  
  1857.  
  1858.  tst.b CanSee
  1859.  beq .carryonprowling
  1860.  
  1861.  move.b #1,17(a0)
  1862. .carryonprowling:
  1863.  rts
  1864.  
  1865. CLRNASTYMEM:
  1866.  move.l #NASTYWORK,a0
  1867.  move.l #299,d0
  1868. .lopp
  1869.  move.l #0,(a0)
  1870.  move.l #-1,4(a0)
  1871.  move.l #-1,8(a0)
  1872.  add.w #16,a0
  1873.  dbra d0,.lopp
  1874.  
  1875.  move.l #TEAMWORK,a0
  1876.  move.l #29,d0
  1877. .lopp2
  1878.  move.l #0,(a0)
  1879.  move.l #-1,4(a0)
  1880.  move.l #-1,8(a0)
  1881.  add.w #16,a0
  1882.  dbra d0,.lopp2
  1883.  
  1884.  rts
  1885.  
  1886. CHECKDAMAGE:
  1887.  
  1888.  moveq #0,d2
  1889.  move.b damagetaken(a0),d2
  1890.  beq .noscream
  1891.  
  1892.  sub.b d2,numlives(a0)
  1893.  bgt .notdeadyet
  1894.  
  1895.  moveq #0,d0
  1896.  move.b teamnumber(a0),d0
  1897.  blt.s .noteam
  1898.  
  1899.  lea TEAMWORK(pc),a2
  1900.  asl.w #4,d0
  1901.  add.w d0,a2
  1902.  move.w (a0),d0
  1903.  cmp.w SEENBY(a2),d0
  1904.  bne.s .noteam
  1905.  move.w #-1,SEENBY(a2)
  1906. .noteam
  1907.  
  1908.  cmp.b #1,d2
  1909.  ble .noexplode
  1910.  
  1911.  movem.l d0-d7/a0-a6,-(a7)
  1912.  sub.l ObjectPoints,a1
  1913.  add.l #ObjRotated,a1
  1914.  move.l (a1),Noisex
  1915.  move.w #400,Noisevol
  1916.  move.w #14,Samplenum
  1917.  move.b #1,chanpick
  1918.  clr.b notifplaying
  1919.  st backbeat
  1920.  move.w (a0),IDNUM
  1921.  move.b ALIENECHO,Echo
  1922.  jsr MakeSomeNoise
  1923.  movem.l (a7)+,d0-d7/a0-a6
  1924.  
  1925.  movem.l d0-d7/a0-a6,-(a7)
  1926.  move.w #0,d0
  1927.  asr.w #2,d2
  1928.  tst.w d2
  1929.  bgt.s .ko
  1930.  moveq #1,d2
  1931. .ko:
  1932.  move.w #31,d3
  1933.  jsr ExplodeIntoBits
  1934.  movem.l (a7)+,d0-d7/a0-a6
  1935.  
  1936.  cmp.b #40,d2
  1937.  blt .noexplode
  1938.  
  1939.  move.w #-1,12(a0)
  1940.  move.w 12(a0),GraphicRoom(a0)
  1941.  rts
  1942.  
  1943. .noexplode:
  1944.  
  1945.  movem.l d0-d7/a0-a6,-(a7)
  1946.  sub.l ObjectPoints,a1
  1947.  add.l #ObjRotated,a1
  1948.  move.l (a1),Noisex
  1949.  move.w #200,Noisevol
  1950.  move.w screamsound,Samplenum
  1951.  move.b #1,chanpick
  1952.  clr.b notifplaying
  1953.  st backbeat
  1954.  move.w (a0),IDNUM
  1955.  move.b ALIENECHO,Echo
  1956.  jsr MakeSomeNoise
  1957.  movem.l (a7)+,d0-d7/a0-a6
  1958.  
  1959.  move.w #25,ThirdTimer(a0)
  1960.  move.w 12(a0),GraphicRoom(a0)
  1961.  rts
  1962.  
  1963. .notdeadyet:
  1964.  clr.b damagetaken(a0)
  1965.  movem.l d0-d7/a0-a6,-(a7)
  1966.  sub.l ObjectPoints,a1
  1967.  add.l #ObjRotated,a1
  1968.  move.l (a1),Noisex
  1969.  move.w #200,Noisevol
  1970.  move.w screamsound,Samplenum
  1971.  move.b #1,chanpick
  1972.  clr.b notifplaying
  1973.  move.w (a0),IDNUM
  1974.  st backbeat
  1975.  move.b ALIENECHO,Echo
  1976.  jsr MakeSomeNoise
  1977.  movem.l (a7)+,d0-d7/a0-a6
  1978.  
  1979.  
  1980. .noscream
  1981.  
  1982.  rts
  1983.  
  1984.  
  1985. SPLIBBLE:
  1986.  
  1987.  move.l ANIMPOINTER,a6
  1988.  
  1989.  jsr ViewpointToDraw
  1990.  add.l d0,d0
  1991.  
  1992.  cmp.b #1,VECOBJ
  1993.  bne.s .NOSIDES
  1994.  moveq #0,d0
  1995.  
  1996. .NOSIDES:
  1997.  
  1998.  muls #A_OptLen,d0
  1999.  add.w d0,a6
  2000.  
  2001.  move.w SecTimer(a0),d1
  2002.  add.w #1,d1
  2003.  move.w d1,d2
  2004.  muls #A_FrameLen,d1
  2005.  tst.b (a6,d1.w)
  2006.  bge.s .noendanim
  2007.  moveq #0,d2
  2008.  moveq #0,d1
  2009. .noendanim
  2010.  move.w d2,SecTimer(a0)
  2011.  
  2012.  move.l #0,8(a0)
  2013.  move.b (a6,d1.w),9(a0)
  2014.  move.b 1(a6,d1.w),11(a0)
  2015.  
  2016.  move.w #-1,6(a0)
  2017.  cmp.b #1,VECOBJ
  2018.  beq.s .nosize
  2019.  move.w 2(a6,d1.w),6(a0)
  2020. .nosize
  2021.  
  2022.  moveq #0,d0
  2023.  move.b 5(a6,d1.w),d0
  2024.  beq.s .nosoundmake
  2025.  
  2026.  movem.l d0-d7/a0-a6,-(a7)
  2027.  subq #1,d0
  2028.  move.w d0,Samplenum
  2029.  clr.b notifplaying
  2030.  move.w (a0),IDNUM
  2031.  move.w #200,Noisevol
  2032.  move.l #ObjRotated,a1
  2033.  move.w (a0),d0
  2034.  lea (a1,d0.w*8),a1
  2035.  move.l (a1),Noisex
  2036.  move.b ALIENECHO,Echo
  2037.  jsr MakeSomeNoise
  2038.  movem.l (a7)+,d0-d7/a0-a6
  2039. .nosoundmake
  2040.  
  2041.  move.b 6(a6,d1.w),d0
  2042.  sne DoAction
  2043.  
  2044.  rts
  2045.  
  2046.  
  2047. DOTORCH:
  2048.  move.w ALIENBRIGHT,d0
  2049.  bge.s .nobright
  2050.  
  2051.  move.w newx,d1
  2052.  move.w newz,d2
  2053.  move.w 4(a0),d3
  2054.  ext.l d3
  2055.  asl.l #7,d3
  2056.  move.l d3,BRIGHTY
  2057.  move.w Facing(a0),d4
  2058.  
  2059.  move.w 12(a0),d3
  2060.  
  2061.  jsr BRIGHTENPOINTSANGLE
  2062.   
  2063. .nobright:
  2064.  rts
  2065.  
  2066. FOIBLE:
  2067. WALKANIM:
  2068. ATTACKANIM:
  2069.  
  2070.  move.l d0,-(a7)
  2071.  
  2072.  move.l ANIMPOINTER,a6
  2073.  
  2074.  move.l WORKPTR,a5
  2075.  
  2076.  moveq #0,d1
  2077.  move.b 2(a5),d1
  2078.  bne.s .notview
  2079.  
  2080.  moveq #0,d1
  2081.  
  2082.  cmp.b #1,VECOBJ
  2083.  beq.s .notview
  2084.  
  2085.  jsr ViewpointToDraw
  2086.  add.w d0,d0
  2087.  move.w d0,d1
  2088.  
  2089. .notview
  2090.  
  2091.  muls #A_OptLen,d1
  2092.  add.l d1,a6
  2093.  
  2094.  move.w SecTimer(a0),d1
  2095.  tst.b 1(a5)
  2096.  blt.s .nospec
  2097.  
  2098.  move.b 1(a5),d1
  2099.  
  2100. .nospec:
  2101.  
  2102.  muls #A_FrameLen,d1
  2103.  
  2104.  st 1(a5)
  2105.  move.b (a5),DoAction
  2106.  clr.b (a5)
  2107.  move.b 3(a5),FINISHEDANIM
  2108.  clr.b 3(a5)
  2109.  
  2110.  move.l #0,8(a0)
  2111.  move.b (a6,d1.w),9(a0)
  2112.  move.b 1(a6,d1.w),d0
  2113.  ext.w d0
  2114.  bgt.s .noflip
  2115.  move.b #128,10(a0)
  2116.  neg.w d0
  2117. .noflip:
  2118.  sub.w #1,d0
  2119.  move.b d0,11(a0)
  2120.  
  2121.  
  2122.  move.w #0,ANIMFACING
  2123.  cmp.b #1,VECOBJ
  2124.  bne.s .noanimface
  2125.  move.w 2(a6,d1.w),ANIMFACING
  2126. .noanimface:
  2127.  
  2128. ******************************************
  2129.  move.w #-1,GraphicRoom-64(a0)
  2130.  move.w #-1,12-64(a0)
  2131.  
  2132.  move.w AUXOBJ,d3
  2133.  blt .noaux
  2134.  
  2135.  move.b 8(a6,d1.w),d0
  2136.  blt .noaux
  2137.  
  2138.  move.w 12(a0),12-64(a0)
  2139.  move.w 12(a0),GraphicRoom-64(a0)
  2140.  move.w 4(a0),4-64(a0)
  2141.  move.b ObjInTop(a0),ObjInTop-64(a0)
  2142.  
  2143.  move.b 9(a6,d1.w),d4
  2144.  move.b 10(a6,d1.w),d5
  2145.  
  2146.  ext.w d4
  2147.  ext.w d5
  2148.  add.w d4,d4
  2149.  add.w d5,d5
  2150.  
  2151.  move.w d4,auxxoff-64(a0)
  2152.  move.w d5,auxyoff-64(a0)
  2153.  
  2154.  move.l LINKFILE,a4
  2155.  move.l a4,a2
  2156.  add.l #ObjectDefAnims,a4
  2157.  add.l #ObjectStats,a2
  2158.  
  2159.  move.w d3,d4
  2160.  muls #O_AnimSize,d3
  2161.  muls #ObjectStatLen,d4
  2162.  add.l d4,a2
  2163.  add.l d3,a4
  2164.  
  2165.  muls #O_FrameStoreSize,d0
  2166.  
  2167.  cmp.w #1,O_GFXType(a2)
  2168.  blt.s .bitmap
  2169.  beq.s .vector
  2170.  
  2171. .glare:
  2172.  move.l #0,8-64(a0)
  2173.  move.b (a4,d0.w),d3
  2174.  ext.w d3
  2175.  neg.w d3
  2176.  move.w d3,8-64(a0)
  2177.  move.b 1(a4,d0.w),11-64(a0)
  2178.  move.w 2(a4,d0.w),6-64(a0)
  2179.  
  2180. ; move.b 4(a3,d0.w),d1 
  2181. ; ext.w d1
  2182. ; add.w d1,d1
  2183. ; add.w d1,4(a0)
  2184.  
  2185. ; moveq #0,d1
  2186. ; move.b 5(a3,d0.w),d1
  2187. ; move.w d1,ObjTimer(a0)
  2188.  
  2189.  bra .noaux
  2190.  
  2191. .vector:
  2192.  move.l #0,8-64(a0)
  2193.  move.b (a4,d0.w),9-64(a0)
  2194.  move.b 1(a4,d0.w),11-64(a0)
  2195.  move.w #$ffff,6-64(a0)
  2196. ; move.b 4(a3,d0.w),d1 
  2197. ; ext.w d1
  2198. ; add.w d1,d1
  2199. ; add.w d1,4(a0)
  2200.  
  2201. ; moveq #0,d1
  2202. ; move.b 5(a3,d0.w),d1
  2203. ; move.w d1,ObjTimer(a0)
  2204.  
  2205.  bra .noaux
  2206.  
  2207. .bitmap:
  2208.  
  2209.  move.l #0,8-64(a0)
  2210.  move.b (a4,d0.w),9-64(a0)
  2211.  move.b 1(a4,d0.w),11-64(a0)
  2212.  move.w 2(a4,d0.w),6-64(a0)
  2213. ; move.b 4(a4,d0.w),d1 
  2214. ; ext.w d1
  2215. ; add.w d1,d1
  2216. ; add.w d1,4(a0)
  2217.  
  2218. ; moveq #0,d1
  2219. ; move.b 5(a3,d0.w),d1
  2220. ; move.w d1,ObjTimer(a0)
  2221.  
  2222. .noaux:
  2223.  
  2224. ******************************************
  2225.  
  2226.  
  2227.  move.w #-1,6(a0)
  2228.  cmp.b #1,VECOBJ
  2229.  beq.s .nosize
  2230.  bgt.s .setlight
  2231.  move.w 2(a6,d1.w),6(a0)
  2232.  move.l (a7)+,d0
  2233.  rts
  2234.  
  2235. .nosize
  2236.  
  2237. ; move.l #$00090001,8(a0)
  2238.  
  2239.  move.l (a7)+,d0
  2240.  rts
  2241.  
  2242. .setlight:
  2243.  move.w 2(a6,d1.w),6(a0)
  2244.  
  2245.  move.b VECOBJ,d1
  2246.  or.b d1,10(a0)
  2247.  
  2248.  move.l (a7)+,d0
  2249.  rts
  2250.  
  2251. BLIBBLE:
  2252.  
  2253.  move.l ANIMPOINTER,a6
  2254.  
  2255.  move.w #8,d0
  2256.  
  2257.  muls #A_OptLen,d0
  2258.  add.w d0,a6
  2259.  
  2260.  move.w SecTimer(a0),d1
  2261.  move.w d1,d2
  2262.  add.w #1,d2
  2263.  muls #A_FrameLen,d1
  2264.  tst.b A_FrameLen(a6,d1.w)
  2265.  slt FINISHEDANIM
  2266.  bge.s .noendanim
  2267.  moveq #0,d2
  2268. .noendanim
  2269.  move.w d2,SecTimer(a0)
  2270.  
  2271.  move.l #0,8(a0)
  2272.  move.b (a6,d1.w),9(a0)
  2273.  move.b 1(a6,d1.w),11(a0)
  2274.  
  2275.  move.w #-1,6(a0)
  2276.  cmp.b #1,VECOBJ
  2277.  beq.s .nosize
  2278.  move.w 2(a6,d1.w),6(a0)
  2279. .nosize
  2280.  
  2281.  moveq #0,d0
  2282.  move.b 5(a6,d1.w),d0
  2283.  beq.s .nosoundmake
  2284.  
  2285.  movem.l d0-d7/a0-a6,-(a7)
  2286.  subq #1,d0
  2287.  move.w d0,Samplenum
  2288.  clr.b notifplaying
  2289.  move.w (a0),IDNUM
  2290.  move.w #200,Noisevol
  2291.  move.l #ObjRotated,a1
  2292.  move.w (a0),d0
  2293.  lea (a1,d0.w*8),a1
  2294.  move.l (a1),Noisex
  2295.  move.b ALIENECHO,Echo
  2296.  jsr MakeSomeNoise
  2297.  movem.l (a7)+,d0-d7/a0-a6
  2298. .nosoundmake
  2299.  
  2300.  move.b 6(a6,d1.w),d0
  2301.  sne DoAction
  2302.  
  2303.  rts
  2304.  
  2305. CHECKATTACKONGROUND:
  2306.  
  2307.  move.l PLR1_Roompt,a3
  2308.  moveq #0,d1
  2309.  move.b ToZoneCpt(a3),d1
  2310.  tst.b PLR1_StoodInTop
  2311.  beq.s .pnotintop
  2312.  move.b ToZoneCpt+1(a3),d1
  2313. .pnotintop:
  2314.  
  2315.  move.w d1,d3
  2316.  
  2317.  move.w CurrCPt(a0),d0
  2318.  
  2319.  cmp.w d0,d1
  2320.  beq.s .yesattack
  2321.  
  2322.  jsr GetNextCPt
  2323.  
  2324.  cmp.w d0,d3
  2325.  beq.s .yesattack
  2326.  
  2327. .noattack:
  2328.  
  2329.  clr.b d0
  2330.  rts
  2331.  
  2332. .yesattack:
  2333.  
  2334.  st d0
  2335.  
  2336.  rts
  2337.  
  2338. GETROOMCPT: 
  2339.  move.l objroom,a2
  2340.  moveq #0,d0
  2341.  move.b ToZoneCpt(a2),d0
  2342.  tst.b ObjInTop(a0)
  2343.  beq.s .pnotintop
  2344.  move.b ToZoneCpt+1(a2),d0
  2345. .pnotintop:
  2346.  
  2347.  move.w d0,CurrCPt(a0)
  2348.  rts
  2349.  
  2350.  
  2351. CALCSQROOT:
  2352.  tst.l d2
  2353.  beq .oksqr
  2354.  
  2355.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  2356.  
  2357.  move.w #31,d0
  2358. .findhigh
  2359.  btst d0,d2
  2360.  bne .foundhigh
  2361.  dbra d0,.findhigh
  2362. .foundhigh
  2363.  asr.w #1,d0
  2364.  clr.l d3
  2365.  bset d0,d3
  2366.  move.l d3,d0
  2367.  
  2368.  move.w d0,d1
  2369.  muls d1,d1    ; x*x
  2370.  sub.l d2,d1    ; x*x-a
  2371.  asr.l #1,d1    ; (x*x-a)/2
  2372.  divs d0,d1    ; (x*x-a)/2x
  2373.  sub.w d1,d0    ; second approx
  2374.  bgt .stillnot0
  2375.  move.w #1,d0
  2376. .stillnot0
  2377.  
  2378.  move.w d0,d1
  2379.  muls d1,d1
  2380.  sub.l d2,d1
  2381.  asr.l #1,d1
  2382.  divs d0,d1
  2383.  sub.w d1,d0    ; second approx
  2384.  bgt .stillnot02
  2385.  move.w #1,d0
  2386. .stillnot02
  2387.  
  2388.  move.w d0,d1
  2389.  muls d1,d1
  2390.  sub.l d2,d1
  2391.  asr.l #1,d1
  2392.  divs d0,d1
  2393.  sub.w d1,d0    ; second approx
  2394.  bgt .stillnot03
  2395.  move.w #1,d0
  2396. .stillnot03
  2397.  
  2398.  move.w d0,d2
  2399.  ext.l d2
  2400.  
  2401.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  2402.  
  2403. .oksqr
  2404.  rts
  2405.  
  2406.  
  2407.  
  2408. DoAction: dc.b 0
  2409. FINISHEDANIM: dc.b 0
  2410. NASTYWORK: ds.l 4*300
  2411. TEAMWORK: ds.l 4*30
  2412. DAMAGED: ds.w 300
  2413. DAMAGEPTR: dc.l 0
  2414.  
  2415. BOREDOMPTR: dc.l 0
  2416. BOREDOMSPACE: ds.l 2*300
  2417.