Week 0

Introduction

Hello! My name is Abhinav Chennubhotla, and throughout the GSoC summer I’m going to be working on a system for verifying the integrity of game files in ScummVM; validating their checksums against those present in a central database.

Throughout the summer, I’ll also be blogging my progress here at least weekly, hopefully more.

Project on the GSoC website. Find me on the ScummVM discord at #gsoc-integrity.

Why?

ScummVM relies on users to acquire their own game files, which quite often come from old, unreliable media. This project will help users confirm the integrity of the files on their computer, and will help developers determine if bugs are caused by issues in the game files, or ScummVM itself.

How?

My tasks for the summer include:

  • Creating and implementing a database schema for storing checksums.
  • Creating a backend to work with the DB.
  • Building tools – both a website and CLI application – for developers to mass-populate the DB.
  • Creating and deploying an API for the aforementioned tools as well as ScummVM (for the end users) to communicate with the backend.
  • Adding the requisite functionality to ScummVM to calculate checksums, send requests, and receive responses.
    Also add the necessary GUI buttons and such.

The database schema, and the API spec is mostly already defined. The website design will mostly the somewhat similar to Adminer.

That’s all for now. Make sure to check in later for a continuation for my journey!

Thanks for reading!

Preliminary Work

Introduction

Sev promoted me to actually start the work on porting the CRAB engine after I had completed some tasks which he had assigned me.

On this page, I hope to document to the best of my efforts what work I have already accomplished as of writing this page.

Importing the Engine Source code into ScummVM

The very first thing, intuitively, was to import the engine sources into ScummVM and get them to compile. To accomplish this, I first created a new skeleton engine and then imported all the files.

Initially, I took the wrong approach, I focused on removing STL usage before anything even compiled and rewrote some functions. Sev later made me realize that this was probably not the best approach and that I should first focus on getting all files to compile, and then remove STL usage.

I got introduced to `FORBIDDEN_SYMBOL_ALLOW_ALL` which allowed linking with C++ STL(future engine porters take note :p). 

One thing that I took advantage of was that the src code of CRAB was well-separated into different components. So, instead of getting the whole codebase to compile at once, I instead made every component compilable one by one.

With commit #07a97c7f all files were compilable. It should be noted that I had to stub/comment out some functions as they errored out.

It is during this stage, that I also got the first visuals on screen by porting the Image class to use ScummVM’s equivalent of SDL drawing functions.

This is the game loading screen just before the main menu.

Getting game to render and running into issues

Next, I ported the text drawing functions and soon I was able to go in-game. Yay!

The game renders correctly!

However, if I pressed the left mouse button even once, the screen would simply scroll way past the point it was supposed to.

I spent days debugging this, and ofcourse, the problem was the new rewritten functions I had created :). Reverting those, fixed the issue and now it worked as intended. (A more techincal description: A templated function did not take into account that floats/doubles could be passed to it.)

One important aspect that I haven’t talked about is – Performance. Originally the game is supposed to run at 60 fps, however I was only getting a glorious ~6 fps with ScummVM’s drawing functions.

Optimizing performance

The very first suggestion I got was to work with the minimal – resolution that the game supported, which in this case was 1280×720.

This boosted the fps to 10. It was definitely not a massive improvement, but a improvement, nonetheless.

 

This is where the current progress stands. There are a few other optimizations which have definately helped but that is for a future blog post!

Thanks for reading.

Messy Code. But its faster!

I got the drawing function 4.2x faster! Although, it only works if both the screen is ARGB8888 and the bitmap is ARGB8888. So What I’m going to focus on is making sure the engine keeps the bitmaps at the same format of the screen so I can make the code cleaner and make the optimizations more generic and make them work for all formats.

The road to GSoC’23 proposal acceptance!

Greetings everybody,

This is my first blog post after getting my GSoC proposal selected for this wonderful organization, ScummVm!

So here I am expressing my journey and experience before 4th May 2023 (GSoC proposal out), have fun reading!

The Start (Needle in Haystack)

How did I find this organization? What was it that told me this is where I want to contribute?

An interesting quote from an article i stumbled upon!

20. “This is going to sound crazy, but… from the moment I first set eyes on you I haven’t been able to stop thinking about you.” – Leigh Fallon

So how did I set my eyes on ScummVM?

It was April 1st, the organizations were announced, and I was running late in finding my match..

I am, but a very enthusiastic computer guy (the one people love to call tech nerd, but no, I’m not), so from a young age, I have been tinkering with technology, learning new things on the way and experimenting with systems, languages, and technology! Now that’s enough for my introduction. How does this answer the question you may ask, don’t worry, I got you covered! 😉

So it was 1st March, and I was scrolling here and there, finding interesting organizations that align with my interests, etc. I shortlisted them, but it was ScummVM, the one and only one to which I decided to actively contribute in and submit a proposal! GSoC permits 3 proposals, but I couldn’t care less because what I found at ScummVM is something that just hooked me up to the community of these crazy game porters!

