Google Summer of Code 2024 - drum roll please!

Please welcome this year's participants!

On Wednesday 1st May Google announced the list of participants accepted for this year's Google Summer of Code and we are very happy to report that 4 contributors have been accepted to work on various parts of the ScummVM project this summer.

Now we have had a chance to dot the i's and cross the t's we are really pleased to welcome them all to the project and ask everyone to show them a very warm welcome as they get settled.

In no particular order, a heartfelt welcome to...


Project: Implementation of a Game Files Integrity Checking System for ScummVM

Chike Lee - Chico / InariInDream

ScummVM requires game data files to operate. Frequently, especially when copying from the old media, the files can be damaged. Thus, a system that could let the end-users compute checksums and compare them with known good references is desirable.

Chike will be looking to extend existing work in this area and complete the end to end implementation during the summer.


Project: Enhance Macromedia Director Support

Krish Ganatra - Krish / Krish28

Macromedia Director is a popular multimedia authoring tool from the 90s, and many iconic adventure titles have been released using it. Improving its support in ScummVM will preserve gaming history and provide players with access to beloved classics.

Krish will be undertaking a range of targeted enhancements to Macromedia Director support in ScummVM to extend compatibility and support.


Project: Porting qdEngine to ScummVM

Kunal Tiwari - kunxl.gg

K-D Labs created qdEngine and it has been used in several point-and-click adventure games, primarily in Russian, and also translated into Lithuanian, Czech and English. The most known games are Pilot Brothers 3 and Pilot Brothers 3D.

Kunal will be working to bring this engine's code into ScummVM with a goal to add full support for the engine during the summer.


Project: Add Keymapper to multiple Engines

Nabeel Shabbir - kashmiri_markhor / NabeelShabbir

ScummVM includes a global fully configurable keymapper, but this requires engines to be adapted to use it. The goal of this project is to fully integrate ScummVM keymapper into a large number of our supported engines.

Nabeel will be working on this throughout the summer, starting with the larger engines and more advanced keymapper requirements.


We are now in the community bonding period that runs up until the 27th of May when coding on the projects formally begins.

Please give them all a very warm welcome, and visit our Discord server if you want to discuss these projects, each project has a dedicated channel.

You can also expect regular updates from the participants on their respective blogs that will be linked from the planet.

The team is very excited about these projects - and we hope you are as well.

We also wanted to take the time to thank everyone who applied to ScummVM for this year's Google Summer of Code programme. Unfortunately, not every application was successful, but we are so grateful for the interest shown and would love you all to still consider helping with ScummVM in some capacity in the future.

A walk in the park with ScummVM and Thimbleweeds

1987: In the small town of Thimbleweed Park, two officers-a-reno are investigating a murder. The body, still in the process-a-reno of being pixelated, lies in the river. The agents meet a video game developer, a mysterious clown who never takes off his make-up, and many other strange characters.

You can purchase the game in your favorite place: Steam, GOG, Epic Game Store, Xbox, Switch, iOS, PS4, Android.

You're invited to try out this adventure with ScummVM. First, download the daily build and enjoy!

If you encounter any bugs or oddities, please report them on our bugtracker.

When facing the Curse of the Sun God, sunscreen won't save you

Total Eclipse, a real-time, curse-breaking, 3D adventure (with a dash of Indiana Jones flair), is ready for public testing!

Originally unleashed by Incentive Software Ltd. in 1988, Total Eclipse added yet another groundbreaking title to their repertoire of revolutionary games.

Step into the shoes of a heroic archeologist on October 26, 1930, as a total solar eclipse akin to the one happening today over North America looms over Cairo. Knowing of the Ardognus prophecy, created by the powerful high priest Hahmid III, you must find and destroy the hidden shrine devoted to Ra before the eclipse occurs.

Embark on this exciting journey packed with a trusty gun for blasting through doors or dispatching undead mummies; a compass to guide you through a treacherous pyramid; a wristwatch to track the precious time left; and a water bottle to fight dehydration (you’re only human after all).

Can you solve this ancient mystery within 120 minutes and avert catastrophe, or will Rah's wrath obliterate the moon?

