The Dynamix duo of Willy Beamish and Heart of China are ready for testing

We are excited to announce the classic Dynamix adventure games The Adventures of Willy Beamish and Heart of China are now ready for testing in ScummVM!

As the titular Willy Beamish, you play a 9-year-old troublemaker from Frumpton, USA. All you want to do is play Nintari and hang out with your friends, but your parents keep giving you so many chores... and even when you get them done, larger and more sinister forces are at work in your small town. A kid can't get a break!

In Heart of China, you start as retired WWI pilot Jake "Lucky" Masters. After a run-in with Hong Kong businessman E.A. Lomax, you feel driven by a strong sense of duty (and your massive debts!) to help him track down his kidnapped daughter. Work your way through a branching plot and the opportunity to play as three different characters to solve the puzzles and get Kate home.

Along with the previously announced Rise of the Dragon, these games complete Dynamix's short series of adventure games using the DGDS engine.

To test these games, you’ll need a DOS version of the game (both are available from GOG) and a daily development build. Be sure to check the notes on the wiki for each game, and please report any bugs on our issue tracker.

A dark seed has been planted

Dark Seed, a 90's point-and-click horror game from the mind of H.R. Giger, is now ready for public testing!

In the game you play the role of Mike Dawson, who just moved to a beautiful solitary mansion to pursue his dream of becoming a writer. You'll soon realise that the place harbors dark secrets, and you'll have just three days to escape a fate worse than death...

The DOS Floppy and CD versions are supported. The engine also supports a number of localised versions Spanish, French, German, Korean and Chinese.

The floppy version currently lacks sound effects but all other features from the original game should be present.

The engine also has the option of using the "arguably" better floppy music with the CD version if you have both.

To participate in the testing, ensure you have a daily development build. As always, please submit the bug reports to our issue tracker.

ScummVM has been accepted to the Google Summer of Code 2025

Good news: We've been accepted again to the Google Summer of Code program!

So, if you feel adventurous (or RPGous) and would like to spend your summer with the cool team, we look forward to your application.

Fear not—we will provide enough handholding, explanations, and support if you can dedicate time to coding on our project, are an open-minded developer ready to learn, and do not hesitate to ask any questions. We've been doing GSoC for the last 18 years (oh my gosh), so we know the drill.

A list of suggested projects can be found on this page. If you have your own idea, we will gladly evaluate it. For example, this happened in 2023 with the Crab engine. The required information for your application for our project is listed on our Wiki.

To give you a nice boost, we have put together an impressive amount of information on the Google Summer of Code miniportal. So you can learn all the ins and outs of the process. But indeed, you need to start by joining our Discord server and follow the #scummvm-gsoc channel where you can engage with our mentors and the rest of the team.

We are looking forward to your fine application and participation!

A bolt of lightning, a shocking experience

God of Thunder, the Zelda-esque game, is now ready for public testing!

Prepare yourself to take on the role of Thor, the god of thunder, as he battles his way through the three part game, facing enemies and challenging environmental puzzles, all to finally face down challenging end bosses, culminating in Loki himself.

The implementation in ScummVM is slightly different from the original, in that whilst it has a high score table like the original, you don't have to go through the steps of creating an account and being limited to only a single savegame. Also, unfortunately, the game uses a special music format that will need to be implemented from scratch by someone with experience. So for now, no music playback will occur, though in-game sound effects play back fine.

To participate in the testing, ensure you have a daily development build. The game itself is freeware, and can be downloaded from the Adept Software website. We encourage all players to submit feedback and bug reports through our issue tracker.And please take some screenshots along the way.

Have you the skill to defeat Loki, or will you be defeated by the cunning enemies, or be stymied figuring out the puzzles. Play, and find out.

ScummVM 2.9.0 "Close Encounters of the 2.9th Kind" has landed

Almost one year after the last major release, and just in time for Christmas, ScummVM 2.9.0 - "Close Encounters of the 2.9th Kind" has landed. Amongst its gifts, you will find 15 newly supported games and a new supported platform.

