ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 1.
Hexadecimal [16-Bits]



                              1 .include "entity.h.s"
                              1 .globl entity_create
                              2 .globl entity_copy
                              3 .globl entity_doForAll
                              4 .globl entity_doForAll_matching
                              5 .globl entity_doForAll_pairs_matching
                              6 .globl entity_update
                              7 .globl entity_vector
                              8 .globl entity_set4destruction
                              9 .globl entity_set4creation
                             10 .globl entity_register
                             11 .globl num_entities
                             12 .globl getEntity2
                             13 
                             14 
                             15 ; Constantes
                     0000    16 e_tipo            = 0
                     0001    17 e_cmps            = 1
                     0002    18 e_x               = 2
                     0003    19 e_y               = 3
                     0004    20 e_vx              = 4
                     0005    21 e_vy              = 5
                     0006    22 e_w               = 6
                     0007    23 e_h               = 7
                     0008    24 e_spriteL         = 8
                     0009    25 e_spriteH         = 9
                     000A    26 e_iaL             = 10
                     000B    27 e_iaH             = 11
                     000C    28 e_animL           = 12
                     000D    29 e_animH           = 13
                     000E    30 e_anim_st         = 14
                     000F    31 e_animCounter     = 15
                     0010    32 e_collidesAgainst = 16
                     0011    33 e_last_dir        = 17
                     0012    34 e_last_dirY       = 18
                     0013    35 e_player_shot     = 19
                     0014    36 e_actualizaMove   = 20
                     0015    37 e_contMove        = 21
                     0016    38 e_aim_X           = 22
                     0017    39 e_aim_Y           = 23
                     0018    40 e_hp              = 24
                     0019    41 e_perteneceL      = 25
                     001A    42 e_perteneceH      = 26
                     001B    43 e_tablaAnimL      = 27
                     001C    44 e_tablaAnimH      = 28
                     001D    45 e_anim_especial   = 29
                     001E    46 e_invencibilidad  = 30
                     001F    47 e_atacando        = 31
                             48 
                             49 
                             50 ;; Tipos
                     0000    51 e_type_invalid  = 0x00 
                     0001    52 e_type_player   = 0x01
                     0002    53 e_type_zombie   = 0x02  ;; realmente no es para el zombie, es para todos los enemigos
                     0004    54 e_type_shot     = 0x04
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 2.
Hexadecimal [16-Bits]



                     0008    55 e_type_arcoiris = 0x08
                     0010    56 e_type_vida     = 0x10
                     0080    57 e_type_dead     = 0x80
                     007F    58 e_type_default  = 0x7F
                             59 
                             60 ;; Components
                     0001    61 e_cmp_render   = 0x01
                     0002    62 e_cmp_movable  = 0x02
                     0004    63 e_cmp_input    = 0x04
                     0008    64 e_cmp_ia       = 0x08
                     0010    65 e_cmp_animated = 0x10
                     0020    66 e_cmp_collider = 0x20
                     0040    67 e_cmp_vidaextra = 0x40
                             68 
                     0010    69 k_max_num_entities = 16
                     0020    70 k_size_entity      = 32
                             71 
                             72 
                             73 
                             74 ;; Define an entity 
                             75 .macro DefineEntity _name, _tipo, _cmps, _x, _y, _vx, _vy, _w, _h, _sprite, _ia, _anim, _anim_st,_animCounter, _collides, _lastdir, _lastdirY , _playerShot, _actualizaMove, _contMove, _aimX, _aimY, _hp, _pertenece, _tablaAnim, _animEspecial, _invencible, _atacando
                             76    _name:
                             77       .db _tipo      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
                             78       .db _cmps      ;; ()
                             79       .db _x,  _y    ;; x, y
                             80       .db _vx, _vy   ;; Vx, Vy
                             81       .db _w, _h     ;; Width, Height
                             82       .dw _sprite    ;; sprite (puntero al sprite)
                             83       .dw _ia        ;; IA     (puntero a funcion)
                             84       .dw _anim      ;; puntero a la animacion
                             85       .db _anim_st
                             86       .db _animCounter  ;; contador de animacion
                             87       .db _collides  ;; Collides Against
                             88       .db _lastdir, _lastdirY   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
                             89       .db _playerShot ;; 1 si la entidad ya ha disparado, 0 si no
                             90       .db _actualizaMove
                             91       .db _contMove
                             92       .db _aimX, _aimY
                             93       .db _hp
                             94       .dw _pertenece
                             95       .dw _tablaAnim    ;; puntero a la tabla que le corresponde de animaciones
                             96       .db _animEspecial ;; indica si es normal (0) o especial (1)
                             97       .db _invencible
                             98       .db _atacando
                             99 .endm
                            100 
                            101 ;; Define an entity with default values
                            102 .macro DefineEntityDefault _name, _suf
                            103                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
                            104    DefineEntity _name'_suf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
                            105 .endm
                            106 
                            107 ;; Define N default entities (changing the names)
                            108 .macro DefineNEntities _name, _n
                            109    _c = 0
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 3.
Hexadecimal [16-Bits]



                            110    .rept _n
                            111       DefineEntityDefault _name, \_c
                            112       _c = _c + 1 
                            113    .endm
                            114 .endm
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 4.
Hexadecimal [16-Bits]



                              2 .include "sys/physics.h.s"
                              1 .globl cpct_scanKeyboard_asm
                              2 .globl cpct_isKeyPressed_asm
                              3 .globl physics_update_one
                              4 .globl physics_update
                              5 .globl cpct_akp_SFXInit_asm
                              6 .globl cpct_akp_SFXPlay_asm
                              7 .globl cpct_akp_SFXStopAll_asm
                              8 .globl cpct_akp_SFXGetInstrument_asm
                              9 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 5.
