Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#4829 closed defect (fixed)

LURE: Engine Abort "Invalid Room 19..."

Reported by: digitall Owned by: dreammaster
Priority: normal Component: Engine: Lure
Keywords: Cc:
Game: Lure of the Temptress

Description

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

Ticket imported from: #2976222. Ticket imported from: bugs/4829.

Attachments (1)

lure.007 (26.8 KB ) - added by digitall 10 years ago.
Last Savegame prior to crash

Download all attachments as: .zip

Change History (9)

by digitall, 10 years ago

Attachment: lure.007 added

Last Savegame prior to crash

comment:1 by digitall, 10 years ago

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...

comment:2 by dreammaster, 10 years ago

Owner: set to dreammaster

comment:3 by dreammaster, 10 years ago

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.

comment:4 by digitall, 10 years ago

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.

comment:5 by digitall, 10 years ago

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)

comment:6 by digitall, 10 years ago

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.

comment:7 by fingolfin, 10 years ago

Excellent work, Paul and David!

If the error pops up again, feel free to repoen this.

comment:8 by fingolfin, 10 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.