;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; File Name :   invban.asm
; Purpose   :   Space Invaders Application Banner State Manager
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;DO NOT MODIFY THE FOLLOWING SUBROUTINE DEFINITION;;;;;;;;;;;;;;;;;

                IF @DEF('SUBROUTINE')
                    UNDEF SUBROUTINE
                ENDIF
                DEFINE  SUBROUTINE      "'invban'"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

                GLOBAL  invwaBannerStateManager
                GLOBAL      invBannerMsg

invwaBannerStateManager:

                jr      invMainbannerStateHandler

invBannerMsg:

                db        LCDBANNER_COL10, DM5_A, DM5_L, DM5_I, DM5_E, DM5_N
                db        LCDBANNER_COL1, DM5_I, DM5_N, DM5_V, DM5_A, DM5_S, DM5_I, DM5_O, DM5_N
                db        LCD_END_BANNER


invMainbannerStateHandler:

				ld		A, [CORECurrentEvent]
                cp      A, #COREEVENT_SWITCH2DEPRESS
                jr      Z, invCancelBannerTimeout

                cp      A, #COREEVENT_SWITCH3DEPRESS
                jr      Z, invCancelBannerTimeout

                cp      A, #COREEVENT_TIMEOUTDONE_HIGHRES
                jr      NZ, invProcessInActualCommonBanner


invCancelBannerTimeout:

                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                ;
                ; CANCEL MODE BANNER TIMEOUT EVENTS
                ;
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


                ;** POSSIBLY ADD CODE TO GET FOREGROUND VARIABLES FROM EEPROM **
                ;check if the game is not in progress.
                ;if not in progress, setup the foreground variables with initial game conditions
                ;if in progress, get foreground variables from eeprom


				;setup missile rate
                ld      HL, [CORECurrentASDAddress]
                add     HL, #INVSHIPMISSILERATEOFFSET
                ld      A, #INVSHIPMISSILERATE
                ld      [HL], A

				;setup number of ships available
                ld      HL, [CORECurrentASDAddress]
                add     HL, #INVSHIPAVAILABLEOFFSET
                ld      A, #INVNUMSHIPSAVAILABLE
                ld      [HL], A


                ;initialize foreground variables
                ld      A, #(bINVAlien0State|bINVAlien1State|bINVAlien2State|bINVShipState)
                ld      [INVDisplayStatus], A

                ld      A, #21
                ld      [INVShipPosX], A
                ld      A, #11          
                ld      [INVShipPosY], A
                ld      A, #1
                ld      [INVShipDirection], A       
                ;ld     [INVShipMissilePosX], A   
                ;ld     [INVShipMissilePosY], A   

                ld      A, #INVSHIPSTEPRATE
                ld      [INVShipStepRate], A

                ld      A, #INVALIENSTEPRATE        
                ld      [INVAlienShipStepRate], A   
                ld      A, #INVALIENSTEPRATE
                ld      [INVAlienShipStepRateCurrent], A    

                ld      A, #1
                ld      [INVAlien0PosX], A        
                ld      A, #1
                ld      [INVAlien0PosY], A
                ld      A, #1
                ld      [INVAlien0Direction], A     
                ;ld     [INVAlien0MissilePosX], A 
                ;ld     [INVAlien0MissilePosY], A 

                ld      A, #6
                ld      [INVAlien1PosX], A        
                ld      A, #1
                ld      [INVAlien1PosY], A        
                ;ld     A, #1
                ;ld     [INVAlien1Direction], A     
                ;ld     [INVAlien1MissilePosX], A 
                ;ld     [INVAlien1MissilePosY], A 

                ld      A, #11
                ld      [INVAlien2PosX], A        
                ld      A, #1
                ld      [INVAlien2PosY], A        
                ;ld     A, #1
                ;ld     [INVAlien2Direction], A     
                ;ld     [INVAlien2MissilePosX], A 
                ;ld     [INVAlien2MissilePosY], A 

                ld      A, #30
                ld      [INVAlienMaxXPosition], A

                ld      A, #1
                ld      [INVAlienMinXPosition], A

                ; start our stopwatch resource
                ld      HL, [CORECurrentASDAddress]
                ld      A, [HL]
                KSTP_START_RESOURCE


				;display number of ship available
				ld		L, #DM5_S
                ld      IX, #LCDUPPERDMCOL1
                LCD_DISP_SMALL_PROP_WIDTH_DM_CHAR

                ld      HL, [CORECurrentASDAddress]
                add     HL, #INVSHIPAVAILABLEOFFSET
				ld		L, [HL]
                ld      IX, #LCDUPPERDMCOL9
                LCD_DISP_SMALL_PROP_WIDTH_DM_CHAR

				;clear main dot-matrix
				LCD_CLEAR_MAIN_DM

				ld		B, #COREDEFAULTSTATE
                CORE_REQ_STATE_CHANGE_NO_CLEAR_DISPLAY

                ret



				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

invProcessInActualCommonBanner:

                car     coreCommonBannerStateHandler
				ret


