omnispeak
omnispeak copied to clipboard
Keen4: Different behavior picking up wetsuit in Miragia
Hi! Found this project, love it, hope to see it flourish. I used to speedrun these games so I thought I'd try out some "glitchy" actions I know of, might help get the behavior as close to the original as possible. I'm using DOSBox for the comparison so it's possible that differences have to do with emulation, but I consider it reliable for most things.
Onto the issue: there are some different behaviors surrounding the wetsuit item in Miragia between original and Omnispeak. These can all be tested by starting a new Keen4 game, warping directly to Miragia (via F10+W cheat), and navigating the level to the wetsuit: they also are reproducible with a save just before interacting with the wetsuit.
- Wetsuit can be obtained from the ground in original; in Omnispeak, you have to jump in order for the pickup to activate (though I noticed that Keen doesn't visibly leave the ground).
- Text upon picking up wetsuit displays between Keen portraits in original; in Omnispeak, the text only displays with the first Keen portrait and disappears when the second appears. (Alignment of text also seems off: not sure if this is unique here.)
- In the original, there's a very short period of time where it's possible to bring up the status screen (the one that appears when you press the Enter key) before the level ending occurs. (In a speedrun context, this is used to override the sound effect of the ending jingle and ends the level faster.) I was unable to get this to work in Omnispeak, though it might be a matter of timing. In the original I would perform this by holding the up and right directional keys on top of Enter in order to buffer inputs for both dialog continuation and to bring up the status screen.
My operating system is Windows 7 64-bit and the Omnispeak version is from the download on the website (presumably v1).
Thanks for the message (and for trying Omnispeak). I'm especially thrilled that it seems to be mostly reliable.
I've started work fixing these issues. Most of the accuracy work in Omnispeak has been focused on the in-game loop, so it's not surprising that there are some issues around the dialog boxes and menus, but we'll see what we can fix anyway.
-
This is just a bug. In Keen 4, the Wetsuit dialog only activates when Keen is touching the ground. In Omnispeak, we'd accidentally inverted that check, and the dialog would only activate if keen was not touching the ground. This is now fixed in the source code, though I haven't updated the binary.
-
There are a number of issues with the WetsuitMessage, but I think I've fixed those mention. I've fixed some of the text alignment (change a 6→12) and we no-longer re-draw the window for the second portrait (which was clearing the text from the screen). There's still a timing issue with the Wetsuit message, though: Keen waits for 30VBLs (3/7ths of a second, or ~0.4s) after displaying the "Cool! I can breathe\nunder water now!" before allowing the dialog to be advanced, Omnispeak doesn't wait at all. There's an identical wait after the portrait changes.
-
I'm still looking into this: the status window is a pretty weird part of the Keen code, and Omnispeak definitely doesn't handle it perfectly. It's also possible that this is caused by the keyboard code, which in Omnispeak asks the OS every frame to check for updates, but in Keen receives them directly from the keyboard controller chip as an interrupt. The code for the Wetsuit message is also supposed to make the game forget its list of pressed keys (so any key will need pressing again). So no fix for this yet.
I've uploaded a windows build with these fixes here: https://davidgow.net/stuff/omnispeak-win32-test20190121.zip Note that it also contains a few other changes, including a new graphics backend which doesn't require OpenGL. If that causes problems, I can do a build with the old OpenGL backend.
Thanks again for testing out Omnispeak, and for taking the time to report these issues!
Cheers, — David
Tested out the build you provided, 1 and 2 look fixed to me. :+1:
3's understandably more complex. If it helps:
- In Keen4, there's a noticeable period between the wetsuit message and the level-exit message where the whole game screen is visible, and during this time the game seems to advance about one frame. (That is, enough to shift the screen a pixel or two horizontally, since Keen was walking into the wetsuit, but usually not enough for himn to change which walking sprite he's on.)
- In Omnispeak, the wetsuit and level-exit messages seamlessly switch, with the frame-advance occurring simultaneously with the level-exit message.
At this point I've played through every level of all three games on Hard using Omnispeak, and have a number of other potential discrepancies to explore in further detail. I didn't want to flood the tracker with issues until I'd gotten an initial response, and am very glad you're still active on this project! You can expect some new reports in the following days.
Thanks for checking that out, and thanks for the extra info on the wetsuit message. I've managed to get it working on my machine, though there's a good chance it broke a couple of other things (and may slow the game down a bit on some machines), so I'm going to work on a less-hacky fix before uploading it.
More bug reports are most welcome: the goal is definitely to make this as accurate to the original gameplay as possible.
By the way, if you record a demo in Keen (with F10+D), you can play it back in Omnispeak by running "omnispeak /DEMOFILE