Hexadecimal [16-Bits]



                              3 .include "man/entity_templates.h.s"
                              1 .globl player1
                              2 .globl player2
                              3 .globl zombie
                              4 .globl arquero
                              5 .globl arcoiris
                              6 .globl shot1
                              7 .globl vida
                              8 .globl shot_arquero
                              9 .globl ghostX
                             10 .globl ghostY
                             11 .globl monster
                             12 .globl semiseguidor
                             13 .globl cangrejo
                             14 .globl topo
                             15 .globl muriendo_tmp_cmps
                             16 .globl zBoss
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 6.
Hexadecimal [16-Bits]



                              4 .include "man/game.h.s"
                              1 .globl game_init 
                              2 .globl game_play 
                              3 .globl game_menu
                              4 .globl render_init
                              5 .globl cpct_waitVSYNC_asm
                              6 .globl game_create_template
                              7 .globl cpct_drawStringM0_asm
                              8 .globl cpct_akp_musicPlay_asm
                              9 .globl cpct_akp_musicInit_asm
                             10 .globl cpct_zx7b_decrunch_s_asm
                             11 .globl cpct_akp_stop_asm
                             12 .globl set_int_handler
                             13 .globl cpct_akp_SFXInit_asm
                             14 .globl cpct_akp_SFXPlay_asm
                             15 .globl cpct_akp_SFXStop_asm
                             16 
                             17 .globl bool_final_juego
                             18 .globl bool_game_over
                             19 .globl bool_final_ronda
                             20 .globl cont_bajas_enemigos
                             21 .globl incrementa_cont_bajas_enemigos
                             22 
                             23 .globl cpct_setPALColour_asm
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 7.
Hexadecimal [16-Bits]



                              5 
                              6 .globl _spr_shotArcoiris_0
                              7 .globl _spr_shotArcoiris_1
                              8 .globl _spr_shotArcoiris_2
                              9 .globl _spr_shotArcoiris_3
                             10 
                             11 
   8FF6                      12 entity_vector:
   8FF6                      13     DefineNEntities entity_vector k_max_num_entities
                     0000     1    _c = 0
                              2    .rept k_max_num_entities
                              3       DefineEntityDefault entity_vector, \_c
                              4       _c = _c + 1 
                              5    .endm
   0000                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0000                       2    DefineEntity entity_vector0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0000                       1    entity_vector0:
   8FF6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   8FF7 00                    3       .db 0x00      ;; ()
   8FF8 00 00                 4       .db 0x00,  0x00    ;; x, y
   8FFA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   8FFC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   8FFE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9000 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9002 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9004 00                   10       .db 0x00
   9005 00                   11       .db 0x00  ;; contador de animacion
   9006 00                   12       .db 0x00  ;; Collides Against
   9007 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9009 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   900A 00                   15       .db 0x00
   900B 00                   16       .db 0x00
   900C 00 00                17       .db 0x00, 0x00
   900E 00                   18       .db 0x00
   900F 00 00                19       .dw 0x0000
   9011 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9013 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9014 DE                   22       .db 0xDE
   9015 AD                   23       .db 0xAD
                     0001     2       _c = _c + 1 
   9016                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0020                       2    DefineEntity entity_vector1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0020                       1    entity_vector1:
   9016 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9017 00                    3       .db 0x00      ;; ()
   9018 00 00                 4       .db 0x00,  0x00    ;; x, y
   901A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   901C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   901E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9020 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9022 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9024 00                   10       .db 0x00
   9025 00                   11       .db 0x00  ;; contador de animacion
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 8.
Hexadecimal [16-Bits]



   9026 00                   12       .db 0x00  ;; Collides Against
   9027 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9029 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   902A 00                   15       .db 0x00
   902B 00                   16       .db 0x00
   902C 00 00                17       .db 0x00, 0x00
   902E 00                   18       .db 0x00
   902F 00 00                19       .dw 0x0000
   9031 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9033 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9034 DE                   22       .db 0xDE
   9035 AD                   23       .db 0xAD
                     0002     2       _c = _c + 1 
   9036                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0040                       2    DefineEntity entity_vector2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0040                       1    entity_vector2:
   9036 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9037 00                    3       .db 0x00      ;; ()
   9038 00 00                 4       .db 0x00,  0x00    ;; x, y
   903A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   903C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   903E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9040 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9042 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9044 00                   10       .db 0x00
   9045 00                   11       .db 0x00  ;; contador de animacion
   9046 00                   12       .db 0x00  ;; Collides Against
   9047 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9049 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   904A 00                   15       .db 0x00
   904B 00                   16       .db 0x00
   904C 00 00                17       .db 0x00, 0x00
   904E 00                   18       .db 0x00
   904F 00 00                19       .dw 0x0000
   9051 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9053 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9054 DE                   22       .db 0xDE
   9055 AD                   23       .db 0xAD
                     0003     2       _c = _c + 1 
   9056                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0060                       2    DefineEntity entity_vector3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0060                       1    entity_vector3:
   9056 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9057 00                    3       .db 0x00      ;; ()
   9058 00 00                 4       .db 0x00,  0x00    ;; x, y
   905A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   905C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   905E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9060 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9062 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9064 00                   10       .db 0x00
   9065 00                   11       .db 0x00  ;; contador de animacion
   9066 00                   12       .db 0x00  ;; Collides Against
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 9.
Hexadecimal [16-Bits]



   9067 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9069 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   906A 00                   15       .db 0x00
   906B 00                   16       .db 0x00
   906C 00 00                17       .db 0x00, 0x00
   906E 00                   18       .db 0x00
   906F 00 00                19       .dw 0x0000
   9071 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9073 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9074 DE                   22       .db 0xDE
   9075 AD                   23       .db 0xAD
                     0004     2       _c = _c + 1 
   9076                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0080                       2    DefineEntity entity_vector4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0080                       1    entity_vector4:
   9076 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9077 00                    3       .db 0x00      ;; ()
   9078 00 00                 4       .db 0x00,  0x00    ;; x, y
   907A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   907C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   907E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9080 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9082 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9084 00                   10       .db 0x00
   9085 00                   11       .db 0x00  ;; contador de animacion
   9086 00                   12       .db 0x00  ;; Collides Against
   9087 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9089 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   908A 00                   15       .db 0x00
   908B 00                   16       .db 0x00
   908C 00 00                17       .db 0x00, 0x00
   908E 00                   18       .db 0x00
   908F 00 00                19       .dw 0x0000
   9091 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9093 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9094 DE                   22       .db 0xDE
   9095 AD                   23       .db 0xAD
                     0005     2       _c = _c + 1 
   9096                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   00A0                       2    DefineEntity entity_vector5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   00A0                       1    entity_vector5:
   9096 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9097 00                    3       .db 0x00      ;; ()
   9098 00 00                 4       .db 0x00,  0x00    ;; x, y
   909A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   909C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   909E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   90A0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   90A2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   90A4 00                   10       .db 0x00
   90A5 00                   11       .db 0x00  ;; contador de animacion
   90A6 00                   12       .db 0x00  ;; Collides Against
   90A7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 10.
