diff options
author | Astatin <[email protected]> | 2024-12-18 14:47:13 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2024-12-18 14:48:13 +0900 |
commit | 0ed4b7a5d40ce169dc3f7e061d6edeccfa0b8784 (patch) | |
tree | 6541f082d5da769f3343a07033aa91f21cfba24b /map | |
parent | 2b0c6081d8a2c48c1f8412aefdcec6c2222e716c (diff) |
Spawn a carrot in every level and make sure that it doesn't collide with
other objects
Diffstat (limited to 'map')
-rw-r--r-- | map/objects.gbasm | 100 |
1 files changed, 93 insertions, 7 deletions
diff --git a/map/objects.gbasm b/map/objects.gbasm index adcfaa9..d4cfd6d 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -3,11 +3,14 @@ Initialize_Objects: OR $01 LD $mem_map_loading_flags, A LD HL, $mem_object_list + LD BC, $0080 + CALL =bzero + LD HL, $mem_object_list CALL =Spawn_stairs + CALL =Spawn_carrot RET -Spawn_stairs: - LD A, $60 +Spawn_object_in_random_room: ; Object tile in A, Object jump table id in E LD (HL+), A LD A, $mem_number_of_rooms @@ -38,17 +41,73 @@ Spawn_stairs: INC A CALL =RNG_Bound ADD D - LD (HL+), A + LD (HL), A + DEC HL + + LD BC, $mem_object_list + Object_check_collisions.loop: + LD A, (BC) + CP $00 + JR Z, =Object_check_collisions.loop.next + + INC BC + LD A, C + CP L + JR Z, =Object_check_collisions.loop.next + + LD A, (BC) + CP (HL) + JR NZ, =Object_check_collisions.loop.next + + INC BC + INC HL + LD A, (BC) + CP (HL) + JR NZ, =Object_check_collisions.loop.next + + DEC HL + DEC HL + XOR A + LD (HL+), A + LD (HL+), A + LD (HL), A + DEC HL + DEC HL + RET + + Object_check_collisions.loop.next: + LD A, L + AND $f8 + ADD $01 + LD L, A + LD A, C + AND $f8 + ADD $08 + LD C, A + CP $80 + JR NZ, =Object_check_collisions.loop - LD A, $01 - LD (HL+), A - INC HL - INC HL INC HL INC HL + + LD (HL), E + LD A, L + AND $f8 + ADD $08 + LD L, A RET +Spawn_stairs: + LD A, $60 + LD E, $01 + JP =Spawn_object_in_random_room + +Spawn_carrot: + LD A, $64 + LD E, $02 + JP =Spawn_object_in_random_room + Object_Interaction_Jump_table: ; 00 RET @@ -60,6 +119,10 @@ Object_Interaction_Jump_table: JP =Stairs_action NOP + ; 02 + JP =Heal_Action + NOP + Stairs_action: DI LD A, $00 @@ -77,6 +140,29 @@ Stairs_action: CALL =Reset_Map JP =New_Dungeon +Heal_Action: + LD A, $mem_bunny_health + ADD $03 + DAA + CP $20 + JR C, =Heal_Action.Set_health + LD A, $20 + Heal_Action.Set_health: + LD $mem_bunny_health, A + + PUSH BC + LD A, $mem_bunny_x + LD B, A + LD A, $mem_bunny_y + LD C, A + LD A, $01 + CALL =Try_Launch_Animation + POP BC + + LD (HL), $00 + + RET + Display_Object: LD HL, $mem_object_list LD A, $mem_object_load_counter |