New games

  • The Adventures of the Good Soldier Schweik
  • Backyard Basketball
  • Castle Master
  • Marvellous Mice Adventures: Meeting Sea Rat
  • Marvellous Mice Adventures: Sea Rat's Birthday
  • Mask Show
  • Moonbase Commander
  • Orion Burger
  • Rise of the Dragon
  • The Space Bar
  • Thimbleweed Park[^1]
  • Total Eclipse
  • Total Eclipse 2
  • Unrest
  • Wait for it! Issue 3. Song for a Hare

New platform

ScummVM now has an official Sailfish OS port. While we are waiting for official builds to appear, adventurous users are welcome to build their own and very personalized copy!

Notable engine enhancements

The AGS engine has been brought up to version 3.6.1.30 from upstream, which adds support for some recently released games, such as Stranger in Utopia, The Phantom Fellows, and It Takes Two to Tangle.

Keymapper support was added to more than 20 engines, allowing customization of the keys, mouse buttons, and joystick buttons used to play the games.

The SCI engine benefits from numerous script fixes for various games and an impressive speech repair feature for Gabriel Knight 1 CD.

The SCUMM engine sees graphics and audio improvements for the Macintosh version of several games.

Notable platform enhancements

The macOS release for recent Intel and Apple Silicon systems has been signed and notarized, so it has been accepted by Apple Gatekeeper.

The Android release now supports Android 15 and has improved gamepad support.

The iOS release adds support for the Apple Pencil, which was one of the most requested features.


The full release notes contain a comprehensive summary of the changes and enhancements.

On our downloads page, you can find the downloads for various platforms. The iOS version is available in the Apple App Store and the Android versions should soon be available in the Google Play Store (once the update has been approved). If you are using Windows, macOS, or either the Ubuntu Snap or Flatpak packages, the autoupdater will assist you in updating to ScummVM 2.9.0.

Our macOS users with a 64-bit Intel Mac and a macOS version between 10.9 and 10.12 will need to download manually the new update from our downloads page using the "Mac OS X 10.9+ Intel 64 Bits (without Sparkle) Disk Image" download. The version downloaded using the auto-update feature now requires macOS 10.13 or above.

Play the games, and enjoy ScummVM with a hot cup of grog[^2]!

[^1]: Thimbleweed Park is only supported on a subset of platforms as it requires OpenGL with Shaders. [^2]: Other beverages available.

Comprehensive Pull Requests Achieved During Google Summer of Code

Recap of my project: ScummVM includes a global fully configurable keymapper, but this requires engines to be adapted to use it. Hence the goal of this project is to integrate the customised ScummVM keymapper into the engine’s input handling system. This involves modifying the engine-driven input handling code for mapping user input to in-game actions.

Explanation: ScummVM contains multiple games due to its nature of porting several game engines, each engine has a name and the following list has the Engine name preceding it, thus each pull request is the work I did in integrating the keymap to each of the engine in separate Pull Requests in the course of my Google Summer of Code program.

  1. AGOS Engine: Pull Request

  2. COMPOSER Engine: Pull Request

  3. MADE Engine: Pull Request

  4. SAGA Engine: Pull Request

  5. HUGO Engine: Pull Request

  6. CINE Engine: Pull Request

  7. STARK Engine: Pull Request

  8. CRUISE Engine: Pull Request

  9. GROOVIE Engine: Pull Request

  10. LURE Engine: Pull Request

  11. Introduce I18N comments and better keymapping labels: Pull Request

  12. TOUCHE Engine: Pull Request

  13. TRECISION Engine: Pull Request

  14. BBVS Engine: Pull Request

  15. FREESCAPE Engine: Pull Request

  16. ILLUSIONS Engine: Pull Request

  17. DRACI Engine: Pull Request

  18. MADS Engine: Pull Request

  19. TSAGE Engine: Pull Request

  20. HOPKINS Engine: Pull Request

  21. TINSEL Engine: Pull Request

  22. TUCKER Engine: Pull Request

  23. SWORD1 Engine: Pull Request

  24. TOON Engine: Pull Request

  25. Adding I18N Comments: Pull Request

TOON Engine & ANDROID BUILD & TITANIC Engine

Toon Engine

Toon engine in one of those point and click engines but still require keyboard inputs, it has become easier for me to identify keys and map them into the keymap, thus tackling toon engine was not that big of a hassle.
Here is the PR.

Android Build

