From 567daf3bbedd98f99be5008d0568c82ae43fc8ea Mon Sep 17 00:00:00 2001 From: Astatin Date: Thu, 12 Sep 2024 18:01:39 +0900 Subject: Add collisions to foxes --- bunny.gbasm | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- entities.gbasm | 111 ++++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 197 insertions(+), 24 deletions(-) diff --git a/bunny.gbasm b/bunny.gbasm index b80efd8..1386f01 100644 --- a/bunny.gbasm +++ b/bunny.gbasm @@ -40,10 +40,44 @@ Initialize_Bunny: LD (HL+), A INC HL INC HL + + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + LD A, $0d LD (HL+), A - LD A, $10 + LD A, $mem_bunny_x LD (HL+), A + LD A, $mem_bunny_y LD (HL+), A LD A, $03 LD (HL+), A @@ -54,10 +88,12 @@ Initialize_Bunny: LD (HL+), A INC HL INC HL + LD A, $0d LD (HL+), A - LD A, $10 + LD A, $mem_bunny_x LD (HL+), A + LD A, $mem_bunny_y LD (HL+), A LD A, $03 LD (HL+), A @@ -69,6 +105,71 @@ Initialize_Bunny: INC HL INC HL + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + + LD A, $0d + LD (HL+), A + LD A, $mem_bunny_x + LD (HL+), A + LD A, $mem_bunny_y + LD (HL+), A + LD A, $03 + LD (HL+), A + LD BC, =Fox_AI + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + INC HL + INC HL + + Fix_Bunny_screen: LD A, $mem_bunny_x SUB $05 @@ -109,10 +210,10 @@ Move_Bunny: LD A, $mem_bunny_direction DEC A - LD B, $01 + LD B, $01 ; Direction of the movement (+1) BIT 0, A JR NZ, =Move_Bunny.check_direction_end - LD B, $FF + LD B, $FF ; Direction of the movement (-1) Move_Bunny.check_direction_end: @@ -143,6 +244,7 @@ Move_Bunny: JP =Move_Bunny.check_end_of_movement Move_Bunny.vertical_move: + Move_Bunny.vertical_move.check_collision: LD D, B LD A, $mem_bunny_y ADD D diff --git a/entities.gbasm b/entities.gbasm index 7b74071..4d4d365 100644 --- a/entities.gbasm +++ b/entities.gbasm @@ -1,26 +1,38 @@ Prepare_Entities: - LD HL, $mem_oam_buffer - LD BC, $00a0 - CALL =bzero LD A, $00 LD $tmp_var_1, A LD HL, $mem_entites_list CALL =Prepare_Entity CALL =Prepare_Entity CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity - ; CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + CALL =Prepare_Entity + LD BC, $00a0 + LD HL, $mem_oam_buffer + + LD A, $tmp_var_1 + ADD L + LD L, A + + LD A, $tmp_var_1 + XOR $ff + INC A + ADD C + LD C, A + + CALL =bzero + RET Prepare_Entity: @@ -321,9 +333,59 @@ Entity_Behaviour: POP HL - INC HL - INC HL Entity_Behaviour.skip: + LD A, L + AND $f8 + ADD $08 + LD L, A + RET + +Entity_collision: ; entity (whatever alignement) in HL, direction to test in A, Result in A + PUSH HL + PUSH BC + PUSH AF + + LD A, L + AND $f8 + LD L, A + + INC HL + + LD A, (HL+) + LD C, A + LD A, (HL+) + LD B, A + + POP AF + PUSH BC + + DEC A + LD B, A + + SLA A + AND $02 + DEC A + + BIT 1, B + JR NZ, =Entity_collision.vertical + + Entity_collision.horizontal: + POP BC + ADD C + LD C, A + JR =Entity_collision.direction_end + + Entity_collision.vertical: + POP BC + ADD B + LD B, A + + Entity_collision.direction_end: + LD A, C + CALL =Is_Solid + + POP BC + POP HL RET Fox_AI: @@ -393,8 +455,17 @@ Fox_AI: LD A, $04 CALL =RNG_Bound INC A - OR B - LD (HL), A + OR $08 + LD B, A + + CALL =Entity_collision + CP $00 + JR Z, =Fox_AI.change_direction + + RES 3, B + + Fox_AI.change_direction: + LD (HL), B Fox_AI.end: -- cgit v1.2.3-70-g09d2