

.include "cpctelera.h.s"




mapa_actual:: .db 0
intentos_partida:: .db 3


final_nivel:: .db 0

limite_der:: .db 68
limite_down:: .db 174
limite_izq:: .db 6
limite_up:: .db 12


;DIMENSIONES MAPAS

Dimensiones_estrecho:
    ld a, #56
    ld (limite_der), a
    ld a, #172
    ld (limite_down), a
    ld a, #18
    ld (limite_izq), a
    ld a, #46
    ld (limite_up), a

ret

Dimensiones_pasillo:
    ld a, #48
    ld (limite_der), a
    ld a, #172
    ld (limite_down), a
    ld a, #26
    ld (limite_izq), a
    ld a, #46
    ld (limite_up), a

ret


Dimensiones_normal:
    ld a, #64
    ld (limite_der), a
    ld a, #172
    ld (limite_down), a
    ld a, #9
    ld (limite_izq), a
    ld a, #46
    ld (limite_up), a

ret


;; INICIO DE NIVELES

init_game::
    ld a, #1
    ld (mapa_actual), a
    ld a, #3
    ld (intentos_partida), a


    call entity_free_space 
    or a
    ret z 
    call generator_player 
    call cargar_mapa1
    call _cpct_waitVSYNC 

ret


reset_completo_game::
    ld a, #1
    ld (mapa_actual), a
    ld a, #3
    ld (intentos_partida), a
    
    call destroy_all_entities
    call entity_free_space 
    or a
    ret z  
    call generator_player 


    call select_map
    call _cpct_waitVSYNC 

ret

soft_reset_game::
    
    call destroy_all_entities
    call entity_free_space 
    or a
    ret z  
    call generator_player 


    call select_map
    call _cpct_waitVSYNC 

ret




;; CARGA DE NIVEL

carga_next_mapa::
    ld a, (mapa_actual)
    inc a 
    ld (mapa_actual), a
    call select_map

ret


select_map:

    
    ld a, (mapa_actual)

    dec a
    jp z, map_1
    dec a
    jp z, map_2
    dec a
    jp z, map_3
    dec a
    jp z, map_4
    dec a
    jp z, map_5
    dec a
    jp z, map_6
    dec a
    jp z, map_7
    dec a
    jp z, map_8
    dec a
    jp z, map_9
    dec a
    jp z, map_10
    dec a
    jp z, map_11
    dec a
    jp z, map_12
    dec a
    jp z, map_13
    dec a
    jp z, map_14
    dec a
    jp z, map_15
    dec a
    jp z, map_16
    dec a
    jp z, map_17
    dec a
    jp z, map_18
    dec a
    jp z, map_19
    dec a
    jp z, map_20
    dec a
    jp z, map_21
    dec a
    jp z, map_22
    dec a
    jp z, map_23
    dec a
    jp z, map_24
    dec a
    jp z, map_25
    dec a
    jp z, map_26
    dec a
    jp z, map_27
    jp map_final             ;; NIVEL FINAL
    map_1:
    call cargar_mapa1
    jp f_select_map
    map_2:
    call cargar_mapa2
    jp f_select_map
    map_3:
    call cargar_mapa3
    jp f_select_map
    map_4:
    call cargar_mapa4
    jp f_select_map
    map_5:
    call cargar_mapa5
    jp f_select_map
    map_6:
    call cargar_mapa6
    jp f_select_map
    map_7:
    call cargar_mapa7
    jp f_select_map
    map_8:
    call cargar_mapa8
    jp f_select_map
    map_9:
    call cargar_mapa9
    jp f_select_map
    map_10:
    call cargar_mapa10
    jp f_select_map
    map_11:
    call cargar_mapa11
    jp f_select_map
    map_12:
    call cargar_mapa12
    jp f_select_map
    map_13:
    call cargar_mapa13
    jp f_select_map
    map_14:
    call cargar_mapa14
    jp f_select_map
    map_15:
    call cargar_mapa15
    jp f_select_map
    map_16:
    call cargar_mapa16
    jp f_select_map
    map_17:
    call cargar_mapa17
    jp f_select_map
    map_18:
    call cargar_mapa18
    jp f_select_map
    map_19:
    call cargar_mapa19
    jp f_select_map
    map_20:
    call cargar_mapa20
    jp f_select_map
    map_21:
    call cargar_mapa21
    jp f_select_map
    map_22:
    call cargar_mapa22
    jp f_select_map
    map_23:
    call cargar_mapa23
    jp f_select_map
    map_24:
    call cargar_mapa24
    jp f_select_map
    map_25:
    call cargar_mapa25
    jp f_select_map
    map_26:
    call cargar_mapa26
    jp f_select_map
    map_27:
    call cargar_mapa27
    jp f_select_map



    map_final:
    call destroy_all_entities
    jp carga_pantalla_victoria
    jp f_select_map





    f_select_map:
    
    


