
realtab:
 dc.l prot1-78935450
 dc.l prot2-78935450
 dc.l prot3-78935450
 dc.l prot4-78935450
 dc.l prot5-78935450
 dc.l prot6-78935450
 dc.l prot7-78935450
 dc.l prot8-78935450
 dc.l prot9-78935450
 dc.l protA-78935450

objvels: ds.l 8
Conditions: dc.w 0

Robotanimpos:
 dc.w 0
Robotarmpos
 dc.w 0
clump: dc.w 0

SLAVERobotWalk:
 move.l #RobotPts+2,a0
 move.l #Robotanim,a1
 move.w Robotanimpos(pc),d0

 clr.b clump
 adda.w d0,a1
 
 move.w #(38*3)-1,d0
putinpts:
 move.w (a1)+,(a0)+
 dbra d0,putinpts


 move.l #RightArm,a0
 move.l #Armanim,a1
 move.w Robotarmpos(pc),d0
 adda.w d0,a1
 move.w #(14*3)-1,d0
putinpts2:
 move.w (a1)+,(a0)+
 dbra d0,putinpts2
 
 move.l #Robot_MainBody,a0
 move.l #BodyPlace+2,a1
 move.w (a0)+,d0
 move.w RobotPts+4+14*6,d1
 add.w RobotPts+4+22*6,d1
 asr.w #1,d1
 
putinheights:
 move.w (a0)+,d2
 add.w d1,d2
 move.w d2,(a1)
 addq #6,a1
 dbra d0,putinheights
 
 move.w visxpos,d0
 add.w visxdir,d0
 cmp.w #24,d0
 blt.s okvisr
 move.w #-4,visxdir
okvisr
 cmp.w #-24,d0
 bgt.s okvisl
 move.w #4,visxdir
okvisl:
 move.w d0,visxpos
 
 move.l #VISOR,a0
 add.w #64,d0
 move.b d0,6(a0)
 move.b d0,18(a0)
 move.b d0,22(a0)
 add.b #63,d0
 move.b d0,10(a0)
 move.b d0,14(a0)
 
 rts

visxpos: dc.w 0
visxdir: dc.w 4

FramesToDraw: dc.w 0
TempFrames: dc.w 0

SLAVEANIM:

 move.l PLR1_Roompt,a0
 move.w (a0),PLR1_Zone
 move.l PLR2_Roompt,a0
 move.w (a0),PLR2_Zone

 bsr SLAVESwitchRoutine
 bsr SLAVEDoorRoutine
 bsr SLAVELiftRoutine
; bsr ObjectHandler
 bsr SLAVERobotWalk
 
 rts
 
******************************

tstdir: dc.w 0

liftheighttab: ds.w 20
doorheighttab: ds.w 20
stoodonlift: dc.b 0
liftattop: dc.b 0
liftatbot: dc.b 0
ZoneBrightTable:
 ds.l 300

 even
SLAVELiftRoutine:

 move.l LiftData,a0
 move.l #liftheighttab,a6
 
doalift:
 
 move.w (a0)+,d0	; bottom of lift movement
 cmp.w #999,d0
 bne notallliftsdone
 move.w #999,(a6)
 rts
notallliftsdone:
 move.w (a0)+,d1	; top of lift movement.
 
 move.w (a0),d3
 move.w d3,(a6)+
 move.w 2(a0),d2
 move.w d2,d7
 muls TempFrames,d2
 add.w d2,d3
 move.w 2(a0),d2
 cmp.w d3,d0
 sle.s liftatbot
 bgt.s .nolower
 moveq #0,d2
 move.w d0,d3
.nolower:

 cmp.w d3,d1
 sge.s liftattop
 blt.s .noraise
 moveq #0,d2
 move.w d1,d3
