.MACRODEF ADD_A_TO_DIRECTION_BC ; Direction in D, XY in BC (muted), offset in A PUSH AF LD A, D AND $07 CP $enum_direction_down JR Z, =$down CP $enum_direction_right JR Z, =$right CP $enum_direction_up JR Z, =$up $left: POP AF XOR $ff INC A ADD B LD B, A JR =$end $right: POP AF ADD B LD B, A JR =$end $up: POP AF XOR $ff INC A ADD C LD C, A JR =$end $down: POP AF ADD C LD C, A $end: .END Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test in A, XY result in BC, E being how much tile entity will move PUSH HL PUSH DE LD D, A LD A, L AND $f0 LD L, A INC HL LD A, (HL+) LD B, A LD A, (HL+) LD C, A INC HL INC HL INC HL INC HL LD E, (HL) BIT 0, E LD A, $01 JR Z, =Get_Position_After_Move.Normal_Speed LD A, $02 Get_Position_After_Move.Normal_Speed: BIT 3, D JR Z, =Get_Position_After_Move.Skip_Move .ADD_A_TO_DIRECTION_BC Get_Position_After_Move.Skip_Move: POP DE POP HL RET Entity_idx_to_entity_list_ptr: ; loaded idx in A, return in BC PUSH DE LD D, high($mem_loaded_entities_indices) LD E, low($mem_loaded_entities_indices) ADD E LD E, A LD A, (DE) LD C, A LD B, $00 SLA C RL B SLA C RL B SLA C RL B LD A, C ADD low(=Entity_list) LD C, A LD A, B ADC high(=Entity_list) LD B, A .LOAD_BANK_OF =Entity_list POP DE RET Spawn_object: ; Texture in D, XY in BC, jump table thingy in E PUSH HL CALL =Find_Free_Object_slot LD A, $80 CP L JR Z, =.skip_spawn_loot_pop_hl LD A, D LD (HL+), A LD A, B LD (HL+), A LD A, C LD (HL+), A CALL =Check_other_object_collision CP $00 JR NZ, =.skip_spawn_loot_pop_hl LD A, L AND $f8 ADD $03 LD L, A LD (HL), E ; set the object load counter to the object so it doesn't take 16 frames to load it LD A, L SRA A SRA A SRA A SUB $01 LD $mem_object_load_counter, A .skip_spawn_loot_pop_hl: POP HL .skip_spawn_loot: RET .MACRODEF ENTITY_HEALTH_CHECK Skip_turn Drop_Function LD A, L AND $f0 ADD $06 LD L, A LD A, (HL) CP $00 JR NZ, =$end LD A, L AND $f0 LD L, A LD (HL), $00 LD A, $mem_enemies_alive_count DEC A LD $mem_enemies_alive_count, A CALL $Drop_Function JP $Skip_turn $end: .END .MACRODEF ENTITY_FREEZE_SHIVER Skip_turn LD A, $mem_moving_animation_step CP $00 JP NZ, =$end LD A, L AND $f0 ADD $08 LD L, A LD A, $01 CP (HL) JR NZ, =$end RES 3, D CALL =RNG_Step CP $55 JP NC, $Skip_turn LD A, L AND $f0 OR $0a LD L, A LD (HL), $04 CALL =RNG_Step CP $55 JP NC, $Skip_turn LD A, L AND $f0 OR $08 LD L, A LD A, $00 LD (HL-), A RES 1, (HL) JP $Skip_turn $end: .END .MACRODEF ENTITY_STATUS_SKIP_TURN Skip_Turn LD A, L AND $f0 ADD $08 LD L, A BIT 0, (HL) JP NZ, $Skip_turn .END Entity_End_movement: LD A, $mem_moving_animation_step CP $0f RET NZ LD A, L AND $f0 OR $0a LD L, A LD (HL), $00 LD A, D RES 3, A BIT 3, D LD D, A RET Z LD A, $01 .ADD_A_TO_DIRECTION_BC RET .MACRODEF RESET_BLINKING_MODE LD A, $mem_moving_animation_step CP $00 JP NZ, =$end LD A, L AND $f0 OR $07 LD L, A RES 3, (HL) $end: .END .MACRODEF ENTITY_TRY_ATTACK Sight_check Attack_Function Attack_end LD A, $mem_moving_animation_step CP $00 JP NZ, $Attack_end CALL $Sight_check LD A, $00 CP E JR Z, =$next CALL $Attack_Function JP $Attack_end $next: .END