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 * 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) * gameDetector.cpp is quite messy. Also, it makes providing native GUI front ends for ScummVM unnecessarily cumbersome (think of systems which don't even have a command line, like classic MacOS). It would be nice to better separate the command line parsing from any GUI and also from the storage for the user settings (this ties into my proposed config system changes; ideally, we should be able to drop almost all of the member variables in the game detector, in favor of getting all these directly from the config system). * fix the Map<> template, make it more robust; maybe use a red-black tree? GUI === * LAUNCHER: fix global options dialog to be properly persistent * LAUNCHER: add more options to global options dialog * LAUNCHER: add more options to game options dialog 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 ====== * The config system could stand an overhaul * Preserve comments in config file somehow * Add two virtual domains (for command line settings and user overrides); while we currently do something like this already, our implementation is a big ugly hack (no offense meant) and has some cumbersome problems. For example, currently to query a config value, one would have to search up to four domains manually (user override, command line, game specific, global application domain, in that order). Ideally all this should be hidden inside the config system. If you are interested in this, I can elaborate * Add a way to distinguish if a given key is present at all. That is, it would be nice if one could distinguish between an explicit "fullscreen=false" and the absence of any fullscreen config. 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) * 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 * Merge iMUSE and iMUSE Digital * Add support for FM Euphony sounds used in FM Towns games * Implement the needed INSANE bits for Full Throttle action sequences * iMUSE Digital enhancements/fixes for Full Throttle and COMI * 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 Mac0 music format used in Monkey Island Mac See https://sourceforge.net/tracker/index.php?func=detail&aid=781797&group_id=37116&atid=418823 Broken Sword 2 ============== * Replace all uses of std C file I/O (fopen, fread, fwrite, fclose) by the File class (excluding that in SWORD2_DEBUG). This is probably mostly done. I only find a few such calls in resMan::CacheNewCluster(), and that one needs to be rewritten anyway. * Enforce ScummVM code formatting guidelines. * Encapsulate the code into sensible objects. * Enable the CD swapping code. * Support cutscenes in some kind of open video format. SIMON ===== * Add support for Amiga decompressor and music Descumm ======= * Merge descumm & descumm6 * 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. SDL backend =========== * Maybe change the shortcuts? One idea (add ctrl-alt in all cases): 1-3: select scale factor 2-4: normal, advmame, hq filters (all available as 2x and 3x) 5-9,0: the other scalers Justification: We have so many scalers now, we are running out of keys for them - and this way, we need a few less. Of course, the question remains what happens if you press ctrl-alt-3 while 2xSai is scaler, what happens? So maybe (again add ctrl-alt): '+' / '-': increase/decrease scale factor, cycling over the possible range. So for a 2x-only scaler, it does nothing; for a scaler supporting all scales from 1x to 4x, it works as usual (and pressing '+' in 4x mode goes to 1x) 1-9: switch between the "base" scalers: normal (point) scaler, advmame, hq (high quality), 2xsai, super2xsai, supereagle, tv2x, dotmatrix, ... * 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???