Hexadecimal [16-Bits]



   90A9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   90AA 00                   15       .db 0x00
   90AB 00                   16       .db 0x00
   90AC 00 00                17       .db 0x00, 0x00
   90AE 00                   18       .db 0x00
   90AF 00 00                19       .dw 0x0000
   90B1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   90B3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   90B4 DE                   22       .db 0xDE
   90B5 AD                   23       .db 0xAD
                     0006     2       _c = _c + 1 
   90B6                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   00C0                       2    DefineEntity entity_vector6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   00C0                       1    entity_vector6:
   90B6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   90B7 00                    3       .db 0x00      ;; ()
   90B8 00 00                 4       .db 0x00,  0x00    ;; x, y
   90BA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   90BC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   90BE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   90C0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   90C2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   90C4 00                   10       .db 0x00
   90C5 00                   11       .db 0x00  ;; contador de animacion
   90C6 00                   12       .db 0x00  ;; Collides Against
   90C7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   90C9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   90CA 00                   15       .db 0x00
   90CB 00                   16       .db 0x00
   90CC 00 00                17       .db 0x00, 0x00
   90CE 00                   18       .db 0x00
   90CF 00 00                19       .dw 0x0000
   90D1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   90D3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   90D4 DE                   22       .db 0xDE
   90D5 AD                   23       .db 0xAD
                     0007     2       _c = _c + 1 
   90D6                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   00E0                       2    DefineEntity entity_vector7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   00E0                       1    entity_vector7:
   90D6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   90D7 00                    3       .db 0x00      ;; ()
   90D8 00 00                 4       .db 0x00,  0x00    ;; x, y
   90DA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   90DC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   90DE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   90E0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   90E2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   90E4 00                   10       .db 0x00
   90E5 00                   11       .db 0x00  ;; contador de animacion
   90E6 00                   12       .db 0x00  ;; Collides Against
   90E7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   90E9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 11.