ret



Mover_al_jugador:
    call entity_man_getEntityArray_IX ;; MOVER AL PERSONAJE
    ld e_x(ix), #35
    ld e_y(ix), #172
    ld e_posicion_borrado(ix), #40
    ld e_posicion_borrado+1(ix), #50


ret







;;;
;;; NIVELES 
;;;

cargar_mapa1::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
ret




cargar_mapa2::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa2

ret





enemigos_mapa2::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #75
    ld e_x(ix), #50
    ld e_xdest(ix), #20
    ld e_vida(ix), #2



ret 




cargar_mapa3::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa3

ret


enemigos_mapa3::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #75
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_vida(ix), #2


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #40
    ld e_xdest(ix), #56
    ld e_vida(ix), #2

ret 






cargar_mapa4::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa4

ret


enemigos_mapa4::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #50
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_vida(ix), #3


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #40
    ld e_xdest(ix), #56
    ld e_vida(ix), #2

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #150
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_vida(ix), #1
ret 




cargar_mapa5::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa5

ret


enemigos_mapa5::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #74
    ld e_x(ix), #39
    ld e_ydest(ix), #170
    ld e_eje_follow(ix), #2
    ld e_max_vel(ix), #2

ret





cargar_mapa6::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa6

ret


enemigos_mapa6:: 

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #60
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_max_vel(ix), #1


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #40
    ld e_xdest(ix), #56
    ld e_max_vel(ix), #2

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #140
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_max_vel(ix), #3

ret 






cargar_mapa7::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa7

ret


enemigos_mapa7::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #75
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_max_vel(ix), #3

ret 




cargar_mapa8::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa8

ret


enemigos_mapa8::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #60
    ld e_x(ix), #25
    ld e_xdest(ix), #20

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #40
    ld e_xdest(ix), #56

ret 



cargar_mapa9::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa9

ret


enemigos_mapa9:: 
    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #76
    ld e_x(ix), #40
    ld e_vida(ix), #5

ret 


cargar_mapa10::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa10

ret


enemigos_mapa10::  
    call entity_free_space
    or a
    ret z
    call generator_vida
    ld e_y(ix), #75
    ld e_x(ix), #40

ret 



cargar_mapa11::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa11

ret


enemigos_mapa11::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #74
    ld e_x(ix), #39
    ld e_ydest(ix), #170
    ld e_eje_follow(ix), #2
    ld e_vida(ix), #4

 

ret 





cargar_mapa12::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa12

ret


enemigos_mapa12::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #74
    ld e_x(ix), #50
    ld e_ydest(ix), #170
    ld e_eje_follow(ix), #2
    ;ld e_max_vel(ix), #1


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #74
    ld e_x(ix), #25
    ld e_ydest(ix), #170
    ld e_eje_follow(ix), #2
    ;ld e_max_vel(ix), #1
    

ret 



cargar_mapa13::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa13

ret


enemigos_mapa13::  

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #70
    ld e_x(ix), #56
    ld e_xdest(ix), #20
    ld e_max_vel(ix), #1

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #74
    ld e_x(ix), #39
    ld e_ydest(ix), #170
    ld e_eje_follow(ix), #2
    ld e_max_vel(ix), #1


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #130
    ld e_x(ix), #56
    ld e_xdest(ix), #20
    ld e_max_vel(ix), #1

ret 




cargar_mapa14::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa14

ret


enemigos_mapa14::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #50
    ld e_x(ix), #40
 
    

    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #75
    ld e_x(ix), #39
    ld e_xdest(ix), #40



   call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #39
    ld e_xdest(ix), #40

ret 





cargar_mapa15::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa15

ret


enemigos_mapa15::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #40
    ld e_max_vel(ix), #2


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #100
    ld e_x(ix), #40
    ld e_max_vel(ix), #5
    ld e_xdest(ix), #54
 
  

ret 




cargar_mapa16::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa16

ret


