The Art of Conquest, Automated.
Two themes. One power. Switch instantly in CONFIG → UI THEME.
Get the Tampermonkey extension for your browser. It runs userscripts on any page.
Click the download button below to install the TerriX Executor script from GreasyFork.
Complete exploit suite: GodBot v5.0 cycle-aware AI, ESP overlay, minimap, multi-tab sync, configurable strategies, attack queuing, and full custom scripting support.
Install v3.0Buy, sell, and trade TerriX scripts, strategy configs, Discord Nitro, and exclusive accounts securely using Gold or Keys.
Open MarketplaceBrowser-style tab manager. Open multiple TerriX Client instances in iframes with BroadcastChannel sync, right-click context menus, and session persistence.
Open ManagerAfter installing Tampermonkey and the TerriX Executor script, open the TerriX Client and join a game. Once the game loads, you will see a green TERRIX v3.0 bar at the top of the screen. Click it (or press F2) to open the Executor panel.
The Executor panel has 5 tabs on the left sidebar:
GameInterface (alias GI), window.G, and TERRIX objects.
GodBot v5.0 is a complete strategic overhaul. It doesn't just react to current ratios — it reads the game's internal clock, estimates distances to enemies, predicts future troop density, and switches between spatial modes to maximize income while surviving contact.
GI.getCycleTick()) and times attacks accordingly. Bot attacks happen early (ticks 0–70) for long-term ROI. Enemy attacks happen late (ticks 85+) to steal land right before income payout.
troops/land for you and every neighbor. It won't over-expand into neutral land if it would leave you vulnerable to a bordering enemy with 2× your density.
GI.isVulnerable() returns true (a bordering neighbor has >1.2× your density), GodBot reinforces the border instead of expanding.
Open the CONFIG tab to customize all GodBot v5.0 parameters:
| Strategy | Balanced / Aggressive / Defensive / Rush — controls attack intensity and risk tolerance |
| Expand Ratio | Troops must exceed territory × this value to expand into neutral land (default: 2.0) |
| Attack Ratio | Troops must exceed territory × this value to attack enemies (default: 3.0) |
| Retreat Ratio | Retreat when troops fall below territory × this value (default: 0.3) |
| Tick Rate | How often the bot makes a decision, in milliseconds (default: 600ms) |
| Bot Attack Window End | Tick at which bot/neutral expansion attacks stop (default: 70). After this, only enemy snipes. |
| Snipe Window Start | Tick at which late-cycle enemy sniping begins (default: 85) |
| Snipe Intensity | Fraction of troops to use per snipe attack (default: 0.4) |
| Density Parity Min | Minimum ratio of your density vs enemy density to allow attacks (default: 0.8) |
| Close Range (px) | Pixel distance to nearest enemy for CAUTIOUS mode (default: 150) |
Load and execute the Threat Radar script. It monitors all incoming ships every 300ms. When a ship targets your territory, the panel header flashes red and a warning is logged to the console. Useful as an early-warning system while multitasking.
Enable the minimap in the CONFIG tab. A canvas overlay appears showing:
Adjustable: size (px), opacity, position (4 corners), and refresh rate (200ms).
The Editor gives you a JavaScript REPL with these globals:
G | The raw game hook — direct access to all game objects (G.ag, G.aD, G.ac, etc.) |
GI | GameInterface — safe wrapper with defensive property access and fallbacks |
TERRIX | The Terrix namespace — config, loops registry, version |
Logger | Prefix-tagged console logger ([TerriX]) |
Core Methods:
GI.myId | Your player ID |
GI.getMyTroops() | Your current troop count |
GI.getMyTerritory() | Your territory tile count |
GI.getPlayerTerritory(id) | Territory count for any player |
GI.isPlayerAlive(id) | Whether a player is alive |
GI.getPlayerName(id) | Player name string |
GI.areAllies(p1, p2) | Alliance check |
GI.sendAttack(intensity, targetId) | Attack a player |
GI.sendAttackTile(intensity, tile, targetId) | Attack a specific tile |
GI.retreat() | Retreat all troops |
GI.getBorderTiles(id) | Array of border tile encodings for a player |
GI.getNeighbors(tile) | Array of 4 adjacent tile encodings |
GI.getTileOwner(encoded) | Owner player ID of a tile |
GI.isNeutral(encoded) | Whether a tile is unowned |
GI.tileToXY(encoded) | Convert tile encoding to {x, y} coordinates |
v5.0 Strategic Methods:
GI.getCycleTick() | Current tick within the 100-tick interest cycle (0–99). Interest paid at tick 0. |
GI.getCycleProgress() | Cycle position as a float 0.0–1.0 (getCycleTick() / 100) |
GI.getDensity(id) | Troops per land unit for a player. Higher = harder to kill. Omit id for yourself. |
GI.getDistanceToPlayer(id) | Pixel distance between your center and another player's center |
GI.getTimeToContact(id) | Estimated ticks before an enemy reaches your border (distance / 3) |
GI.predictDensityAtContact(id) | Returns {myDensity, theirDensity, ticksToContact, myFutureTroops, theirFutureTroops} — projects both players' density at the moment of contact |
GI.predictResources(id, ticks) | Estimates a player's troop count N ticks in the future |
GI.isVulnerable() | Returns true if any bordering neighbor has >1.2× your density |
GI.shouldSnipe(id) | Returns true if attacking this enemy near cycle end is profitable (density parity OK or they're weak) |
GI.getAlivePlayers() | Returns array of {id, name, troops, territory, team, isMe, density} for all living players |
The Code Executor lets you write custom automation scripts using the full GameInterface API. Here's how to get started:
Basic Script Structure:
if (TERRIX.loops.myScript) { clearInterval(TERRIX.loops.myScript); TERRIX.loops.myScript = null; Logger.log("Stopped"); return; } TERRIX.loops.myScript = setInterval(() => { if (!GI.isPlayerAlive(GI.myId)) return; // your logic here }, 500);
Example 1 — Density-Aware Expansion: Only expand if your density stays above 1.0 after the attack:
const troops = GI.getMyTroops(); const land = GI.getMyTerritory(); const density = GI.getDensity(); if (land > 0 && troops > land * 2.5 && density > 1.0) { const tile = GI.expandToNearest(); if (tile) { const cost = troops * 0.25; const newDensity = (troops - cost) / land; if (newDensity >= 0.8) { GI.sendAttackTile(cost, tile, -1); Logger.log("Expanding, new density:", newDensity.toFixed(2)); } } }
Example 2 — Cycle-Aware Enemy Snipe: Attack the weakest bordering enemy in the last 15 ticks of each cycle:
const tick = GI.getCycleTick(); if (tick < 85) return; // too early const enemies = GI.getAlivePlayers().filter(p => !p.isMe); enemies.sort((a, b) => a.troops - b.troops); for (const e of enemies) { if (!GI.shouldSnipe(e.id)) continue; const tile = GI.findBestAttackTile(e.id); if (!tile) continue; const troops = GI.getMyTroops(); const intensity = Math.min(troops * 0.4, 1024); GI.sendAttackTile(intensity, tile, e.id); Logger.log("Snipe!", e.name, "tick:", tick); break; }
Example 3 — Threat Assessment Dashboard: Log a full strategic overview every 2 seconds:
Logger.log("=== STRATEGIC DASHBOARD ==="); Logger.log("Tick:", GI.getCycleTick(), "Density:", GI.getDensity().toFixed(2)); Logger.log("Vulnerable:", GI.isVulnerable()); const enemies = GI.getAlivePlayers().filter(p => !p.isMe); for (const e of enemies) { const dist = GI.getDistanceToPlayer(e.id); const ttc = GI.getTimeToContact(e.id); Logger.log(e.name, "dist:", dist.toFixed(0), "TTC:", ttc.toFixed(0), "density:", e.density.toFixed(2)); }
if (TERRIX.loops.x) { clearInterval... return; }). Always guard with if (!GI.isPlayerAlive(GI.myId)) return;. Use GI.findBestAttackTile(id) instead of raw tile math. Use the SNIPPET button in the editor for starter templates.| F2 | Toggle the Executor panel open/closed |
| Ctrl + Shift + X | Toggle the Executor panel open/closed |
Open multiple TerriX Client tabs simultaneously. They automatically discover each other via BroadcastChannel and sync attack/retreat/peace actions. Enable in CONFIG → Multi-Tab Settings. Each tab shows its peer count in the console on join.
| "Hook detection failed after 20s" | You are not on the TerriX Client page. Open the correct URL. |
| "Cannot read properties of undefined" | The game updated and property names changed. Run the Debug Dumper script to check current names. |
| Script does nothing | Check the output area below the editor for errors. Make sure you are in a game (not the menu). |
| Panel position lost | Drag the header to reposition. Position is auto-saved every 5 seconds. |
| Config not saving | Tampermonkey requires GM_setValue grant. Reinstall the script if needed. |
| Feature | v3.0 Ultimate | v2.8 Grandmaster |
|---|---|---|
| GodBot AI | ✓ Cycle-aware v5.0 | ✓ Basic |
| Interest Cycle Engine | ✓ | ✗ |
| Density Parity | ✓ | ✗ |
| Spatial Mode Switching | ✓ | ✗ |
| Late-Cycle Sniping | ✓ | ✗ |
| Strategic API (10+ methods) | ✓ | ✗ |
| Retreat Logic | ✓ | ✗ |
| Attack Queuing | ✓ | ✗ |
| Configurable Strategies | ✓ 4 modes | ✗ |
| Live Minimap | ✓ | ✗ |
| ESP View | ✓ | ✗ |
| Multi-Tab Sync | ✓ | ✗ |
| Threat Radar | ✓ | ✓ |
| Leaderboard | ✓ | ✓ |
| Code Executor | ✓ 30+ API methods | ✓ eval() |
| Config Persistence | ✓ GM_setValue | ✗ |
| Debug Tools | ✓ | ✗ |