Hexadecimal [16-Bits]



   90EA 00                   15       .db 0x00
   90EB 00                   16       .db 0x00
   90EC 00 00                17       .db 0x00, 0x00
   90EE 00                   18       .db 0x00
   90EF 00 00                19       .dw 0x0000
   90F1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   90F3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   90F4 DE                   22       .db 0xDE
   90F5 AD                   23       .db 0xAD
                     0008     2       _c = _c + 1 
   90F6                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0100                       2    DefineEntity entity_vector8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0100                       1    entity_vector8:
   90F6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   90F7 00                    3       .db 0x00      ;; ()
   90F8 00 00                 4       .db 0x00,  0x00    ;; x, y
   90FA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   90FC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   90FE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9100 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9102 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9104 00                   10       .db 0x00
   9105 00                   11       .db 0x00  ;; contador de animacion
   9106 00                   12       .db 0x00  ;; Collides Against
   9107 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9109 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   910A 00                   15       .db 0x00
   910B 00                   16       .db 0x00
   910C 00 00                17       .db 0x00, 0x00
   910E 00                   18       .db 0x00
   910F 00 00                19       .dw 0x0000
   9111 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9113 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9114 DE                   22       .db 0xDE
   9115 AD                   23       .db 0xAD
                     0009     2       _c = _c + 1 
   9116                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0120                       2    DefineEntity entity_vector9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0120                       1    entity_vector9:
   9116 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9117 00                    3       .db 0x00      ;; ()
   9118 00 00                 4       .db 0x00,  0x00    ;; x, y
   911A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   911C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   911E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9120 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9122 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9124 00                   10       .db 0x00
   9125 00                   11       .db 0x00  ;; contador de animacion
   9126 00                   12       .db 0x00  ;; Collides Against
   9127 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9129 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   912A 00                   15       .db 0x00
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 12.
Hexadecimal [16-Bits]



   912B 00                   16       .db 0x00
   912C 00 00                17       .db 0x00, 0x00
   912E 00                   18       .db 0x00
   912F 00 00                19       .dw 0x0000
   9131 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9133 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9134 DE                   22       .db 0xDE
   9135 AD                   23       .db 0xAD
                     000A     2       _c = _c + 1 
   9136                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0140                       2    DefineEntity entity_vector10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0140                       1    entity_vector10:
   9136 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9137 00                    3       .db 0x00      ;; ()
   9138 00 00                 4       .db 0x00,  0x00    ;; x, y
   913A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   913C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   913E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9140 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9142 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9144 00                   10       .db 0x00
   9145 00                   11       .db 0x00  ;; contador de animacion
   9146 00                   12       .db 0x00  ;; Collides Against
   9147 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9149 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   914A 00                   15       .db 0x00
   914B 00                   16       .db 0x00
   914C 00 00                17       .db 0x00, 0x00
   914E 00                   18       .db 0x00
   914F 00 00                19       .dw 0x0000
   9151 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9153 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9154 DE                   22       .db 0xDE
   9155 AD                   23       .db 0xAD
                     000B     2       _c = _c + 1 
   9156                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0160                       2    DefineEntity entity_vector11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0160                       1    entity_vector11:
   9156 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9157 00                    3       .db 0x00      ;; ()
   9158 00 00                 4       .db 0x00,  0x00    ;; x, y
   915A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   915C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   915E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9160 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9162 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9164 00                   10       .db 0x00
   9165 00                   11       .db 0x00  ;; contador de animacion
   9166 00                   12       .db 0x00  ;; Collides Against
   9167 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9169 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   916A 00                   15       .db 0x00
   916B 00                   16       .db 0x00
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 13.
Hexadecimal [16-Bits]



   916C 00 00                17       .db 0x00, 0x00
   916E 00                   18       .db 0x00
   916F 00 00                19       .dw 0x0000
   9171 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9173 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9174 DE                   22       .db 0xDE
   9175 AD                   23       .db 0xAD
                     000C     2       _c = _c + 1 
   9176                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   0180                       2    DefineEntity entity_vector12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   0180                       1    entity_vector12:
   9176 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9177 00                    3       .db 0x00      ;; ()
   9178 00 00                 4       .db 0x00,  0x00    ;; x, y
   917A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   917C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   917E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   9180 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   9182 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   9184 00                   10       .db 0x00
   9185 00                   11       .db 0x00  ;; contador de animacion
   9186 00                   12       .db 0x00  ;; Collides Against
   9187 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   9189 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   918A 00                   15       .db 0x00
   918B 00                   16       .db 0x00
   918C 00 00                17       .db 0x00, 0x00
   918E 00                   18       .db 0x00
   918F 00 00                19       .dw 0x0000
   9191 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   9193 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   9194 DE                   22       .db 0xDE
   9195 AD                   23       .db 0xAD
                     000D     2       _c = _c + 1 
   9196                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   01A0                       2    DefineEntity entity_vector13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   01A0                       1    entity_vector13:
   9196 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   9197 00                    3       .db 0x00      ;; ()
   9198 00 00                 4       .db 0x00,  0x00    ;; x, y
   919A 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   919C 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   919E 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   91A0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   91A2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   91A4 00                   10       .db 0x00
   91A5 00                   11       .db 0x00  ;; contador de animacion
   91A6 00                   12       .db 0x00  ;; Collides Against
   91A7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   91A9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   91AA 00                   15       .db 0x00
   91AB 00                   16       .db 0x00
   91AC 00 00                17       .db 0x00, 0x00
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 14.
Hexadecimal [16-Bits]



   91AE 00                   18       .db 0x00
   91AF 00 00                19       .dw 0x0000
   91B1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   91B3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   91B4 DE                   22       .db 0xDE
   91B5 AD                   23       .db 0xAD
                     000E     2       _c = _c + 1 
   91B6                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   01C0                       2    DefineEntity entity_vector14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   01C0                       1    entity_vector14:
   91B6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   91B7 00                    3       .db 0x00      ;; ()
   91B8 00 00                 4       .db 0x00,  0x00    ;; x, y
   91BA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   91BC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   91BE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   91C0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   91C2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   91C4 00                   10       .db 0x00
   91C5 00                   11       .db 0x00  ;; contador de animacion
   91C6 00                   12       .db 0x00  ;; Collides Against
   91C7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   91C9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   91CA 00                   15       .db 0x00
   91CB 00                   16       .db 0x00
   91CC 00 00                17       .db 0x00, 0x00
   91CE 00                   18       .db 0x00
   91CF 00 00                19       .dw 0x0000
   91D1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   91D3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   91D4 DE                   22       .db 0xDE
   91D5 AD                   23       .db 0xAD
                     000F     2       _c = _c + 1 
   91D6                       1       DefineEntityDefault entity_vector, \_c
                              1                         ;;  Tipo  cmps  x     y      vx   vy   width height  sprite   ia     anim  status counter  collides  last_dir last_dir  player_shot actualizaMove contMove aimX, aimY    HP   pertenece tablaAnim especial invencibile atacando
   01E0                       2    DefineEntity entity_vector15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000, 0x0000, 0x0000, 0x00, 0x00,    0x00,    0x00,    0x00,       0x00,       0x00,       0x00,     0x00, 0x00,  0x00,  0x0000,  0x0000,   0x00,        0xDE,     0xAD;;
   01E0                       1    entity_vector15:
   91D6 00                    2       .db 0x00      ;; (Invalid 00, Player 01, Enemigo 02, Dead 80, Default 7F)
   91D7 00                    3       .db 0x00      ;; ()
   91D8 00 00                 4       .db 0x00,  0x00    ;; x, y
   91DA 00 00                 5       .db 0x00, 0x00   ;; Vx, Vy
   91DC 00 00                 6       .db 0x00, 0x00     ;; Width, Height
   91DE 00 00                 7       .dw 0x0000    ;; sprite (puntero al sprite)
   91E0 00 00                 8       .dw 0x0000        ;; IA     (puntero a funcion)
   91E2 00 00                 9       .dw 0x0000      ;; puntero a la animacion
   91E4 00                   10       .db 0x00
   91E5 00                   11       .db 0x00  ;; contador de animacion
   91E6 00                   12       .db 0x00  ;; Collides Against
   91E7 00 00                13       .db 0x00, 0x00   ;; Ultima direccion a la que apunta la entidad (solo para ver hacia donde dispara el player)
   91E9 00                   14       .db 0x00 ;; 1 si la entidad ya ha disparado, 0 si no
   91EA 00                   15       .db 0x00
   91EB 00                   16       .db 0x00
   91EC 00 00                17       .db 0x00, 0x00
   91EE 00                   18       .db 0x00
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 15.
Hexadecimal [16-Bits]



   91EF 00 00                19       .dw 0x0000
   91F1 00 00                20       .dw 0x0000    ;; puntero a la tabla que le corresponde de animaciones
   91F3 00                   21       .db 0x00 ;; indica si es normal (0) o especial (1)
   91F4 DE                   22       .db 0xDE
   91F5 AD                   23       .db 0xAD
                     0010     2       _c = _c + 1 
                             14 
                             15 
   91F6 00                   16 num_entities: .db 00            
   91F7 F6 8F                17 next_entity : .dw entity_vector
   91F9 00 00                18 registro_ix : .dw 0x0000
   91FB 00                   19 bool_create_enemy: .db 0x00
   91FC 00 00                20 create_enemy_type: .dw 0x0000
                             21 
   91FE 00                   22 registroH: .db 0x00
   91FF 00                   23 registroL: .db 0x00
                             24 
                             25 ;; ===============================
                             26 ;; REGISTRA UNA ENTIDAD
                             27 ;; Output: HL --> Entidad creada 
                             28 ;; Destroys: AF, BC, HL
                             29 ;; ===============================
   9200                      30 entity_register:
                             31     ; Update the counter of num_entities (num_entities++)
   9200 3A F6 91      [13]   32     ld a, (num_entities)
   9203 3C            [ 4]   33     inc a
   9204 32 F6 91      [13]   34     ld (num_entities), a
                             35 
                             36     ; EntityVector points to the next entity
   9207 2A F7 91      [16]   37     ld hl, (next_entity)
   920A 01 20 00      [10]   38     ld bc, #k_size_entity
   920D 09            [11]   39     add hl, bc
   920E 22 F7 91      [16]   40     ld (next_entity), hl
                             41 
   9211 B7            [ 4]   42     or a        ;; elimina el posible acarraeo
   9212 ED 42         [15]   43     sbc hl, bc  ;; resta con accarreo HL = HL - BC (deja HL como estaba antes --> CurrentEntity)
                             44 
   9214 C9            [10]   45 ret
                             46 
                             47 
                             48 ;; ===============================
                             49 ;; CREA UNA ENTIDAD
                             50 ;; Output: HL, IX --> Entidad creada 
                             51 ;; ===============================
   9215                      52 entity_create:
   9215 CD 00 92      [17]   53     call entity_register
                             54 
                             55     ;; IX = HL (entidad creada)
   9218 22 F9 91      [16]   56     ld (registro_ix), hl
   921B DD 2A F9 91   [20]   57     ld ix, (registro_ix)
                             58 
   921F C9            [10]   59 ret
                             60 
                             61 ;; ===============================
                             62 ;; COPIA UNA ENTIDAD
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 16.
Hexadecimal [16-Bits]



                             63 ;; Input: HL -> Entidad Origen (tmp)
                             64 ;;        DE -> Entidad Destino (entidad creada)
                             65 ;;
                             66 ;; Output: HL -->Entidad Creada
                             67 ;;         IX -->Entidad Creada
                             68 ;; ===============================
   9220                      69 entity_copy:
                             70 
   9220 01 20 00      [10]   71     ld bc, #k_size_entity
   9223 ED B0         [21]   72     ldir    ;; copy from HL to DE, bc bytes
                             73     
   9225 EB            [ 4]   74     ex de, hl       ;; HL -> Siguiente Entidad
   9226 ED 42         [15]   75     sbc hl, bc      ;; HL = HL - EntidadSize (Entidad Nueva)
                             76     
   9228 C9            [10]   77 ret
                             78 
                             79 
   9229                      80 entity_doForAll:
   9229 3A F6 91      [13]   81     ld a, (num_entities)
   922C FE 00         [ 7]   82     cp #0 
   922E 28 1E         [12]   83     jr z, noEntitiesForAll
                             84 
   9230 DD 21 F6 8F   [14]   85     ld ix, #entity_vector
   9234 22 41 92      [16]   86     ld (metodoForAll), hl
                             87    
   9237                      88     bucleForAll:
   9237 F5            [11]   89         push af
                             90 
                             91         ;;comprobamos si la entidad es valida o no
   9238 DD 7E 00      [19]   92         ld a, e_tipo(ix) 
   923B FE 00         [ 7]   93         cp #e_type_invalid
   923D 28 0F         [12]   94         jr z, noEntitiesForAll
                             95         
   923F C5            [11]   96         push bc
                     024B    97         metodoForAll=.+1 ;;la direccion que quiero modificar (la actual mas 1)
   9240 CD 23 A9      [17]   98         call physics_update_one
   9243 C1            [10]   99         pop bc
                            100        
   9244 F1            [10]  101         pop af
   9245 11 20 00      [10]  102         ld de, #k_size_entity
   9248 DD 19         [15]  103         add ix, de ;;paso a la siguiente
                            104         
   924A 3D            [ 4]  105         dec a
   924B C2 37 92      [10]  106         jp nz, bucleForAll
                            107 
   924E                     108     noEntitiesForAll:
   924E C9            [10]  109 ret
                            110 
                            111 
                            112 
                            113 
                            114 ;; ===============================
                            115 ;; EJECUTA PARA TODAS LAS ENTIDADES CON COMPROBACION
                            116 ;; Input: HL -> Rutina a ejecutar
                            117 ;;        B  -> Signature a comprobar
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 17.
Hexadecimal [16-Bits]



                            118 ;; Output:
                            119 ;; ===============================
   924F                     120 entity_doForAll_matching:
   924F 3A F6 91      [13]  121     ld a, (num_entities)
   9252 FE 00         [ 7]  122     cp #0 
   9254 28 27         [12]  123     jr z, noEntities
                            124 
   9256 DD 21 F6 8F   [14]  125     ld ix, #entity_vector
   925A 22 6F 92      [16]  126     ld (metodo), hl
                            127    
   925D                     128     bucle:
   925D 4F            [ 4]  129         ld c, a
                            130 
                            131         ;;comprobamos si la entidad es valida o no
   925E DD 7E 00      [19]  132         ld a, e_tipo(ix) 
   9261 FE 00         [ 7]  133         cp #e_type_invalid
   9263 28 18         [12]  134         jr z, noEntities
                            135         
   9265 C5            [11]  136         push bc
                            137         ;; Comprobar que el estado de la entidad coincide con la mascara que pasan por el registro B
                            138         
   9266 DD 7E 01      [19]  139         ld a, e_cmps(ix) 
   9269 A0            [ 4]  140         and b
   926A B8            [ 4]  141         cp b
   926B 20 05         [12]  142         jr nz, no_matching
   926D C5            [11]  143             push bc
                     0279   144             metodo=.+1 ;;la direccion que quiero modificar (la actual mas 1)
   926E CD 23 A9      [17]  145             call physics_update_one
   9271 C1            [10]  146             pop bc
                            147 
   9272                     148         no_matching:
                            149        
   9272 C1            [10]  150         pop bc
   9273 79            [ 4]  151         ld a, c
   9274 11 20 00      [10]  152         ld de, #k_size_entity
   9277 DD 19         [15]  153         add ix, de ;;paso a la siguiente
                            154         
   9279 3D            [ 4]  155         dec a
   927A C2 5D 92      [10]  156         jp nz, bucle
                            157 
   927D                     158     noEntities:
   927D C9            [10]  159 ret
                            160 
                            161 
                            162 ;; ===============================
                            163 ;; EJECUTA PARA TODAS LAS ENTIDADES CON COMPROBACION DE DOS EN DOS
                            164 ;; Input: HL -> Rutina a ejecutar
                            165 ;;        B  -> Signature a comprobar
                            166 ;; Output:
                            167 ;; ===============================
   927E                     168 entity_doForAll_pairs_matching:
   927E 3A F6 91      [13]  169     ld a, (num_entities)
   9281 FE 00         [ 7]  170     cp #0 
   9283 28 4E         [12]  171     jr z, noEntities1
                            172 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 18.
