Summer of Code/GSoC Ideas 2016
If you'd like to get involved in ScummVM - or one of our sister projects, such as ResidualVM - we'd love to help you get started!
We've had a lot of successful student projects as part of Google's Summer of Code in previous years -- we hope to inspire you to work with us and (hopefully) add your own success.
For all of these tasks, you'll probably need to already be comfortable with a basic level of C++. Some of the tasks might need more specialised knowledge (for example, working with ResidualVM may need you to understand some OpenGL and 3D math).
Most importantly, we'd like you to join our community. There are many previous GSoC participants who are still involved in our project, and whether or not you participate as part of Summer of Code, we'd love for you to get involved too.
You should come to our IRC Channel and introduce yourself! We're friendly, and it's often the easiest way to ask questions about the tasks and the code in general. 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, answer questions and help out.
One popular type of task is to improve our support for the games you love, whether this means a new game engine, or helping us to perfect an existing one.
Sometimes source code is available - in recent summers, students integrated code supporting games such as Sfinx, The Prince and the Coward and Avalanche into ScummVM. In fact, our support for the Wintermute engine was not only started by a GSoC student, who integrated the code into our tree, but also drastically improved by another student a year later.
A more challenging (but hopefully rewarding) idea is to start (or continue) reverse engineering a game where no source is available. Two good examples are the pair of students who drastically improved ResidualVM's support for Escape from Monkey Island, and the work on improving Operation Stealth. Another option is to work on merging someone else's reverse engineering work, such as was done with the ZVision engine.
If you'd prefer to improve ScummVM more directly, there are even more options available there; in the past, students have improved our OpenGL support, added a testing framework, written a new GUI framework, improved sound format support and added support for high-colour (16bpp and above) graphics. It's difficult for us to imagine ScummVM as it was before some of these projects, you can make a huge difference!
The ideas here are meant to be just that - ideas. We hope they help inspire your proposals, but you should also consider suggesting your own completely new project ideas. Pick something you really want to see improved/fixed, and come and talk to us about it!
If you're looking for more inspiration for ideas, beware of our TODO (and the other TODO lists linked from there) and our OpenTasks pages. Many of the tasks listed there might be incomplete or outdated, or too difficult for a new developer. The best thing to do is to come and talk to us!
Our current GUI could use refreshing and updating, in particular to improve how it works with newer platforms such as iOS or Android. We have a few suggested tasks:
Improve touchscreen GUI
Technical contacts: Eugene Sandulenko.
Difficulty level: Easy (code) / medium (architecture). You'll need a touchscreen device which can run ScummVM, to test on.
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.
Improve Main GUI
Technical contacts: Eugene Sandulenko.
Difficulty level: Easy.
We have a wishlist for improved GUI widgets; we'd like better sliders, multiline text widgets, and an improved list widget. We also want proper widgets for our PopUp and List widgets.
Also, several years ago, we switched to a new XML-based and vector-based GUI, but unfortunately during this transition number of nice touches were lost. In particular, the current GUI lacks soft shadows and antialiasing in number of places. We'd like them back!
See OpenTasks/Generic/Improve GUI Look for more details.
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.
If you don't feel quite up to that level of challenge, we have lots of other suggestions:
Technical contacts: Fuzzie
Difficulty level: Medium. You'll need a reasonable level of programming experience, and probably some Director games.
Many 90s-era adventure games were developed using the Macromedia (now Adobe) Director tool. It would be nice to be able to play these games in ScummVM! We have Python code available which can parse and display the contents of Director 2 and Director 3 'movie' files. This should be enough to implement a ScummVM engine to allow some early Director adventures to be played; for example, parsing the movie files, implementing the frame-based playback system, drawing bitmaps and shapes, playing sounds and running some basic (Lingo) scripting.
Port WebVenture engine
It was used in the late 80s and in the early 90s for 4 games. The MacVenture games are still available for purchase from Zojoi.
Difficulty level: Medium/hard. You'll need to be able to understand 3D graphics, and rearchitecture/design the relevant parts of the engine.
In 2012, support for games using the Wintermute engine was merged into ScummVM, but it still lacks support for games which use 3D graphics. It would be great to be able to play these games in ResidualVM!
See Wintermute 3D for more details.
In Cold Blood engine refactor
Difficulty level: ???
ResidualVM project. See ICB engine refactor for more details
Improve SCI support
Technical contacts: TBD
Difficulty level: Hard. Good C++ knowledge and some knowledge of x86 assembly.
ScummVM has stable support for the older Sierra SCI games, but the newer ones -- such as Space Quest 6, Quest for Glory 4, Gabriel Knight 1 -- still need extensive work. As this is also something we are very actively working on ourselves, please come talk to us if you would be interested in helping out with reverse engineering and re-implementation.
Finally, there's always plenty of other practical tasks on our wishlist!
Improve Android port
Difficulty level: Medium. You'll need some knowledge of C++, Java and ideally Android development and OpenGL.
Technical contacts: Fuzzie
The Android port needs various improvements, especially combined with modern versions of Android. TODO.
Improving the iPhone/iOS port
The current iOS port, which we still label as iPhone, is functional but feels not really polished in a number of ways. The port comes from a time when the first two generations of the iPhone were still the top models. This, for example, makes it not as nicely usable on modern iOS devices because of resolution issues. Furthermore, while the gesture input serves as a great way to, for example, change control schemes, it also has some annoying issues. The most prominent example is that the "open global main menu" gesture sometimes causes the main menu to immediately close.
Build wise the iOS port is currently only supported by using a custom toolchain. Supporting the official toolchain and XCode as development environment in addition to the current toolchain is something we would really like to see. We already have a tool to auto-generate project files for Microsoft Visual Studio. The idea would be to take the currently WIP XCode support and finish it. Building with the official toolchain on command line would also be nice to have.
Essentially, this task requires working on various aspects of the iOS port. This includes graphics, GUI, input handling, but also build related aspects. Ideally, we want our iOS port to feel much smoother for the users, but also for developers working on it.
This task requires C++, ObjC(++), and iOS development knowledge. It also requires access to a (jailbroken) iOS device, preferable both iPhone and iPad, and the official iOS development environment.
Improve iOS port of ResidualVM
Currently ResidualVM has an in progress Android port, but it lacks an iOS port. This task is about to make it for iPhones and iPads.
See iOS Port for more details
Improve audio device configuration
Technical contact: Johannes Schickel.
Our configuration currently doesn't support all audio and MIDI options we would like, and even common configurations cannot always be conveniently specified.
Hardware accelerated blitting
Some engines (Wintermute, Broken Sword 2.5) would greatly benefit from hardware acceleration for their graphics code. Obviously the purpose of this task is not to make it available on all ports. The impacted ports have to be determined in advance.
See OpenTasks/Graphics/Hardware Acceleration for more details.
Native OS X port
ScummVM's current OS X port is SDL 1.2 based, which is a dead project, having been replaced by SDL2, and Apple has a tendency to change and deprecate functionality with each version of their OS, as such, the current state of the OS X port seems to degrade with each new OS X release. Functionality added in newer releases of OS X, such as the new Full-screen modes introduced in 10.7 are also not available for use in ScummVM with the current SDL1.2 port.
One option for solving this, is to create a backend for OS X that doesn't use SDL. This would mean writing replacement code for the parts where SDL currently handles things (i.e. atleast audio/video/input, but possible other details). A major aim of such a project would be to retain backwards compatibility with 10.2 as we have today, while allowing for a good user experience on the very latest OS X versions as well.
This task requires C++ and Objective-C/Cocoa knowledge.