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