Listing some things out

The Vision

The Vision of ScummVM and what they are trying to build is so cool that it just attracted me to view their project out and consider contributing! What else could be cooler than something which allows me to play old games ? Look its GAME, I repeat, It’s GAME!!!

For someone like me who played lot of old school RPG games in childhood and have attachments to many of them, I could see why I instantly checked out their project and decided to join discord server of scummvm!

Why in italics? Because that was the most important decision I could take, just joining the discord server and introducing myself in #gsoc-channel resulted in a series of cascades of events that resulted in me writing this blog post!

Explaining better in next:

The Community (AND THE BEST MENTOR SEV)

I cannot stress this out enough, I joined server out of enthusiasm but I stayed because of community, the friendliness of everyone and most important the amazing of a mentor that Sev is!

Who is sev?

If you are associated with ScummVM, I don’t even need to tell you about him, but just in case you have no idea then sev is..

Owner, lead, mentor, and developer for ScummVM (as per discord tags) but for me, he’s one of the best mentors I met till now, from the moment I joined the server and introduced myself in the channel, sev created a separate thread for communications (It was a custom to create a separate thread for each student to avoid spam in main channel) and assigned tasks after some communication! What I really loved about this guy is how he used to treat everyone, with kindness, politeness, and in a friendly way!

and most of all how committed he is to ScummVM, this guy has worked over in this organization for years more than I can count doing my computer science degree.

First Pull Request (Assigned Task)

So I was assigned my first task to implement a wrapper around an external library called mikmod for playing impulse tracker files (basically a very old audio format)! If you couldn’t understand, then don’t worry. Just think of I was assigned a technical task and have to implement an easy feature!

While trying to experiment and work on this, I experienced a lot of troubles, and every time I was gravely stuck, sev helped me out! Finally, after a week or two of tinkering and finishing pr, I got it merged! (With thousands of small code corrections, formatting, changes, etc)

What this first pull request taught me is about code conventions and how strictly it is to be followed!

The codes written for scummvm (and applies are not simply written or programmed. They are, instead, I believe, designed!

While the first pr was accepted, It was the 15th of March already, and I still lacked a lot of preparation, study, and commitment to the organization! Seeing the deadline (4th April) approaching, I decided to one-up my game and start actively working!

Link to merged pr

2nd & 3rd Pull Request

Before 2nd and 3rd pull request, I looked into recommended GSoC projects. I decided to work for the Director engine (after discussion with mentor and finding the priority of what is more needed for scummvm). Finding a goal, I started looking deeply into the director engine and getting some bug fixes, etc. to make me understand the engine before writing a proposal!

In the time span of another 2 weeks (by the end of March), I got another two pull requests accepted, link 1 and link 2

Working was very interesting, and I loved playing games, finding bugs, and fixing them! Not only that, but even the developer documentations are great. What I really loved about ScummVM is about how well-documented their codes are, with such a detailed description of almost everything, It was a lot easier to traverse and find relevant functions, classes, etc!

It didn’t feel like I was working with something that consisted of more than 5 Million lines of code.

But regardless, the journey was fun! I got these two pr accepted and finally wrote out a proposal For which I received a lot of scoldings (Thanks to comic-sans font, never using them again) and suggestions!

The Submission

It was the 4th of April, 2023, I double-checked everything and finally submitted it through the GSoC portal!

What I had to do now, is to wait!

The Result Day

It was the 4th of May 2023, as you have guessed right! The day when the accepted contributor’s list is out! This was the day I was very anxious about, being pessimistic I was hoping I could get selected and contribute to ScummVM during the summer vacations!

Finally, the results were out, as usual, the GSoC dashboard site was crashing and I was very anxious trying to open it and checking my emails every second, in the end since it was quite late in my country, I went to sleep giving up, thought wasn’t selected or so I thought, some one hours and minutes later I got an email from Google informing about my proposal being selected! This was a very happy moment and my friends around me were shouting and cheering for getting it!

Now I know that getting selected and completing the project is a different thing, but I plan to stay committed to this organization and finish all the deliverables, passing the project with flying colors!

The End

Thank you for reading this so far, This was just a small excerpt of events happening around me, but I very strongly believe that this is just the starting! For now, expect more blog posts every week following my adventures!

Initial Results…

Before I start on any optimizations I first have to measure how fast or slow the code right now is.


First, I took the code through callgrind and took a look at it in kcachegrind. What my mentors remembered were the bottlenecks was correct, the main bottlenecks in drawing were converting the pixels to ARGB, and blending the pixels themselves.


So now, lets measure the performance of this code. I wrote a pretty simple benchmark that measures the amount of time it takes for X number of BITMAP::blit calls to run. Here is the control group results:



So yea, that’s where I’m starting with and I plan on making it faster.

Introduction

Hello, I am Ankush Dutt, a Computer Science student based in India. I am thrilled to be part of the Google Summer of Code this year and I am very excited to start contributing to my project – Automated system for packaging freeware games with ScummVM. I will be regularly posting updates on my progress through my upcoming blogs. All communication regarding the project will happen on ScummVM discord’s gsoc-packaging channel.

If you need to reach out to me, please feel free to do so via email at ankushdutt.cs@gmail.com or on discord at @ankushdutt.

Thank you for your time, and I look forward to making a meaningful contribution to the project.

Google Summer of Code 2023 – please welcome our participants!

GSoC Logo

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

  • Ankush Dutt will work on an automated system for packaging freeware games with ScummVM for various platforms. The project includes two main objectives: help create standalone game packages bundled with ScummVM, and implement a new mechanism to let users download and install freeware games directly from the ScummVM launcher. You can follow the progress for this task on Ankush’s GSoC blog.

  • Harishankar Kumar will work on improving Director 4 Compatibility. The goal is to reach full support for Total Distortion & The Journeyman Project. You can follow the progress for this task on Harishankar’s GSoC blog.

  • Kartik Agarwala (aka hax0kartik) will work on porting the CRAB engine to ScummVM. The CRAB engine was developed by Pyrodactyl Games and was used in several of the games which the studio released, most notably Unrest, a story-driven adventure RPG set in ancient India. You can follow the progress for this task on Kartik’s GSoC blog.

  • Abhinav Chennubhotla (aka PhoenixFlame101) will work on a system for verifying game file integrity, validating their checksums against those present in a central database. It will also let users contribute the checksums of game files not on the database. You can follow the progress for this task on Abhinav’s GSoC blog.

  • Wyatt Radkiewicz (aka eklipsed) will work on a smaller project to optimize color blending code for the AGS engine thus making games more smooth and run better, especially on lower-end systems. You can follow the progress for this task on Wyatt’s GSoC blog.

Please give them a warm welcome, and visit our Discord server if you want to discuss those projects. After a four week Community Bounding period, the coding period will start on May 29 and you can expect regular updates on these projects on their respective blogs. The team is very excited about the upcoming weeks – and we hope you are as well.

First Blog Post!

Hi, I’m Wyatt “eklipsed” Radkiewicz, and for GSoC 2023 I will be documenting my journey of optimizing the AGS blending code here.

As of right now, I just started familiarizing myself with the code, and its clean code, but my pea brain is very confused right now :-).

