head	1.5;
access;
symbols
	arelease:1.1.1.1
	avendor:1.1.1;
locks; strict;
comment	@# @;


1.5
date	2004.12.23.11.58.59;	author wonst719;	state Exp;
branches;
next	1.4;

1.4
date	2004.09.05.12.29.04;	author wonst719;	state Exp;
branches;
next	1.3;

1.3
date	2004.08.08.03.24.04;	author wonst719;	state Exp;
branches;
next	1.2;

1.2
date	2004.08.07.11.31.07;	author wonst719;	state Exp;
branches;
next	1.1;

1.1
date	2003.11.22.11.39.07;	author wonst719;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2004.08.07.10.52.03;	author wonst719;	state Exp;
branches;
next	;


desc
@@


1.5
log
@Synced with 0.7.0 Release
@
text
@Here is a list of things we plan to do for 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.

If you want to dig in, this is the stuff where you might make the most
useful contribution. Note that this list is never complete, and may be
partially outdated, so just because you don't see something here doesn't
mean it is not important.

Before you start work on something, you might want to talk to somebody
from the team. This will help us to prevent double work, i.e. several
people working on the same stuff at once without knowing about each
other.

Finally, always make sure to check out our bug tracker and our feature
request tracker for things that need work


#######################################################################
# Docs, Web site
#######################################################################

General
========
* Add more doxygen comments. However, quality is preferable over quantity
* Add port specific user documentation (dreamcast/palm especially). That
  would include things like:
  - 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
* Write a high level overview of how ScummVM and its engines work?

README / Manual
===============
  [Ender is working on a new multi-format manual/readme]
* 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.
* Restructure the contents of our README (our manual...) a bit. A rough and
  incomplete draft of how that might look:
  + Introduction
    - What is ScummVM
    - History
    - Contacting the developers
    - Reporting bugs
  + Supported Platforms
    - Windows, Linux, Mac OS X, WinCE, PalmOS, Dreamcast, ...
      One section for each, indicating basic installation & usage.
      Actually, we may  not need this chapter at all, rather the
      "Installation" and "Running ScummVM" chapters might be subdivided
      as needed...
  + Supported Games
      Here we list *all* supported games, with some information on each
      like known problems, which versions are supported precisely,
      where to get cutscene packs etc.
  + Getting started
    - How to get ScummVM (binary, source)
    - Compiling (with more detail than now); pointer to
      the to-be-written "Developer's Guide to ScummVM"
    - First steps (basic setup, getting a first game to run)
  + Running ScummVM
    - Command line options
    - Hot Keys
    - Savegames
  + Configuration
    - Using the launcher
    - All config file switches in detail
    - Graphics Filters
    - Music and Sound (mostly like now; maybe under the 'Configuration' section)
  + Glossary? (explaining abbreviations etc.)
  + Credits
  + Index? (would be nice, for example 'fullscreen' would link to the hotkey,
     the config file setting, and the command line option)
* Independant of that, create a "Developer's Guide to ScummVM"
  which explains the ScummVM framework, and also the engines, i.e.
  - stuff in common/, like the config manager etc.
  - the backend API, and how to create new backends
  - the sound system
  - how to create a new engine
  - a chapter for each engine, with as many/little details as the resp.
    engine teams deem appropriate...
  - ...


