After freeing the Girl (Goewin?) using the potion to impersonate Serena,
while walking around waiting for the potion to wear off,
the engine aborts just after re-entering the room with the Town Hall Door.
The error given is "Invalid room 19 specified for barman details retrieval!"
There are also a couple of "WARNING: actionCtr exceeded!" produced as well, but these are probably from earlier in the play.
ScummVM 1.1.0pre48374 (Mar 23 2010 23:16:52)
Features compiled in: Vorbis FLAC MP3 ALSA RGB zLib FluidSynth
built on Linux x86_32 2.6.31 by GCC 4.3.4
Last Savegame prior to crash
Another Engine Abort which may be linked occurs later when trying to solve the Weregate Cave Puzzle in the Green Cave. This time, the error is "Access made to non-defined action support record!".
Again, a number of "WARNING: actionCtr exceeded!" are produced...
Hmmm... I'm having trouble replicating the problem. I'll try some more experimentaiton to see if I can. Internally, the relevant code says there are three different NPCs that act as barmen/shopkeepers, and each of them are in a set room - there is an internal list of movement control information which is keyed by the room number to determine which one uses which data. I can't think of any reason why the error would occur unless some other problem caused some serious memory corruption.
As for the other one, it would be better if you could create a separate bug report for it and, ideally, see if you can attach a savegame from close to the problem, as well as list any pertinant details of what exactly you were doing/did to get the error.
OK. I also was unable to reliably replicate this, otherwise I'd have provided a procedure.
I will have a go at playing through the game under valgrind, to see if I can catch any memory issues.
Moved the Weregate engine abort to bug 2976974.
Valgrind has revealed a bunch of memory errors which are evident in the first few rooms.
It is likely that these are at least partial responsible for the issues observed, but I can't complete
playing through until at least these are fixed as they are likely to fill the log masking any less frequent issues.
Log follows :
Start of Game :
==17746==
==17746== Conditional jump or move depends on uninitialised value(s)
==17746== at 0x84FDE6B: Lure::Hotspot::setDirection(Lure::Direction) (hotspots.cpp:520)
==17746== by 0x84D351E: Lure::Resources::addHotspot(unsigned short) (res.cpp:657)
==17746== by 0x84D3785: Lure::Resources::activateHotspot(unsigned short) (res.cpp:616)
==17746== by 0x84E8C86: Lure::Script::activateHotspot(unsigned short, unsigned short, unsigned short) (scripts.cpp:67)
==17746== by 0x84EA2AA: Lure::Script::execute(unsigned short) (scripts.cpp:1110)
==17746== by 0x84FC37D: Lure::Game::execute() (game.cpp:166)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
==17746== by 0x8053451: main (main.cpp:65)
==17746==
==17746== Conditional jump or move depends on uninitialised value(s)
==17746== at 0x84FDDCF: Lure::Hotspot::resetDirection() (hotspots.cpp:1201)
==17746== by 0x8501E37: Lure::Hotspot::updateMovement() (hotspots.cpp:720)
==17746== by 0x8501E5C: Lure::Hotspot::updateMovement2(Lure::CharacterMode) (hotspots.cpp:725)
==17746== by 0x85088CE: Lure::HotspotTickHandlers::playerAnimHandler(Lure::Hotspot&) (hotspots.cpp:2974)
==17746== by 0x84FDD95: Lure::Hotspot::tick() (hotspots.cpp:474)
==17746== by 0x84FC168: Lure::Game::tick() (game.cpp:92)
==17746== by 0x84E5A65: Lure::Room::setRoomNumber(unsigned short, bool) (room.cpp:632)
==17746== by 0x84F9EFC: Lure::Game::handleBootParam(int) (game.cpp:945)
==17746== by 0x84FC441: Lure::Game::execute() (game.cpp:169)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746==
==17746== Conditional jump or move depends on uninitialised value(s)
==17746== at 0x84FDDD5: Lure::Hotspot::resetDirection() (hotspots.cpp:1201)
==17746== by 0x8501E37: Lure::Hotspot::updateMovement() (hotspots.cpp:720)
==17746== by 0x8501E5C: Lure::Hotspot::updateMovement2(Lure::CharacterMode) (hotspots.cpp:725)
==17746== by 0x85088CE: Lure::HotspotTickHandlers::playerAnimHandler(Lure::Hotspot&) (hotspots.cpp:2974)
==17746== by 0x84FDD95: Lure::Hotspot::tick() (hotspots.cpp:474)
==17746== by 0x84FC168: Lure::Game::tick() (game.cpp:92)
==17746== by 0x84E5A65: Lure::Room::setRoomNumber(unsigned short, bool) (room.cpp:632)
==17746== by 0x84F9EFC: Lure::Game::handleBootParam(int) (game.cpp:945)
==17746== by 0x84FC441: Lure::Game::execute() (game.cpp:169)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746==
==17746== Conditional jump or move depends on uninitialised value(s)
==17746== at 0x84FDDDB: Lure::Hotspot::resetDirection() (hotspots.cpp:1201)
==17746== by 0x8501E37: Lure::Hotspot::updateMovement() (hotspots.cpp:720)
==17746== by 0x8501E5C: Lure::Hotspot::updateMovement2(Lure::CharacterMode) (hotspots.cpp:725)
==17746== by 0x85088CE: Lure::HotspotTickHandlers::playerAnimHandler(Lure::Hotspot&) (hotspots.cpp:2974)
==17746== by 0x84FDD95: Lure::Hotspot::tick() (hotspots.cpp:474)
==17746== by 0x84FC168: Lure::Game::tick() (game.cpp:92)
==17746== by 0x84E5A65: Lure::Room::setRoomNumber(unsigned short, bool) (room.cpp:632)
==17746== by 0x84F9EFC: Lure::Game::handleBootParam(int) (game.cpp:945)
==17746== by 0x84FC441: Lure::Game::execute() (game.cpp:169)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746==
==17746== Conditional jump or move depends on uninitialised value(s)
==17746== at 0x84FDE6B: Lure::Hotspot::setDirection(Lure::Direction) (hotspots.cpp:520)
==17746== by 0x8501851: Lure::Hotspot::walkingStep() (hotspots.cpp:672)
==17746== by 0x850A3BC: Lure::HotspotTickHandlers::standardCharacterAnimHandler(Lure::Hotspot&) (hotspots.cpp:2776)
==17746== by 0x850A545: Lure::HotspotTickHandlers::jailorAnimHandler(Lure::Hotspot&) (hotspots.cpp:3205)
==17746== by 0x84FDD95: Lure::Hotspot::tick() (hotspots.cpp:474)
==17746== by 0x84FC168: Lure::Game::tick() (game.cpp:92)
==17746== by 0x84FC20F: Lure::Game::nextFrame() (game.cpp:125)
==17746== by 0x84FC4BA: Lure::Game::execute() (game.cpp:182)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
Using Knife on Sack :
==17746== Mismatched free() / delete / delete []
==17746== at 0x4024D9A: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==17746== by 0x84D161D: Lure::PopupMenu::ShowInventory() (menu.cpp:296)
==17746== by 0x84FB3BD: Lure::Game::handleRightClickMenu() (game.cpp:566)
==17746== by 0x84FBED8: Lure::Game::handleClick() (game.cpp:472)
==17746== by 0x84FC880: Lure::Game::execute() (game.cpp:263)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
==17746== by 0x8053451: main (main.cpp:65)
==17746== Address 0x5e83ee8 is 0 bytes inside a block of size 8 alloc'd
==17746== at 0x40263DE: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==17746== by 0x850D998: Lure::Memory::alloc(unsigned int) (memory.cpp:42)
==17746== by 0x84D14B4: Lure::PopupMenu::ShowInventory() (menu.cpp:277)
==17746== by 0x84FB3BD: Lure::Game::handleRightClickMenu() (game.cpp:566)
==17746== by 0x84FBED8: Lure::Game::handleClick() (game.cpp:472)
==17746== by 0x84FC880: Lure::Game::execute() (game.cpp:263)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
==17746== by 0x8053451: main (main.cpp:65)
==17746==
==17746== Mismatched free() / delete / delete []
==17746== at 0x4024D9A: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==17746== by 0x84D1628: Lure::PopupMenu::ShowInventory() (menu.cpp:297)
==17746== by 0x84FB3BD: Lure::Game::handleRightClickMenu() (game.cpp:566)
==17746== by 0x84FBED8: Lure::Game::handleClick() (game.cpp:472)
==17746== by 0x84FC880: Lure::Game::execute() (game.cpp:263)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
==17746== by 0x8053451: main (main.cpp:65)
==17746== Address 0x5e83f20 is 0 bytes inside a block of size 4 alloc'd
==17746== at 0x40263DE: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==17746== by 0x850D998: Lure::Memory::alloc(unsigned int) (memory.cpp:42)
==17746== by 0x84D14C5: Lure::PopupMenu::ShowInventory() (menu.cpp:278)
==17746== by 0x84FB3BD: Lure::Game::handleRightClickMenu() (game.cpp:566)
==17746== by 0x84FBED8: Lure::Game::handleClick() (game.cpp:472)
==17746== by 0x84FC880: Lure::Game::execute() (game.cpp:263)
==17746== by 0x84CF1C3: Lure::LureEngine::go() (lure.cpp:160)
==17746== by 0x84D0358: Lure::LureEngine::run() (lure.h:102)
==17746== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==17746== by 0x8056F69: scummvm_main (main.cpp:389)
==17746== by 0x8053451: main (main.cpp:65)
The valgrind issues here have been corrrected by SVN r48407 and r48413.
I have tested past the point of the error and have found no problems or memory issues.
I would suggest that this bug was _likely_ caused by these memory issues and that the bug should be closed as resolved.
Excellent work, Paul and David!
If the error pops up again, feel free to repoen this.