[Scummvm-tracker] [ScummVM] #9733: KYRA1: Crash: engines/kyra/screen_lok.cpp:77: void Kyra::Screen_LoK::fadeSpecialPalette(int, int, int, int): Assertion `_vm->palTable1()[palIndex]' failed.

sergesv trac at scummvm.org
Wed Apr 19 03:57:00 CEST 2017


#9733: KYRA1: Crash: engines/kyra/screen_lok.cpp:77: void
Kyra::Screen_LoK::fadeSpecialPalette(int, int, int, int): Assertion
`_vm->palTable1()[palIndex]' failed.
-------------------------+--------------------------
Reporter:  sergesv       |      Owner:  (none)
    Type:  patch         |     Status:  new
Priority:  normal        |  Component:  Engine: Kyra
Keywords:  crash, patch  |       Game:  Kyrandia 1
-------------------------+--------------------------
 Tested in scummvm 1.5.0/1.7.0/1.9.0 on linux/android.

 KyraEngine_LoK::seq_playEnd() calls fadeSpecialPalette(32, 228, 20, 60),
 which for palIndex=32 uses k1SpecialPalette33, which is not provided for
 OLDFLOPPY flags (could be a copy-paste error), and crashes ScummVM.
 Attached patch fixes that.

 **Steps to reproduce**:
 OLDFLOPPY is used for russian translation, so it's the easiest way to
 test:
 1. Get unpacked Legend of Kyrandia floppies
 2. Apply russian translation (http://katkov.net/Kyrandia/dl/kyrand1r.exe
 can be unpacked with 7-zip)
 3. Play until the kyragem room. Or just load a savegame (attached)
 4. Put scepter in place. Watch you talking to Malkolm, walking into
 kyragem room
 5. Stand in front of the mirror on the right side of the room, and become
 invisible by pressing the big red gem in the bottom right corner of the
 screen. Watch Malcolm spell reflecting from the mirror and see what
 happens next.

 **Expected result**:
 Something good.

 **Actual result**:
 ScummVM crashes:
 scummvm: engines/kyra/screen_lok.cpp:77: void
 Kyra::Screen_LoK::fadeSpecialPalette(int, int, int, int): Assertion
 `_vm->palTable1()[palIndex]' failed.

 {{{
 (gdb) bt
 #0  0xb7b20417 in raise () from /lib/i386-linux-gnu/libc.so.6
 #1  0xb7b23802 in abort () from /lib/i386-linux-gnu/libc.so.6
 #2  0xb7b19617 in __assert_fail () from /lib/i386-linux-gnu/libc.so.6
 #3  0x0809c3aa in Kyra::Screen_LoK::fadeSpecialPalette (this=0x85e0908,
 palIndex=32, startIndex=228, size=20, fadeTime=60) at
 engines/kyra/screen_lok.cpp:77
 #4  0x080d20a2 in Kyra::KyraEngine_LoK::seq_playEnd (this=0x85dae50) at
 engines/kyra/sequences_lok.cpp:1090
 #5  0x08062c7e in Kyra::KyraEngine_LoK::mainLoop (this=0x85dae50) at
 engines/kyra/kyra_lok.cpp:444
 #6  0x08062417 in Kyra::KyraEngine_LoK::go (this=0x85dae50) at
 engines/kyra/kyra_lok.cpp:336
 #7  0x0806494d in Kyra::KyraEngine_v1::run (this=0x85dae50) at
 ./engines/kyra/kyra_v1.h:255
 #8  0x08050d8f in runGame (plugin=0x847df38, system=..., edebuglevels=...)
 at base/main.cpp:260
 #9  0x08051db9 in scummvm_main (argc=4, argv=0xbffffba4) at
 base/main.cpp:522
 #10 0x0804f288 in main (argc=4, argv=0xbffffba4) at
 backends/platform/sdl/posix/posix-main.cpp:45
 }}}

 **Suggested solution**:
 I copy-pasted k1SpecialPalette33 from lok_dos_english.h to
 lok_dos_oldfloppy.h (patch attached), and regenerated kyra.dat (attached).

--
Ticket URL: <https://bugs.scummvm.org/ticket/9733>
ScummVM <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list