1,507
edits
m (Renamed a category) |
(Update on the problematic objects in IHNM) |
||
Line 23: | Line 23: | ||
== IHNM ToDos == | == IHNM ToDos == | ||
=== | |||
=== Sprite bugs === | |||
['''Important'''] | |||
These bugs occur because currently ScummVM doesn't handle properly objects that have more than 1 frame. In all the problematic cases, Actor::getSpriteParams throws an invalid frameNumber warning about the problematic object. Most of these objects are doors. | |||
There are two main lists of sprites (_inventorySprites and _mainSprites), plus a list of objects, containing information on all the objects used. In the case of the problematic objects that have more than 1 frame, the object information itself remains the same, therefore we're not interested in the object information entry. I've checked the object flags, but saw no difference (they're 0). Perhaps the interactbits part is different? The incorrect sprite ID requested are always bigger than the largest ID in the _mainSprites list, so perhaps the correct approach would be to load the object's sprite list (using the sprite's resource ID) and append it to the end of the _mainSprites list, in a manner similar to what is done with actors (using loadActorSpriteList()) inside getSpriteParams(). | |||
Also, it seems that the original game does a slightly different calculation of frame IDs: | |||
cseg01:0001446D mov edx, mainSprites | |||
cseg01:00014473 xor ebx, ebx | |||
cseg01:00014475 mov ecx, [eax+GameObject.figID] | |||
cseg01:00014478 mov bx, [edx+xSpriteSet.count] | |||
cseg01:0001447B cmp ebx, ecx | |||
cseg01:0001447D jle short loc_1448B | |||
cseg01:0001447F mov eax, ecx | |||
cseg01:00014481 '''mov eax, [edx+eax*4+2]''' | |||
cseg01:00014485 '''add eax, edx''' | |||
Initially, I thought of adding something like this to Actor::getSpriteParams (after line 1787 in actor.cpp, inside the if case): | |||
if (spriteList->spriteCount <= frameNumber) { | |||
_vm->_sprite->loadList(frameNumber, _vm->_sprite->_mainSprites); | |||
return true; | |||
} | |||
The sprite list is loaded, but it looks to be incorrect, cause then an ScummVM stops in Sprite::decodeRLEBuffer with the following error: | |||
'''Sprite::decodeRLEBuffer outLength > _decodeBufLen!''' | |||
Known locations where this bug manifests: | |||
* Chapter 1 (Gorrister): The hatch inside the zeppelin is not drawn correctly | |||
* Chapter 1 (Gorrister): Repeatedly looking at the cages in the zeppelin's engine room while a caged animal is shown causes ScummVM to crash. During the animal torture animation, Actor::getSpriteParams keeps throwing warnings | |||
* Chapter 1 (Gorrister): When flushing the toilet, the door is moved to a weird spot (looks like a line above the toilet stall) | |||
* Chapter 1 (Gorrister): Actor::getSpriteParams keeps throwing warnings when walking to the upper floor, in the scene with the balloons and the stitching/opening | |||
* Chapter 2 (Ellen): When pushing/using any monitor, after the cutscene the monitor doesn't show anything on its screen | |||
* Chapter 2 (Ellen): The animation shown when the sarcophagus opens and closes is wrong. This occurs in the IHNM demo as well | |||
* Chapter 4 (Nimdok): When pushing the vent in the patient recovery room, the vent sprite is not updated (but the vent opens normally) | |||
* Chapter 5 (Ted): ['''Important'''] It's not possible to interact with the maid's door, as the closed door is not drawn at all. Therefore, it's not possible to tell Surgat to unlock it | |||
Line 42: | Line 82: | ||
*** ''The nightfall animation in Benny's chapter is not handled correctly yet, due to the missing sfScriptFade function. Currently, there's a workaround that doesn't show it at all'' | *** ''The nightfall animation in Benny's chapter is not handled correctly yet, due to the missing sfScriptFade function. Currently, there's a workaround that doesn't show it at all'' | ||
** sf92 (used in the demo, it's null in the full version). It is called when entering the non-interactive part of the demo through the special options screen of the IHNM demo | ** sf92 (used in the demo, it's null in the full version). It is called when entering the non-interactive part of the demo through the special options screen of the IHNM demo | ||
=== Pathfinding bugs === | === Pathfinding bugs === | ||
* Chapter 2 (Ellen): When trying to interact with the monitor on the right in the monitors room, Ellen enters the next room instead. This seems to be caused because the monitor object is problematic (could this be related to the sprite bugs above?) | * Chapter 2 (Ellen): When trying to interact with the monitor on the right in the monitors room, Ellen enters the next room instead. This seems to be caused because the monitor object is problematic (could this be related to the sprite bugs above?). The character interacts correctly with the monitor in the IHNM demo, but there the monitor has a corresponding hitzone, which does not exist in the full version | ||
edits