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)