The teenage detective returns!

Put your sleuthing caps on, detectives—it’s time to solve some mysteries! We are proud to announce that a whole batch of HeR Interactive’s Nancy Drew games are now ready for public testing:

In Nancy Drew: Stay Tuned for Danger, a soap opera star needs your help in uncovering who is behind a series of death threats that sound a little too real for comfort.

Nancy Drew: Message in a Haunted Mansion has you helping out with repairs in a Victorian mansion. However, a series of strange accidents, plus some murmurings of a ghost haunting, quickly threaten to turn this renovation into an investigation.

In Nancy Drew: Treasure in the Royal Tower a failed ski vacation at an eccentric castle with even more eccentric inhabitants soon turns into a quest to uncover a lost piece of the history of the French Revolution.

And if you’re looking for something more thrilling, in Nancy Drew: The Final Scene, you will find yourself racing against the clock to find your kidnapped friend, while also saving a historical theater with more than a fair share of secrets from demolition.

The games are available for purchase through HeR Interactive’s website or Steam (Stay Tuned for Danger is not available on Steam, however). Or if you already own a CD copy of the games, their English and Russian variants will also work. To play them with ScummVM, you will need a daily development build. As always, if you encounter any issues, please submit a bug report to our issue tracker.

Hail to the kingdom!

We are very pleased to announce today the start of the testing period of two single-game engines: Kingdom: The Far Reaches and Escape From Hell!

Kingdom, was developed and released by Interplay in 1995. Only the DOS version of the game (available on gog.com) is supported. It's a cartoon FMV game, with an inventory, in which you have to guide Lathan Kandor through a medieval world, discovering the magic spells and the items required to defeat an evil wizard.

Escape From Hell, was developed for Electronic Arts by the game veterans Richard Seaborne and Alan Murphy and was released in 1990. You play Alan in this keyboard-only Role Playing Game and visit Hell, looking for your girlfriend who was accidentally teleported there.

Both games use heavily hardcoded logic which is error prone and requires a lot of testing, so we need your feedback more than ever as they are both incompletely tested. There is sadly only one known demo for Kingdom. Support for the Windows and Mac versions of Kingdom may come later! Please contact us if you have some other demos of both games.

To play any of these games, you will need a daily development build. As always, please submit your bug reports to our issue tracker and please take some screenshots along the way!

Come to the Dark Side, we have jetpacks!

Dark Side, the exciting sequel of the groundbreaking Driller, is ready for public testing!

Dark Side, like its predecessor, was released by Incentive Software Limited in 1988, shortly after Driller. The updated gameplay features a jetpack that allows you to leave the ground, providing a new and fresh perspective that emphasizes the excitement and challenges of exploring Tricuspid, the second alien moon of planet Evath.

This time, the vicious Ketars have scattered and hidden Energy Collection Devices (ECD) around their base to destroy your home planet. It’s up to you to destroy them first! The tricky part is many ECDs are connected to each other and can regenerate instantly, so you must figure out the right order to successfully complete your mission.

Our reimplementation of the Freescape engine features graphics using software (TinyGL) or hardware mode (OpenGL) at arbitrary resolution. The initial Dark Side support includes DOS (EGA/CGA modes), ZX Spectrum and Amstrad CPC. Additionally, there are two playable demos if you want to test the game. Support for Amiga and AtariST will be available later! Please contact us if you have some other release.

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.

Androids get a companion. iOS port public testing

The day has come. We are super happy to announce public beta testing for the iOS port of ScummVM in the store. Yes, you read it right! Since Lars Sundström, aka lman, joined our team as the iOS porter, we have made significant progress. Thus, you no longer need to compile ScummVM yourself in order to add it to your iOS or iPadOS device.

If you want to help by testing this version, just follow this Testflight link and enroll yourself in the test program. This may require installing Apple’s Testflight app. You can find instructions on how to install games and how to play them on our documentation portal.

We truly appreciate your feedback. You can share your thoughts with the Testflight feedback feature, where you can attach screenshots and post detailed descriptions. Alternatively, you can use our bugtracker, e-mail us at ios@scummvm.org, or post on our Discord Server. Your help will let us eventually add ScummVM to the App Store.

Syberia games become more accessible

Following our announcement about affiliation with ZOOM-Platform, we would like to give a note that they have just started to offer the Macintosh versions of Syberia 1 and Syberia 2 bundled with ScummVM.

