User Tools

Site Tools


base:balloonacy_ii

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:balloonacy_ii [2015-04-17 04:30] (current)
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. :) 
 +<code>
 +===================================================
 +; ballonacy 2 - by tnd projects
 +;the gamecode
 +;===================================================
  
 +;declare variables
 +
 +sync = $02 ;Synchronize the area
 +charpointer = $03 ;The timer for the animation
 +delaypointer = $04 ;Delay of the balloon rising
 +animcounter1 = $05 ;Animation counter value
 +animdelay1 = $06 ;Animation delay counter value
 +p1dead = $22 ;Player death/alive switch
 +failsafe = $08 ;Failsafe switch
 +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 ;Virtual sprite positions
 +keycollision = $0350 ;Software collision routine for key
 +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:                  sei
 + 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:         lda #$20
 + sta $0400,x
 + sta $0500,x
 + sta $0600,x
 + sta $06e8,x
 + inx
 + bne clr
 + lda #<message
 + sta read+1
 + lda #>message
 + sta read+2
 + ldx #$00
 +loopwaiting:         ldy #$00
 +loopwaiting2:         iny
 + 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:         lda $5800,x
 + sta $d800,x
 + lda #$20
 + sta $5800+9*40,x
 +
 + sta $5800+9*40,x
 +
 + lda $5800+1*40,x
 + sta $d800+1*40,x
 + lda $5800+2*40,x
 + sta $d800+2*40,x
 + lda $5800+3*40,x
 + sta $d800+3*40,x
 + lda $5800+4*40,x
 + sta $d800+4*40,x
 + lda $5800+5*40,x
 + sta $d800+5*40,x
 + lda $5800+6*40,x
 + sta $d800+6*40,x
 + lda $5800+7*40,x
 + sta $d800+7*40,x
 +
 + 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: lda #$00
 + sta sync
 + lda sync
 +syncwait2: cmp sync
 + beq syncwait2
 + jsr checkcheat
 + jsr doscroll
 + jsr rolltit
 + lda $dc00
 + lsr
 + lsr
 + lsr
 + lsr
 + lsr
 + bcs holdhere1
 + jmp game
 +
 +checkcheat:             jsr $ffe4
 + 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,x
 + sec
 + sbc #$40
 +nowayman sta $0568,x
 + inx
 + cpx #$28
 + bne cmess
 + rts
 +
 +;Do the scrolling message
 +
 +doscroll: lda xpause
 + sec
 + sbc #$01
 + and #$07
 + sta xpause
 + bcs endscroll
 + ldx #$00
 +wrapscroll: lda $0799,x
 + sta $0798,x
 + inx
 + cpx #$28
 + bne wrapscroll
 +read: lda $0798+$27
 + cmp #$00
 + bne endpoint
 + lda #<message
 + sta read+1
 + lda #>message
 + sta read+2
 + jmp read
 +endpoint: sta $0798+$27
 + inc read+1
 + lda read+1
 + cmp #$00
 + bne endscroll
 + inc read+2
 +endscroll: rts
 +
 +rolltit: inc flashdelays
 + lda flashdelays
 + cmp #$03
 + beq fok
 + rts
 +fok: lda #$00
 + sta flashdelays
 + lda titlecolours+0
 + sta titlecolours+23
 + ldx #$00
 +wrapcolours: lda titlecolours+1,x
 + sta titlecolours+0,x
 + inx
 + cpx #24
 + bne wrapcolours
 + ldx #$00
 +pastetochar: lda titlecolours+0
 + 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:                jmp $ea31
 +
 +
 +titlecolours: dc.b $06,$06,$04,$04,$0e,$0e,$05,$05,$0d,$0d,$01,$01
 + dc.b $07,$07,$0a,$0a,$08,$08,$02,$02,$09,$09,$00,$00
 +
 +
 +
 +
 +
 +
 +
 +game:
 +default: sei
 +
 + 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: lda status,x
 + sta statuscopy,x
 + inx
 + cpx #$28
 + bne defaultcopy
 +
 +
 +maingameloop: sei
 + 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: lda #$20
 + 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: cmp #$0a
 + bne chkl11
 + jmp drawlev10
 +chkl11: cmp #$0b
 + bne chkl12
 + jmp drawlev11
 +chkl12: cmp #$0c
 + bne chkl13
 + jmp drawlev12
 +chkl13: cmp #$0d
 + bne chkl14
 + jmp drawlev13
 +chkl14: cmp #$0e
 + bne chkl15
 + jmp drawlev14
 +chkl15: cmp #$0f
 + bne chkl16
 + jmp drawlev15
 +chkl16: cmp #$10
 + bne endofgame
 + jmp drawlev16
 +endofgame lda #$00
 + sta $d020
 + sta $d021
 + lda #$0b
 + sta $d011
 + ldx #$00
 +waitmain1: ldy #$00
 +waitmain2: iny
 + bne waitmain2
 + inx
 + bne waitmain1
 + lda #$00
 + sta $d015
 + ldx #$00
 +copyscreens: lda $6c00,x
 + 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: lda #$80
 +ras1: cmp $d012
 + bne ras1
 + jsr colroll
 + jsr playmusic
 + ldx #$00
 +loopcolors: lda $d800
 + 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: ldx #$01
 + jsr $ce02
 + lda #$06
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l1postable
 + sta readleveltable+1
 + lda #>l1postable
 + sta readleveltable+2
 + lda #<l1coltable
 + sta readcolourtable+1
 + lda #>l1coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l1postable: dc.b $16,$d0 ;Balloon
 + dc.b $76,$4c ;Key
 + dc.b $96,$d0 ;lock
 + dc.b $16,$4c ;Door
 + dc.b $84,$4c ;Enemy1 x dir
 + dc.b $00,$00 ;Enemy2 y dir
 + dc.b $00,$00 ;Enemy3 x dir
 + dc.b $00,$00 ;Enemy4 y dir
 +l1coltable: dc.b $0a,$07,$0f,$0a,$0e,$00,$00,$00
 +
 +drawlev2: ldx #$02
 + 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 #<l2postable
 + sta readleveltable+1
 + lda #>l2postable
 + sta readleveltable+2
 + lda #<l2coltable
 + sta readcolourtable+1
 + lda #>l2coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l2postable: dc.b $16,$d0 ;Balloon
 + dc.b $94,$a8 ;Key
 + dc.b $7c,$c8 ;lock
 + dc.b $16,$54 ;Door
 + dc.b $00,$00 ;Enemy1 x dir
 + dc.b $00,$00 ;Enemy2 y dir
 + dc.b $00,$00 ;Enemy3 x dir
 + dc.b $00,$00 ;Enemy4 y dir
 +l2coltable: dc.b $0a,$07,$0f,$0a,$0d,$0e,$00,$00
 +
 +drawlev3: ldx #$03
 + jsr $ce02
 + lda #$02
 + sta $d022
 + lda #$0a
 + sta $d023
 + lda #<l3postable
 + sta readleveltable+1
 + lda #>l3postable
 + sta readleveltable+2
 + lda #<l3coltable
 + sta readcolourtable+1
 + lda #>l3coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l3postable: dc.b $16,$d0 ;Balloon
 + dc.b $58,$d4 ;Key
 + dc.b $1a,$5c ;lock
 + dc.b $94,$4c ;Door
 + dc.b $78,$58 ;Enemy1 x dir
 + dc.b $00,$00 ;Enemy2 y dir
 + dc.b $32,$80 ;Enemy3 x dir
 + dc.b $00,$00 ;Enemy4 y dir
 +l3coltable: dc.b $0a,$07,$0f,$0a,$0d,$0a,$07,$00
 +
 +drawlev4: ldx #$04
 + jsr $ce02
 + lda #$04
 + sta $d022
 + lda #$0e
 + sta $d023
 +
 + lda #<l4postable
 + sta readleveltable+1
 + lda #>l4postable
 + sta readleveltable+2
 + lda #<l4coltable
 + sta readcolourtable+1
 + lda #>l4coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l4postable: dc.b $16,$d0 ;Balloon
 + dc.b $94,$a4 ;Key
 + dc.b $1a,$64 ;lock
 + dc.b $94,$4c ;Door
 + dc.b $88,$58 ;Enemy1 x dir
 + dc.b $00,$00 ;Enemy2 y dir
 + dc.b $94,$c8 ;Enemy3 x dir
 + dc.b $00,$00 ;Enemy4 y dir
 +l4coltable: dc.b $0a,$07,$0f,$0a,$0d,$0e,$03,$00
 +
 +
 +
 +drawlev5: ldx #$05
 + jsr $ce02
 + lda #$06
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l5postable
 + sta readleveltable+1
 + lda #>l5postable
 + sta readleveltable+2
 + lda #<l5coltable
 + sta readcolourtable+1
 + lda #>l5coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l5postable: dc.b $16,$d0 ;Balloon
 + dc.b $94,$c4 ;Key
 + dc.b $94,$64 ;lock
 + dc.b $16,$4c ;Door
 + dc.b $80,$58 ;Enemy1 x dir
 + dc.b $00,$00 ;Enemy2 y dir
 + dc.b $28,$c8 ;Enemy3 x dir
 + dc.b $00,$00 ;Enemy4 y dir
 +l5coltable: dc.b $0a,$07,$0f,$0a,$0e,$0d,$0a,$00
 +
 +drawlev6: ldx #$06
 + jsr $ce02
 + lda #$0b
 + sta $d022
 + lda #$0c
 + sta $d023
 + lda #<l6postable
 + sta readleveltable+1
 + lda #>l6postable
 + sta readleveltable+2
 + lda #<l6coltable
 + sta readcolourtable+1
 + lda #>l6coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l6postable: dc.b $16,$d0 ;Balloon
 + dc.b $16,$4c ;Key
 + dc.b $16,$d0 ;lock
 + dc.b $94,$4c ;Door
 + dc.b $88,$58 ;Enemy1 y dir
 + dc.b $90,$9c ;Enemy2 x dir
 + dc.b $26,$c8 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l6coltable: dc.b $0a,$07,$0f,$0a,$0d,$0a,$03,$00
 +
 +drawlev7: ldx #$07
 + jsr $ce02
 + lda #$02
 + sta $d022
 + lda #$0a
 + sta $d023
 + lda #<l7postable
 + sta readleveltable+1
 + lda #>l7postable
 + sta readleveltable+2
 + lda #<l7coltable
 + sta readcolourtable+1
 + lda #>l7coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l7postable: dc.b $16,$d0 ;Balloon
 + dc.b $8c,$c4 ;Key
 + dc.b $16,$4c ;lock
 + dc.b $94,$8c ;Door
 + dc.b $78,$58 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $38,$4c ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l7coltable: dc.b $0a,$07,$0f,$0a,$0d,$0a,$03,$00
 +
 +drawlev8: ldx #$08
 + jsr $ce02
 + lda #$04
 + sta $d022
 + lda #$0e
 + sta $d023
 +  
 + lda #<l8postable
 + sta readleveltable+1
 + lda #>l8postable
 + sta readleveltable+2
 + lda #<l8coltable
 + sta readcolourtable+1
 + lda #>l8coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l8postable: dc.b $28,$c0 ;Balloon
 + dc.b $26,$58 ;Key
 + dc.b $64,$4c ;lock
 + dc.b $16,$58 ;Door
 + dc.b $00,$00 ;Enemy1 y dir
 + dc.b $8c,$b0 ;Enemy2 x dir
 + dc.b $00,$00 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l8coltable: dc.b $0a,$07,$0f,$0a,$0d,$0a,$03,$00
 +drawlev9: ldx #$09
 + jsr $ce02
 + lda #$06
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l9postable
 + sta readleveltable+1
 + lda #>l9postable
 + sta readleveltable+2
 + lda #<l9coltable
 + sta readcolourtable+1
 + lda #>l9coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l9postable: dc.b $90,$d0 ;Balloon
 + dc.b $18,$c0 ;Key
 + dc.b $90,$c0 ;lock
 + dc.b $16,$58 ;Door
 + dc.b $40,$90 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $68,$c0 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l9coltable: dc.b $0a,$07,$0f,$0a,$0d,$0a,$03,$00
 +
 + jmp carryon
 +drawlev10: ldx #$0a
 + jsr $ce02
 + lda #$0b
 + sta $d022
 + lda #$0c
 + sta $d023
 + lda #<l10postable
 + sta readleveltable+1
 + lda #>l10postable
 + sta readleveltable+2
 + lda #<l10coltable
 + sta readcolourtable+1
 + lda #>l10coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l10postable: dc.b $78,$c0 ;Balloon
 + dc.b $94,$94 ;Key
 + dc.b $1c,$d0 ;lock
 + dc.b $98,$c8 ;Door
 + dc.b $38,$b0 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $50,$50 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l10coltable: dc.b $0a,$07,$0f,$0a,$0e,$0a,$0d,$00
 +
 +drawlev11: ldx #$0b
 + jsr $ce02
 + lda #$02
 + sta $d022
 + lda #$0a
 + sta $d023
 + lda #<l11postable
 + sta readleveltable+1
 + lda #>l11postable
 + sta readleveltable+2
 + lda #<l11coltable
 + sta readcolourtable+1
 + lda #>l11coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l11postable: dc.b $60,$c0 ;Balloon
 + dc.b $74,$54 ;Key
 + dc.b $1c,$d0 ;lock
 + dc.b $96,$50 ;Door
 + dc.b $38,$b0 ;Enemy1 y dir
 + dc.b $94,$60 ;Enemy2 x dir
 + dc.b $70,$50 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l11coltable: dc.b $0a,$07,$0f,$0a,$0a,$03,$07,$00
 +
 +
 +
 +drawlev12: ldx #$0c
 + jsr $ce02
 + lda #$04
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l12postable
 + sta readleveltable+1
 + lda #>l12postable
 + sta readleveltable+2
 + lda #<l12coltable
 + sta readcolourtable+1
 + lda #>l12coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l12postable: dc.b $96,$c0 ;Balloon
 + dc.b $1c,$d0 ;Key
 + dc.b $64,$a4 ;lock
 + dc.b $96,$50 ;Door
 + dc.b $00,$00 ;Enemy1 y dir
 + dc.b $94,$60 ;Enemy2 x dir
 + dc.b $70,$50 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l12coltable: dc.b $0a,$07,$0f,$0a,$0e,$0d,$0a,$00
 + jmp carryon
 +drawlev13: ldx #$0d
 + jsr $ce02
 + lda #$06
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l13postable
 + sta readleveltable+1
 + lda #>l13postable
 + sta readleveltable+2
 + lda #<l13coltable
 + sta readcolourtable+1
 + lda #>l13coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l13postable: dc.b $16,$d0 ;Balloon
 + dc.b $96,$80 ;Key
 + dc.b $58,$d0 ;lock
 + dc.b $58,$4c ;Door
 + dc.b $38,$80 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $70,$50 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l13coltable: dc.b $0a,$07,$0f,$0e,$0d,$07,$0a,$00
 +
 + jmp carryon
 +drawlev14: ldx #$0e
 + jsr $ce02
 + lda #$0b
 + sta $d022
 + lda #$0c
 + sta $d023
 + lda #<l14postable
 + sta readleveltable+1
 + lda #>l14postable
 + sta readleveltable+2
 + lda #<l14coltable
 + sta readcolourtable+1
 + lda #>l14coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l14postable: dc.b $16,$d0 ;Balloon
 + dc.b $90,$c8 ;Key
 + dc.b $4c,$9a ;lock
 + dc.b $16,$4c ;Door
 + dc.b $96,$c8 ;Enemy1 y dir
 + dc.b $66,$88 ;Enemy2 x dir
 + dc.b $20,$c8 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l14coltable: dc.b $0a,$07,$0f,$0e,$03,$0a,$0e,$00
 +
 + jmp carryon
 +drawlev15: ldx #$0f
 + jsr $ce02
 + lda #$02
 + sta $d022
 + lda #$0a
 + sta $d023
 + lda #<l15postable
 + sta readleveltable+1
 + lda #>l15postable
 + sta readleveltable+2
 + lda #<l15coltable
 + sta readcolourtable+1
 + lda #>l15coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l15postable: dc.b $16,$d0 ;Balloon
 + dc.b $90,$50 ;Key
 + dc.b $54,$a0 ;lock
 + dc.b $16,$4c ;Door
 + dc.b $96,$c8 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $20,$c8 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l15coltable: dc.b $0a,$07,$0f,$0a,$0e,$0d,$03,$00
 +
 + jmp carryon
 +drawlev16: ldx #$10
 + jsr $ce02
 + lda #$04
 + sta $d022
 + lda #$0e
 + sta $d023
 + lda #<l16postable
 + sta readleveltable+1
 + lda #>l16postable
 + sta readleveltable+2
 + lda #<l16coltable
 + sta readcolourtable+1
 + lda #>l16coltable
 + sta readcolourtable+2
 + jmp carryon
 +
 +l16postable: dc.b $96,$d0 ;Balloon
 + dc.b $16,$50 ;Key
 + dc.b $96,$d0 ;lock
 + dc.b $54,$4c ;Door
 + dc.b $96,$c8 ;Enemy1 y dir
 + dc.b $00,$00 ;Enemy2 x dir
 + dc.b $20,$c8 ;Enemy3 y dir
 + dc.b $00,$00 ;Enemy4 x dir
 +l16coltable: dc.b $0a,$07,$0f,$0a,$0d,$0d,$0a,$00
 + jmp carryon
 +
 +;Display the status objects
 +
 +carryon: ldx #$00
 +readleveltable: lda l1postable,x
 + sta objpos+$00,x
 + inx
 + cpx #$10
 + bne readleveltable
 + ldx #$00
 +readcolourtable: lda l1coltable,x
 + sta $d027,x
 + inx
 + cpx #$08
 + bne readcolourtable
 +
 + ldx #$00
 +showstatus: lda statuscopy,x
 + 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: ;clear the screen memory at $c800
 +
 + ;jsr $c069
 + ;jsr $c76b
 +
 +main: lda #$00
 + sta sync
 +syncwait: cmp sync
 + 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   lda $dc01
 + 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: lda p1dead
 + cmp #$01
 + beq playerisdead
 +
 + jsr readjoy
 + jsr backgroundcol
 + jsr readkeycollision
 + jsr checkkey
 + jsr readlockcollision
 + jsr readdoorcollision
 + jsr readbadcollision
 +
 +
 + lda p1aliveframe
 + sta $07f8 
 + rts
 +playerisdead: jsr burstballoon
 + rts
 +
 +
 +;Our funny balloon bursting animation routine.
 +
 +burstballoon inc animdelay1
 + lda animdelay1
 + cmp #$0c
 + beq okdoit0
 + rts
 +okdoit0: lda #$00
 + sta animdelay1
 + ldx animcounter1
 + lda p1deadtable,x
 + sta $07f8
 + inx
 + cpx #5
 + beq resetframe0
 + inc animcounter1
 + rts
 +resetframe0: ldx #0
 + stx animcounter1
 +livesleft: dec $041e
 + 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: lda #$00
 + sta $d015
 +
 + lda #$03
 + jsr initmusic
 +pressfire ldx #$00
 +showloser: lda gameovermessage,x
 + 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: jmp 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: inc charpointer
 + lda charpointer
 + cmp #$0e
 + bne endcharpointer
 + lda #$00
 + sta charpointer
 + jsr animatechar
 +endcharpointer: rts
 +animatechar: ldx #$00
 +wrapchar: lda $09f8,x
 + sta $09f8+$40,x
 + inx
 + cpx #$08
 + bne wrapchar
 + ldx #$00
 +wrapchar2: lda $09f8+8,x
 + sta $09f8,x
 + inx
 + cpx #$40
 + bne wrapchar2
 + rts
 +
 +;Roll those colours across the score bar, just like the original Balloonacy did
 +
 +colroll: lda statuscolors+$00
 + sta statuscolors+$28
 + ldx #$00
 +wrapcolors: lda statuscolors+$01,x
 + sta statuscolors+$00,x
 + lda statuscolors+$00,x
 + sta $d800,x
 + inx
 + cpx #$28
 + bne wrapcolors
 + rts
 +
 +;Expand the size of the sprite areas 
 +
 +expand: ldx #$00
 +expandloop: lda objpos+$01,x
 + sta $d001,x
 + lda objpos+$00,x
 + asl 
 + ror $d010
 + sta $d000,x
 + inx
 + inx
 + cpx #$10
 + bne expandloop
 + rts
 +
 +;Move the player ship, according to joystick direction
 +
 +readjoy:       lda $dc00
 + 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: stx objpos+$01
 +left: lsr
 + bcs right
 + ldx objpos+$00
 + dex
 + cpx #$0c
 + bcs setleft
 + ldx #$0c
 +setleft: stx objpos+$00
 +right: lsr
 + bcs nojoy
 + ldx objpos+$00
 + inx
 + cpx #$a2
 + bcc setright
 + ldx #$a2
 +setright: stx objpos+$00
 +nojoy: rts
 +
 +
 +
 +;Move the balloon up slowly
 +
 +moveballoon: inc delaypointer
 + lda delaypointer
 + cmp #$08
 + beq resetdelay
 + rts
 +resetdelay: lda #$00
 + sta delaypointer
 + lda objpos+$01
 + sec
 + sbc #$01
 + sta objpos+$01
 + rts
 +
 +;Out multipurpose animation thingy
 +
 +animate: jsr animplayeralive
 + rts
 +
 +;Animation sequence for the player alive
 +
 +animplayeralive: inc animdelay1
 + lda animdelay1
 + cmp #$0c
 + beq okdoit1
 + rts
 +okdoit1: lda #$00
 + sta animdelay1
 + ldx animcounter1
 + lda p1alivetable,x
 + sta p1aliveframe
 + inx
 + cpx #4
 + beq resetframe1
 + inc animcounter1
 + rts
 +resetframe1: ldx #0
 + stx animcounter1
 + rts
 +
 +;Player sprite to background collision.
 +
 +backgroundcol: lda $d01f
 + 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: rts
 +
 +;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: rts
 +
 +;Check whether or not the play has got the key if so, then tie the
 +;key to the balloon
 +
 +checkkey: lda gotkey
 + cmp #$01
 + beq ihavethekey
 + rts
 +ihavethekey: lda objpos+$00
 + 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: rts
 +
 +;Check the door. If the door has a lazer switched on or
 +;whether the lazer is turned off.
 +
 +checkdoor: lda dooropen
 + cmp #$01
 + beq doorisopen
 + jsr animatelazerdoor
 + rts
 +doorisopen: jsr animateopendoor
 + rts
 +
 +animatelazerdoor:
 + inc animdelay2
 + lda animdelay2
 + cmp #$05
 + beq activelazer
 + rts
 +activelazer: lda #$00
 + sta animdelay2
 + ldx animcounter2
 + lda lazerdoortable,x
 + 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: lda #$00
 + sta animdelay2
 + ldx animcounter2
 + lda doorexittable,x
 + sta $07fb
 + inx
 + cpx #$02
 + beq resetanimpointer2
 + inc animcounter2
 + rts
 +
 +
 +
 +time: dec $0427
 + ldx #$03
 +timeloop: lda $0427-2,x
 + 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: lda #$39
 + 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: lda p1dead
 + 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: rts
 +exitlevel: lda #$00
 + 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: lda $0424,x
 + cmp #$2f
 + bne loopclock2
 + lda #$39
 + sta $0424,x
 +
 + dec $0423,x
 +loopclock2: dex
 + 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: lda #$30
 + sta $0424
 + sta $0425
 + sta $0426
 + sta $0427
 + ldx #$00
 +copytocopy: lda $0400,x
 + sta statuscopy,x
 + inx
 + cpx #$28
 + bne copytocopy
 + lda #$02
 + jsr initmusic
 +waitfire: ldx #$00
 +loopflsh: lda welldonemessage,x
 + 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: rts
 +
 +addtoscore: inc $040c
 + ldx #$05
 +scloop: lda $0407,x
 + cmp #$39
 + bne sc1
 + lda #$30
 + sta $0407,x
 + inc $0406,x
 +sc1: dex
 + bne scloop
 + rts
 +
 +;Move the y-pos enemy
 +
 +moveenemy1: lda enemydir1
 + cmp #$00
 + beq movedown1
 + cmp #$01
 + beq moveup1
 + rts
 +
 +movedown1: lda objpos+$09
 + clc
 + adc #$01
 + sta objpos+$09
 + lda objpos+$09
 + cmp #$d8
 + beq changedir1a
 + rts
 +changedir1a: lda #$01
 + sta enemydir1
 + rts
 +
 +moveup1: lda objpos+$09
 + sec
 + sbc #$01
 + sta objpos+$09
 + lda objpos+$09
 + cmp #$46
 + beq changepos1b
 + rts
 +changepos1b: lda #$00
 + sta enemydir1
 + rts
 +
 +;Move the x-pos enemy
 +
 +movenemy2: inc halfspeed1
 + lda halfspeed1
 + cmp #$01
 + beq resetspeed1
 + rts
 +resetspeed1: lda #$00
 + sta halfspeed1
 + lda enemydir2
 + cmp #$00
 + beq moveleft1
 + cmp #$01
 + beq moveright1
 + rts
 +moveleft1: lda objpos+$0a
 + sec
 + sbc #$01
 + sta objpos+$0a
 + lda objpos+$0a
 + cmp #$12
 + beq changedir2a
 + rts
 +changedir2a: lda #$01
 + sta enemydir2
 + rts
 +
 +moveright1: lda objpos+$0a
 + clc
 + adc #$01
 + sta objpos+$0a
 + lda objpos+$0a
 + cmp #$9c
 + beq changedir2b
 + rts
 +changedir2b: lda #$00
 + sta enemydir2
 + rts
 +
 +;Move second ypos enemy (this time reverse the direction)
 +
 +
 +moveenemy3: lda enemydir3
 + cmp #$00
 + beq moveup3
 + cmp #$01
 + beq movedown3
 + rts
 +
 +movedown3: lda objpos+$0d
 + clc
 + adc #$01
 + sta objpos+$0d
 + lda objpos+$0d
 + cmp #$d8
 + beq changedir3a
 + rts
 +changedir3a: lda #$00
 + sta enemydir3
 + rts
 +
 +moveup3: lda objpos+$0d
 + sec
 + sbc #$01
 + sta objpos+$0d
 + lda objpos+$0d
 + cmp #$46
 + beq changepos3b
 + rts
 +changepos3b: lda #$01
 + sta enemydir3
 + rts
 +
 +;Move second xpos enemy (reverse direction)
 +
 +
 +;Move the x-pos enemy
 +
 +movenemy4: inc halfspeed2
 + lda halfspeed2
 + cmp #$01
 + beq resetspeed2
 + rts
 +resetspeed2: lda #$00
 + sta halfspeed2
 + lda enemydir2
 + cmp #$01
 + beq moveleft2
 + cmp #$00
 + beq moveright2
 + rts
 +moveleft2: lda objpos+$0e
 + sec
 + sbc #$01
 + sta objpos+$0e
 + lda objpos+$0e
 + cmp #$12
 + beq changedir4a
 + rts
 +changedir4a: lda #$00
 + sta enemydir4
 + rts
 +
 +moveright2: lda objpos+$0e
 + clc
 + adc #$01
 + sta objpos+$0e
 + lda objpos+$0e
 + cmp #$a8
 + beq changedir2b
 + rts
 +changedir4b: lda #$01
 + sta enemydir4
 + rts
 +
 +;Animate those enemies
 +
 +animenemies: inc animdelay3
 + lda animdelay3
 + cmp #$08
 + beq resetan3
 + rts
 +resetan3: lda #$00
 + sta animdelay3
 + ldx animcounter3
 + lda enemy1frame,x
 + sta $07fc
 + sta $07fe
 + lda enemy2frame,x
 + sta $07fd
 + inx
 + cpx #$04
 + beq resetct3
 + inc animcounter3
 + rts
 +resetct3: lda #$00
 + sta animcounter3
 + rts
 +
 +;Read the player to enemy sprite/sprite collision
 +
 +readbadcollision: lda p1dead
 + 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: lda objpos+$08,x
 + cmp badcollision+0
 + bcc nobadcol
 + cmp badcollision+1
 + bcs nobadcol
 + lda objpos+$09,x
 + cmp badcollision+2
 + bcc nobadcol
 + cmp badcollision+3
 + bcs nobadcol
 + lda #$00
 + sta animcounter1
 + sta animdelay1
 + lda #$01
 + sta p1dead
 + rts
 +nobadcol: inx
 + inx
 + cpx #$08
 + bne dobadcolloop
 +ignoredeath: rts
 +  
 +
 +
 +
 +
 +
 +
 +
 +
 +;Sprite animation frames
 +
 +p1aliveframe: dc.b $80
 +
 +p1alivetable: dc.b $80,$81,$82,$83
 +p1deadtable: dc.b $84,$85,$86,$87,$88
 +lazerdoortable: dc.b $97,$98
 +doorexittable: dc.b $99,$9a
 +enemy1frame: dc.b $8b,$8c,$8d,$8e
 +enemy2frame: dc.b $93,$94,$95,$96
 +;The Status bar:
 +
 +
 +
 +status: DC.B $13,$03,$0f,$12,$05,$3a,$20,$30,$30,$30,$30,$30,$30
 + DC.B $30,$20,$20,$0c,$05,$16,$05,$0c,$3a,$20,$30,$31,$20
 + DC.B $20,$1e,$3a,$20,$39,$20,$20,$2a,$3a,$20,$39,$39,$39
 + dc.b $39,$20,$20,$20,$20,$20,$20
 +;============================================================================
 +statuscopy: DC.B $13,$03,$0f,$12,$05,$3a,$20,$30,$30,$30,$30,$30,$30
 + DC.B $20,$20,$20,$0c,$05,$16,$05,$0c,$3a,$20,$30,$31,$20
 + DC.B $20,$1e,$3a,$20,$39,$20,$20,$2a,$3a,$20,$39,$39,$39
 + dc.b $39,$20,$20,$20,$20,$20,$20
 +
 +;The colour-cycling for the status bar
 +
 +statuscolors: dc.b $06,$06,$02,$02,$04,$04,$05,$05,$07,$07
 + dc.b $01,$01,$01,$01,$01,$01,$01,$01,$01,$01
 + dc.b $01,$01,$01,$01,$01,$01,$01,$01,$01,$01
 + dc.b $01,$01,$07,$07,$05,$05,$04,$04,$02,$02
 + dc.b $00,$00,$00,$00
 +gameovermessage: dc.b $07,$01,$0d,$05,$20,$0f,$16,$05,$12,$20
 +welldonemessage: dc.v $17,$05,$0c,$0c,$20,$04,$0f,$0e,$05,$20
 +
 +;==================================================================
 +cheatmessage: dc.b "        CHEAT MODE ACTIVATED                   "
 +
 +
 +                                   
 +</code>
base/balloonacy_ii.txt ยท Last modified: 2015-04-17 04:30 (external edit)