base:balloonacy_ii
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:balloonacy_ii [2015-04-17 04:30] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Here is the whole source code to the game Balloonacy 2. Please note, you will need to extract the source objects from the original game. :) | ||
+ | < | ||
+ | =================================================== | ||
+ | ; | ||
+ | ;the gamecode | ||
+ | ; | ||
+ | ;declare variables | ||
+ | |||
+ | sync = $02 ; | ||
+ | charpointer = $03 ;The timer for the animation | ||
+ | delaypointer = $04 ;Delay of the balloon rising | ||
+ | animcounter1 = $05 ; | ||
+ | animdelay1 = $06 ; | ||
+ | p1dead = $22 ; | ||
+ | failsafe = $08 ; | ||
+ | gotkey = $09 ;Key collect switch | ||
+ | dooropen = $0b ;Door open switch | ||
+ | animcounter2 = $0c | ||
+ | animdelay2 = $0d | ||
+ | animdelay3 = $18 | ||
+ | animcounter3 = $19 | ||
+ | enemydir1 = $0e | ||
+ | enemydir2 = $0f | ||
+ | enemydir3 = $10 | ||
+ | enemydir4 = $11 | ||
+ | level = $12 | ||
+ | lives = $13 | ||
+ | defaultxpos = $14 | ||
+ | defaultypos = $15 | ||
+ | halfspeed1 = $16 | ||
+ | halfspeed2 = $17 | ||
+ | xpause = $18 | ||
+ | objpos = $0340 ; | ||
+ | keycollision = $0350 ; | ||
+ | doorcollision = $03f0 | ||
+ | lockcollision = $0370 | ||
+ | badcollision = $0380 | ||
+ | message = $5000 | ||
+ | flashdelays = $19 | ||
+ | keydefaultx = $1a | ||
+ | keydefaulty = $1b | ||
+ | gamepause = $1c | ||
+ | |||
+ | initmusic = $7000 | ||
+ | playmusic = $7003 | ||
+ | |||
+ | |||
+ | ;initialize everything | ||
+ | |||
+ | |||
+ | |||
+ | processor 6502 | ||
+ | org $3000 | ||
+ | |||
+ | lda #$08 | ||
+ | jsr $ffd2 | ||
+ | lda #$fc | ||
+ | sta $0328 ;Disable RUN+RESTORE keys | ||
+ | |||
+ | ;Code here represents the title screen | ||
+ | |||
+ | title: | ||
+ | lda #$08 | ||
+ | lda #$00 | ||
+ | sta $d015 | ||
+ | | ||
+ | lda #$00 | ||
+ | sta xpause | ||
+ | | ||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | |||
+ | lda #$00 | ||
+ | sta flashdelays | ||
+ | sta $d418 | ||
+ | sta $d019 | ||
+ | sta $d01a | ||
+ | lda #$08 | ||
+ | sta $d016 | ||
+ | lda #$31 | ||
+ | sta $0314 | ||
+ | lda #$ea | ||
+ | sta $0315 | ||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | ldx #$00 | ||
+ | clr: | ||
+ | sta $0400,x | ||
+ | sta $0500,x | ||
+ | sta $0600,x | ||
+ | sta $06e8,x | ||
+ | inx | ||
+ | bne clr | ||
+ | lda #< | ||
+ | sta read+1 | ||
+ | lda #> | ||
+ | sta read+2 | ||
+ | ldx #$00 | ||
+ | loopwaiting: | ||
+ | loopwaiting2: | ||
+ | bne loopwaiting2 | ||
+ | inx | ||
+ | bne loopwaiting | ||
+ | lda #$0b | ||
+ | sta $d011 | ||
+ | ;display msck screen | ||
+ | |||
+ | jsr $c6dc ;transfer charset to $0800-$0fff | ||
+ | jsr $c708 ;setup charset and defined msck colours | ||
+ | |||
+ | ;clear screen | ||
+ | ldx #$00 | ||
+ | stx $cd6c | ||
+ | stx $cd6d | ||
+ | stx $cd6e | ||
+ | stx $cd6f | ||
+ | |||
+ | jsr $cd40 ;clear screen area | ||
+ | |||
+ | lda #$00 | ||
+ | jsr $ce02 | ||
+ | sei | ||
+ | ldx #$00 | ||
+ | paintbitmap: | ||
+ | sta $d800,x | ||
+ | lda #$20 | ||
+ | sta $5800+9*40, | ||
+ | |||
+ | sta $5800+9*40, | ||
+ | |||
+ | lda $5800+1*40, | ||
+ | sta $d800+1*40, | ||
+ | lda $5800+2*40, | ||
+ | sta $d800+2*40, | ||
+ | lda $5800+3*40, | ||
+ | sta $d800+3*40, | ||
+ | lda $5800+4*40, | ||
+ | sta $d800+4*40, | ||
+ | lda $5800+5*40, | ||
+ | sta $d800+5*40, | ||
+ | lda $5800+6*40, | ||
+ | sta $d800+6*40, | ||
+ | lda $5800+7*40, | ||
+ | sta $d800+7*40, | ||
+ | |||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne paintbitmap | ||
+ | lda #<irq01 | ||
+ | sta $0314 | ||
+ | lda #>irq01 | ||
+ | sta $0315 | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | lda #$7f | ||
+ | sta $dc0d | ||
+ | lda #$01 | ||
+ | sta $d01a | ||
+ | lda #$00 | ||
+ | sta gamepause | ||
+ | lda #$00 | ||
+ | jsr initmusic | ||
+ | lda #$00 | ||
+ | sta $8300 | ||
+ | sta $8301 | ||
+ | sta $8302 | ||
+ | sta $8303 | ||
+ | sta $8304 | ||
+ | |||
+ | |||
+ | |||
+ | cli | ||
+ | |||
+ | |||
+ | holdhere1: | ||
+ | sta sync | ||
+ | lda sync | ||
+ | syncwait2: | ||
+ | beq syncwait2 | ||
+ | jsr checkcheat | ||
+ | jsr doscroll | ||
+ | jsr rolltit | ||
+ | lda $dc00 | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs holdhere1 | ||
+ | jmp game | ||
+ | |||
+ | checkcheat: | ||
+ | cmp #$53 | ||
+ | beq unlock1 | ||
+ | cmp #$45 | ||
+ | beq unlock2 | ||
+ | cmp #$55 | ||
+ | beq unlock3 | ||
+ | cmp #$43 | ||
+ | beq unlock4 | ||
+ | cmp #$4b | ||
+ | beq unlock5 | ||
+ | jmp checkv2 | ||
+ | |||
+ | unlock1 lda #$01 | ||
+ | sta $8300 | ||
+ | rts | ||
+ | unlock2 lda #$01 | ||
+ | sta $8301 | ||
+ | rts | ||
+ | unlock3 lda #$01 | ||
+ | sta $8302 | ||
+ | rts | ||
+ | unlock4 lda #$01 | ||
+ | sta $8303 | ||
+ | rts | ||
+ | unlock5 lda #$01 | ||
+ | sta $8304 | ||
+ | rts | ||
+ | |||
+ | checkv2 lda $8300 | ||
+ | cmp #$01 | ||
+ | beq open1 | ||
+ | rts | ||
+ | open1 lda $8301 | ||
+ | cmp #$01 | ||
+ | beq open2 | ||
+ | rts | ||
+ | open2 lda $8302 | ||
+ | cmp #$01 | ||
+ | beq open3 | ||
+ | rts | ||
+ | open3 lda $8303 | ||
+ | cmp #$01 | ||
+ | beq open4 | ||
+ | rts | ||
+ | open4 lda $8304 | ||
+ | cmp #$01 | ||
+ | beq cheaton | ||
+ | rts | ||
+ | |||
+ | cheaton | ||
+ | lda #$2c | ||
+ | sta livesleft | ||
+ | sta time | ||
+ | ldx #$00 | ||
+ | cmess lda cheatmessage, | ||
+ | sec | ||
+ | sbc #$40 | ||
+ | nowayman sta $0568,x | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne cmess | ||
+ | rts | ||
+ | |||
+ | ;Do the scrolling message | ||
+ | |||
+ | doscroll: | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | and #$07 | ||
+ | sta xpause | ||
+ | bcs endscroll | ||
+ | ldx #$00 | ||
+ | wrapscroll: | ||
+ | sta $0798,x | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne wrapscroll | ||
+ | read: lda $0798+$27 | ||
+ | cmp #$00 | ||
+ | bne endpoint | ||
+ | lda #< | ||
+ | sta read+1 | ||
+ | lda #> | ||
+ | sta read+2 | ||
+ | jmp read | ||
+ | endpoint: | ||
+ | inc read+1 | ||
+ | lda read+1 | ||
+ | cmp #$00 | ||
+ | bne endscroll | ||
+ | inc read+2 | ||
+ | endscroll: | ||
+ | |||
+ | rolltit: | ||
+ | lda flashdelays | ||
+ | cmp #$03 | ||
+ | beq fok | ||
+ | rts | ||
+ | fok: lda #$00 | ||
+ | sta flashdelays | ||
+ | lda titlecolours+0 | ||
+ | sta titlecolours+23 | ||
+ | ldx #$00 | ||
+ | wrapcolours: | ||
+ | sta titlecolours+0, | ||
+ | inx | ||
+ | cpx #24 | ||
+ | bne wrapcolours | ||
+ | ldx #$00 | ||
+ | pastetochar: | ||
+ | sta $d968,x | ||
+ | lda titlecolours+4 | ||
+ | sta $d9e0,x | ||
+ | lda titlecolours+8 | ||
+ | sta $da58,x | ||
+ | lda titlecolours+12 | ||
+ | sta $dad0,x | ||
+ | lda titlecolours+14 | ||
+ | sta $db20,x | ||
+ | lda titlecolours+16 | ||
+ | sta $db98,x | ||
+ | lda #$00 | ||
+ | sta $d968-$28,x | ||
+ | inx | ||
+ | cpx #40 | ||
+ | bne pastetochar | ||
+ | rts | ||
+ | |||
+ | |||
+ | irq01: inc $d019 | ||
+ | lda #$00 | ||
+ | sta $d012 | ||
+ | |||
+ | lda #$03 | ||
+ | sta $dd00 | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | lda xpause | ||
+ | sta $d016 | ||
+ | lda #$12 | ||
+ | sta $d018 | ||
+ | |||
+ | lda #<irq2 | ||
+ | sta $0314 | ||
+ | lda #>irq2 | ||
+ | sta $0315 | ||
+ | jmp $ea31 | ||
+ | |||
+ | irq2: inc $d019 | ||
+ | lda #$78 | ||
+ | sta $d012 | ||
+ | lda #$02 | ||
+ | sta $dd00 | ||
+ | lda #$3b | ||
+ | sta $d011 | ||
+ | lda #$18 | ||
+ | sta $d016 | ||
+ | lda #$78 | ||
+ | sta $d018 | ||
+ | lda #<irq03 | ||
+ | sta $0314 | ||
+ | lda #>irq03 | ||
+ | sta $0315 | ||
+ | jmp $ea31 | ||
+ | irq03: inc $d019 | ||
+ | lda #$e0 | ||
+ | sta $d012 | ||
+ | nop | ||
+ | nop | ||
+ | nop | ||
+ | nop | ||
+ | nop | ||
+ | nop | ||
+ | nop | ||
+ | lda #$03 | ||
+ | sta $dd00 | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | lda #$08 | ||
+ | sta $d016 | ||
+ | lda #$12 | ||
+ | sta $d018 | ||
+ | lda #<irq01 | ||
+ | sta $0314 | ||
+ | lda #>irq01 | ||
+ | sta $0315 | ||
+ | lda #$00 | ||
+ | jsr playmusic | ||
+ | lda #$01 | ||
+ | sta sync | ||
+ | irqcont: | ||
+ | |||
+ | |||
+ | titlecolours: | ||
+ | dc.b $07, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | game: | ||
+ | default: | ||
+ | |||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | |||
+ | lda #$00 | ||
+ | sta $d418 | ||
+ | sta $d019 | ||
+ | sta $d01a | ||
+ | lda #$31 | ||
+ | sta $0314 | ||
+ | lda #$ea | ||
+ | sta $0315 | ||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | lda #$0b | ||
+ | sta $d011 | ||
+ | ;display msck screen | ||
+ | |||
+ | jsr $c6dc ;transfer charset to $0800-$0fff | ||
+ | jsr $c708 ;setup charset and defined msck colours | ||
+ | |||
+ | ;clear screen | ||
+ | ldx #$00 | ||
+ | stx $cd6c | ||
+ | stx $cd6d | ||
+ | stx $cd6e | ||
+ | stx $cd6f | ||
+ | |||
+ | jsr $cd40 ;clear screen area | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | |||
+ | lda #$01 | ||
+ | sta level | ||
+ | lda #$03 | ||
+ | sta lives | ||
+ | ldx #$00 | ||
+ | defaultcopy: | ||
+ | sta statuscopy, | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne defaultcopy | ||
+ | |||
+ | |||
+ | maingameloop: | ||
+ | cld | ||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | |||
+ | lda #$00 | ||
+ | sta $d418 | ||
+ | sta $d019 | ||
+ | sta $d01a | ||
+ | lda #$31 | ||
+ | sta $0314 | ||
+ | lda #$ea | ||
+ | sta $0315 | ||
+ | lda #$81 | ||
+ | sta $dc0d | ||
+ | lda #$0b | ||
+ | sta $d011 | ||
+ | ldx #$00 | ||
+ | clearfunction: | ||
+ | sta $c800,x | ||
+ | sta $c900,x | ||
+ | sta $ca00,x | ||
+ | sta $cae8,x | ||
+ | sta $0400,x | ||
+ | sta $0500,x | ||
+ | sta $0600,x | ||
+ | sta $06e8,x | ||
+ | inx | ||
+ | bne clearfunction | ||
+ | lda #$8f | ||
+ | sta $07fc | ||
+ | sta $07fd | ||
+ | sta $07fe | ||
+ | sta $07ff | ||
+ | |||
+ | ;Check the level the player is at | ||
+ | lda level | ||
+ | cmp #$01 | ||
+ | bne chkl2 | ||
+ | jmp drawlev1 | ||
+ | chkl2: cmp #$02 | ||
+ | bne chkl3 | ||
+ | jmp drawlev2 | ||
+ | chkl3: cmp #$03 | ||
+ | bne chkl4 | ||
+ | jmp drawlev3 | ||
+ | chkl4: cmp #$04 | ||
+ | bne chkl5 | ||
+ | jmp drawlev4 | ||
+ | chkl5: cmp #$05 | ||
+ | bne chkl6 | ||
+ | jmp drawlev5 | ||
+ | chkl6: cmp #$06 | ||
+ | bne chkl7 | ||
+ | jmp drawlev6 | ||
+ | chkl7: cmp #$07 | ||
+ | bne chkl8 | ||
+ | jmp drawlev7 | ||
+ | chkl8: cmp #$08 | ||
+ | bne chkl9 | ||
+ | jmp drawlev8 | ||
+ | chkl9: cmp #$09 | ||
+ | bne chkl10 | ||
+ | jmp drawlev9 | ||
+ | chkl10: | ||
+ | bne chkl11 | ||
+ | jmp drawlev10 | ||
+ | chkl11: | ||
+ | bne chkl12 | ||
+ | jmp drawlev11 | ||
+ | chkl12: | ||
+ | bne chkl13 | ||
+ | jmp drawlev12 | ||
+ | chkl13: | ||
+ | bne chkl14 | ||
+ | jmp drawlev13 | ||
+ | chkl14: | ||
+ | bne chkl15 | ||
+ | jmp drawlev14 | ||
+ | chkl15: | ||
+ | bne chkl16 | ||
+ | jmp drawlev15 | ||
+ | chkl16: | ||
+ | bne endofgame | ||
+ | jmp drawlev16 | ||
+ | endofgame lda #$00 | ||
+ | sta $d020 | ||
+ | sta $d021 | ||
+ | lda #$0b | ||
+ | sta $d011 | ||
+ | ldx #$00 | ||
+ | waitmain1: | ||
+ | waitmain2: | ||
+ | bne waitmain2 | ||
+ | inx | ||
+ | bne waitmain1 | ||
+ | lda #$00 | ||
+ | sta $d015 | ||
+ | ldx #$00 | ||
+ | copyscreens: | ||
+ | sta $0400,x | ||
+ | lda $6d00,x | ||
+ | sta $0500,x | ||
+ | lda $6e00,x | ||
+ | sta $0600,x | ||
+ | lda $6f00,x | ||
+ | sta $0700,x | ||
+ | lda #$07 | ||
+ | sta $d800,x | ||
+ | sta $d900,x | ||
+ | sta $da00,x | ||
+ | sta $dae8,x | ||
+ | inx | ||
+ | bne copyscreens | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | |||
+ | lda #$03 | ||
+ | jsr initmusic | ||
+ | hitfireend: | ||
+ | ras1: cmp $d012 | ||
+ | bne ras1 | ||
+ | jsr colroll | ||
+ | jsr playmusic | ||
+ | ldx #$00 | ||
+ | loopcolors: | ||
+ | sta $d8f0,x | ||
+ | lda $d808 | ||
+ | sta $d968,x | ||
+ | lda $d80c | ||
+ | sta $d9b8,x | ||
+ | lda $d810 | ||
+ | sta $da30,x | ||
+ | lda $d814 | ||
+ | sta $daa8,x | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne loopcolors | ||
+ | lda $dc00 | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs hitfireend | ||
+ | jmp title | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | drawlev1: | ||
+ | jsr $ce02 | ||
+ | lda #$06 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l1postable: | ||
+ | dc.b $76, | ||
+ | dc.b $96, | ||
+ | dc.b $16, | ||
+ | dc.b $84, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | l1coltable: | ||
+ | |||
+ | drawlev2: | ||
+ | jsr $ce02 | ||
+ | lda #$0b | ||
+ | sta $d022 | ||
+ | lda #$0c | ||
+ | sta $d023 | ||
+ | lda #$d0 | ||
+ | sta objpos+$01 | ||
+ | sta defaultypos | ||
+ | lda #$16 | ||
+ | sta defaultxpos | ||
+ | sta objpos+$00 | ||
+ | lda #$96 ;Key | ||
+ | sta objpos+$02 ; | ||
+ | lda #$a8 ; | ||
+ | sta objpos+$03 ; | ||
+ | lda #$7c ; | ||
+ | sta objpos+$04 ;Lock | ||
+ | lda #$c8 ; | ||
+ | sta objpos+$05 ; | ||
+ | lda #$78 | ||
+ | sta objpos+$06 | ||
+ | lda #$48 | ||
+ | sta objpos+$07 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l2postable: | ||
+ | dc.b $94, | ||
+ | dc.b $7c, | ||
+ | dc.b $16, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | l2coltable: | ||
+ | |||
+ | drawlev3: | ||
+ | jsr $ce02 | ||
+ | lda #$02 | ||
+ | sta $d022 | ||
+ | lda #$0a | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l3postable: | ||
+ | dc.b $58, | ||
+ | dc.b $1a, | ||
+ | dc.b $94, | ||
+ | dc.b $78, | ||
+ | dc.b $00, | ||
+ | dc.b $32, | ||
+ | dc.b $00, | ||
+ | l3coltable: | ||
+ | |||
+ | drawlev4: | ||
+ | jsr $ce02 | ||
+ | lda #$04 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | |||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l4postable: | ||
+ | dc.b $94, | ||
+ | dc.b $1a, | ||
+ | dc.b $94, | ||
+ | dc.b $88, | ||
+ | dc.b $00, | ||
+ | dc.b $94, | ||
+ | dc.b $00, | ||
+ | l4coltable: | ||
+ | |||
+ | |||
+ | |||
+ | drawlev5: | ||
+ | jsr $ce02 | ||
+ | lda #$06 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l5postable: | ||
+ | dc.b $94, | ||
+ | dc.b $94, | ||
+ | dc.b $16, | ||
+ | dc.b $80, | ||
+ | dc.b $00, | ||
+ | dc.b $28, | ||
+ | dc.b $00, | ||
+ | l5coltable: | ||
+ | |||
+ | drawlev6: | ||
+ | jsr $ce02 | ||
+ | lda #$0b | ||
+ | sta $d022 | ||
+ | lda #$0c | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l6postable: | ||
+ | dc.b $16, | ||
+ | dc.b $16, | ||
+ | dc.b $94, | ||
+ | dc.b $88, | ||
+ | dc.b $90, | ||
+ | dc.b $26, | ||
+ | dc.b $00, | ||
+ | l6coltable: | ||
+ | |||
+ | drawlev7: | ||
+ | jsr $ce02 | ||
+ | lda #$02 | ||
+ | sta $d022 | ||
+ | lda #$0a | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l7postable: | ||
+ | dc.b $8c, | ||
+ | dc.b $16, | ||
+ | dc.b $94, | ||
+ | dc.b $78, | ||
+ | dc.b $00, | ||
+ | dc.b $38, | ||
+ | dc.b $00, | ||
+ | l7coltable: | ||
+ | |||
+ | drawlev8: | ||
+ | jsr $ce02 | ||
+ | lda #$04 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | |||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l8postable: | ||
+ | dc.b $26, | ||
+ | dc.b $64, | ||
+ | dc.b $16, | ||
+ | dc.b $00, | ||
+ | dc.b $8c, | ||
+ | dc.b $00, | ||
+ | dc.b $00, | ||
+ | l8coltable: | ||
+ | drawlev9: | ||
+ | jsr $ce02 | ||
+ | lda #$06 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l9postable: | ||
+ | dc.b $18, | ||
+ | dc.b $90, | ||
+ | dc.b $16, | ||
+ | dc.b $40, | ||
+ | dc.b $00, | ||
+ | dc.b $68, | ||
+ | dc.b $00, | ||
+ | l9coltable: | ||
+ | |||
+ | jmp carryon | ||
+ | drawlev10: | ||
+ | jsr $ce02 | ||
+ | lda #$0b | ||
+ | sta $d022 | ||
+ | lda #$0c | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l10postable: | ||
+ | dc.b $94, | ||
+ | dc.b $1c, | ||
+ | dc.b $98, | ||
+ | dc.b $38, | ||
+ | dc.b $00, | ||
+ | dc.b $50, | ||
+ | dc.b $00, | ||
+ | l10coltable: | ||
+ | |||
+ | drawlev11: | ||
+ | jsr $ce02 | ||
+ | lda #$02 | ||
+ | sta $d022 | ||
+ | lda #$0a | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l11postable: | ||
+ | dc.b $74, | ||
+ | dc.b $1c, | ||
+ | dc.b $96, | ||
+ | dc.b $38, | ||
+ | dc.b $94, | ||
+ | dc.b $70, | ||
+ | dc.b $00, | ||
+ | l11coltable: | ||
+ | |||
+ | |||
+ | |||
+ | drawlev12: | ||
+ | jsr $ce02 | ||
+ | lda #$04 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l12postable: | ||
+ | dc.b $1c, | ||
+ | dc.b $64, | ||
+ | dc.b $96, | ||
+ | dc.b $00, | ||
+ | dc.b $94, | ||
+ | dc.b $70, | ||
+ | dc.b $00, | ||
+ | l12coltable: | ||
+ | jmp carryon | ||
+ | drawlev13: | ||
+ | jsr $ce02 | ||
+ | lda #$06 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l13postable: | ||
+ | dc.b $96, | ||
+ | dc.b $58, | ||
+ | dc.b $58, | ||
+ | dc.b $38, | ||
+ | dc.b $00, | ||
+ | dc.b $70, | ||
+ | dc.b $00, | ||
+ | l13coltable: | ||
+ | |||
+ | jmp carryon | ||
+ | drawlev14: | ||
+ | jsr $ce02 | ||
+ | lda #$0b | ||
+ | sta $d022 | ||
+ | lda #$0c | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l14postable: | ||
+ | dc.b $90, | ||
+ | dc.b $4c, | ||
+ | dc.b $16, | ||
+ | dc.b $96, | ||
+ | dc.b $66, | ||
+ | dc.b $20, | ||
+ | dc.b $00, | ||
+ | l14coltable: | ||
+ | |||
+ | jmp carryon | ||
+ | drawlev15: | ||
+ | jsr $ce02 | ||
+ | lda #$02 | ||
+ | sta $d022 | ||
+ | lda #$0a | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l15postable: | ||
+ | dc.b $90, | ||
+ | dc.b $54, | ||
+ | dc.b $16, | ||
+ | dc.b $96, | ||
+ | dc.b $00, | ||
+ | dc.b $20, | ||
+ | dc.b $00, | ||
+ | l15coltable: | ||
+ | |||
+ | jmp carryon | ||
+ | drawlev16: | ||
+ | jsr $ce02 | ||
+ | lda #$04 | ||
+ | sta $d022 | ||
+ | lda #$0e | ||
+ | sta $d023 | ||
+ | lda #< | ||
+ | sta readleveltable+1 | ||
+ | lda #> | ||
+ | sta readleveltable+2 | ||
+ | lda #< | ||
+ | sta readcolourtable+1 | ||
+ | lda #> | ||
+ | sta readcolourtable+2 | ||
+ | jmp carryon | ||
+ | |||
+ | l16postable: | ||
+ | dc.b $16, | ||
+ | dc.b $96, | ||
+ | dc.b $54, | ||
+ | dc.b $96, | ||
+ | dc.b $00, | ||
+ | dc.b $20, | ||
+ | dc.b $00, | ||
+ | l16coltable: | ||
+ | jmp carryon | ||
+ | |||
+ | ;Display the status objects | ||
+ | |||
+ | carryon: | ||
+ | readleveltable: | ||
+ | sta objpos+$00, | ||
+ | inx | ||
+ | cpx #$10 | ||
+ | bne readleveltable | ||
+ | ldx #$00 | ||
+ | readcolourtable: | ||
+ | sta $d027,x | ||
+ | inx | ||
+ | cpx #$08 | ||
+ | bne readcolourtable | ||
+ | |||
+ | ldx #$00 | ||
+ | showstatus: | ||
+ | sta $0400,x | ||
+ | lda #$01 | ||
+ | sta $d800,x | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne showstatus | ||
+ | |||
+ | lda objpos+$02 | ||
+ | sta keydefaultx | ||
+ | lda objpos+$03 | ||
+ | sta keydefaulty | ||
+ | |||
+ | |||
+ | lda #$00 | ||
+ | sta enemydir1 | ||
+ | sta enemydir2 | ||
+ | sta enemydir3 | ||
+ | sta enemydir4 | ||
+ | sta halfspeed1 | ||
+ | sta halfspeed2 | ||
+ | sta animdelay3 | ||
+ | sta animcounter3 | ||
+ | |||
+ | lda #$39 | ||
+ | sta $0424 | ||
+ | sta $0425 | ||
+ | sta $0426 | ||
+ | sta $0427 | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | |||
+ | |||
+ | ;Now set up the sprites. | ||
+ | |||
+ | lda #$ff | ||
+ | sta $d015 | ||
+ | sta $d01c | ||
+ | lda #$00 | ||
+ | sta $d01b | ||
+ | lda #$0b | ||
+ | sta $d025 | ||
+ | lda #$01 | ||
+ | sta $d026 | ||
+ | |||
+ | |||
+ | lda objpos+$01 | ||
+ | sta defaultypos | ||
+ | lda objpos+$00 | ||
+ | sta defaultxpos | ||
+ | |||
+ | ;lda #$16 | ||
+ | ;sta objpos+$00 | ||
+ | ;lda #$d0 | ||
+ | ;sta objpos+$01 | ||
+ | ;lda #$d0 | ||
+ | ;sta objpos+$03 | ||
+ | ;lda #$94 | ||
+ | ;sta objpos+$02 | ||
+ | ;lda #$58 | ||
+ | ;sta objpos+$04 | ||
+ | ;lda #$90 | ||
+ | ;sta objpos+$05 | ||
+ | lda #$80 | ||
+ | sta $07f8 | ||
+ | lda #$89 | ||
+ | sta $07f9 | ||
+ | lda #$8a | ||
+ | sta $07fa | ||
+ | lda #$97 | ||
+ | sta $07fb | ||
+ | lda #$0a | ||
+ | sta $d02a | ||
+ | lda #$09 | ||
+ | sta lives | ||
+ | |||
+ | lda #$00 | ||
+ | sta charpointer | ||
+ | sta delaypointer | ||
+ | sta animcounter1 | ||
+ | sta animdelay1 | ||
+ | sta p1dead | ||
+ | sta gotkey | ||
+ | sta dooropen | ||
+ | sta animcounter2 | ||
+ | sta animdelay2 | ||
+ | sta enemydir1 | ||
+ | lda #$02 | ||
+ | sta failsafe | ||
+ | sei | ||
+ | cld | ||
+ | lda #<irq1 | ||
+ | ldx #>irq1 | ||
+ | ldy #$00 | ||
+ | sta $0314 | ||
+ | stx $0315 | ||
+ | sty $d012 | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | lda #$7f | ||
+ | sta $dc0d | ||
+ | lda #$01 | ||
+ | sta $d01a | ||
+ | lda #$01 | ||
+ | jsr initmusic | ||
+ | |||
+ | cli | ||
+ | gameloop: | ||
+ | |||
+ | ;jsr $c069 | ||
+ | ;jsr $c76b | ||
+ | |||
+ | main: lda #$00 | ||
+ | sta sync | ||
+ | syncwait: | ||
+ | beq syncwait | ||
+ | jsr checkkeys | ||
+ | jsr animenemies | ||
+ | jsr moveenemy1 | ||
+ | jsr movenemy2 | ||
+ | jsr moveenemy3 | ||
+ | jsr movenemy4 | ||
+ | jsr dolazer | ||
+ | jsr expand | ||
+ | jsr moveballoon | ||
+ | jsr animate | ||
+ | jsr checkplayer | ||
+ | jsr checkdoor | ||
+ | jsr time | ||
+ | jmp main | ||
+ | |||
+ | ;Check keys for pause mode | ||
+ | checkkeys | ||
+ | lda $dc01 | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs other | ||
+ | jmp paused | ||
+ | other rts | ||
+ | paused | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs morekey | ||
+ | jmp title | ||
+ | morekey lsr | ||
+ | lsr | ||
+ | bcs paused | ||
+ | rts | ||
+ | |||
+ | noquit lda $dc00 | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs paused | ||
+ | rts | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ;This is the part which checks for the player. To see whether | ||
+ | ;or not alive. If dead, ignore joystick and collisions. | ||
+ | ;If alive then player can continue controlling the player | ||
+ | |||
+ | checkplayer: | ||
+ | cmp #$01 | ||
+ | beq playerisdead | ||
+ | |||
+ | jsr readjoy | ||
+ | jsr backgroundcol | ||
+ | jsr readkeycollision | ||
+ | jsr checkkey | ||
+ | jsr readlockcollision | ||
+ | jsr readdoorcollision | ||
+ | jsr readbadcollision | ||
+ | |||
+ | |||
+ | lda p1aliveframe | ||
+ | sta $07f8 | ||
+ | rts | ||
+ | playerisdead: | ||
+ | rts | ||
+ | |||
+ | |||
+ | ;Our funny balloon bursting animation routine. | ||
+ | |||
+ | burstballoon inc animdelay1 | ||
+ | lda animdelay1 | ||
+ | cmp #$0c | ||
+ | beq okdoit0 | ||
+ | rts | ||
+ | okdoit0: | ||
+ | sta animdelay1 | ||
+ | ldx animcounter1 | ||
+ | lda p1deadtable, | ||
+ | sta $07f8 | ||
+ | inx | ||
+ | cpx #5 | ||
+ | beq resetframe0 | ||
+ | inc animcounter1 | ||
+ | rts | ||
+ | resetframe0: | ||
+ | stx animcounter1 | ||
+ | livesleft: | ||
+ | lda $041e | ||
+ | |||
+ | cmp #$30 | ||
+ | beq gameover | ||
+ | |||
+ | lda defaultypos | ||
+ | sta objpos+$01 | ||
+ | lda defaultxpos | ||
+ | sta objpos+$00 | ||
+ | lda dooropen | ||
+ | cmp #$01 | ||
+ | beq noneed | ||
+ | lda keydefaultx | ||
+ | sta objpos+$02 | ||
+ | lda keydefaulty | ||
+ | sta objpos+$03 | ||
+ | |||
+ | noneed lda #$02 | ||
+ | sta failsafe | ||
+ | lda #$00 | ||
+ | sta gotkey | ||
+ | lda #$00 | ||
+ | sta p1dead | ||
+ | rts | ||
+ | |||
+ | gameover: | ||
+ | sta $d015 | ||
+ | |||
+ | lda #$03 | ||
+ | jsr initmusic | ||
+ | pressfire ldx #$00 | ||
+ | showloser: | ||
+ | sta $05ef,x | ||
+ | lda $d800 | ||
+ | sta $d9ef,x | ||
+ | inx | ||
+ | cpx #$09 | ||
+ | bne showloser | ||
+ | lda $dc00 | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs pressfire | ||
+ | jmp $3000 | ||
+ | holdhere: | ||
+ | |||
+ | |||
+ | irq1: inc $d019 | ||
+ | jsr colroll | ||
+ | lda #$1b | ||
+ | sta $d011 | ||
+ | lda #$03 | ||
+ | sta $dd00 | ||
+ | lda #$01 | ||
+ | sta sync | ||
+ | jsr playmusic | ||
+ | jmp $ea31 | ||
+ | |||
+ | ; | ||
+ | ;Animate the deadly background lazers, using charpointer | ||
+ | |||
+ | dolazer: | ||
+ | lda charpointer | ||
+ | cmp #$0e | ||
+ | bne endcharpointer | ||
+ | lda #$00 | ||
+ | sta charpointer | ||
+ | jsr animatechar | ||
+ | endcharpointer: | ||
+ | animatechar: | ||
+ | wrapchar: | ||
+ | sta $09f8+$40,x | ||
+ | inx | ||
+ | cpx #$08 | ||
+ | bne wrapchar | ||
+ | ldx #$00 | ||
+ | wrapchar2: | ||
+ | sta $09f8,x | ||
+ | inx | ||
+ | cpx #$40 | ||
+ | bne wrapchar2 | ||
+ | rts | ||
+ | |||
+ | ;Roll those colours across the score bar, just like the original Balloonacy did | ||
+ | |||
+ | colroll: | ||
+ | sta statuscolors+$28 | ||
+ | ldx #$00 | ||
+ | wrapcolors: | ||
+ | sta statuscolors+$00, | ||
+ | lda statuscolors+$00, | ||
+ | sta $d800,x | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne wrapcolors | ||
+ | rts | ||
+ | |||
+ | ;Expand the size of the sprite areas | ||
+ | |||
+ | expand: | ||
+ | expandloop: | ||
+ | sta $d001,x | ||
+ | lda objpos+$00, | ||
+ | asl | ||
+ | ror $d010 | ||
+ | sta $d000,x | ||
+ | inx | ||
+ | inx | ||
+ | cpx #$10 | ||
+ | bne expandloop | ||
+ | rts | ||
+ | |||
+ | ;Move the player ship, according to joystick direction | ||
+ | |||
+ | readjoy: | ||
+ | lsr | ||
+ | bcs down | ||
+ | ldx objpos+$01 | ||
+ | dex | ||
+ | dex | ||
+ | cpx #$48 | ||
+ | bcs setup | ||
+ | ldx #$48 | ||
+ | setup: stx objpos+$01 | ||
+ | down: lsr | ||
+ | bcs left | ||
+ | ldx objpos+$01 | ||
+ | inx | ||
+ | inx | ||
+ | cpx #$e8 | ||
+ | bcc setdown | ||
+ | ldx #$e8 | ||
+ | setdown: | ||
+ | left: lsr | ||
+ | bcs right | ||
+ | ldx objpos+$00 | ||
+ | dex | ||
+ | cpx #$0c | ||
+ | bcs setleft | ||
+ | ldx #$0c | ||
+ | setleft: | ||
+ | right: lsr | ||
+ | bcs nojoy | ||
+ | ldx objpos+$00 | ||
+ | inx | ||
+ | cpx #$a2 | ||
+ | bcc setright | ||
+ | ldx #$a2 | ||
+ | setright: | ||
+ | nojoy: rts | ||
+ | |||
+ | |||
+ | |||
+ | ;Move the balloon up slowly | ||
+ | |||
+ | moveballoon: | ||
+ | lda delaypointer | ||
+ | cmp #$08 | ||
+ | beq resetdelay | ||
+ | rts | ||
+ | resetdelay: | ||
+ | sta delaypointer | ||
+ | lda objpos+$01 | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | sta objpos+$01 | ||
+ | rts | ||
+ | |||
+ | ;Out multipurpose animation thingy | ||
+ | |||
+ | animate: | ||
+ | rts | ||
+ | |||
+ | ;Animation sequence for the player alive | ||
+ | |||
+ | animplayeralive: | ||
+ | lda animdelay1 | ||
+ | cmp #$0c | ||
+ | beq okdoit1 | ||
+ | rts | ||
+ | okdoit1: | ||
+ | sta animdelay1 | ||
+ | ldx animcounter1 | ||
+ | lda p1alivetable, | ||
+ | sta p1aliveframe | ||
+ | inx | ||
+ | cpx #4 | ||
+ | beq resetframe1 | ||
+ | inc animcounter1 | ||
+ | rts | ||
+ | resetframe1: | ||
+ | stx animcounter1 | ||
+ | rts | ||
+ | |||
+ | ;Player sprite to background collision. | ||
+ | |||
+ | backgroundcol: | ||
+ | lsr | ||
+ | bcc alive | ||
+ | lda #$00 | ||
+ | sta animdelay1 | ||
+ | sta animcounter1 | ||
+ | dec failsafe | ||
+ | bne alive | ||
+ | ldx #$00 | ||
+ | lda #$00 | ||
+ | stx animcounter1 | ||
+ | sta animdelay1 | ||
+ | lda #$01 | ||
+ | sta p1dead | ||
+ | lda #$01 | ||
+ | sta p1dead | ||
+ | rts | ||
+ | alive: | ||
+ | |||
+ | ;Read routines for the player to key collision. | ||
+ | |||
+ | readkeycollision: | ||
+ | lda objpos+$00 | ||
+ | sec | ||
+ | sbc #$06 | ||
+ | sta keycollision+0 | ||
+ | clc | ||
+ | adc #$0c | ||
+ | sta keycollision+1 | ||
+ | lda objpos+$01 | ||
+ | sec | ||
+ | sbc #$0c | ||
+ | sta keycollision+2 | ||
+ | clc | ||
+ | adc #$18 | ||
+ | sta keycollision+3 | ||
+ | |||
+ | lda objpos+$02 | ||
+ | cmp keycollision+0 | ||
+ | bcc nokeycol | ||
+ | cmp keycollision+1 | ||
+ | bcs nokeycol | ||
+ | lda objpos+$03 | ||
+ | cmp keycollision+2 | ||
+ | bcc nokeycol | ||
+ | cmp keycollision+3 | ||
+ | bcs nokeycol | ||
+ | lda #$01 | ||
+ | sta gotkey | ||
+ | nokeycol: | ||
+ | |||
+ | ;Check whether or not the play has got the key if so, then tie the | ||
+ | ;key to the balloon | ||
+ | |||
+ | checkkey: | ||
+ | cmp #$01 | ||
+ | beq ihavethekey | ||
+ | rts | ||
+ | ihavethekey: | ||
+ | sta objpos+$02 | ||
+ | lda objpos+$01 | ||
+ | clc | ||
+ | adc #$08 | ||
+ | sta objpos+$03 | ||
+ | rts | ||
+ | |||
+ | ;Collision routine, where the key touches the lock. | ||
+ | |||
+ | readlockcollision: | ||
+ | lda objpos+2 | ||
+ | sec | ||
+ | sbc #$06 | ||
+ | sta lockcollision+0 | ||
+ | clc | ||
+ | adc #$0c | ||
+ | sta lockcollision+1 | ||
+ | lda objpos+3 | ||
+ | sec | ||
+ | sbc #$0c | ||
+ | sta lockcollision+2 | ||
+ | clc | ||
+ | adc #$18 | ||
+ | sta lockcollision+3 | ||
+ | lda objpos+4 | ||
+ | cmp lockcollision+0 | ||
+ | bcc nolockcol | ||
+ | cmp lockcollision+1 | ||
+ | bcs nolockcol | ||
+ | lda objpos+5 | ||
+ | cmp lockcollision+2 | ||
+ | bcc nolockcol | ||
+ | cmp lockcollision+3 | ||
+ | bcs nolockcol | ||
+ | lda #$01 | ||
+ | sta dooropen | ||
+ | lda #$00 | ||
+ | sta objpos+2 | ||
+ | sta objpos+3 | ||
+ | sta gotkey | ||
+ | nolockcol: | ||
+ | |||
+ | ;Check the door. If the door has a lazer switched on or | ||
+ | ;whether the lazer is turned off. | ||
+ | |||
+ | checkdoor: | ||
+ | cmp #$01 | ||
+ | beq doorisopen | ||
+ | jsr animatelazerdoor | ||
+ | rts | ||
+ | doorisopen: | ||
+ | rts | ||
+ | |||
+ | animatelazerdoor: | ||
+ | inc animdelay2 | ||
+ | lda animdelay2 | ||
+ | cmp #$05 | ||
+ | beq activelazer | ||
+ | rts | ||
+ | activelazer: | ||
+ | sta animdelay2 | ||
+ | ldx animcounter2 | ||
+ | lda lazerdoortable, | ||
+ | sta $07fb | ||
+ | inx | ||
+ | cpx #$02 | ||
+ | beq resetanimpointer2 | ||
+ | inc animcounter2 | ||
+ | rts | ||
+ | resetanimpointer2: | ||
+ | ldx #$00 | ||
+ | stx animcounter2 | ||
+ | rts | ||
+ | |||
+ | ;The door is open so, animate the opened door | ||
+ | |||
+ | animateopendoor: | ||
+ | inc animdelay2 | ||
+ | lda animdelay2 | ||
+ | cmp #$05 | ||
+ | beq activeexit | ||
+ | rts | ||
+ | activeexit: | ||
+ | sta animdelay2 | ||
+ | ldx animcounter2 | ||
+ | lda doorexittable, | ||
+ | sta $07fb | ||
+ | inx | ||
+ | cpx #$02 | ||
+ | beq resetanimpointer2 | ||
+ | inc animcounter2 | ||
+ | rts | ||
+ | |||
+ | |||
+ | |||
+ | time: dec $0427 | ||
+ | ldx #$03 | ||
+ | timeloop: | ||
+ | cmp #$2f | ||
+ | bne time1 | ||
+ | lda #$39 | ||
+ | sta $0427-2,x | ||
+ | dec $0427-3,x | ||
+ | time1: dex | ||
+ | cpx #$28 | ||
+ | bne timeloop | ||
+ | lda $0424 | ||
+ | cmp #$2f | ||
+ | beq outoftime | ||
+ | rts | ||
+ | outoftime: | ||
+ | sta $0427 | ||
+ | sta $0426 | ||
+ | sta $0425 | ||
+ | sta $0424 | ||
+ | ldx #$00 | ||
+ | lda #$00 | ||
+ | stx animcounter1 | ||
+ | sta animdelay1 | ||
+ | lda #$01 | ||
+ | sta p1dead | ||
+ | rts | ||
+ | |||
+ | ;The player colliding into the door. | ||
+ | |||
+ | readdoorcollision: | ||
+ | cmp #$01 | ||
+ | beq ignore | ||
+ | lda objpos+$06 | ||
+ | sec | ||
+ | sbc #$06 | ||
+ | sta doorcollision+0 | ||
+ | clc | ||
+ | adc #$0c | ||
+ | sta doorcollision+1 | ||
+ | lda objpos+$07 | ||
+ | sec | ||
+ | sbc #$0c | ||
+ | sta doorcollision+2 | ||
+ | clc | ||
+ | adc #$18 | ||
+ | sta doorcollision+3 | ||
+ | lda objpos+$00 | ||
+ | cmp doorcollision+0 | ||
+ | bcc ignore | ||
+ | cmp doorcollision+1 | ||
+ | bcs ignore | ||
+ | lda objpos+$01 | ||
+ | cmp doorcollision+2 | ||
+ | bcc ignore | ||
+ | cmp doorcollision+3 | ||
+ | bcs ignore | ||
+ | lda dooropen | ||
+ | cmp #$01 | ||
+ | beq exitlevel | ||
+ | ldx #$00 | ||
+ | lda #$00 | ||
+ | stx animcounter1 | ||
+ | sta animdelay1 | ||
+ | lda #$01 | ||
+ | sta p1dead | ||
+ | |||
+ | ignore: | ||
+ | exitlevel: | ||
+ | sta $d015 | ||
+ | lda #$00 | ||
+ | sta objpos+$01 | ||
+ | sta objpos+$00 | ||
+ | sta $d000 | ||
+ | sta $d001 | ||
+ | ;Because the level is complete. Award the player bonus points | ||
+ | ;according to the amount of time that remains | ||
+ | |||
+ | loopbonus: | ||
+ | dec $0427 | ||
+ | |||
+ | ldx #$03 | ||
+ | loopclock: | ||
+ | cmp #$2f | ||
+ | bne loopclock2 | ||
+ | lda #$39 | ||
+ | sta $0424,x | ||
+ | |||
+ | dec $0423,x | ||
+ | loopclock2: | ||
+ | bne loopclock | ||
+ | jsr addtoscore | ||
+ | lda $0424 | ||
+ | cmp #$2f | ||
+ | bne loopbonus | ||
+ | inc $0418 | ||
+ | lda $0418 | ||
+ | cmp #$3a | ||
+ | bne carryonnext | ||
+ | lda #$30 | ||
+ | sta $0418 | ||
+ | inc $0417 | ||
+ | carryonnext: | ||
+ | sta $0424 | ||
+ | sta $0425 | ||
+ | sta $0426 | ||
+ | sta $0427 | ||
+ | ldx #$00 | ||
+ | copytocopy: | ||
+ | sta statuscopy, | ||
+ | inx | ||
+ | cpx #$28 | ||
+ | bne copytocopy | ||
+ | lda #$02 | ||
+ | jsr initmusic | ||
+ | waitfire: | ||
+ | loopflsh: | ||
+ | sta $05ef,x | ||
+ | lda $d800 | ||
+ | sta $d9ef,x | ||
+ | inx | ||
+ | cpx #$09 | ||
+ | bne loopflsh | ||
+ | lda $d812 | ||
+ | sta $d022 | ||
+ | lda $d824 | ||
+ | sta $d023 | ||
+ | lda $dc00 | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | bcs waitfire | ||
+ | inc level | ||
+ | hold: jmp maingameloop | ||
+ | nodoorcol: | ||
+ | |||
+ | addtoscore: | ||
+ | ldx #$05 | ||
+ | scloop: | ||
+ | cmp #$39 | ||
+ | bne sc1 | ||
+ | lda #$30 | ||
+ | sta $0407,x | ||
+ | inc $0406,x | ||
+ | sc1: dex | ||
+ | bne scloop | ||
+ | rts | ||
+ | |||
+ | ;Move the y-pos enemy | ||
+ | |||
+ | moveenemy1: | ||
+ | cmp #$00 | ||
+ | beq movedown1 | ||
+ | cmp #$01 | ||
+ | beq moveup1 | ||
+ | rts | ||
+ | |||
+ | movedown1: | ||
+ | clc | ||
+ | adc #$01 | ||
+ | sta objpos+$09 | ||
+ | lda objpos+$09 | ||
+ | cmp #$d8 | ||
+ | beq changedir1a | ||
+ | rts | ||
+ | changedir1a: | ||
+ | sta enemydir1 | ||
+ | rts | ||
+ | |||
+ | moveup1: | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | sta objpos+$09 | ||
+ | lda objpos+$09 | ||
+ | cmp #$46 | ||
+ | beq changepos1b | ||
+ | rts | ||
+ | changepos1b: | ||
+ | sta enemydir1 | ||
+ | rts | ||
+ | |||
+ | ;Move the x-pos enemy | ||
+ | |||
+ | movenemy2: | ||
+ | lda halfspeed1 | ||
+ | cmp #$01 | ||
+ | beq resetspeed1 | ||
+ | rts | ||
+ | resetspeed1: | ||
+ | sta halfspeed1 | ||
+ | lda enemydir2 | ||
+ | cmp #$00 | ||
+ | beq moveleft1 | ||
+ | cmp #$01 | ||
+ | beq moveright1 | ||
+ | rts | ||
+ | moveleft1: | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | sta objpos+$0a | ||
+ | lda objpos+$0a | ||
+ | cmp #$12 | ||
+ | beq changedir2a | ||
+ | rts | ||
+ | changedir2a: | ||
+ | sta enemydir2 | ||
+ | rts | ||
+ | |||
+ | moveright1: | ||
+ | clc | ||
+ | adc #$01 | ||
+ | sta objpos+$0a | ||
+ | lda objpos+$0a | ||
+ | cmp #$9c | ||
+ | beq changedir2b | ||
+ | rts | ||
+ | changedir2b: | ||
+ | sta enemydir2 | ||
+ | rts | ||
+ | |||
+ | ;Move second ypos enemy (this time reverse the direction) | ||
+ | |||
+ | |||
+ | moveenemy3: | ||
+ | cmp #$00 | ||
+ | beq moveup3 | ||
+ | cmp #$01 | ||
+ | beq movedown3 | ||
+ | rts | ||
+ | |||
+ | movedown3: | ||
+ | clc | ||
+ | adc #$01 | ||
+ | sta objpos+$0d | ||
+ | lda objpos+$0d | ||
+ | cmp #$d8 | ||
+ | beq changedir3a | ||
+ | rts | ||
+ | changedir3a: | ||
+ | sta enemydir3 | ||
+ | rts | ||
+ | |||
+ | moveup3: | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | sta objpos+$0d | ||
+ | lda objpos+$0d | ||
+ | cmp #$46 | ||
+ | beq changepos3b | ||
+ | rts | ||
+ | changepos3b: | ||
+ | sta enemydir3 | ||
+ | rts | ||
+ | |||
+ | ;Move second xpos enemy (reverse direction) | ||
+ | |||
+ | |||
+ | ;Move the x-pos enemy | ||
+ | |||
+ | movenemy4: | ||
+ | lda halfspeed2 | ||
+ | cmp #$01 | ||
+ | beq resetspeed2 | ||
+ | rts | ||
+ | resetspeed2: | ||
+ | sta halfspeed2 | ||
+ | lda enemydir2 | ||
+ | cmp #$01 | ||
+ | beq moveleft2 | ||
+ | cmp #$00 | ||
+ | beq moveright2 | ||
+ | rts | ||
+ | moveleft2: | ||
+ | sec | ||
+ | sbc #$01 | ||
+ | sta objpos+$0e | ||
+ | lda objpos+$0e | ||
+ | cmp #$12 | ||
+ | beq changedir4a | ||
+ | rts | ||
+ | changedir4a: | ||
+ | sta enemydir4 | ||
+ | rts | ||
+ | |||
+ | moveright2: | ||
+ | clc | ||
+ | adc #$01 | ||
+ | sta objpos+$0e | ||
+ | lda objpos+$0e | ||
+ | cmp #$a8 | ||
+ | beq changedir2b | ||
+ | rts | ||
+ | changedir4b: | ||
+ | sta enemydir4 | ||
+ | rts | ||
+ | |||
+ | ;Animate those enemies | ||
+ | |||
+ | animenemies: | ||
+ | lda animdelay3 | ||
+ | cmp #$08 | ||
+ | beq resetan3 | ||
+ | rts | ||
+ | resetan3: | ||
+ | sta animdelay3 | ||
+ | ldx animcounter3 | ||
+ | lda enemy1frame, | ||
+ | sta $07fc | ||
+ | sta $07fe | ||
+ | lda enemy2frame, | ||
+ | sta $07fd | ||
+ | inx | ||
+ | cpx #$04 | ||
+ | beq resetct3 | ||
+ | inc animcounter3 | ||
+ | rts | ||
+ | resetct3: | ||
+ | sta animcounter3 | ||
+ | rts | ||
+ | |||
+ | ;Read the player to enemy sprite/ | ||
+ | |||
+ | readbadcollision: | ||
+ | cmp #$01 | ||
+ | beq ignoredeath | ||
+ | lda objpos+$00 | ||
+ | sec | ||
+ | sbc #$06 | ||
+ | sta badcollision+0 | ||
+ | clc | ||
+ | adc #$0c | ||
+ | sta badcollision+1 | ||
+ | lda objpos+$01 | ||
+ | sec | ||
+ | sbc #$0c | ||
+ | sta badcollision+2 | ||
+ | clc | ||
+ | adc #$18 | ||
+ | sta badcollision+3 | ||
+ | ldx #$00 | ||
+ | dobadcolloop: | ||
+ | cmp badcollision+0 | ||
+ | bcc nobadcol | ||
+ | cmp badcollision+1 | ||
+ | bcs nobadcol | ||
+ | lda objpos+$09, | ||
+ | cmp badcollision+2 | ||
+ | bcc nobadcol | ||
+ | cmp badcollision+3 | ||
+ | bcs nobadcol | ||
+ | lda #$00 | ||
+ | sta animcounter1 | ||
+ | sta animdelay1 | ||
+ | lda #$01 | ||
+ | sta p1dead | ||
+ | rts | ||
+ | nobadcol: | ||
+ | inx | ||
+ | cpx #$08 | ||
+ | bne dobadcolloop | ||
+ | ignoredeath: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ;Sprite animation frames | ||
+ | |||
+ | p1aliveframe: | ||
+ | |||
+ | p1alivetable: | ||
+ | p1deadtable: | ||
+ | lazerdoortable: | ||
+ | doorexittable: | ||
+ | enemy1frame: | ||
+ | enemy2frame: | ||
+ | ;The Status bar: | ||
+ | |||
+ | |||
+ | |||
+ | status: | ||
+ | DC.B $30, | ||
+ | DC.B $20, | ||
+ | dc.b $39, | ||
+ | ; | ||
+ | statuscopy: | ||
+ | DC.B $20, | ||
+ | DC.B $20, | ||
+ | dc.b $39, | ||
+ | |||
+ | ;The colour-cycling for the status bar | ||
+ | |||
+ | statuscolors: | ||
+ | dc.b $01, | ||
+ | dc.b $01, | ||
+ | dc.b $01, | ||
+ | dc.b $00, | ||
+ | gameovermessage: | ||
+ | welldonemessage: | ||
+ | |||
+ | ; | ||
+ | cheatmessage: | ||
+ | |||
+ | |||
+ | |||
+ | </ |
base/balloonacy_ii.txt · Last modified: 2015-04-17 04:30 by 127.0.0.1