Our modern reimplementation of the Freescape engine features graphics using hardware mode (OpenGL) at arbitrary resolution. The initial Total Eclipse support includes DOS (EGA/CGA modes), ZX Spectrum, and Amstrad CPC. More releases are coming at a later date. Additionally, there are three playable demos if you want to test the game. Please contact us if you have some other release or demo.

To play any of these supported releases, you will need a daily development build. As always, please submit your bug reports to our issue tracker.

Please welcome ScummVM 2.8.1: Oh MMy!

Oh MMy — a new ScummVM release!

Please welcome the first ScummVM release of the year: ScummVM 2.8.1.

ScummVM 2.8.1 is a maintenance release mainly focused on fixing bugs that were uncovered since our last stable release.

This update includes upgrades for the following engines: AGI, AGS, GRIM, SWORD2, MM (which is now enabled — yes, we really skipped it in 2.8.0 by accident), mTropolis, NANCY, SCUMM, TWINE, Ultima, and V-Cruise.

The Android, Atari and macOS ports received multiple bug fixes, mostly for improving overall stability and preventing some crashes we’ve seen under certain circumstances.

The detailed list of improvements is available here.

As always, you can find the latest release on our Downloads page.

Go grab it while it's hot — enjoy!

ScummVM has been accepted to the Google Summer of Code 2024

For the 17th time, ScummVM has again been accepted for the Google Summer of Code program this summer.

The program intends to bring new contributors into open source projects. In the most recent two years this has included both students and non-students as eligible candidates for participation.

Like last year, participants can apply for working on either short tasks (about 175 hours of work), or large tasks (about 350 hours of work). The coding period typically runs from start of June through August, but there is some flexibility which allows participants to have longer time frames if they are unable to work full time through the summer.

ScummVM is looking for people interested in participating in GSoC with us. A list of suggested projects can be found on this page, but we are also open to your own ideas as well. Please provide the required information in your application before submitting.

We also strongly encourage you to join our Discord server, in the #scummvm-gsoc channel. This allows you to engage with our mentors and the rest of the team, to get advice about how to get involved with the project, as well as writing your application.

Based on our previous 16 years of experience with GSoC, we have put together a Google Summer of Code miniportal to help you get started.

Looking forward to hearing from you!

Christmas 2023 holiday roundup

 Seems like it's been a full year since my last blog posting. I think that at this point, I'll just have to accept that I'm not very good at making regular postings. At least you all can take solace that my output of work on implementing support for new games in ScummVM remains unaffected. :)

So, what's been happening in the last year? Well, first of all, I finished implementing support for Might and Magic 1. The game itself was pretty primitive, but it was an excellent candidate for something I'd wanted to do for a while - not just reimplementing a game, but adding an enhanced mode that would breathe new life into it. In this case, I was able to use my experience with working on the Xeen games some years previously to add it's user interface into M&M1 as an option. I think it turned out pretty nicely:



After that, I decided to revisit another game that had been bit-rotting, in this case for nearly twenty years - the M4 engine, which supports the games Orion Burger and Ripley's Believe It Or Not - The Riddle of Master Lu. This engine had special meaning to me, as it was the first engine I worked on collaboratively with others, shortly after I first joined the group. Back then though, things got mixed up with trying to have the one engine support both those games as well as the earlier MADS games like Rex Nebular in a single engine, and work stalled on it. Since that time, I'd re-implemented the MADS engine separately (though currently not all MADS games are supported), so decided it was finally time to tackle the M4 engine. And, just in time for Christmas, I finally finished implementing it with Orion Burger fully playable.

I've just announced an official testing period for the game. All the logic of the game was hardcoded, and had to be manually implemented. As such, my implementation of the various game rooms' logic suffered from many minor errors that had to be identified and fixed. Hopefully this testing period will have others discover any other remaining issues I'd overlooked, and the game will finally be officially supported.

