And more! Now the executable hit the load barrier, so Exomizer is the only way to go onwards (before it was optional). Added a new waterfall char with the same effect as low water.
At the same location the other char is initiated we add this:
ldx #0
-
lda $F800 + 143 * 8,x
sta ANIM_TILE2_BYTES,x
sta ANIM_TILE2_BYTES + 8,x
inx
dey
cpx #8
bne -
At the location where we animate the first char we add this. Note that the second sta at $c000 is for the second char set.
;animate water tile
lda DELAYED_GENERIC_COUNTER
and #$03
bne +
inc ANIM_POS
lda ANIM_POS
and #$07
tay
lda ANIM_TILE_BYTES,y
sta $F800 + 111 * 8
sta $C000 + 111 * 8
lda ANIM_TILE_BYTES + 8,y
sta $F800 + 111 * 8 + 1
sta $C000 + 111 * 8 + 1
sty PARAM1
lda #7
sec
sbc PARAM1
tay
ldx #0
-
lda ANIM_TILE2_BYTES,y
sta $F800 + 143 * 8,x
sta $C000 + 143 * 8,x
inx
iny
cpx #8
bne -
+
And finally, the actual check for the water char (143) is enhanced:
;check if we're in water
ldy SPRITE_CHAR_POS_Y,x
lda SCREEN_LINE_OFFSET_TABLE_LO,y
sta ZEROPAGE_POINTER_1
lda SCREEN_BACK_LINE_OFFSET_TABLE_HI,y
sta ZEROPAGE_POINTER_1 + 1
lda SPRITE_CHAR_POS_X,x
tay
lda (ZEROPAGE_POINTER_1),y
cmp #111beq .NextObject
cmp #143beq .NextObject
Another enhancement, due to packing. Now that the packer takes care of putting the sprites and characters sets at their target location we can comment them out (plus their copy routines).
With ACME or the C64 Studio assembler you do it like this:
!ifndef CRUNCHED {
CHARSET
!binary "j.chr"
CHARSET_2
!binary "j2.chr"
SPRITES
!binary "j.spr"
END_OF_FILE
}
That's all there is to this step, have fun!