diff options
author | Paul Gilbert | 2017-07-18 22:09:57 -0400 |
---|---|---|
committer | Paul Gilbert | 2017-07-18 22:09:57 -0400 |
commit | 3525d5d4c9d7a329725172e5860b9ea2c0dde085 (patch) | |
tree | 41fa86e11e338f9a1e3791b4831cf9dcf9b90cb4 | |
parent | 50a90cd2f1bc7d2b6334f99b77cf54c1dadf020b (diff) | |
download | scummvm-rg350-3525d5d4c9d7a329725172e5860b9ea2c0dde085.tar.gz scummvm-rg350-3525d5d4c9d7a329725172e5860b9ea2c0dde085.tar.bz2 scummvm-rg350-3525d5d4c9d7a329725172e5860b9ea2c0dde085.zip |
TITANIC: Fix crash trying to restart game after returning to launcher
-rw-r--r-- | engines/titanic/core/message_target.cpp | 3 | ||||
-rw-r--r-- | engines/titanic/core/message_target.h | 4 | ||||
-rw-r--r-- | engines/titanic/core/saveable_object.cpp | 5 | ||||
-rw-r--r-- | engines/titanic/messages/messages.cpp | 3 |
4 files changed, 10 insertions, 5 deletions
diff --git a/engines/titanic/core/message_target.cpp b/engines/titanic/core/message_target.cpp index a1060c643e..e471bc6565 100644 --- a/engines/titanic/core/message_target.cpp +++ b/engines/titanic/core/message_target.cpp @@ -29,8 +29,9 @@ const MSGMAP *CMessageTarget::getMessageMap() const { } const MSGMAP *CMessageTarget::getThisMessageMap() { + static const ClassDef *nullDef = nullptr; static const MSGMAP_ENTRY _messageEntries[] = { - { (PMSG)nullptr, nullptr } + { (PMSG)nullptr, &nullDef } }; static const MSGMAP messageMap = { nullptr, &_messageEntries[0] }; diff --git a/engines/titanic/core/message_target.h b/engines/titanic/core/message_target.h index a382b6392d..a09e6e33ec 100644 --- a/engines/titanic/core/message_target.h +++ b/engines/titanic/core/message_target.h @@ -34,7 +34,7 @@ typedef bool (CMessageTarget::*PMSG)(CMessage *msg); struct MSGMAP_ENTRY { PMSG _fn; - ClassDef *_class; + const ClassDef * const *_class; }; struct MSGMAP { @@ -58,7 +58,7 @@ protected: \ static const MSGMAP_ENTRY _messageEntries[] = { #define ON_MESSAGE(msgClass) \ - { static_cast<PMSG>((FNPTR)&ThisClass::msgClass), C##msgClass::_type }, + { static_cast<PMSG>((FNPTR)&ThisClass::msgClass), &C##msgClass::_type }, #define END_MESSAGE_MAP() \ { (PMSG)nullptr, nullptr } \ diff --git a/engines/titanic/core/saveable_object.cpp b/engines/titanic/core/saveable_object.cpp index 0257f6a087..4784151a01 100644 --- a/engines/titanic/core/saveable_object.cpp +++ b/engines/titanic/core/saveable_object.cpp @@ -1024,9 +1024,12 @@ void CSaveableObject::initClassList() { _classDefs = new ClassDefList(); _classList = new ClassListMap(); + CSaveableObject::_type = new TypeTemplate<CSaveableObject>("CSaveableObject", nullptr); + _classDefs->push_back(CSaveableObject::_type); + (*_classList)["CSaveableObject"] = FunctionCSaveableObject; + // Setup the type definitions for each class. Note that these have to be // in order of hierarchy from ancestor class to descendent - ADDFN(CSaveableObject, CSaveableObject); ADDFN(CMessage, CSaveableObject); ADDFN(CMessageTarget, CSaveableObject); ADDFN(CResourceKey, CSaveableObject); diff --git a/engines/titanic/messages/messages.cpp b/engines/titanic/messages/messages.cpp index db89c3de3d..331d580dee 100644 --- a/engines/titanic/messages/messages.cpp +++ b/engines/titanic/messages/messages.cpp @@ -89,7 +89,8 @@ const MSGMAP_ENTRY *CMessage::findMapEntry(const CTreeItem *treeItem, const Clas for (const MSGMAP_ENTRY *entry = msgMap->lpEntries; entry->_class != nullptr; ++entry) { // Check if the class or any of it's ancesotrs is handled by this entry - for (const ClassDef *entryDef = entry->_class; entryDef; entryDef = entryDef->_parent) { + for (const ClassDef *entryDef = *entry->_class; entryDef; + entryDef = entryDef->_parent) { if (entryDef == classDef) return entry; } |