ScummVM 2.1.0 "Electric Sheep" has been produced.

"Animal sales was a profitable and prestigious business, since most real animals had died out after the Terran War; there were plenty of electric ones, though—" Oh, ahem, didn’t notice you there.

ScummVM Team is thrilled to announce the release of ScummVM version 2.1.0. This release is the culmination of nearly two years worth of work, adding 16 new games based on 8 engines, a Nintendo Switch port and nearly 500 bug fixes. All this done by the hard work of 147 contributors across 8,493 commits.

The newly supported games are:
  • Blade Runner
  • Duckman: The Graphic Adventures of a Private Dick
  • Hoyle Bridge
  • Hoyle Children's Collection
  • Hoyle Classic Games
  • Hoyle Solitaire
  • Hyperspace Delivery Boy!
  • Might and Magic IV - Clouds of Xeen
  • Might and Magic V - Darkside of Xeen
  • Might and Magic - World of Xeen
  • Might and Magic - Swords of Xeen
  • Mission Supernova Part 1
  • Mission Supernova Part 2
  • Quest for Glory: Shadows of Darkness
  • The Prince and the Coward
  • Versailles 1685

In addition, we enhanced the Android and iOS ports considerably. You will also notice the new GUI facelift, improved Roland MT-32 sound emulation, a new pixel-perfect stretching mode, Text-to-Speech support on macOS and Linux, and last but not least, support for synchronizing saves and downloading game data from cloud-based file services (see the up-to-date list of the platforms in our user manual)

As usual, we have improved many of the existing engines: added support for the 25th Myst Anniversary releases, fixed more than 100 original SCI script bugs that have plagued Sierra games for decades, added support for Amiga and FM-TOWNS versions of Eye of the Beholder, improved audio quality in Humongous Entertainment games and added lip sync to the newer LucasArts adventure titles, squashed tons of bugs in Starship Titanic and Bud Tucker. The list goes on and on, and you may see the comprehensive change log here.

Have no more tears in rain and grab this electric release. Windows and macOS users may get the auto-update when starting ScummVM.

Another game to test: Duckman

Duckman: The Graphic Adventures of a Private Dick is an obscure point and click game based on the TV show of the same name. You control the wise cracking detective Duckman as he attempts to regain his identity after being unceremoniously dumped from his own TV show. The game's release for Windows in 1997 unfortunately coincided with the TV show being cancelled, which limited the distribution of the game.

After a long time in development, the ScummVM team is happy to announce support for the game.

Make sure to grab a recent build and give it a try. Please report any bugs that you find to our issue tracker.

The English, German and Demo versions are supported. You just need the DATA/ directory from the original game to play.

We’re starting ScummVM 2.1.0 testing

The time has finally come to start the release cycle for ScummVM 2.1.0.

The release is going to be big, and these new games require testing:

  • Blade Runner.
  • Hoyle Bridge.
  • Hoyle Children's Collection.
  • Hoyle Classic Games.
  • Hoyle Solitaire.
  • Hyperspace Delivery Boy!
  • Might and Magic IV - Clouds of Xeen.
  • Might and Magic V - Darkside of Xeen.
  • Might and Magic - World of Xeen.
  • Might and Magic - World of Xeen 2 CD Talkie.
  • Might and Magic - Swords of Xeen.
  • Mission Supernova Part 1.
  • Mission Supernova Part 2.
  • Quest for Glory: Shadows of Darkness.
  • The Prince and the Coward.
  • Versailles 1685.

Also, with this release, we are finally enabling cloud support for save games and game data. So far, it works only on desktops, you may find a description of this feature in our User Manual.

The complete list of the games that require testing for this release can be found on our Wiki.

Please use a stable daily build of ScummVM for testing. In case you encounter any bugs, there is a place for them to be reported at our issue tracker. Additionally, please track your progress on the forum thread so we can cross the tested game titles out on the wiki. Make sure to follow our guidelines for release testing which can be found here.

It would be great if you could help with updating the ScummVM GUI translations. The description of the steps you need to follow is on the Wiki.

Recruiting for Mission Supernova

