Difference between revisions of "TODO"

Jump to navigation Jump to search
1,224 bytes added ,  19:41, 6 December 2017
Remove some obsolete TODO items
(Remove some obsolete TODO items)
(48 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{Infobox_TODO|
taskname=Main TODO List|
techcontact=The ScummVM Team|
subsystem=Generic|
}}
Here is a list of things we consider doing in the future. Note that we don't promise to do any of these, nor when we will do them. It's just a list of what we hope to be able to do one day, and some items on the list really are more like ideas than real proposals, so take it with a grain of salt.
Here is a list of things we consider doing in the future. Note that we don't promise to do any of these, nor when we will do them. It's just a list of what we hope to be able to do one day, and some items on the list really are more like ideas than real proposals, so take it with a grain of salt.


Line 17: Line 23:
* Add port specific user documentation (dreamcast/palm especially). That would include things like:
* Add port specific user documentation (dreamcast/palm especially). That would include things like:
** How to use ScummVM on system XYZ
** How to use ScummVM on system XYZ
** Which Palm / WinCE devices will run ScummVM, which definitely will not run it (or with which limitations)?
* Update/enhance man page
* Update/enhance man page
* Write a high level overview of how ScummVM and its engines work?
* Write a high level overview of how ScummVM and its engines work?


=== README / Manual ===
=== README / Manual ===
* Fingolfin has started a DocBook based manual (and FAQ, and Developer's Guide). You can find it in the SVN module "docs". It's a starting place, but very unfinished.
* A proper manual might be nice.
* Everybody is welcome to start helping out with the public manual project in the "docs" SVN module. You can either reuse content from the README, or replace it with new, better written stuff. Contact Fingolfin or our mailing list, scummvm-devel, if you are interested in helping out.
* Maybe move all/most of the compression related stuff from our README completely to the tools README, and only leave a pointer to that in the main README. This would be beneficial because this way, it's only documented in one place; it's *completly* documented (currently, the main README doesn't mention compress_scumm_bun, for example); and people who want to use the compression tools need to download the tools package anyway.
* Maybe move all/most of the compression related stuff from our README completely to the tools README, and only leave a pointer to that in the main README. This would be beneficial because this way, it's only documented in one place; it's *completly* documented (currently, the main README doesn't mention compress_scumm_bun, for example); and people who want to use the compression tools need to download the tools package anyway.
* It would be greate to have a "Developer's Guide to ScummVM" which explains the ScummVM framework, and also the engines, i.e.
* It would be greate to have a "Developer's Guide to ScummVM" which explains the ScummVM framework, and also the engines, i.e.
Line 38: Line 42:
* Add big (green?) shiny buttons in the middle of the page for (1) Donations and (2) Downloads ?
* Add big (green?) shiny buttons in the middle of the page for (1) Donations and (2) Downloads ?
* Show "Release Date" on download page
* Show "Release Date" on download page
* Use Javascript to improve the downloads page, by only showing the most important ports/downloads by default, and then uncovering the rest upon a click by the user (with gracious fallback if Javascript is disabled). A first draft of something like this can be seen on http://fredrik_w.users.sourceforge.net/downloads/
* Change all screenshot filenames to match our rules as described [[Screenshots|here]]. E.g. rename <code>data/screenshots/agos/simon/scummvm_2_4_0.jpg</code> to <code>data/screenshots/agos/simon/simon-0.jpg</code> etc.; also some stuff should maybe be moved to other directories.
* Change all screenshot filenames to match our rules as described [[Screenshots|here]]. E.g. rename <code>data/screenshots/agos/simon/scummvm_2_4_0.jpg</code> to <code>data/screenshots/agos/simon/simon-0.jpg</code> etc.; also some stuff should maybe be moved to other directories.


=== [[Buildbot]] ===
=== [[Buildbot]] ===
* Create a visual theme which matches that of our forum and website
* Track the size of the resulting binaries.
* Run unit tests (i.e. add a build which, if the native build succeeded, runs "make test")
** This would greatly help in tracking down when and why the size of the ScummVM binary increased.
* Update to latest Buildbot version
** Doing this should not be hard. Setup a database which stores for each commit the size of the (stripped) binary of each port.  
* Add support for building the ScummVM tools via buildbot
** Then, add a way to query that database via a webfront. At first, simply dumping all the numbers would be good enough. On the long run, it would be nice to show some cool graphical diagrams.
* Run unit tests via the buildbot
** For bonus points, allow the user of that webpage to dynamically change it using javascript: i.e. selecting which ports to show, which range of revisions; mousing over a data point shows a little box with details on the commit; clicking on a revision number jumps to the corresponding page in our SVN repository viewer; etc. ;).
* Install the new required dependencies (libpng and libtheora for [[Sword25]]) into the cross compiler environments of all ports that have a chance of supporting [[Sword25]].
* Install the new required dependencies (libpng, libfreetype, boost and wx-widgets) into the cross compiler environments of all desktop ports to support building of tools.


=== [[Doxygen]] ===
=== [[Doxygen]] ===
* <s>Create a visual theme which matches that of our forum and website</s>
* <s>Create a visual theme which matches that of our forum and website</s>
=== [[Forums]] ===
* Upgrade to phpBB 3. This receives security updated, and would provide many new handy features for users and admins alike. The main issue here is that somebody would have to rewrite our custom theme for that. Maybe we can hire somebody to do this?


=== [[Planet]] ===
=== [[Planet]] ===
Line 55: Line 63:


=== [[Wiki]] ===
=== [[Wiki]] ===
* Create a visual theme which matches that of our forum and website
* <s>Create a visual theme which matches that of our forum and website</s>
* Add content to [[Special:Wantedpages|Wanted Pages]]
* Add content to [[Special:Wantedpages|Wanted Pages]]
* Add some content to [[Help:Editing]], which is shown when editing a page
* Add some content to [[Help:Editing]], which is shown when editing a page
Line 67: Line 75:
     ./scummvm --add new_target --path=/foo monkey2
     ./scummvm --add new_target --path=/foo monkey2
     ./scummvm --remove new_target
     ./scummvm --remove new_target
* Maybe allow launching games even if no target is specified? I.e. the user only has to specify a path (or run ScummVM from the right directory), and ScummVM auto-detects the game in that location
    ./scummvm --auto-detect
* The following things should be put into namespaces:
* The following things should be put into namespaces:
** MIDI related classes either to Audio, or a new "MIDI" namespace
** MIDI related classes either to Audio, or a new "MIDI" namespace
Line 77: Line 83:
* Implement proper reverse_iterators for Common::List. Our current implementation is the same as forward iterators, just that rbegin will return the last element instead of the first and there is no rend. Check [http://www.sgi.com/tech/stl/ReverseIterator.html SGI Documentation] for proper description of revese_iterator in the STL.
* Implement proper reverse_iterators for Common::List. Our current implementation is the same as forward iterators, just that rbegin will return the last element instead of the first and there is no rend. Check [http://www.sgi.com/tech/stl/ReverseIterator.html SGI Documentation] for proper description of revese_iterator in the STL.


==== Event recorder ====
=== Events ===
Currently there is an implementation based on [https://sourceforge.net/support/tracker.php?aid=1738058 patch #1738058] but it needs more work
 
* Try to avoid warpMouse() calls at playback, so the system will be useable
==== Event struct ====
* Perhaps we need to indicate recording mode. May be draw triangle/circle in some corner. Use OSD overlay for that
The following is a (revision of) a former comment in <code>common/events.h</code>:
* Still it is possible that time will drift away even with current implementation. Do something about it, at least try to detect
* Remove temporary file
* Perhaps autogenerate record file name based on target name
* Perhaps combine 2 files which get created currently into one
* We should store unique game ID in the record files. I.e. ideally it should be engine name and some game MD5 or anything else which could be re-generated on game start. Then when this method is called in playback mode, recorder matches this against values stored in the record and refuses to play if they do not match.


  registerGame("scumm", "60ba818dc3bede86d40357e3913f8505");
Rework/document this structure. It should be made 100% clear which field
is valid for which event type. Implementation wise, we might want to use
the classic union-of-structs trick. It goes roughly like this:
<source lang="cpp">
struct BasicEvent {
    EventType type;
};
struct MouseMovedEvent : BasicEvent {
    Common::Point pos;
};
struct MouseButtonEvent : MouseMovedEvent {
    int button;
};
struct KeyEvent : BasicEvent {
    ...
};
...
union Event {
    EventType type;
    MouseMovedEvent mouse;
    MouseButtonEvent button;
    KeyEvent key;
    ...
};
</source>


However, this approach is contrary to classic OO paradigms. Indeed, its
major drawback is that all event types now must be POD data types, so
e.g. they can't contain a Common::Point as member. Bad.


* Perhaps add special flag when game started from a save, i.e. not from the very beginning but with -x command line switch
An alternative approach would be a more OO like switch to multiple Event
** Perhaps embed the save into the recording then
subclasses. This would, however, then require us to pass events around
* getMillis() currently is hacked into SDL. It has to be moved one level up
as pointers to object instances, and also would require introducing type
* delayMillis() perhaps has to be wrapped too, so time drift could be avoided
casting in code using events. The passing around of pointers could be
mitigated by using
<source lang="cpp">
typedef Common::SharedPtr<BasicEvent> Event
</source>
or something like that. Yet this would mean increased overhead in all
our code, yet the gain is unclear. In conclusion, we probably are best
off by staying with the existing monolithic struct Event, we should just
enhance its documentation.


=== Build System ===
=== Build System ===
Line 149: Line 185:
* Game edit dialog: Consider adding some warnings to the platform/language fields ("Don't mess with these unless you know what you are doing"), or move them to an "advanced" tab
* Game edit dialog: Consider adding some warnings to the platform/language fields ("Don't mess with these unless you know what you are doing"), or move them to an "advanced" tab
* Make the gameid editable via an "advanced" tab entry?
* Make the gameid editable via an "advanced" tab entry?
* There is no way to reset the save/extra/theme paths. Adding a tiny button labeled "c" for clearing them (like for the soundfont path button) is not the way to solve this, I think. One approach would be to extend the Browser dialog, to allow an (optional) extra button, with customizable label. When pressed, the browser dialog closes and returns a special code. Well, and we'd use labels like "Use default savepath" or "Reset extrapath", or just always "Use default value".
* <s>There is no way to reset the save/extra/theme paths. Adding a tiny button labeled "c" for clearing them (like for the soundfont path button) is not the way to solve this, I think. One approach would be to extend the Browser dialog, to allow an (optional) extra button, with customizable label. When pressed, the browser dialog closes and returns a special code. Well, and we'd use labels like "Use default savepath" or "Reset extrapath", or just always "Use default value".</s>
* The global options dialog may show a button for configuring the savepath even on systems where it is fixed -> not good. This button should be hidden/removed for these systems
* The global options dialog may show a button for configuring the savepath even on systems where it is fixed -> not good. This button should be hidden/removed for these systems
* separate launcher code even more from rest of ScummVM, to make custom launchers easier?
* separate launcher code even more from rest of ScummVM, to make custom launchers easier?
Line 168: Line 204:
* Make it possible to reach the  "key remapper" and "virtual keyboard" from the GMM, if available?
* Make it possible to reach the  "key remapper" and "virtual keyboard" from the GMM, if available?
* Sugar on the cake: In addition to the ScummVM logo and version, how about showing the engine name and game title at the top of the GMM?
* Sugar on the cake: In addition to the ScummVM logo and version, how about showing the engine name and game title at the top of the GMM?
=== Error handling ===
Sometimes, bugs are reported that are not easily reproducible, e.g. [https://sourceforge.net/p/scummvm/bugs/6751/ Bug #6751]. In such cases, it would be useful to have the error handler in ScummVM generate (and, optionally, automatically send) minidumps that can be used by us to successfully examine crashed ScummVM processes. Integration of something like [https://chromium.googlesource.com/breakpad/breakpad/ Google Breakpad] is one reasonable option. While it is not likely to be able to get such crash handling into all ports, just supporting the most popular platforms would be enough to make this feature very useful.


== Engines / frontends ==
== Engines / frontends ==
Line 183: Line 223:
=== [[Cine]] ===
=== [[Cine]] ===
* see [[Cine/TODO|Cine TODO]] list
* see [[Cine/TODO|Cine TODO]] list
=== [[CruisE]] ===
* see [[Cruise/TODO|CruisE TODO]] list


=== [[Drascula]] ===
=== [[Drascula]] ===
Line 189: Line 232:
=== [[Gob]] ===
=== [[Gob]] ===
* see [[Gob/TODO|Gob TODO]] list
* see [[Gob/TODO|Gob TODO]] list
=== [[Groovie]] ===
* see [[Groovie/TODO|Groovie TODO]] list
=== [[Hopkins]] ===
* see [[Hopkins/TODO|Hopkins TODO]] list
=== [[Hugo]] ===
* see [[Hugo/TODO|Hugo TODO]] list


=== [[Kyra]] ===
=== [[Kyra]] ===
* see [[Kyra/TODO|Kyra TODO]] list
* see [[Kyra/TODO|Kyra TODO]] list
=== [[Lastexpress]] ===
* see [[Lastexpress/TODO|Lastexpress TODO]] list


=== [[MADE]] ===
=== [[MADE]] ===
Line 210: Line 265:
=== [[Sword1|Broken Sword 1]] ===
=== [[Sword1|Broken Sword 1]] ===
* Modify MoviePlayer class to use ManagedArray for _movieTexts.
* Modify MoviePlayer class to use ManagedArray for _movieTexts.
* Add support for Bink RDFT compressed audio in the Smacker videos (used in some later releases).


=== [[Sword2|Broken Sword 2]] ===
=== [[Sword2|Broken Sword 2]] ===
* Fix the credits so they look more like the original. (Did we ever get the source code for that?)
* Fix the credits so they look more like the original. (Did we ever get the source code for that?)
* Maybe work around script bug which causes the mop to disappear briefly when trying to pick it up from the top of the boat at the London docks. (The event to hide the mop is sent too early.) {{BugTrack|num=1214168}}.
* Maybe work around script bug which causes the mop to disappear briefly when trying to pick it up from the top of the boat at the London docks. (The event to hide the mop is sent too early.) {{Tracker|id=2058}}.
* Maybe (but probably not) work around a graphics glitch where George can be drawn partially in front of a metal beam he's walking behind. (He's obscured properly by the beam sprite, but part of the beam is only background.) {{BugTrack|num=2828179}}.
* Maybe (but probably not) work around a graphics glitch where George can be drawn partially in front of a metal beam he's walking behind. (He's obscured properly by the beam sprite, but part of the beam is only background.) {{Tracker|id=4483}}.
* Unify some of the code with Broken Sword 1 (e.g. in router.cpp).
* Unify some of the code with Broken Sword 1 (e.g. in router.cpp).
=== [[Sword25]] ===
* see [[Sword25/TODO|Sword25 TODO]] list
=== [[Tinsel]] ===
* see [[Tinsel/TODO|Tinsel TODO]] list
=== [[Tony]] ===
* see [[Tony/TODO|Tony TODO]] list
=== [[Toon]] ===
* see [[Toon/TODO|Tooon TODO]] list


=== [[Touche]] ===
=== [[Touche]] ===
* see [[Touche/TODO|Touche TODO]] list
* see [[Touche/TODO|Touche TODO]] list
=== [[TsAGE]] ===
* see [[TsAGE/TODO|TsAGE TODO]] list
=== [[Tucker]] ===
* see [[Tucker/TODO|Tucker TODO]] list
=== [[Wintermute]] ===
* see [[Wintermute/TODO|Wintermute TODO]] list


== Backends and ports ==
== Backends and ports ==
Line 228: Line 305:
=== SDL backend ===
=== SDL backend ===
* Right now, the WinCE and the Symbian backend subclasses the regular SDL backend. They both overload a lot of methods (mostly the graphics stuff). Since graphics.cpp uses the scalers (e.g. hq3x), these derived backends carry that baggage around, too, even though they don't need that code. Idea: split the SDL backend into two classes, one base class which only has the code which is used by all subclasses; and a "desktop" subclass, which implements the rest. Then WinCE/Symbian would only subclass the "base" SDL class.
* Right now, the WinCE and the Symbian backend subclasses the regular SDL backend. They both overload a lot of methods (mostly the graphics stuff). Since graphics.cpp uses the scalers (e.g. hq3x), these derived backends carry that baggage around, too, even though they don't need that code. Idea: split the SDL backend into two classes, one base class which only has the code which is used by all subclasses; and a "desktop" subclass, which implements the rest. Then WinCE/Symbian would only subclass the "base" SDL class.
* The <tt>kFeatureAutoComputeDirtyRects</tt> feature is not entirely reliable, and perhaps it cannot ever be. It is currently known to cause glitches in [[AGOS/TODO|The Feeble Files]].
=== WinCE backend ===
* Improve the code in <code>backends/platform/wince/CEScaler.cpp</code>, it could be a lot faster with some simple changes.


=== Windows ===
=== Windows ===
Line 240: Line 313:
=== General ===
=== General ===
* Use doxygen (or something else) to turn the short descs from the README into short man pages AND a single text file (replacing README) and a HTML file...
* Use doxygen (or something else) to turn the short descs from the README into short man pages AND a single text file (replacing README) and a HTML file...
* Provide a configure script, which searches for the location of libraries etc. (possibly using pkg-config, if available).
 
* Assign a version to the tools and the tools GUI, and also an "update-version.pl" script to update it
=== GUI ===
** Ensure Info.plist contains proper version and copyright
* One of the GUI assistants pages shows the following text to the user: "Note: Some tools display file picker here, this should perhaps be changed to always be directory output, since often don't want to name the output file." Clearly this should *not* be shown to the user, but rather is something we devs need to address.
** Put version into README
* The last page of the assistant is weird. E.g. after successful run, it shows a "Finish" button in the lower right, and two checkboxes: "Open output folder" and "Process another file". This seems unintuitive and artificial to me. An IMHO better alternative would be to remove the "Finish" button, and instead show some big buttons with captions like "Process another file" (which does just that), "Open output folder", and "Quit". One can probably still do better, somebody should think about this.
** Maybe add a NEWS file?
** Update version in gui/main.cpp


=== Compression tools ===
=== Compression tools ===
* Try to unify the usage of the compression tools, where possible / necessary:
* (Semi-)automatically provide showhelp function
** unified command line parsing
** (Semi-)automatically provide showhelp function
* Modify encodeAudio to accept "input streams", so that we can avoid creating temporary WAVE files
* Modify encodeAudio to accept "input streams", so that we can avoid creating temporary WAVE files
* Easier usage: Most users will just want to specify the format, and maybe a "quality" setting. Allow power users to specify more advanced stuff, but  only show those advance things when "--help" is requested, not in the basic "showUsage" function
* Improved error checking !!! esp. for FT we got several reports about problems caused by the compression tool being called from the wrong directory. This should be avoidable by implementing suitable checks.
* Improved error checking !!! esp. for FT we got several reports about problems caused by the compression tool being called from the wrong directory. This should be avoidable by implementing suitable checks.
* Improve and polish the GUI code we got from GSoC 2007 code
* Funky long-term idea:
** turn the tools into libraries (or "one" library)
** current compression tools then just become thin wrappers around these
** makes it much easier to write 3rd party (GUI?) compression tools
** or even an official cross platform GUI (wxWindow? Java? ... )


=== Descumm ===
=== Descumm ===
53

edits

Navigation menu