aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--definitions.gbasm4
-rw-r--r--entity/actions.gbasm19
-rw-r--r--entity/bunny.gbasm23
-rw-r--r--entity/init.gbasm2
-rw-r--r--map/objects.gbasm32
-rw-r--r--utils.gbasm24
6 files changed, 49 insertions, 55 deletions
diff --git a/definitions.gbasm b/definitions.gbasm
index 2d7420a..9e2358c 100644
--- a/definitions.gbasm
+++ b/definitions.gbasm
@@ -83,8 +83,8 @@
; sprite: u8,
; x: u8,
; y: u8,
-; interaction: u16
-; _padding: u24
+; interaction_jump_table_index: u8
+; _padding: u32
; }
.DEFINE mem_oam_buffer $ca00 ; Until $ca9f
diff --git a/entity/actions.gbasm b/entity/actions.gbasm
index 524c28d..f70c320 100644
--- a/entity/actions.gbasm
+++ b/entity/actions.gbasm
@@ -30,13 +30,6 @@ Entity_Action:
INC HL
LD E, (HL)
- LD D, $00
-
- SLA E
- RL D
- SLA E
- RL D
-
PUSH HL
LD A, L
@@ -45,18 +38,8 @@ Entity_Action:
LD BC, =Turn_Jump_table
LD A, E
- ADD C
- LD E, A
- LD A, D
- ADC B
- LD D, A
- ; This is confusing but this thing is actually CALL DE
- LD BC, =Entity_Action.interaction_end
- PUSH BC
- PUSH DE
- RET
- Entity_Action.interaction_end:
+ .JUMP_TABLE
POP HL
diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm
index f180e9e..4e27929 100644
--- a/entity/bunny.gbasm
+++ b/entity/bunny.gbasm
@@ -169,28 +169,11 @@ Move_Bunny:
PUSH HL
PUSH BC
- LD E, (HL)
- LD D, $00
-
- SLA E
- RL D
- SLA E
- RL D
-
LD BC, =Interaction_Jump_table
- LD A, E
- ADD C
- LD E, A
- LD A, D
- ADC B
- LD D, A
-
- LD BC, =Interaction.interaction_end
- PUSH BC
- PUSH DE
- RET
+ LD A, (HL)
+
+ .JUMP_TABLE
- Interaction.interaction_end:
POP BC
POP HL
diff --git a/entity/init.gbasm b/entity/init.gbasm
index c5f0b0e..4281327 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -122,7 +122,7 @@ Initialize_Fox:
LD (HL+), A
; Action
- LD A, $01
+ LD A, $02
LD (HL+), A
LD A, $04
diff --git a/map/objects.gbasm b/map/objects.gbasm
index e3410d4..5e79eab 100644
--- a/map/objects.gbasm
+++ b/map/objects.gbasm
@@ -41,15 +41,24 @@ Spawn_stairs:
LD (HL+), A
- LD BC, =Stairs_action
- LD A, B
- LD (HL+), A
- LD A, C
+ LD A, $01
LD (HL+), A
INC HL
INC HL
INC HL
+ INC HL
+ RET
+
+Object_Interaction_Jump_table:
+ ; 00
RET
+ NOP
+ NOP
+ NOP
+
+ ; 01
+ JP =Stairs_action
+ NOP
Stairs_action:
DI
@@ -196,10 +205,7 @@ Object_Interactions_Check:
CP B
JR NZ, =Object_Interactions_Check.next
- LD A, (HL+)
- LD D, A
- LD A, (HL+)
- LD E, A
+ LD E, (HL)
PUSH BC
@@ -208,12 +214,10 @@ Object_Interactions_Check:
AND $f8
LD L, A
- ; This is confusing but this thing is actually CALL DE
- LD BC, =Object_Interactions_Check.interaction_end
- PUSH BC
- PUSH DE
- RET
- Object_Interactions_Check.interaction_end:
+ LD BC, =Object_Interaction_Jump_table
+ LD A, E
+
+ .JUMP_TABLE
POP BC
diff --git a/utils.gbasm b/utils.gbasm
index 5dad3a9..cb1822a 100644
--- a/utils.gbasm
+++ b/utils.gbasm
@@ -31,6 +31,30 @@ bzero: ; dest = HL, n = BC
$end:
.END
+.MACRODEF JUMP_TABLE ; Jump table pointer in BC, index in A, also overwrites DE
+ LD E, A
+ LD D, $00
+
+ SLA E
+ RL D
+ SLA E
+ RL D
+
+ LD A, E
+ ADD C
+ LD E, A
+ LD A, D
+ ADC B
+ LD D, A
+
+ ; CALL DE
+ LD BC, =$end
+ PUSH BC
+ PUSH DE
+ RET
+ $end:
+.END
+
Print_8bit: ; Number in A, Memory Tilemap position in HL
PUSH AF
PUSH BC