From a153f9a2e633c788edd00b1c71c75377a3319e66 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 12 May 2012 10:34:52 +1000 Subject: [PATCH] TONY: Explicitly initialise fields of various objects in their constructors This fixes a crash when the pop-up inventory was displayed. --- engines/tony/gfxcore.cpp | 1 + engines/tony/inventory.cpp | 13 +++++++++++++ engines/tony/tonychar.cpp | 18 ++++++++++++++++++ engines/tony/tonychar.h | 4 +++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/engines/tony/gfxcore.cpp b/engines/tony/gfxcore.cpp index de78b51a4e5..344542b8017 100644 --- a/engines/tony/gfxcore.cpp +++ b/engines/tony/gfxcore.cpp @@ -287,6 +287,7 @@ RMGfxClearTask RMGfxTargetBuffer::taskClear; RMGfxTargetBuffer::RMGfxTargetBuffer() { otlist = NULL; + m_otSize = 0; csModifyingOT = g_system->createMutex(); } diff --git a/engines/tony/inventory.cpp b/engines/tony/inventory.cpp index 50e4dd94115..9d673459c50 100644 --- a/engines/tony/inventory.cpp +++ b/engines/tony/inventory.cpp @@ -64,6 +64,18 @@ RMInventory::RMInventory() { m_bCombining = false; m_csModifyInterface = g_system->createMutex(); m_nItems = 0; + + Common::fill(m_inv, m_inv + 256, 0); + m_nInv = 0; + m_curPutY = 0; + m_curPutTime = 0; + m_curPos = 0; + m_bHasFocus = false; + m_nSelectObj = 0; + m_nCombine = 0; + m_bBlinkingRight = false; + m_bBlinkingLeft = false; + miniAction = 0; } RMInventory::~RMInventory() { @@ -932,6 +944,7 @@ void RMInterface::Init(void) { */ m_bActive = false; m_bPalesati = false; + m_lastHotZone = 0; } void RMInterface::Close(void) { diff --git a/engines/tony/tonychar.cpp b/engines/tony/tonychar.cpp index 6a5d80f51ee..982949870c8 100644 --- a/engines/tony/tonychar.cpp +++ b/engines/tony/tonychar.cpp @@ -59,6 +59,24 @@ namespace Tony { bool RMTony::m_bAction = false; +RMTony::RMTony() { + m_bShow = false; + m_bShowOmbra = false; + m_bCorpoDavanti = false; + m_bActionPending = false; + m_ActionItem = NULL; + m_Action = 0; + m_ActionParm = 0; + m_bPastorella = false; + m_bIsStaticTalk = false; + m_bIsTalking = false; + m_nPatB4Talking = 0; + m_nTalkType = TALK_NORMAL; + m_TalkDirection = UP; + m_nTimeLastStep = 0; + hActionThread = CORO_INVALID_PID_VALUE; +} + void RMTony::WaitEndOfAction(CORO_PARAM, const void *param) { CORO_BEGIN_CONTEXT; CORO_END_CONTEXT(_ctx); diff --git a/engines/tony/tonychar.h b/engines/tony/tonychar.h index cf67db4df55..bbb1667c9be 100644 --- a/engines/tony/tonychar.h +++ b/engines/tony/tonychar.h @@ -127,7 +127,7 @@ private: protected: // Overload dell'allocazione degli sprites per cambiare il tipo - virtual RMGfxSourceBuffer* NewItemSpriteBuffer(int dimx, int dimy, bool bPreRLE); + virtual RMGfxSourceBuffer *NewItemSpriteBuffer(int dimx, int dimy, bool bPreRLE); // Thread which waits for the end of an action static void WaitEndOfAction(CORO_PARAM, const void *param); @@ -378,6 +378,8 @@ public: // per farlo rialzare, altrimenti private }; public: + RMTony(); + // Inizializza Tony void Init(void);