diff --git a/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist b/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist
index c7870af..0d0faee 100644
--- a/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,7 +7,7 @@
Binary.xcscheme_^#shared#^_
orderHint
- 1
+ 3
BuGS.xcscheme_^#shared#^_
@@ -17,12 +17,12 @@
DiskImage.xcscheme_^#shared#^_
orderHint
- 2
+ 1
doNotBuild.xcscheme_^#shared#^_
orderHint
- 3
+ 2
diff --git a/BuGS/game.s b/BuGS/game.s
index 098e096..a95d6df 100644
--- a/BuGS/game.s
+++ b/BuGS/game.s
@@ -637,7 +637,7 @@ checkKeyboard entry
checkKey_loop2 anop
short i,m
lda $e0c000
- bpl quit
+ bpl checkKey_done
sta $e0c010
long i,m
and #$007f
@@ -676,28 +676,13 @@ checkKey_done anop
waitForKey entry
-loop2 short i,m
-loop1 anop
+ short i,m
+waitForKey_loop anop
lda $e0c000
- bpl loop1
+ bpl waitForKey_loop
sta $e0c010
long i,m
- and #$007f
- cmp #'q'
- beq quit
- cmp #'Q'
- beq quit
- cmp #$001b
- beq quit
- lda colourPalette
- inc a
- cmp #$000e
- blt skip
- lda #$0000
-skip sta colourPalette
- jsl setColour
- bra loop2
-quit rtl
+ rtl
waitForVbl entry
diff --git a/BuGS/gameFlea.s b/BuGS/gameFlea.s
index c655738..91b0469 100644
--- a/BuGS/gameFlea.s
+++ b/BuGS/gameFlea.s
@@ -23,7 +23,56 @@ drawFlea entry
ldy fleaScreenOffset
jsl flea1
+ ldy numDirtyGameTiles
+
ldx fleaTileOffsets
+ lda tiles,x
+ bne drawFlea_skipTile1
+ lda #$1
+ sta tiles,x
+ txa
+ sta dirtyGameTiles,y
+ iny
+ iny
+
+drawFlea_skipTile1 anop
+
+ ldx fleaTileOffsets+2
+ lda tiles,x
+ bne drawFlea_skipTile2
+ lda #$1
+ sta tiles,x
+ txa
+ sta dirtyGameTiles,y
+ iny
+ iny
+
+drawFlea_skipTile2 anop
+
+ ldx fleaTileOffsets+4
+ lda tiles,x
+ bne drawFlea_skipTile3
+ lda #$1
+ sta tiles,x
+ txa
+ sta dirtyGameTiles,y
+ iny
+ iny
+
+drawFlea_skipTile3 anop
+
+ ldx fleaTileOffsets+6
+ lda tiles,x
+ bne drawFlea_skipTile4
+ lda #$1
+ sta tiles,x
+ txa
+ sta dirtyGameTiles,y
+ iny
+ iny
+
+drawFlea_skipTile4 anop
+ sty numDirtyGameTiles
drawFlea_done anop
rtl
@@ -33,11 +82,75 @@ updateFlea entry
lda fleaState
beq updateFlea_done
+ lda fleaHeightInTile
+ beq updateFlea_nextTile
+ dec a
+ sta fleaHeightInTile
+ beq updateFlea_bottomOfTile
+ bra updateFlea_nextAction
+
+updateFlea_bottomOfTile anop
+ lda fleaTileOffsets
+ sta fleaTileOffsets+4
+ lda fleaTileOffsets+2
+ sta fleaTileOffsets+6
+ bra updateFlea_nextAction
+
+updateFlea_nextTile anop
+ lda #$7
+ sta fleaHeightInTile
+
+ ldx fleaTileOffsets
+ lda tiles+8,x
+ cmp #$ffff
+ beq updateFlea_bottom
+ sta fleaTileOffsets
+
+ ldx fleaTileOffsets+2
+ lda tiles+8,x
+ sta fleaTileOffsets+2
+
+ bra updateFlea_nextAction
+
+updateFlea_bottom anop
+ stz fleaState
+ rtl
+
+updateFlea_nextAction anop
+ lda fleaScreenOffset
+ clc
+ adc #$a0
+ sta fleaScreenOffset
+
updateFlea_done anop
rtl
addFlea entry
+ lda fleaState
+ bne addFlea_done
+
+ lda #fleaState_falling
+ sta fleaState
+
+ lda #$7
+ sta fleaHeightInTile
+
+ lda #$40
+ sta fleaTileOffsets
+ sta fleaTileOffsets+4
+
+ tax
+ lda tiles+10,x
+ sta fleaTileOffsets+2
+ sta fleaTileOffsets+6
+
+ lda tiles+2,x
+ sec
+ sbc #$463
+ sta fleaScreenOffset
+
+addFlea_done anop
rtl
@@ -47,5 +160,6 @@ fleaTileOffsets dc i2'0'
dc i2'0'
dc i2'0'
dc i2'0'
+fleaHeightInTile dc i2'0'
end