Opened 5 months ago
Closed 4 months ago
#15281 closed defect (fixed)
SCUMM: Loom: Crash when loading savegame from launcher
Reported by: | eriktorbjorn | Owned by: | AndywinXp |
---|---|---|---|
Priority: | normal | Component: | Engine: SCUMM |
Version: | Keywords: | ||
Cc: | Game: | Loom |
Description
I'm uncertain which games are affected, but some versions of Loom are affected. The EGA and FM Towns versions at the very least.
When using the launcher to load a savegame, ScummVM will crash if that savegame was made with the original GUI. If it was done with ScummVM's save dialog, it works fine.
scummvm: engines/scumm/script.cpp:824: void Scumm::ScummEngine::stopObjectCode(): Assertion `_currentScript != 0xFF' failed.
I thought at first this was a regression... and in a sense it is, but only because an assert()
has been added to catch it. Backtrace from GDB:
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff62a53ff in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff62564f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff623f4ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007ffff623f415 in __assert_fail_base (fmt=0x7ffff63b6c08 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x555556fa1ed2 "_currentScript != 0xFF", file=file@entry=0x555556fa1993 "engines/scumm/script.cpp", line=line@entry=824, function=function@entry=0x555556fa1ea8 "void Scumm::ScummEngine::stopObjectCode()") at ./assert/assert.c:94 #5 0x00007ffff624f012 in __assert_fail (assertion=0x555556fa1ed2 "_currentScript != 0xFF", file=0x555556fa1993 "engines/scumm/script.cpp", line=824, function=0x555556fa1ea8 "void Scumm::ScummEngine::stopObjectCode()") at ./assert/assert.c:103 #6 0x0000555557e8cbff in Scumm::ScummEngine::stopObjectCode() (this=0x5555607354e0) at engines/scumm/script.cpp:824 #7 0x0000555557ea14e5 in Scumm::ScummEngine_v3::terminateSaveMenuScript() (this=0x5555607354e0) at engines/scumm/scumm.cpp:3204 #8 0x0000555557ea1666 in Scumm::ScummEngine_v3::scummLoop_handleSaveLoad() (this=0x5555607354e0) at engines/scumm/scumm.cpp:3243 #9 0x0000555557e9f312 in Scumm::ScummEngine::scummLoop(int) (this=0x5555607354e0, delta=3) at engines/scumm/scumm.cpp:2714 #10 0x0000555557e9e583 in Scumm::ScummEngine::go() (this=0x5555607354e0) at engines/scumm/scumm.cpp:2471 #11 0x0000555557d231b6 in Scumm::ScummEngine::run() (this=0x5555607354e0) at ./engines/scumm/scumm.h:583 #12 0x0000555557cef872 in runGame(Plugin const*, OSystem&, DetectedGame const&, void const*) (enginePlugin=0x55555ea53680, system=..., game=..., meDescriptor=0x0) at base/main.cpp:311 #13 0x0000555557cf1c68 in scummvm_main(int, char const* const*) (argc=1, argv=0x7fffffffe638) at base/main.cpp:796 #14 0x0000555557cec928 in main(int, char**) (argc=1, argv=0x7fffffffe638) at backends/platform/sdl/posix/posix-main.cpp:44
The terminateSaveMenuScript()
will set _currentScript
to 0xFF before calling stopObjectCode()
so the only chance that it won't crash is if runScript()
in between sets _currentScript
and then doesn't reset it.
But that doesn't seem to happen here.
Change History (4)
comment:1 by , 5 months ago
Owner: | set to |
---|---|
Resolution: | → assigned |
Status: | new → pending |
follow-up: 3 comment:2 by , 4 months ago
comment:3 by , 4 months ago
Replying to AndywinXp:
Thanks! I've tried saving both with the original and the ScummVM GUI in both EGA and FM Towns Loom, and then loaded those savegames with the original GUI, the ScummVM GUI, the command line (-x) and the launcher, and it all worked fine as far as I could tell.
I don't know if any other games were affected.
comment:4 by , 4 months ago
Resolution: | assigned → fixed |
---|---|
Status: | pending → closed |
In 2f9a4409: