Difference between revisions of "TODO"

Jump to navigation Jump to search
1,632 bytes removed ,  10:14, 8 July 2018
(→‎Buildbot: Remove build tools task as implemented.)
(18 intermediate revisions by 9 users not shown)
Line 23: 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?
Line 39: Line 38:


== Web sites ==
== Web sites ==
=== General ===
* Move all sites to the new host
* Update outdated software
* Use HTTPS everywhere
* Make a consistent and reusable visual look across all sub-sites


=== Primary website ===
=== Primary website ===
* 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.
* Introduce build tools to handle website updates
* Update the template engine


=== [[Buildbot]] ===
=== [[Buildbot]] ===
* Run unit tests as part of the builds (i.e. add a build which, if the native build succeeded, runs "make test")
* Switch it to do verbose builds (seeing which exact command was used to invoke the compiler when debugging errors is quite helpful)
* Track the size of the resulting binaries.
* Track the size of the resulting binaries.
** This would greatly help in tracking down when and why the size of the ScummVM binary increased.
** This would greatly help in tracking down when and why the size of the ScummVM binary increased.
Line 55: Line 59:
** 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. ;).
** 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 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.
* Fix the console page


=== [[Doxygen]] ===
=== [[Doxygen]] ===
* <s>Create a visual theme which matches that of our forum and website</s>
* Update the visual theme to better match the site


=== [[Forums]] ===
=== [[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?
* Upgrade to phpBB 3
* Update the theme to phpBB3


=== [[Planet]] ===
=== [[Planet]] ===
Line 66: Line 73:


=== [[Wiki]] ===
=== [[Wiki]] ===
* <s>Create a visual theme which matches that of our forum and website</s>
* Update the theme to match the updated website
* Update to the latest Wiki version
* Add a ScummVM style guide
* 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 78: Line 87:
     ./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
** backend specific stuff into ??? (maybe new namespace "Backends" ?)  not sure about this one.
** backend specific stuff into ??? (maybe new namespace "Backends" ?)  not sure about this one.
* Get rid of getenv in as many places as possible. Ideally, we'd only use it to query HOME on Unix systems.
* Get rid of getenv in as many places as possible. Ideally, we'd only use it to query HOME on Unix systems.
==== Iterator handling ====
* 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.


=== Events ===
=== Events ===
Line 97: Line 100:
is valid for which event type. Implementation wise, we might want to use
is valid for which event type. Implementation wise, we might want to use
the classic union-of-structs trick. It goes roughly like this:
the classic union-of-structs trick. It goes roughly like this:
<syntax type="C++">
<source lang="cpp">
struct BasicEvent {
struct BasicEvent {
     EventType type;
     EventType type;
Line 118: Line 121:
     ...
     ...
};
};
</syntax>
</source>


However, this approach is contrary to classic OO paradigms. Indeed, its
However, this approach is contrary to classic OO paradigms. Indeed, its
Line 129: Line 132:
casting in code using events. The passing around of pointers could be
casting in code using events. The passing around of pointers could be
mitigated by using
mitigated by using
<syntax type="C++">
<source lang="cpp">
typedef Common::SharedPtr<BasicEvent> Event
typedef Common::SharedPtr<BasicEvent> Event
</syntax>
</source>
or something like that. Yet this would mean increased overhead in all
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
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
off by staying with the existing monolithic struct Event, we should just
enhance its documentation.
enhance its documentation.
==== Event recorder ====
Currently there is an implementation based on {{PatchTrack|num=1214168}} but it needs more work
* Try to avoid warpMouse() calls at playback, so the system will be useable
* Perhaps we need to indicate recording mode. May be draw triangle/circle in some corner. Use OSD overlay for that
* 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");
* Perhaps add special flag when game started from a save, i.e. not from the very beginning but with -x command line switch
** Perhaps embed the save into the recording then
* getMillis() currently is hacked into SDL. It has to be moved one level up
* delayMillis() perhaps has to be wrapped too, so time drift could be avoided


=== Build System ===
=== Build System ===
Line 229: Line 213:
* 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 256: Line 244:
=== [[Groovie]] ===
=== [[Groovie]] ===
* see [[Groovie/TODO|Groovie TODO]] list
* see [[Groovie/TODO|Groovie TODO]] list
=== [[Hopkins]] ===
* see [[Hopkins/TODO|Hopkins TODO]] list


=== [[Hugo]] ===
=== [[Hugo]] ===
Line 287: Line 278:
=== [[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).


Line 296: Line 287:
=== [[Tinsel]] ===
=== [[Tinsel]] ===
* see [[Tinsel/TODO|Tinsel TODO]] list
* see [[Tinsel/TODO|Tinsel TODO]] list
=== [[Tony]] ===
* see [[Tony/TODO|Tony TODO]] list


=== [[Toon]] ===
=== [[Toon]] ===
Line 308: Line 302:
=== [[Tucker]] ===
=== [[Tucker]] ===
* see [[Tucker/TODO|Tucker TODO]] list
* see [[Tucker/TODO|Tucker TODO]] list
=== [[Wintermute]] ===
* see [[Wintermute/TODO|Wintermute TODO]] list


== Backends and ports ==
== Backends and ports ==
Line 317: Line 314:
=== 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.
=== 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 ===

Navigation menu