scummvm/TODO

192 lines
9.5 KiB
Plaintext

General
=======
* Add plugin system (both dynamic & static plugin support)
[if you want to work on it, ask Fingolfin about this, he already has done
some planning. Also make sure that your system support 'static' plugins, too]
* Revise the way "quit" is handled. Maybe add a global variable "g_quit" which
we set when the application should be quit (e.g. when an EVENT_QUIT is
received). This is useful if multiple levels of event loops have to be ended
* Fix the Map<> template, make it more robust; maybe use a red-black tree?
* Allow for return-to-launcher instead of a normal "quit" ?
* Make some generic "EventLoop" API/class which all backends and the GUI
use. Initially this would just call the backend poll_event() etc. methods.
But eventually the EventLoop object(s) could be made by the backend.
This may allow for more efficient CPU usage etc.
The current event handling model essentially is polling: the engines run
some kind of main loop, which, besides many other things, also polls and
dispatches events. The idea is to turn this around: the event loop
frequently gives the engine time to do these "other things".
* Remove "detectname" from GameSettings struct. On the long run, "midi" and/or
"features" might be removed, too.
* Enhance the Makefile-based build system to support VPATH and stuff, so that
one can compile scummvm in a directory tree separate from the source tree.
That would make it possible to build ScummVM with different build options,
e.g. have one debug build and one optimized build.
* Add a FilesystemManager or FileManager or so which should unify and/or
replace the current File/FilesystemNode classes (and maybe SaveFileManager).
The goal is to make these things as portable as possible while keeping it
easy to use for the coder. Some new functionality we need:
- check for existence of file/directory
- check whether given directory is readable/writeable
- convert FSNode into a string representation (for prefs file)
- convert said string representation back to FSNode
Of course that can be added w/o a FileManager class, too - but it might be
nice to have all of these integrated.
Documentation
=============
* Update/enhance man page
* Would be nice to have a HTML version of the README on the web page (and I
don't just mean a big <pre> section; rather I mean "real" HTML with links
and lists and tables etc.)
* Ideally, maybe we can convert the README to some meta format, and then from
that generate the text README, as well as a HTML one (and maybe also PDF?)
Some candidates:
- DocBook
- texinfo
- nroff/troff + PolyglotMan (http://polyglotman.sourceforge.net/)
- tbook (http://tbookdtd.sourceforge.net/)
- xml2doc (http://xml2doc.sourceforge.net/)
- ...
* Some parts of the README probably could stand a workover. Right now the
README is trying to be brief (it's "just" a README after all), but it really
is the closest thing we have to a proper ScummVM manual. So either we just
decide to turn it into a full blown manual, or maybe make a even shorter
README, and a MANUAL with full details, examples, screen shots etc.
* Add more doxygen comments. However, quality is preferable over quantity
GUI
===
* LAUNCHER: add more options to global options dialog
* LAUNCHER: add more options to game target options dialog
* Remove hardcoded 320x200 assumptions, use game screen size
* Add ability to scale GUI (ie. to make the GUI less tiny in COMI)
Game Detector
=============
* Make use of MD5 sums for improved game detection
-> in particular, a detector should be allowed to return detected
values for language and platform
* Improve the detector for games with all datafiles in subdirs (i.e.
Broken Sword 1 & 2). This could work by letting the detector proc recurse
into sub directories...
Audio
=====
* Get the high quality resample code to work
[Fingolfin has started work on this]
* Add a command line/config file option for the output sample rate (to allow
for output sample rates other than 22050 Hz, e.g. 44100). Code should do
sanity checking (e.g. restrict to rates between 8000 - 65535 Hz)
* Clean up the "premixer mess": instead of having a custome premixer hook, add
a "callback channel" or something like this. This removes special cases from
the code, and it also makes it possible to apply sound rate conversion to
premixers, which makes it easier to write and maintain a premixer proc.
Config
======
* Preserve comments in config file somehow
* Add a 'notification' system. E.g. the SoundMixer could request to be notified
whenever the value of the "volume" config option changes. In other words,
instead of a "pull" approach (where each subsystem has to check whether any
config option relevant to it has been changed) we use a "push" approach.
Of course the current approach is "push", too: whenever e.g. the volume
setting is changed, the code doing so has to updated the SoundMixer etc.
That's cumbersome, and error prone. Would be much nicer if updating the
volume config value automatically notifies the SoundMixer, iMuse etc.
* Change backends to directly access the config manager
SCUMM
=====
* Fix C64 costume code
* Make it possible to restart games properly
* Add support for handling Kanji in FM Towns games (foreground is rendered on a
second plane at 640x480), text uses Shift_JIS encoding
* Figure out how to extract resources from Apple II and Commodore 64 versions
* Document and fix AKOS differences in Humongous Entertainment games
* Support various newer Humongous Entertainment games
* Implement file related opcode stubs needed for Humongous games
* Add support for graphics codecs used in 3DO versions of Humongous games
* Proper handling of .tlk files for Humongous games
* Implement the needed INSANE bits for Full Throttle action sequences
* Add fully implementation of iMUSE Digital for The Dig, COMI and FT
* Try to remove all use of MAD/Ogg code from scumm/sound.cpp:
Ideally, only code in sound/ should access these libs. This will
become important for loadable module support
* Add support for TFMX music format in Amiga version of Monkey Island 1
Check http://darkstar.tabu.uni-bonn.de/~neo/audio.html for music format
details
* Add support for sound effects format found in Sega CD version of Monkey
Island
* Rename scummvm.cpp to scumm.cpp for consistency. [Fingolfin is working on
this, please don't do anything about this before talking to him].
1) Try to get scummvm.cpp fixed for ViewCVS [in progress!]
2a) If 1) succeeded, file SF.net CVS file rename request
2b) If 2) failed, do brute force file rename (cp && cvs add && cvs rm)
3) Adjust Makefile and project files to use the new name
* Possible implement a new resource manager, which then also could be shared
by ScummEX. [Jamieson has some ideas about this and might work on it|
* Make opening of resource files not depend on target names for the games with
resource files like targetname.xxx. This is needed for bundled mac games.
* Support all Mac games without needing rescumm. These games being: dott,
samnmax, dig & ft. See above point.
Broken Sword 2
==============
* Enforce ScummVM code formatting guidelines. (Mostly done?)
* Encapsulate the code into sensible objects. (Partly done.)
* Enable the CD swapping code. (Partly done.)
* Support cutscenes in some kind of open video format.
* Implement the credits. At the moment we only play the music. The original
seems to use a separate program. Did we ever get the source code for that?
* Compressed speech / music clusters. (Some work done, but not in CVS yet.)
SIMON
=====
* Add support for Protracker music format used in Amiga versions
* Add support for decoding main graphics correctly in Amiga versions
Queen
=====
* Get rid of the alternate 'queencomp' target (this requires some kind of
doesFileExist() method)
Descumm
=======
* Turn it into a library, to be used by a command line frontend (like now),
ScummVM debugger, and ScummEX. Basically, the API could consist of a single
function, which takes a pointer to a memory buffer, its length, the Scumm
version and optionally a game id. Also, it would get a pointer to a print
function (in the case of the CLI tool, print to stdout; for ScummVM, print
to our GUI console; for ScummEX, append to some window/widget)
* Rewrite code to use 2 passes; first pass builds an intermediate graph, the
second pass then tries to detect loops, break/continue statements etc.
Backends
========
* Several of the backend factory functions take config parameters. It should
be possible to get rid of those once the config system rewrite (see above)
has been done. In that case, the backends simply can query the config
manager for these parameters (or any others they might like :-).
* Add API to query backend for a list of available music engines
Useful for Options dialog
* Add API to query backend for a list of available scalers/screenmodes
(that is, a list of user presentable names, and corresponding
PROP_SET_GFX_MODE values). This is useful for the options dialog
* Add PROP_GET_GFX_MODE (mirroring PROP_SET_GFX_MODE)
* Consider replacing the PROP_TOGGLE_* properties with GET/SET ones ->
this allows more control over these properties (like, it allows the GUI to
display checkboxes for these in the options dialog)
SDL backend
===========
* Fix the "auto dirty rect" computing code - in particular, use a proper
checksum algorithm, this should solve many of the problems with some luck
X11 backend
===========
* Verify that it still actually works
* Make it work with multiple bitdepths
* Add frills used by SDL backend like graphic filters usage and CD audio