Web site
========
* Add the "Manual" / README to the site
* Redo the screenshots. Mostly this means adding more (and maybe removing or
  replacing a few). What I have in mind are that we follow these guidelines
  (which aren't set in stone nor laws, just guidelines :-)
  - For each unique game, provide 2-3 screenshots
  - Have at least one shot for each major variant of a game (with major variant
    I mean visibly distinct versions, like Zak V1 vs. V2 vs. FM-TOWNS; or
    Monkey Island EGA vs VGA vs CD).
  If I am counting right, that should place us at about 2*(18+2+1+1+1)=46
  screenshots, compared to the current 32 (and more if we start adding HE
  games).


#######################################################################
# Common code, infrastructure
#######################################################################

General
=======
* 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?
* 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".

Build System
============
* Add test(s) for backend usability in the configure script.
* 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.
  Fingolfin implemented most of this; the only thing missing is that configure
  should detect when it is run in a directory outside the source tree, and in
  that case generate a custom Makefile, with content like this:
	srcdir = /path/to/source/dir
	vpath %.cpp $(srcdir)
	vpath %.h $(srcdir)
	include $(srcdir)/Makefile
* Allow automatic re-runs of configure (this would have to 'save' the values of
  env vars like CXXFLAGS and also command line params)
* Add an install target to the Makefile - Copy binary, install manpage, add
  menu items, install README. See also patch #891909 (Gnome/KDE .desktop file)

Audio
=====
* Get the high quality resample code to work
   [Fingolfin has started work on this]
* Consider getting completely rid of the "master volume" (the config key,
  the command line switch, in the GUI, and in the engines), it doesn't
  seem to serve much of a purpose.
* Add "sound types" to the mixer; client code will be able to pass such a type
  whenever registering an audio stream. Then, volume control will be changed
  to be based on the sound type.

Config Manager
==============
* 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.

Files
=====
* 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.

GUI
===
* Remove hard coded 320x200 assumptions, use game screen size
* Add ability to scale GUI (ie. to make the GUI less tiny in COMI)
* Remove code duplication between EditTextWidget and ListWidget (i.e. text 
  editing code; maybe we can factor that out into a common base or aggregate
  class... not yet sure).
* Fix EditTextWidget::drawCaret and ListWidget::drawCaret support for alternate
  fonts (the current code overdraws chars partly, and relies on the fact that
  our default built-in font has a separation pixel column on the *left* side;
  most other bitmap fonts have it on the right, though). To this end, we maybe
  should backup the background before drawing the caret, and restore it when
  erasing the caret.
* Eye candy: add a nice credits scroller to the AboutDialog class, which then
  displays (scrolling) all the ScummVM credits...
* Add a new "options" dialog which is used by all frontends: for this, we'd
  agree on a hotkey used in all engines to invoke that dialog; it would sport
  settings for the volume, graphics, paths, etc.; it would co-exist with the
  engines "native" option dialogs.
  The about dialog would be reachable from here, too, as well as a quit button.
  Justification: This ensures that all settings are really reachable from
  all of the engines, which is not the case currently.

Launcher
========
* Add more options to global options dialog
* Add more options to game target options dialog 

Plugins
=======
* Add a plugin API that allows querying a plugin for the savegames associated
  with a given game; that is, you pass the name of a target from the config
  to the plugin, and it returns a list of savegames. How that list would look
  like exactly is debatable; but it should be possible to extract a user
  friendly name; a slot ID corresponding to the "-x" command line param;
  and possibly a filename.
  Justification: This API would make it possible to directly load savegames
  from the launcher.

#######################################################################
# Engines / frontends
#######################################################################

General
=======
* Fix engines so they clean up after themselves, to allow proper re-entry
  to the launcher. See "FIXME: LAUNCHERHACK" in base/main.cpp

SCUMM
=====
* Make it possible to restart games properly
* Add method of setting initial debug channels from command-line
* 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|

* Figure out how to extract resources from Apple II and Commodore 64 versions
  See also <http://www.mts.net/~kbagnall/commodore/scumm/> for some notes on
  the SCUMM C64 disk format.
* Figure out how to extract resources from Turbografx/PC Engine version of Loom
* Indiana Jones and the Last Crusade EGA: Add inventory support for Macintosh version
* Loom EGA: Add support for music and sound effects in Macintosh version
* Add support for NES version of Maniac Mansion
* Add support for handling Kanji in FM Towns games (foreground is rendered on a
  second plane at 640x480), text uses Shift_JIS encoding
  [implementation now that currently depends on font rom, not needing the rom
   would be preferable]

* 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 tool and support for compress *.la* file resources (ex. sounds) to fit
  on small devices 
* Fix codec44 for nut fonts
* iMUSE Digital:
  - Add code for MP3 and Ogg Vorbis compressed datafiles
* Humongous Entertainment Games
  - Add proper handling of sound looping in Humongous games
  - Add sound pitch support for piano keys in piano mini game of fbear (DOS)
  - Add rename/delete file support, to make file opcodes function correctly
  - Fix nukeArrays, it is nuking wrong arrays in stopObjectCode() sometimes
* Humongous entertainment >= v7 titles:
  - Add support for palette slots (_numPalettes * 1024) in HE99+ games.(For ff5demo/freddicove)
  - Add mask support to akos codec32, charset shouldn't be drawn under moving actors
  - Add support for song sync. in HE80+ games. (Used in ff2-demo/freddi2/pajama)
  - Add support for SBNG sound resources for songs ^
  - Add support for sprites (Used by all HE90+ games, especially Spy Fox games)
  - Add support for wizImage compression types 2/3 (For freddicove)
  - Add support for additional drawWizImage flags (cyx)
  - Add support for additional aux animation resources (cyx)
    (^ Need to find where they are used) 
  - Add shadows support for akos codecs in HE90+ games, uses XMAP resources.
  - Add addtional arrayOps cases (For smaller/lost).
  - Add support for array sorting (Need to find where it is used).
  - Fix actor glitches in pajama2
  - Fix array issues in Buzzy games (Kirben)
  - Fix inventory background/items disappearing in puttzoo/zoodemo/putttime/timedemo
  - Add support for various new opcodes

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. (Partly done.)
* Fix the credits so they look more like the original. (Did we ever get the
  source code for that?)

SIMON
=====
* Add support for dictionary files in Amiga and Macintosh versons of
  Simon the Sorcerer 2
* Add support for Protracker music format used in Amiga versions
* Add support for drawing main graphics correctly in Amiga versions

SAGA
====
* Remove use of yslib
* Remove any traces of the additional level of abstraction reinherit used
* Remove homerolled high level data structures like stacks that should
  be provided by ScummVM if they aren't already.
* OO'ify (blah_mod.h contains public stuff, blah.h private stuff) [almost done]
* Implement unimplemented opcodes
* Remove use of floating point, especially doubles.
* Change SData so that its buffers point to the appropriate data.
  (eriktorbjorn - mostly done; the script "static" buffer is still wrong)
* Rewrite path finder
* Eliminate script semaphores and use flags instead (sev)
* Add sound/voices compression. Should _considerably_ save space.
* Add support for Mac versions. All data is in BE mode and structures are aligned.
* Fix the usage of Rect so that it's more consistent with the rest of ScummVM,
  e.g. a rectangle covering the entire ITE screen should have right=320 and
  bottom=200. (eriktorbjorn, partly - mostly? - done)
* Support various demo versions
* Support IHNM
* Add the Wyrmkeep folks to the credits section of our README so we can thank
  them properly for... Well, whoever negotiated the deal with them will have
  to write up something approrpriate here. I don't know enough about it myself.

#######################################################################
# Backends
#######################################################################

General
=======
* 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 :-).
* Change backends to directly access the config manager
* Add API to query backend for a list of available music engines
  Useful for Options dialog
