Difference between revisions of "Summer of Code/GSoC Ideas 2023"

Jump to navigation Jump to search
(Created page with "If you'd like to get involved in ScummVM, 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 yea...")
 
(8 intermediate revisions by 3 users not shown)
Line 49: Line 49:
* Size: 175 or 350 hours
* Size: 175 or 350 hours


[[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 a WIP engine in ScummVM tree, but it requires much more work in order to implement all hundreds of Lingo commands.
[[Director/Games|Many 90s-era adventure games]] were developed using the Macromedia (now Adobe) Director tool. We added so far support for Director 3 and Director 4, but there is much more work related to the specific Xtras, increasing compatibility and working on Director 5 support.


=== Enhance SAGA engine for supporting Amiga Inherit the Earth ===
These days, due to the relatively high compatibility our approach is taking an interesting Director title, trying to play it and fix any issues along the way, thus making the process pretty fun. During playback, we often compare the titles and behaviours with the original.


* Technical contacts: [[User:Sev|sev]]
For this year, it would be great to have Total Distortion fully working and Meet MediaBand. The latter will require working with QuickTime playback code.
* Difficulty level: Medium.
* Size: 175 hours
 
We have been supporting the [[Inherit the Earth]] game for a long while. However, Amiga versions are not yet supported by this target. We have the original source codes, and the main difference is the data bundles format.
 
=== The Immortal ===
 
* Technical contacts [[User:dreammaster|dreammaster]] or [[User:Sev|sev]]
* Difficulty level: Hard. Good knowledge of C++ and assembly (x86 or 68K or 6502) is required.
* Size: 350 hours


The immortal was released in 1990 by Electronic Arts. It's a mix of genres involving RPG elements with action and puzzles.
Often we implement stubs for XObjects which are extensions for Director functionality.
The gameplay is different one variant to the other, and all variants are written in assembly, making it more difficult to support all the variants.


In 2018, a GSoC student picked this task but, due to personal issues, didn't manage to complete the task. The purpose of the task is therefore to implement an engine for a variant of the game, using the original sources and the work of JoeFish as a documentation.
=== Amnesia: The Dark Descent and A Machine for the Pigs (HPL2 engine) ===
 
[https://www.mobygames.com/game/immortal/screenshots Screenshots on Mobygames]
 
 
 
 
=== Penumbra: Overture (HPL1 engine) ===


* Technical contacts [[User:aquadran|aquadran]] or [[User:Sev|sev]]
* Technical contacts [[User:aquadran|aquadran]] or [[User:Sev|sev]]
Line 81: Line 63:
* Size: 350 hours
* Size: 350 hours


Frictional Games has released full sources for their [https://en.wikipedia.org/wiki/Frictional_Games#HPL_Engine HPL1 engine] under GPLv3 license ([https://github.com/FrictionalGames/HPL1Engine link]), around 100k lines of code. This is accompanied with around 37k lines of game-specific code for ''[https://en.wikipedia.org/wiki/Penumbra:_Overture Penumbra: Overture]'' ([https://github.com/FrictionalGames/PenumbraOverture link]).  
Frictional Games has released full sources for their [https://en.wikipedia.org/wiki/Frictional_Games#HPL_Engine HPL2 engine] under GPLv3 license. In 2022 we added HPL1 engine and
now we could consider adding HPL2. The size of the task is huge since the engines are 275k and 240k lines od code respectively, but we already have experience from working on Penumbra.  


(Source for ''Amnesia: The Dark Descent'' and ''Amnesia: A Machine for Pigs'' were also released, but they use the HPL2 engine).
The purpose of this project is to port the HPL2 engine to ScummVM, with the goal of supporting ''Amnesia: The Dark Descent'' and ''Amnesia: A Machine for the Pig''.  
 
The purpose of this project is to port the HPL1 engine to ScummVM, with the goal of supporting ''Penumbra: Overture''. Also determine what additional steps would be needed to support other HPL1 games (''Penumbra: Black Plague'' and ''Penumbra: Requiem'').




=== YAGA engine ===
=== YAGA engine ===


* Technical contacts: [[User:Sev|sev]]
* Technical contacts: [[User:Sev|sev]] or [[User:Strangerke|strangerke]]
* Difficulty level: Medium.
* Difficulty level: Medium.
* Size: 175 hours
* Size: 175 hours
Line 102: Line 83:
=== Finishing implementation of incomplete engines ===
=== Finishing implementation of incomplete engines ===


* Technical contacts: [[User:Sev|sev]]
* Technical contacts: [[User:Sev|sev]] or [[User:Strangerke|strangerke]]
* Difficulty level: Medium or High
* Difficulty level: Medium or High
* Size: 175 hours or 350 hours
* Size: 175 hours or 350 hours
Line 113: Line 94:
* [[Avalanche]], some engine parts like Outro are not finished. Complete list is [[Avalanche#TO-DO|here]]
* [[Avalanche]], some engine parts like Outro are not finished. Complete list is [[Avalanche#TO-DO|here]]
* [[DM]]
* [[DM]]
* [[Comprehend]], finishing support for Transylvania (V2), and adding support for the 16-color Apple IIgs versions
=== Porting qdEngine to ScummVM ===
* Technical contacts: [[User:Sev|sev]]
* Difficulty level: Medium or High
* Size: 350 hours
K-D Labs, a Russian company, has created a qdEngine that was used for number of point-and-click adventure games, primarily in Russian, but they were translated into Lithuanian and Czech.
The rough list of games built on this engine could be found [https://questzone.ru/enzi/engin/QD%20Engine at this link].
The engine itself is mid-size, with around 42k lines of code and is written in C++.
The purpose of this tasks is porting this engine to ScummVM.
=== Porting ADL to ScummVM ===
* Technical contacts: [[User:Sev|sev]]
* Difficulty level: Medium or High
* Size: 350 hours
ADL (Adventure Definition Language, not to be confused with [[ADL|Sierra's ADL]]) was created in 1987 by Tim Brengle and Ross Cunniff and released as freeware. Subsequent modifications to the engine have been made since and released under GPL. Documentation as well as a compiler and interpreter can be found [https://adl.sourceforge.net/ at this link].
Only one commercial game is known to have been released using ADL: Transylvania III. The previous 2 entries in the series use the [[Comprehend]] engine.
The purpose of this tasks is porting this engine to ScummVM's Glk engine.


=== Bring your own Adventure or RPG Reimplementation (only existing games) ===
=== Bring your own Adventure or RPG Reimplementation (only existing games) ===
Line 141: Line 151:
* Technical contacts: sev
* Technical contacts: sev
* Difficulty: Easy
* Difficulty: Easy
* Size: 175 or 350 hours, depending on number of games
* Size: 175 or 350 hours, depending on the number of games


ScummVM includes a global fully configurable keymapper, but this requires engines to be adapted to use it. The feature documentation: [[Keymapper]], some reference implementations: Wintermute has [https://github.com/scummvm/scummvm/blob/master/engines/wintermute/keymapper_tables.h per-game keymaps]; [https://github.com/scummvm/scummvm/pull/2428 a pull request] with adding keymapper to HDB engine; [https://github.com/scummvm/scummvm/commit/cce713ee4c73504e97eba8b0ca9190e47d279e69 a commit] with adding Keymapper to a simpler engine, Griffon.
ScummVM includes a global fully configurable keymapper, but this requires engines to be adapted to use it. The feature documentation: [[Keymapper]], some reference implementations: Wintermute has [https://github.com/scummvm/scummvm/blob/master/engines/wintermute/keymapper_tables.h per-game keymaps]; [https://github.com/scummvm/scummvm/pull/2428 a pull request] with adding keymapper to HDB engine; [https://github.com/scummvm/scummvm/commit/cce713ee4c73504e97eba8b0ca9190e47d279e69 a commit] with adding Keymapper to a simpler engine, Griffon.




=== Support Unicode input in GUI ===
=== Optimize blending code for AGS games ===
* Technical contacts: [[User:Criezy|Criezy]]


* Technical contacts: [[User:Sev|sev]]
* Difficulty level: Medium
* Difficulty: Medium
* Size: 175 hours
* Size: 175 hours


Last year we enhanced our GUI for supporting Unicode output. Now we need to enhance our input system, so Unicode input is supported as well. This includes RTL support (we have FriBiDi employed for output).
One of the main bottleneck in term of performances for AGS games in ScummVM lies in the way sprites are blended together. The AGS engine has 10 different blending modes, and they are currently implemented in a generic way with the colors for both sources being decomposed into their RGBA components before being blended, and then the resulting color being composed back. Those generic decompositions and composition operations are slow and in many cases could be eliminated when implementing specialised versions of the blending functions for a specific pixel format. The task will consist in first changing the blending code so that it can benefit from specialised implementations (for example use template functions or a function pointer). Then specialized optimized implementations of the blending functions can be added for the most commonly used input and output pixel formats combinations.


=== Networking code for Moonbase Commander===
* Technical contacts: [[User:Sev|sev]]


* Difficulty level: Medium
=== Add Text-to-Speech to more games ===
* Size: 175 hours
* Technical contacts: sev
* Difficulty: Easy
* Size: 175 or 350 hours, depending on the number of games


[[Moonbase Commander]] is a SCUMM-based strategy game. The original supported up to 4 network players. We have the source code for the original game, but it is based on top of Microsoft DirectPlay. We need to do a clean reimplementation, not necessarily compatible with the original. There is an [https://github.com/scummvm/scummvm-sites/tree/multiplayer unfinished server code] based written in PHP. The code supports creating game sessions, joining sessions and the gameplay.
ScummVM has Text-to-Speech functionality that we are using for the games that have no speech (or limited options for speech). That improved usability of the games and obviously, their accessibility.


The optional task extension is fixing several remaining rendering bugs in the game.
So far, TTS was added to the following engines:
CGE, CGE2, Dreamweb, GLK, Griffon, Lure, MADS, Mortevielle, SCI, Sherlock, Supernova, TwinE
And we identified that it potentially could be added to at least:
ADL, AGI, Chamber, CinE, CruisE, DM (?), Draci, Dragons (?), EFH (?), Gob, Hugo, Immortal (later), Lab (?), MADE, MM, Parallaction, Prince (for non-Polish), SCUMM, SLUDGE, Startrek (?), Sword25 (for langs other than English or German), TeenAgent, Trecision (?), WAGE


=== Optimize blending code for AGS games ===
For each engine, the task varies from straightforward to a mid-complexity:
* Technical contacts: [[User:Criezy|Criezy]]
  1. Identify routines that show text on screen
 
  2. Potentially, clean up text from things like colors and fonts
* Difficulty level: Medium
  3. Feed this text to TTS
* Size: 175 hours
  4. Define GUI options for triggering the option
 
One of the main bottleneck in term of performances for AGS games in ScummVM lies in the way sprites are blended together. The AGS engine has 10 different blending modes, and they are currently implemented in a generic way with the colors for both sources being decomposed into their RGBA components before being blended, and then the resulting color being composed back. Those generic decompositions and composition operations are slow and in many cases could be eliminated when implementing specialised versions of the blending functions for a specific pixel format. The task will consist in first changing the blending code so that it can benefit from specialised implementations (for example use template functions or a function pointer). Then specialized optimized implementations of the blending functions can be added for the most commonly used input and output pixel formats combinations.


== Infrastructure Tasks ==
== Infrastructure Tasks ==
Line 202: Line 213:


Potentially and in the future this system could also be used for DLC on platforms that support it, like Steam, Android Play Store or Apple App Store. However, DLC support for Android and iOS is out of scope for this project.
Potentially and in the future this system could also be used for DLC on platforms that support it, like Steam, Android Play Store or Apple App Store. However, DLC support for Android and iOS is out of scope for this project.
=== Support for shaders and arbitrary scalers ===
* Technical contacts: [[User:Sev|sev]]
* Difficulty: Medium
* Size: 175 hours
ScummVM uses software scalers for graphics enhancements. In 2012 we were running GSoC for turning them into plugins. [https://github.com/scummvm/scummvm/pull/271 That work] It was recently merged in ScummVM but could require some more love like adding xBRZ scalers.
Modern systems often have OpenGL with shader support. RetroArch project shaders are standard for them in open source gaming. LordHoto started and rootfather continued work on adding support for those to ScummVM. Their unfinished work could be found here: https://github.com/lotharsm/scummvm/tree/shaderscaler . There is also a second branch that adds a hard-coded CRT shader that may be useful as a reference. This can be found here: https://github.com/braindx/scummvm/tree/crt-emulation
We need to add both improvements to our scaler system. Recent PSP2 port already adds some basics for scalers, particularly in GUI, so that could be reused too.
We need to have it tested on desktops and at least Android, but preferably also Windows and iOS.




Navigation menu