Difference between revisions of "AGOS/TODO"

From ScummVM :: Wiki
Jump to navigation Jump to search
(Added lengthy, rambling note about the line break bug in Oracle.)
(Update old notes about missing sound support)
 
(100 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Infobox_TODO|
taskname=AGOS Engine TODO|
techcontact=[[AGOS]] Engine Team|
subsystem=Engine|
}}
== General ==
== Personal Nightmare ==
* Add support for fading effects used for transitions between day and night, in the Amiga and Atari ST versions.
* Add support for palette differences (i.e. inventory icons), in the Amiga and Atari ST versions.
* Fix charset rendering to match original PC version exactly, squeezing character where required.
* Improve sound support, especially the handling of appended and queued sounds. The introduction sequence (in Amiga/AtariST ports) of [http://robertmegone.com/scummvm/demos/agos/pn-atari-ni-demo-en.zip demo] and full version, is the best point for testing.
* Using the 'Wait' command passes by far too quickly, and requires a work around. This problem occurs in the original game, when used on modern systems, due to the speed increase.
== Elvira 1 ==
* Add support for EGA mode in the DOS version.
* Add support for music in Atari ST version, the music seems to be hard coded in the EXE.
* Add support for compression format used by music and tables files in the PC98 version.
== Elvira 2 ==
* Add support for music in Atari ST version (The format is unknown). The music data is stored in 'xtune.pkd' files, and not compressed.
* Add support for sound effects in the DOS version, which are stored in the 'mylib.fxb' file.
== Waxworks ==
* Add support for sound effects in the DOS version, which are stored in the 'wax.fxb' file.
== Simon the Sorcerer 1 ==
== Simon the Sorcerer 1 ==
* Add support for decoding graphics in the Amiga verisons
* Add support for compression format (The format is unknown) used by the music in the Acorn disk version.
* Add support for Protracker MOD format, used for music in Amiga versions.
* Add support for [http://www.tribbeck.com/software/sonor/dtt/manual/appx_f.html  Desktop Tracker format] used for music in the Acorn disk version.
* Improve support for GMF music format used in DOS versions.
* Fix chest disappearing in Swampling's house in DOS versions.


== Simon the Sorcerer 2==
== Simon the Sorcerer 2==
* Add support for language files used by Amiga and Macintosh verisons.
* Add support for language files used by Amiga and Macintosh versions.
* Add support for music fade out in vc62_fastFadeOut() when changing locations.
* Add support for music fade out in vc62_fastFadeOut() when changing locations.
* Fix missing trails during lion ride to Goblin Camp in non-English versions.
* Fix minor glitch in the trail shown on the first map, when Simon is riding the Lion to the Goblin's Camp. The minor glitch occurs, as the next location starts blinking, slightly too much background is been restored for some reason.


== Feeble Files ==
== Feeble Files ==
* Add animation sorted by y value
* Add invertBox differences (video_toggle_colors in ScummVM).
* Add getPathPosn (Used by case 178 in runScript in ScummVM).
* Add support for sound/speech in Amiga/Macintosh version.


* Check all arrays for increased sizes.
* Fix occasional glitch when scrolling text in Oracle interface. See [[index.php?title=Media:Oracle-glitch.png|this series of screenshots]] from the DIRECTIVE CHARTER article. (It happens in other places as well.) This is actually not a bug in the Simon engine, but rather a problem with the automatic calculation of dirty rects that we use to speed up full screen updates in some engines. Maybe the checksum algorithm is more likely to fail when there are only two colors involved?


* Fix vertical scrolling when moving.
=== Some observations about the missing line breaks ===
* Fix scaling glitches as Feeble moves.
* Fix glitches when scrolling in Oracle interface.
* Fix crash when moving left at Metro Prime.
* Fix missing line breaks in Oracle interface.


=== Some observations about the missing line breaks ===
(This text is kept for historical purposes. The line break bug should be fixed now.)


In the article titled '''THE COMPANY''', only the first line is broken. The subsequent lines are not. The reason for this can be found in showmessage_print_char(): Every time an end of word (character codes 0, 10 or 32) appears, the function will check if the currently buffered word fits on the line or not:
In the article titled '''THE COMPANY''', only the first line is broken. The subsequent lines are not. The reason for this can be found in showmessage_print_char(): Every time an end of word (character codes 0, 10 or 32) appears, the function will check if the currently buffered word fits on the line or not:
Line 30: Line 47:
<pre>
<pre>
     } else if (chr == 0 || chr == ' ' || chr == 10) {
     } else if (chr == 0 || chr == ' ' || chr == 10) {
         uint count = (getGameType() == GType_FF) ? _printCharPixelCount : _numLettersToPrint;
         uint count = (getGameType() == GType_FF) ? _printCharPixelCount + 1 : _printCharPixelCount;
         if (_printCharMaxPos - _printCharCurPos > count) {
         if (_printCharMaxPos - _printCharCurPos >= count) {
             _printCharCurPos += count;
             _printCharCurPos += _printCharPixelCount;
</pre>
</pre>


The test checks if the remaining space on the line is larger than the length of the buffered word, i.e. if the test succeeds the word will fit. In this case, <tt>_printCharMaxPos</tt> is always 360.
The test checks if the remaining space on the line is larger than the length of the buffered word, i.e. if the test succeeds the word will fit. In this case, <tt>_printCharMaxPos</tt> is always 360.


At the first line break, <tt>_printCharCurPos</tt> is 325 and <tt>count</tt> is 39. The word does not fit, and therefore the line is broken.
At the first line break, <tt>_printCharCurPos</tt> is 325 and <tt>count</tt> is 40. The word does not fit, and therefore the line is broken.
 
Where the second line break should be, <tt>_printCharCurPos</tt> is 366 and <tt>count</tt> is 25. At first glance it looks like the test will fail, because the remaining space is negative. However, we're using ''unsigned'' variables, so what at first apperas to be a small negative value is actually a large positive one.
 
So how did this happen? Shouldn't the line have been broken at the previous word? No, in fact it should not. At that point, <tt>_printCharCurPos</tt> is 327 and <tt>count</tt> is 32. The word fits, just barely, and <tt>_printCharCurPos</tt> is increased to 358. Problem is, the line break check is triggered, here as almost always, by a space. And in that case the width of that space will ''also'' be added to <tt>_printCharCurPos</tt>, bringing it up to 366.
 
There are several possible fixes. A few that come to mind:
 
* Change the variables from unsigned to signed.
* Check for overflow before adding the width of the space. (This may be what it's trying to do already by checking if <tt>_printCharCurPos == _printCharMaxPos</tt>.)
* Rewrite the test so that signedness doesn't matter, e.g. <tt>if (_printCharCurPos + count < _printCharMaxPos)</tt>
 
Oddly enough, the original ''does'' use unsigned variables, and take none of these precautions. Is it possible that the compiler ''Adventure Soft'' used behaved differently (buggily?), or are we missing some subtle detail...?
 
== Puzzle Pack ==
 
* Add support for displaying, entering, loading and saving high scores in each game.
 
=== Demon In My Pocket ===


Where the second line break should be, <tt>_printCharCurPos</tt> is 366 and <tt>count</tt> is 24. At first glance, it looks like the test will fail, because the remaining space is negative. However, we're using ''unsigned'' variables, so what at first apperas to be a small negative value is actually a large positive one.
* Timing code seems too slow, the demon takes a very long time to die.


So how did this happen? Shouldn't the line have been broken at the previous word? No, in fact it should not. At that point, <tt>_printCharCurPos</tt> is 327 and <tt>count</tt> is 31. The word fits, just barely, and <tt>_printCharCurPos</tt> is increased to 358. Problem is, the line break check is triggered, here as almost always, by a space. And in that case the width of that space will ''also'' be added to <tt>_printCharCurPos</tt>, bringing it up to 366.
=== Swampy Adventures ===


So to fix it, we either need to test for "overflow" when adding the width of the space, or - which seems like a better solution to me - we could change the variables to be signed. The strange thing is: the original appears to take neither of these precautions. Is it possible that the compiler ''Adventure Soft'' used behaved differently in this case, or are we missing some subtle detail...?
* Add support for entering nickname at start of the game (Uses Windows fonts).
* Add support for displaying rollover text, which displays explanation when clicking on items (Uses Windows fonts).

Latest revision as of 23:10, 22 January 2021

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

General

Personal Nightmare

  • Add support for fading effects used for transitions between day and night, in the Amiga and Atari ST versions.
  • Add support for palette differences (i.e. inventory icons), in the Amiga and Atari ST versions.
  • Fix charset rendering to match original PC version exactly, squeezing character where required.
  • Improve sound support, especially the handling of appended and queued sounds. The introduction sequence (in Amiga/AtariST ports) of demo and full version, is the best point for testing.
  • Using the 'Wait' command passes by far too quickly, and requires a work around. This problem occurs in the original game, when used on modern systems, due to the speed increase.

Elvira 1

  • Add support for EGA mode in the DOS version.
  • Add support for music in Atari ST version, the music seems to be hard coded in the EXE.
  • Add support for compression format used by music and tables files in the PC98 version.

Elvira 2

  • Add support for music in Atari ST version (The format is unknown). The music data is stored in 'xtune.pkd' files, and not compressed.
  • Add support for sound effects in the DOS version, which are stored in the 'mylib.fxb' file.

Waxworks

  • Add support for sound effects in the DOS version, which are stored in the 'wax.fxb' file.

Simon the Sorcerer 1

  • Add support for compression format (The format is unknown) used by the music in the Acorn disk version.
  • Add support for Desktop Tracker format used for music in the Acorn disk version.

Simon the Sorcerer 2

  • Add support for language files used by Amiga and Macintosh versions.
  • Add support for music fade out in vc62_fastFadeOut() when changing locations.
  • Fix minor glitch in the trail shown on the first map, when Simon is riding the Lion to the Goblin's Camp. The minor glitch occurs, as the next location starts blinking, slightly too much background is been restored for some reason.

Feeble Files

  • Fix occasional glitch when scrolling text in Oracle interface. See this series of screenshots from the DIRECTIVE CHARTER article. (It happens in other places as well.) This is actually not a bug in the Simon engine, but rather a problem with the automatic calculation of dirty rects that we use to speed up full screen updates in some engines. Maybe the checksum algorithm is more likely to fail when there are only two colors involved?

Some observations about the missing line breaks

(This text is kept for historical purposes. The line break bug should be fixed now.)

In the article titled THE COMPANY, only the first line is broken. The subsequent lines are not. The reason for this can be found in showmessage_print_char(): Every time an end of word (character codes 0, 10 or 32) appears, the function will check if the currently buffered word fits on the line or not:

    } else if (chr == 0 || chr == ' ' || chr == 10) {
        uint count = (getGameType() == GType_FF) ? _printCharPixelCount + 1 : _printCharPixelCount;
        if (_printCharMaxPos - _printCharCurPos >= count) {
            _printCharCurPos += _printCharPixelCount;

The test checks if the remaining space on the line is larger than the length of the buffered word, i.e. if the test succeeds the word will fit. In this case, _printCharMaxPos is always 360.

At the first line break, _printCharCurPos is 325 and count is 40. The word does not fit, and therefore the line is broken.

Where the second line break should be, _printCharCurPos is 366 and count is 25. At first glance it looks like the test will fail, because the remaining space is negative. However, we're using unsigned variables, so what at first apperas to be a small negative value is actually a large positive one.

So how did this happen? Shouldn't the line have been broken at the previous word? No, in fact it should not. At that point, _printCharCurPos is 327 and count is 32. The word fits, just barely, and _printCharCurPos is increased to 358. Problem is, the line break check is triggered, here as almost always, by a space. And in that case the width of that space will also be added to _printCharCurPos, bringing it up to 366.

There are several possible fixes. A few that come to mind:

  • Change the variables from unsigned to signed.
  • Check for overflow before adding the width of the space. (This may be what it's trying to do already by checking if _printCharCurPos == _printCharMaxPos.)
  • Rewrite the test so that signedness doesn't matter, e.g. if (_printCharCurPos + count < _printCharMaxPos)

Oddly enough, the original does use unsigned variables, and take none of these precautions. Is it possible that the compiler Adventure Soft used behaved differently (buggily?), or are we missing some subtle detail...?

Puzzle Pack

  • Add support for displaying, entering, loading and saving high scores in each game.

Demon In My Pocket

  • Timing code seems too slow, the demon takes a very long time to die.

Swampy Adventures

  • Add support for entering nickname at start of the game (Uses Windows fonts).
  • Add support for displaying rollover text, which displays explanation when clicking on items (Uses Windows fonts).