The change is surprisingly simple. We have a function named ObjectControl, which is called every frame to update all objects. We simply check if an object is inside sewage. If it is, we skip every fourth update:
lda DELAYED_GENERIC_COUNTER and #$03 bne + ;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 #111 beq .NextObject + ldy SPRITE_ACTIVE,x ... update object
The update calls are still fast enough so no joystick movements are skipped. Yay!
Previous Step Next Step