Other than that, on a final note, as with previous years I choose to muck around with something different over the Christmas holidays. In this case, rather than fall back on working on the early Legend games yet again, I decided on the Wasteland engine, in particular disassembling Fountain of Dreams. I'd done some previous examination, and it looked like the codebase was fairly straightforward and simple (at least for the small parts of the executables I investigated). My time was productive, and I was not only able to reverse engineer and reimplement the entirety of the character creation screens, but also get a basic map display going. I give you, Fountain of Dreams startup in ScummVM:

ScummVM Fountain of Dreams


As you'll see from the attached YouTube video, I even added basic mouse control support for the character creation screens, just for the heck of it. At the moment, what's shown is pretty much all there is, but it's a firm starting point that further work can be done on.

Will further work be done? At this point I'm not entirely sure. I haven't firmly committed to working on Fountain of Dreams and/or Wasteland. It may be that I'll just putter around with them between working on other games. After all, I still have the drudgery of implementing all the game scenes' logic for Riddle of Master Lu to look forward to :P.. maybe I can use working on this as a way to unwind as I work my way through it all.



End of GSoC ’23: Final Submission

Google Summer of Code is coming to an end. Thanks to my mentors, it has been a pleasant experience.

Here are the things I have worked on during this Summer:

Universal Packaging Script

Code: https://github.com/scummvm/scummvm/pull/5300

Tasks Done

  1. Identify metadata requirement for DLC download support for various distribution stores. It has been compiled here.
  2. Create schema for metadata and JSON files like dlc-games.json and export-platforms.json to maintain all required metadatas for games and how to process those metadatas for different distribution stores.
  3. Write a python script that takes game location, platform type and the ScummVM binary location as parameter. It will determine the output based on the export-platforms.json and dlc-games.json. E.g. For Android Play Store, we will get a new AAB file bundled with games.
  4. Add entry for Android Play Store in export-platforms.json and all required dependencies (bundletool.jar, python scripts, etc.).

Possible Improvements

  1. It takes a lot of time to package games one by one. Create an option to mass package games from a folder.
  2. There are some dependencies that are required to be installed on the host computer. E.g. specific version of Android SDK, Java, Python, etc. Utilize container based approach for quick setup.

In-app DLC Downloader

Code: https://github.com/scummvm/scummvm/pull/5134

Tasks Done

  1. Create GUI dialogs and widgets to interact with the DLC Downloader and to show download progress, in-progress DLCs, etc.
  2. Create DLC Manager to manage downloading DLCs.
  3. Create an abstract class called Store. Different distribution store will need to implement this class using their store-specific API/SDK.
  4. Create a new path called dlcspath for storing the downloaded DLCs.
  5. Create a new compile time flag, USE_DLC for including DLC downloading support. This is disabled by default. To enable it, use --enable-dlc with ./configure. It will only be included on backends where it is supported (kFeatureDLC is true).

Possible Improvements

  1. GUI dialog for DLC Downloader could see some visual overhaul like list with game icons.
  2. Generalize DLC to allow other types of data like themes, icons, shaders, etc. Currently, only games is supported.

ScummVM Cloud Integration for DLC Downloader

Code: https://github.com/scummvm/scummvm/pull/5134

Tasks Done

  1. Implement ScummVM Cloud to download games from a URL (ScummVM’s server) by utilizing existing networking methods.
  2. Handle zip extraction and deletion of zip after extraction.
  3. Improve existing method Archive::dumpArchive().

Android Play Store Integration for DLC Downloader

Code: https://github.com/ankushdutt/scummvm/commit/c313a43cf1415598144c816474eb38ddbe56a8b1

Tasks Done

  1. Implement Play Store DLC support by using Play Core SDK for Java.
  2. Create JNI methods in C++ to interact with Java code for Play Store or vice-versa. Java code utilizes the SDK to implement functions necessary for handling download.

Possible Improvements

  1. Create script to generate the list of assets with required details like – id, name and detection keys for ScummVM configuration like engineid, gameid, extra, guioptions, language, platform and description directly by utilizing the dlc-games.json.

Documentation

Link: https://wiki.scummvm.org/index.php?title=Game_Packaging

GSOC ’23: Final Report

So originally, the goals for the project were to optimize the pixel blending code in the rendering code for the AGS game engine in ScummVM. The problem was: I completed that goal about half way through the coding period. So me and my mentors talked and what I did after was optimize the rendering code that most other engines in ScummVM use. I used SIMD cpu extensions to net a pretty huge performance gain.

Basically, in the AGS renderer, it got a 5x improvement all around and a 14x improvement in the best scenarios. In the global rendering code for all engines to use it got a 2x improvement all around. Here are the speed up results.

The most challenging part is knowing where to start. First, you must get to know your mentors really good, eg: calls, messaging, etc. If you don’t you’ll be left alone and not knowing what to do. And second, if a coding project seems big you should take three steps.
One: Figure out where you are and the actionable steps you can take to get there. What are the big milestones you have to hit along the way? Do you need to complete something else first to efficiently implement another feature? Should you write tests first? etc.
Two: Get the bare minimum code written. I know that sounds funny, but you should just get stuff working to start. This gives you plenty of time to look at your code and to step three.
Three: Make your code the best code anyones seen. Now that you have 90% of the code written, you can optimize it and make it cleaner and tie up any loose ends like updating the tests, making a PR, etc.

Once again, I’d like to thank Google Summer of Code 2023, ScummVM for the opportunity to work on a project like this and learn so much. And I’d like to thank my mentors for helping me when I was stuck, and teaching me how to work in a team.

So this is the end?

So, I’ve updated the AGS blending code to use the new SIMD cpu features detector and added AVX2 support for AGS. All I have left is to get my PR merged, tie up some loose ends, and submit my final submission for GSOC 23. I’ve had a great time coding with my mentors, @criezy, @lephilousophe, @ccawley2011, @somean, and @sev. They have been a great help and very responsive, and it’s been such a blast this past summer coding with them! I’m at college now and got plenty of work ahead of me, so bye!

GSoC summary and final report

Hi all, my name is Kartik Agarwala(hax0kartik) and in the past three months, I worked as a GSoC student under the mentorship of Eugene Sandulenko(sev) and Strangerke with ScummVM. The main focus of my project was to integrate the CRAB engine, developed by Pyrodactyl Games, into ScummVM. This blog serves as a final report of what I accomplished in this three-month period.

What’s been done?

The original milestones as per the project proposal were:

  1. The skeleton engine with some of the main classes is compilable within ScummVM.
  2. Skeleton engine is extended to fully include the first component. This includes loading and parsing XML files.
  3. Work on the graphics component.
  4. Get Unrest into a somewhat working state by integrating the essential components.
  5. All the components are integrated aside from audio.
  6. Integrate audio and ensure that the game is playable.

All of these milestones have been met.

CRAB has been fully integrated into ScummVM and Unrest is playable from start to end.

My changes were merged in the main ScummVM branch with PR #5229. You can also see the “feat-CRAB” branch in my fork to view the most recent changes I made.

Accepted changes

I created a number of PRs in the last three months, all of which were accepted. The following are some of the more important PRs that I created with a brief description.

  • PR #4753: Made text selectable in the input boxes.
  • PR #4766: Implement MKV decoding.
  • PR #4801: Added ProjectorArchive for the Director Engine.
  • PR #5229: Integrate CRAB engine into ScummVM. This was the main PR for this project.

What work is left?

The following list of things need to be improved or are missing:

  1. Filenames are inconsistent.
  2. Unimplemented “fade-in” effect of music.
  3. Saving/Loading is only available through GMM load/save menus.
  4. “Options” menu selectable from the main menu is broken.
  5. Keymapper needs improvement to make the game fully playable using only a keyboard.
  6. Unimplemented “ironman” saves.

Conclusion

My time as a GSoC student has been fantastic. In the last three months,  I have learned a lot from my mentors and the community. I want to note that the ScummVM community particularly has been very welcoming and helpful to me.

I would like to extend a special thanks to my mentors, Eugene Sandulenko(sev) and Strangerke who answered a lot of my questions and provided continuous feedback on the changes I was making. Their expertise helped me complete the project successfully.

Oh, and, I was given the offer to join the ScummVM team, which I have accepted 🙂 I hope to continue working on the CRAB engine and help maintain other engines in the time to come.

Thanks for reading!