;-----------------------------------
; score_and_lives.txt
;
; Display score and lives before each level.
;
; score_and_lives_load - load the background, sprites and tiles
; score_and_lives_tiles_B1 - load tiles for X-1
; score_and_lives_tiles_B2 - load tiles for X-2
; score_and_lives_tiles_B3 - load tiles for X-3
; score_and_lives_tiles_B4 - load tiles for X-4
; score_and_lives_run - Wait for user to press button 2
;-----------------------------------


;-----------------------------------
; score_and_lives_load
;
score_and_lives_load:
   PUSH BC                     ; Save registers
   PUSH DE                     ;
   PUSH HL                     ;
   PUSH AF                     ;

   CALL VDP_off                ; Screen off

   CALL clear_vram_bg_only     ; Clear background only

; Load background
   LD a, $FF                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $38                   ; High address byte
   OUT (VDP_ADDR),a            ;

   LD hl, score_and_lives_bg   ; Load title screen
   LD de, 5*64                 ;
   CALL copy_to_vdp_loop_long  ;  

; Reload tiles (they get over-written in ending)
   LD a, $7F                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $1D                   ; High address byte
   OUT (VDP_ADDR),a            ;

   LD hl, level_1_bg_tiles     ; Load level background tiles
   LD de, 32*32                ;
   CALL copy_to_vdp_loop_long  ;

   LD hl, title_bg_tiles       ; Load title screen background tiles
   LD de, 84*32                ;
   CALL copy_to_vdp_loop_long  ;

   LD hl, level_1_bg_tiles2    ; Load level background tiles
   LD de, 12*32                ;
   CALL copy_to_vdp_loop_long  ;
   
; Load correct player and item tiles
   LD a, (RAM_LEVEL_B)         ; 
   CP $01                      ;
   CALL Z, score_and_lives_tiles_B1 ;
   CP $02                      ;
   CALL Z, score_and_lives_tiles_B2 ;   
   CP $03                      ;
   CALL Z, score_and_lives_tiles_B3 ;
   CP $04                      ;
   CALL Z, score_and_lives_tiles_B4 ;  
   
; Load sprites
   LD hl, title_score_sp_vpos  ; Load vpos
   LD de, RAM_VPOS             ;
   LD b, 21                    ; 
   CALL copy_to_RAM_loop       ;
      
   LD hl, title_score_sp_hpos  ; Load hpos
   LD de, RAM_HPOS             ;
   LD b, 41                    ; 
   CALL copy_to_RAM_loop       ;
   
   LD hl, RAM_LEVEL_A          ; Level, major
   LD de, RAM_HPOS + 1         ;
   LD b, 8                     ;
sandl_load_RAM_loop:
   LD a, (hl)                  ; Load tile values.
   ADD a, 226                  ; Set tile base
   LD (de), a                  ; Prepare to write to VRAM.
   INC hl                      ;
   INC de                      ;
   INC de                      ;
   DEC b                       ; 
   JP NZ, sandl_load_RAM_loop  ;

   CALL reset_scroll           ; Fix scrolling
   LD a, 0                     ; Reset ram counter
   LD (RAM_SCROLL_CTR), a      ;
   
; Increment game state
   LD hl, RAM_GAME_STATE       ; Run title screen       
   INC (hl)                    ;   

   LD hl, $3801                ; Address of column to write to
   LD (RAM_COLUMN_ADDR), hl    ; 2 bytes

   CALL sound_level_start_sfx  ;
   
   CALL VDP_on                 ; Screen on

   POP AF                      ; Restore registers
   POP HL                      ;
   POP DE                      ;
   POP BC                      ;
   RET                         ; End subroutine

;-----------------------------------
; score_and_lives_tiles_B1
;
score_and_lives_tiles_B1:
   PUSH BC                     ; Save registers
   PUSH DE                     ;
   PUSH HL                     ;
   PUSH AF                     ;
   
   LD a, $BF                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $02                   ; High address byte
   OUT (VDP_ADDR),a            ;
   LD hl, bnbw_bread_tiles     ; Load bread character   
   LD de, 108*32               ;
   CALL copy_to_vdp_loop_long  ;    

   LD hl, chickens_eggs_tiles  ; Load chickens and eggs
   LD de, 4*32                 ;
   CALL copy_to_vdp_loop_long  ;

   LD a, $1F                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $00                   ; High address byte
   OUT (VDP_ADDR),a            ;

   LD hl, bnbw_GP_tiles        ; Load game police, parachute
   LD de, 21*32                ;
   CALL copy_to_vdp_loop_long  ;   
   
   CALL intro_load_palette     ;
   
   POP AF                      ; Restore registers
   POP HL                      ;
   POP DE                      ;
   POP BC                      ;
   RET                         ; End subroutine
   
   