* Sony PS2 Port
* Update PalmOS port to run on PalmOS based Zodiac handheld 
  [Chrilith is working on this via a Zodiac simulator]
* EPOC32/Symbian port. Might be able to start based on existing P800 port,
  however that code seems to be old and would need extensive work to be
  usable in post-0.6.0 ScummVM. Note: NGage uses Symbian OS, too...
* MS DOS port using Allegro <http://www.talula.demon.co.uk/allegro/> and
  DJGPP <http://www.delorie.com/djgpp/> ?
* Intent <http://withintent.biz/> port (already done by David Given, merge?)
* Digita OS port? (play games on a select few digital cameras...)
  <http://digita.mame.net/reviews.htm>

X11 backend
===========
* Update it to support the latest OSystem changes
* Make it work with multiple bitdepths
* Add frills used by SDL backend like graphic filters usage and CD audio

#######################################################################
# Tools
#######################################################################

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.
* Proper implementation of o6_startObjectQuick decompilation (see comment in
  descumm6.c). May requre rewrite of core program logic
@


1.4
log
@ CVS .
@
text
@d62 5
d68 3
a70 4
    - Copy Protection
    - Simon
    - BS notes
    - Using mac data files
d73 2
a74 1
    - Compiling (with more detail than now)
d89 10
a132 2
* Default to saving games in $HOME if in savepath is not defined maybe something
  like ~/Library/ScummVM/ for OS X and ~/.scummvm/ for everything else
d157 6
a162 4
* 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.
a187 6
Game Detector
=============
* Improve the detector for games with all datafiles in subdirs (i.e.
  Broken Sword 1 & 2). To allow this, we could pass also directories to the
  detect functions; those then could optionally scan sub directories.

d190 1
a190 1
* Remove hardcoded 320x200 assumptions, use game screen size
d197 1
a197 1
  our default built-in font has a seperation pixel column on the *left* side;
d201 9
d216 10
d244 2
a257 2
* V7-8 games: Implement smooth horizontal scrolling (instead of scrolling in
  increments of 8 pixels). See bug #629417.
a262 2
* SMUSH:
  - Add code for MP3 encoded sound tracks
d267 1
a267 4
  - Fix glitch causing bed covers not to be drawn at end of fbear
  - Fix o6_setboxset, only used when leaving basement in fbear
  - Fix nukeArrays, it is nuking wrong array in some games (fbear)
  - Document and fix AKOS differences in Humongous Entertainment games
d269 15
a283 5
  - Add support for new animation code used by cut scenes.
  - Add support for akos_drawLimb C021 (Used in pajama/pjs-demo/timedemo)
  - Add support for akos codec 32 (Used in water/socks)
  - Add support for actor clipping overrides used in costume code
  - Add support for debug strings (Replaces %d & %s with ints/strings from stack list)
a284 1
  - Add support for Scummsys.9x and C++ engine MAXS blocks
a293 1
* Compressed speech / music clusters. (Some work done, but not in CVS yet.)
a304 1
* Transition console to use ScummVM one
a305 1
* Change printf calls to warning/debug calls
d308 1
a308 2
* OO'ify (blah_mod.h contains public stuff, blah.h private stuff)
* Rewrite actor code, so it works with isometric rooms
d310 10
a319 3
* Remove use of floating point, especially doubles. Particularly
  rewrite path finder
