diff --git a/src/game/boe.main.cpp b/src/game/boe.main.cpp index 44f2727d..515dae4f 100644 --- a/src/game/boe.main.cpp +++ b/src/game/boe.main.cpp @@ -503,6 +503,8 @@ static void handle_scenario_args() { start_new_game(true); } if(univ.party.is_in_scenario()){ + // This check is correct, because the scen_name field of cScenario is the actual title, + // not header.exs or *.boes as univ.party.scen_name would be if(univ.scenario.scen_name == scenario.scen_name){ // The party is already in the correct scenario. // Ask whether to clear SDFs or not @@ -519,7 +521,7 @@ static void handle_scenario_args() { resetting = true; } if(!univ.party.is_in_scenario()){ - put_party_in_scen(path.filename().string(), scen_arg_town || scen_arg_out_sec, true); + put_party_in_scen(path.string(), scen_arg_town || scen_arg_out_sec, true); } }else{ std::cerr << "Failed to load scenario: " << *scen_arg_path << std::endl; diff --git a/src/game/boe.party.cpp b/src/game/boe.party.cpp index 2ddd4ce4..c292e5f0 100644 --- a/src/game/boe.party.cpp +++ b/src/game/boe.party.cpp @@ -146,10 +146,13 @@ void put_party_in_scen(std::string scen_name, bool force, bool allow_unpacked) { if(item_took) cChoiceDlog("removed-special-items").show(); - fs::path path = locate_scenario(scen_name, allow_unpacked); - if(path.empty()) { - showError("Could not find scenario!"); - return; + fs::path path = scen_name; + if(!path.is_absolute()){ + path = locate_scenario(scen_name, allow_unpacked); + if(path.empty()) { + showError("Could not find scenario!"); + return; + } } set_cursor(watch_curs); if(!load_scenario(path, univ.scenario))