This has been succeeded by widebrim, a more complete engine recreation that can do everything this can do and much, much more. This remains as a reference, please use that instead!
Depreciated Python-based engine reimplementation for early NDS Layton games.
shortbrim is an experimental high-level reimplementation of parts of the Layton game engine. It was written for fun and is not based on decompilation, just observation.
- Game backup support, no unpacking required
- Interactive puzzle playback
- Hit-or-miss event playback
- Incomplete room playback
- Great code design
- Amazing compatibility
- Complete support for puzzles
- Complete support for events
- Complete support for rooms
- Support for story, nor progression
- Support for sound or movies
- Guarenteed multi-lingual support - only English tested
- Bulletproof research
shortbrim alone cannot play anything fully, or to an enjoyable degree. Many features are missing and left incomplete. It is best used as a debugging tool, and useful for any researchers looking into the game.
Expect bugs, and identical behaviour to the games themselves is not guarenteed. Have fun exploring various files inside the game, looking at individual room states, playing individual events, etc. Feel free to use any research about assets, loading routines, events, pathing and binary formats.
shortbrim has since been adapted into a library, madhatter. The engine was rewritten as widebrim, which is accurate and based on reverse-engineering, but is LAYTON2 specific. widebrim has full story support so the game can be played properly.
If you use any parts of this code, please credit me or the original contributor! Alternatively if you need clarification, send an issue or contact me.
- LAYTON1 (Professor Layton and the Curious Village)
- LAYTON2 (Professor Layton and the Diabolical / Pandora's Box)
LAYTON2 is recommended over LAYTON1. It is far more developed.
- Python 3
- pygame - developed with 1.9.x, probably works on later versions
- ndspy
- Pillow
- Install all dependencies above
- Clone correct branch - master branch for LAYTON1, layton2 branch for LAYTON2
- Add game backup to root folder (recommended) - call it rom2.nds for LAYTON2, or rom1.nds for LAYTON1
- Alternatively, use the unpacking script in the tools folder to convert assets to more friendly formats. This is legacy though, and has worse compatibility and may introduce bugs. Use with caution. The paths for both unpacked and packed assets can be changed in conf.py
- Finally, open the handler of your choice from the engine folder. Edit the last lines to change parameters.
- Tinke for reversing and research
- DSDecmp for file routines
Any missed credits should be given inside files, please raise an issue if I've missed someone!