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