I have done a similar diagnostic on the error vs the save game, like you did, with the latest save I have. I found a pattern finally.
[06-02-2020_12-39-44] [FATAL] A fatal error has occurred: vector::_M_range_check: __n (which is 31) >= this->size() (which is 2)
[06-02-2020_12-39-44] [FATAL] 0x5998e0 OpenXcom::CrossPlatform::stackTrace(void*)
[06-02-2020_12-39-44] [FATAL] 0x59a750 OpenXcom::CrossPlatform::crashDump(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
[06-02-2020_12-39-44] [FATAL] 0x41c880 exceptionLogger()
[06-02-2020_12-39-44] [FATAL] 0xb41d60 MPEGaction::MPEGaction()
[06-02-2020_12-39-44] [FATAL] 0xd0ffd0 void std::iter_swap<__gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >, __gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > > >(__gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >, __gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >)
[06-02-2020_12-39-44] [FATAL] 0xd15660 std::__detail::_Compiler<std::__cxx11::regex_traits<char> >::_M_expression_term<true, true>(std::pair<bool, char>&, std::__detail::_BracketMatcher<std::__cxx11::regex_traits<char>, true, true>&)::{lambda(char)#1}::operator()(char) const
[06-02-2020_12-39-44] [FATAL] 0xd04520 void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<OpenXcom::Soldier**, std::vector<OpenXcom::Soldier*, std::allocator<OpenXcom::Soldier*> > >, OpenXcom::Soldier**, __gnu_cxx::__ops::_Iter_comp_iter<OpenXcom::SortFunctor> >(__gnu_cxx::__normal_iterator<OpenXcom::Soldier**, std::vector<OpenXcom::Soldier*, std::allocator<OpenXcom::Soldier*> > >, __gnu_cxx::__normal_iterator<OpenXcom::Soldier**, std::vector<OpenXcom::Soldier*, std::allocator<OpenXcom::Soldier*> > >, OpenXcom::Soldier**, __gnu_cxx::__ops::_Iter_comp_iter<OpenXcom::SortFunctor>)
[06-02-2020_12-39-44] [FATAL] 0x83e870 OpenXcom::AlienMission::think(OpenXcom::Game&, OpenXcom::Globe const&)
[06-02-2020_12-39-44] [FATAL] 0x6abb60 OpenXcom::GeoscapeState::time30Minutes()
[06-02-2020_12-39-44] [FATAL] 0x6b55d0 OpenXcom::GeoscapeState::timeAdvance()
[06-02-2020_12-39-44] [FATAL] 0x6707f0 OpenXcom::Timer::think(OpenXcom::State*, OpenXcom::Surface*)
[06-02-2020_12-39-44] [FATAL] 0x5b1b40 OpenXcom::Game::run()
[06-02-2020_12-39-44] [FATAL] 0x41c950 SDL_main
[06-02-2020_12-39-44] [FATAL] 0x95d1c0 console_main
[06-02-2020_12-39-44] [FATAL] 0x95d2e0 WinMain
[06-02-2020_12-39-44] [FATAL] ??
[06-02-2020_12-39-44] [FATAL] ??
[06-02-2020_12-39-44] [FATAL] 0x7ff8dc221fd0 BaseThreadInitThunk
[06-02-2020_12-39-44] [FATAL] 0x7ff8dd31ef90 RtlUserThreadStart
[06-02-2020_12-40-17] [FATAL] OpenXcom has crashed: vector::_M_range_check: __n (which is 31) >= this->size() (which is 2)
Note the which is 31, in the same game, I checked antarctic.
- type: STR_FACTION_TERRORMERC
region: STR_ANTARCTICA
race: STR_MERC_REGIMENT
nextWave: 3
nextUfoCounter: 0
spawnCountdown: 1530
liveUfos: 0
uniqueID: 17
missionSiteZone: 31
Same problem, the third spawn zone has no areas for it to spawn. To solve this, I need a regionweight for my missionscript.
Similar to TFTD,
regionWeights:
0:
STR_NORTH_ATLANTIC: 10
STR_SOUTH_ATLANTIC: 10
STR_NORTH_PACIFIC: 10
STR_SOUTH_PACIFIC: 10
STR_MEDITERRANEAN: 10
STR_SOUTH_CHINA_SEA: 10
STR_INDIAN_OCEAN: 10
STR_THE_EAST_SEA: 10
STR_NORTH_SEA: 10
STR_CARRIBEAN: 10
Excluded antartica and artic will hopefully solved the problem.