My project focused on extending ScummVM’s Keymapper system to a larger number of game engines. The Keymapper allows players to remap controls to their liking, but many engines in ScummVM still relied on fixed input handling. By integrating the Keymapper into more engines, the project set out to improve accessibility, provide a consistent user experience, and give players greater flexibility in how they play.
What I did:
I added Keymapper support to 24 engines, fixed a few bugs encountered during the implementations, and helped standardize keymapper action descriptions. This standardization reduces the number of unique strings in the codebase, easing the workload for translators.
The current state:
Keymapper support is now available in 24 additional engines, allowing players to remap controls in a wide range of games that previously relied on fixed input. Several of my pull requests have already been merged into the main ScummVM codebase, and the remaining ones are under review. Overall, the project goals have been successfully achieved, and the improvements are now part of ScummVM’s ongoing development.
What’s left to do:
All goals outlined in my proposal have been completed, I added Keymapper support to the 23(The first one was not part of proposal) engines I had committed to. Beyond the scope of the proposal, there are still around 40 engines in ScummVM without Keymapper support, which could be future work for anyone interested in continuing this effort.
List of PRs:
- Toltecs keymapper: Pull Request
- Sludge keymapper: Pull Request
- Supernova keymapper: Pull Request
- Voyeur keymapper: Pull Request
- Titanic keymapper: Pull Request
- Normalize keymapper action descriptions: Pull Request
- Sword25 keymapper: Pull Request
- TeenAgent keymapper: Pull Request
- NGI keymapper: Pull Request
- Buried keymapper: Pull Request
- Access keymapper: Pull Request
- EFH keymapper: Pull Request
- Sherlock keymapper: Pull Request
- Neverhood keymapper: Pull Request
- Prince keymapper: Pull Request
- Lab keymapper: Pull Request
- Petka keymapper: Pull Request
- Queen keymapper: Pull Request
- Fix capitalization in Queen keymapper action descriptions: Pull Request
- Pink keymapper: Pull Request
- Drascula keymapper: Pull Request
- Chamber keymapper: Pull Request
- Make EFH keymapper table use POD and avoid global constructors: Pull Request
- Hypno keymapper: Pull Request
- DM keymapper: Pull Request
- Private keymapper: Pull Request
Any challenges or important things you learned during the project:
Each engine in ScummVM handles input differently, so I had to study and adapt to new codebases before adding Keymapper support. In doing so, I often uncovered and fixed unrelated bugs. Working on a new engine every 3–4 days also greatly improved my ability to read, understand, and modify existing code, and gave me confidence in working with large, mature projects.
Conclusion:
This project successfully achieved its goals by bringing Keymapper support to 24 engines in ScummVM, making input more flexible and accessible for players. Along the way, I learned how to work effectively with large codebases and contribute to a mature open-source project. I’d like to thank my mentors and the ScummVM team for their guidance and support, and GSoC for giving me the opportunity to work on a project that will benefit both developers and players.