Difference between revisions of "GSoC Ideas"
(→Improve AGI Engine: Fix syntax and minor spelling issues.) |
Strangerke (talk | contribs) (→Denarius Engine (Most likely cancelled): Cancel.) |
||
Line 121: | Line 121: | ||
See [[OpenTasks/Graphics/Hardware Acceleration]] for more details. | See [[OpenTasks/Graphics/Hardware Acceleration]] for more details. | ||
=== Improve AGI Engine === | === Improve AGI Engine === |
Revision as of 09:00, 14 March 2014
This page contains a list of ideas about projects/tasks for the ScummVM and the ResidualVM projects 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, and some large tasks are available related to ResidualVM engines.
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
For the first year, ResidualVM will be participating to the Google Summer of Code as a guest of ScummVM. Therefore, we added a note concerning the origin of each tasks so that you can easily determine if some 3D knowledge may be involved in the tasks or not.
The projects below are sketches and ideas. Our project changes over time, so if you're not reading this during the Summer of Code application period, 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.
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 Project Rules, which are obligatory for our students, and tell you what you should do before you apply. There are also some Guidelines for our students.
Your application should have at least the following information (adapted from the FreeBSD Proposal Guidelines):
- Name
- Online nicks
- Please list the nicknames of the communication channels you plan to use to keep in touch with us. For example, list your IRC (on FreeNode) nick here.
- Project Title
- State precisely what your project is about. 40 characters is usually a good upper limit.
- 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
- The deliverables will be used to evaluate your progress/success at the mid-term/final evaluations. Thus, it is very important to list quantifiable results here (this does not need to be a simple list!) 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%."
- Make sure there is a clearly visible set of goals that need to be accomplished for your project to be considered successful. It is also encouraged to list additional goals you plan to accomplish in the course of your project if everything goes as expected. You already explained why your project is beneficial for us, however, here you should motivate why a goal is required for your success or just optional. Make sure not to mix the description of a goal with this.
- In addition to the mere goals of your project define milestones. A milestone should be connected to the progress/accomplishment of goals. You should, at the very least, define 2 (two) milestones here. Again, describe the milestones and elaborate on your reasons for defining exactly these milestones. When you plan to accomplish the milestones will be handled in the schedule and not here.
- Project Schedule
- Create a proposed schedule with (at least) the granularity of weeks. This schedule should (among other things) explain how long your project will take and when you can begin to work on it, and you should connect the weeks to the Summer of Code schedule, i.e. clearly make the start, mid-term evaluations, etc. visible. There are multiple ways to organize this, we trust you to find the best way to present your schedule. Obviously we want to see a connection between your goals and your schedule: be sure to elaborate why you think X takes time Y and what possible issues might arise here; obviously your schedule will probably change once you've started working on your project, so we want to know what kind of risks and problems you think might cause such changes. Last but not least, put a fixed date for each milestone you defined here. We want at least one milestone before the mid-term.
- 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
- The two main questions you should answer here are:
- Who are you?
- What makes you the best person to work on this project?
- Make sure you fill this with some life. We would like to know your age and university year for example. Also, explain your connection to ScummVM in the general and to your project in specific. What experience do you have with C++ or other languages required in your project? Have you taken university courses which you think will be helpful? Did you work on any projects we can take a look at? Do you think you will learn anything from your proposed project (if yes, explain what)?
- Pull Request
- A link to the pull request you submitted as part of our Project Rules
When writing this application, keep in mind that the application serves multiple purposes. First of all, it should identify the objectives of your project, i.e. what should be done. Furthermore, it needs to convince us your project is worth a slot/mentoring. Last but not least, it should convince us that you are indeed the right person for this task. A good example of what we do not want to see in your application is a copy of our version of an idea's description.
ScummVM Projects
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.
As this task involves a very precise design before starting implementation, please keep in touch with the mentors as soon as possible if you're interested.
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).
As this task involves a very precise design before starting implementation, please keep in touch with the mentors as soon as possible if you're interested.
See OpenTasks/Audio/MIDI Device Configuration for more discussion and some technical details.
Improve Main GUI
Technical contacts: Eugene Sandulenko.
Several years ago we switched to new XML-based and vector-based GUI. Unfortunately during this transition number of nice touches from previous version of Modern GUI were lost. Particularly current GUI lacks soft shadows, antialiasing in number of places, we are lacking proper widgets for PopUp and List widgets. Those need to be implemented as part of this task.
Also there is need to implement better sliders, multiline text widgets as well as improve current List widget.
See OpenTasks/Generic/Improve GUI Look for more details.
Improve touchscreen GUI
Technical contacts: 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.
Hardware accelerated blitting
Technical contacts: Our IRC channel, our mailing list, or contact Einar Johan Trøan Sømåen, Johannes Schickel, Alyssa Milburn, David G. Turner
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.
Improve AGI Engine
Technical contacts: Eugene Sandulenko.
The current implementation of our AGI Engine, which is used for the early Sierra On Line games; would greatly benefit from some implementation details present in the other open source AGI interpreter, NAGI.
The important parts of this task would be to analyze the implementation differences between the ScummVM implementation and NAGI, particularly in the main loop and in the rendering class, then to reimplement these in the ScummVM engine without causing regressions of the currently supported games and to improve the support of the latest AGI games including the fangames.
See OpenTasks/Engine/ImproveAGI for more details.
CGE2 Engine
Technical contacts: Arnaud Boutonné, Paul Gilbert.
Sfinx is a Polish game based on the CGE engine. The sources of the engine have been generously provided by his authors who found the sources in their archives and by the copyright owners (LK Avalon ). This engine is written in C and ASM and is an evolution of another game already supported by ScummVM, Soltys.
Here are some details concerning Sfinx: Sfinx.
The sources has been given under GPLv2, as well as the game data.
The important parts of this task would be to fix the extraction/compacting tools, to define how similar the engine is compared to CGE1, then to rework and refactor the sources heavily, and to integrate it into ScummVM as part of CGE or as a new engine. 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/Sfinx for more details.
Adding text to speech support in Mortville Manor
Technical contacts: Our IRC channel, our mailing list, or contact Arnaud Boutonné
The original Mortville Manor game was using a speech synthesis based on PC Speaker.
The purpose of this task is to replace obsolete speech synthesis by an external dependency which will allow to implement a decent text to speech generation, in (at least) French, German and English.
Adding speech synthesis of on-screen text for people with reduced sight
Technical contacts: Our IRC channel, our mailing list, or contact Arnaud Boutonné
Using the same library used in the previous task, add a similar text to speech generation for other games. The exact list of titles should be defined as soon as possible between the mentors and the student.
This task would allow people suffering of sight issues to play more games in ScummVM.
Macromedia Director
Technical contacts: Our IRC channel, our mailing list, or contact Alyssa Milburn, Matthew Hoops
Many 90s-era adventure games were developed using the Macromedia (now Adobe) Director tool. They don't run any more on modern systems, and current versions of Director can't even open the files (and too much has changed; Macromedia themselves have said that "reauthoring the movie from scratch" is often more efficient). It would be nice to be able to play these games in ScummVM!
There is already (Python) code available which can parse and display the contents of Director 2 and Director 3 'movie' files, and the basic framework of a ScummVM C++ engine. The task would involve trying to implement enough of a SummVM 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.
AGS
Technical contacts: Our IRC channel, our mailing list, or contact Alyssa Milburn
The Adventure Game Studio engine has been open sourced. It would be nice to have it available (at least for legacy games) as part of ScummVM, so it can benefit from our platform support.
There's an existing unfinished partially-rewritten(!) engine for ScummVM (see AGS) which is missing some core functionality (such as save/load code) but already allows you to complete some AGS games. Adding save/load functionality (not trivial) and implementing some of the other missing code would get it to a point where it could be merged into the main codebase.
This task almost certainly needs experience in understanding/refactoring of complex existing codebases, so please contact us as soon as possible if you're interested.
Sources for other ideas
Technical contacts: Our IRC channel, our mailing list, or contact Eugene Sandulenko, John Willis, Arnaud Boutonné, Johannes Schickel
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
Technical contacts: Our IRC channel, our mailing list, or contact Eugene Sandulenko, John Willis, Arnaud Boutonné, Filippos Karapetis,
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.
ResidualVM Projects
This section contains project ideas for ResidualVM. You will need some basic knowledge of OpenGL and 3D math, in addition to any extra skills indicated in each entry.
Wintermute 3D
Technical contacts: Einar Johan Trøan Sømåen, Paweł Kołodziejski
In 2012, the Wintermute engine was ported into ScummVM. However, as this was a port of the 2D-only Lite-version of WME, and since ScummVM is designed to run only 2D games, the ScummVM port has no support for the 3D parts of the engine, and is thus not able to run any of the games that use them.
See Wintermute 3D for more details.
Implement missing features in Escape From Monkey Island
Technical contacts: chkr <at> residualvm <dot> org, klusark <at> residualvm <dot> org
We re-implemented own game engine which support "Grim Fandango", the original engine used to play this game also supports another game: "Escape from Monkey Island". The difference is that "Escape from Monkey Island" uses a newer version of the game engine, with some modifications which we still haven't implemented fully. A lot of work HAS been done towards this, but there is still a lot left to do.
See Missing Features in EMI for more details
iOS port
Technical contacts: Paweł Kołodziejski, Einar Johan Trøan Sømåen
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
TinyGL improvements
Technical contacts: Paweł Kołodziejski, Einar Johan Trøan Sømåen
TinyGL is a limited OpenGL implementation which uses CPU for rendering. Original code was imported into our project. We made adoptions and improvements for one of our game engines, but it still lacks some features and optimizations.
See TinyGL improvements for more details
Multichannel 3D sound support
Technical contacts: Paweł Kołodziejski
Currently ResidualVM has only stereo audio output for emulated 3D sounds.
See Multichannel 3D sound support for more details
Sources for other ideas
Technical contacts: ResidualVM IRC channel (#residualvm on freenode.net), or contact Paweł Kołodziejski, Einar Johan Trøan Sømåen
New game engines
Technical contacts: ResidualVM IRC channel (#residualvm on freenode.net), or contact Paweł Kołodziejski, Einar Johan Trøan Sømåen
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.