Bot ecosystem overview
Bots are where LocalGen becomes more than an offline strategy game. They power quick solo matches, make LAN sessions more interesting, and turn the project into a genuine playground for AI experimentation. Better yet, the project docs explicitly invite new bot contributions.
The upstream documentation distinguishes two major categories:
Built-in bots
- stored in
src/bots/ - compiled into the LocalGen executable
- written in C++ for deep integration and speed
- stored in
External bots
- separate executables written in any language
- connected through a network-facing protocol
- intended to broaden participation beyond C++ contributors
Current built-in bot roster
| Bot | Enabled | Complexity | Approx. turn cost | Summary |
|---|---|---|---|---|
| DummyBot | No | Low | $O(n)$ | Example heuristic greedy |
| SmartRandomBot | Yes | Low | $O(n)$ | Largest-stack greedy baseline |
| XrzBot | No | Low | $O(n)$ | Focused random greedy |
| ZlyBot | Yes | Medium | $O(n)$ | Single-focus BFS heuristic |
| ZlyBot v2 | Yes | Medium | $O(n \log n)$ | Memory-aware weighted search |
| ZlyBot v2.1 | Yes | Medium | $O(n \log n)$ | Dual-focus defensive search |
| SzlyBot | Yes | Medium | $O(n)$ | Terrain-weighted BFS heuristic |
| GcBot | Yes | Medium | $O(n)$ | Adaptive heuristic BFS |
| XiaruizeBot | Yes | High | $O(kn^2)$ | Multi-source strategic search |
| KutuBot | Yes | High | $O(n \log n)$ | Unified strategic objective planner |
| LyBot | No | High | $O(n^2)$ | Multiplayer objective planner |
| oimBot | Yes | High | $O(n^3)$ | Stance-based strategic planner |
Reading the complexity column
Let $n$ denote the number of relevant tiles a bot inspects during a turn, and let $k$ denote the number of frontier candidates or strategic branches it keeps alive.
$$ T_{\text{match}} \approx \sum_{t=1}^{s} T_{\text{bot}}(n_t) $$
That shorthand is why a jump from $O(n)$ to $O(n \log n)$ can become visible in long simulator runs: the per-turn difference compounds over hundreds of steps, especially when you are benchmarking many games instead of playing just one.
src/bots/MyBot.cpp
├─ include src/core/bot.h
├─ derive from BasicBot
├─ implement init(...)
├─ implement requestMove(...)
├─ register the bot via the documented macro
└─ add the file to PROJECT_SOURCES
Built-in bot submission checklist
The upstream built-in bot README expects every bot in src/bots/ to satisfy all of the following:
- The implementation is written in C++17-compatible code.
- The full bot lives in a single
*.cppsource file. - That file includes
src/core/bot.h. - The class inherits from
BasicBotand overridescompute. - The bot is registered through the
REGISTER_BOTmacro. - The source file is added to
PROJECT_SOURCESin the top-levelCMakeLists.txt.
What a strong bot contribution includes
- tests, replays, or benchmark evidence
- clear notes about performance and memory behavior
- strategy deeper than a placeholder random walker
- for external bots, setup instructions plus supported runtime / OS details
Ready to build something smarter?
- Read the mirrored Bot Contributions guide
- Check the Built-in Bots document for exact submission requirements
- Explore the simulator page if you want to benchmark bots head-to-head