Easy Red 2 Realism Overhaul v1.0.5
1.0.5 - 2026-07-26
Easy Red 2 compatibility: Steam public branch, build 24246380.
- Multiplayer clients now actually receive the host's mod settings. The client-side read of the shared settings failed on every attempt, so a client silently played on its own local configuration for the whole session instead of the host's.
- Destroyed soldiers are no longer left registered in their squads on a multiplayer client. Easy Red 2 detaches the first-person camera from a soldier as it is destroyed, but does so without checking that a camera exists; on a client that has not spawned yet there is none, and the resulting error stopped the rest of the game's own cleanup — including removing the soldier from its squad — for every soldier destroyed in that state.
- The flight model and instrument HUD are now player-only and off by default. Turn on "Aircraft flight physics" for momentum, progressive stalls and spins, energy loss, speed-dependent control authority, and damage-sensitive handling while you fly, and "Aircraft instruments" for the compact airspeed and altitude readout. Both apply only to aircraft you pilot yourself with Realistic Mouse or Realistic Keyboard controls; Simplified controls keep the native controller as before. Aircraft-bomb blast, crater, injury, and suppression tuning is unaffected and stays in the ordnance system.
- An aircraft you bail out of now flies on instead of stopping in mid-air and dropping. It keeps the speed and heading it had, bleeding energy as it coasts, and descends into the ground on its own — so you watch your plane fly away beneath you rather than fall out from under you. Applies to aircraft the flight model was handling for you; it lasts until the aircraft lands, is destroyed, or half a minute passes.
- Holding the vehicle freelook button no longer costs you pitch and roll. Looking around left the aircraft able to yaw and nothing else, so checking your six in a turning fight meant giving up the turn. The left stick now flies the aircraft for as long as you hold freelook — pitch on its vertical axis, roll on its horizontal one — while the right stick moves your head, which is what it already did. This works in both stick layouts, because the freelook camera is always the right stick and the left one is therefore always free. Two things share that stick and stand down while you look: the rudder, when your layout puts it there, and the throttle, which holds its current setting only while you are actually pulling or pushing on the stick, so you can still change power mid-look whenever you are not manoeuvring. It has its own switch, "FreeLookSteering", in the aircraft flight physics settings, and works whether or not the flight model itself is turned on.
- Rudder authority no longer follows the wing's curve. The fin and rudder sit in the propeller slipstream, so with power on they keep working when the wing has nearly stopped flying — you can hold a heading on the takeoff roll, pick a wing up when the ailerons have gone dead, and pivot a hammerhead with the airspeed near zero. Close the throttle and you keep the rudder the airflow alone gives you: its freestream authority is now measured against stall speed rather than cruise, so the pedals are fully alive by about a third above the stall and remain usable in a dead-stick glide, where before they went vague on every low-speed approach. A lost propeller still costs the slipstream half of it. At the other end of the envelope the rudder now goes heavy: these were unboosted controls, and past roughly cruise the pedal force needed for real deflection climbs until little of it is usable, leaving the rudder vague at top speed where the elevator and ailerons still bite. Pitch and roll are unchanged.
- A bullet to the head that kills you now cuts the screen to black and drops all sound to zero on the spot, in place of the death camera lingering on your body. The death panel naming the soldier and the skip prompt still read over the black. Only a lethal head hit does this; every other death plays out exactly as before. The view and sound return as soon as you control a soldier again, and in any case within a few seconds, so a death can never leave you blind or deaf. It has its own switch, "Headshot death blackout", in the first-person view settings.
- AI soldiers no longer get left behind in cover when their squad moves on. The maximum-halt rule that resumes a stalled advance only existed for squads on an attack order, so a rifleman under an ordinary move order who could see an enemy held his fighting position for as long as he could see one — his squad walked off without him. Any squad that still has somewhere to go is now bounded by the same rule, and a soldier who takes cover while his squad is moving holds it for the short assault interval instead of the long defensive one. Squads on a defend order are unaffected and still hold their positions indefinitely, as does a soldier whose squad has stopped.
- The AI in your own squad now behaves exactly as it does in an unmodded game. Every AI system in the mod — perception and target acquisition, cover choice and posture, movement and stall recovery, suppression reactions, fire discipline and friendly-fire holds, grenades, emplacement crewing, transport dismounts, and tank tactics — now skips any soldier sharing a squad with a player, so your squadmates answer to your orders and nothing else. This is structural rather than a setting: there is no configuration in which the mod steers a man under your command. It covers an AI-driven tank you are riding in as gunner or commander, and it follows you when you switch soldier — the squad you leave returns to the mod's AI, the squad you join is left alone. AI in every other friendly squad, and all enemy AI, are unaffected; in multiplayer this applies to each player's own squad, not only the host's.
- Reduced frame-time spikes during large infantry battles, particularly on high-framerate systems:
- Short-lived game objects created while the mod crosses between Easy Red 2 and its managed patches are now reclaimed progressively instead of accumulating until .NET pauses the battle to clean up hundreds of thousands at once. Normal object lifetime is preserved, and a config-only compatibility switch can restore the original cleanup behavior after a restart.
- Garbage-collection work now uses measured spare time after fast frames instead of surprising an already busy frame. It stands down when VSync already provides idle time and leaves Unity's normal collection budget intact. In the final seven-minute maximum-AI validation, the original 200-500 ms managed stalls were absent and frames above 33 ms fell to 0.57 per 30 seconds.
- Repeated ownership checks for the same soldier in one frame now reuse one result instead of crossing the managed/native boundary again for every patched AI entry point.
- A halted soldier was being issued the same stop command to the game two to four times in a single frame, because several of the mod's entry points each re-asserted it independently. Since that command applies a time-scaled stop, the duplicates were both wasted work and a repeated stop. It is now issued once per soldier per frame unless the decision actually changes.
- The AI tactical decision pass was tied to the frame counter rather than to elapsed time, so the higher your framerate the more often every soldier re-decided — at 200+ FPS roughly three and a half times as often as at 60 FPS, for the same decisions. It is now capped to a fixed rate in real time. Systems below roughly 90 FPS are unaffected.
- Per-soldier state for dead soldiers was never released when the game had already torn down the soldier object, so it accumulated for the whole battle and slowed a squad-wide check that runs against it. Cleanup now happens on the soldier's own destruction, where the identity is still valid.
- The squad covering-fire check, which scans every tracked soldier, was recomputed for every attacker every frame. It is now cached briefly — far shorter than the several-second window it reports on, so advances are unaffected.
- Close-range target confirmation runs a line-of-sight test per nearby candidate, and every soldier's next check tended to fall due on the same frame, so the whole battle's tests landed at once. Checks are now staggered per soldier and capped per frame; a soldier over the cap simply runs on the next frame instead, so no check is skipped.
- A machine gunner holding a suppressive burst while standing still had that burst cancelled and restarted continuously, because the movement system treated "allowed to move" as "moving". A burst is now only interrupted once the gunner actually moves.
- The heaviest per-soldier AI work — situation snapshot, proposal arbitration, and the tactical state machine — is now capped per frame. The game already spreads this work across frames; the cap only affects the occasional frame where a wave of soldiers arrives together, and a deferred soldier keeps his current orders and runs on the next frame exactly as if the game's own schedule had not reached him.
- A mass-casualty moment re-read each soldier's faction once per casualty instead of once per soldier while spreading suppression through the battle, which made large simultaneous losses the most expensive moments in a battle.
- Identifying what weapon a soldier is carrying — matching its item name against a list of some thirty patterns, plus component lookups — was repeated for every moving soldier on every frame, and again for every soldier on the suppressive-fire path. Weapon type cannot change while the weapon exists, so it is now worked out once and reused.
- AI decisions are now scheduled against a per-frame allowance instead of being left to land wherever they fall due. Each soldier already re-decided at a fixed rate, but nothing stopped a large part of the battle from coming due on the same frame, which is what produced the periodic hitches in big fights. The same decisions are now spread over consecutive frames, with a guarantee that no soldier can be held back for long, and the allowance scales with how much time the frame has — so lower-framerate machines are not throttled.
- Diagnostic traces throughout the AI systems were assembling their text even when nothing was set to display or record it. They are now skipped entirely unless the debug overlay or verbose logging is on.
- A soldier searching for cover measured the ballistic protection of every position it considered — up to twelve, or twenty when digging into a defensive area — all within a single frame, at roughly six milliseconds each. One soldier looking for cover could therefore stall a frame for over a tenth of a second on its own, which is why the hitching looked the same in a small battle as at maximum AI: it depends on somebody needing cover, not on how many soldiers are fighting. The search now measures as many positions as the frame can afford, always at least three, and picks the best of those; candidates are considered nearest-first, so the ones dropped are the least likely to have won.
- The squad covering-fire check no longer examines every tracked soldier in the battle to answer whether a squadmate is providing fire. Each squad keeps a short list of its recent shooters and the check reads that, so its cost no longer grows with the size of the battle — the difference matters in the very large battles Easy Red 2 can run.
- Turning toward incoming fire is now spread across frames as well. Every soldier being shot at ran the full "where did that come from, should I turn" step on every physics step, so in a large battle under heavy fire most of the army did it at once. Soldiers now take turns; a soldier who waits turns through the same angle at the same speed on a later frame, so reactions look identical.
- Reading which side a soldier belongs to turned out to build a fresh copy of the faction name every single time, and the tactical layer asked for it several times per soldier per decision. It was the largest measured source of managed allocation in the AI layer — several megabytes every half minute from one line. A soldier's side cannot change, so it is now read once and remembered.
- Setting how long bullet holes linger required identifying whether each pooled object was a decal, and that check searched the object's entire hierarchy every time. The game pools nearly everything short-lived — bullets, casings, muzzle flashes, impact effects — so that search was running on all of them, hundreds of times a second during a firefight, to answer a question whose answer never changes for a given object. It is now answered once per object. This cost scaled with how much was being fired rather than with how many soldiers were fighting, which is why it was as noticeable in a small battle as in a large one.
- The expanded near-miss crack reached two of the game's own routines indirectly, once for every bullet in the air on every frame. That indirection is both slow and wasteful of memory, and bullets are the most numerous thing in a battle by a wide margin. The same routines are now called directly. Flyby sounds are unchanged.
- Immediate safety reactions (fire, flames, pinning, reloading, movement stalls) still run every frame as before, and none of the above changes an AI decision.
- Removed the infantry armor response (the "Armor response" settings section). Ordinary riflemen no longer break off their orders to look for tank-masked cover, hold position because armor is nearby, or go prone in the open waiting for a covered route — behavior that read as cowardice, pulled squads out of assaults, and left men stalled in the open. Infantry now fight their orders with armor present. The two anti-armor rules worth keeping are unchanged: a soldier still withholds ineffective small-arms fire at a tank, and AI still waits for a practical launcher shot instead of firing a rocket across the map. That launcher range setting now lives in the "Moving fire" section next to the submachine-gun range, so a customized value must be set again there.
- Added an
InstallGameplayPatchesoption to theAI - Diagnosticssection of the config file. Setting it tofalsemakes the mod load without installing any of its gameplay patches at all, so it cannot affect behavior or performance until it is switched back on; the change applies at the next game start. Switching individual systems off in the F10 menu leaves their patches installed, so this is the way to confirm or rule out the mod as the cause of a performance problem without uninstalling it. While the stutter probe is enabled, the log now also reports a frame-time distribution every 30 seconds, which is what makes that comparison readable.