aboutsummaryrefslogtreecommitdiff
path: root/entity
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-11-15 18:50:54 +0900
committerAstatin <[email protected]>2024-11-15 18:50:54 +0900
commit0a979fabc9c770834ed90e02758aadea51c889a8 (patch)
treee3312683ac68de856779f96d70cd5b9fd0ad5aa0 /entity
parent1aa36f5ce5bbdbd597456efd4603b83682d27e59 (diff)
Fix Get_Position_After_Move to take the double speed into account
Diffstat (limited to 'entity')
-rw-r--r--entity/utils.gbasm90
1 files changed, 43 insertions, 47 deletions
diff --git a/entity/utils.gbasm b/entity/utils.gbasm
index ed730d9..e2b7c1c 100644
--- a/entity/utils.gbasm
+++ b/entity/utils.gbasm
@@ -1,50 +1,3 @@
-Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test in A, X Result in C, Y result in B
- PUSH HL
- PUSH AF
-
- LD A, L
- AND $f0
- LD L, A
-
- INC HL
-
- LD A, (HL+)
- LD C, A
- LD A, (HL+)
- LD B, A
-
- POP AF
- BIT 3, A
- JR Z, =Get_Position_After_Move.direction_end
-
- PUSH BC
-
- DEC A
- LD B, A
-
- SLA A
- AND $02
- DEC A
-
- BIT 1, B
- JR NZ, =Get_Position_After_Move.vertical
-
- Get_Position_After_Move.horizontal:
- POP BC
- ADD C
- LD C, A
- JR =Get_Position_After_Move.direction_end
-
- Get_Position_After_Move.vertical:
- POP BC
- ADD B
- LD B, A
-
- Get_Position_After_Move.direction_end:
-
- POP HL
- RET
-
.MACRODEF ADD_A_TO_DIRECTION_BC ; Direction in D, XY in BC (muted), offset in A
PUSH AF
LD A, D
@@ -89,3 +42,46 @@ Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test
$end:
.END
+
+Get_Position_After_Move: ; entity (whatever alignement) in HL, direction to test in A, X Result in C, Y result in B, 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:
+
+ LD A, C
+ LD C, B
+ LD B, A
+
+ POP DE
+ POP HL
+ RET