One of the highlights of this week was that I was able to run the android build on my PC thanks to my mentors, it was tedious and strenuous process but it was important in my personal development in learning how to use docker-container and what problems could arise when building an android-build, one issue was that as my docker container was in unix environment, some executables were built for windows format so I had to remove carriage returns (windows format) for the build to be able to execute. Now I am able to access ScummVM in android mode from my PC.

TITANIC Engine

There were no demos available for titanic engine and I am running out of engines that I am capable of mapping into keymaps so this is the first game that I bought, it was pretty cheap and interesting so it was not that big of an issue. Now in terms of actually tackling the engine it seems much more complex than anticipated.

The engine is very intertwined when checking for movement, so it took some time to figure it out

it seems the above class takes input then sends it to another function which fetches the movement then this is being used for movement.
As of now the code is not complete or clean so the PR is not ready as of yet.

Week12 – Wrap-Up

This week’s work mainly focused on wrapping things up as the end of the project is approaching, and I am striving to refine the details.

Quantitatively, I accomplished the following tasks:

  1. I thoroughly tested my code following the correct workflow.
  2. In the old version, when matching filesets in the command line, it would repeatedly create the same fileset multiple times (manifested in the logs as multiple occurrences of “Updated fileset: xxxx”). After some debugging, I found the problem. As shown in the diagram, the old version would automatically insert a new fileset after all possible match failures, which seems reasonable. However, I had already implemented the logic of “creating a fileset first before matching” in a previous version. This led to duplicate logs since the outer loop of this code was
    for matched_fileset_id, matched_count in matched_list:,
    meaning that the number of potentially matched filesets would result in the same number of duplicate logs. This issue was minor but stemmed from my lack of careful consideration.
  3. I added several new features: for instance, I added checkboxes next to each file on the fileset detail page for developers to conveniently delete unnecessary files, included sorting functionality in the fileset table on the fileset page, and highlighted checksums corresponding to detection types. These features did not involve complex logic, as they were primarily frontend enhancements, and therefore were completed without difficulty.

Looking back at my entire project, I have finished nearly 3000 lines of code over 12 weeks.

I am pleased that most of what I’ve accomplished so far has met expectations. However, there are still some improvements needed before deployment, such as adaptation for MacBinary and other Mac formats, and user IP identification. My sense of responsibility drives me to continue refining this project even after GSOC ends until it can be truly put into production. I look forward to that day! 😄

TINSEL Engine & TUCKER Engine & SWORD1 Engine

Tinsel Engine

Tinsel Engine was also somewhat simple but there was an area where I had to figure out where save and load menus are opened so I can disable the keymap, it took me some time to figure out the best places to enable and disable these

This was after intense debugging but I finally figured it out.
Here is the PR.

TUCKER Engine

As like any other engine, figuring out where to disable the keymap was the hardest part but this was still relatively easy.
Here is the PR.

SWORD1 Engine

Atleast for this engine there are functions defined where savescreen is being initialized and being removed so wasy to implement keymaps, one thing weird was that this engine has 2 _keypressed, one belonging to Control class and and 1 to Engine class so had to replicate that for _customType, other than that no major issues were faced
Here is the PR.

Week 11- Testing

This week, I mainly focused on testing the system I previously developed to see if there were any overlooked issues. Fortunately, the problems I discovered were minimal. Below are the issues I fixed and the new features I implemented this week:

  1. Marking a fileset as full on the fileset page is straightforward; I just needed to add a button for that.
  2. The set.dat file may contain checksums for “sha1” and “crc,” which I initially forgot to ignore. As a result, these two checksum types appeared in the fileset.
  3. I added a “ready_for_review” page. I realized I could reuse the file_search page, so I simply created a redirect to this page.
  4. Speaking of the file_search page, I finally fixed the pagination error. The issue arose because I hadn’t considered that the query page could include filter conditions, which caused the results to show the entire table (i.e., without any query conditions). This error was hidden in a small detail, but I managed to fix it.
  5. I added a user_count based on different user IPs. I implemented a simple prototype, but I’m still contemplating whether there’s a better solution, such as creating a new table in the database to store user IP addresses. I’m not sure if this is necessary and I may consult my mentor for advice later.

Overall, this week has been relatively easy, but I’m still thinking about areas for improvement.