mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 14:18:37 +00:00
6e75100d61
svn-id: r13662
369 lines
17 KiB
Plaintext
369 lines
17 KiB
Plaintext
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
|
|
* Support all Mac games without needing rescumm. These games being: dott,
|
|
samnmax, dig & ft. See above point.
|
|
* 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
|
|
* COMI: Fix setActorChoreLimbFrame opcode (see bug #754419, "Wally's Fake
|
|
piratehook still on ground after pick up")
|
|
* 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:
|
|
- Fix music code (done, but not tested yet)
|
|
- Add save/load code
|
|
- Add code for MP3 and Ogg Vorbis compressed datafiles
|
|
* SMUSH:
|
|
- Add support for codec 37 opcode 1, for PC version of FT demo
|
|
- Add code for MP3 encoded sound tracks
|
|
* Humongous Entertainment Games
|
|
- Add proper handling of sound and speech in Humongous games
|
|
- Add support for returning the correct music status for the digital music
|
|
used in 3DO versions of Humongous games.
|
|
- Add sound pitch support and fix missing sound effects for piano mini game
|
|
in fbear
|
|
- Add support kernelSetFunctions/kernelGetFunctions, used for displaying
|
|
images on birthday cake in fbear and images in painting game of fbpack.
|
|
- 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 bugs in actorOps case 218 implementation, actor backgrounds should not
|
|
be reset
|
|
- 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
|
|
- Fix missing sound effects in puttdemo
|
|
- Fix 'costume x undefined x x' errors in veggie head mini game of fbear
|
|
- Fix tangrams game on fbpack, only centre item can selected at the moment
|
|
- Document and fix AKOS differences in Humongous Entertainment games
|
|
- Support various newer Humongous Entertainment games
|
|
|
|
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
|
|
|
|
|
|
#######################################################################
|
|
# 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
|