Difference between revisions of "SAGA/TODO"

From ScummVM :: Wiki
Jump to navigation Jump to search
(Opcodes 87, 88 and 89 are partially implemented now (used in the IHNM demo help system))
(Fix use of Tracker template)
 
(61 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Infobox_TODO|
taskname=SAGA Engine TODO|
techcontact=[[SAGA]] Engine Team|
subsystem=Engine|
}}
== Status ==
== Status ==


Line 5: Line 11:
* The Amiga version is not supported yet
* The Amiga version is not supported yet
* Demo versions:
* Demo versions:
** The newer demo versions of the game are supported
** The older non-interactive demos are supported
** The older Windows and Mac demos are not supported yet, the game crashes when exiting the first screen
** The newer interactive demo versions of the game are supported
** 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
** 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


Line 12: Line 18:
=== IHNM ===
=== IHNM ===
* The '''demo''' has two parts, an interactive and a non-interactive one. It's playable and probably completable
* The '''demo''' has two parts, an interactive and a non-interactive one. It's playable and probably completable
** The help screen, accessible from the special option page of the demo is not shown correctly yet, because of the partially implemented opcodes sfShowIHNMDemoHelpText and sfClearIHNMDemoHelpText
* The '''full game''' is completable, with some small glitches
** The door of the sarcophagus that Ellen enters in the non-interactive part is not rendered at all (it's an object with multiple frames, which is currently problematic). Same bug exists in the interactive part, in the sarcophagus with the mummy. Refer to the [[SAGA/TODO#Sprite_bugs|sprite bugs]] section below




* The '''full game''' is working, but there is an issue that causes problems with objects with multiple sprites, preventing it from being completable. Refer to the [[SAGA/TODO#Sprite_bugs|sprite bugs]] section below. Status:
== ToDos ==
** '''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'''] Properly handle objects that have more than 1 frame. Refer to the [[SAGA/TODO#Sprite_bugs|sprite bugs]] section below




=== General ===
=== 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
* ['''ITE'''] 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
* Chapter 1 (Gorrister): sfPlaceActor throws a "Wrong frameOffset 0x0" warning when using the knife to scare the mice away in the kitchen
* ['''IHNM/ITE'''] The first frame of animations is not shown when changing scenes. Perhaps a problem with the rendering pipeline. Currently, there's a hack to show it correctly. This issue is apparent in IHNM in Nimdok's chapter, with the mob of prisoners, when the prisoners break loose and take the prison. Note that there is currently a hack that fixes it, but the prisoner animation itself is problematic as well, and will look incorrect if the player hasn't put the jar in the box and tries to leave the prison. In this case, a video is shown, and after the video is done and the game returns back to the scene, the prisoner animation is wrong, because the animation is paused and then resumed, and it doesn't resume from the first frame (thus showing incorrectly)
* Finish up the save/load dialogs:
* ['''IHNM'''] The (dis)appearing compact disk in Ellen's chapter is currently handled with a hack
** Buttons in confirmation dialogs don't have borders like in the original
* ['''IHNM'''] Pathfinding bugs: When a character moves over an exit zone while doing an action, he stops his action and exits the room instead. The known places where this occurs are:
** Input line in save game description doesn't have borders like in the original (it does, but its color is wrong)
** Chapter 2 (Ellen): When trying to interact with the monitor on the right in the monitors room, Ellen enters the next room instead. 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. {{Tracker|id=3541}}
** Some colors are wrong
** Chapter 4 (Nimdok): When Nimdok is moved to the patient's table in the recovery room, he doesn't stop at the table and enters the back room instead
** The save game scrollbar is wrong
** A workaround has been installed by commit c825cc41a57b40a9af6ca51a3674b90e5f17e00f. As this fix causes regressions if used globally, it is limited to IHNM and the two rooms (chapter/scene) listed above.
 
* ['''IHNM'''] Chapter 1 (Gorrister): In the engine room if you pick up the bloody key and re-enter the room another key is there (seems the corresponding hitzone is not disabled correctly)
 
* ['''IHNM'''] Chapter 2 (Ellen): When Ellen picks up the chalice, the phrase she says "Now I got the cup, but what do I do with it?" is cut off prematurely, as she exits the scene
=== Missing functions ===
* ['''IHNM'''] When clicking on Gorrister in the character selection screen, it seems that it doesn't play the entire animation. He should disappear completely (he does in the original), but in ScummVM he doesn't. Not always, at least.
* Implement several '''missing functions''':
* ['''IHNM'''] When clicking on the right side of a screen in Nimdok's chapter, a masking issue occurs sometimes. Here's a screenshot:
** sfScriptFade is not properly implemented, probably a new event type needs to be added (kEventPalFade)
{| border=0 align=center
*** ''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''
|[[Image:Scummvm00001pz8.png|thumb|70px|left|frame|Masking bug in Nimdok's chapter]]
** 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
|}


 
=== compress_saga tool ===
=== Sprite bugs ===
* ['''IHNM'''] Currently, the SFX.RES file in IHNM cannot be compressed
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
* ['''ITE'''] MacBinary files are not supported yet (used by the Mac CD Guild version)
* 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
 
 
=== 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?)
 
 
== 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 ===
=== Opcodes ===
* We need to find out where following script functions are called:
* ['''ITE'''] We need to find out where following script functions are called:
** SF_cycleColors -- all implementation bits sit in palanim.cpp
** SF_cycleColors -- all implementation bits sit in palanim.cpp
** sfPlayVoice -- used in ITE CD
** 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 [http://www.wyrmkeep.com/ite/update.html Wyrmkeep's update 2]




== Long-term ToDos for the SAGA engine ==
== Long-term ToDos for the SAGA engine ==
=== Bugs/misfeatures ===
* handleConverseUpdate scrolls converse too quickly
* handleCommandUpdate scrolls inventory too quickly


=== Optimizations ===
=== Optimizations ===
* Make actor animation Event-driven. See FIXME in actor.cpp. Maybe it should be INTERVAL_EVENT
* 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
* 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
* Optimize screen output. Now we blit whole screen for each frame. Use "dirty rectangles" instead
* Remove use of floating point, especially doubles.
* Remove use of floating point, especially doubles.
* Rewrite the IHNM intro credit part (ihnm_introproc.cpp), so that it uses LoadCutawayList, like the original. There's some commented out test code currently that gets the cutaway IDs via LoadCutawayList, but the cutaway playing mechanism for the introduction needs to be rewritten
* The text is not always positioned like in the original (can be seen in ITE, but it's more apparent in IHNM, where text that should be on the top of the screen is in the bottom)




=== MIDI related ===
=== MIDI related ===
* 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 [http://sourceforge.net/tracker/index.php?func=detail&aid=1734416&group_id=37116&atid=418820 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...?
* 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...?
== Bugs in the original games ==
Check about bugs that occured in the original games (some of which have been fixed in ScummVM) in the [[SAGA/Bugs|SAGA Bugs]] page

Latest revision as of 16:57, 21 February 2016

TODO List
Name SAGA Engine TODO
Technical Contact(s) SAGA Engine Team
Subsystem Engine

Status

ITE

  • ITE is completable
  • The Amiga version is not supported yet
  • Demo versions:
    • The older non-interactive demos are supported
    • The newer interactive demo versions of the game are supported
    • 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. It's playable and probably completable
  • The full game is completable, with some small glitches


ToDos

General

  • [ITE] 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
  • [IHNM/ITE] The first frame of animations is not shown when changing scenes. Perhaps a problem with the rendering pipeline. Currently, there's a hack to show it correctly. This issue is apparent in IHNM in Nimdok's chapter, with the mob of prisoners, when the prisoners break loose and take the prison. Note that there is currently a hack that fixes it, but the prisoner animation itself is problematic as well, and will look incorrect if the player hasn't put the jar in the box and tries to leave the prison. In this case, a video is shown, and after the video is done and the game returns back to the scene, the prisoner animation is wrong, because the animation is paused and then resumed, and it doesn't resume from the first frame (thus showing incorrectly)
  • [IHNM] The (dis)appearing compact disk in Ellen's chapter is currently handled with a hack
  • [IHNM] Pathfinding bugs: When a character moves over an exit zone while doing an action, he stops his action and exits the room instead. The known places where this occurs are:
    • Chapter 2 (Ellen): When trying to interact with the monitor on the right in the monitors room, Ellen enters the next room instead. 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. [Bug #3541]
    • Chapter 4 (Nimdok): When Nimdok is moved to the patient's table in the recovery room, he doesn't stop at the table and enters the back room instead
    • A workaround has been installed by commit c825cc41a57b40a9af6ca51a3674b90e5f17e00f. As this fix causes regressions if used globally, it is limited to IHNM and the two rooms (chapter/scene) listed above.
  • [IHNM] Chapter 1 (Gorrister): In the engine room if you pick up the bloody key and re-enter the room another key is there (seems the corresponding hitzone is not disabled correctly)
  • [IHNM] Chapter 2 (Ellen): When Ellen picks up the chalice, the phrase she says "Now I got the cup, but what do I do with it?" is cut off prematurely, as she exits the scene
  • [IHNM] When clicking on Gorrister in the character selection screen, it seems that it doesn't play the entire animation. He should disappear completely (he does in the original), but in ScummVM he doesn't. Not always, at least.
  • [IHNM] When clicking on the right side of a screen in Nimdok's chapter, a masking issue occurs sometimes. Here's a screenshot:
Masking bug in Nimdok's chapter

compress_saga tool

  • [IHNM] Currently, the SFX.RES file in IHNM cannot be compressed
  • [ITE] MacBinary files are not supported yet (used by the Mac CD Guild version)


Opcodes

  • [ITE] 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


Long-term ToDos for the SAGA engine

Optimizations

  • Make actor animation Event-driven. See FIXME in actor.cpp. Maybe it should be INTERVAL_EVENT
  • 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.
  • The text is not always positioned like in the original (can be seen in ITE, but it's more apparent in IHNM, where text that should be on the top of the screen is in the bottom)


MIDI related

  • 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...?


Bugs in the original games

Check about bugs that occured in the original games (some of which have been fixed in ScummVM) in the SAGA Bugs page