Difference between revisions of "OpenTasks"
Line 29: | Line 29: | ||
== Small devices backend == | == Small devices backend == | ||
we | ScummVM has been ported to many platforms, often by simply re-using the SDL backend (which is based on [[http:://www.libsdl.org|SDL]], which by itself has been ported to many platforms, making it usually easy to port ScummVM to any of these platforms, too). | ||
But for some platforms, dedicated backends are required -- either because SDL doesn't support them, or because we can't achieve all our needs by using the SDL port (e.g. because we need more speed, more control, etc.). These backends are typically made for what we call "small systems" -- systems like PDAs or smartphones (PalmOS, Symbian, WinCE), or game consoles (Dreamcast, GP2X/GP32, Nintendo DS, PlayStation 2, PlayStation Portable). These systems share many features. In particular they often have no (full) keyboard and quite limited resources: Little RAM, little permanent storage space, not that much CPU power, or a limited screen resolution. | |||
This makes it often necessary to (re)implement certain functionality, like virtual keyboards, or graphic downscalers. Since the same needs occur again and again, it would be nice to implement such functionality only once in a sufficiently portable and flexible way, making it possible for backends to pick and use whatever they need. Details and further suggestions as to how to achieved this can be found on the [[Small Devices Backend]] page. | |||
Besides this, optimizing code for speed and memory usage benefits all our targets, and in particular these "small devices". Hence doing this is a worthy goal on its own. | |||
== Revise FilesystemNode system == | == Revise FilesystemNode system == |
Revision as of 20:59, 28 February 2007
This page contains a list of open tasks. Completing any of them would benefit the ScummVM project a lot. At least in theory, all of them should be doable even by somebody relatively new to the project -- in particular, as part of the Google Summer of Code. Besides the tasks listed here, there is of course also the TODO page listing more things that need to be done (but with far less details).
TODO: All of these need to be explained with more detail, in proper english sentences!
Improved plugins code
ScummVM contains by now over a dozen different engines for different adventure game systems. Each of these engines forms a "plugin", and it is possible to compile these plugins as loadable modules separate from the core of ScummVM itself. This makes it possible to (un)load engine code at will, ideal for systems with tight memory constraints: If you want to play a game, you only need to load the engine for that specific game, and can unload the others.
We always compile the engines as "plugins", but by default, they are compiled as so-called "static" plugins -- these are not real plugins, but rather the engine gets compiled into the application (i.e. "static linked", hence the name), but is still treated by the rest of the application as a plugin (only that it is not dynamically loaded). Support for true "dynamic" plugin is only available on a subset of all plugins -- essentially most POSIX systems (including Linux, *BSD, Mac OS X) and the Dreamcast.
There are various ways in which this plugin code could be improved:
- Add support for real "dynamic" plugins on Windows. This is currently not possible, because the ScummVM plugins rely on "backlinking" from the loaded modules to the core binary. This is not supported on Windows. There are various ways to solve this issue (use Google for more info). This is further complicated by the fact that while the interface of the *plugins* is well-defined (although not quite as well documented -- see base/plugins.h), the converse is not true -- plugins can call virtually arbitrary code within the core of ScummVM
- Add support for "dynamic" plugins on more systems which might benefit from them.
- Improve the way we search for plugins. Right now we only look in the current directory. Should this be made configurable? On Unix, maybe /use/share/scummvm should be searched, too? On Mac OS X, the CoreFoundation bundle API should be used to search for plugins inside the ScummVM.app bundle (which would also required the build system to be enhanced to properly bundle all plugins). Etc.
Mixer improvements
- High quality resampling
- reduced latency (e.g. by using double buffering) to avoid stutter issues
MIDI enhancements
Many of the adventures supported by ScummVM make use of MIDI music. Which is why we already include several devide drivers for varios MIDI APIs and emulators (e.g. ALSA, Windows MIDI, Mac OS X CoreAudio/CoreMIDI, fluidsynth...).
MIDI device configuration
Right now, the MIDI drivers are treated by ScummVM in a rather single minded fashion: Either a driver is linked in and hence "available", or not. It's not possible to configure anything about them (like ports to be used etc.), nor does it ever take into account that a single driver might correspond to multiple devices (after all, you can plug several sequenecers into your MIDI port; or you could have configured several different sound font settings in your MIDI emulator). Hence, this needs to be enhanced:
- An API is needed to query the OSystem backend for a list of available MIDI *devices*, not drivers
- These devices should be configurabl via the GUI; this needs to be done in a flexible (different devices/drivers offer different settings) and portable fashion.
XMIDI parser
Various of our games make use of the XMIDI format. We already have a parser for it (see sound/midiparser_xmidi.cpp), but it is incomplete. A full-blown XMIDI parser would be nice -- rumors say that the [[1]] has more advanced parser than we do, maybe that could be used as a foundation.
Small devices backend
ScummVM has been ported to many platforms, often by simply re-using the SDL backend (which is based on SDL, which by itself has been ported to many platforms, making it usually easy to port ScummVM to any of these platforms, too).
But for some platforms, dedicated backends are required -- either because SDL doesn't support them, or because we can't achieve all our needs by using the SDL port (e.g. because we need more speed, more control, etc.). These backends are typically made for what we call "small systems" -- systems like PDAs or smartphones (PalmOS, Symbian, WinCE), or game consoles (Dreamcast, GP2X/GP32, Nintendo DS, PlayStation 2, PlayStation Portable). These systems share many features. In particular they often have no (full) keyboard and quite limited resources: Little RAM, little permanent storage space, not that much CPU power, or a limited screen resolution.
This makes it often necessary to (re)implement certain functionality, like virtual keyboards, or graphic downscalers. Since the same needs occur again and again, it would be nice to implement such functionality only once in a sufficiently portable and flexible way, making it possible for backends to pick and use whatever they need. Details and further suggestions as to how to achieved this can be found on the Small Devices Backend page.
Besides this, optimizing code for speed and memory usage benefits all our targets, and in particular these "small devices". Hence doing this is a worthy goal on its own.
Revise FilesystemNode system
- Revise / improve the whole FilesystemNode system -- possibly by
taking inspiration from other projects with similar code (e.g. boost), but always keeping both high portability and the needs of our engines in mind
GUI
I am sure there are tons of things that could be done here, e.g. portable (!) support for TrueType fonts, anti aliasing, etc.
More things should be configurable, say, shadows. Antialiased fonts.
Also there is a big demand in adding possibility for a backend to define its own tab with options.
Revive ScummEX (likely from scratch)
possibly with a broader scope, with support for our other engines, too
Tools: Rewrite descumm
...to do proper recompilation (inspired by jode and other Java decompilers), so that it can properly decompile constructs like switch, do{}while() loops, etc. (I have lots of notes on this :)
Tools: Overhaul the compression tools
to share more code / share it better / to compress by using suitable compression libs instead of calling external binaries (thus allowing more in-memory operations etc.)
Tools: Write a portable GUI for the tools
GUI for the various tools, making them easier to use. should support at least Linux, Windows, Mac OS X, ideall more. Maybe using wxWidgets, or Qt
Residual
Any specific ideas?
Port specific projects
Porters, add your ideas here -- and soon!
Objectify CinE engine.
No deep engine knowledge is required, as the engine is pretty small and well-structured. I.e. basically it will mean wrapping and rearranging some code
TFMX player
There is TFMX player written, but the code is bad.
Add 16bit graphics support to SCUMM engine
Requires good knowledge of C++ as there should be found a solution which will not clobber our code, will have minimal impact on 8bits games and should be optionally turned off at compilation stage
Add support for more Amiga MOD formats
Some of them have well written m68k assembly sources. DrMcCoy (a student) recently took binary player for Infogrames modules, learned m68k assembly, REd the binaries and rewrote them in C++.
Rewrite FMOPL emulator
This is tough task, as it should be implemented by clean room RE. Though I think it is doable by a single person if he/she will try to fix existing one with new behaviour.
Implement "return to launcher" feature
Analyse memory leaks in engines and plug them.
Add sound to C64 games
Basically take some free SID implementation, strip it down and plug into our code
Many tasks with AGI engine
I.e. bunch of fanmade games do not work. This could be accomplished by comparing our code with NAGI and DAGII. The engine is one of the smallest and is easy to understand, not to mention that there is extensive in-depth documentation on it.