This is an EXPERIMENTAL page and does not reflect the views of the project. Please do NOT use it, see OpenTasks for our official GSoC page.
This page contains a list of ideas about projects/tasks for the ScummVM project which we feel are relatively substantial (and so appropriate for a Google Summer of Code project), and accessible to newcomers with good C++ knowledge.
This is just the few projects that we have come with ourselves, and there are many many other tasks which would be helpful to the project - many ScummVM engines have their own TODO lists.
They are just meant to be ideas. You should also consider suggesting your own completely new project ideas, or to suggest a modified version of one of our ideas, or a combination of ideas.
Of course, if you are not participating in Summer of Code, you are also very welcome to try working on one of these projects.
Introduction
The projects below are sketches and ideas. Our project changes over time, so the descriptions might be outdated by the time you read them (although we strive to keep them up-to-date). You should talk with somebody from the team, probably the person(s) listed as Tech Contact, before starting work on any of them.
Most developers are active in our IRC Channel, and that is often the easiest way to ask questions about the tasks and the code in general. You should come to our IRC channel and introduce yourself. The channel is the main form of everyday communication for the project.
You must follow our Coding Conventions. In particular, note that you can't use the standard C++ library for code used inside ScummVM itself. Using it for a non-essential tool should be fine, though.
All code, unless stated differently (for example, platform-specific code), must be written in clean and portable C++; in particular, various versions of both GCC and Visual Studio must be able to compile it. We also have some Code Formatting Conventions.
We only accept clean and maintainable code. This is a somewhat vague requirement, but as a rule of thumb, if the code does what it is supposed to do, but is not extensible, a quick hack, or we need to rewrite it from scratch to properly integrate it, we will not accept it. In particular, we would rather have a maintainable, clean and incomplete piece of code that we could extend, than a complete but unmaintainable piece of code.
Finally: All of the code submitted must be contributed under the terms of the GPL v2+.
Summer of Code Applications
The PostgreSQL folks have some really good Advice to Students on Submitting GSoC Applications. We recommend all students interested in applying with us (or any other GSoC project, for that matter) to read this.
Student application template
The following was adapted from the FreeBSD Proposal Guidelines.
- Name
- Project Title
- Possible Mentor (optional)
- Benefits to the ScummVM Community - A good project will not just be fun to work on, but also generally useful to others.
- Deliverables - It is very important to list quantifiable results here e.g.
- "Improve X modules in ways Y and Z."
- "Write 3 new man pages for the new interfaces."
- "Improve test coverage by writing X more unit/regression tests."
- "Improve performance in FOO by X%."
- Project Schedule - How long will the project take? When can you begin work?
- Availability - How many hours per week can you spend working on this? What other obligations do you have this summer?
- Skype ID - If you don't use Skype, install it.
- Phone Number - Cellular is preferable, for emergency contacts.
- Timezone - Where do you live.
- Bio - Who are you? What makes you the best person to work on this project?
Integrating the Wintermute Engine
Technical contacts: Arnaud Boutonné, Eugene Sandulenko.
The Wintermute Engine (WME) is a set of tools for creating and running graphical adventure games. It was originally only for Windows, letting users create 2D, 2.5D (using 3D characters in a 2D environment) and 3D games for free. The Wintermute Engine has a free SDK, so this would allow people to directly develop 2D games that would run in ScummVM, which is a regular request from ScummVM users.
Recently, a WME developer (Mnemonic) created the WME Lite runtime, to try and make WME games run on more platforms. It "only" supports 2D and 1st person games - so not the 2.5D/3D games outside the scope of ScummVM - and is missing some features, and runs on Windows, iOS and MacOS. The engine should be backward compatible, and development since the last version (v1.9.1, on 1/1/2010) has been slow, so it's a good time to work on the integration of WME Lite into ScummVM, using the code available from Google Code.
The important part of the task would be to integrate the WME Lite sources into ScummVM, making use of ScummVM subsystems for graphics, audio, input, etc, and reworking the code to follow our portability/style guidelines. This would provide enhanced portability of the engine, and add Free sound support.
After that, the target would be to add and test support for a number of WME 2D and 1st Person games, taking into account the limitations of WME Lite (see list here).
If there's enough time, it would also be possible to add some missing WME Lite features: for example, video support (which is probably most important) and sprite frame mirroring, rotations and blending modes.
Audio Output Configuration
Technical contact: Johannes Schickel.
ScummVM needs an improved internal API and user interface for selecting and controlling audio output. Among other issues, at present there isn't a clear distinction between audio types', audio drivers and audio devices.
The idea is that a proper layer-based audio output system should be designed, implemented and used in all our engines, and an appropriate configuration GUI should be designed and added too.
See OpenTasks/Audio/Audio Output Selection for more discussion and some technical details.
MIDI Device Configuration
Technical contact: Johannes Schickel.
At the moment, configuration of MIDI output is not linked to devices, despite a lot of the configuration options being specific to a device or driver.
This task would involve designing and implementing an interface for querying and storage of a wide variety of MIDI drivers/devices, improving the GUI to allow this configuration, and working on some related improvements (such as allowing devices to be added/removed while ScummVM is running).
See OpenTasks/Audio/MIDI Device Configuration for more discussion and some technical details.