#6671 closed defect (fixed)
RINGWORLD2: Crash during final (?) confrontation
Reported by: | eriktorbjorn | Owned by: | dreammaster |
---|---|---|---|
Priority: | normal | Component: | Engine: TsAGE |
Version: | Keywords: | ||
Cc: | Game: | Return to Ringworld |
Description
During the final (?) confrontation, when Seeker defiantly states that he will not give up the cube, the game may crash with the following assertion:
scummvm: engines/tsage/converse.cpp:251: virtual void TsAGE::SequenceManager::signal(): Assertion `_sceneObject' failed. Aborted
It seems to depend on who is the active character when I enter the room. I couldn't reproduce it as Quinn, but so far it happens every time as Seeker. (I haven't tried as Miranda.)
Ticket imported from: bugs/6671.
Attachments (4)
Change History (12)
by , 10 years ago
Attachment: | ringworld2-cd.044 added |
---|
comment:1 by , 10 years ago
Owner: | set to |
---|
comment:2 by , 10 years ago
by , 10 years ago
Attachment: | tsage-debug.patch added |
---|
by , 10 years ago
Attachment: | ringworld2-badcase.log added |
---|
by , 10 years ago
Attachment: | ringworld2-goodcase.log added |
---|
comment:6 by , 10 years ago
Sorry about the multiple comments... Allura seems to not allow multiple attachments per comment despite saying "Add attachments" i.e. plural. SIGH.
comment:7 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:8 by , 10 years ago
Thanks for the assistance with the analysis. It made figuring out the problem much easier.
Reliably replicated as described with attached savegame on latest git master using Linux x86_64.
Checked with valgrind. No issues seen.
This assertion is occurring as the _sceneObject being assigned is NULL and thus when it is dereferenced later in the script, it will fail, hence the non-null assertion.
I have added some debug output to the converse class to track the SequenceManager object's _objectList[] member state. Attaching this patch and two traces from the bad case (with Seeker) and the good case (with Quinn, but have also tested with Miranda and the output is identical).
The main point of difference / deviation seems to be that in the bad case: SequenceManager::remove(_resNum:3402) SequenceManager::attached(_resNum:3400)
slightly before the point of failure, whereas in the good case, this is: SequenceManager::remove(_resNum:3402) SequenceManager::attached(_resNum:3408)