.noraise:

 sub.w d3,d0
 cmp.w #15*16,d0
 slt d6

 move.w d3,(a0)+
 move.l a0,a5
 move.w d2,(a0)+
 move.w d2,d7
 
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 asr.w #2,d3
 move.w d3,d0
 asl.w #2,d0
 move.w d0,2(a1)
 move.w d3,d0
 muls #256,d3
 move.w (a0)+,d5
 move.l ZoneAdds,a1
 move.l (a1,d5.w*4),a1
 add.l #LEVELDATA,a1
 move.w (a1),d5
 move.l PLR1_Roompt,a3
 move.l d3,2(a1)
 and.w #63,d0
 neg.w d0
 add.w #64,d0
 
 cmp.w (a3),d5
 sne.s stoodonlift
 
 move.w (a0)+,d2	; conditions
 and.w Conditions,d2
 cmp.w -2(a0),d2
 beq.s .satisfied 
 
 move.w (a0)+,d5
 
.dothesimplething:
 move.l FloorLines,a3
.simplecheck:
 move.w (a0)+,d5
 blt nomoreliftwalls
 asl.w #4,d5
 lea (a3,d5.w),a4
 move.w #0,14(a4)
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 move.l (a0)+,a2
 adda.w d0,a2
 move.l a2,10(a1)
 move.l d3,20(a1)
 bra.s .simplecheck
 bra nomoreliftwalls 
 
.satisfied:

 move.l FloorLines,a3
 moveq #0,d4
 moveq #0,d5
 move.b (a0)+,d4
 move.b (a0)+,d5
 tst.b liftattop
 bne tstliftlower
 tst.b liftatbot
 bne tstliftraise
 
backfromlift

liftwalls:
 move.w (a0)+,d5
 blt nomoreliftwalls

 asl.w #4,d5
 lea (a3,d5.w),a4
 move.w 14(a4),d4
 move.w #0,14(a4)
 and.w d1,d4
 cmp.w d1,d4
 bne.s .nothinghit
 move.w d7,(a5)
 move.w #0,Noisex
 move.w #0,Noisez
 move.w #50,Noisevol
 move.w #5,Samplenum
 move.b #1,chanpick
 st notifplaying
 move.b #$fe,IDNUM
 movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
 jsr MakeSomeNoise
 movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
.nothinghit:
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 move.l (a0)+,a2
 adda.w d0,a2
 move.l a2,10(a1)
 move.l d3,20(a1)
 bra liftwalls
 
nomoreliftwalls 
 bra doalift

 rts
 
tstliftlower:
 cmp.b #1,d5
 blt.s lift0
 beq.s lift1
 cmp.b #3,d5
 blt.s lift2
 beq.s lift3

lift0:
 tst.b SPCTAP
 bne.s lift1
 move.w #$ffff,d1
 bra backfromlift

lift1:
 move.w #0,d1
 tst.b stoodonlift
 beq.s lift1b
 move.w #%100000000,d1
lift1b:
 move.w #4,d7
 bra backfromlift
 

lift2:
 move.w #0,d1
 move.w #4,d7
 bra backfromlift

lift3:
 move.w #$ffff,d1
 bra backfromlift

tstliftraise:
 cmp.b #1,d4
 blt.s rlift0
 beq.s rlift1
 cmp.b #3,d4
 blt.s rlift2
 beq.s rlift3

rlift0:
 tst.b SPCTAP
 bne.s rlift1
 move.w #$ffff,d1
 bra backfromlift

rlift1:
 tst.b stoodonlift
 bne.s rlift3
 move.w #0,d1
 move.w #-4,d7
 bra backfromlift

rlift2:
 move.w #0,d1
 move.w #-4,d7
 bra backfromlift

rlift3:
 move.w #$ffff,d1
 bra backfromlift


animtimer: dc.w 2
 
 
doordir: dc.w -1
doorpos: dc.w -9
dooropen: dc.b 0
doorclosed: dc.b 0 
 
 even 
SLAVEDoorRoutine:

 move.l #doorheighttab,a6
 move.l DoorData,a0
 
doadoor:
 
 move.w (a0)+,d0	; bottom of door movement
 cmp.w #999,d0
 bne notalldoorsdone
 move.w #999,(a6)+
 rts
