.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 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