LHDF AI
by Boomstick Barry
1.0.7
## [1.0.7] ### Added - AI group plans from LHDF Core (set by LHDF Encounters): a group's doctrine is its Game Master override, else its plan's doctrine, else its faction's; a plan's ambush range applies whatever the doctrine (Encounters' Ambush groups). Needs LHDF Core with AI group plans (1.0.29). - Debug overlay, Groups layer: each group's doctrine and where it comes from (faction, encounter, Game Master), with a planned ambush range.
- Game Version
- 1.8.0.13
- Created
- Fri, 09 Oct 2026 07:35:21 GMT
- Last Modified
- Fri, 09 Oct 2026 07:35:25 GMT
1.0.6
## [1.0.6] ### Fixed - LHDF AI tab: factions after the 10th of the scenario had no section (Lost Hope's Bandit). 24 now, as many as the AI factions checkboxes.
- Game Version
- 1.8.0.13
- Created
- Fri, 09 Oct 2026 00:54:51 GMT
- Last Modified
- Fri, 09 Oct 2026 00:54:56 GMT
1.0.5
## [1.0.5] ### Added - LHDF AI tab in sections (user, 2026-10-09): General (AI factions, the overlay, the live settings), then one section per faction titled with its name, with its Doctrine, Skill and Perception; a Game Master sets a faction's difficulty in game, applied at once and kept in `AI.live.json`. Replaces the Militia factions and Raider factions checkboxes. Needs LHDF Core with editor sections (1.0.28). - Doctrines (design 3.8, revision 6): Professional (as before), Militia and Raiders, per faction (`militiaFactions`, `raiderFactions`, LHDF AI tab: the faction's Doctrine) and per group (a group's "AI doctrine" attribute). A doctrine sets the values of existing keys (flanking, falling back, smoke, medics, grenades, cover time, investigation, upright moves, fire rate at low morale, ammo from bodies, door closing) unless the server owner or a Game Master set them. Needs LHDF Core with `IsKeySet` (1.0.28). - `boundingRoles` (on, live): off, everyone in a fight moves on his own (Raiders). - Difficulty per faction, separate from doctrine: `factionSkill` and `factionPerception`. - Break and flee, `breakAndFlee` (off; Raiders on): below `fallBackBelowMorale` the group runs 80 to 200 m away, preferring a spot out of the enemy's sight over cover, then holds and may come back once its morale recovers. Unlike falling back, it also leaves a defend waypoint (user: bandits do not hold to the death). - Ambush, `ambushRange` (off; Raiders 60 m): a group in fire at will that knows of enemies farther than that, none shooting at it, holds fire and keeps its place; it opens fire when one comes within range or starts shooting. A Game Master's combat mode is never overridden. One ambush per group every 3 minutes. Recorded as `Ambush`. - Formation per doctrine, `formation` (vanilla; Militia StaggeredColumn, Raiders Column), and limits for calm groups, `calmMaxSpeed` (vanilla; Militia and Raiders WALK) and `calmStance` (vanilla; Raiders STAND). Calm: low threat, no living enemy known and no flank, fall back, flee or ambush for 30 s; the limits are lifted the moment that ends and never hold back a soldier reacting to danger. All through vanilla's AI settings below a waypoint's, the scenario's or a Game Master's, which win. Recorded as `Conduct`. - `engageClustersWithin` (off; Militia 400 m, Raiders 250 m): a group without a defend waypoint takes on known enemies only within that distance, on top of any limit the scenario sets (vanilla's autonomous distance). - Looting, `lootRadius` (0; Raiders 25) and `lootMaxItems` (4): while a group is calm (low threat, no known enemy within 80 m), one soldier every 20 s walks to the nearest body with something for him and takes medical items and magazines for his weapons. A body is looted once. Weapons are not swapped; food and water stay.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 23:55:59 GMT
- Last Modified
- Thu, 08 Oct 2026 23:56:05 GMT
1.0.4
## [1.0.4] ### Added - Debug overlay, look (user, 2026-10-09: smoother, more modern): polylines drawn as one line each with a dark outline, fading with distance; translucent filled areas; labels and the panel on dark cards with a stripe of their colour. - Debug overlay, layer Threat zones: where groups suspect enemies, as translucent areas round each enemy cluster coloured by what the group does about it, rings at the targets' last known positions, and a label per cluster. - Debug overlay, layer Selected unit (was Decisions): follows the soldier selected in the Game Master editor instead of the one nearest the middle of the view, and shows his view cone, what he looks at, his current target and the other enemies he knows. - World sense on Core's building catalog (design step 13): interiors, windows and window and door posts come from Core's archetype of the building's prefab, measured once and cached, instead of being read from each building entity. - World sense on Core's terrain grid (design step 13, `docs/tdd/LHDF_AI.md` 3.1): road distance and cover per cell (flanking, falling back, road crossing) come from Core's terrain grid once it is ready, instead of a road query and a sphere query per cell; until then as before. Needs LHDF Core with the terrain grid (the version after 1.0.26). "On a road" (cover refusals) is now tested at the exact point; a cached cell answer called points up to 14 m from a road "on" it. - Beyond REAPER (design step 12, `docs/tdd/LHDF_AI.md` 3.3): - Building posts, `coverBuildingPosts` (on, live): in cover scoring, a cover at a window or exterior door whose outside faces the threat is a full fighting position, and window glass no longer counts as blocking the shot (it did for both probes, so windows looked like walls). - Road crossing, `roadCrossRun` (on, live): a soldier in a combat move, alerted or under fire, sprints while his path crosses a road within 12 m, then goes on at his move's speed. Recorded as `RoadCrossing`. - Flanking, `flankEnabled` (on, live) and `flankPinnedSeconds` (20): a group that attacks one enemy for that long without a kill, with morale over 0.6 and an attacking and a covering fireteam, sends the attacking fireteam 40 to 80 m round the enemy on the side with more trees and buildings, never through water, across an open road or into a safe zone; the covering fireteam keeps firing. Once per group every 2 minutes. Recorded as `Flank` with every point weighed. - Falling back, `fallBackBelowMorale` (0.3, live; 0 off): a group whose morale falls below it moves 50 to 150 m away from the nearest enemy to trees or buildings, not across water or into a safe zone, and holds there in cover for at least 60 s and until its morale is over 0.6. Recorded as `FallBack`. A flank or fall back cut short by its timeout records how many soldiers were still on the way. - World sense: cover per 20 m cell (trees and buildings), windows and exterior doors facing a threat, exact road distance. - Overlay, Groups layer: a running flank (cyan) or fall back (white) as a line to its point; "holding" over a group holding after falling back. ### Fixed - Dedicated server: a building's parts carry no prefab data there, so world sense found no windows and called every door interior; window posts and window glass in cover scoring (`coverBuildingPosts`) never applied, and the overlay drew no windows. Windows now come from Core's catalog, exterior doors are matched to the catalog's by place, and window glass is told by the probe's hit point lying in one of the catalog's windows. - Flanking: the right side was scored with the left side's points added, and a refused point stayed refused for the points after it (loop locals keep their value in Enforce unless initialised), so flanks went left more often and refused every point more often than they should.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 22:31:33 GMT
- Last Modified
- Thu, 08 Oct 2026 22:31:39 GMT
1.0.3
## [1.0.3] ### Fixed - Scope (`docs/reports/LHDF-AI-Architecture-Audit.html` F01): no-indoor-smoke and forgetting a vehicle after a failed GetOut now leave groups and soldiers outside `factions` (and creatures) alone. A group without a leader counts as ours only when one of its members is; its faction alone no longer decides, since it cannot tell soldiers from creatures. - Delayed actions (F04) ask again when they run, not only when they were planned: closing a door behind a soldier (feature on, soldier still ours and AI-driven), getting back on a static gun (bail-out on, soldier ours, not following a player's waypoint), running to cover after getting out (infantry on, radius above 0, soldier ours and conscious) and remaking a kept waypoint's move (keeping on, group ours, not paused by a ladder run). - Debug overlay (F15): a watch ends when `debugAllowed` is switched off or the Game Master's current editor mode is no longer unlimited edit or admin; camera updates from such a player are ignored. Before, the rights were checked only when the watch started. - Scope answers (F02) are kept for at most a minute, so a soldier whose faction changed is asked again, and are all forgotten when Core's creature provider changes (LHDF Project Outbreak installs it once the world is ready, possibly after the first soldiers were asked). - Morale (F03): switching `moraleEnabled` or infantry off, or a group leaving the scope, gives its members vanilla's group fire rate back within about 2 s. Before, the last morale-reduced rate stayed until vanilla set it again. - Stance (F05): leaving useless cover no longer stands soldiers up with `uprightCombatMoves` off, and neither standard moves nor leaving cover turn a prone move into a standing one; only a crouch becomes standing, as the README promises. - Building data not ready (F10): the indoor no-path check waits while Core's world index is still scanning instead of treating every soldier as outdoors. World sense says whether building data is ready apart from what it answers. - Building views (F11): a building whose entity could not be found on first look is asked for again every 10 s instead of keeping its bounds-only stand-in (no windows, doors or interiors) for good. - Water (F12): "in water" cover refusals test the exact spot instead of the answer of the first point asked in its 5 m cell; the overlay's water samples no longer change what soldiers decide. - No-path recovery (F14): when only a navmesh rebuild is left and the server-wide 10 s rebuild gap has not passed, the soldier waits without using one of his 4 rounds; a crowd of stuck soldiers no longer gives up on budget alone. Helicopter dismount rebuilds keep their own per-helicopter debounce, now said so where the budget is defined. - Debug overlay start (F16): a watch begun before the Game Master's client announced its controller is started as soon as the controller is there, instead of waiting silently until the 10 s camera timeout ended it. - Debug overlay map cells (F17): a cell is marked sent only once Core's building index is ready (a cell built before stayed without buildings for the whole watch). Cells more than 300 m beyond the radius are forgotten on both sides and sent again on return, so a long flight no longer piles up cells on the client. - Debug overlay packets (F18): every watch, and every layer change, has a generation sent with each message; the client drops packets and cells of another generation, and packets older than the one shown (counted as "stale" in the overlay's stats line). - Debug overlay traffic (F19): a new map cell's parts go out two per send instead of all (up to 16) at once. `debugHz` is now 1 to 4: the service ticks every 250 ms, so higher values were never reached.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 19:25:25 GMT
- Last Modified
- Thu, 08 Oct 2026 19:25:35 GMT
1.0.2
## [1.0.2] ### Changed - Fewer charges into the enemy (`docs/reports/AI-Tactics-Pathing-Ideas.html` T1): - A move toward the enemy keeps vanilla's "no cover found, stay and shoot". Only a sideways move under fire may go where there is no cover (it went straight at the enemy's eyes before). - A group keeping formation moves under fire only sideways or into cover nearby, and not at all within 40 m of the enemy; vanilla moves a formation once, LHDF AI pushed it forward every few seconds. - Upright combat moves keep vanilla's sprint where it sprints (long range): standing sprint, 5.5 m/s, instead of a standing run at 3.6 m/s, slower than vanilla's crouched sprint (4 m/s). Standard combat moves no longer stand up with `uprightCombatMoves` off. - Close visible enemies (T2): a soldier already running to cover within 10 m keeps going instead of stopping in the open. Hiding in cover while suppressed is vanilla's again; a close visible enemy still cancels other cover relocation and new moves. - Cover spacing (T3): - `coverSpacing` defaults to 4 m (was 2). - With `coverScoring`, covers within `coverSpacing` of a groupmate or his cover do not count toward `coverCandidates`: vanilla's search is asked up to 3 more times for covers clear of the group. Its nearest covers are neighbours along one wall, so a groupmate near one was near all. - A cover crowding a groupmate is refused while another candidate is clear of them (it was a 15-point penalty, outweighed by protection). Recorded in `CoverChoice` as "within N m of a groupmate". - Coverers' and defenders' "cover nearby" searches the half circle away from groupmates (or their covers) within twice `coverSpacing`, at least 6 m, instead of the full circle; with groupmates on every side, the full circle as before. Recorded in `Bounding` as "away from groupmates". - `coverCandidates` defaults to 5 (was 3). - Slider steps in the LHDF tab: `engageVisibleWithin`, `grenadeCooldownMin`, `grenadeCooldownMax`, `investigateOneFireteamBeyond` and `maxSecondsInCover` 1; `suppressedPerception`, `moraleMinFireRate`, `muzzleClearance` and `coverSpacing` 0.01. They were a hundredth of the range, so defaults such as 80 m, 150 m and 150 s could not be set again. - Pathing (`docs/reports/AI-Tactics-Pathing-Ideas.html` P1, P2, P4): - Stuck recovery no longer asks for a navmesh rebuild when the object ahead is outside the navmesh's physics layers (vanilla's own test for rebuild areas): the rebuild left it out again and used the 10 s rebuild budget. Recorded under `Doors` as "not part of the navmesh". - A group whose move is unreachable gets the same recovery as a stuck one: the nearest closed door is opened, else the navmesh rebuilt when a static object is ahead. Recorded under `Doors` and `DoorStuck` with "unreachable". - A rebuild's check counts as helped when the soldier has a path again, even if he has not moved yet; the area is no longer marked hopeless for 30 minutes then. - The indoor no-path record (`Doors`) says where the soldier stands against the navmesh: on it, how far off it, or no navmesh within 2 m. It tells a soldier on furniture or a ledge from a room the navmesh lacks or does not connect.
- Game Version
- 1.8.0.13
- Created
- Thu, 08 Oct 2026 16:46:09 GMT
- Last Modified
- Thu, 08 Oct 2026 16:46:13 GMT
1.0.1
## [1.0.1]
### Added
- Minute line of work counters (`docs/AI-Improvements.html` S1): once a minute the server log gets one `Minute:` line with what the costly paths did: doors-ahead visits, checks and path copies, no-path checks, rounds and give-ups, indoor tests, cover searches and candidates, "cover nearby" requests and those let through, navmesh rebuilds requested, helped and changed nothing, decisions kept and logged. With a load test run with the mod on and off, it shows where the mod's cost goes. It replaces the "Doors: N navmesh rebuild(s) requested in the last minute" line.
- AI factions: setting `factions` and the "AI factions" checkboxes in the LHDF AI tab (the scenario's factions). Only checked factions get LHDF AI; none checked: every faction, as before. A change applies at once and is kept in `AI.live.json`.
- Roofs for marksmen, `coverRoofsForMarksmen` (on, live): snipers and marksmen (a sniper rifle) and soldiers of sniper, marksman, recon or scout groups (group prefab name) may take cover on roofs despite `coverAvoidRoofs`.
- Ladder experiment, `ladderExperiment` (off): no vanilla AI script uses ladders, and a soldier who reached a roof stays there or walks the roof away from the ladder. One of our soldiers on a roof whose group waypoint is at ground level and more than 8 m away is, after 5 s up there, sent to the nearest ladder top within 40 m (the ladder action's own entry point) with vanilla's move individually, and put on the ladder there as the player's ladder action does; the climb is watched for 30 s. Once he is on, the walk to the ladder top is ended and he is sent to the ladder's bottom entry (the walk still being his order pulled him back up and off at the top, with or without scripted input); still on the ladder near the ground, he is told to exit. If that does not take him down (his AI movement heads for the nearest navmesh, the roof), his AI is switched off while he is on the ladder and he is driven down with movement input every 50 ms, the direction flipping when he does not go down; his AI is switched on again once he is off. The move to the ladder's bottom entry is gone: that point is the climb action's, in the air beside the ladder, and the move never ended, so he stood at the bottom. For 5 s after the drive he is watched (on the ladder, AI on, action, distance moved). The group's leader goes down first; the others wait for him on the roof, at most 60 s (one who came down while the leader was up followed the formation back to the ladder and stood). A walk that stalls within 3 m of the ladder top (the navmesh stopped 2.4 m short) tries the ladder from there. With his AI off the group may drop him or pick another leader: when it comes back on he is put back in his group and made leader again if he was (the leader otherwise followed his formation back to the roof). Soldiers go down one after another: the next gets on once the last one is on the ladder and 3 m below its top (waiting for the whole ladder took a group too long); whoever is down follows his formation away from the foot, or steps away if still at it. After the leader's drive his group's move is restarted: the move activity fails without completing the waypoint and a new one to the same waypoint is added (vanilla builds a move activity only when the waypoint's tree sends its move message; failing it alone left the group idle with its waypoint) (the group's move had stalled with everyone standing in formation; removing the waypoint and adding it back deleted a Game Master's waypoint), and a soldier still at the ladder's foot about 2.5 s after getting off steps 3 m away toward his waypoint, for at most 4 s (an endless step toward an unreachable point outranked his formation and he stood there). Up too: a soldier on the ground whose group waypoint is on a roof walks to the bottom of a ladder whose top entry is at the waypoint's level, found around the waypoint (around the soldier the ladder of a long building was out of reach, and his level the wrong floor), on the ground below the bottom entry (the entry is 1.8 m in the air), and is driven up (the leader first). The engine lets him on from about 1 m only: a soldier refused further away is walked straight at the entry with his AI off and tried every 0.25 s for 3 s; getting on from the bottom may take 3 s, exiting near the top entry; a group given a waypoint on a roof never used the ladder. A soldier on a roof who is not sent down records why (no group waypoint, waypoint 8 m or less away, waypoint not at ground level), at most every 10 s. Each step is recorded under `Ladders`. The roof test (`IsOnRoof`) moved to the world sense, shared with `coverAvoidRoofs`.
- Navmesh rebuild at doors, `doorNavmeshRebuild` (on, live): a navmesh baked with a door closed keeps a wall in that doorway even when the door is open (2026-10-06: a team leader stood 20 s beside two open doors, no path). When the no-path rule opens a door, the navmesh is rebuilt around it 1.5 s later; with no closed door near, around the soldier. Each 10 m area at most every 2 minutes; recorded under `Doors`.
- Cover scoring, `coverScoring` (on, live) and `coverCandidates` (5): vanilla's cover search is asked for its best covers in its own order and LHDF AI takes the one it scores best (protection from the threat at crouch height and what gives it, a spot to hide and shoot from, reach, not running toward the threat, range to the threat, groupmates' spacing and lines of fire). Water, safe zones and roads under fire are refused as before. Off: vanilla's pick with LHDF's refusals, as until now. Recorded as `CoverChoice` with every candidate's score and parts.
- Overlay layer Obstacles: around the looked-at soldier, probes at knee and chest height in 16 directions out to 8 m; hits coloured by kind, each object hit boxed and labelled with kind, distance and height.
- Overlay layer Cover: each watched soldier's last cover search, candidates as posts coloured by outcome, the probes toward the threat, scores beside the looked-at soldier's candidates.
- Doors without a path (part of `doorOpenAhead`): some closed doors cut the navmesh, so a soldier in a room found no path out and stood until stuck recovery (a machine gun team upstairs, 90 s, 2026-10-06). An indoor soldier whose group waypoint is more than 8 m away, with no path and not moving for 5 s, opens the nearest closed door on his floor within 3.5 m, again every 5 s. With none, `Doors` records "no path, no closed door near": the map's navmesh has no way out there.
- Doors ahead, `doorOpenAhead` (on, live), for soldiers: a walking soldier opens a closed door (2.5 m wide at most) that his path crosses within 1.75 m, before he walks into it. Vanilla opens a door only where the path crosses a door link of the navmesh; Nizla Island's soldier navmesh has none, so soldiers walked into closed doors and only stuck recovery freed them (door log, 2026-10-06). The door's own action opens it, so locks (Smurfs Base Building) and barricades (Project Outbreak Breach) still refuse; a refused door is tried again after 15 s. Recorded under `Doors`.
- Door log, decision feature `Doors` (list it in `logFeatures` for the server log, or watch a unit in the overlay), for any AI, changing nothing: a request to open a navlink door (and whether the door has the OpenGate smart action vanilla needs), vanilla's open-door node (performed, waiting, done, or failed and why), each door action an AI performs, and each stuck report with every door within 4 m (state, distance, why recovery skipped it). Stuck reports are logged with `doorStuckRecovery` off too.
- Combat moves (REAPER Improved AI parity, step 10), switch `combatMovesEnabled` (reads vanilla internals; turn off if a game update breaks it):
- Bounding: a third of a group moves while the rest cover; coverers and support weapons (machine guns, launchers, sniper rifles) wait longer in cover, exposed movers under fire relocate within a few seconds.
- Lateral moves: an exposed mover under fire relocates sideways, alternating left and right; coverers and defenders look for cover close by and hold a defended area.
- Cover timeout: nobody stays in one cover longer than `maxSecondsInCover` (150 s).
- Close enemies: a visible enemy within `engageVisibleWithin` (80 m) cancels cover relocation and the "hide while suppressed" stance.
- Cover choice: a cover vanilla found is refused when within `coverSpacing` (2 m) of a groupmate or his cover, in water, in a safe zone, or on a road under fire (`coverAvoidRoads`); vanilla then searches again (three times at most).
- Decisions recorded: CoverTimeout, Bounding, CloseEnemy, CoverChoice (with the covers refused and why).
- Doors and threats (REAPER Improved AI parity, step 9), for soldiers only:
- Door closing: a soldier who opened a closed door may close it behind him 6 to 18 s later (`doorCloseChance` 0.4, more likely and sooner when alerted or under fire), unless a groupmate is still coming or someone stands in the doorway. Server only; doors wider than 2.5 m are left alone.
- Stuck at a door: a stuck group opens the nearest door of its soldiers, each door once (`doorStuckRecovery`).
- Door queue: soldiers pass a narrow door one at a time, `doorPassSeconds` (0.85) apart; each keeps his turn when he asks again (`doorQueue`).
- Distant investigation: a noise at least `investigateOneFireteamBeyond` (150 m) away is investigated by one fireteam; vanilla still builds the investigation, offered that fireteam only.
- Static gunners: leave a gun that cannot turn to a threat within `staticGunnerNearThreat` (40 m) or shooting at them (`staticGunnerBailOut`), and get back on `staticGunnerRemountSeconds` (20 s) later when calm and the seat is free.
- Decisions recorded: DoorClose, DoorStuck, DoorQueue, Investigate, StaticGunner.
- Not yet: Project Outbreak's barricaded doors are not told apart; with Project Outbreak Breach loaded, a barricade may be treated as a normal door.
- Weapons (REAPER Improved AI parity, step 8), for soldiers only:
- Muzzle clearance: no firing when a wall or window frame is within `muzzleClearance` (0.8 m) in front of the muzzle; blocked for `muzzleBlockedSeconds` (0.75), the soldier side-steps to cover left or right, alternating. Only this own check moves him; vanilla's obstruction answer (a friend in the way) stands unchanged.
- Grenades: a group waits `grenadeCooldownMin` to `grenadeCooldownMax` (18 to 30 s) between grenades on top of vanilla's wait; the soldier who took a grenade has `grenadeCommitSeconds` (8) to throw it; afterwards, or when the throw is given up after `grenadeThrowTimeout` (10 s), he gets his firearm back in hand (`grenadeRestoreWeapon`).
- Ammo from bodies: a soldier with an empty firearm and no magazine for it takes up to `ammoFromBodiesMax` (3) loaded magazines from the nearest body within `ammoFromBodiesRadius` (20 m) and switches to that firearm; the magazines are moved with the inventory's move call.
- Decisions recorded: MuzzleClearance, Grenade, AmmoFromBodies.
- Not yet: frags only at covered or grouped targets (waits until it is known whether vanilla gates smoke grenades with the same check); reloading in cover (spike A3).
- Group behaviour (REAPER Improved AI parity, step 7), for soldiers' groups (not zombies, not a player's AI group):
- Morale: losses, a downed leader and the group's threat lower its morale (fading over 2 minutes); morale lowers its fire rate down to `moraleMinFireRate` (0.55) (`moraleEnabled`).
- Defensive smoke: a group under heavy fire (`defensiveSmokeThreat` 0.6) that loses a man or its leader smokes its position, at most every 2 to 3 minutes (`defensiveSmoke`).
- No smoke indoors: smoke is not thrown at a point indoors and no soldier indoors throws it (`noIndoorSmoke`); indoors is world sense's interior volume and roof test.
- Medics: under fire they treat only critical casualties (down, or bleeding out within `criticalBleedSeconds` 30), never above `medicExtremeThreat` (0.9); medical smoke only under heavy fire, one at most; two medics never run to the same casualty (`medicWaitForSafety`).
- Transport bail-out: passengers leave an unarmed transport under enemy fire or when its driver is down (`transportBailOut`).
- Getting out: a replaced GetOut waypoint forgets its vehicle (`forgetVehicleAfterGetOut`); soldiers getting out in a fight run to cover within `dismountCoverRadius` (12 m); leaving a helicopter rebuilds its navmesh once per helicopter.
- Decisions recorded: Morale, DefensiveSmoke, TransportBailOut, IndoorSmoke, Medic, DismountCover; the overlay's Groups layer shows each group's last decision.
- Own Game Master tab "LHDF AI" (group icon) for all LHDF AI attributes and live settings, instead of a section on the shared "LHDF" tab. Needs LHDF Core with `LHDF_Mod.GetEditorCategory`.
- First infantry changes (REAPER Improved AI parity, step 6), each with its setting, for soldiers only (not zombies, not a player's AI group following orders):
- Cover clearance: soldiers stop `coverClearance` (0.35 m) behind a cover point, so the weapon clears the cover.
- Defend posts: a defending group uses observation, gate and cover posts alike (`defendAllPosts`); defenders look for cover within `defendCoverRatio` (0.4) of the defended radius, at most `defendCoverMax` (24 m).
- Targeting: close infantry is preferred as a target more strongly (`closeInfantryTargets`); a suppressed soldier keeps `suppressedPerception` (1, as when calm) of his recognition instead of vanilla's 0.4.
- Engage over observe: a visible target within `engageVisibleWithin` (80 m) is attacked instead of observing where the shots came from.
- Upright combat moves: a crouch asked for while moving in combat becomes standing, standard moves run (`uprightCombatMoves`); prone and the stance in cover stay vanilla's.
- Master switch `infantryEnabled`; the switches and the main values are live in the "LHDF AI" tab.
- Decisions recorded: CoverClearance, EngageVisible, UprightMove.
- AI debug overlay for Game Masters ("AI debug overlay" and "AI debug layers" in the "LHDF AI" tab): draws around the Game Master's camera, for that Game Master only, while the editor is open. Layers: buildings (interior boxes and exterior doors), roads, water (with its type), AI states (a label over each soldier: threat state, current action, last LHDF decision; grey: not changed by LHDF AI) and decisions (a panel with the last decisions and the options they weighed of the unit nearest the middle of the view, marked yellow). Drawn on a canvas widget (the release client does not draw debug shapes, spike A5); the Game Master camera keeps the mouse. Packets are limited in bytes; the overlay's last line shows the size, what was left out and packets missed. Settings `debugAllowed`, `debugMaxWatchers` (2), `debugRadius` (150 m), `debugHz` (4), `debugMaxPacketBytes` (8192).
- Overlay layers Movement (each soldier's path ahead in green with a cross at its end; each group's line from its leader to its current waypoint in orange, with the waypoint's kind and distance), Groups (each group numbered G1, G2, … at its leader with faction, current activity, threat and combat mode; a line to every enemy cluster it knows, red for the one its activity is about, with the cluster's state, counts and the groups in it) and Doors (every door of the buildings in the radius: a post at the hinge, green open, red closed, yellow moving; its normal, white exterior, grey interior; labelled within 30 m).
- Overlay buildings in detail: the interior volumes the building's destruction component keeps (several per building; the bounds less the walls without them), every window as a rectangle in its wall and exterior door frames. A town cell can take several packets now (up to 16 per cell).
- World sense: building views read the interior volumes, windows (children from `BuildingParts/Windows/`, with size and facing from their bounds) and doors once; "indoors" now means inside an interior volume and under the roof.
- Decision records are kept for units near a watching Game Master's camera and for the unit looked at.
- World sense (`LHDF_AIWorldSense`, server): building at a point and whether it is indoors (Core's world index: bounds less the walls and a roof of that building above), a building's exterior doors, water type and depth (ocean, pond, river), distance to the nearest road and the roads nearby, probes that sweep or trace ahead and say what they hit (terrain, building, tree, power line, vehicle, character), ground height, safe zones (Core's safe-zone provider). Water and road answers are cached by cell. Nothing uses it yet.
- Agent scope (`LHDF_AIScope`): LHDF AI changes soldiers only, not zombies or creatures (Core's creature provider) or characters without a faction.
- `LHDF_AIPlayerOrder`: an AI group a player leads keeps its orders unless it is in a fight.
- Decision records (`LHDF_AIDecisions`): features record what they chose and why; kept per unit (last 10) for units someone looks at. Settings `logFeatures` (features whose decisions also go to the log) and `logPerSecond` (log line cap, default 20).
- The system ticks every 250 ms on the server and drops caches and records of things that are gone each minute.- Game Version
- 1.8.0.13
- Created
- Wed, 07 Oct 2026 00:17:33 GMT
- Last Modified
- Wed, 07 Oct 2026 00:17:40 GMT
1.0.0
- Game Version
- 1.8.0.13
- Created
- Tue, 06 Oct 2026 23:44:25 GMT
- Last Modified
- Tue, 06 Oct 2026 23:44:30 GMT
Showing 1 to 8 of 8 results
Rows per page
Showing 1 to 8 of 8 results
Rows per page