* IHNM intro is very uncomplete
d321 4
a356 1

@


1.3
log
@Unix style line feed
@
text
@a143 3
* 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)
a171 5
* Get rid of the hardcoded (sub)directory list in the File class. At the very
  least, that list should be set by the engine (since not all engines need all
  of the subdirs). Better would be to introduce a somewhat higher level API,
  a replacement for File::open() which (optionally) takes a list of subdirs.
  E.g. for Scumm, only certain files are to be expected in the VIDEO subdir).
d176 2
a177 9
  Broken Sword 1 & 2). This could work by letting the detector proc recurse
  into sub directories...

Graphics
========
* The Scale2x folks have an optimized version of the Scale2x (= AdvMame2x)
  filter, which we might want to adapt - if there is a benefit, that is. Asked
  the other way around: Are there any systems on which AdvMame2x is too slow?
  Same goes for AdvMame3x.
a218 2
* Add support for sound effects format found in Sega CD version of Monkey
  Island
a224 1
* Fix C64 costume code
a229 9
* COMI (maybe V7 games, too?): "Fix" CHARSET_1 behaviour when the room scrolls.
  In particular, when text is drawn via CHARSET_1 and then scrolling takes
  place, the text scrolls, too - but it really should stay fixed. There are
  several ways to do this that I can think of. One would be to use an overlay
  screen (i.e. use virtscreen 3, which isn't used at all currently) to draw
  the text; then "compose" that screen over the main screen.
  Or constantly (well, at least whenever the camera moves) redraw the text.
  That would require buffering the text; maybe the blast text code could be
  reused for this...
a236 2
* PC version of FT demo
  - Add insane support
d238 1
a238 1
  - Add proper handling of sound in Humongous games
d241 3
a243 7
  - Fix akos asserts in puttmoon, caused by butterfly at start, robot near
    garage and rock animations near rocket.
  - Fix freezes when letting butterfly into fireworks factory and playing alien
    tag in puttmoon
  - Fix creature behind garage door disappearing in moondemo
  - Fix remaining masking issues, when cars come out of garages in puttputt and
    when Putt-Putt gets off the chair in Cosmic Dust Diner of puttmoon
a244 1
  - Support various newer Humongous Entertainment games
d246 6
a251 1
  - Add variables for _heversion > 72
a252 8
  
Broken Sword 1 & 2
==================
* Currently BS1 & BS2 duplicate some code for MPEG2 playback. It would seem
  logical to share that code (for all the usual good reasons).
  We might even want to add a "video" dir (analog to "sound") for the shared
  code, if it can be rewritten so that it's reusable.
  DO NOT ADD SUCH A DIR without first consulting with Ender and Fingolfin !
a276 3
* Merge reinherit.h with saga.h
* Investigate why the fair scene in the ITE intro isn't working (used to
  work in reinherit)
a283 1
* ITE intro misses game title
@


1.2
log
@0.4.0alpha Ʈ.
@
text
@d1 375
a375 375
Here is a list of things we plan to do for 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.

If you want to dig in, this is the stuff where you might make the most
useful contribution. Note that this list is never complete, and may be
partially outdated, so just because you don't see something here doesn't
mean it is not important.

Before you start work on something, you might want to talk to somebody
from the team. This will help us to prevent double work, i.e. several
people working on the same stuff at once without knowing about each
other.

Finally, always make sure to check out our bug tracker and our feature
request tracker for things that need work


#######################################################################
# Docs, Web site
#######################################################################

General
========
* Add more doxygen comments. However, quality is preferable over quantity
* Add port specific user documentation (dreamcast/palm especially). That
  would include things like:
  - 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
* Write a high level overview of how ScummVM and its engines work?

README / Manual
===============
  [Ender is working on a new multi-format manual/readme]
* 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.
* Restructure the contents of our README (our manual...) a bit. A rough and
  incomplete draft of how that might look:
  + Introduction
    - What is ScummVM
    - History
    - Contacting the developers
    - Reporting bugs
  + Supported Platforms
  + Supported Games
    - Copy Protection
    - Simon
    - BS notes
    - Using mac data files
  + Getting started
    - How to get ScummVM (binary, source)
    - Compiling (with more detail than now)
    - First steps (basic setup, getting a first game to run)
  + Running ScummVM
    - Command line options
    - Hot Keys
    - Savegames
  + Configuration
    - Using the launcher
    - All config file switches in detail
    - Graphics Filters
    - Music and Sound (mostly like now; maybe under the 'Configuration' section)
  + Glossary? (explaining abbreviations etc.)
  + Credits
  + Index? (would be nice, for example 'fullscreen' would link to the hotkey,
     the config file setting, and the command line option)

