Posts

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 Supernova ,  Text to speech ,  Encoding 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 f

Vacation update

Hello, last week I was on vacation, so I have done almost no work and that's why this blog post will be a bit shorter. I worked only on the text to speech project. I had to rework quite a big parts of the Windows and Linux managers, because I used SAPI's and speech-dispatcher's queues to easily queue speeches and that didn't give me the needed control over the queues to properly implement the INTERRUPT_NO_REPEAT action I wrote about in last post. So now I use my own queues and start speeches one by one in a separate thread. The goal for this last week of GSoC is clear: finish TTS and encoding conversion projects and create pull requests for them. Hopefully I can achieve this goal.

TTS almost done

Hello readers, since the last blog post, the TTS project slowly but surely neared it's end. I added OSD message and GUI tooltip reading. We added the possibility to choose what should happen if the TTS gets request to read a message while another message is being read. So it can be added to a queue, it can just be ignored, or it can interrupt the current speech and get read instead (more actions, which depend on the first message in queue are possible). Before only interrupting the currently read message and reading the new one instead was possible. Me and Criezy (who implemented the macOS part) understood some actions differently, so right now the INTERRUPT_NO_REPEAT action, which will interrupt the current speech and delete the speech queue only if the new message is different than the currently spoken message behaves differently on Windows and Linux (it interrupts and deletes the queue if the last message in queue is different, not the currently spoken one.) Once I reimplement t

Project update

Hello, last week I have been making some finishing touches to the TTS project. I improved voice mapping in the Mortvile Manor game, because I used to use pitch values from the original game to map the characters to different voices. That would mean for example that if a user has only 3 female voices available, both female characters would map to the same voice. So I added an array of voice indices, so the voices map as evenly as possible. I improved TTS in GUI, but that still needs some more work. But the biggest addition to the TTS actually isn't from me, because Criezy implemented TTS for Mac OS, which I couldn't do (I don't own a Mac). Because TTS is almost finished, I started to work on my next project, which is adding a way to convert between different character encoding. Right now, if you need to convert between encodings, you can: use the U32String class to convert between a few encodings. use TransMan (if TransMan is enabled) to convert between unicode and cur

Mortville Manor TTS

Image
Hello, in the past week, I worked some more on the TTS project. First I finished the GUI TTS, I needed to make sure, that everything behaves the same way on Windows and on Linux and I had to make sure I free everything I allocate. I even had to implement reference counting for a class, which wasn't that hard, but it still was pretty interesting, because I have never needed to do this. I also had to implement conversion of the text being said to UTF-8. On Windows this involved adding a  table to the code, which would allow looking up codepage identifier by its name. On Linux I just used SDL_iconv_string, which can convert from most of the GUI encodings, but unfortunately it seems, it cannot convert from CP850, which is apparently quite often used by game engines (it is used by the Mortevielle engine and also by the supernova engine). So right now I just convert the strings like if they were in ASCII (most of the encodings are just ASCII extensions, so I hope to successfully convert

ScummVM speaks

Image
Hello readers, first I might have to apologize, because with how busy I was at the end of last week, I actually forgot, I should write a blog post. But at least now I have a lot more to show you. The Mission Supernova project is near it's end, I created a pull request with the work I have done on it and right now it waits to be reviewed by the ScummVM community. You can find the pull request  here . This allowed me to fully focus on my next project, which is the text to speech. First I implemented the TTS on Linux, which was pretty easy, because the speech-dispatcher API is quite simple to use (A lot simpler then SAPI from Microsoft). The code for that should be close to finished, I just need to add some checks in a few places. Then, so I can test the TTS, I implemented reading of text in the GUI (A blind user could use this to navigate through the menus and maybe play some game, which also uses the TTS to read text). I spent quite a while doing this, because I wasn't sure

GSoC update

Hello, last week I almost finished the Supernova engine. All of the bugs I managed to find should be fixed, I added translations to most images and help files, I merged .dat files with translations for each game and tools to create them into one and I also added the "improved" mode. Right now the improved mode: In the first game Automatically dresses and undresses the player from space suit every time he walks through the airlock (after he first does this on his own). Automatically closes one side and opens the other side of the airlock (after the player first walks through the airlock on his own). In the second game Enables using go verb alongside with push verb to interact with the puzzle tiles inside the pyramid (that way the player doesn't have to click on push in between puzzle interactions and can focus only on solving the puzzle) Enables using go verb alongside with push verb to interact with the password locked door inside the pyramid The only thing