notalldoorsdone:
 move.w (a0)+,d1	; top of door movement.
 
 move.w (a0),d3
 move.w d3,(a6)+
 move.w 2(a0),d2
 muls TempFrames,d2
 add.w d2,d3
 move.w 2(a0),d2
 cmp.w d3,d0
 sle.s doorclosed
 bgt.s nolower
 moveq #0,d2
nolower:

 cmp.w d3,d1
 sge.s dooropen
 blt.s noraise
 moveq #0,d2
 move.w d1,d3
noraise:

 sub.w d3,d0
 cmp.w #15*16,d0
 sge d6

 move.w d3,(a0)+
 move.l a0,a5
 move.w d2,(a0)+
 move.w d2,d7
 
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 asr.w #2,d3
 move.w d3,d0
 asl.w #2,d0
 move.w d0,2(a1)
 move.w d3,d0
 muls #256,d3
 move.l ZoneAdds,a1
 move.w (a0)+,d5
 
 
 move.l (a1,d5.w*4),a1
 add.l #LEVELDATA,a1
 move.l d3,6(a1)
 and.w #63,d0
 neg.w d0
 add.w #64,d0

 cmp.w PLR1_Zone,d5
 bne.s NotGoBackUp
 tst.w d2
 blt.s NotGoBackUp
 move.w #-16,d7
 move.w #0,d1
 move.w (a0)+,d2
 move.w (a0)+,d5
 bra backfromtst
NotGoBackUp:

 
 move.w (a0)+,d2	; conditions
 and.w Conditions,d2

 cmp.w -2(a0),d2
 beq.s satisfied 

 move.w (a0)+,d5

dothesimplething:
 move.l FloorLines,a3
simplecheck:
 move.w (a0)+,d5
 blt nomoredoorwalls
 asl.w #4,d5
 lea (a3,d5.w),a4
 move.w #0,14(a4)
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 move.l (a0)+,a2
 adda.w d0,a2
 move.l a2,10(a1)
 move.l d3,24(a1)
 bra.s simplecheck
 bra nomoredoorwalls 
 
 
satisfied:
 
 moveq #0,d4
 moveq #0,d5
 move.b (a0)+,d5
 move.b (a0)+,d4
 tst.b dooropen
 bne tstdoortoclose
 tst.b doorclosed
 bne tstdoortoopen
 move.w #$ffff,d1

backfromtst:
 
 move.l FloorLines,a3

doorwalls:
 move.w (a0)+,d5
 blt.s nomoredoorwalls
 asl.w #4,d5
 lea (a3,d5.w),a4
 move.w 14(a4),d4
 move.w #0,14(a4)
 and.w d1,d4
 cmp.w d1,d4
 bne.s nothinghit
 move.w d7,(a5)
 move.w #0,Noisex
 move.w #0,Noisez
 move.w #50,Noisevol
 move.w #5,Samplenum
 move.b #1,chanpick
 st notifplaying
 move.b #$fd,IDNUM
 movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
 jsr MakeSomeNoise
 movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
nothinghit:
 move.l (a0)+,a1
 add.l #LEVELGRAPHICS,a1
 move.l (a0)+,a2
 adda.w d0,a2
 move.l a2,10(a1)
 move.l d3,24(a1)
 bra.s doorwalls
 
nomoredoorwalls 
 bra doadoor

 rts
 
tstdoortoopen:
 cmp.w #1,d5
 blt.s door0
 beq.s door1
 cmp.w #3,d5
 blt.s door2
 beq.s door3
 cmp.w #5,d5
 blt.s door4
 beq.s door5
 
door0:
 tst.b SPCTAP
 bne.s door1
 move.w #$ffff,d1
 bra backfromtst

door1:
 move.w #%100000000,d1
 move.w #-16,d7
 bra backfromtst

door2:
 move.w #%10000000000,d1
 move.w #-16,d7
 bra backfromtst

door3:
 move.w #%1000000000,d1
 move.w #-16,d7
 bra backfromtst

door4:
 move.w #0,d1
 move.w #-16,d7
 bra backfromtst
 
door5:
 move.w #$ffff,d1
 bra backfromtst
 
tstdoortoclose:
 tst.w d4
 beq.s dclose0
 bra.s dclose1