Web site
========
* Add the "Manual" / README to the site
* Redo the screenshots. Mostly this means adding more (and maybe removing or
  replacing a few). What I have in mind are that we follow these guidelines
  (which aren't set in stone nor laws, just guidelines :-)
  - For each unique game, provide 2-3 screenshots
  - Have at least one shot for each major variant of a game (with major variant
    I mean visibly distinct versions, like Zak V1 vs. V2 vs. FM-TOWNS; or
    Monkey Island EGA vs VGA vs CD).
  If I am counting right, that should place us at about 2*(18+2+1+1+1)=46
  screenshots, compared to the current 32 (and more if we start adding HE
  games).


#######################################################################
# Common code, infrastructure
#######################################################################

General
=======
* 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?
* 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".
* Default to saving games in $HOME if in savepath is not defined maybe something
  like ~/Library/ScummVM/ for OS X and ~/.scummvm/ for everything else

Build System
============
* Add test(s) for backend usability in the configure script.
* 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.
  Fingolfin implemented most of this; the only thing missing is that configure
  should detect when it is run in a directory outside the source tree, and in
  that case generate a custom Makefile, with content like this:
	srcdir = /path/to/source/dir
	vpath %.cpp $(srcdir)
	vpath %.h $(srcdir)
	include $(srcdir)/Makefile
* Allow automatic re-runs of configure (this would have to 'save' the values of
  env vars like CXXFLAGS and also command line params)
* Add an install target to the Makefile - Copy binary, install manpage, add
  menu items, install README. See also patch #891909 (Gnome/KDE .desktop file)

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 Manager
==============
* 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.

Files
=====
* 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.
* Get rid of the hardcoded (sub)directory list in the File class. At the very
  least, that list should be set by the engine (since not all engines need all
  of the subdirs). Better would be to introduce a somewhat higher level API,
  a replacement for File::open() which (optionally) takes a list of subdirs.
  E.g. for Scumm, only certain files are to be expected in the VIDEO subdir).

Game Detector
=============
* 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...

Graphics
========
* The Scale2x folks have an optimized version of the Scale2x (= AdvMame2x)
  filter, which we might want to adapt - if there is a benefit, that is. Asked
  the other way around: Are there any systems on which AdvMame2x is too slow?
  Same goes for AdvMame3x.

GUI
===
* Remove hardcoded 320x200 assumptions, use game screen size
* Add ability to scale GUI (ie. to make the GUI less tiny in COMI)
* Remove code duplication between EditTextWidget and ListWidget (i.e. text 
  editing code; maybe we can factor that out into a common base or aggregate
  class... not yet sure).
* Fix EditTextWidget::drawCaret and ListWidget::drawCaret support for alternate
  fonts (the current code overdraws chars partly, and relies on the fact that
  our default built-in font has a seperation pixel column on the *left* side;
  most other bitmap fonts have it on the right, though). To this end, we maybe
  should backup the background before drawing the caret, and restore it when
  erasing the caret.

Launcher
========
* Add more options to global options dialog
* Add more options to game target options dialog 


#######################################################################
# Engines / frontends
#######################################################################

General
=======
* Fix engines so they clean up after themselves, to allow proper re-entry
  to the launcher. See "FIXME: LAUNCHERHACK" in base/main.cpp

SCUMM
=====
* Make it possible to restart games properly
* Add method of setting initial debug channels from command-line
* 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|

* Figure out how to extract resources from Apple II and Commodore 64 versions
* Figure out how to extract resources from Turbografx/PC Engine version of Loom
* Indiana Jones and the Last Crusade EGA: Add inventory support for Macintosh version
* Loom EGA: Add support for music and sound effects in Macintosh version
* Add support for sound effects format found in Sega CD version of Monkey
  Island
* Add support for NES version of Maniac Mansion
* Add support for handling Kanji in FM Towns games (foreground is rendered on a
  second plane at 640x480), text uses Shift_JIS encoding
  [implementation now that currently depends on font rom, not needing the rom
   would be preferable]

* Fix C64 costume code
* 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
* V7-8 games: Implement smooth horizontal scrolling (instead of scrolling in
  increments of 8 pixels). See bug #629417.
