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/gameSpider.s b/BuGS/gameSpider.s
index 21486b7..4b908a2 100644
--- a/BuGS/gameSpider.s
+++ b/BuGS/gameSpider.s
@@ -24,6 +24,20 @@ SPIDER_STATE_RIGHT_DOWN equ 7
SPIDER_STATE_RIGHT_UP equ 8
SPIDER_STATE_EXPLODING equ 9
+
+; A spider only travels in the bottom N rows. This defines that number.
+SPIDER_NUM_POSSIBLE_ROWS equ 10
+SPIDER_TOP_ROW equ GAME_NUM_TILES_TALL-SPIDER_NUM_POSSIBLE_ROWS
+SPIDER_TOP_ROW_OFFSET equ SPIDER_TOP_ROW*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO
+SPIDER_LHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET
+SPIDER_RHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET+(GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO
+
+; The spider starts 2 pixel rows above the top row offset so it can slide in on the edge of
+; the screen on a diagonal and hit the centre of the tiles with the middle of its body.
+SPIDER_STARTING_SHIFT equ 2
+SPIDER_LHS_STARTING_SCREEN_OFFSET equ SCREEN_BYTES_PER_ROW*SPIDER_STARTING_SHIFT+6
+
+
drawSpider entry
lda spiderState
bne drawSpider_cont
@@ -154,7 +168,7 @@ drawSpider_nonGame5 anop
sty numDirtyNonGameTiles
drawSpider_skipTile5 anop
- ldx spiderTileOffsets+2
+ ldx spiderTileOffsets+10
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_done
lda #TILE_STATE_DIRTY
@@ -230,7 +244,36 @@ addSpider entry
lda #SPIDER_STATE_RIGHT_DOWN
sta spiderState
- stz spiderScreenShift
+ lda #1
+ sta spiderScreenShift
+
+ ldx #SPIDER_LHS_TILE_OFFSET
+ stx spiderTileOffsets
+
+ lda tiles+TILE_ABOVE_OFFSET,x
+ sta spiderTileOffsets+2
+
+ lda tiles+TILE_LEFT_OFFSET,x
+ sta spiderTileOffsets+4
+
+ tax
+ lda tiles+TILE_SCREEN_OFFSET_OFFSET,x
+ sec
+ sbc #SPIDER_LHS_STARTING_SCREEN_OFFSET
+ sta spiderScreenOffset
+
+ lda tiles+TILE_ABOVE_OFFSET,x
+ sta spiderTileOffsets+6
+
+ lda tiles+TILE_LEFT_OFFSET,x
+ sta spiderTileOffsets+8
+
+ tax
+ lda tiles+TILE_ABOVE_OFFSET,x
+ sta spiderTileOffsets+10
+
+ lda #SPIDER_STARTING_SHIFT
+ sta spiderShiftInTile
; Write this code