Opened 13 years ago
Last modified 4 years ago
#5828 new defect
SAGA: IHNM - Character selection animations often miss a frame
Reported by: | eriktorbjorn | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | Engine: SAGA |
Version: | Keywords: | ||
Cc: | Game: | I Have No Mouth |
Description
Current ScummVM git (though the glitch has been bugging me for ages, so it's nothing recent) English versin of the game
There is a slight glitch on the hate pillar/character selection screen. When selecting a character, the animation often stops one frame too early. E.g. when selecting Nimdok, it cycles through frames 6-25 instead of 6-26.
The two relevant opcodes here are probably sfCycleFrames(), which sets up the animation cycle, and sfWaitFrames() which tells the thread how long to wait. There may be other things happening in between these two opcodes; I haven't checked.
The problem seems to be that usually it executes both sfCycleFrames and sfWaitFrames before the animation cycle actually begins, and then it won't finish in time. But sometimes, it manages to do the first frame (and increase _vm->_frameCount) before sfWaitFrames(), and then it will finish in time. I haven't seen this glitch when using DOSBox, though it's been a while since I tried that.
One possibility would be that this slight indeterminism is in the original as well, and that our sfWaitFrames() doesn't wait long enough. Another is that something about our script/thread handling is different from the original. Of course, it could also be something else entirely, and my analysis could be completely wrong.
Ticket imported from: #3392688. Ticket imported from: bugs/5828.
Change History (2)
comment:1 by , 13 years ago
comment:2 by , 4 years ago
Summary: | IHNM: Character selection animations often miss a frame → SAGA: IHNM - Character selection animations often miss a frame |
---|
Perhaps it will save someone a little bit of bother if I mention that both the actor's frame number and the game's frame count appear to be handled by Actor::handleActions() in actor_walk.cpp, and that the actor action seems to be kActionCycleFrames.