* COMI (maybe V7 games, too?): "Fix" CHARSET_1 behaviour when the room scrolls.
  In particular, when text is drawn via CHARSET_1 and then scrolling takes
  place, the text scrolls, too - but it really should stay fixed. There are
  several ways to do this that I can think of. One would be to use an overlay
  screen (i.e. use virtscreen 3, which isn't used at all currently) to draw
  the text; then "compose" that screen over the main screen.
  Or constantly (well, at least whenever the camera moves) redraw the text.
  That would require buffering the text; maybe the blast text code could be
  reused for this...
* Add tool and support for compress *.la* file resources (ex. sounds) to fit
  on small devices 
* Fix codec44 for nut fonts
* iMUSE Digital:
  - Add code for MP3 and Ogg Vorbis compressed datafiles
* SMUSH:
  - Add code for MP3 encoded sound tracks
* PC version of FT demo
  - Add insane support
* Humongous Entertainment Games
  - Add proper handling of sound in Humongous games
  - Add sound pitch support for piano keys in piano mini game of fbear (DOS)
  - Add rename/delete file support, to make file opcodes function correctly
  - Fix akos asserts in puttmoon, caused by butterfly at start, robot near
    garage and rock animations near rocket.
  - Fix freezes when letting butterfly into fireworks factory and playing alien
    tag in puttmoon
  - Fix creature behind garage door disappearing in moondemo
  - Fix remaining masking issues, when cars come out of garages in puttputt and
    when Putt-Putt gets off the chair in Cosmic Dust Diner of puttmoon
  - Document and fix AKOS differences in Humongous Entertainment games
  - Support various newer Humongous Entertainment games
* Humongous entertainment >= v7 titles:
  - Add variables for _heversion > 72
  - Add support for Scummsys.9x and C++ engine MAXS blocks
  
Broken Sword 1 & 2
==================
* Currently BS1 & BS2 duplicate some code for MPEG2 playback. It would seem
  logical to share that code (for all the usual good reasons).
  We might even want to add a "video" dir (analog to "sound") for the shared
  code, if it can be rewritten so that it's reusable.
  DO NOT ADD SUCH A DIR without first consulting with Ender and Fingolfin !

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. (Partly done.)
* Fix the credits so they look more like the original. (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 dictionary files in Amiga and Macintosh versons of
  Simon the Sorcerer 2
* Add support for Protracker music format used in Amiga versions
* Add support for drawing main graphics correctly in Amiga versions

SAGA
====
* Remove use of yslib
* Transition console to use ScummVM one
* Remove any traces of the additional level of abstraction reinherit used
* Change printf calls to warning/debug calls
* Merge reinherit.h with saga.h
* Investigate why the fair scene in the ITE intro isn't working (used to
  work in reinherit)
* Remove homerolled high level data structures like stacks that should
  be provided by ScummVM if they aren't already.
* OO'ify (blah_mod.h contains public stuff, blah.h private stuff)
* Rewrite actor code, so it works with isometric rooms
* Implement unimplemented opcodes
* Remove use of floating point, especially doubles. Particularly
  rewrite path finder
* ITE intro misses game title
* IHNM intro is very uncomplete
* Support various demo versions

#######################################################################
# Backends
#######################################################################

General
=======
* 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 :-).
* Change backends to directly access the config manager
* Add API to query backend for a list of available music engines
  Useful for Options dialog
* Sony PS2 Port
* Update PalmOS port to run on PalmOS based Zodiac handheld 
  [Chrilith is working on this via a Zodiac simulator]
* EPOC32/Symbian port. Might be able to start based on existing P800 port,
  however that code seems to be old and would need extensive work to be
  usable in post-0.6.0 ScummVM. Note: NGage uses Symbian OS, too...
* MS DOS port using Allegro <http://www.talula.demon.co.uk/allegro/> and
  DJGPP <http://www.delorie.com/djgpp/> ?
* Intent <http://withintent.biz/> port (already done by David Given, merge?)
* Digita OS port? (play games on a select few digital cameras...)
  <http://digita.mame.net/reviews.htm>

X11 backend
===========
* Update it to support the latest OSystem changes
* Make it work with multiple bitdepths
* Add frills used by SDL backend like graphic filters usage and CD audio


#######################################################################
# Tools
#######################################################################

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.
* Proper implementation of o6_startObjectQuick decompilation (see comment in
  descumm6.c). May requre rewrite of core program logic
@


1.1
log
@0.5.5cvs  ҽ Ʈ.
@
text
@d1 375
a375 181
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)

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)

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?
* Is it possible to work around the dreaded "pyramid bug"? See
  http://www.revgames.com/_display.php?id=9

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
* OpenGL code: either fix it (see open bug tracker items and various hacks in
  the code), or remove it. Does anybody really need this???

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
@


1.1.1.1
log
@0.4.0alpha Ʈ.
@
text
@d1 181
a181 375
Here is a list of things we plan to do for 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.

If you want to dig in, this is the stuff where you might make the most
useful contribution. Note that this list is never complete, and may be
partially outdated, so just because you don't see something here doesn't
mean it is not important.

Before you start work on something, you might want to talk to somebody
from the team. This will help us to prevent double work, i.e. several
people working on the same stuff at once without knowing about each
other.

Finally, always make sure to check out our bug tracker and our feature
request tracker for things that need work


#######################################################################
# Docs, Web site
#######################################################################

General
========
* Add more doxygen comments. However, quality is preferable over quantity
* Add port specific user documentation (dreamcast/palm especially). That
  would include things like:
  - 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
