diff options
-rw-r--r-- | definitions.gbasm | 4 | ||||
-rw-r--r-- | entity/actions.gbasm | 19 | ||||
-rw-r--r-- | entity/bunny.gbasm | 23 | ||||
-rw-r--r-- | entity/init.gbasm | 2 | ||||
-rw-r--r-- | map/objects.gbasm | 32 | ||||
-rw-r--r-- | utils.gbasm | 24 |
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 |