Difference between revisions of "GSoC Ideas"

Jump to navigation Jump to search
Update link to 2024
(Update link to 2024)
 
(98 intermediate revisions by 14 users not shown)
Line 1: Line 1:
This page contains a list of ideas about projects/tasks for the ScummVM project which we feel are relatively substantial (and so appropriate for at least ''part'' of 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.


Of course, if you are not participating in Summer of Code, you are also very welcome to try working on one of these projects.


__TOC__
----
== 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, ideally with someone listed as a possible technical contact, before starting work on any of them.
'''See [[Summer of Code/GSoC Ideas 2024|GSoC Ideas 2024]]''' for the 2024 version of this page.


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, and there will almost always be developers there who can discuss your project ideas and answer questions.
----
 
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 ideas here are meant to be just that - '''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. Not all the ideas might be substantial enough for the whole of GSoC, while other ideas might be far too much work. We expect you to consider this in your application and proposed schedule.
 
You '''must''' read the Summer of Code [[Summer of Code/Project Rules | Project Rules]], which are '''obligatory''' for our students, and tell you what you should do '''before you apply'''. There are also some [[Summer of Code/Students Guidelines | Guidelines]] for our students.
 
Your application should have at least the following information (adapted from the FreeBSD [http://www.freebsd.org/projects/summerofcode.html Proposal Guidelines]):
 
* '''Name'''
* '''Email'''
* '''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?
 
== Audio Output Configuration ==
 
Technical contact: [[User:LordHoto|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: [[User:LordHoto|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.
 
== Saving anywhere ==
 
Technical contact: [[User:Fuzzie|Alyssa Milburn]].
 
On phones and other mobile devices, ScummVM may need to be shut down abruptly - for example, due to memory pressure caused by an incoming call, or another background task.
 
It would be very nice to be able to (automatically) save at ''any'' point when you have to shut down ScummVM suddenly - including in cutscenes,
conversations, etc... at the moment, most engines don't allow this.
 
Since saving is something that every engine implements separately, a GSoC project might consist of implementing this for a number of engines.
 
See [[OpenTasks/Generic/Saving Everywhere]] for more details.
 
== Improve touchscreen GUI ==
 
Technical contacts: [[User:Sev|Eugene Sandulenko]].
 
Our launcher/options GUI has been designed for keyboard/mouse input, and does
not work well in practice on modern touchscreen devices.
 
Since it is theme based, part of the problem can be resolved by using a custom
theme. However, our GUI code will need extensions to allow it to behave like a
proper touchscreen application.
 
See [[OpenTasks/Generic/Touch GUI]] for more details.
 
== Avanlanche Engine ==
 
Technical contacts: [[User:Strangerke|Arnaud Boutonné]], [[User:Sev|Eugene Sandulenko]].
 
The Avalanche Engine has been generously provided by his authors who found recently the sources. This engine is written in Turbo Pascal and is used in the game [http://www.mobygames.com/game/dos/lord-avalot Lord Avalot d'Argent].
 
The sources has been given under GPLv2, as well as the game data.
 
The important parts of this task would be first to port the sources from Pascal to C++, to rework then refactor it heavily, and to integrate it into ScummVM. The use of ScummVM subsystems for graphics, audio, input, etc, will be mandatory, and it'll be required to follow our portability/style guidelines.
 
See [[OpenTasks/Engine/Avalanche]] for more details.
 
== Improving WME engine ==
Technical contacts: Our IRC channel, our mailing list, or contact [[User:somaen|Einar Johan Trøan Sømåen]]
 
The current WME engine allows to play several WME games perfectly. There are neverthless some missing features in the current version of the engine, and some parts of the engine require some optimization. As a consequence, this would allow to improve the gaming experience and to add support to more WME games.
 
See [[OpenTasks/Engine/Improve WME]] for more details.
 
== Hardware accelerated blitting ==
Technical contacts: Our IRC channel, our mailing list, or contact [[User:somaen|Einar Johan Trøan Sømåen]]
 
Some engines (Wintermute, Broken Sword 2.5) would greatly benefit hardware acceleration.
Obviously the purpose of this task is not to make it available on all ports. The impacted ports have to be determined in priority.
 
See [[OpenTasks/Graphics/Hardware Acceleration]] for more details.
 
== Sources for other ideas ==
 
Technical contacts: Our IRC channel, our mailing list, or contact [[User:Sev|Eugene Sandulenko]], [[User:DJWillis|John Willis]], [[User:Strangerke|Arnaud Boutonné]]
 
One good place to start if you're looking for new ideas would be our [[TODO]] page (and the other TODO lists linked from there).
Some other ideas (most of which might be incomplete or outdated, or too difficult for a new developer) can be found on our [[OpenTasks]] page. Again, be sure to talk to us before thinking too much about any idea on these lists, as many things are likely to be outdated or simply wrong.
 
=== New game engines ===
 
If you already have reverse engineering experience, you could consider working on one of the external in-development game engines, or even on support for a new game. However, doing this kind of work is very difficult and time-consuming - you would have to convince us that you have the necessary skills to actually be sufficiently productive, probably by demonstrating some actual progress first.

Navigation menu