gotgun: dc.w 0 ItsABigNasty move.l #40*256,StepUpVal move.l #40*256,thingheight st gotgun tst.w 12(a0) bge.s .stillalive .notthisone: rts .stillalive: tst.b numlives(a0) bgt.s .notdying move.b #0,numlives(a0) ; move.w 8(a0),d0 ; cmp.w #256*16,d0 ; bge .onfloordead ; add.w #256,8(a0) ; bra .notthisone ; .onfloordead: move.b #-1,16(a0) rts .notdying: move.l #21*256*65536,deadframe move.l #21*256*65536,8(a0) move.w #8,screamsound move.w #70,nasheight bra WanderOrAttack ************************************** ItsANasty: move.l #40*256,StepUpVal move.l #40*256,thingheight clr.b gotgun tst.w 12(a0) bge.s .stillalive .notthisone: rts .stillalive: tst.b numlives(a0) bgt.s .notdying move.b #0,numlives(a0) move.w 8(a0),d0 cmp.w #256*16,d0 bge .onfloordead add.w #256,8(a0) bra .notthisone .onfloordead: move.b #-1,16(a0) rts .notdying: move.l alframe,8(a0) move.l #12*256*65536,deadframe move.w #0,screamsound move.w #50,nasheight bra WanderOrAttack WanderOrAttack ; Don't use control points, just ; wander at random move.w 12(a0),d2 blt .thisonedead tst.b 17(a0) beq.s .cantseeplayer tst.w ObjTimer(a0) bgt.s .cantseeplayer jsr GetRand and.w #255,d0 cmp.w #250,d0 bgt.s .cantseeplayer bra Solo_Attack .cantseeplayer move.l #ZoneAdds,a5 move.l (a5,d2.w*4),objroom move.w TempFrames,d0 sub.w d0,ObjTimer(a0) bgt.s .nonewdir tst.b 17(a0) beq.s .keepwandering bra Solo_Attack .keepwandering jsr GetRand and.w #8190,d0 move.w d0,Facing(a0) jsr GetRand and.w #15,d0 add.w #20,d0 move.w d0,ObjTimer(a0) .nonewdir move.w (a0),d1 move.l #ObjectPoints,a1 lea (a1,d1.w*8),a1 move.w (a1),oldx move.w 4(a1),oldz move.w maxspd(a0),d2 muls TempFrames,d2 move.w d2,speed move.w #20,Range move.w 4(a0),d0 ext.l d0 asl.l #7,d0 move.l d0,newy movem.l d0/a0/a1/a3/a4/d7,-(a7) clr.b canshove move.w Facing(a0),d0 jsr GoInDirection move.w #%1000000000,wallflags Jsr MoveObject movem.l (a7)+,d0/a0/a1/a3/a4/d7 tst.b hitwall beq.s .nochangedir move.w #-1,ObjTimer(a0) .nochangedir: move.l objroom,a2 move.w (a2),12(a0) move.w newx,(a1) move.w newz,4(a1) move.w 10(a2),2(a0) move.l 2(a2),d0 asr.l #7,d0 sub.w nasheight,d0 move.w d0,4(a0) move.b damagetaken(a0),d2 beq .noscream sub.b d2,numlives(a0) bgt.s .notdeadyet movem.l d0-d7/a0-a6,-(a7) sub.l #ObjectPoints,a1 add.l #ObjRotated,a1 move.l (a1),Noisex move.w #200,Noisevol move.w screamsound,Samplenum move.b #1,chanpick clr.b notifplaying st backbeat jsr MakeSomeNoise movem.l (a7)+,d0-d7/a0-a6 move.l deadframe,8(a0) rts .notdeadyet: clr.b damagetaken(a0) movem.l d0-d7/a0-a6,-(a7) sub.l #ObjectPoints,a1 add.l #ObjRotated,a1 move.l (a1),Noisex move.w #200,Noisevol move.w screamsound,Samplenum move.b #1,chanpick clr.b notifplaying st backbeat jsr MakeSomeNoise movem.l (a7)+,d0-d7/a0-a6 .noscream move.l PLR1_Roompt,ToRoom move.l objroom,FromRoom move.w newx,oldx move.w newz,oldz move.w PLR1_xoff,newx move.w PLR1_zoff,newz jsr CanItBeSeen tst.b CanSee beq .carryonprowling move.b #1,17(a0) .carryonprowling: .thisonedead: rts Solo_Attack: move.l #ZoneAdds,a5 move.l (a5,d2.w*4),objroom move.w PLR1_xoff,newx move.w PLR1_zoff,newz move.w (a0),d1 move.l #ObjRotated,a6 move.l #ObjectPoints,a1 lea (a1,d1.w*8),a1 lea (a6,d1.w*8),a6 move.w (a1),oldx move.w 4(a1),oldz move.w maxspd(a0),d2 muls.w TempFrames,d2 move.w d2,speed move.w #50,Range move.w 4(a0),d0 ext.l d0 asl.l #7,d0 move.l d0,newy movem.l d0/a0/a1/a3/a4/d7,-(a7) clr.b canshove clr.b GotThere jsr HeadTowards move.w #%1000000000,wallflags Jsr MoveObject movem.l (a7)+,d0/a0/a1/a3/a4/d7 move.l objroom,a2 move.w (a2),12(a0) move.w 12(a2),CurrCPt(a0) move.w newx,(a1) move.w newz,4(a1) move.w 10(a2),2(a0) move.l 2(a2),d0 asr.l #7,d0 sub.w nasheight,d0 move.w d0,4(a0) move.b damagetaken(a0),d2 beq .noscream sub.b d2,numlives(a0) bgt.s .notdeadyet movem.l d0-d7/a0-a6,-(a7) move.l (a6),Noisex move.w #200,Noisevol move.w screamsound,Samplenum move.b #1,chanpick clr.b notifplaying st backbeat jsr MakeSomeNoise movem.l (a7)+,d0-d7/a0-a6 move.l deadframe,8(a0) rts .notdeadyet: clr.b damagetaken(a0) movem.l d0-d7/a0-a6,-(a7) move.l (a6),Noisex move.w #200,Noisevol move.w screamsound,Samplenum move.b #1,chanpick clr.b notifplaying st backbeat jsr MakeSomeNoise movem.l (a7)+,d0-d7/a0-a6 bra .cantshoot .noscream: tst.b gotgun beq .cantshoot tst.w SecTimer(a0) blt.s .canshoot move.w TempFrames,d0 sub.w d0,SecTimer(a0) bra .cantshoot .canshoot: move.l #PlayerShotData,a5 move.w #19,d1 .findonefree move.w 12(a5),d0 blt.s .foundonefree adda.w #64,a5 dbra d1,.findonefree bra .cantshoot .foundonefree: move.l (a6),Noisex move.w #200,Noisevol move.w #9,Samplenum move.b #1,chanpick clr.b notifplaying st shotsize(a5) move.b #10,shotpower(a5) movem.l a5/a1/a0,-(a7) jsr MakeSomeNoise movem.l (a7)+,a5/a1/a0 move.l #ObjectPoints,a2 move.w (a5),d1 lea (a2,d1.w*8),a2 move.w (a1),oldx move.w 4(a1),oldz move.w PLR1_xoff,newx move.w PLR1_zoff,newz move.w #16,speed move.w #0,Range movem.l a5/a0,-(a7) jsr HeadTowards movem.l (a7)+,a5/a0 move.w newx,d0 move.w d0,(a2) sub.w oldx,d0 move.w d0,shotxvel(a5) move.w newz,d0 move.w d0,4(a2) sub.w oldz,d0 move.w d0,shotzvel(a5) move.l #%00100000,EnemyFlags(a5) move.w 12(a0),12(a5) move.w 4(a0),d0 add.w #6,d0 move.w d0,4(a5) ext.l d0 asl.l #7,d0 move.l d0,accypos(a5) move.l PLR1_yoff,d1 sub.l d0,d1 move.w distaway,d0 asr.w #4,d0 bgt.s .okokokok moveq #1,d0 .okokokok divs d0,d1 move.w d1,shotyvel(a5) jsr GetRand and.w #7,d0 add.w #50,d0 move.w d0,SecTimer(a0) .cantshoot: tst.b GotThere beq.s .noteatyou move.w #1,chanpick move.w (a6),Noisex move.w 2(a6),Noisez move.w #50,Noisevol move.w #2,Samplenum st notifplaying move.l a0,-(a7) jsr MakeSomeNoise move.l (a7)+,a0 move.l #Cheese,FacesPtr move.w #3,Cheese move.w #-1,FacesCounter move.w TempFrames,d0 sub.w d0,Energy bra .carryonattack .noteatyou: move.l PLR1_Roompt,ToRoom move.l objroom,FromRoom move.w newx,oldx move.w newz,oldz move.w PLR1_xoff,newx move.w PLR1_zoff,newz jsr CanItBeSeen tst.b CanSee bne .carryonattack move.b #0,17(a0) .carryonattack: .thisonedead rts deadframe: dc.l 0 screamsound: dc.w 0 nasheight: dc.w 0 Prowl_a: ; Head towards a control point, and ; once there, pick another one at ; random and go all the way there ; instead. move.w 12(a0),d2 blt .thisonedead move.l #ZoneAdds,a5 move.l (a5,d2.w*4),objroom move.w CurrCPt(a0),d0 move.w TargCPt(a0),d1 jsr GetNextCPt ; d0 contains nearest CPt to go for. move.l #CPtPos,a5 move.w (a5,d0.w*4),newx move.w 2(a5,d0.w*4),newz move.l alframe,8(a0) move.w (a0),d1 move.l #ObjectPoints,a1 lea (a1,d1.w*8),a1 move.w (a1),oldx move.w 4(a1),oldz move.w maxspd(a0),d2 muls TempFrames,d2 move.w d2,speed move.w #20,Range movem.l d0/a0/a1/a3/a4/d7,-(a7) clr.b canshove jsr HeadTowards move.w #%1000000000,wallflags Jsr MoveObject movem.l (a7)+,d0/a0/a1/a3/a4/d7 move.l objroom,a2 move.w (a2),12(a0) move.w newx,(a1) move.w newz,4(a1) tst.b GotThere beq.s .notatnextptyet move.w d0,CurrCPt(a0) cmp.w TargCPt(a0),d0 bne.s .notatnextptyet move.w nextCPt,d0 move.w d0,TargCPt(a0) add.w #1,d0 cmp.w NumCPts,d0 blt.s .stillsomemore move.w #0,d0 .stillsomemore: move.w d0,nextCPt .notatnextptyet: move.w 10(a2),2(a0) move.l 2(a2),d0 sub.l #6400,d0 asr.l #7,d0 move.w d0,4(a0) move.l PLR1_Roompt,ToRoom move.l objroom,FromRoom move.w newx,oldx move.w newz,oldz move.w PLR1_xoff,newx move.w PLR1_zoff,newz jsr CanItBeSeen tst.b CanSee beq .carryonprowling move.b #1,17(a0) .carryonprowling: .thisonedead: rts