-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Is this supposed to work with Keen 4 and 6? #5
Comments
At the moment, only the Keen 5 support has been fully released and tested (so, for example, the precompiled binary releases are Keen 5 only). The documentation also still only covers Keen 5. However, there's support in the code for Keen 4 v1.4 and Keen 6 v1.5. If you build it yourself, you'll need the data files from those versions (plus the files in the data/keen?/ directory), and to run omnispeak with the "/episode 4" or "/episode 6" options. I'm working on a proper release with Keen 4 and 6 support at the moment, though, and I'll update this bug when it's available. tl;dr: Keen 4/6 support is coming very soon. The code is there, and works if you compile it yourself, but the released binaries are Keen 5 only for now. |
I think there was something wrong with my data files; I copied them from steam and now it works. |
Glad to hear that it's working! The version 1.0 release is now live, as well, which makes support for Keen 4 and 6 official (and adds support for Keen 6 v1.4 EGA as well). There's some documentation and binary downloads (with Keen 4 already set up) at https://davidgow.net/keen/omnispeak.html as well. Happy Keening! |
Thanks to @LoneFox78 for finding this issue. The vl_parmStrings[] array was terminated with an empty string, not a NULL pointer. This could cause US_CheckParm() to read past the end of the array, as it ignored empty strings, but did not treat them as a terminator. The original game, however, did use "" as a terminator for its equivalent of vl_parmStrings, and US_CheckParm() treated it the same way as it treated NULL. We should do the same, rather than changing the terminator in ID_VL. AddressSanitizer shows the following error: ==18985==ERROR: AddressSanitizer: global-buffer-overflow on address 0x55b291d96198 at pc 0x55b291c9441a bp 0x7fffa349a080 sp 0x7fffa349a070 READ of size 8 at 0x55b291d96198 thread T0 #0 0x55b291c94419 in US_CheckParm(char const*, char const**) (/home/david/Development/omnispeak/bin/omnispeak+0x50419) #1 0x55b291ca7308 in VL_Startup() (/home/david/Development/omnispeak/bin/omnispeak+0x63308) #2 0x55b291d3f40f in CK_InitGame() (/home/david/Development/omnispeak/bin/omnispeak+0xfb40f) #3 0x55b291d40175 in main (/home/david/Development/omnispeak/bin/omnispeak+0xfc175) #4 0x7fb36fb30d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 #5 0x7fb36fb30e3f in __libc_start_main_impl ../csu/libc-start.c:392 #6 0x55b291c7d074 in _start (/home/david/Development/omnispeak/bin/omnispeak+0x39074) 0x55b291d96198 is located 0 bytes to the right of global variable 'vl_parmStrings' defined in 'id_vl.c:721:20' (0x55b291d96180) of size 24 SUMMARY: AddressSanitizer: global-buffer-overflow (/home/david/Development/omnispeak/bin/omnispeak+0x50419) in US_CheckParm(char const*, char const**) Fixes: c505d6b ("id_vl: Initial support for /NOPAN parameter")
I see that there are implementation files for Keen 4 and 6, but when I try to run with the corresponding data it crashes. Or do I need a specific version?
The text was updated successfully, but these errors were encountered: