Project Goals
The main goal of this project was to add text-to-speech, or TTS, to a variety of ScummVM engines. TTS enhances the accessibility of games supported by these engines and helps language learners. Furthermore, adding TTS to more engines standardizes the implementation of this feature, meaning the inclusion of TTS will be more consistent across engines. Adding TTS to an engine entails adding responsive voicing of text elements such as dialogue, menus, user input, objects, and credits, as well as adapting TTS to user actions and the functionalities of the games themselves.
What was Done
The original goal of the project was to add TTS to 12 engines, but I had enough time to add TTS to an additional 3 engines. Therefore, I added full TTS support to a total of 15 engines over the summer. In addition, I added TTS to 2 engines prior to the official start of GSoC, and I helped fix a few bugs for one engine.
Current State
All of my pull requests have been merged, meaning 17 engines now have full TTS implementations. Games that use these engines should have comprehensive and usable TTS.
What’s Left
All of my project’s goals, as well as a few stretch goals, have been completed. Nonetheless, some engines that support a wide variety of games, such as SCUMM, may need additional testing by end users. Any required changes found from this testing should only be tweaks to behavior: the core of the TTS implementations themselves should be complete. In addition, there are still a few engines left that need TTS support.
Code
Most PRs are for adding TTS to certain engines, but some are fixes for previously merged code. The following is a list of each PR I opened:
- TTS for Drascula: https://github.com/scummvm/scummvm/pull/6526
- TTS for TeenAgent: https://github.com/scummvm/scummvm/pull/6566
- TTS for WAGE: https://github.com/scummvm/scummvm/pull/6669
- Fix for Russian TTS for TeenAgent: https://github.com/scummvm/scummvm/pull/6722
- TTS for Cine: https://github.com/scummvm/scummvm/pull/6700
- TTS for CruisE: https://github.com/scummvm/scummvm/pull/6710
- TTS for Draci: https://github.com/scummvm/scummvm/pull/6742
- Fixes for TTS for CruisE: https://github.com/scummvm/scummvm/pull/6752
- TTS for MADE: https://github.com/scummvm/scummvm/pull/6779
- TTS for ADL: https://github.com/scummvm/scummvm/pull/6785
- TTS for Parallaction: https://github.com/scummvm/scummvm/pull/6795
- TTS for Prince: https://github.com/scummvm/scummvm/pull/6807
- TTS for EFH: https://github.com/scummvm/scummvm/pull/6820
- Bug fixes for EFH: https://github.com/scummvm/scummvm/pull/6821
- TTS for MM: https://github.com/scummvm/scummvm/pull/6835
- Czech and Polish TTS for TeenAgent: https://github.com/scummvm/scummvm/pull/6867
- TTS for SCUMM: https://github.com/scummvm/scummvm/pull/6856
- TTS for AGI: https://github.com/scummvm/scummvm/pull/6862
- TTS for Gob: https://github.com/scummvm/scummvm/pull/6880
- TTS for Got: https://github.com/scummvm/scummvm/pull/6888
- Fix for TTS for Got: https://github.com/scummvm/scummvm/pull/6900
- TTS for Hugo: https://github.com/scummvm/scummvm/pull/6897
Challenges and What was Learned
Ensuring TTS compatibility across numerous games, languages, and versions that a single engine may support was sometimes challenging to comprehensively address. Furthermore, some engines handle their text almost entirely with game scripts, which makes it more difficult to narrow down where text is being displayed and how to feed it to TTS. To address these problems, I had to test thoroughly, think about limitations and features that differ between games or platforms, and employ strategies such as recreating click boxes to properly voice text as the user interacts with the game. Thus, most challenges with adding TTS revolved around compatibility and logical voicing of text elements.
I learned a great amount this summer about working with a team, understanding and modifying code written by other developers, and writing code that fits into an existing codebase. I am now more comfortable with navigating and working on larger projects.
Conclusion
I enjoyed working on my Google Summer of Code project, and I found it to be a very entertaining and rewarding experience. I am happy that I was able to contribute something to ScummVM, and I hope that it will be helpful to users.
I would like to thank my mentor, criezy, for kindly guiding me throughout the summer, and sev, for guiding me as well. I would also like to thank all members of the ScummVM team that I interacted with for their patience and assistance, and the entire ScummVM team for their work on this application.