* Write a high level overview of how ScummVM and its engines work?

README / Manual
===============
  [Ender is working on a new multi-format manual/readme]
* 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.
* Restructure the contents of our README (our manual...) a bit. A rough and
  incomplete draft of how that might look:
  + Introduction
    - What is ScummVM
    - History
    - Contacting the developers
    - Reporting bugs
  + Supported Platforms
  + Supported Games
    - Copy Protection
    - Simon
    - BS notes
    - Using mac data files
  + Getting started
    - How to get ScummVM (binary, source)
    - Compiling (with more detail than now)
    - First steps (basic setup, getting a first game to run)
  + Running ScummVM
    - Command line options
    - Hot Keys
    - Savegames
  + Configuration
    - Using the launcher
    - All config file switches in detail
    - Graphics Filters
    - Music and Sound (mostly like now; maybe under the 'Configuration' section)
  + Glossary? (explaining abbreviations etc.)
  + Credits
  + Index? (would be nice, for example 'fullscreen' would link to the hotkey,
     the config file setting, and the command line option)

Web site
========
* Add the "Manual" / README to the site
* Redo the screenshots. Mostly this means adding more (and maybe removing or
  replacing a few). What I have in mind are that we follow these guidelines
  (which aren't set in stone nor laws, just guidelines :-)
  - For each unique game, provide 2-3 screenshots
  - Have at least one shot for each major variant of a game (with major variant
    I mean visibly distinct versions, like Zak V1 vs. V2 vs. FM-TOWNS; or
    Monkey Island EGA vs VGA vs CD).
  If I am counting right, that should place us at about 2*(18+2+1+1+1)=46
  screenshots, compared to the current 32 (and more if we start adding HE
  games).


#######################################################################
# Common code, infrastructure
#######################################################################

General
=======
* 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?
* 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".
* Default to saving games in $HOME if in savepath is not defined maybe something
  like ~/Library/ScummVM/ for OS X and ~/.scummvm/ for everything else

Build System
============
* Add test(s) for backend usability in the configure script.
* 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.
  Fingolfin implemented most of this; the only thing missing is that configure
  should detect when it is run in a directory outside the source tree, and in
  that case generate a custom Makefile, with content like this:
	srcdir = /path/to/source/dir
	vpath %.cpp $(srcdir)
	vpath %.h $(srcdir)
	include $(srcdir)/Makefile
* Allow automatic re-runs of configure (this would have to 'save' the values of
  env vars like CXXFLAGS and also command line params)
* Add an install target to the Makefile - Copy binary, install manpage, add
  menu items, install README. See also patch #891909 (Gnome/KDE .desktop file)

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 Manager
==============
* 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.

Files
=====
* 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.
* Get rid of the hardcoded (sub)directory list in the File class. At the very
  least, that list should be set by the engine (since not all engines need all
  of the subdirs). Better would be to introduce a somewhat higher level API,
  a replacement for File::open() which (optionally) takes a list of subdirs.
  E.g. for Scumm, only certain files are to be expected in the VIDEO subdir).

Game Detector
=============
* 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...

Graphics
========
* The Scale2x folks have an optimized version of the Scale2x (= AdvMame2x)
  filter, which we might want to adapt - if there is a benefit, that is. Asked
  the other way around: Are there any systems on which AdvMame2x is too slow?
  Same goes for AdvMame3x.

GUI
===
* Remove hardcoded 320x200 assumptions, use game screen size
* Add ability to scale GUI (ie. to make the GUI less tiny in COMI)
* Remove code duplication between EditTextWidget and ListWidget (i.e. text 
  editing code; maybe we can factor that out into a common base or aggregate
  class... not yet sure).
* Fix EditTextWidget::drawCaret and ListWidget::drawCaret support for alternate
  fonts (the current code overdraws chars partly, and relies on the fact that
  our default built-in font has a seperation pixel column on the *left* side;
  most other bitmap fonts have it on the right, though). To this end, we maybe
  should backup the background before drawing the caret, and restore it when
  erasing the caret.

Launcher
========
* Add more options to global options dialog
* Add more options to game target options dialog 


#######################################################################
# Engines / frontends
#######################################################################

General
=======
* Fix engines so they clean up after themselves, to allow proper re-entry
  to the launcher. See "FIXME: LAUNCHERHACK" in base/main.cpp

SCUMM
=====
* Make it possible to restart games properly
* Add method of setting initial debug channels from command-line
* 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|

* Figure out how to extract resources from Apple II and Commodore 64 versions
* Figure out how to extract resources from Turbografx/PC Engine version of Loom
* Indiana Jones and the Last Crusade EGA: Add inventory support for Macintosh version
* Loom EGA: Add support for music and sound effects in Macintosh version
* Add support for sound effects format found in Sega CD version of Monkey
  Island
