diff --git a/src/game/boe.specials.cpp b/src/game/boe.specials.cpp index 93bada49..f10c465e 100644 --- a/src/game/boe.specials.cpp +++ b/src/game/boe.specials.cpp @@ -1820,7 +1820,7 @@ void special_increase_age(long length, bool queue) { for(auto& p : univ.party.active_quests) { if(p.second.status != eQuestStatus::STARTED) continue; - cQuest& quest = univ.scenario.quests[p.first]; + cQuest const &quest = univ.get_quest(p.first); if(quest.deadline <= 0) continue; bool is_relative = quest.flags % 10; @@ -2447,7 +2447,7 @@ void general_spec(const runtime_state& ctx) { break; } auto& job = univ.party.active_quests[spec.ex1a]; - auto& quest = univ.scenario.quests[spec.ex1a]; + cQuest const &quest = univ.get_quest(spec.ex1a); if(spec.ex1b == int(eQuestStatus::STARTED) && job.status != eQuestStatus::STARTED) { job.start = univ.party.calc_day(); job.source = max(-1,spec.ex2a); diff --git a/src/game/boe.text.cpp b/src/game/boe.text.cpp index 9e4b9544..574a0742 100644 --- a/src/game/boe.text.cpp +++ b/src/game/boe.text.cpp @@ -276,13 +276,13 @@ void put_item_screen(eItemWinMode screen_num) { if(spec_item_array[i_num] / 10000 == 2) style.colour = Colours::RED; - win_draw_string(item_stats_gworld,item_buttons[i][ITEMBTN_NAME],univ.scenario.quests[which_quest].name,eTextMode::WRAP,style); + win_draw_string(item_stats_gworld,item_buttons[i][ITEMBTN_NAME],univ.get_quest(which_quest).name,eTextMode::WRAP,style); if(spec_item_array[i_num] / 10000 == 1) { location from, to; from = to = item_buttons[i][ITEMBTN_NAME].centre(); from.x = item_buttons[i][ITEMBTN_NAME].left; - to.x = from.x + string_length(univ.scenario.quests[which_quest].name, style); + to.x = from.x + string_length(univ.get_quest(which_quest).name, style); draw_line(item_stats_gworld, from, to, 1, Colours::GREEN); } diff --git a/src/scenario/scenario.cpp b/src/scenario/scenario.cpp index a3a86f2f..5c4805c4 100644 --- a/src/scenario/scenario.cpp +++ b/src/scenario/scenario.cpp @@ -235,6 +235,29 @@ cItem &cScenario::get_item(item_num_t item) return badItem; } +static cQuest getBadQuest() { + cQuest badQuest; + badQuest.name = "Bad quest"; + return badQuest; +} + +cQuest const &cScenario::get_quest(int quest) const +{ + if (quest>=0 && quest=0 && quest= 0) { diff --git a/src/universe/universe.hpp b/src/universe/universe.hpp index f2c9cdc9..3768a5c1 100644 --- a/src/universe/universe.hpp +++ b/src/universe/universe.hpp @@ -217,6 +217,8 @@ public: cItem const &get_item(item_num_t item) const { return scenario.get_item(item); } cItem &get_item(item_num_t item) { return scenario.get_item(item); } + cQuest const &get_quest(int quest) const { return scenario.get_quest(quest); } + cQuest &get_quest(int quest) { return scenario.get_quest(quest); } cSpecItem const &get_special_item(item_num_t item) const { return scenario.get_special_item(item); } cSpecItem &get_special_item(item_num_t item) { return scenario.get_special_item(item); } cTerrain const &get_terrain(ter_num_t ter) const { return scenario.get_terrain(ter); }