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

Jump to navigation Jump to search
→‎YAGA engine: Clarifying permissions
(→‎Smaller Tasks: added task sizes)
(→‎YAGA engine: Clarifying permissions)
 
(16 intermediate revisions by 3 users not shown)
Line 44: Line 44:


=== Macromedia Director===
=== Macromedia Director===
Technical contacts: [[User:Sev|sev]]


Difficulty level: Medium. You'll need a reasonable level of programming experience, and probably some [[Director]] games.<br/>
* Technical contacts: [[User:Sev|sev]]
Size: Full GSoC
* Difficulty level: Medium. You'll need a reasonable level of programming experience, and probably some [[Director]] games.
* 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. 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.


=== Enhance SAGA engine for supporting Amiga Inherit the Earth ===
=== Enhance SAGA engine for supporting Amiga Inherit the Earth ===
Technical contacts: [[User:Sev|sev]]


Difficulty level: Medium.<br/>
* Technical contacts: [[User:Sev|sev]]
Size: Half GSoC
* 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.
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.
Line 61: Line 61:
=== The Immortal ===
=== The Immortal ===


Technical contacts [[User:dreammaster|dreammaster]] or [[User:Sev|sev]]
* 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.
Difficulty level: Hard. Good knowledge of C++ and assembly (x86 or 68K or 6502) is required.<br/>
* Size: 350 hours
Size: Full GSoC


