Overview:
Route 666 is my attempt at a side scrolling shoot-em-up. It has one playable level completed with a boss monster at the end. I had planned to release this game to the public when finished. However, I stopped working on it in 1996. So now, in 2003, I am releasing the unfinished version to the public.
The Code:
The code listed below is taken for Route.s. It is the complete listing with the exception of the data statements. There are a few comments that can give you an idea to how it works. Since this code is so much like Biker Babe From Barbados, I suggest you read that tutorial for more input. Albeit, I think it would be nice to comment more of the code. So, I put that on my todo list.
jsr MEMORY
lea Black,a1
jsr NEWPAL
MOVECOP move.l _BckGrnd1,d0
jsr PUTBMAP
lea COPLIST,a1
move.l a1,$DFF080
move.w #$FFFF,$DFF088
move.w #$83E0,$DFF096
lea VBINT,a1
move.l a1,$6c
move.w #$C020,$DFF09A
lea ShotSd,a1 SOUND FX
move.l a1,AudShot
lea WapSd,a1
move.l a1,AudWap
lea DripSd,a1
move.l a1,AudDrip
lea ExplSnd,a1
move.l a1,AudExpl
lea BuffSnd,a1
move.l a1,AudBuff
lea BuzzSnd,a1
move.l a1,AudBuzz
lea BoomSnd,a1
move.l a1,AudBoom
lea BumfSnd,a1
move.l a1,AudBumf
lea WhiaSnd,a1
move.l a1,AudWhia
lea EngzSnd,a1
move.l a1,AudEngz
lea MissSnd,a1
move.l a1,AudMiss
lea TinkSnd,a1
move.l a1,AudTink
move.w #64,$DFF0A8
move.w #64,$DFF0B8
move.w #64,$DFF0C8
move.w #64,$DFF0D8
move.l _BckGrnd1,d0 BITMAPS
move.l _BckGrnd2,d1
move.l d0,_BitMapY
move.l d1,_BitMapN
jsr MISSTBL
jsr TYPETBL
jsr SPRITBL
lea ShipTbl,a0
lea Ship1,a1
move.l a1,(a0)+
move.l a1,(a0)+
lea MaskTbl,a0
lea Mask1,a1
move.l a1,(a0)+
move.l a1,(a0)+
lea BackTbl,a0
lea Back1,a1
move.l a1,(a0)+
lea Back2,a1
move.l a1,(a0)+
lea ColrTbl,a0
lea Colors1,a1
move.l a1,(a0)+
lea Colors2,a1
move.l a1,(a0)+
lea MappTbl,a0
lea Map1,a1
move.l a1,(a0)+
lea Map2,a1
move.l a1,(a0)+
lea EnmsTbl,a0
lea Enms1,a1
move.l a1,(a0)+
lea Enms2,a1
move.l a1,(a0)+
TITLE move.l _BitMapY,a1
add.l #724,a1
lea Title,a0
move.w #11232,d5
move.w #199,d0
move.w #40,d6
move.w #48,d7
jsr SEEIFF
lea TitCol,a0
jsr FADEIN
tit1 move.w $BFE000,d0
btst #7,d0
bne tit1
lea TitCol,a0
jsr FADEOUT
INITLEV move.w #10000,d0 Clear BackMap
move.l _BackMap,a0
cbm move.l #0,(a0)+
dbf d0,cbm
move.w #12000,d0 Clear ShipMap
move.l _ShipMap,a0
csm move.l #0,(a0)+
dbf d0,csm
move.w #8,d1 Move Colors
lea Colors0,a1
lea ColrTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
mcl move.l (a0)+,(a1)+
dbf d1,mcl
lea ShipTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
move.l _ShipMap,a1
move.w #8000,d5
move.w #199,d0
move.w #40,d6
move.w #40,d7
jsr SEEIFF
lea MaskTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
move.l _ShipMap,a1
add.l #40000,a1
move.w #0,d3
move.w #199,d0
move.w #40,d6
YLns move.l a1,a5
jsr DoLine
add.l #40,a1
dbf d0,YLns
lea BackTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
move.l _BackMap,a1
move.w #8000,d5
move.w #198,d0
move.w #40,d6
move.w #40,d7
jsr SEEIFF
PREPLV1 move.w #0,Boss
lea COPLIST,a2
move.w #$0000,6(a2)
move.w #0,$DFF102
move.l _BitMapY,d0
sub.w #2,d0
jsr PUTBMAP
lea MappTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
move.w Section,d0
mulu #1680,d0
lea (a0,d0),a0
move.l a0,CurMap
lea EnmsTbl,a0
move.w Level,d0
lsl.w #2,d0
move.l (a0,d0),a0
move.w Section,d0
pl1 cmp.w #9999,(a0)+
bne pl1
dbf d0,pl1
move.l a0,EListPt
lea Enemy,a0
move.w #130,d0
clrenm move.l #0,(a0)+
dbf d0,clrenm
jsr CLRBACK
jsr MAKEMAP
jsr DRWSTRT
move.l EListPt,a1
cmp.w #9000,(a1)
bne setpar
add.l #20,EListPt
move.w #1,Boss
setpar move.w #0,Message
move.w #0,PlayerX
move.w #100,PlayerY
move.w #0,PlayerI
move.w #15,ObjOff
move.w #0,BMapOff
move.w #-2,Distance
move.w #120,Warp
move.w #36,Slow
move.w #0,Accel
move.w #1,Stop
lea Colors,a0
jsr FADEIN
*** ROUTE 666 *************************************************************
ABOBGN jsr KYBOARD Parse Keyboard
cmp.b #$40,Key
beq PAUSE <- Pause (display stats)
cmp.b #$45,Key
beq QUIT <- Quit (terminate program)
cmp.w #0,PlayerH
bmi DEATH <- Player Died
cmp.w #208,Distance
bge ENDLVL <- End of Level
sub.w #2,Slow
bpl SRTSEQ <- Start of Level
tst.w NLev
bne NEWLVL
*READ JOYBUTTON************************************************************
SHOOT btst.b #7,$BFE001
beq ButDwn
move.b #0,Reload
jmp GETJOY
ButDwn tst.b Reload
beq dosht
add.b #1,Reload
cmp.b #60,Reload
blt GETJOY
move.w BulPow,d0
move.w MaxPow,d1
cmp.w d0,d1
beq GETJOY
cmp.w #0,ResPow
beq GETJOY
sub.w #1,ResPow
move.w #$4,$DFF096 * Tink Sound
move.l AudTink,Aud2Snd |
move.l #$05D00125,$DFF0C4 |
move.w #15,Aud2Del *
jsr INCPOW
dosht move.b #1,Reload
lea Bullets,a0
moveq #3,d5 # of Bullets [MAX=1-ABS#]
nxtbul move.w (a0),d0
beq shtok
add.l #8,a0
dbf d5,nxtbul
jmp GETJOY
shtok move.l PlayerX,(a0)
move.w BulSiz,4(a0)
move.w #$1,$DFF096 * Shot Sound
move.l AudShot,Aud0Snd |
move.l #$015E0190,$DFF0A4 |
move.w #5,Aud0Del *
*READ JOYSTICK*************************************************************
GETJOY move.w $DFF00C,d2
moveq #2,d0
moveq #2,d1
btst.l #1,d2
bne gj3
btst.l #9,d2
bne gj2
eor.w d0,d0
gj2 neg.w d0
gj3 move.w d2,d3
and.w #$0001,d3
move.w d2,d4
and.w #$0002,d4
lsr.w #1,d4
eor.w d4,d3
btst #0,d3
bne MOVEME
move.w d2,d4
lsr.w #1,d4
eor.w d4,d2
btst #8,d2
bne gj5
eor d1,d1
gj5 neg.w d1
*UPDATE PLAYERS MOVEMENTS**************************************************
MOVEME add.w PlayerX,d0
add.w PlayerY,d1
cmp.w #16,d0
ble mm2
cmp.w #321,d0
bge mm2
move.w d0,PlayerX
mm2 cmp.w #1,d1
ble mm4
cmp.w #219,d1
bge mm4
move.w d1,PlayerY
mm4 sub.w #1,PlayerA Animation part
bpl DOENEMY
move.w #11,PlayerA
*UPDATE ENEMY LIST*********************************************************
DOENEMY move.l EListPt,a0
move.w Distance,d0
lsl.w #3,d0
add.w ObjOff,d0 d0 = Distance
de1 cmp.w 6(a0),d0
ble DOLIST
lea Enemy,a1
moveq #11,d7
de2 tst.w (a1)
bne de4
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
bra de1
de4 add.l #20,a1
dbf d7,de2
*PARSE ENEMY LIST**********************************************************
DOLIST move.l a0,EListPt
moveq #23,d6
lea Enemy,a1
lea JmpTable,a6
move.w GenUse,d7
de5 tst.w (a1)
beq de6
move.b 9(a1),d0
and.w #$00FF,d0
lsl.w #2,d0
move.l (a6,d0),a0
jsr (a0)
de6 add.l #20,a1
dbf d6,de5
*BOSS LEVEL****************************************************************
cmp.w #1,Boss
bne DRAWENY
jsr DOBOSS
*DRAW ENEMYS***************************************************************
DRAWENY moveq #23,d6
lea Enemy,a5
move.l _BitMapN,a3
add.l #59000,a3
BW00 btst.b #6,$DFF002 IS THIS REALLY NECCESARY?
bne BW00
move.l #$FFFF0000,$DFF044 BLTAFWM
move.l #$002C0024,$DFF060 BLTxMOD
move.l #$0024002C,$DFF064 BLTxMOD
en0 move.l #0,(a3)
move.l -2(a5),d0 X Position
beq en4
move.w 2(a5),d1 Y Position
move.l _BitMapN,a0
move.w 4(a5),d2
add.w ObjOff,d0
ror.l #3,d0
mulu.w #48,d1
add.w d0,d1
add.w Distance,d1
lea (a0,d1),a0
ror.l #1,d0
swap d0
move.l a0,d4
and.b #$FE,d4
move.l d4,a0
move.l d4,(a3)
lea 4(a3),a6
move.l _ShipMap,a1
lea (a1,d2),a1
move.l a1,a2
add.l #40000,a2
move.w #$0FCA,d1
or.w d0,d1
moveq #4,d4
BW0 btst.b #6,$DFF002
bne BW0
move.w d0,$DFF042 BLTCON1
move.w d1,$DFF040 BLTCON0
en1 move.l (a0),(a6)+
move.l 48(a0),(a6)+
move.l 96(a0),(a6)+
move.l 144(a0),(a6)+
move.l 192(a0),(a6)+
move.l 240(a0),(a6)+
move.l 288(a0),(a6)+
move.l 336(a0),(a6)+
move.l 384(a0),(a6)+
move.l 432(a0),(a6)+
move.l 480(a0),(a6)+
move.l 528(a0),(a6)+
move.l 576(a0),(a6)+
move.l 624(a0),(a6)+
move.l 672(a0),(a6)+
move.l 720(a0),(a6)+
BW1 btst.b #6,$DFF002
bne BW1
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #8000,a1
dbf d4,en1
en4 add.l #20,a5
add.l #324,a3
dbf d6,en0
**DRAW BULLETS*************************************************************
DRAWBUL sub.w #1,BulDel
bpl db
move.w #1,BulDel
neg.w BulYD
db moveq #4,d6
lea Bullets,a5
move.l _BitMapN,a3
add.l #57000,a3
db0 move.l #0,(a3)
move.l -2(a5),d0 X Position
beq db4
move.w 2(a5),d1 Y Position
move.l _BitMapN,a0
move.w 4(a5),d2
add.w ObjOff,d0
ror.l #3,d0
mulu.w #48,d1
add.w d0,d1
add.w Distance,d1
lea (a0,d1),a0
ror.l #1,d0
swap d0
move.l a0,d4
and.b #$FE,d4
move.l d4,a0
move.l a0,(a3)
lea 4(a3),a6
move.l _ShipMap,a1
lea (a1,d2),a1
move.l a1,a2
add.l #40000,a2
move.w #$0FCA,d1
or.w d0,d1
moveq #4,d4
db1 move.l (a0),(a6)+
move.l 48(a0),(a6)+
move.l 96(a0),(a6)+
move.l 144(a0),(a6)+
move.l 192(a0),(a6)+
move.l 240(a0),(a6)+
move.l 288(a0),(a6)+
move.l 336(a0),(a6)+
move.l 384(a0),(a6)+
move.l 432(a0),(a6)+
move.l 480(a0),(a6)+
move.l 528(a0),(a6)+
move.l 576(a0),(a6)+
move.l 624(a0),(a6)+
move.l 672(a0),(a6)+
move.l 720(a0),(a6)+
tst.w d4
beq db2
BW2 btst.b #6,$DFF002
bne BW2
move.w d0,$DFF042 BLTCON1
move.w d1,$DFF040 BLTCON0
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #8000,a1
dbf d4,db1
db2 cmp.w #20,d2
blt db6
cmp.w #6,BulPow
bge s1
add.w #2,4(a5) <-----* Bullet Hit Something
cmp.w #26,4(a5)
blt s1
s4 move.w #0,(a5)
s1 move.w #$0FCA,d1
or.w d0,d1
BW3 btst.b #6,$DFF002
bne BW3
move.w d1,$DFF040 BLTCON0 Explosion
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
jmp db4
db6 cmp.w #5,BulPow
blt db7
move.w BulYD,d1
add.w d1,2(a5)
db7 move.w BulSpd,d1 <-----* Bullet Didn't Hit Something
add.w d1,(a5)
move.w (a5),d3
cmp.w #340,d3
bge s4
move.w #$0AA0,d1
or.w d0,d1
BW4 btst.b #6,$DFF002
bne BW4
move.w d1,$DFF040 BLTCON0 Collision Detect
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
ENMCOL move.w 2(a5),d1
move.w (a5),d0
lea Enemy,a6
moveq #11,d7
ec1 move.w (a6),d2
move.w 2(a6),d3
sub.w d0,d2
bpl ec2
neg.w d2
ec2 sub.w d1,d3
bpl ec3
neg.w d3
ec3 add.w d2,d3
BW40 btst.b #6,$DFF002 Check Collision at last possible moment!
bne BW40
btst.b #5,$DFF002
bne db4
cmp.w #6,BulPow
bge s1s
move.w #20,4(a5)
s1s cmp.w #27,d3
bge ec4
move.w BulPow,d3
add.b d3,8(a6)
move.w #$4,$DFF096 * Wap Sound
move.l AudWap,Aud2Snd |
move.l #$020C0258,$DFF0C4 |
move.w #9,Aud2Del *
bra db4
ec4 add.l #20,a6
dbf d7,ec1
move.w #$4,$DFF096 * Buff Sound
move.l AudBuff,Aud2Snd |
move.l #$067F0210,$DFF0C4 |
move.w #16,Aud2Del *
db4 add.l #8,a5
add.l #324,a3
dbf d6,db0
*DRAW PLAYER**************************************************************
DRAWME move.l _BitMapN,a0
move.l a0,a5
add.l #56500,a5
move.l PlayerXl,d0
move.w PlayerY,d1
add.w ObjOff,d0
ror.l #3,d0
mulu.w #48,d1
add.w d0,d1
add.w Distance,d1
lea (a0,d1),a0
ror.l #1,d0
swap d0
move.l a0,d4
and.b #$FE,d4
move.l d4,a0
move.l d4,(a5)+
move.l _ShipMap,a1
move.w PlayerA,d4
lea (a1,d4),a1
cmp.w #0,PlayerI
beq dmn1
add.l #28,a1
dmn1 move.l a1,a2
add.l #40000,a2
move.w #$0FCA,d1
or.w d0,d1
moveq #3,d4
dm1 btst.b #6,$DFF002
bne dm1
move.l (a0),(a5)+
move.l 48(a0),(a5)+
move.l 96(a0),(a5)+
move.l 144(a0),(a5)+
move.l 192(a0),(a5)+
move.l 240(a0),(a5)+
move.l 288(a0),(a5)+
move.l 336(a0),(a5)+
move.l 384(a0),(a5)+
move.l 432(a0),(a5)+
move.l 480(a0),(a5)+
move.l 528(a0),(a5)+
move.l 576(a0),(a5)+
move.l 624(a0),(a5)+
move.l 672(a0),(a5)+
move.l 720(a0),(a5)+
Bdm1 btst.b #6,$DFF002
bne Bdm1
move.w d0,$DFF042 BLTCON1
move.w d1,$DFF040 BLTCON0
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #8000,a1
dbf d4,dm1
move.w #$0EA0,d1 Check for collision
or.w d0,d1
dm2 btst.b #6,$DFF002
bne dm2
move.w d1,$DFF040 BLTCON0
move.l a2,$DFF050 BLTAPT
move.l a1,$DFF04C BLTBPT
move.l a0,$DFF048 BLTCPT
move.l a0,$DFF054 BLTDPT
move.w #$0302,$DFF058 BLTSIZE
tst.w PlayerI Check for invincable
beq BW7
sub.w #1,PlayerI
jmp MVBACK
BW7 btst.b #6,$DFF002
bne BW7
btst.b #5,$DFF002
bne MVBACK
move.w #$1,$DFF096 * Buzz Sound
move.l AudBuzz,Aud0Snd |
move.l #$00020999,$DFF0A4 |
move.w #2,Aud0Del *
dp4 sub.w #3,PlayerH Player is Dying!!!
bpl MVBACK
cmp.w #0,ResFix
beq dp
sub.w #1,ResFix
move.w #25,PlayerH
move.w #$8,$DFF096 * Tink Sound
move.l AudTink,Aud3Snd |
move.l #$05D00125,$DFF0D4 |
move.w #15,Aud3Del *
jmp MVBACK
dp move.w #6,d6 Player is DEAD!
lea DMatX,a0
lea DMatY,a2
dp0 move.w PlayerX,d0
move.w PlayerY,d1
add.b (a0,d6),d0
add.b (a2,d6),d1
lea Enemy,a1
moveq #23,d7
dp1 tst.w (a1)
bne dp2
move.w d0,(a1)+
move.w d1,(a1)+
move.l #$05100000,(a1)+
move.l #$00120000,(a1)+
move.l #0,(a1)+
move.l #0,(a1)+
jmp dp3
dp2 add.l #20,a1
dbf d7,dp1
dp3 dbf d6,dp0
move.w #$1,$DFF096 * Expl Sound
move.l AudExpl,Aud0Snd |
move.l #$23040160,$DFF0A4 |
move.w #90,Aud0Del *
move.l #0,PlayerX
move.w #300,PlayerI
sub.w #1,PlayerL
*SCROLL BACKGROUND********************************************************
MVBACK
* move.w #$222,$DFF180
cmp.b #$FF,$DFF006 Wait for VBlank
bne MVBACK
* move.w #0,$DFF180
move.w PlayerH,d1
move.w #260,d0
sub.w d1,d0
bpl Hok
move.w #260,d0
move.w #0,PlayerH
Hok lea Line,a1
add.w #1,LineA
cmp.w #32,LineA
bne hok1
move.w #0,LineA
hok1 move.w LineA,d1
lsr.w #2,d1
mulu.w #808,d1
move.b d0,(a1,d1)
lea SPRPTR,a0
move.l a1,d0
add.w d1,d0
move.w d0,30(a0)
swap d0
move.w d0,26(a0)
cmp.w #255,d0
move.l _BitMapY,d1 Switch bit map pointers
move.l _BitMapN,d0
move.l d1,_BitMapN
move.l d0,_BitMapY
lea COPLIST,a2
cmp.w #0,Stop Stop movement
bne nomove
bchg.b #0,GenDel Update background - Odd cycle
beq pb1
add.w #1,ObjOff
nomove move.l _BitMapY,d0
add.w Distance,d0
jsr PUTBMAP
move.l _BckGrnd1,a3
bra ADDMAP
pb1 move.w BMapOff,d2 Update background - even cycle
dbf d2,pb2
moveq #15,d2
move.w #0,ObjOff
add.w #2,Distance
pb2 move.w d2,BMapOff
move.w d2,6(a2)
lsl.w #4,d2
or.w d2,6(a2)
move.l _BitMapY,d0
add.w Distance,d0
jsr PUTBMAP
move.l _BckGrnd2,a3
ADDMAP move.l _BackBuff,a4
move.w BMapOff,d5
move.w Distance,d0
lea 46(a3,d0),a3
lea 46(a4,d0),a4
move.w #3504,d0
mulu d5,d0
add.l d0,a3
move.l #18688,d0
mulu d5,d0
add.l d0,a4
am0 btst.b #6,$DFF002 BLIT IN BACKGROUND
bne am0
move.l #$FFFFFFFF,$DFF044 BLTAFWM
move.l #$09F00000,$DFF040 BLTCON0&1
move.l #$00FE002E,$DFF064 BLTxMOD
move.l a4,$DFF050 BLTAPT
move.l a3,$DFF054 BLTDPT
move.w #$12C1,$DFF058 BLTSIZE
*CLEANUP PLAYER*************************************************************
move.l _BitMapN,a5
add.l #56500,a5
move.l (a5)+,a0
cmp.l #0,a0
beq cu2
moveq #3,d4
cu1 move.l (a5)+,(a0)
move.l (a5)+,48(a0)
move.l (a5)+,96(a0)
move.l (a5)+,144(a0)
move.l (a5)+,192(a0)
move.l (a5)+,240(a0)
move.l (a5)+,288(a0)
move.l (a5)+,336(a0)
move.l (a5)+,384(a0)
move.l (a5)+,432(a0)
move.l (a5)+,480(a0)
move.l (a5)+,528(a0)
move.l (a5)+,576(a0)
move.l (a5)+,624(a0)
move.l (a5)+,672(a0)
move.l (a5)+,720(a0)
add.l #11232,a0
dbf d4,cu1
cu2 btst.b #6,$DFF002 For Bullet & ENEMY BLITS!
bne cu2
move.l #$0000002C,$DFF064 BLTxMOD
*CLEANUP BULLETS***********************************************************
move.l _BitMapN,a5
add.l #58296,a5
moveq #4,d3
cb2 move.l (a5)+,a0
move.l a5,a3
cmp.l #0,a0
beq cb6
moveq #4,d4
cb5a btst.b #6,$DFF002
bne cb5a
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #64,a3
move.l (a3)+,(a0)
move.l (a3)+,48(a0)
move.l (a3)+,96(a0)
move.l (a3)+,144(a0)
move.l (a3)+,192(a0)
move.l (a3)+,240(a0)
move.l (a3)+,288(a0)
move.l (a3)+,336(a0)
move.l (a3)+,384(a0)
move.l (a3)+,432(a0)
move.l (a3)+,480(a0)
move.l (a3)+,528(a0)
move.l (a3)+,576(a0)
move.l (a3)+,624(a0)
move.l (a3)+,672(a0)
move.l (a3)+,720(a0)
add.l #11232,a0
cb5c btst.b #6,$DFF002
bne cb5c
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #64,a3
move.l (a3)+,(a0)
move.l (a3)+,48(a0)
move.l (a3)+,96(a0)
move.l (a3)+,144(a0)
move.l (a3)+,192(a0)
move.l (a3)+,240(a0)
move.l (a3)+,288(a0)
move.l (a3)+,336(a0)
move.l (a3)+,384(a0)
move.l (a3)+,432(a0)
move.l (a3)+,480(a0)
move.l (a3)+,528(a0)
move.l (a3)+,576(a0)
move.l (a3)+,624(a0)
move.l (a3)+,672(a0)
move.l (a3)+,720(a0)
add.l #11232,a0
cb5e btst.b #6,$DFF002
bne cb5e
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
cb6 sub.l #328,a5
dbf d3,cb2
*CLEANUP ENEMYS************************************************************
move.l _BitMapN,a5
add.l #66452,a5
moveq #23,d3
ce2 move.l (a5)+,a0
move.l a5,a3
cmp.l #0,a0
beq ce6
ce5a btst.b #6,$DFF002
bne ce5a
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #64,a3
move.l (a3)+,(a0)
move.l (a3)+,48(a0)
move.l (a3)+,96(a0)
move.l (a3)+,144(a0)
move.l (a3)+,192(a0)
move.l (a3)+,240(a0)
move.l (a3)+,288(a0)
move.l (a3)+,336(a0)
move.l (a3)+,384(a0)
move.l (a3)+,432(a0)
move.l (a3)+,480(a0)
move.l (a3)+,528(a0)
move.l (a3)+,576(a0)
move.l (a3)+,624(a0)
move.l (a3)+,672(a0)
move.l (a3)+,720(a0)
add.l #11232,a0
ce5c btst.b #6,$DFF002
bne ce5c
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
add.l #11232,a0
add.l #64,a3
move.l (a3)+,(a0)
move.l (a3)+,48(a0)
move.l (a3)+,96(a0)
move.l (a3)+,144(a0)
move.l (a3)+,192(a0)
move.l (a3)+,240(a0)
move.l (a3)+,288(a0)
move.l (a3)+,336(a0)
move.l (a3)+,384(a0)
move.l (a3)+,432(a0)
move.l (a3)+,480(a0)
move.l (a3)+,528(a0)
move.l (a3)+,576(a0)
move.l (a3)+,624(a0)
move.l (a3)+,672(a0)
move.l (a3)+,720(a0)
add.l #11232,a0
ce5e btst.b #6,$DFF002
bne ce5e
move.l a3,$DFF050 BLTAPT
move.l a0,$DFF054 BLTDPT
move.w #$0402,$DFF058 BLTSIZE
ce6 sub.l #328,a5
dbf d3,ce2
jmp ABOBGN
*LEVEL3 INTERRUPT**********************************************************
VBINT move.w #$0020,$DFF09C
cmp.l #0,Aud3Snd Channel 3
beq ac2
move.l Aud3Snd,$DFF0D0
move.w #$8008,$DFF096
move.l #0,Aud3Snd
ac2 sub.w #1,Aud3Del
bne ca2
move.w #$0008,$DFF096
ca2 cmp.l #0,Aud2Snd Channel 2
beq ac4
move.l Aud2Snd,$DFF0C0
move.w #$8004,$DFF096
move.l #0,Aud2Snd
ac4 sub.w #1,Aud2Del
bne ca4
move.w #$0004,$DFF096
ca4 cmp.l #0,Aud1Snd Channel 1
beq ca5
move.l Aud1Snd,$DFF0B0
move.w #$8002,$DFF096
move.l #0,Aud1Snd
ca5 sub.w #1,Aud1Del
bne ca6
move.w #$0002,$DFF096
ca6 cmp.l #0,Aud0Snd Channel 0
beq ca7
move.l Aud0Snd,$DFF0A0
move.w #$8001,$DFF096
move.l #0,Aud0Snd
ca7 sub.w #1,Aud0Del
bne ca3
move.w #$0001,$DFF096
ca3 rte
**************************************************************************
INCPOW MOVEM.L D0-D1,-(SP)
cmp.w #9,MaxPow
ble ip0
move.w #9,MaxPow
ip0 move.w BulPow,d0
move.w MaxPow,d1
cmp.w d0,d1
beq ip3
IP cmp.w #18,BulSiz
beq ip1
add.w #2,BulSiz
ip1 cmp.w #10,BulSpd
beq ip2
add.w #2,BulSpd
ip2 cmp.w #9,BulPow
beq ip3
add.w #1,BulPow
ip3 MOVEM.L (SP)+,D0-D1
rts
**************************************************************************
KYBOARD move.b $BFEC01,d0 Read Keyboard
not.b d0
lsr.b #1,d0
bcs.s Hndshk
move.b d0,Key
Hndshk bset #6,$BFEE01
move.b #0,$BFEC01
bclr.b #6,$BFEE01
cmp.b #$50,Key
bne k1
move.w #500,PlayerI
move.b #0,Key
rts
k1 cmp.b #$51,Key
bne k2
jsr INCPOW
add.w #1,ResPow
cmp.w #10,ResPow
bne bye
move.w #9,ResPow
rts
k2 cmp.b #$52,Key
bne k3
add.w #1,ResFix
cmp.w #10,ResFix
bne bye
move.w #9,ResFix
k3 cmp.b #$53,Key
bne bye
add.w #1,MaxPow
cmp.w #10,MaxPow
bne bye
move.w #9,MaxPow
rts
**************************************************************************
DEATH add.w #1,Warp
cmp.w #300,Warp
ble DOENEMY <- Let game 'coast' to stop
cmp.w #0,PlayerL
blt GMOVER
lea Colors,a0
jsr FADEOUT
move.w PlayerHM,d0
move.w d0,PlayerH
move.w #1,BulPow
move.w #4,BulSpd
move.w #12,BulSiz
jmp PREPLV1
***************************************************************************
ENDLVL move.w #1,Stop
move.w #0,GenUse
sub.w #1,Warp
beq WARP
cmp.w #50,Warp <- can we shoot?
bge SHOOT <- YES!
jmp GETJOY <- NO!
WARP cmp.w #0,Aud2Del
bgt WARP
* move.w #$4,$DFF096 * Go Sound
* move.l AudGo,Aud2Snd |
* move.l #$0EC00333,$DFF0C4 |
* move.w #20,Aud2Del *
move.w #1,Warp
lea Enemy,a1
moveq #23,d7
wp1 tst.w (a1)
bne wp2
move.w PlayerX,(a1)+
move.w PlayerY,(a1)+
move.l #$05100000,(a1)+
move.l #$00120000,(a1)+
move.l #0,(a1)+
move.l #0,(a1)+
jmp wp3
wp2 add.l #20,a1
dbf d7,wp1
wp3 add.w #1,Accel
move.w Accel,d0
add.w d0,PlayerX
cmp.w #338,PlayerX
ble MOVEME
move.w #338,PlayerX
cmp.w #80,Accel
ble DOENEMY
lea Colors,a0
jsr FADEOUT
add.w #1,Section
jmp PREPLV1
***************************************************************************
NEWLVL lea Colors,a0
jsr FADEOUT
add.w #1,Level
move.w #0,NLev
move.w #0,Section
jmp INITLEV
***************************************************************************
SRTSEQ bne hold
cmp.w #1,Boss
beq hold
move.w #0,Stop
hold move.w Slow,d0
lsr.w #1,d0
add.w #1,d0
lea Enemy,a1
moveq #23,d7
sp1 tst.w (a1)
bne sp2
move.w PlayerX,(a1)+
move.w PlayerY,(a1)+
move.l #$05100000,(a1)+
move.l #$00120000,(a1)+
move.l #0,(a1)+
move.l #0,(a1)+
jmp MOVEME
sp2 add.l #20,a1
dbf d7,sp1
jmp SHOOT
**************************************************************************
SUBGAME MOVEM.L D6-D7/A0-A6,-(SP)
move.b #0,Key
move.l _BitMapY,a0
move.l _Buffer,a1
add.l #2414,a0
add.w Distance,a0
move.w #4,d5
sg3 move.w #124,d6
sg2 move.w #9,d7
sg1 move.w (a0),(a1)+
move.w #0,(a0)+
dbf d7,sg1
add.l #28,a0
dbf d6,sg2
add.l #5232,a0
dbf d5,sg3
lea BoxDat,a3
move.l _BitMapY,a4
move.w Distance,d0
lea (a4,d0),a4
move.l a4,a5
add.l #22464,a4
add.l #33696,a5
move.w #3,d5
move.w #1,d0
Box move.w (a3)+,d0
move.w (a3)+,d1
move.w (a3)+,d2
move.w (a3)+,d3
move.l a5,a0
move.w #$BFA,d6
jsr LINE
move.l a4,a0
jsr LINE
dbf d5,Box
SGMAIN move.w #0,d0
jsr WAIT
move.w $BFE000,d0
btst #7,d0
bne SGMAIN
move.b #0,Key
move.l _BitMapY,a0
move.l _Buffer,a1
add.l #2414,a0
add.w Distance,a0
move.w #4,d5
sg6 move.w #124,d6
sg5 move.w #9,d7
sg4 move.w (a1)+,(a0)+
dbf d7,sg4
add.l #28,a0
dbf d6,sg5
add.l #5232,a0
dbf d5,sg6
MOVEM.L (SP)+,D6-D7/A0-A6
rts
***************************************************************************
PUTBMAP lea MAPPTR,a2
move.l #11232,d1
swap d0 +
move.w d0,2(a2) |
swap d0 | Modify the Copper Lists Bit
move.w d0,6(a2) | Memory Reserved for Bit Map
add.l d1,d0 |
swap d0 |
move.w d0,10(a2) |
swap d0 |
move.w d0,14(a2) |
add.l d1,d0 |
swap d0 |
move.w d0,18(a2) |
swap d0 |
move.w d0,22(a2) |
add.l d1,d0 |
swap d0 |
move.w d0,26(a2) |
swap d0 |
move.w d0,30(a2) |
add.l d1,d0 |
move.w d0,38(a2) |
swap d0 |
move.w d0,34(a2) +
rts
***************************************************************************
MAKEMAP move.l CurMap,a0
move.l _BackBuff,a1
move.l _BackMap,a2
mp1 move.w #0,d7
mp2 move.w #0,d6
mp3 move.l a1,a3 a3 = PutMap Pointer
move.l a2,a4 a4 = GetMap Pointer
move.b (a0)+,d0 This section computes GetMap location
and.w #$00FF,d0 *
divu #20,d0 *
swap d0 *
add.w d0,a4 *
add.w d0,a4 *
swap d0 *
mulu #720,d0 *
add.w d0,a4 a4 = Now GetMap ChunkN Pointer
move.w d7,d0 This section computes PutMap Location
mulu.w #4608,d0 *
add.l d0,a3 *
add.w d6,a3 *
add.w d6,a3 a3 = Now PutMap Pointer
move.w #4,d5
mp4 move.w #17,d4
mp5 move.w (a4),(a3)
add.w #256,a3
add.w #40,a4
dbf d4,mp5
add.l #55296,a3
add.w #7280,a4
dbf d5,mp4
add.w #1,d6
cmp.w #127,d6
ble mp3
add.w #1,d7
cmp.w #12,d7
ble mp2
rts
***************************************************************************
SEEIFF moveq #0,d3 A1-A4 Data Pointer
lea (a1,d5),a2 A5 BitMap Pointer
lea (a2,d5),a3 D0 Y Line Counter
lea (a3,d5),a4 D1 X Byte Counter
lea (a4,d5),a6 d5 Size of BitPlanes
YLines move.l a1,a5
jsr DoLine
add.w d7,a1
move.l a2,a5
jsr DoLine
add.w d7,a2
move.l a3,a5
jsr DoLine
add.w d7,a3
move.l a4,a5
jsr DoLine
add.w d7,a4
move.l a6,a5
jsr DoLine
add.w d7,a6
dbf d0,YLines
rts
DoLine moveq #0,d1
moveq #0,d4
NewData jsr GetData
XLines cmp.b #0,d2
bmi rpx
jsr Copy
jmp erp
rpx jsr Repeat
erp cmp.w d6,d1
bmi NewData
rts
Copy addq.w #1,d1
add.w d2,d1
move.w d2,d5
cmore btst #0,d4
bne codd
jsr GetData
or.b d2,(a5) *
jmp ecod
codd jsr GetData
or.w d2,(a5)+ *
ecod addq.w #1,d4
dbf d5,cmore
rts
Repeat neg.b d2
addq.w #1,d1
add.w d2,d1
move.w d2,d5
jsr GetData
rmore btst #0,d4
bne rodd
or.b d2,(a5) *
jmp erod
rodd or.w d2,(a5)+ *
erod addq.w #1,d4
dbf d5,rmore
rts
GetData move.w (a0),d2
btst #0,d3
bne OddData
lsr.w #8,d2
and.w #$00FF,d2
addq.b #1,d3
rts
OddData and.w #$00FF,d2
addq.b #1,d3
addq.l #2,a0
rts
***************************************************************************
LINE MOVEM.L D0-D7/A0-A6,-(SP)
and.l #$0000FFFF,d0
sub.w d0,d2
bmi xneg
sub.w d1,d3
bmi yneg
cmp.w d3,d2
bmi ygtx
moveq.w #17,d5
bra line
ygtx exg d2,d3
moveq.w #1,d5
bra line
yneg neg.w d3
cmp.w d3,d2
bmi ynygtx
moveq.w #25,d5
bra line
ynygtx exg d2,d3
moveq.w #5,d5
bra line
xneg neg.w d2
sub.w d1,d3
bmi xyneg
cmp.w d3,d2
bmi xnygtx
moveq.w #21,d5
bra line
xnygtx exg d2,d3
moveq.w #9,d5
bra line
xyneg neg.w d3
cmp.w d3,d2
bmi xynygtx
moveq.w #29,d5
bra line
xynygtx exg d2,d3
moveq.w #13,d5
line mulu.w #48,d1
ror.l #4,d0
add.w d0,d0
add.w d1,a0
add.w d0,a0
swap d0
or.w d6,d0
lsl.w #2,d3
add.w d2,d2
move.w d2,d1
lsl.w #5,d1
add.w #$42,d1
BWL1 btst.b #6,$DFF002
bne BWL1
move.w d3,$DFF062
sub.w d2,d3
ext.l d3
move.l d3,$DFF050
bpl over
or.w #$0040,d5
over move.w d0,$DFF040
move.w d5,$DFF042
move.w #48,$DFF060
move.w #48,$DFF066
sub.w d2,d3
move.w d3,$DFF064
move.w #$8000,$DFF074
move.l #-1,$DFF044
move.l a0,$DFF048
move.l a0,$DFF054
move.w d1,$DFF058
BWL2 btst.b #6,$DFF002
bne BWL2
move.l #$FFFF0000,$DFF044 BLTAFWM
move.l #$002C0024,$DFF060 BLTxMOD
move.l #$0024002C,$DFF064 BLTxMOD
MOVEM.L (SP)+,D0-D7/A0-A6
rts
**************************************************************************
NEWPAL lea $DFF180,a2
moveq #31,d0
npl1 move.w (a1)+,(a2)+
dbf d0,npl1
rts
***************************************************************************
CLRBACK move.l _BckGrnd1,a0
move.l _BckGrnd2,a1
move.w #16750,d0
cb0 move.l #0,(a0)+
move.l #0,(a1)+
dbf d0,cb0
rts
**************************************************************************
DRWSTRT move.l _BckGrnd1,a0
move.l _BckGrnd2,a1
move.l _BackBuff,a3
move.w #1169,d0
ds0 move.w #11,d1
ds1 move.l (a3),(a1)+
move.l (a3)+,(a0)+
dbf d1,ds1
add.w #208,a3
dbf d0,ds0
rts
**************************************************************************
CLRBOTS move.l _BckGrnd1,d1
add.l #150000,d1
BWC btst.b #6,$DFF002
bne BWC
move.w #0,$DFF042 BLTCON1
move.w #$0100,$DFF040 BLTCON0
move.w #0,$DFF066 BLTDMOD
move.l d1,$DFF054 BLTDPT
move.w #$8032,$DFF058 BLTSIZE Current erases 512 x 100
move.l _BckGrnd2,d1
add.l #150000,d1
BWD btst.b #6,$DFF002
bne BWD
move.w #0,$DFF042
move.w #$0100,$DFF040
move.w #0,$DFF066
move.l d1,$DFF054
move.w #$8032,$DFF058
rts
***************************************************************************
FADEIN lea ColBuf,a2
move.w #16,d6
fi0 move.l #0,(a2)+
dbf d6,fi0
move.w #16,d7
fi1 lea $DFF180,a1
lea ColBuf,a2
move.l a0,a3
move.w #0,d6
fi2 move.w (a2),d1
move.w (a3)+,d4
move.w d1,d2
and.w #$000F,d2
move.w d4,d5
and.w #$000F,d5
cmp.w d2,d5
beq fi3
add.w #1,d2
fi3 move.w d1,d3
and.w #$00F0,d3
move.w d4,d5
and.w #$00F0,d5
cmp.w d3,d5
beq fi4
lsr.w #4,d3
add.w #1,d3
lsl.w #4,d3
fi4 and.w #$0F00,d1
and.w #$0F00,d4
cmp.w d1,d4
beq fi5
lsr.w #8,d1
add.w #1,d1
lsl.w #8,d1
fi5 or.w d3,d2
or.w d2,d1
move.w d1,(a1)+
move.w d1,(a2)+
add.w #1,d6
cmp.w #32,d6
blt fi2
move.w #4,d0
jsr WAIT
dbf d7,fi1
rts
***************************************************************************
FADEOUT move.l a0,a1
lea ColBuf,a2
move.w #16,d6
fo0 move.l (a1)+,(a2)+
dbf d6,fo0
move.w #16,d7
fo1 lea $DFF180,a1
lea ColBuf,a2
move.w #0,d6
fo2 move.w (a2),d1
move.w d1,d2
and.w #$000F,d2
beq fo3
sub.w #1,d2
fo3 move.w d1,d3
and.w #$00F0,d3
beq fo4
lsr.w #4,d3
sub.w #1,d3
lsl.w #4,d3
fo4 and.w #$0F00,d1
beq fo5
lsr.w #8,d1
sub.w #1,d1
lsl.w #8,d1
fo5 or.w d2,d1
or.w d3,d1
move.w d1,(a1)+
move.w d1,(a2)+
add.w #1,d6
cmp.w #32,d6
blt fo2
move.w #2,d0
jsr WAIT
dbf d7,fo1
rts
**************************************************************************
WAIT move.b $DFF006,d1
cmp.b #$FF,d1
beq WAIT
jsr DELAY
dbf d0,WAIT
rts
DELAY move.b $DFF006,d1
cmp.b #$FF,d1
bne DELAY
rts
**************************************************************************
GMOVER move.w $BFE000,d0
btst #7,d0
bne GMOVER
move.w #2,d0
jmp QUIT Return to master program
|