Difference between revisions of "Summer of Code/GSoC2023"

From ScummVM :: Wiki
Jump to navigation Jump to search
(Page WIP, 3/5 students)
 
(Added the outcome)
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:
;<u>Code:</u>: [https://github.com/hari01584/scummvm/ Work in Progress]
;<u>Code:</u>: [https://github.com/hari01584/scummvm/ Work in Progress]


;<u>Outcome:</u><nowiki>: In Progress</nowiki>
;<u>Outcome:</u><nowiki>: Success</nowiki>


;<u>Technical contacts:</u>: [[User:Sev|sev]]
;<u>Technical contacts:</u>: [[User:Sev|sev]]
Line 32: Line 32:
;<u>Code:</u>: [https://github.com/hax0kartik/scummvm/tree/feat-CRAB Work in Progress]
;<u>Code:</u>: [https://github.com/hax0kartik/scummvm/tree/feat-CRAB Work in Progress]


;<u>Outcome:</u><nowiki>: In Progress</nowiki>
;<u>Outcome:</u><nowiki>: Success, the student is part of the team</nowiki>


;<u>Technical contacts:</u>:
;<u>Technical contacts:</u>:
Line 53: Line 53:
;<u>Code:</u>: [https://github.com/wyatt-radkiewicz/scummvm/tree/blending Work in Progress]
;<u>Code:</u>: [https://github.com/wyatt-radkiewicz/scummvm/tree/blending Work in Progress]


;<u>Outcome:</u><nowiki>: In Progress</nowiki>
;<u>Outcome:</u><nowiki>: Success, merged</nowiki>


;<u>Technical contacts:</u>: [[User:Criezy|Criezy]]
;<u>Technical contacts:</u>: [[User:Criezy|Criezy]]
Line 61: Line 61:
;<u>Original task description:</u>:
;<u>Original task description:</u>:
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.
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.
== System for checking the game files integrity ==
;<u>Student:</u>: [[User:PhoenixFlame101|Abhinav Chennubhotla]], blog: [https://blogs.scummvm.org/phoenixflame101 phoenixflame101]
;<u>Mentors:</u>: [[User::Rootfather|rootfather]
;<u>Code:</u>: [https://github.com/PhoenixFlame101/scummvm-sites/tree/integrity Work in Progress]
;<u>Outcome:</u><nowiki>: Failure, but there are two PRs</nowiki>
;<u>Technical contacts:</u>: [[User:Sev|sev]]
;<u>Size:</u>: <nowiki>Large</nowiki>
;<u>Original task description:</u>:
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.
The solution will consist of two parts: server and additional functionality within ScummVM. In order to avoid any potential problems with the copyrighted material, only checksums could be passed to the server.
The ScummVM part:
Calculates checksums of all files of a given game/title and submits them to the server. After receiving the response from the server, the end-user is presented with the results of the check: if all files are correct or list of files with different checksums.
Optionally, the users could have the possibility to give their consent to submit their checksums as the new game variant.
The server part:
It should keep checksums of all files of all known games in a DB.
It can receive a list of files to check against from ScummVM, perform a match with the DB and provide the result back in machine-readable form.
Additionally, it must support command-line utility for mass-populating the DB, performed by the developers.
Additionally, it must have a web interface that will let the authenticated users (developers) browse through the existing checksums.
Optionally, it could have a way to see and approve the submitted entries.
== Automated system for packaging freeware games with ScummVM ==
;<u>Student:</u>: [[User:Ankushdutt|Ankush Dutt]], blog: [https://blogs.scummvm.org/ankushdutt ankushdutt]
;<u>Mentors:</u>: [[User:DJWillis|DJWillis]], [[User:blooper|blooper]]
;<u>Code:</u>: [https://github.com/ankushdutt/scummvm/tree/packaging Work in Progress]
;<u>Outcome:</u><nowiki>: Success</nowiki>
;<u>Technical contacts:</u>: [[User:Sev|sev]] or [[User:DJWillis|DJWillis]]
;<u>Size:</u>: <nowiki>Large</nowiki>
;<u>Original task description:</u>:
==== Background ====
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 ====
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).
==== 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).
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.
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.
==== Future Ideas ====
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.

Latest revision as of 17:00, 18 November 2023

This page lists students and projects for the Summer of Code 2023. See also Google's ScummVM organization info page.

Macromedia Director

Student:
Harishankar Kumar, blog: HSK
Mentors:
sev
Code:
Work in Progress
Outcome:: Success
Technical contacts:
sev
Size:
Large
Original task description:

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.

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.

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.

Often we implement stubs for XObjects which are extensions for Director functionality.


CRAB engine

Student:
Kartik Agarwala, blog: Kartik
Mentors:
sev, Strangerke
Code:
Work in Progress
Outcome:: Success, the student is part of the team
Technical contacts:
Size:
Large
Original task description:

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

The original engine repository Wikipedia page of the game Unrest


Optimize blending code for AGS

Student:
Wyatt Radkiewicz, blog: eklipsed
Mentors:
criezy, somean, ccawley
Code:
Work in Progress
Outcome:: Success, merged
Technical contacts:
Criezy
Size:
Medium
Original task description:

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.


System for checking the game files integrity

Student:
Abhinav Chennubhotla, blog: phoenixflame101
Mentors:
[[User::Rootfather|rootfather]
Code:
Work in Progress
Outcome:: Failure, but there are two PRs
Technical contacts:
sev
Size:
Large
Original task description:

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.

The solution will consist of two parts: server and additional functionality within ScummVM. In order to avoid any potential problems with the copyrighted material, only checksums could be passed to the server.

The ScummVM part:

Calculates checksums of all files of a given game/title and submits them to the server. After receiving the response from the server, the end-user is presented with the results of the check: if all files are correct or list of files with different checksums.

Optionally, the users could have the possibility to give their consent to submit their checksums as the new game variant.

The server part:

It should keep checksums of all files of all known games in a DB.

It can receive a list of files to check against from ScummVM, perform a match with the DB and provide the result back in machine-readable form.

Additionally, it must support command-line utility for mass-populating the DB, performed by the developers.

Additionally, it must have a web interface that will let the authenticated users (developers) browse through the existing checksums.

Optionally, it could have a way to see and approve the submitted entries.


Automated system for packaging freeware games with ScummVM

Student:
Ankush Dutt, blog: ankushdutt
Mentors:
DJWillis, blooper
Code:
Work in Progress
Outcome:: Success
Technical contacts:
sev or DJWillis
Size:
Large
Original task description:

Background

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 offers eleven freeware games for download, but they need to be manually downloaded and added to ScummVM.

Proposal

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).

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).

For 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.

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.

Future Ideas

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.