Ungodly Beach Invasion 1944 AI v1.2.0 · installation guide

Step 04 · reference

What it actually does

Fourteen subsystems, each independently switchable. The mod attaches to the running game, reads its object graph, and steers the existing Blueprint behaviour tree from the inside — it does not replace that tree, it makes the tree's inputs and the soldiers' movement capability far better.

Beach obstacle belt of Czech hedgehogs and log ramps with battleships and barrage balloons on the horizon.
The obstacle belt at first light. Stock step height and walkable slope leave soldiers unable to mount debris that looks obviously climbable — subsystem 1 is most of that fix on its own. In-game · v1.2.0

Subsystems 1–8

The AI half

Eight subsystems that steer the existing behaviour tree from the inside.

1

Locomotion profile

Rewrites the movement component per soldier every tick: run, swim and crouch speed, acceleration, ground and braking friction, deceleration, yaw turn rate, step height, walkable slope angle, perch threshold, ledge behaviour, jump impulse and air control. Raising step height and walkable floor angle alone stops most of the beach-debris snagging, because the stock values leave soldiers unable to mount obstacles that look obviously walkable.

2

RVO local avoidance

Turns on reciprocal velocity obstacle avoidance and tunes the consideration radius and yield weight. Crucially it also adds a small randomised per-soldier weight jitter — that is what breaks the symmetry that otherwise makes two soldiers meeting head-on lock up against each other indefinitely, each politely waiting for the other.

3

Anti-stuck ladder

The headline pathfinding fix. Every soldier's position is sampled on an interval; if it holds a move goal but makes no progress, a four-stage escalation fires: widen avoidance and push through, release the reserved cover slot, drop the destination and restart the behaviour tree, then as a last resort a small clamped swept lateral relocation. The nudge is swept, so it physically cannot push anyone into geometry.

4

Cover intelligence

Two parts. Stale reservation reaping reclaims cover points still held by soldiers who died three waves ago — the stock game never reliably clears them, which is why later waves end up standing in the open. Scored selection then picks cover by a weighted blend of proximity and ground gained on the current threat, rejecting points too close to or too far from that threat, or already claimed by a squadmate next door.

5

Threat selection

Replaces nearest-target with a weighted score across distance, an explicit player bias, and whoever just shot me, read from DamageCauser. Switching is gated by hysteresis so soldiers commit to a target instead of flip-flopping between two equidistant ones. The chosen threat is pushed into the AI controller's focus through the engine's own K2_SetFocus, so the body and weapon actually track it.

6

Engagement envelope

Scales open-fire range per soldier by role, faction and director intensity, and manages grenades with a range band plus a per-soldier cooldown — so you stop getting three grenades from the same man in four seconds.

7

Squad roles and spacing

Soldiers are clustered into squads by proximity and roles are allocated per squad against the configured assault / flanker / suppressor split, rather than drawn independently per soldier. A six-man squad on the default 45/30/25 split now reliably fields about three assaults, two flankers and a suppressor, where an independent draw could roll six suppressors and produce a squad that never advanced.

8

Adaptive intensity director

Watches the living-soldier count and winds speed and aggression up when you are dominating, down when you are being overrun, within bounds you set. Influence on health is off by default.

Subsystems 9–13

The graphics half

Five subsystems driven entirely from verified reflection data. Switchable as a block.

9

Scalability

Drives UGameUserSettings through its own reflected setters: view distance, shadows, anti-aliasing, textures, effects, post processing, foliage, shading, resolution scale, frame rate cap and VSync. These default to Epic, which overrides your in-game video settings on launch — set them to -1 individually, or turn the Graphics section off, to keep your own.

10

Post process

Writes post process settings on volumes, components and optionally camera components: bloom, exposure, motion blur, ambient occlusion, screen space reflections, chromatic aberration, lens flare, vignette, film grain, colour saturation, contrast and gamma, and per-volume screen percentage. Each write also sets the matching override bit. Defaults push contact occlusion and reflections up while turning film grain and chromatic aberration off.

11

Lighting

Directional light shadow distance (25000 against the stock 20000), cascade count and distribution exponent, fadeout fraction, shadow bias and sharpen, sun angular size, indirect lighting and volumetric scattering — the settings that stop distant bunkers and obstacles sitting in flat, unshadowed light.

12

Fog

Exponential height fog density, height falloff, max opacity and start distance, plus volumetric fog on or off with its own distance, scattering distribution and extinction scale — for real light shafts through smoke.

13

Detail

Multiplies each object's authored draw distance, doubled by default, so props, debris and obstacles stay visible much further out. Optional forced shadow casting per mesh.

Subsystem 14

The gore half

One subsystem, built by intercepting the game's own removal events rather than fighting them.

14

Gore

Bodies stay where they fall, blood pools and splatters never expire, and decals — blood, bullet holes, scorch marks — stop fading and stop being culled at distance. Blood decals are scaled up slightly so hits read heavier. Corpse persistence is capped at 200 bodies by default so a long session cannot accumulate actors without bound; past the cap the game's own cleanup resumes. The player's body is never made persistent, because respawn depends on it being removed.

Why it does not crash

The safety model

A mod that writes into a live game's memory has to earn that. These are the rules the implementation holds itself to.

Everything happens on the game thread

All writes are driven by the tick event hook. No background thread ever touches game state, so there is no class of race condition to get wrong in the first place.

Pointers are checked before they are followed

Every dereference is tested against a cached committed-memory map first, so a stale pointer produces a rejected read rather than an access violation. Actor pointers are additionally round-tripped through the live object table and checked for pending-kill and unreachable flags before any write.

Nothing compounds

Stock values are captured once per soldier, so every write derives from the game's own baseline rather than from the previous frame's result. Graphics writes are absolute values or derived from fields the mod never writes — the single multiplier reads an authored field and stores into a different one, so it is idempotent too.

Large waves are spread across ticks

A per-tick agent budget rolls a two-hundred-man landing across multiple frames, so the director cannot spike your frame time when the beach fills up.

The hook observes first

It always calls the original event function before doing anything. For the gore work it resolves the function name before forwarding, so a blocked removal event never executes at all — and every name match is re-checked against the owning class, because Delete and Timeline_0__UpdateFunc are not unique names in this game.

Nothing was assumed from another game

Every offset, vtable slot, function and bitmask was established against this specific shipped executable and its own reflection data. The object array address and the name pool are not hardcoded at all — they are discovered at runtime and then proven before use.

Left out on purpose

Three things that would have meant guessing

Console variables and r.* commands
The console command function takes a string type. The engine's event dispatcher copies the parameter block into its own frame and then runs destructors over it, which would hand the engine's allocator a buffer allocated by this DLL's runtime. Establishing whether that particular parameter is flagged in a way that avoids the problem would have been a guess, and a wrong guess there is heap corruption. Only functions taking plain scalar parameters are called.
Camera field of view
The offset is verified and recorded, but the game re-drives FOV every frame for aiming, so anything applied on a five-second interval would hold for a fraction of a second. A setting that works intermittently is worse than no setting.
Sun intensity
This level runs Ultra Dynamic Sky, which animates sun intensity continuously. Overriding it on an interval would visibly fight the sky system, so the shadow and scattering parameters that Ultra Dynamic Sky does not drive are tuned instead.

The same discipline applies to cover types: the game's cover enum exposes only unnamed enumerators, so no gameplay meaning can be attached to a value without guessing. The offset is recorded and deliberately never written.