We need you! Join the Supernova crew for an unforgettable journey to witness the death of a star.

Have you ever dreamed of becoming an astronaut? Being abandoned on your own on a broken spaceship? Dying asphyxiated? Being electrocuted? Being shot at? Getting lost in a pyramid? Being caught stealing a dinosaur's head and being sent to prison? And if that is not enough you can even disable the improved mode in ScummVM and experience the frustration of clicking and pointing your way through a twenty-five years old computer game.

We are proud to announce that Mission Supernova Teil 1: Das Schicksal des Horst Hummel and Mission Supernova Teil 2: Der Doppelgänger are now both supported in ScummVM. In addition we have also translated both games to English and you can decide to play either in German or English. The games can be downloaded for free on the developer's website, so you have no reason not to play it!

Please help us test the games and report any bugs or translation issue you find on our issue tracker. You will need a recent version of ScummVM and the supernova.dat file (if it is not included in the ScummVM package for your platform). You can also see some basic information on the game controls on our wiki or access the game manual in game using the F2 key.

The Prince and the Coward goes supported

A long time ago, in 2013, Kamil Zbróg and Łukasz Wątka, a GSoC student, were working on support for the game The Prince and the Coward or Książę i Tchórz, as it was called originally in Polish.

The game engine sat in limbo, however, because we were trying to work on the English translation. Unfortunately, that work is only about ¼th done, and we need your help.

Nevertheless, we would like to announce support for this game. All released versions are supported, including Polish original, German release and the Russian translation. Take your copy of the game and give it a try. You will need a daily development build for that. As always, please submit the bug reports to our issue tracker.

Also, if you happen to know Polish, German, or Russian, you are welcome to help us with the translation. The short instructions are provided here.

Powodzenia!

GSOC: Concluding Remarks

The final evaluation round for GSoC 2019 has ended, and I would like to this moment to summarize the work that I have done for the past 3 months. In case you just want to look at the code, here is the PR link.

Hyperspace Delivery Boy

My project revolved around building a game engine for the Monkeystone game Hyperspace Delivery Boy. The project description for the same can be found here.

My early work on the project feels so long ago that is quite difficult to remember the exact steps I took, and the problems I faced through them. Thankfully, some of the more difficult ones are mentioned in this blog. To summarize, my work included building core systems such as AI, LuaScript, Map, Sound and much more that mimicked the interface and functionality of the original HDB source code.

Once the core functionalities were added, I used them to link the Lua scripts to the engine and define the in-game logic that was present in the engine. This included things such as enemy movement, hit detection, dialog rendering, map-loading, the save system and much more.

I took a STUB-oriented way towards the project, upon Eugene’s suggestion. Whenever I needed some functionality that didn’t exist yet, I would create a warning for it and come back to it later. It made the process of navigating and translating a large codebase much more linear, and simple to understand.

Changes Since Last Time

In my last update, I mentioned that a few bugs remained in the PPC version, which made it unplayable. Those problems have been rooted out, and the game can be completed with the PPC data files as well. In fact, from the playtesting that I have conducted so far, I can say that the game should be completable for all available platforms - Windows, Linux and PocketPC.

What’s next?

For now, I would like to work towards getting the project properly merged into the main ScummVM repo. There is also a scaling bug in the PPC version that still exists. It is far from game-breaking (in fact, some might say it makes the game easier) but I would like to rectify it in order to stay true to the original.

Once again, I would like to thank Eugene(sev) and Arnaud(strangerke) for their help and support throughout this project. I wouldn’t have made it even half the way here without their help.

GSOC 2019 Summary

Project description

During GSoC 2019, I was working on adding support for original versions of Red Comrades 1: Save The Galaxy (1998) and Red Comrades 2 : For the Great Justice (1999) games developed by S.K.I.F.

Goals achieved

Red Comrades Engine:

Pull Request

Engine branch

Red Comrades Demo is fully supported.

Red Comrades 1: Save The Galaxy (1998) and Red Comrades 2 : For the Great Justice (1999) are runnable, but are bugged due to no implementation of walking system.

