HomeGamesUpdatesPricingMethodology
Steam News2 April 20263mo ago

1.2.0

## 1.2.0 ### ML-Agents Integration — OrcCommander AI - OrcCommander trained ONNX brains now drive enemy spawning during normal gameplay based on difficulty (Easy=random heuristic, Normal=early-training brain, Hard/Night

Full notes

Full Defender of the Orcish Marches update

Read the full published notes in a cleaner layout. The original post stays linked below.

What changed

1 fix3 additions0 changes3 removals
  • Store
  • Gameplay
  • UI and audio
removed### ML-Agents Integration — OrcCommander AI - OrcCommander trained ONNX brains now drive enemy spawning during normal gameplay based on difficulty (Easy=random heuristic, Normal=early-training brain, Hard/Nightmare=fully trained brain) - Removed DefenderAgent, MLBallistaController, and MLWallPlanner — the ML defender that was auto-purchasing upgrades, auto-firing the ballista, and dispatching menials without player input - Cleaned up MLRewardTracker and MLTrainingManager to remove all defender agent reward signals and registration
added### Gameplay Options - Added Auto Ballista setting — when enabled, the ballista automatically targets and fires at the nearest enemy in range with lead prediction - New GAMEPLAY section in Options screen with Auto Ballista toggle - Auto Ballista defaults to off; persisted via PlayerPrefs
added### Input - Added default gamepad bindings for upgrade slots 5 (Left Trigger), 6 (Right Trigger), and 7 (Select)
added### Localization - Added `options.gameplay` and `options.auto_ballista` keys to all 5 languages (EN, DE, ES, FR, IT)
fixed### Bug Fixes - Fixed game over screen format errors — `gameover.time_days` passed 2 args to a 3-placeholder format string; now passes minutes, seconds, and days separately with zero-padded seconds (`{1:D2}`) - Fixed `gameover.legacy` passing 1 arg to a 2-placeholder format string, then double-formatting the result via `AppendFormat`; now passes both legacy points and rank title directly to `L()` - Fixed `gameover.rank` duplicating ` ` tag (once in localization string, once in code wrapper) - Fixed `gameover.synergy` duplicating ` ` tag (once in localization string, once in code wrapper)
removed### UI - Save & Quit button now sets `sizeDelta` directly instead of `LayoutElement.preferredWidth` for correct width when parent layout group has `childControlWidth` disabled - Pause menu button width growth (`GrowAllButtonsToFitText`) now sets `sizeDelta.x` directly to accommodate localized text

Defender of the Orcish Marches changes

removed### ML-Agents Integration — OrcCommander AI - OrcCommander trained ONNX brains now drive enemy spawning during normal gameplay based on difficulty (Easy=random heuristic, Normal=early-training brain, Hard/Nightmare=fully trained brain) - Removed DefenderAgent, MLBallistaController, and MLWallPlanner — the ML defender that was auto-purchasing upgrades, auto-firing the ballista, and dispatching menials without player input - Cleaned up MLRewardTracker and MLTrainingManager to remove all defender agent reward signals and registration
added### Gameplay Options - Added Auto Ballista setting — when enabled, the ballista automatically targets and fires at the nearest enemy in range with lead prediction - New GAMEPLAY section in Options screen with Auto Ballista toggle - Auto Ballista defaults to off; persisted via PlayerPrefs
added### Input - Added default gamepad bindings for upgrade slots 5 (Left Trigger), 6 (Right Trigger), and 7 (Select)
added### Localization - Added `options.gameplay` and `options.auto_ballista` keys to all 5 languages (EN, DE, ES, FR, IT)
fixed### Bug Fixes - Fixed game over screen format errors — `gameover.time_days` passed 2 args to a 3-placeholder format string; now passes minutes, seconds, and days separately with zero-padded seconds (`{1:D2}`) - Fixed `gameover.legacy` passing 1 arg to a 2-placeholder format string, then double-formatting the result via `AppendFormat`; now passes both legacy points and rank title directly to `L()` - Fixed `gameover.rank` duplicating ` ` tag (once in localization string, once in code wrapper) - Fixed `gameover.synergy` duplicating ` ` tag (once in localization string, once in code wrapper)

## 1.2.0

### ML-Agents Integration — OrcCommander AI - OrcCommander trained ONNX brains now drive enemy spawning during normal gameplay based on difficulty (Easy=random heuristic, Normal=early-training brain, Hard/Nightmare=fully trained brain) - Removed DefenderAgent, MLBallistaController, and MLWallPlanner — the ML defender that was auto-purchasing upgrades, auto-firing the ballista, and dispatching menials without player input - Cleaned up MLRewardTracker and MLTrainingManager to remove all defender agent reward signals and registration

### Gameplay Options - Added Auto Ballista setting — when enabled, the ballista automatically targets and fires at the nearest enemy in range with lead prediction - New GAMEPLAY section in Options screen with Auto Ballista toggle - Auto Ballista defaults to off; persisted via PlayerPrefs

### Input - Added default gamepad bindings for upgrade slots 5 (Left Trigger), 6 (Right Trigger), and 7 (Select)

### Localization - Added `options.gameplay` and `options.auto_ballista` keys to all 5 languages (EN, DE, ES, FR, IT)

## 1.1.2

### Bug Fixes - Fixed game over screen format errors — `gameover.time_days` passed 2 args to a 3-placeholder format string; now passes minutes, seconds, and days separately with zero-padded seconds (`{1:D2}`) - Fixed `gameover.legacy` passing 1 arg to a 2-placeholder format string, then double-formatting the result via `AppendFormat`; now passes both legacy points and rank title directly to `L()` - Fixed `gameover.rank` duplicating ` ` tag (once in localization string, once in code wrapper) - Fixed `gameover.synergy` duplicating ` ` tag (once in localization string, once in code wrapper)

### UI - Save & Quit button now sets `sizeDelta` directly instead of `LayoutElement.preferredWidth` for correct width when parent layout group has `childControlWidth` disabled - Pause menu button width growth (`GrowAllButtonsToFitText`) now sets `sizeDelta.x` directly to accommodate localized text

## 1.1.1

### Enemy AI - Suicide, ranged, and artillery enemies no longer divert when a nearby enemy dies — they stay on mission - Stuck detection and idle retargeting now only apply to melee and wall-breaker enemies — ranged enemies standing still to shoot are no longer incorrectly flagged as stuck

Source

Steam News / 2 April 2026

Open original post

Changelog.gg summarizes and formats this update. How we read updates.