* Add support for NES version of Maniac Mansion
* Add support for handling Kanji in FM Towns games (foreground is rendered on a
  second plane at 640x480), text uses Shift_JIS encoding
  [implementation now that currently depends on font rom, not needing the rom
   would be preferable]

* Fix C64 costume code
* 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
* V7-8 games: Implement smooth horizontal scrolling (instead of scrolling in
  increments of 8 pixels). See bug #629417.
* COMI (maybe V7 games, too?): "Fix" CHARSET_1 behaviour when the room scrolls.
  In particular, when text is drawn via CHARSET_1 and then scrolling takes
  place, the text scrolls, too - but it really should stay fixed. There are
  several ways to do this that I can think of. One would be to use an overlay
  screen (i.e. use virtscreen 3, which isn't used at all currently) to draw
  the text; then "compose" that screen over the main screen.
  Or constantly (well, at least whenever the camera moves) redraw the text.
  That would require buffering the text; maybe the blast text code could be
  reused for this...
* Add tool and support for compress *.la* file resources (ex. sounds) to fit
  on small devices 
* Fix codec44 for nut fonts
* iMUSE Digital:
  - Add code for MP3 and Ogg Vorbis compressed datafiles
* SMUSH:
  - Add code for MP3 encoded sound tracks
* PC version of FT demo
  - Add insane support
* Humongous Entertainment Games
  - Add proper handling of sound in Humongous games
  - Add sound pitch support for piano keys in piano mini game of fbear (DOS)
  - Add rename/delete file support, to make file opcodes function correctly
  - Fix akos asserts in puttmoon, caused by butterfly at start, robot near
    garage and rock animations near rocket.
  - Fix freezes when letting butterfly into fireworks factory and playing alien
    tag in puttmoon
  - Fix creature behind garage door disappearing in moondemo
  - Fix remaining masking issues, when cars come out of garages in puttputt and
    when Putt-Putt gets off the chair in Cosmic Dust Diner of puttmoon
  - Document and fix AKOS differences in Humongous Entertainment games
  - Support various newer Humongous Entertainment games
* Humongous entertainment >= v7 titles:
  - Add variables for _heversion > 72
  - Add support for Scummsys.9x and C++ engine MAXS blocks
  
Broken Sword 1 & 2
==================
* Currently BS1 & BS2 duplicate some code for MPEG2 playback. It would seem
  logical to share that code (for all the usual good reasons).
  We might even want to add a "video" dir (analog to "sound") for the shared
  code, if it can be rewritten so that it's reusable.
  DO NOT ADD SUCH A DIR without first consulting with Ender and Fingolfin !

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. (Partly done.)
* Fix the credits so they look more like the original. (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 dictionary files in Amiga and Macintosh versons of
  Simon the Sorcerer 2
* Add support for Protracker music format used in Amiga versions
* Add support for drawing main graphics correctly in Amiga versions

SAGA
====
* Remove use of yslib
* Transition console to use ScummVM one
* Remove any traces of the additional level of abstraction reinherit used
* Change printf calls to warning/debug calls
* Merge reinherit.h with saga.h
* Investigate why the fair scene in the ITE intro isn't working (used to
  work in reinherit)
* Remove homerolled high level data structures like stacks that should
  be provided by ScummVM if they aren't already.
* OO'ify (blah_mod.h contains public stuff, blah.h private stuff)
* Rewrite actor code, so it works with isometric rooms
* Implement unimplemented opcodes
* Remove use of floating point, especially doubles. Particularly
  rewrite path finder
* ITE intro misses game title
* IHNM intro is very uncomplete
* Support various demo versions

#######################################################################
# Backends
#######################################################################

General
=======
* 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 :-).
* Change backends to directly access the config manager
* Add API to query backend for a list of available music engines
  Useful for Options dialog
* Sony PS2 Port
* Update PalmOS port to run on PalmOS based Zodiac handheld 
  [Chrilith is working on this via a Zodiac simulator]
* EPOC32/Symbian port. Might be able to start based on existing P800 port,
  however that code seems to be old and would need extensive work to be
  usable in post-0.6.0 ScummVM. Note: NGage uses Symbian OS, too...
* MS DOS port using Allegro <http://www.talula.demon.co.uk/allegro/> and
  DJGPP <http://www.delorie.com/djgpp/> ?
* Intent <http://withintent.biz/> port (already done by David Given, merge?)
* Digita OS port? (play games on a select few digital cameras...)
  <http://digita.mame.net/reviews.htm>

X11 backend
===========
* Update it to support the latest OSystem changes
* Make it work with multiple bitdepths
* Add frills used by SDL backend like graphic filters usage and CD audio


#######################################################################
# Tools
#######################################################################

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.
* Proper implementation of o6_startObjectQuick decompilation (see comment in
  descumm6.c). May requre rewrite of core program logic
@

