mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-28 12:46:56 +00:00
ac493b31db
svn-id: r16981
416 lines
20 KiB
Plaintext
416 lines
20 KiB
Plaintext
Here is a list of things we plan to do in the future. Note that we
|
|
don't promise to do any of these, nor when we will do them. It's just a
|
|
list of what we hope to be able to do one day.
|
|
|
|
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.
|
|
Since so far we haven't seen anything of that, Fingolfin has started a
|
|
DocBook based manual (and FAQ, and Developer's Guide). You can find it in
|
|
the CVS module "docs".
|
|
Finally, there is a LaTeX based version of the README in the "doc" subdir
|
|
of the "scummvm" CVS module, but it tends to slip out of sync with the
|
|
plain text README, and it's not really a manual, it's just the README
|
|
in a different file format.
|
|
* Everybody is welcome to start helping out with the public manual project
|
|
in the "docs" CVS module. You can either reuse content from the README,
|
|
or replace it with new, better written stuff. Contact Fingolfin or our
|
|
mailing list, scummvm-devel, if you are interested in helping out.
|
|
* 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.)
|
|
* It would be greate to have 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?
|
|
* Instead of the above, consider switching everything over to the STL.
|
|
Maybe a little bit more overhead, but we get instant access to a full-featured
|
|
and well-tested code base, with everything we need.
|
|
* 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".
|
|
* Try to reduce the memory footprint of the MPEG player. Right now it allocates
|
|
an 8 MB lookup table for YUV->RGB conversion. Perhaps we could borrow some
|
|
code from SDL's software implementation of YUV overlays. (It might even be
|
|
possible to expose some of SDL's YUV overlay API as an optional part of the
|
|
backend, but I don't know enough about it to get it to work. We'd still need
|
|
our own implementation as a fallback, though.)
|
|
* Make the autosave interval configurable (via GUI, command line, config file).
|
|
* Maybe add ways to modify the game configs via the command line. E.g. allow
|
|
./scummvm --add new_target --path=/foo monkey2
|
|
./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
|
|
Of course, if we do it, it has to be done so that the launcher is still
|
|
reachable :-)
|
|
|
|
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 changing the mixer volume to use range 0-255, for sake of
|
|
consistency (but at a slight loss of efficiency). Note that this requires
|
|
changes in at least rate.cpp and mixer.cpp.
|
|
|
|
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
|
|
* EditableWidget: Make it possible to specify a min/max length for the text
|
|
* EditableWidget: Let setEditString filter the string it gets
|
|
* EditableWidget: Right now, custom filtering requires the user to subclass;
|
|
it would be nice if there was simply a "validator hook" or so.
|
|
Maybe take some inspiration from Java's Swing in this matter.
|
|
* Improve 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.
|
|
* 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.
|
|
Problem: It's not fully clear to me how to "best" deal with global vs. local
|
|
settings here...
|
|
* Maybe add the ScummVM logo (+typeface?) to the about dialog
|
|
|
|
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.
|
|
* This savegame API could return additional (optional) information for each
|
|
savegame entry: name; creation date; thumbnail screenshot
|
|
* When building with the fake static plugins: instead of hardcoding the list
|
|
of plugins, plugins should automatically be "hooked in". This can be achieved
|
|
by modifying REGISTER_PLUGIN to insert special code into the plugins.
|
|
* Likewise, when building with real dynamic plugins: instead of hardcoding
|
|
plugin names and pathes, we should scan in specific locations for all
|
|
available plugins, etc.. For example, try to load all "plugins/lib*.so"
|
|
files. To this end consider special file names for the plugins
|
|
* On OSX: Support a plugin build in the bundle target: *.plugin files should
|
|
be put into ScummVM.app/Contents/PlugIns/; this also means that the loader
|
|
needs to search in the plugin dir of the active bundle. So use the
|
|
CF bundle API, inside a #ifdef MACOSX block.
|
|
|
|
|
|
#######################################################################
|
|
# 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
|
|
* Compare codec 44 algorithm (For nut fonts) against COMI disassembly. The
|
|
current code isn't based on disassembly and doesn't always calculate decompressed
|
|
data size correctly.
|
|
* 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 (Used in ff2-demo/freddi2/pajama)
|
|
- Add support for processWizImage mode 6 (For lost/smaller)
|
|
- Add support for processWizImage mode 9 (For freddicove/bb2demo/footdemo)
|
|
- Add support for additional drawWizImage flags (cyx)
|
|
- Add shadows support for akos codecs in HE90+ games, uses XMAP resources.
|
|
- Add arrayOps case 127 (For chase/lost/smaller/bb2demo/footdemo).
|
|
- Add support for array sorting (Used in lost/smaller).
|
|
- Fix actor glitches in pajama2
|
|
- Fix loadImgSpot asserts, due to spritesProcessWiz loading WizImages with sprite res_id of 0
|
|
- Fix cursor transparency in puzzle of pajama2
|
|
- Fix sprites graphical glitches
|
|
- Fix inventory background/items disappearing in puttzoo/zoodemo/putttime/timedemo
|
|
- Add support for floodState (For puzzle in pajama2)
|
|
- Add support for o80_unknownE0 (For binoculars in pajama2 and black board in freddi2)
|
|
- 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.)
|
|
* Fix the credits so they look more like the original. (Did we ever get the
|
|
source code for that?)
|
|
* Eventually I would like to get rid of the "driver" sub-directory. We already
|
|
have a cross-platform infrastructure for ScummVM, so this separation is not
|
|
necessary.
|
|
|
|
SIMON
|
|
=====
|
|
* Add support for auto decrunching the gameamiga file of demo version of Simon
|
|
the Sorcerer 1 (Amiga) via decrunch_file_amiga()
|
|
* 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
|
|
====
|
|
- legacy items -
|
|
* 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]
|
|
* rand() -> rnd.getRandomNumber()
|
|
|
|
- bugs/misfeatures -
|
|
* Make actor animation Event-driven. See FIXME in actor.cpp. Maybe it
|
|
should be INTERVAL_EVENT
|
|
* No script func should use ScriptDataWord directly. All of them should
|
|
be converted to appropriate data types via getTYPE() functions
|
|
* 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)
|
|
* Inspect Font module - free memory, GameFontIds <-> FONT_ID
|
|
* Walk bug. When announcer puts medallion on Rif he should go backwards
|
|
instead of turning and walking faced to screen
|
|
* In many places RSC_LoadResource() is called but memory is not freed
|
|
afterwards, i.e. there is a huge leak
|
|
* Optimize screen output. Now we blit whole screen for each frame.
|
|
* When using the original XMIDI music resources, some songs play at the wrong
|
|
speed. The worst example I've heard of this is the "Elk Fanfare" during the
|
|
intro. It could be the meta events we don't handle, but at least the tempo
|
|
event doesn't seem to make any difference. Maybe something in the data
|
|
header instead...?
|
|
* In the dog's castle at guards' room (scene_change 177 ang go down) subtitles
|
|
aren't shown. In floppy version there is complete silence both textual and
|
|
audial. Looks to me as if subtitles are drawn outside the screen. Are the
|
|
coordinates calculated wrong, or should the text drawing code compensate?
|
|
* Sound in old Win demo is all wrong -- either there is some unique sound
|
|
format or I didn't guess it correctly
|
|
* Up and down keys ('u' and 'd') in converse panel do not work properly
|
|
|
|
- plans -
|
|
* Remove use of floating point, especially doubles.
|
|
* Implement Verbs (h00ligan)
|
|
* Implement ShowSaveReminder(), that is that diskette
|
|
* Implement Save/Load
|
|
* Finish inventory code
|
|
* Implement ISO path finder
|
|
* Hook conversations to scripts (partly done)
|
|
* ISO - tile scene implementation
|
|
* Puzzle
|
|
|
|
- features -
|
|
* Add sound/voices compression. Should _considerably_ save space.
|
|
* Add support for Mac versions. All data is in BE mode and structures are
|
|
aligned. (h00ligan, partly done)
|
|
* Support for later Win32/Mac/Linux demos where some scenes are substituted
|
|
with LBM images, tables are in place.
|
|
* Amiga ITE support
|
|
* Support for Dream Guild's Mac ITE
|
|
* Support IHNM
|
|
|
|
#######################################################################
|
|
# 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
|
|
* 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
|
|
#######################################################################
|
|
|
|
General
|
|
=======
|
|
* Try to unify the usage of the compression tools, where possible /
|
|
necessary.
|
|
* Make compress_san use the common encoder "API" in compress.c
|
|
* Make compress_queen use the common encoder "API" in compress.c
|
|
* Add FLAC support to compress_sword1 (and the sword1 engine)
|
|
* Consider using library APIs to encode data, instead of invoking the
|
|
lame/oggenc/flac binaries.
|
|
Pro: Tighter integration, no need to create temporary files.
|
|
Con: Requires the resp. libs/headers to be compiled in, and the resulting
|
|
binary would only run if all needed shared libs are present
|
|
(unless we static link), whereas the current binary will work even
|
|
if lame/oggenc/flac are missing
|
|
|
|
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
|