Welcome to my alchemy workshop!

Reah: Face the Unknown, the first supported game of the V-Cruise engine, is ready for public testing!

Created in 1998 by Detalion and published by LK Avalon, this 3D-rendered panoramic first-person adventure has you travel to a strange desert world to unravel its secrets.

ScummVM currently supports the CD, DVD, and digital English releases (with subtitles in Dutch, English, French, German, Italian, Polish, and Spanish). If you’re aware of any other versions, please contact us.

To play any of these supported releases, you will need a daily development build. If you encounter any issues, please submit them to the issue tracker!

Android is here to Play again

After a few months of beta testing, valuable feedback from our community of play-testers, and relentless bug squashing, our ScummVM Android port is back on the Google Play Store with a fresh stable release! All the latest features of ScummVM 2.7.0 as well as Android-specific improvements are included in ScummVM 2.7.0.5!

A quick summary of the new features for this release:

  • Implemented support for Google’s Secure Access Framework (SAF) for safe access of external storage space, such as SD Cards or USB drives.
  • Improved input support for joysticks, modern controllers, physical mouse devices and even smart TV remote controls.
  • Introduced the ability to switch touch controls between “touchpad emulation”, “direct mouse” and “gamepad emulation” modes, which can be set per context (ScummVM UI menu, 3D engine game, 2D engine game) as well as changed on-the-fly.
  • Included a log view option, accessible from the “Global Options”, “Paths” tab, and the ability to specify the debug level of the log output, which can be set from the “Global Options”, “Misc” tab.
  • Included all features of ScummVM 2.7.0 with regard to 3D engine support and shaders.
  • Improved overall app stability.

Note that the added support for Google’s SAF API is significant, affecting devices running relatively modern Android OS versions. In these recent Android versions, SAF is relevant whenever games are stored on external storage such as an SD card. Since migration to SAF cannot be automated for the end user, you will need to perform a few manual steps to either use your old games or to add new games when using external storage such as an SD card. If your device supports SAF, the steps will appear in a pop-up when launching ScummVM for the first time. See our documentation page for a more detailed description of the process.

We are always interested in your feedback and suggestions. Any issues you encounter should be reported on our bug tracker. You may also reach out to the developer team on the forums or on Discord.

We’re grateful to have such an active and dedicated community and wish that you all enjoy this new ScummVM Android release!