Opened 9 years ago

#3137 new defect

Handle PSERROR_Game_World_MapLoadFailed during initial game start

Reported by: historic_bruno Owned by:
Priority: Should Have Milestone: Backlog
Component: Core engine Keywords:
Cc: Patch:

Description

Currently, when a scenario version is too old and not supported, the map reader throws PSERROR_File_InvalidVersion which is caught in CWorld::RegisterInit. That in turn throws an uncaught PSERROR_Game_World_MapLoadFailed exception, causing the game to crash. This occurs in game setup, before it ever reaches the loading screen.

What should happen is something like the case of failed random map scripts, calling CancelLoad() to cleanup the init process and return the user to the main menu with a friendly error message.

 	KernelBase.dll!_RaiseException@16
()	Unknown
 	msvcr120.dll!__CxxThrowException@8
()	Unknown
>	pyrogenesis.exe!CWorld::RegisterInit(const CStrW & mapFile, JSRuntime * rt, JS::Handle<JS::Value> settings, int playerID) Line 93	C++
 	pyrogenesis.exe!CGame::RegisterInit(const JS::Handle<JS::Value> attribs, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & savedState) Line 171	C++
 	pyrogenesis.exe!CGame::StartGame(JS::MutableHandle<JS::Value> attribs, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & savedState) Line 277	C++
 	pyrogenesis.exe!`anonymous namespace'::StartGame(ScriptInterface::CxPrivate * pCxPrivate, JS::Handle<JS::Value> attribs, int playerID) Line 225	C++
 	pyrogenesis.exe!ScriptInterface::call<void,JS::Handle<JS::Value>,int,&`anonymous namespace'::StartGame>(JSContext * cx, unsigned int argc, JS::Value * vp) Line 113	C++
 	mozjs31-ps-release.dll!js::Invoke(JSContext * cx, JS::CallArgs args, js::MaybeConstruct construct) Line 468	C++
 	mozjs31-ps-release.dll!js::Invoke(JSContext * cx, const JS::Value & thisv, const JS::Value & fval, unsigned int argc, const JS::Value * argv, JS::MutableHandle<JS::Value> rval) Line 531	C++
 	mozjs31-ps-release.dll!js::jit::DoCallFallback(JSContext * cx, js::jit::BaselineFrame * frame, js::jit::ICCall_Fallback * stub_, unsigned int argc, JS::Value * vp, JS::MutableHandle<JS::Value> res) Line 8251	C++
 	[External Code]	
 	[Frames below may be incorrect and/or missing]	
 	mozjs31-ps-release.dll!EnterBaseline(JSContext * cx, js::jit::EnterJitData & data) Line 126	C++
 	mozjs31-ps-release.dll!js::jit::EnterBaselineAtBranch(JSContext * cx, js::InterpreterFrame * fp, unsigned char * pc) Line 209	C++
 	mozjs31-ps-release.dll!Interpret(JSContext * cx, js::RunState & state) Line 1713	C++
 	mozjs31-ps-release.dll!js::RunScript(JSContext * cx, js::RunState & state) Line 422	C++
 	mozjs31-ps-release.dll!js::Invoke(JSContext * cx, JS::CallArgs args, js::MaybeConstruct construct) Line 497	C++
 	mozjs31-ps-release.dll!js::Invoke(JSContext * cx, const JS::Value & thisv, const JS::Value & fval, unsigned int argc, const JS::Value * argv, JS::MutableHandle<JS::Value> rval) Line 531	C++
 	mozjs31-ps-release.dll!JS_CallFunctionValue(JSContext * cx, JS::Handle<JSObject *> obj, JS::Handle<JS::Value> fval, const JS::HandleValueArray & args, JS::MutableHandle<JS::Value> rval) Line 5064	C++
 	pyrogenesis.exe!IGUIObject::ScriptEvent(const CStr8 & Action) Line 509	C++
 	pyrogenesis.exe!IGUIObject::SendEvent(EGUIMessageType type, const CStr8 & EventName) Line 479	C++
 	pyrogenesis.exe!IGUIButtonBehavior::HandleMessage(SGUIMessage & Message) Line 90	C++
 	pyrogenesis.exe!CButton::HandleMessage(SGUIMessage & Message) Line 91	C++
 	pyrogenesis.exe!IGUIObject::SendEvent(EGUIMessageType type, const CStr8 & EventName) Line 477	C++
 	pyrogenesis.exe!CGUI::HandleEvent(const SDL_Event_ * ev) Line 150	C++
 	pyrogenesis.exe!CGUIManager::HandleEvent(const SDL_Event_ * ev) Line 331	C++
 	pyrogenesis.exe!gui_handler(const SDL_Event_ * ev) Line 48	C++
 	pyrogenesis.exe!in_dispatch_event(const SDL_Event_ * ev) Line 62	C++
 	pyrogenesis.exe!PumpEvents() Line 193	C++
 	pyrogenesis.exe!Frame() Line 321	C++
 	pyrogenesis.exe!RunGameOrAtlas(int argc, const char * * argv) Line 506	C++
 	pyrogenesis.exe!SDL_main(int argc, char * * argv) Line 550	C++
 	pyrogenesis.exe!main(int argc, char * * argv) Line 140	C
 	pyrogenesis.exe!wmain(int argc, wchar_t * * argv) Line 380	C++
 	[External Code]	
 	pyrogenesis.exe!CallStartupWithinTryBlock() Line 397	C++
 	[External Code]	

Change History (0)

Note: See TracTickets for help on using tickets.