Root: The Clockwork Companion
March 29, 2026 ยท View on GitHub
A helper app for Root: a Game of Woodland Might and Right.
This app runs the Clockwork bots.
All rights for images and other assets go to Leder Games.
Resources:
Running The App
Requires nodejs
npm inpm run start
Building The App
This will build it in prod mode.
npm run build
Adding new Factions
Initialize the Faction
src/app/<faction>/*.{html,scss,ts}- copy from another faction and change the namessrc/app/models/bot.ts- updateBotNameand insert a new factionsrc/app/models/<faction>.ts(copy as another template, ensure consistency with existing models)src/app/models/index.tsadd an export for<faction>.tssrc/app/home/home.module.ts- add the new bot component todeclarationssrc/app/faction-menu/faction-menu.html- add a new category to the dropdown for the new botsrc/app/faction-menu/faction-menu.ts- add in the new factions and categories (and add new icons to/app/assets/inicon/<faction>.png)src/app/bot.service.ts- update imports for new factionsrc/assets/i18n/en-US.json- add the faction name toFactionsShortandFactions
Customize the Faction
Setup
The Law of Rootbotics is easy to reference at the root database for finding all the nitty gritty details.
src/app/model/faction.tshouses the outline for your factions setup, difficulty, traits, and actionssrc/assets/i18n/houses the actual text for these components in the various languages. You'll want to address as required:
SpecificSetup
SpecificDifficulty
SpecificRules
SpecificBirdsong
SpecificDaylight
SpecificEvening
SpecificExtra
i18n
There is an included script that will detect missing properties in the i18n JSON files. Usage:
npm run i18nAudit
Some of the Dev choices for customizing
How do I get the inline suits to change with the order card?
Look in the renderer.services.ts to see the renderer.strong formatter for how the project handles inline formatting. In the JSON input card:{{suit}} and then ensure that your model .ts file can reference it with lines like the following:
const suit = this.customData.currentSuit;
this.createMetaData('text', '', translate.instant(`SpecificBirdsong.Cogwheel Corvids.RecruitOrder`, { suit }));
Good references for pulling data or images
- https://www.therootdatabase.com/clockwork/riverfolk-robots/?lang=en
- https://www.reddit.com/r/rootgame/comments/13gy8pe/does_anyone_have_like_pngs_of_the_meeple_icons/
- https://therootdatabase.com/workshop/
Angular migration
This project migrated from Angular 8->22. If something looks funky it was probably because of the schematics/auto fixes implemented or the quick band-aids to fix broken SCSS or NG0100 errors (I hate them)