Hexadecimal [16-Bits]



   9285 DD 21 F6 8F   [14]  173     ld ix, #entity_vector ;; ix => primera entidad
   9289 22 BE 92      [16]  174     ld (metodoPair), hl
                            175    
   928C                     176     bucle1:
                            177         
   928C 4F            [ 4]  178         ld c, a
                            179         ;;comprobamos si la entidad es valida o no
   928D DD 7E 00      [19]  180         ld a, e_tipo(ix) 
   9290 FE 00         [ 7]  181         cp #e_type_invalid
   9292 28 3F         [12]  182         jr z, noEntities1
                            183         
   9294 C5            [11]  184         push bc
                            185         ;; Comprobar que el estado de la entidad coincide con la mascara que pasan por el registro B
   9295 DD 7E 01      [19]  186         ld a, e_cmps(ix) 
   9298 A0            [ 4]  187         and b
   9299 B8            [ 4]  188         cp b
   929A 20 2C         [12]  189         jr nz, no_matching1
                            190 
                            191            ;; IY => Siguiente entidad (a la de la derecha de IX)
   929C 11 20 00      [10]  192            ld de, #k_size_entity    ;; DE = tamEntity
   929F DD 22 F9 91   [20]  193            ld (registro_ix), ix     ;; regIX = Entidad1
   92A3 2A F9 91      [16]  194            ld hl, (registro_ix)     ;; HL = Entidad1
   92A6 19            [11]  195            add hl, de               ;; HL = HL + DE = Entidad2
   92A7 22 F9 91      [16]  196            ld (registro_ix), hl     ;; regIX = Entidad2
   92AA FD 2A F9 91   [20]  197            ld iy, (registro_ix)     ;; IY => Entidad 2
                            198 
   92AE                     199             bucle2:
                            200                 ;;comprobamos si la entidad2 es valida o no
   92AE FD 7E 00      [19]  201                 ld a, e_tipo(iy) 
   92B1 FE 00         [ 7]  202                 cp #e_type_invalid
   92B3 28 13         [12]  203                 jr z, no_matching1
                            204 
                            205                 ;; Comprobar que el estado de la entidad coincide con la mascara que pasan por el registro B (collider)
   92B5 FD 7E 01      [19]  206                 ld a, e_cmps(iy) 
   92B8 A0            [ 4]  207                 and b
   92B9 B8            [ 4]  208                 cp b
   92BA 20 05         [12]  209                 jr nz, no_matching2
   92BC C5            [11]  210                     push bc
                            211                     ;; ENtidades son colisionables
                            212                     ;; Comprobamos si Entidad1 (en IX) colisiona con ENtidad2 (en IY)
                            213                     ;e_collidesAgainst(ix)
                            214 
                     02C8   215                     metodoPair=.+1 ;;la direccion que quiero modificar (la actual mas 1)
   92BD CD 23 A9      [17]  216                     call physics_update_one
   92C0 C1            [10]  217                     pop bc
                            218 
   92C1                     219                 no_matching2:
   92C1 11 20 00      [10]  220                 ld de, #k_size_entity
   92C4 FD 19         [15]  221                 add iy, de ;;paso a la siguiente
   92C6 18 E6         [12]  222                 jr bucle2
                            223 
   92C8                     224         no_matching1:
                            225 
   92C8 C1            [10]  226         pop bc
   92C9 79            [ 4]  227         ld a, c
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 19.
Hexadecimal [16-Bits]



   92CA 11 20 00      [10]  228         ld de, #k_size_entity
   92CD DD 19         [15]  229         add ix, de ;;paso a la siguiente
                            230         
   92CF 3D            [ 4]  231         dec a
   92D0 C2 8C 92      [10]  232         jp nz, bucle1
                            233 
   92D3                     234     noEntities1:
   92D3 C9            [10]  235 ret
                            236 
                            237 
                            238 
                            239 
                            240 ;; ===============================
                            241 ;; MARCAR PARA DEDSTRUIR
                            242 ;; Input: IX -> Entidad a marcar
                            243 ;; Destroy: A
                            244 ;; ===============================
   92D4                     245 entity_set4destruction:
   92D4 DD 36 01 11   [19]  246     ld e_cmps(ix), #muriendo_tmp_cmps
   92D8 DD 36 00 80   [19]  247     ld e_tipo(ix), #e_type_dead
   92DC C9            [10]  248 ret
                            249 
                            250 
                            251 ;; ===============================
                            252 ;; MARCAR PARA CREAR (por defecto zombie)
                            253 ;; Input: DE -> TEMPLATE DE ENTIDAD A CREAR 
                            254 ;;        A -->  X de la nueva entidad
                            255 ;;        B -->  Y de la nueva entidad
                            256 ;;        C --> VX de la nueva entidad
                            257 ;;        H --> VY de la nueva entidad
                            258 ;;        L --> numero de entidades a crear      
                            259 ;;        IX --> Ptr a la entidad a la que pertence
                            260 ;; OJOO!! DESTROYS IX
                            261 ;; ===============================
   92DD                     262 entity_set4creation:
                            263 
                            264     ;; RegistroIX => Ptr a pertence
   92DD DD 22 F9 91   [20]  265     ld (registro_ix), ix
                            266     ;ld iy, (registro_ix)
                            267 
                            268     ;; IX => Template
   92E1 ED 53 FC 91   [20]  269     ld (create_enemy_type), de
   92E5 DD 2A FC 91   [20]  270     ld ix, (create_enemy_type)
                            271 
                            272     ;; Cambiamos los datos para la template
   92E9 DD 77 02      [19]  273     ld e_x(ix),  a
   92EC DD 70 03      [19]  274     ld e_y(ix),  b
   92EF DD 71 04      [19]  275     ld e_vx(ix), c
   92F2 DD 74 05      [19]  276     ld e_vy(ix), h
                            277 
                            278     ;; En registroIX => Entidad a la que pertenece la nueva entidad (ARQUERO)
   92F5 ED 4B F9 91   [20]  279     ld bc, (registro_ix)
   92F9 DD 71 19      [19]  280     ld e_perteneceL(ix), c
   92FC DD 70 1A      [19]  281     ld e_perteneceH(ix), b
                            282     
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 20.
Hexadecimal [16-Bits]



   92FF 7D            [ 4]  283     ld a, l
   9300 32 FB 91      [13]  284     ld (bool_create_enemy), a
   9303 C9            [10]  285 ret
                            286 
                            287 
                            288 
                            289 ;; ===============================
                            290 ;; BORRAR TODAS LAS ENTIDADES QUE LE PASAN
                            291 ;; Input: IX -> Entidad actual
                            292 ;; Destroy: AF, DE, IY, HL
                            293 ;; ===============================
   9304                     294 entity_destroy:
                            295     ;; Do HL --> LastEntity
   9304 2A F7 91      [16]  296     ld hl, (next_entity)  ;; the one which doesnt exist yet
                            297 
                            298     ;; hl = hl - 8
   9307 11 E0 FF      [10]  299     ld de, #-k_size_entity
   930A 19            [11]  300     add hl, de
                            301 
                            302     ;; Next Entity = next_entity - sizeEntity
   930B 22 F7 91      [16]  303     ld (next_entity), hl
                            304 
                            305     ; Do DE --> IX (EntityDeleting)
   930E DD 22 F9 91   [20]  306     ld (registro_ix), ix
   9312 ED 5B F9 91   [20]  307     ld de, (registro_ix)
                            308                 
                            309     ; Copy last entity data into the deleting one (copia hl en de)
   9316 CD 20 92      [17]  310     call entity_copy
                            311                 
                            312     ;ld iy, (next_entity)
   9319 FD 2A F7 91   [20]  313     ld iy, (next_entity)
                            314 
                            315     ;; IY -> Last ENtity
   931D FD 36 00 00   [19]  316     ld e_tipo(iy), #e_type_invalid
                            317 
                            318     ;; num_entities--
   9321 3A F6 91      [13]  319     ld a, (num_entities)
   9324 3D            [ 4]  320     dec a
   9325 32 F6 91      [13]  321     ld (num_entities), a
                            322 
                            323     ;; ix = ix - 8
   9328 11 E0 FF      [10]  324     ld de, #-k_size_entity
   932B DD 19         [15]  325     add ix, de
                            326 
   932D C9            [10]  327 ret 
                            328 
                            329 
   932E                     330 tabla_disparos_direcciones:
   932E FF 00               331     .db #-1,  #0
   9330 F0 15               332         .dw #_spr_shotArcoiris_0
   9332 00 04               333     .db #0 ,  #4
   9334 30 16               334         .dw #_spr_shotArcoiris_1
   9336 00 FC               335     .db #0 , #-4
   9338 B0 16               336         .dw #_spr_shotArcoiris_3
                            337 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 21.