During reversing I have encountered problem with walking system, because it is very large and complex. It uses more than 30 functions. For comparison, the dialog bytecode interpreter uses only 17 functions.

Advantages over original engine:

  • Low CPU usage. The original engine doesn’t have delay after each frame despite the fact that dirty rectangles are implemented in it.
  • All advantages which ScummVm offers(scaling, cross-platform, etc)

ScummVM’s library:

During GSOC I have improved INI reader class in ScummVM.

Future work

  • Make games fully playable
  • Maintain Red Comrades engine during its testing period
  • Add another engine to ScummVM

Code

The code for Red Comrades Engine is in the repo:

Engine branch

The commits that I made:

Commits

New Side Activity - Dark Things

As I never manage to stay calm and as I currently don't have an engine I'm actively working on, I started a couple of days ago a new side activity: Translating to French an indie game called "Dark Things - Detective Quest", which is available on Apple Store and Google Play.






This game caught my interest for several good reasons (an adventure game with big pixels, what else?). The chapters are quite short but they are fun and the scenario is pretty good imho.

At first, I essentially reported a couple of missing translations (the team is Russian), but I quickly proposed to work on the French translation and they accepted :) I guess during the process I'll also challenge the English translation which is perfectible.

The result is not yet visible as the team is currently focused on Chapter 4, but here is my progress so far:

Menu, character names, etc: Done
Chapter 1: First pass done, waiting to be able to test it in the game to fix the last issues
Chapter 2: Not yet started
Chapter 3: Not yet started
Xmas special: Not yet started

Google Summer of Code summary

Hello, the GSoC is at it's end and it is time for me to summarize my work in the past 12 weeks. In case you only want to see the code, here are the pull requests: Mission SupernovaText to speechEncoding conversion.

Projects

Mission Supernova

As the first project, I worked on an engine for Mission Supernova 2. The project description can be found here

The engine for the first Mission Supernova game was already almost finished. At first, I decided to create a separate engine (supernova2) and I started with copying code, that is the same for both games from supernova to supernova2. After this I started adding the Mission Supernova 2 specific parts (interactions with objects, rooms, ...), which thanks to having the original source codes wasn't hard. When I had most of the game working, I had to work a bit on improving the translation. There was a tool from the first engine to create translations of game strings and images with only 2 colors. But unlike with the first game, we needed to translate colored images and we also needed to recreate the original image format, which contained multiple images, that got rendered on top of each other as layers. So I created a tool, which recreates the original image format from multiple bmp images and thus allows us to translate any image we want.  At the end I merged the supernova and supernova2 engines into one called "supernova" and created a pull request, which after some modifications suggested by the community got successfully merged.

A walkthrough of the Mission Supernova 2 can be found here.

Working on this project gave me the opportunity to get to know the ScummVM code base a bit. Thanks to this, I tried to create my own midi sound, which was pretty interesting and I also learned a tiny bit of German.

After the GSoC, there will be a public testing of the Mission Supernova games and I want to be around to fix the bugs that come up.

Text to speech

Because I finished the first project early, I chose to work on a text to speech project next. The task was to implement text to speech support for ScummVM for at least 2 platforms and then use this feature in the GUI for people with reduced sight or in the Mortevielle engine. The whole project description can be found here

I begun by identifying the best text to speech backend for each platform (Linux and Windows). For Windows, the choice was pretty clear. Microsoft's SAPI is probably the best way to implement text to speech on Windows. For Linux the choice was a bit harder. There are several backends, that can be used: eSpeak, Festival, Flite, MaryTTS, speech-dispatcher and a lot of others. Unfortunately none of those could output speech in as high quality as SAPI on Windows, or NSSpeechSynthesizer on macOS. In the end I chose speech-dispatcher, because it is just a high-level API, which uses another backend for the speech, so it is up to the user to configure the speech-dispatcher to use the backend he likes the most. And by using the speech-dispatcher, it in the future allows the user to use some backend, that doesn't yet exist and outputs speech in comparable or better quality than Windows or macOS.

