Final Code (Originally From a Page on My Blog to Submit to GSoC Evaluation on Aug 23)

Time to put all the work in one place! ✊

Requirements from GSoC goes like this (only relevant guidelines are shown)

  • It must be easy to identify the work you have done.
  • Someone else should be able to use the content at (or referenced from) the target of the link to extend your work.
    • If your work is 100% complete, they should be able to use it.
    • If your work is not 100% complete, it should be clear what’s left to do

✅ My work consists of multiple independent small projects. I will present the ones that are fully functioning with links to their PR, and todos plus progress of those that are not

✅ All the changes are put together as pull requests

All the PRs can be found here

They are ranked by the order I started working on

GRIFFON: Text To Speech (TTS) for the Game #2912

#Merged April 4 – Jun 9 Most were done before coding phase

DREAMWEB: Text To Speech (TTS) for the game #3048

#Ready to Merge

SCI: Text To Speech (TTS) for Laurabow2 and Castle of Dr. Brain #3256

#More Requests

The TTS functions work, but it is requested to be done a different way

CGE: Text To Speech (TTS) for the Soltys Game #3155


CGE: Change declaration place and descriptions #3177


CGE2: Text To Speech (TTS) for the Sfinx Game #3156


SUPERNOVA: Text To Speech (TTS) for the game #3267

#Ready to Merge

Aug 12 – Aug

👀 Comparing with initial proposal

In the initial proposal there are 4 games and 3 demos, plus an extra stretch goal to make the options more accessible.

I have 4 games that are merged or ready for merge, and 2 games plus 2 demos that are working but needs a better way to implement it and other function checks.

2 of the games that can be merged didn’t belong in the proposal, but engines that are easier and would benefit more from the feature (Supernova 1 & 2, CGE2), so we did it.

For the things that are proposed but not finished or mentioned above:

  • 1 demo: Because it was difficult in its nature (LB1 demo)
  • 2 games: One of the games (Sword) have speech already (the version I played before the coding period didn’t have speech). The other was not done simply because I had problem playing it for some time. So to maximize the number of games done, I switched to doing TTS for other games.
  • Stretch goal: It isn’t touched, but I’ve checked and it turns out that in order to enable TTS, one can also just use the GUI option that is included in the project, and they will never have to deal with the initial problem I proposed.

📖 Overview of progress

🔥Apr – May Proposal Stage. Started Griffon PR

At this stage, I started working on giving Griffon text to speech, opening a PR and writing the project proposal. Although I have not been admitted to the program yet, the experience I have already had isn’t something easily taken for granted.

We had speech for the opening story and in game options, but in a rough way that was worked on much more afterwards.

🏃🏻May – Jun Student List Announced. Continue with Griffon and Starting Engines in the Proposal

After the proposal stage, I continued working on Griffon, and eventually Dreamweb. Griffon got merged on the first day of the coding period.

I think it would have been a better idea to raise the question about the project scope and directly discuss with my mentors. Well but you never know…or do you?

🧗🏻‍♂️Jun – July Everything “seemed” to be on schedule, even ahead of schedule, if not thinking about wrapping up

According to the proposal, Dreamweb only needs to finish the narrator part in June. However upon realizing that it makes more sense to work on one engine at a time, I proceeded to do TTS for the navigator (scheduled in August). I stopped only when there was a bug (one tts interrupting another, resulting in a tts not working, we didn’t know the cause) that wasn’t solved over a month later.

Although deep down I know that there’s still a lot waiting for me to wrap up, the first week’s progress seemed to have went well, even passing with flying colors. At least I’ve completed the face value of things.

On the following 3 weeks I was suppose to work on Laurabow2, Castle of Dr. Brain, and Laurabow1. Their code was challenging in the size of its code and complexity, but after wiggling around I was able to find lots of places that had text.

I also realized that the 3 games were all ran by the same engine (SCI), so it makes a lot of sense to extend the project scope to not only giving TTS to the demo, but also the games.

However I know that there are lots of corners (or new worlds) that is not done with TTS. So I paused after getting Laurabow2 and Castle of Dr.Brain to work, and leaving Laurabow1 with its problems (speech continuing after text box vanishes)

Bearing this in mind, I started doing CGE earlier. It was a much easier TTS task, and I felt very happy about having the experience with SCI, because of that engine I was able to take CGE as an easy task.

Meanwhile, dreamweb got its breakthrough, and the functions were done eventually.

🚵🏻‍♀️July – Aug Dreamweb & SCI both takes time to wrap up. Opening new games to try maximize number of games with TTS

CGE2 is added to the project scope because it was a lot like CGE. The difficulty was also similar. Although there was trouble during the process, they eventually became the first to games to get merged.

We had a discussion over combining all the TTS code in dreamweb to one function in dreamweb.cpp. This task started and then stopped because I couldn’t find a simpler way to do that.

Later on after getting in touch with SCI engine developers, I realized that that the barriers in Laurabow1 can’t be overcame. So I started wrapping up to created the PR for SCI.

At the same time, I decided to do TTS for more games, and ended up making changes to Beneath A Steal Sky, Dragon History, and Supernova (1 & 2), for which the third became successful with getting TTS.

Dreamweb got wrapped up around the same time as Supernova.

On the SCI side, we needed things to be more tidy, so the next thing is to combine all TTS features to a new class.

🧘🏼 Reflections

1. I though that it would take up less and less time to teach me

I really wanted every time I learn something to be sort of an investment, and one day I would be able to do everything without facing big problems

What happens though is that I get faster at making progress, and we see new things in new engines, so the amount of reaching out doesn’t decrease significantly 😅

2. A big thing that’s holding me back is myself.

Getting into work mode is like going to the gym, or getting up with an alarm. It’s so easy to give up.

Sometimes I get a lot done, and the happiness with last through what’s left of the day. Accomplishments, however, can never be foreseen, and it does take practice to convince the brain to sit down, concentrate, and put in the hours.

Surprisingly, it has been easier to calm myself to work than it was before. Probably because my strategy is that I would book the same time everyday for doing this project. Eventually, other alarms in life don’t try to compete my attention with TTS reserved time.

This is something really valuable, and I plan continue to work like this for a while, to better make sure I will finish this.

3. Accepting software development as an IQ test may not be the best attitude

Lot’s of times I try to figure out things by basing on what I know about C++, and thinking what it does, and testing it to see how it behaves. Only during the last week did I try to pick up a book and try to build a better picture.

Nevertheless, it has been quite an experience. It’s challenging and makes me a braver person than I usually am.

🙏🏻 Thank You

It would not have been possible if not for the mentorship I’ve received. Thank you to all the developers that have helped me out with all the problems and reviewed my code.

Whole-hearted thanks to my mentor criezy, who made the 5 months here a rewarding journey that is not lonely; my mentor Kesha, who has spent time guiding me on dreamweb and other games. I had the best time possible while working with my mentors.

I’m also extremely grateful to sev, who is my superman and enlightener, and every developer that has shared their time and attention with me, sluicebox, bluegr, mgerhardy, lephilousophe, felsqualle, frac, Strangerke, SupSuper, and ZvikaZ.

Thank you for reading this blog and visiting the gsoc-t-tts channel, too.

This is my last summer project as an undergrad (or even as a student), and I will remember it.

Leave a Comment