 objvels: ds.l 8
maxmin: 
 dc.w 10,-10
 dc.w 8,-8
 dc.w 7,-7
 dc.w 9,-9

objmoveanim:
 bsr Nasties
 bsr PlayerShot
 bsr fruitmove
 rts
 
rotcount:
 dc.w 0
 
fruitmove:

 move.l #ObjectData+5*16,a0
 move.l #fruitadds,a1
 move.l #fruitvels,a3
 move.w rotcount,d0
 add.w #16*64,d0
 cmp.w #16*64*6,d0
 blt.s notresetrot
 move.w #0,d0
notresetrot
 move.w d0,rotcount
 moveq #3,d7
rotfruit
 move.l (a1)+,a2
 adda.w d0,a2
 move.l a2,8(a0)
 
 move.w (a3),d1
 
 move.w 4(a0),d2
 add.w d1,d2
 cmp.w #64+96,d2
 blt.s notbounce
 neg.w d1
 sub.w #1,d1
notbounce:
 add.w #1,d1
 move.w d2,4(a0)
 move.w d1,(a3)+
 
 add.w #16,a0
 dbra d7,rotfruit

 rts
 
fruitvels:
 dc.w 0,-3,2,-4 
 
fruitadds:
 dc.l Objects+4096*6
 dc.l Objects+4096*6+16
 dc.l Objects+4096*6+32
 dc.l Objects+4096*6+48

shotxvel: dc.w 50
shotzvel: dc.w 0

clicked: dc.w 0

PlayerShot:

 tst.b clicked
 bne pressedfire

 move.l #ObjectData+10*16,a0
 move.w 12(a0),d0
 bge.s inplay
 
 rts
 
inplay:

 move.l #Points,a1
 move.w (a0),d1
 lea (a1,d1.w*4),a1
 
 move.w (a1),d2
 move.w d2,oldx
 add.w shotxvel,d2
 move.w d2,newx
 move.w 2(a1),d2
 move.w d2,oldz
 add.w shotzvel,d2
 move.w d2,newz
 move.l #ZoneAdds,a2
 move.l (a2,d0.w*4),objroom
 move.w shotxvel,xdiff
 move.w shotzvel,zdiff
 movem.l a0/a1/a2/d0,-(a7)
 jsr MoveObject
 movem.l (a7)+,a0/a1/a2/d0
 tst.b hitwall
 beq.s nothitwall
 
 move.w #-1,12(a0)
 rts
 
nothitwall:

 move.l objroom,a3
 move.w (a3),12(a0)
 move.w newx,(a1)
 move.w newz,2(a1)

 rts

pressedfire:

 move.l #ObjectData+10*16,a0
 move.w 12(a0),d0
; bge inplay

 move.l #Points,a1
 move.w (a0),d1
 lea (a1,d1.w*4),a1
 move.w xoff,(a1)
 move.w zoff,2(a1)
 move.w angpos,d0
 move.l #SineTable,a2
 adda.w d0,a2
 move.w (a2),d0
 ext.l d0
 asl.l #7,d0
 swap d0
 move.w d0,shotxvel
 move.w 2048(a2),d0
 ext.l d0
 asl.l #7,d0
 swap d0
 move.w d0,shotzvel
 move.l Roompt,a2
 move.w (a2),12(a0)
 move.l 2(a2),d0
 asr.l #7,d0
 move.w d0,4(a0)
 move.w (a2),d0
 
 bra inplay

 rts

Nasties:

 move.l #objvels,a3
 move.l #maxmin,a4
 moveq #3,d7
 move.l #ObjectData,a0
 move.l #Points+34*4,a1
objloop: 
 move.l #0,(a3)

 move.w 4(a0),d0
 cmp.w 4(a3),d0
 beq.s rightheight
 bgt.s goingdown
 add.w #10,d0
goingdown:
 subq #8,d0
rightheight:
 move.w d0,4(a0)
 
 move.w (a1),d0
 move.w 2(a1),d1
 move.w xoff,d2
 move.w zoff,d3
 sub.w d0,d2
 sub.w d1,d3
 move.w (a4)+,d4
 move.w (a4)+,d5
 cmp.w d4,d2
 blt.s .notoofastr
 move.w d4,d2
.notoofastr
 cmp.w d5,d2
 bgt.s .notoofastl
 move.w d5,d2
.notoofastl
 cmp.w d4,d3
 blt.s .notoofasti
 move.w d4,d3
.notoofasti
 cmp.w d5,d3
 bgt.s .notoofasto
 move.w d5,d3
.notoofasto

 move.w d2,(a3)
 move.w d3,2(a3)

 move.w 12(a0),d2
 move.l ZoneAdds(pc,d2.w*4),objroom
 move.w d0,oldx
 move.w d1,oldz
 add.w (a3),d0
 add.w 2(a3),d1
 move.w d0,newx
 move.w d1,newz
 move.w (a3),xdiff
 move.w 2(a3),zdiff
 movem.l a0/a1/a3/a4/d7,-(a7)
 Jsr MoveObject
 movem.l (a7)+,a0/a1/a3/a4/d7
 
 move.l objroom,a2
 move.w (a2),12(a0)
 move.w 6(a2),2(a0)
 move.l 2(a2),d0
 asr.l #7,d0
 move.w d0,4(a3)
 
 move.w newx,(a1)+
 move.w newz,(a1)+
 addq #6,a3
 adda.w #16,a0
 dbra d7,objloop

 rts
 
ZoneAdds:
 dc.l ZoneDat0
 dc.l ZoneDat1
 dc.l ZoneDat2
 dc.l ZoneDat3
 dc.l ZoneDat4
 dc.l ZoneDat5
 dc.l ZoneDat6
 dc.l ZoneDat7
 dc.l ZoneDat8
 dc.l ZoneDat9
 dc.l ZoneDat10
 dc.l ZoneDat11
 dc.l ZoneDat12
 dc.l ZoneDat13
 dc.l ZoneDat14
 dc.l ZoneDat15
 
putinbackdrop:

 move.w angpos,d5
 add.w #2048,d5
 and.w #8191,d5
 muls #432,d5
 divs #8192,d5
 muls #160,d5

 CACHE_ON d1

 move.l frompt,a0
 adda.w #104*4,a0
 move.l #BackPicture,a1
 add.l d5,a1
 move.w #104*4,d1
 move.w #2,d4
allbars:
 move.w #31,d3
onebar:
 move.w #1,d0
 move.l a0,a2
vertline:
 REPT 20
 move.w (a1)+,(a2)
 adda.w d1,a2
 ENDR
 dbra d0,vertline
 
 adda.w #80,a1
 
 cmp.l #EndBackPicture,a1
 blt.s notoffrightend
 move.l #BackPicture,a1
notoffrightend
 
 addq #4,a0
 dbra d3,onebar
 addq #4,a0
 dbra d4,allbars
 rts
