Note how the sprites would flicker about before/after Get Ready?
Fixed. Also, Sam got borked again, esp. during a boss fight. Now that's also fixed.
First part is pretty easy, we disable the screen during build up of the level. Fortunately the VIC allows exactly this. So we add
lda #$0b sta VIC_CONTROL_MODE
lda #$1b sta VIC_CONTROL_MODE
We already saved all sprite information, but we only restored the first two sprites (the players) and rely on the usual object initialisation for the other objects. Unfortunately some levels start out with more.
So we modify the RemoveGetReady method to restore all sprites:
;turn off sprite expansion bits ldx #0 stx VIC_SPRITE_EXPAND_X stx VIC_SPRITE_EXPAND_Y ;restore all sprite positions and colors - txa asl tay lda SPRITE_POS_X,x sta VIC_SPRITE_X_POS,y lda SPRITE_POS_Y,x sta VIC_SPRITE_Y_POS,y lda SPRITE_COLOR,x sta VIC_SPRITE_COLOR,x ldy SPRITE_ACTIVE,x cpy #0 bne + -- inx cpx #8 bne - jmp GameLoop + lda TYPE_START_SPRITE,y sta SPRITE_POINTER_BASE,x jmp --
Things can be so easy to fix!