enemigos_mapa16:: 

    call generator_patroll
    ld e_y(ix), #60
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_vida(ix), #1


    call generator_patroll
    ld e_y(ix), #85
    ld e_x(ix), #40
    ld e_xdest(ix), #56
    ld e_vida(ix), #1

   
    call generator_patroll
    ld e_y(ix), #110
    ld e_x(ix), #40
    ld e_xdest(ix), #20
    ld e_vida(ix), #1


    call generator_patroll
    ld e_y(ix), #135
    ld e_x(ix), #40
    ld e_xdest(ix), #56
    ld e_vida(ix), #1

    

ret 


cargar_mapa17::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa17

ret


enemigos_mapa17::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #50
    ld e_x(ix), #10
    ld e_max_vel(ix), #3
    ld e_vida(ix), #2
    
    

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #148
    ld e_x(ix), #58
    ld e_max_vel(ix), #2
    ld e_vida(ix), #2
  

ret 



cargar_mapa18::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa18

ret


enemigos_mapa18::  

    call entity_free_space
    or a
    ret z
    call generator_vida
    ld e_y(ix), #75
    ld e_x(ix), #39
 
  

ret 


cargar_mapa19::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa19

ret


enemigos_mapa19:: 

   call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #50
    ld e_x(ix), #35


    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #80
    ld e_x(ix), #56
 
  

ret 



cargar_mapa20::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa20

ret


enemigos_mapa20::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #100
    ld e_x(ix), #39
    ld e_max_vel(ix), #3
    ld e_vida(ix), #4
    
    
    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #60
    ld e_x(ix), #40
    ld e_xdest(ix), #56


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #120
    ld e_x(ix), #40
    ld e_xdest(ix), #10
    
  

ret 






cargar_mapa21::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa21

ret


enemigos_mapa21::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #39
    ld e_max_vel(ix), #3
    ld e_vida(ix), #5
    
    
    
    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #50
    ld e_x(ix), #39
    
    
  

ret 






cargar_mapa22::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa22

ret


enemigos_mapa22::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #39
    ld e_max_vel(ix), #2
    ld e_vida(ix), #5
    
    
    
    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #75
    ld e_x(ix), #30
    ld e_xdest(ix), #60


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #125
    ld e_x(ix), #60
    ld e_xdest(ix), #10
    
    
  

ret 









cargar_mapa23::
    ld hl, #_g_level2
    call cargar_mapa
    call Dimensiones_estrecho
    call Mover_al_jugador
    call enemigos_mapa23

ret


enemigos_mapa23::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #39
    ld e_max_vel(ix), #2
    ld e_vida(ix), #5
    
    
    
    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #120
    ld e_x(ix), #30
    ld e_ydest(ix), #50
    ld e_eje_follow(ix), #2


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #50
    ld e_x(ix), #48
    ld e_ydest(ix), #120
    ld e_eje_follow(ix), #2
    
    
  

ret 




cargar_mapa24::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa24

ret


enemigos_mapa24::  

    call entity_free_space
    or a
    ret z
    call generator_vida
    ld e_y(ix), #75
    ld e_x(ix), #39
    

ret 






cargar_mapa25::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa25

ret


enemigos_mapa25::  

    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #50
    ld e_x(ix), #39
    ld e_max_vel(ix), #2
    ld e_vida(ix), #5
    
    
    
    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #120
    ld e_x(ix), #30
    ld e_ydest(ix), #50
    ld e_eje_follow(ix), #2


    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #50
    ld e_x(ix), #46
    ld e_ydest(ix), #120
    ld e_eje_follow(ix), #2
    
    
  

ret 










cargar_mapa26::
    ld hl, #_g_level1
    call cargar_mapa
    call Dimensiones_normal
    call Mover_al_jugador
    call enemigos_mapa26

ret


enemigos_mapa26::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #39
    ld e_max_vel(ix), #2
    ld e_vida(ix), #5
    
    
    
    call entity_free_space
    or a
    ret z
    call generator_ia_archer
    ld e_y(ix), #80
    ld e_x(ix), #30



    call entity_free_space
    or a
    ret z
    call generator_patroll
    ld e_y(ix), #120
    ld e_x(ix), #10
    ld e_xdest(ix), #62
    
    
  

ret 









cargar_mapa27::
    ld hl, #_g_level0
    call cargar_mapa
    call Dimensiones_pasillo
    call Mover_al_jugador
    call enemigos_mapa27

ret


enemigos_mapa27::  

    call entity_free_space
    or a
    ret z
    call generator_follow
    ld e_y(ix), #52
    ld e_x(ix), #39
    ld e_max_vel(ix), #2
    ld e_vida(ix), #5
    
    
  

ret 