This is important because ScummVM currently supports only the Macintosh versions of these games. These versions were produced by Tetraedge and are built on a completely different engine than the original Windows versions; basically, they are reimplementations, not ports. Now, thanks to the folks from ZOOM-Platform, you can easily obtain these game variants.

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!

GSoC’ 23: It’s a wrap!

Greetings, as you might have already guessed, this is the last blog post for this beautiful journey of GSoC’23, These last 3 months were amazing, and I would like to wrap it up by writing this final report!

My Introduction

I am Harishankar Kumar, a final-year student (at the time of writing), and working past three months on adding more support to the Director Engine, ScummVM implements a kind of Virtual Machines to support numerous engines, In these many engines the one which I was also working to add more support is called Macromedia Director

My work was to implement support for game titles like “Total Distortion”, “Journeyman Project”, “Meet Mediaband”, Now the thing was that ScummVM was already capable of running these titles however there were bugs and glitches which needed to be fixed before labeling these title as compatible!

What’s been done

According to the proposal, “total-distortion” right now is playable, a lot of work has been put into it and many bugs have been fixed. “meet-mediaband” has also progressed quite further due to adding UnDo Me, This in total added fixed lot of bugs, reimplemented core of Director engine and progressed it closer to what the original engine was like!

What’s left

In general, no amount of progress is ever sufficient as new bugs keep popping up, regressions that needs to be fixed, etc! But in my tenure what’s left to do:

  • Total Distortion is yet to be fully playable, many small bugs are yet to be fixed and the end needs to be tested thoroughly
  • Much work is left for meet-mediaband as well
  • Journey Man Project is almost untouched

My work

In short, all my work can be summarized by these blog posts and the PR’s attached with them:

29th May – 31st May

Implementing Mac Styled PopupMenu’s, First PR After GSoC Accepted!

PR Merged – #5005 #5056 #5059

1st June – 30th June

I am a Developer, and I add bugs in Code

PR Merged – #5074

Because spaces should have height too!

PR Merged – #5089 #5100

The Butterfly Effect of Fixing Bugs!

PR Merged – #5107 #5118

1st July – 31st July

The Art of Scaling Fonts

PR Merged – #5125 #5126

Regressions: I make code, then I break code

PR Merged – #5158 #5136 #5152 #5153 #5156

It’s not you, It’s me!

PR Merged – #5163 #5164

Creating sandwiches in Total Distortion!

PR Merged – #5191 #5190 #5176 #5178 #5196

1st August – 21st August

A background window

PR Merged – #5221 #5216 #5233

Reading Books in Total Distortion

PR Merged – #5182 #5245

The End

It was a beautiful and fun journey, these last three months were filled with endless learning and I couldn’t express how much grateful I am for being given this opportunity! The community is very impressive with lots of helpful members, for anybody looking to contribute, I would totally 200% recommend them!

Moreover, although GSoC is coming to an end however, I am planning to become a member of the Director Engine team and continue my contributions in the future, so expect occasional blogs and my presence in #engine-director channel!

With that being said, here’s the hall of fame, and my heartful gratitude to these people for being part of this project:

Hall of Fame (My gratitude list)

  1. Sev (Eugene Sandulenko) – First and foremost, Eugene, as my mentor, is probably one of the best people who have guided me. honestly, I didn’t expect any learning outside anything related to this organization (ie I expected to learn more about C++ ONLY) but to my surprise, the amount of growth I have seen in myself is surprising to me, in these three months I have learned from basic skills like communication, to how to use git, how to develop efficiently, to even reading gdb stack traces!!I am really thankful for the patience, and for not giving up on me despite so many mistakes, etc! The only reason I got my proposal selected, to complete this project (If I will be passed) will be amazing super-mentor Sev!
  2. My friends and Family – These last three months, I was especially very busy, didn’t pick up anybody’s call, super-duper unavailable! So shoutout to all my friends for understanding this and being there in support whenever needed, I am so grateful for them that here are some mentions to each of them
    1. Sahil Kadiyan – My best roomie who inspired me to work, a source of endless motivation and energy that pushed me through to do something with my career (and that’s how I found GSoC)
    2. Radhika Agrawal – For understanding my unavailability in all these hard times, and for being there for me in thick and thins!
    3. Abhinandan Singla – For managing all the other projects, and academic work, so I wouldn’t feel academic pressure while working for GSoC, He was a lifesaver.

With that being said, I look forward to submission and the final evaluation results! It was a great tenure and I will continue my support to this wonderful of an organization through more long-term contributions!