From b5ca0d4bff573f14ac7d3b47ebd7b23c56346b5e Mon Sep 17 00:00:00 2001 From: Astatin Date: Tue, 9 Sep 2025 16:53:39 +0200 Subject: Add per entity dialogue + screen darkening animation for future big menu opening --- map/dungeons.gbasm | 20 +++++++++----- map/dungeons/campsite.gbasm | 3 +- map/dungeons/morningforest.gbasm | 3 +- map/generationevents.gbasm | 59 ++++++++++++++++++++++++++++++---------- map/objects.gbasm | 6 +++- 5 files changed, 67 insertions(+), 24 deletions(-) (limited to 'map') diff --git a/map/dungeons.gbasm b/map/dungeons.gbasm index 8afe451..8b7e711 100644 --- a/map/dungeons.gbasm +++ b/map/dungeons.gbasm @@ -29,24 +29,30 @@ .PADTO =$start+8 .END -.MACRODEF GEN_EVENT_SPECIAL_ENTITY floor entity_idx +.MACRODEF GEN_EVENT_SPECIAL_ENTITY floor entity_instance_idx entity_blueprint_idx $load: - .DB low($floor), $03, $07, low($entity_idx) + .DB low($floor), $03, $07, low($entity_blueprint_idx) .PADTO =$load+8 $spawn: - .DB low($floor), $04, $07 + .DB low($floor), $04, low($entity_instance_idx), $07 .PADTO =$spawn+8 .END -.MACRODEF GEN_EVENT_LOAD_ENTITY floor loaded_entity_idx entity_idx +.MACRODEF GEN_EVENT_LOAD_ENTITY floor loaded_entity_idx entity_blueprint_idx $load: - .DB low($floor), $03, low($loaded_entity_idx), low($entity_idx) + .DB low($floor), $03, low($loaded_entity_idx), low($entity_blueprint_idx) .PADTO =$load+8 .END -.MACRODEF GEN_EVENT_SPAWN_LOADED_ENTITY_XY floor loaded_entity_idx arg_x arg_y arg_d +.MACRODEF GEN_EVENT_SPAWN_LOADED_ENTITY_XY floor entity_instance_idx loaded_entity_idx arg_x arg_y arg_d $spawn: - .DB low($floor), $05, low($loaded_entity_idx), low($arg_x), low($arg_y), low($arg_d) + .DB low($floor), $05, low($entity_instance_idx), low($loaded_entity_idx), low($arg_x), low($arg_y), low($arg_d) + .PADTO =$spawn+8 +.END + +.MACRODEF GEN_EVENT_ENTITY_SET_DIALOGUE floor entity_instance_idx =dialogue_ptr + $spawn: + .DB low($floor), $06, low($entity_instance_idx), bank(=dialogue_ptr), high(ptr(=dialogue_ptr)), low(ptr(=dialogue_ptr)) .PADTO =$spawn+8 .END diff --git a/map/dungeons/campsite.gbasm b/map/dungeons/campsite.gbasm index cef4abb..ccc40ae 100644 --- a/map/dungeons/campsite.gbasm +++ b/map/dungeons/campsite.gbasm @@ -18,7 +18,8 @@ Camp_Site: .generation_events: .GEN_EVENT_LOAD_ENTITY $01 $05 $08 - .GEN_EVENT_SPAWN_LOADED_ENTITY_XY $01 $05 $11 $10 $01 + .GEN_EVENT_SPAWN_LOADED_ENTITY_XY $01 $01 $05 $11 $10 $01 + .GEN_EVENT_ENTITY_SET_DIALOGUE $01 $01 =Placeholder_Dialogue_Script .GEN_EVENT_REMOVE_STAIRS $01 .generation_events.end: diff --git a/map/dungeons/morningforest.gbasm b/map/dungeons/morningforest.gbasm index 1b80a18..63f5092 100644 --- a/map/dungeons/morningforest.gbasm +++ b/map/dungeons/morningforest.gbasm @@ -16,7 +16,8 @@ Morning_Forest: .generation_events: .GEN_EVENT_DIALOGUE $01 =Demo_quest_init .GEN_EVENT_DIALOGUE $10 =Demo_quest_floor_reach - .GEN_EVENT_SPECIAL_ENTITY $10 $06 + .GEN_EVENT_SPECIAL_ENTITY $10 $0f $06 + .GEN_EVENT_ENTITY_SET_DIALOGUE $10 $0f =Demo_quest_bunny .GEN_EVENT_REMOVE_STAIRS $10 .generation_events.end: diff --git a/map/generationevents.gbasm b/map/generationevents.gbasm index 5fc35de..7d88f1d 100644 --- a/map/generationevents.gbasm +++ b/map/generationevents.gbasm @@ -29,7 +29,7 @@ Generation_Event_Execution: RET Generation_Event_Jump_Table: - ; 00 +; 00 RET NOP NOP @@ -55,17 +55,21 @@ Generation_Event_Jump_Table: JP =.Entity_XY NOP + ; 06 + JP =.Set_Dialogue_Ptr + NOP + .Dialogue_Script: - LD A, $enum_dungeon_dialogue_mode - LD $mem_requested_mode, A + LD A, $enum_dungeon_dialogue_mode + LD $mem_requested_mode, A - LD A, (HL+) - LD $mem_dialogue_script_bank, A - LD A, (HL+) - LD ($mem_dialogue_script_program_counter), A - LD A, (HL) - LD ($mem_dialogue_script_program_counter+1), A - JP =Dialogue_script_step + LD A, (HL+) + LD $mem_dialogue_script_bank, A + LD A, (HL+) + LD ($mem_dialogue_script_program_counter), A + LD A, (HL) + LD ($mem_dialogue_script_program_counter+1), A + JP =Dialogue_script_step .Load_Entity: LD A, (HL+) @@ -78,15 +82,24 @@ Generation_Event_Jump_Table: RET .Entity_Random_Room: + LD A, (HL+) + LD E, A + SWAP E + LD A, $01 LD $tmp_var_3, A LD D, (HL) - CALL =FindFreeEntity + LD H, high($mem_entities_list) + LD L, E LD A, D JP =Initialize_Entity .Entity_XY: + LD A, (HL+) + LD E, A + SWAP E + LD A, (HL+) LD D, A LD A, (HL+) @@ -94,15 +107,33 @@ Generation_Event_Jump_Table: LD A, (HL+) LD C, A LD A, (HL) - DBG SWAP A OR $02 LD $tmp_var_3, A - CALL =FindFreeEntity + LD H, high($mem_entities_list) + LD L, E LD A, D JP =Initialize_Entity + .Set_Dialogue_Ptr: + LD D, high($mem_entities_list) + LD A, (HL+) + LD E, A + SWAP E + LD A, $0b + OR E + LD E, A + LD A, (HL+) + LD (DE), A + INC DE + LD A, (HL+) + LD (DE), A + INC DE + LD A, (HL) + LD (DE), A + RET + .Remove_Stairs: LD HL, $mem_object_list LD (HL), $00 - RET + RET diff --git a/map/objects.gbasm b/map/objects.gbasm index 0bfc20f..1ff9d53 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -154,7 +154,7 @@ Check_other_object_collision: ; Object in HL (with only sprite x & y set), will Spawn_stairs: LD A, $60 - LD E, $01 + LD E, $08 JP =Spawn_object_in_random_room_avoid_bunny Spawn_carrot: @@ -202,6 +202,10 @@ Object_Interaction_Jump_table: JP =Fimsh_Attack_Box_Action NOP + ; 08 + JP =Open_Big_Menu + NOP + Stairs_Action: LD A, $enum_dungeon_generation_mode LD $mem_current_mode, A -- cgit v1.2.3-70-g09d2