The immortal was released in 1990 by Electronic Arts. It's a mix of genres involving RPG elements with action and puzzles.
The immortal was released in 1990 by Electronic Arts. It's a mix of genres involving RPG elements with action and puzzles.
Line 73: Line 72:
[https://www.mobygames.com/game/immortal/screenshots Screenshots on Mobygames]
[https://www.mobygames.com/game/immortal/screenshots Screenshots on Mobygames]


=== Penumbra: Overture (HPL1 engine) ===
* Technical contacts [[User:aquadran|aquadran]] or [[User:Sev|sev]]
* Difficulty level: Hard. OpenGL knowledge is required
* 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]).
(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 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 ===
* Technical contacts: [[User:Sev|sev]]
* Difficulty level: Medium.
* Size: 175 hours
This engine was used for two later [[Humongous Entertainment]] games, [[Pajama Sam: Life is Rough When You Lose Your Stuff]] and [[Putt-Putt: Pep's Birthday Surprise]]. The engine is basically an extension of Python 2.2. There exists an almost complete reimplementation by cyx [https://github.com/cyxx/linyaga on GitHub] (which we have permission to use) that can be used as a base, and we also have the complete source code for the original game.
The task is relatively straightforward, the only difficulty with it is adding Python as an external dependency, but a mentor is there to help. Implementing the missing "Lip Sync" feature will be the main part of this task.
The goal is to bring cyx's code to ScummVM and use the original code as a reference later.
=== Finishing implementation of incomplete engines ===
* Technical contacts: [[User:Sev|sev]]
* Difficulty level: Medium or High
* Size: 175 hours or 350 hours
ScummVM currently has a number of engines which are very close to completion. Many of them were parts of previous GSoCs. For them, we need a playthrough and slight bugfixing, or additional portability fixes.
Some of the engines are:
* [[MacVenture]], based on a [http://seancode.com/webventure/ JavaScript reimplementation]. Very close to completion, playthrough is missing and rechecking ties to our Mac GUI emulation.
* [[Avalanche]], some engine parts like Outro are not finished. Complete list is [[Avalanche#TO-DO|here]]
* [[DM]]


=== Bring your own Adventure or RPG Reimplementation (only existing games) ===
=== Bring your own Adventure or RPG Reimplementation (only existing games) ===


Technical contacts: Talk to us on Discord, or send us an email.
* Technical contacts: Talk to us on Discord, or send us an email.
 
* Difficulty: Hard. You'll need good knowledge of C++, as well as knowledge of (reading) assembly.
Difficulty: Hard. You'll need good knowledge of C++, as well as knowledge of (reading) assembly.<br/>
* Size: 350 hours
Size: Full GSoC


Our project consists of re-implementations of classic games, and we have listed
Our project consists of re-implementations of classic games, and we have listed
Line 99: Line 138:


=== Add Keymapper to more games ===
=== Add Keymapper to more games ===
Technical contacts: sev


Difficulty: Easy<br/>
* Technical contacts: sev
Size: Half or Full GSoC, depending on number of games
* Difficulty: Easy
* Size: 175 or 350 hours, depending on 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.
Line 108: Line 147:


=== Support Unicode input in GUI ===
=== Support Unicode input in GUI ===
Technical contacts: [[User:Sev|sev]]


Difficulty: Medium<br/>
* Technical contacts: [[User:Sev|sev]]
Size: Half GSoC
* Difficulty: Medium
* 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).
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).


== Infrastructure Tasks ==
=== Networking code for Moonbase Commander===
* Technical contacts: [[User:Sev|sev]]
 
* Difficulty level: Medium
* Size: 175 hours
 
[[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.
 
The optional task extension is fixing several remaining rendering bugs in the game.


Finally, there's always plenty of other practical tasks on our wishlist!
=== Optimize blending code for AGS games ===
* Technical contacts: [[User:Criezy|Criezy]]


=== Game packaging system ===
* Difficulty level: Medium
* Size: 175 hours


Technical contacts: [[User:Sev|sev]] or [[User:DJWillis|DJWillis]]
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.


ScummVM offers 9 freeware games for download, but they need to be downloaded and installed manually. It would be great to develop a universal system which would let us describe a game, e.g. provide screenshots, game descriptions, metadata, and package it for different platforms, so we could put them to different application distribution systems bundled together with ScummVM. For example, we could have Beneath a Steel Sky bundled together with ScummVM, with its own logo, description and instructions on how to add another game along the way.
== Infrastructure Tasks ==


Potentially and in the future this system could also be used for DLC on platforms which support it, like Steam, Android Play Store or Apple App Store, though support for Android and iOS is out of scope for this project.
Finally, there's always plenty of other practical tasks on our wishlist!


Examples are: Linux packages, Google Play, Apple App Store, Steam, ForgeTV store, and anything beyond that.
=== Automated system for packaging freeware games with ScummVM ===


=== In-app downloads of demos, freeware games, and addons ===
* Technical contacts: [[User:Sev|sev]] or [[User:DJWillis|DJWillis]]
Technical contacts: [[User:Sev|sev]]
* Size: 350 hours


==== Background ====
==== Background ====
Similar to "Game packaging system", provide a means for users to download [https://www.scummvm.org/demos/ demos], [https://www.scummvm.org/games/ freeware games], and game [https://www.scummvm.org/games/#addons addons] (e.g. subtitle packs) from within the ScummVM app.


These downloads are all currently hosted on https://www.scummvm.org/. In order to use them, the user must go to the website, find the listing, download and extract the files, place them in a location of their choosing, open ScummVM, navigate to the downloaded files, and then navigate through any additional dialogs.  
ScummVM is distributed on our website as a standalone app without any games included, which cannot be used until games are added.
 
Thanks to generous support from game authors, the ScummVM website [http://scummvm.org/games/ offers eleven freeware games for download], but they need to be manually downloaded and added to ScummVM.


==== Proposal ====
==== Proposal ====
It would be much better to add functionality to ScummVM allowing for users to


# Browse demos and freeware games within the app
It would be great to develop a game-agnostic, automated system that would let us package a game, e.g. provide screenshots, game descriptions, metadata, and create distributables for different platforms. For example, we could have ''Beneath a Steel Sky'' bundled together with ScummVM, with its own logo, description, with the resulting distributables ready to upload to various platforms (Linux packages, Google Play, Apple App Store, Steam, ForgeTV store, and anything beyond that).
# Click a button to download and automatically add it to ScummVM (behind the scenes, it downloads to a path such as the "Application Support" folder, just like ScummVM preferences and logs)
 
# Manage and delete existing installations downloaded in this manner
==== User Benefits ====
 
Users will be able to download a single distributable for a particular game, such as ''Beneath a Steel Sky'', and run it without any additional configuration. This is especially useful on platforms where apps are typically distributed through an app store (such as iOS).


This feature would be able to be able to be enabled or disabled during compilation. It would presumably be enabled on general desktop releases (e.g. Windows, macOS, Linux), but disabled on bundled releases (e.g. version included with GOG.com or Steam games) and releases for limited hardware or no internet connectivity (e.g. handheld console ports).
For [https://www.scummvm.org/games/ freeware games that ScummVM is permitted to distribute], this would allow them to reach a wider audience by being available on more niche platforms. Should new freeware games become available, they would also be able to be distributed with minimal effort.


User benefits would be a better first-time experience (no more opening ScummVM and finding they can't do anything yet), greater discoverability of the sorts of games that ScummVM supports, and greatly simplifying what is now a multi-step process.
These automated scripts will also provide a reference for game authors who want to bundle their own games with ScummVM to be sold for their own.


==== Examples ====
==== Future Ideas ====
Examples of this sort of in-app download feature in other open-source projects include:


* The [https://github.com/OpenRA/OpenRA/pull/11375 content installer] in [https://www.openra.net OpenRA] (allows for downloading ''Command & Conquer'' games released as freeware by EA)
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.
* The [https://github.com/OpenEmu/OpenEmu/blob/28ef6e493aadea2be7815158ccb05d37ad43ae17/OpenEmu/HomebrewViewController.swift "homebrew tab"] in [https://openemu.org OpenEmu] (allows for downloading "fanmade" homebrew ROMs with no commercial assets, freely released by the authors)


=== Support for shaders and arbitrary scalers ===
=== Support for shaders and arbitrary scalers ===


Technical contacts: [[User:Sev|sev]]
* Technical contacts: [[User:Sev|sev]]
 
* Difficulty: Medium
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.
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.
Line 171: Line 220:
=== System for checking the game files integrity ===
=== System for checking the game files integrity ===


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


ScummVM requires game data files to operate. Very often, especially when copying from the old media, the files could be damaged. Thus, we need a system that could let the end-users compute all the checksums and compare them with the reference.
ScummVM requires game data files to operate. Very often, especially when copying from the old media, the files could be damaged. Thus, we need a system that could let the end-users compute all the checksums and compare them with the reference.
TrustedUser
567

edits

Navigation menu