;-----------------------------------
; score_and_lives_tiles_B2
;
score_and_lives_tiles_B2:
   PUSH BC                     ; Save registers
   PUSH DE                     ;
   PUSH HL                     ;
   PUSH AF                     ;
   
   LD a, $BF                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $02                   ; High address byte
   OUT (VDP_ADDR),a            ;
   LD hl, bnbw_butter_tiles    ; Load butter character   
   LD de, 108*32               ;
   CALL copy_to_vdp_loop_long  ;    

   LD hl, milk_tiles           ; Load milk
   LD de, 4*32                 ;
   CALL copy_to_vdp_loop_long  ;

   LD a, $1F                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $00                   ; High address byte
   OUT (VDP_ADDR),a            ;

   LD hl, bnbw_GPII_tiles      ; Load game police, rocket
   LD de, 21*32                ;
   CALL copy_to_vdp_loop_long  ;
   
   CALL intro_load_palette2    ;
   
   POP AF                      ; Restore registers
   POP HL                      ;
   POP DE                      ;
   POP BC                      ;
   RET                         ; End subroutine
   
;-----------------------------------
; score_and_lives_tiles_B3
;
score_and_lives_tiles_B3:
   PUSH BC                     ; Save registers
   PUSH DE                     ;
   PUSH HL                     ;
   PUSH AF                     ;
   
   LD a, $BF                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $02                   ; High address byte
   OUT (VDP_ADDR),a            ;
   LD hl, bnbw_bread_tiles     ; Load bread character   
   LD de, 108*32               ;
   CALL copy_to_vdp_loop_long  ;    

   LD hl, wheat_tiles          ; Load wheat
   LD de, 4*32                 ;
   CALL copy_to_vdp_loop_long  ;

   LD a, $1F                   ; Low address byte
   OUT (VDP_ADDR),a            ;
   LD a, $00                   ; High address byte
   OUT (VDP_ADDR),a            ;

   LD hl, bnbw_GPIII_tiles     ; Load game police, parachute
   LD de, 21*32                ;
   CALL copy_to_vdp_loop_long  ;
   
   CALL intro_load_palette3    ;
   
   POP AF                      ; Restore registers
   POP HL                      ;
   POP DE                      ;
   POP BC                      ;
   RET                         ; End subroutine

;-----------------------------------
; score_and_lives_tiles_B4
;
score_and_lives_tiles_B4:
   PUSH BC                     ; Save registers
   PUSH DE                     ;
   PUSH HL                     ;
   PUSH AF                     ;
   
   CALL score_and_lives_tiles_B2 ; Load butter
   
   LD a, (RAM_LEVEL_A)         ; Change color per round
   CP 1                        ;
   CALL Z, intro_load_palette3 ;
   CP 2                        ;
   CALL Z, intro_load_palette2 ;   
   CP 3                        ;
   CALL Z, intro_load_palette  ;
   CP 4                        ;
   CALL Z, intro_load_palette3 ;
   
   POP AF                      ; Restore registers
   POP HL                      ;
   POP DE                      ;
   POP BC                      ;
   RET                         ; End subroutine
   
;-----------------------------------
; score_and_lives_run
;
score_and_lives_run:
   PUSH BC                       ; Save registers
   PUSH DE                       ;
   PUSH HL                       ;
   PUSH AF                       ;

; Make character run
   CALL title_make_bread_run     ;

; Wait for button 1 press
; Go to next screen if button is pressed.
   IN a, (PORT_INPUT1)           ;
   BIT 5, a                      ; Look for button 2
   JP NZ, salr_all_done          ;

   LD a, (RAM_CONTROLLER_1_PREV) ;
   BIT 5, a                      ; Look for button 2
   JP Z, salr_all_done           ;

   LD hl, RAM_GAME_STATE         ; Load title screen       
   INC (hl)                      ;
   IN a, (PORT_INPUT1)           ;
   LD (RAM_CONTROLLER_1_PREV), a ;

   LD a, (RAM_LEVEL_B)           ; Load vertical level for 4
   CP $04                        ;
   JP NZ, salr_zero_lives        ;   

   LD a, 8                       ;
   LD (RAM_GAME_STATE ), a       ;
   
salr_zero_lives:
   LD a, (RAM_LIVES)             ; Number of player lives
   CP 0                          ; If zero, return to title screen
   JP NZ, salr_all_done          ;   

   LD a, 1                       ;
   LD (RAM_GAME_STATE), a        ; Game state   
   CALL level_x_new_high_score   ; Check for new high score
   
salr_all_done:
   POP AF                        ; Restore registers
   POP HL                        ;
   POP DE                        ;
   POP BC                        ;
   RET                           ; End subroutine



