1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
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]
* 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.
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.
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 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
* V7-8 games: Implement smooth horizontal scrolling (instead of scrolling in
increments of 8 pixels). See bug #629417.
* 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
* 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 o6_setboxset, only used when leaving basement in fbear
- Fix nukeArrays, it is nuking wrong arrays in fbear
* Humongous entertainment >= v7 titles:
- Add support for local script offsets used in HE98+ games
- Add support for additional drawWizImage flags
- Add support for WizPolygon rendering (cyx)
- Add support for new akos animation code used by cut scenes (cyx)
- Complete support for akos codec 32
- Fix debug strings (Reports incorrect values) (Kirben)
- Fix array issues in Buzzy games (Kirben)
- 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
* Transition console to use ScummVM one
* Remove any traces of the additional level of abstraction reinherit used
* Change printf calls to warning/debug calls
* 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
* 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
|