Hexadecimal [16-Bits]



                            338 ;; ===============================
                            339 ;; VER SI LAS ENTIDADES SE TIENEN QUE BORRAR e_type_dead = 0x80
                            340 ;; Y ADEMAS CREAMOS NUEVAS ENTIDADES
                            341 ;; Input: 
                            342 ;; Destroy: AF, IX, BC
                            343 ;; ===============================
   933A                     344 entity_update:
   933A 3A F6 91      [13]  345     ld a, (num_entities)
   933D FE 00         [ 7]  346     cp #0 
   933F 28 2D         [12]  347     jr z, sinEntities
                            348 
   9341 DD 21 F6 8F   [14]  349     ld ix, #entity_vector
   9345 22 6F 92      [16]  350     ld (metodo), hl
                            351    
   9348                     352     buscarDead:
   9348 47            [ 4]  353         ld b, a
                            354 
                            355         ;;comprobamos si la entidad es valida o no
   9349 DD 7E 00      [19]  356         ld a, e_tipo(ix) 
   934C FE 00         [ 7]  357         cp #e_type_invalid
   934E 28 1E         [12]  358         jr z, sinEntities
                            359         
   9350 C5            [11]  360         push bc
                            361         ;; si esta en mitad de una animacion no miro el tipo
   9351 DD 7E 1D      [19]  362         ld a, e_anim_especial(ix)
   9354 FE 01         [ 7]  363         cp #1
   9356 CA 63 93      [10]  364         jp z, noDestroy
                            365 
                            366         ;; Comprobar que el estado de la entidad coincide con la mascara que pasan por el registro B
   9359 DD 7E 00      [19]  367         ld a, e_tipo(ix) 
   935C FE 80         [ 7]  368         cp #e_type_dead
   935E 20 03         [12]  369         jr nz, noDestroy
   9360 CD 04 93      [17]  370             call entity_destroy
   9363                     371         noDestroy:
                            372 
   9363 C1            [10]  373         pop bc
   9364 78            [ 4]  374         ld a, b
                            375         
   9365 01 20 00      [10]  376         ld bc, #k_size_entity
   9368 DD 09         [15]  377         add ix, bc ;;paso a la siguiente
                            378         
   936A 3D            [ 4]  379         dec a
   936B C2 48 93      [10]  380         jp nz, buscarDead
                            381 
   936E                     382     sinEntities:
                            383 
                            384 
                            385     ;; CREAMOS ENTIDADES (de momento las creo en COLISION y asi me ahorro el primer if)
                            386     ;; Falta comprobar que no nos pasamos --> if (num_entities < k_max_num_entities) 
                            387     ;; Falta crear un enemigo en X e Y (primero estaticas, luego le pondremos aleatoriedad, y que las coja de una tabla)
   936E ED 5B FC 91   [20]  388     ld de, (create_enemy_type) ;; DE => Template de la entidad a crear
   9372 06 00         [ 7]  389     ld b, #0 ;; contador a 0
                            390 
   9374                     391     checkEntidadesRestantes:
                            392 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 22.
