aboutsummaryrefslogtreecommitdiff
path: root/TODO
blob: 6805aabb7436d234d5e76a4a5447db7a0bc5a7a8 (plain)
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
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
* 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?
* add iterators to List<> template and make use of them
* allow for return-to-launcher instead of a normal "quit" ?

GUI
===
* implement "tabs" for multi-pane prefs dialog
  -> could also be used by the Scumm help dialog in scumm/help.cpp
* LAUNCHER: fix global options dialog to be properly persistent
* LAUNCHER: add more options to global options dialog
* LAUNCHER: add more options to game target options dialog 
* global & game target options dialogs probably could share some "panes"
  -> write code allowing this
  -> also, 'in game' option dialogs (for volume/scaler/etc. settings)
     could potentially reuse these, too

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

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
* 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
=======
* 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???