dclose0:
 move.w #4,d7
 move.w #0,d1
 bra backfromtst

dclose1:
 move.w #$ffff,d1
 bra backfromtst
 
SLAVESwitchRoutine:
 tst.b SPCTAP
 bne.s SpaceIsPressed
 rts
SpaceIsPressed:
 move.l SwitchData,a0
 move.w #7,d0
 move.l Points,a1
 move.w PLR1_xoff,d1
 move.w PLR1_zoff,d2
CheckSwitches:
 move.w (a0),d3
 blt NotCloseEnough
 move.w 2(a0),d3
 lea (a1,d3.w*4),a2
 move.w (a2),d3
 add.w 4(a2),d3
 asr.w #1,d3
 move.w 2(a2),d4
 add.w 6(a2),d4
 asr.w #1,d4
 sub.w d1,d3
 muls d3,d3
 sub.w d2,d4
 muls d4,d4
 add.l d3,d4
 cmp.l #60*60,d4
 bge NotCloseEnough
 move.l 4(a0),a3
 add.l #LEVELGRAPHICS,a3
 move.w 2(a3),d3
 and.w #%1111000000111111,d3
 not.b 8(a0)
 beq.s switchoff
 or.w #32*64,d3
switchoff: 
 move.w d3,2(a3)
 move.w #7,d3
 sub.w d0,d3
 addq #4,d3
 move.w Conditions,d4
 bchg d3,d4
 move.w d4,Conditions
 movem.l a0/a1/d0,-(a7)
 move.w #0,Noisex
 move.w #0,Noisez
 move.w #50,Noisevol
 move.w #10,Samplenum
 move.b #1,chanpick
 st notifplaying
 move.b #$fc,IDNUM
 movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
 jsr MakeSomeNoise
 movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
 
 movem.l (a7)+,a0/a1/d0
 
NotCloseEnough:
 adda.w #12,a0
 dbra d0,CheckSwitches
 rts

prot1: dc.w 0
  
tempGotBigGun: dc.w 0 
tempGunDamage: dc.w 0
tempGunNoise: dc.w 1
tempxoff: dc.w 0
tempzoff: dc.w 0
tempRoompt: dc.l 0

PLR1_GotBigGun: dc.w 0
PLR1_GunDamage: dc.w 0
PLR1_GunNoise: dc.w 0
PLR2_GotBigGun: dc.w 0
PLR2_GunDamage: dc.w 0
PLR2_GunNoise: dc.w 0
bulyspd: dc.w 0 
closedist: dc.w 0
 
ObsInLine:
 ds.b 400 
 
rotcount:
 dc.w 0
 
shotvels: ds.l 20

PLR1_clicked: dc.b 0
PLR2_clicked: dc.b 0
popping: ds.l 5*4
targetydiff: dc.l 0
TimeToShoot: dc.w 0
 
tempangpos: dc.w 0
tempxdir: dc.w 0
tempzdir: dc.w 0
 
 
GunFrame: dc.w 0

duh: dc.w 0
double: dc.w 0
ivescreamed: dc.w 0

putinbackdrop:

 move.l a0,-(a7)

 move.w PLR1_angpos,d5
 and.w #8191,d5
 muls #432,d5
 divs #8192,d5
 muls #38*2,d5

 CACHE_ON d1

 move.l frompt,a0
 adda.w #104*4,a0
 move.l #EndBackPicture,a3
 lea.l BackPicture,a1
 add.l d5,a1
 move.w #2,d4
 bra allbars
 cnop 0,32
allbars:
 move.w #31,d3
onebar:
vertline:	
val SET 0

 REPT 19
 move.l (a1)+,d0
 move.w d0,val+104*4(a0)
 swap d0
 move.w d0,val(a0)
val SET val+104*8
 ENDR
 
 cmp.l a3,a1
 blt.s notoffrightend
 move.l #BackPicture,a1
notoffrightend:
 
 addq #4,a0
 dbra d3,onebar
 addq #4,a0
 dbra d4,allbars
 
 move.l (a7)+,a0
 rts





