From c878093c5f2b9d7c808a1bd0c83fe10e14b79f50 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Thu, 6 Nov 2025 21:13:11 -0800 Subject: [PATCH] ignore map_designate, etc. if floor number isn't valid --- src/QuestScript.cc | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/QuestScript.cc b/src/QuestScript.cc index 44f3eb4c..cbb82a09 100644 --- a/src/QuestScript.cc +++ b/src/QuestScript.cc @@ -5045,10 +5045,23 @@ void populate_quest_metadata_from_script( break; } + case 0x00C4: { // map_designate + uint32_t floor = regs.get(r.get_u8()); + if (floor < meta.area_for_floor.size()) { + meta.area_for_floor[floor] = floor; + } + // phosg::fwrite_fmt(stderr, ">>> Trace: map_designate fa[{}]={}\n", floor, floor); + break; + } + case 0xF80D: { // map_designate_ex uint8_t base_reg = r.get_u8(); - meta.area_for_floor.at(regs.get(base_reg)) = regs.get(base_reg + 1); - // phosg::fwrite_fmt(stderr, ">>> Trace: map_designate_ex fa[{}]={}\n", regs.get(base_reg), regs.get(base_reg + 1)); + uint32_t floor = regs.get(base_reg); + uint32_t area = regs.get(base_reg + 1); + if (floor < meta.area_for_floor.size()) { + meta.area_for_floor[floor] = area; + } + // phosg::fwrite_fmt(stderr, ">>> Trace: map_designate_ex fa[{}]={}\n", floor, area); break; } @@ -5291,9 +5304,14 @@ void populate_quest_metadata_from_script( case 0xF951: { // bb_map_designate uint8_t floor = r.get_u8(); - meta.area_for_floor.at(floor) = r.get_u8(); - r.skip(3); // entities_list_type, vars.layout, vars.entities - // phosg::fwrite_fmt(stderr, ">>> Trace: bb_map_designate fa[{}]={}\n", floor, meta.area_for_floor.at(floor)); + if (floor < meta.area_for_floor.size()) { + meta.area_for_floor.at(floor) = r.get_u8(); + r.skip(3); // entities_list_type, vars.layout, vars.entities + // phosg::fwrite_fmt(stderr, ">>> Trace: bb_map_designate fa[{}]={}\n", floor, meta.area_for_floor.at(floor)); + } else { + r.skip(4); // area, entities_list_type, vars.layout, vars.entities + // phosg::fwrite_fmt(stderr, ">>> Trace: bb_map_designate fa[{}]=(ignored)\n", floor); + } break; }