SAGA/TODO
Status
ITE
- ITE is completable
- The Amiga version is not supported yet
- The original DOS demo is not supported yet, as it is based on very early version of engine, so many structures are different. Most of the resources have been mapped but they're still untested. The actors and objects list needs to be moved to our code. They've been found but not processed yet
IHNM
- The demo has two parts: an interactive and a non-interactive one. Only the non-interactive part is shown for now, with some glitches:
- The background MIDI music is not played (it's loaded in a slightly different manner)
- The door of the sarcophagus that Ellen enters is not rendered at all (it's an object with multiple frames, which is currently problematic)
- The disk icon is not shown (this is done on purpose, as the non-interactive part uses it to show the psychic profile, which is not supported currently)
- The full game is partially working, but it's not possible to return to the character selection screen once a chapter is completed (or abruptly stopped by a wrong player option). ScummVM returns to the correct screen where AM is talking, but some variables are wrong and AM's speech is incorrect and the player is not taken back to the character selection screen. Status:
- Chapters 1-4 (Gorrister, Ellen, Benny and Nimdok) are completable with full points but there are some occasional glitches
- Chapter 5 (Ted): Not completable, it's impossible to interact with the maid's door (the closed door is not drawn), therefore it's not possible to tell Surgat to unlock it and move further
- Chapter 6 (Endgame): Not possible to test yet
IHNM ToDos
Major issues
- [Important] Investigate which variables are set after a chapter is complete, which will allow the player to go back to the character selection screen
- When a wrong monitor is selected with Ted, normally the door closes, screen goes black and AM says "Oh oh oh sorry Ted, try again", and we're taken to the character selection screen again. ScummVM goes to AM's screen but the speech is all wrong, and we never see the player selection screen
- [Important] Properly handle objects that have more than 1 frame. Refer to the sprite bugs section below
General
- When the spiritual barometer changes, the character's portrait changes to "happy" or "sad", but the background color is updated only after moving to another screen
- The psychic profile is not supported, because of the missing opcodes sfPsychicProfile, sfPsychicProfileOff, probably sf87 and perhaps others too
- Chapter 1 (Gorrister): sfPlaceActor throws a "Wrong frameOffset 0x0" warning when using the knife to scare the mice away in the kitchen
- Finish up the save/load dialogs:
- Load confirmation dialog is not shown
- Buttons in confirmation dialogs don't have borders like in the original
- Input line in save game description doesn't have borders like in the original (it does, but its color is wrong)
- Some colors are wrong
- The save game scrollbar is wrong
Missing functions
- Implement several missing functions:
- Psychic profile related: sfPsychicProfile and sfPsychicProfileOff and perhaps sf87
- sfScriptFade is not properly implemented, probably a new event type needs to be added (kEventPalFade)
- 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
- Investigate what the following opcodes are:
- sf87 (psychic profile related)
- sf88
- sf89
Sprite bugs
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
- 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
- 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
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?)
- Compressed sounds are not supported yet in IHNM. Compression is supported from the compress_saga tool (although the IHNM entries are disabled for now), but they are played incorrectly
ITE ToDos
General
- There's a slight pause (about a second or less) when a digital music track loops, when using compressed music. This pause does not exist when the music tracks are not compressed
Opcodes
- We need to find out where following script functions are called:
- SF_cycleColors -- all implementation bits sit in palanim.cpp
- sfPlayVoice -- used in ITE CD
Original engine bugs
- Actors are drawn (some pixels above status bar) at Chota's falling. - Original engine draws its too - so it is not our bug
- There is a missing sound sample in the intro of some ITE versions: "The humans also knew the Secret of Life, and they used it to give us the Four Great Gifts:". The missing sound sample is played correctly with the file P2_A.iaf, found in Wyrmkeep's update 2
Long-term ToDos for the SAGA engine
Bugs/misfeatures
- handleConverseUpdate scrolls converse too quickly
- handleCommandUpdate scrolls inventory too quickly
Optimizations
- Make actor animation Event-driven. See FIXME in actor.cpp. Maybe it should be INTERVAL_EVENT
- Inspect Font module - free memory, GameFontIds <-> FONT_ID
- In many places RSC_LoadResource() is called but memory is not freed afterwards, i.e. there is a huge leak
- Optimize screen output. Now we blit whole screen for each frame. Use "dirty rectangles" instead
- Remove use of floating point, especially doubles.
- Sometimes, incorrect music data is parsed to the MIDI parser, leading to a crash. This is occuring frequently in ITE, and rarely in IHNM. Perhaps it's related to some unhandled meta events. The crash always happens at sound/midiparser_xmidi.cpp in MidiParser_XMIDI::readVLQ2 at line 58. Refer to the bug report here
- When using the original XMIDI music resources, some songs play at the wrong speed. The worst example I've heard of this is the "Elk Fanfare" during the intro. It could be the meta events we don't handle, but at least the tempo event doesn't seem to make any difference. Maybe something in the data header instead...?