Help us to test the upcoming ScummVM 2.9.0!

We've been working for a while on the next ScummVM release, and it is time for a call for public testing.

Support for a number of new engines and games for the existing ones was added, and we need your special attention to the following titles:

  • Orion Burger.
  • Total Eclipse and Total Eclipse 2.
  • Thimbleweed Park.
  • The Space Bar.
  • Moonbase Commander. (with multiplayer support)
  • Backyard Basketball.
  • Unrest.
  • Rise of the Dragon.
  • Castle Master.
  • Wait for it! Issue 3. Song for a Hare. (Ну, погоди! Выпуск 3. Песня для зайца)
  • Mask Show. (Маски-шоу)
  • Marvellous Mice Adventures: Meeting Sea Rat. (Три маленькие белые мышки. Визит Морской крысы)
  • The Adventures of the Good Soldier Schweik. (Похождения бравого солдата Швейка)
  • Marvellous Mice Adventures: Sea Rat's Birthday. (Три маленькие белые мышки. День рождения морской крысы)

Besides these newly supported games, almost half of the current 108 engines have notable changes. Thus, testing more games is always a good thing.

All testing must be done with stable builds, not development ones. Please report bugs or oddities on our issue tracker.

A detailed list of all exciting new features and fixes is available in our NEWS file.

We are looking forward to your reports about successful and unsuccessful playthroughs and bugs reported!

Rescue your twin from the clutches of the evil Castle Master

Castle Master, the haunting conclusion to the Freescape engine saga, is now ready for public testing!

Prepare yourself for a perilous adventure as you lower the drawbridge to enter the Castle Master’s domain. Released in 1990 by Incentive Software, Castle Master became popular for its technical innovation and challenging gameplay. The game inspired countless 3D adventure titles, and the Freescape engine itself marked a technological milestone, enabling groundbreaking object interaction and spatial puzzles.

Notably, Castle Master was one of the first games to let you choose to play as either a prince or a princess, offering a different experience depending on your choice.

Your mission: rescue your twin, imprisoned within the eerie depths of Castle Eternity by the evil Magister. This sprawling, foreboding castle is filled with traps, monsters, and puzzles blocking your path. Gather items, unlock doors, and solve complex riddles as you navigate the labyrinthine halls and confront the dark forces within.

This modern reimplementation showcases enhanced graphics using OpenGL, with initial support for the DOS and ZX Spectrum releases. If you’re eager to embark on this dark journey, a playable demo is available to test your tenacity.

To participate in the testing, ensure you have a daily development build. We encourage all players to submit feedback and bug reports through our issue tracker.

Will you brave the creepy corridors of Castle Eternity and free your sibling, or will you fall victim to the Magister’s curse and join his army of enslaved spirits? The adventure awaits!

Games based on qdEngine are now supported

After seven months of intense work, we are ready to announce support for a few games based on qdEngine, developed by K-D Labs.

The work is based on the original sources published now under GPL, although the work started a bit earlier than that. The engine supports 14 games, five of which we are announcing support for. Most of these games were released in Russian; however, there were Lithuanian, Czech, and Polish releases. The support is announced for:

  • Wait for it! Issue 3. Song for a Hare, (Russian: Ну, погоди! Выпуск 3. Песня для зайца, Lithuanian: Na, palauk! Zuikio dainos, Czech: Jen počkej a Píseň pro zajíce)
  • Mask Show (Russian: Маски-шоу)
  • Marvellous Mice Adventures: Meeting Sea Rat (Russian: Три маленькие белые мышки. Визит Морской крысы, Czech: Příběhy myší rodinky I, Polish: Były Sobie Myszki Trzy: Na Spotkanie Cioci Myszy)
  • The Adventures of the Good Soldier Schweik (Russian: Похождения бравого солдата Швейка)
  • Marvellous Mice Adventures: Sea Rat's Birthday, (Russian: Три маленькие белые мышки. День рождения морской крысы, Polish: Były Sobie Myszki Trzy: Urodzinowe Śledztwo)

Other games do work; however, we haven’t playtested them. You may find more information on our Wiki. Also, we are looking for the Lithuanian version of Little Longnose and Polish releases of Little Mice games and Wait for it! game. If you happen to have a copy, please contact sev.

We continue the active development so that support for other games will follow shortly. The primary constraint is playtesting.

To run these games, you need the latest daily build of ScummVM. If you encounter any hiccups during your quests, please file them on our issue tracker.

I don't need to remind you that this investigation is strictly unofficial

We are excited to announce that Rise of the Dragon is now ready for public testing. This is the first of a small number of games built using the DGDS (Dynamix Game Development System) engine.

The Dynamix name may be familiar – bought by Sierra in 1990, the Dynamix brand continued and became well known for action and puzzle games like The Incredible Machine, A10 Tank Killer, and Red Baron. They also made a few adventures using the custom DGDS engine.

Rise of the Dragon is set in Los Angeles in a dark version of the future, circa 2053. You play as Blade Hunter, a private investigator and retired police officer. After a designer drug kills the mayor's rebellious daughter, Chandra, Hunter is hired to find the people responsible for releasing the drug on the streets. What Blade ultimately finds is much more than he expected. Rise of the Dragon combines classic point-and-click adventure style with platforming arcade sequences, giving a unique gameplay combination.

You’ll need the latest daily build of ScummVM and files from the DOS version of the game, which you can buy at GOG (check our wiki for the required data files). Please file any issues you notice on our bug tracker.

“Can you bring peace to.. UNREST?”

Unrest is a roleplaying game developed by Pyrodactyl Studios set in a fantasy interpretation of ancient India. You’ll step into the shoes of ordinary people and navigate a world fraught with challenges as they strive for safety, freedom, and peace.

We are proud to announce that Unrest is now playable using ScummVM thanks to the work done by our GSoC student, Kartik Agarwala! Help us test the game by grabbing a daily build of ScummVM. Read through our testing guidelines, and please take some screenshots along the way. If you encounter any issues, please report them to our bugtracker.

If you don’t own Unrest, you can purchase this game from either GOG or Steam. The demo for the game is also supported and available from our web site.

Now go, use your manipulative skills to bring peace to this troubled world where chaos is not afar. For the most daring players using the iron-man mode, saving and loading the game is only available using ScummVM's Global Main Menu.

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.