I started with implementing simple text to speech manager for Linux and then I added the same on Windows. Implementing the manager for Windows was a little bit harder, because this was the first time I developed something windows specific, so some things were pretty new to me (Windows's heavy use of wchar_t, Microsoft's __uuidof operator and a lot more). I also had to rewrite some parts of SAPI's headers to work with MinGW. After implementing some basic speech managers, I added text to speech to the GUI and then also to the Mortevielle engine. Then I spent a lot of time fixing bugs and adding more features to the managers, for example: Different actions, that should be done, when trying to speak while another speech is in progress. This lead to implementing my own queueing of speeches and making the managers multi-threaded. After there were no more features to add and all tests were passing, I created a pull request

Part of the pull request is also a text to speech manager for macOS, which was implemented by my GSoC mentor Criezy.

The text to speech can be seen in action here: Windows GUILinux GUI, MacOS GUIWindows MortevielleLinux MortevielleMacOS Mortevielle

Thanks to this project I learned more about how different backends are handled in ScummVM and how to add optional features and optional libraries to ScummVM (the text to speech is an optional feature). I had an opportunity to work with multiple threads, which I don't do that often and I wrote my first Windows specific code ever.

After the GSoC, once this project gets merged, I want to be there to fix any bug, that comes up (hopefully there aren't many of them).

Encoding conversion

Because there was still a little bit of GSoC left, I started to look for another project to work on. While working on the text to speech project, I needed to convert between different character encodings (to UTF-8 on Linux, to UTF-16 on Windows). I implemented some conversion there, but it wasn't perfect. On another pull request, that improved cloud support in ScummVM, there was also an issue with encodings and there was a short discussion about encoding conversion on the IRC. So I decided to add a way to convert encodings to ScummVM.

I started by adding an option to compile ScummVM with iconv and implementing conversions using the iconv library (if it is available). After that, I added another ways of converting encodings (SDL_iconv_string, ansiToUnicode and unicodeToAnsi on Windows and some already existing ways of conversion within the ScummVM). The resulting code tries to use as many ways of converting encodings as possible until it succeeds. First it tries iconv, then backend conversion algorithms (SDL, Win32, ...) and then TransMan (translation class in ScummVM, which can be used for some encoding conversions). After this I added transliteration from Cyrillic to ASCII, which was needed by the cloud pull request. In the end I added tests and created a pull request

This project helped me to further explore ScummVM's code base and I learned a few new things about character encodings.

After the GSoC, once this project gets merged, I want to be there to fix any bug, that comes up.

What the GSoC gave me?

In this GSoC, I had the opportunity to experiment with quite a lot of new things for me: text to speech synthesis, encoding conversions, creating MIDI sounds, multi-threading, reading through old C code (Kernighan and Ritchie function declarations, a lot of gotos, jumps, quite a bit of assembly), I got better at VIM, I learned more things with git and a lot more. I also had to familiarize myself with quite a bit of the ScummVM's code base. I got used to program 8 hours per day, which will, along with the experience in programming I gained, surely help me with my school projects next semester. And the most important thing: I memorized like 30 hours of metal songs :D

What's next?

I would like to enjoy the rest of the holidays before the school begins again, so I won't work as much, but I certainly want to fix anything not working in my code. After this I will probably have a lot of work with my school projects, but I certainly want to find at least a little bit of time throughout the school year to work on another project for ScummVM, maybe another engine, but I don't know yet.

This is probably my last blog post for some time, because I am not a person, that would write a blog post, unless it is really interesting or important, so good bye readers.

Week 12

This week I have been preparing engine to merge with ScummVm’s main tree and reversing walking system.

Some ini files in games are invalid like this:

carbon (6).pngAlso ini files have CP-1251 encoding, which makes them unreadeable by ScummVm’s ini class. So I have created pull requests(1, 2) to fix those issues.

Also, I have implemented saving/loading system.

Saves in those games have such structure:

carbon (4).png

Considering the walking system, I continue to reverse it. I have encountered some problems with it, because it is highly connected with other parts of the engine, so I  review other parts and add things that I have missed earlier.

But this is only the one thing that has left. After implementing it the engine should be playable.

I will create the engine pull request when the pull requests concerning ini reader will be accepted.