Hexadecimal [16-Bits]



   9374 3A FB 91      [13]  393     ld a, (bool_create_enemy)       ; A = num_Entidades_Restantes 
   9377 FE 00         [ 7]  394     cp #0                           ; if (num_Entidades_Restantes  != 0)
   9379 28 65         [12]  395     jr z, no_crea_entidad
                            396 
   937B 78            [ 4]  397         ld a, b
   937C FE 00         [ 7]  398         cp #0
   937E 28 3D         [12]  399         jr z, primeraIteracionBucle
                            400             ;; Hay varias entidades a crear (4 disparos), por lo que hay que cambiar sus direcciones
                            401 
                            402             ; Obtenemos la velocidad dependiendo de la iteracion (si b=1 --> X=-1 Y=0; si b=2 -->X=0 ,Y=....)
   9380 DD 21 2E 93   [14]  403             ld ix, #tabla_disparos_direcciones
                            404             ;; While (b>0) ix++
   9384 78            [ 4]  405             ld a, b
   9385 3D            [ 4]  406             dec a
   9386                     407             checkear_IX:
   9386 FE 00         [ 7]  408             cp #0
   9388 28 0B         [12]  409             jr z, tenemos_IX_bien
                            410                 ;; Si estamos en la iteracion 2 o 3, IX++
   938A DD 23         [10]  411                 inc ix
   938C DD 23         [10]  412                 inc ix
   938E DD 23         [10]  413                 inc ix
   9390 DD 23         [10]  414                 inc ix
   9392 3D            [ 4]  415                 dec a
   9393 18 F1         [12]  416                 jr checkear_IX
   9395                     417             tenemos_IX_bien:
                            418 
   9395 DD 66 00      [19]  419             ld h, 0(ix) ;; H = VX
   9398 DD 6E 01      [19]  420             ld l, 1(ix) ;; L = VY
                            421 
                            422             ;; meto el sprite en memoria
   939B DD 7E 03      [19]  423             ld a, 3(ix) 
   939E 32 FE 91      [13]  424             ld (registroH), a     
   93A1 DD 7E 02      [19]  425             ld a, 2(ix)
   93A4 32 FF 91      [13]  426             ld (registroL), a 
                            427 
                            428             ; IX = template
   93A7 DD 21 52 95   [14]  429             ld ix, #shot1
   93AB DD 74 04      [19]  430             ld e_vx(ix), h      ; modifico VX de la template
   93AE DD 75 05      [19]  431             ld e_vy(ix), l      ; modifico VY de la template
                            432 
                            433             ;ld e_w(ix), #0x06
                            434             ;ld e_h(ix), #0x1C
                            435 
   93B1 3A FE 91      [13]  436             ld a, (registroH)    ;; /
   93B4 DD 77 09      [19]  437             ld e_spriteH(ix), a  ;; | Modifico el Sprite de la template
   93B7 3A FF 91      [13]  438             ld a, (registroL)    ;; | Primero bitH y luego bitL
   93BA DD 77 08      [19]  439             ld e_spriteL(ix), a  ;; \
                            440 
   93BD                     441         primeraIteracionBucle:
                            442 
   93BD C5            [11]  443         push bc
                            444 
                            445         ;; Si (num_Entidades_Restantes  != 00) 
   93BE D5            [11]  446         push de
   93BF CD D0 96      [17]  447         call game_create_template ;; creamos entidad
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 23.
Hexadecimal [16-Bits]



   93C2 D1            [10]  448         pop de
                            449 
                            450         ;; bool_create_enemy--
   93C3 3A FB 91      [13]  451         ld a, (bool_create_enemy)
   93C6 3D            [ 4]  452         dec a
   93C7 32 FB 91      [13]  453         ld (bool_create_enemy), a
                            454 
   93CA C1            [10]  455         pop bc
   93CB 04            [ 4]  456         inc b   ;; b++
                            457 
                            458         ;; Si hemos disparado ya 4 veces, ponemos el template de SHOT con el disparo azul
   93CC 78            [ 4]  459         ld a, b
   93CD FE 04         [ 7]  460         cp #4
   93CF 20 0D         [12]  461         jr nz, no_reset_tmp_shot
                            462             ; Se han creado 4 disparos
   93D1 DD 21 52 95   [14]  463             ld ix, #shot1
   93D5 11 70 16      [10]  464             ld de, #_spr_shotArcoiris_2
   93D8 DD 72 09      [19]  465             ld e_spriteH(ix), d
   93DB DD 73 08      [19]  466             ld e_spriteL(ix), e
                            467 
   93DE                     468         no_reset_tmp_shot:
                            469 
                            470 
   93DE 18 94         [12]  471         jr checkEntidadesRestantes
                            472 
                            473 
                            474 
   93E0                     475     no_crea_entidad:
                            476 
                            477     
   93E0 11 00 00      [10]  478     ld de, #0x0000
   93E3 ED 53 FC 91   [20]  479     ld (create_enemy_type), de
                            480 
                            481 
   93E7 C9            [10]  482 ret
                            483 
                            484 ;; Devuelve en IX la segunda entidad
   93E8                     485 getEntity2:
   93E8 DD 21 F6 8F   [14]  486     ld ix, #entity_vector
   93EC 01 20 00      [10]  487     ld bc, #k_size_entity
   93EF DD 09         [15]  488     add ix, bc
   93F1 C9            [10]  489 ret
                            490 
                            491 ;; freespace, entity_doForAll_matching
                            492 
                            493 
                            494 
