Skip to content

HD2Runtime ModBuilder v1.4.0

Choose a tag to compare

@SkyeShade SkyeShade released this 30 Sep 17:26
· 9 commits to main since this release

HD2Runtime ModBuilder 1.4.0

Support for HD2Runtime 0.28.0: one projectile editor for every weapon that fires projectiles, the projectile builder, programmable ammunition, rate-of-fire modes, weapon feeds, armory presentation, underbarrels, Guard Dogs and the new equipment coverage, enemies and structures, event scripting and custom Lua, and a Simplified Chinese interface.

Download: HD2Runtime-ModBuilder-v1.4.0-win-x64.zip (Windows 10/11 x64). Extract it and run HD2RuntimeModBuilder.exe, or use Install update from any earlier version.

Requires HD2Runtime 0.28.0. ModBuilder 1.4.0 ships the HD2Runtime 0.28.0 SDK and uses it for new projects, offline too. Every SDK file it reads is byte-identical to the one in the public 0.28.0 release. Mods that use a 0.28.0 feature declare min_version = 0.28.0.

HD2Runtime 0.28.0

  • Full 0.28.0 SDK sync. ModBuilder reads every capability file the 0.28.0 SDK publishes. Its capability audit sorts each published capability into edited, shown read-only or deliberately left out, and finds none unaccounted for.

One projectile editor

  • Unified projectile hosts. Player primaries and secondaries, support weapons, mounted and vehicle weapons (EXO-45 Patriot, EXO-49 Emancipator, EXO-51, the FRV guns, M-103, GATER turret) and the Guard Dog gun all swap their projectile the same way.
  • One donor pool. Any catalogued projectile can be fired by any compatible host, whichever loadout slot, stratagem or mount owns it: primary → primary, primary → support, support → primary, support → support, and mounted hosts. Package loading, compatibility class, sharing and live evidence come from the SDK.
  • Read-only hosts stay visible with Runtime's reason: a selector or weapon function owns the projectile, the weapon is not magazine-fed, the output spawns an entity, the output is a beam, arc, spray or melee family, the root is ambiguous, or the package is unavailable.

Projectile builder

  • A projectile row's direct-hit damage (with its statuses), impact explosion and expiry explosion can take another row's, or be cleared where Runtime allows it. Its velocity, drag and penetration slowdown are shown with it.
  • Host swap, host row and donor row are kept apart. A slot edit changes the row for everything that fires it and does not follow a projectile swap; to give a swapped weapon an effect, you edit the donor's row. When other weapons fire that row, the editor names them.
  • The MA5C Assault Rifle's penetration slowdown, like every projectile value, is edited through the same projectile editor.

Programmable ammunition and weapon modes

  • Programmable ammo: give a weapon an alternate projectile switched by its weapon-function button, with the binding written in the same transaction. The S-11 Speargun (Gas or Stun) and the MG-206 HMG (Incendiary, Stun or Gas) use Runtime's proven pairs; each choice shows its package and opt-ins.
  • The editor shows two cards, the same on player and support weapons. Base mode is what the weapon fires with programmable ammunition off (marked Vanilla / default, or Swapped projectile when a projectile swap changes it). Alternate mode is what it fires with it on. Add alternate mode opens the projectile list inside that card, and Remove alternate mode takes it and its input binding away. A native alternate (AC-8 FLAK, GR-8 HE, RL-77) can be replaced and restored, but not removed. The card says which input switches it; if the rate-of-fire selector already holds that input, the choice is offered right there.
  • Mode labels and icons: each card has its own label and HUD icon, from the game's own labels, with an automatic icon. Removing or replacing an alternate whose row has label edits asks whether those edits go too.
  • Rate-of-fire modes: the X / Y / Z rates, the default mode and the selector order, for weapons with a selector and for weapons that can gain one.
  • Weapon feeds: native and programmable feeds, the SG-20 Halt's flechette and stun feeds with their own fields.
  • Armory presentation: the penetration label and trait tags the armory shows, kept separate from the real armor penetration and damage.
  • Underbarrels: the AR/GL-21 One-Two's grenade launcher is its own nested section (spread, loaded, spare, starting and resupplied grenades, fire rate), and other underbarrels appear the same way.
  • Status effects on player, support and mounted weapon damage are chosen by name.

Equipment and more

  • Guard Dogs: the drone's health and body zone, and the drone's weapon through its backpack.
  • SH-32 and SH-51 shields, Warp Pack and Hover Pack, with their new fields.
  • Resupply under the Mission category: cooldown, uses and its drop-pod payload slots.
  • Enemies and Structures pages (hd2.enemy / hd2.structure): main health and armor, damage zones and attacks.
  • Sentry turn speed and targeting range, minefield salvos, heat levels, recoil multipliers and the LAS-98 beam fire rate. Beam, arc and spray outputs are shown as Runtime publishes them; no projectile editing is invented for them.

Event scripting and custom Lua

  • A project can carry its own src/addon.lua, run after the generated changes, with syntax highlighting, autocomplete from the SDK and a syntax check.
  • The event reference covers every 0.28.0 event, including player hit and player damage dealt, with actions (explosions, projectiles, statuses, healing) and ready-to-insert snippets. A diagnostics reference explains write conflicts and optional telemetry, which ModBuilder never turns on.

Acknowledgements and live evidence

  • The opt-ins allow_shared, allow_unverified_effect and allow_unverified_reference are written exactly where the SDK requires them, and each warning says why. Where Runtime's live tests proved an exact value, that value no longer carries the unverified opt-in. Nothing needs to be acknowledged by hand.

Reliability

  • SG-20 Halt fix (issue #2). Halt edits no longer stop other changes from applying. The Halt's feed fields use their branch-qualified names, and every generated operation is now built separately, so an operation that cannot be built is skipped and logged, and the rest still register.
  • Projectile, damage and explosion edits now carry allow_unverified_effect wherever the SDK requires it (earlier builds could omit it on grouped edits). A drop-pod pickup Runtime's live test proved in that exact slot (the Grenade Box in the Resupply pod) no longer carries allow_unverified_reference.
  • The SDK is pinned: the bundled SDK files are byte-identical to the HD2Runtime 0.28.0 release's, a local development SDK with different contents is reported as a different build, and projects stay on their own SDK until you rebind them.

Languages

  • The interface is available in English and 简体中文 (Simplified Chinese). Choose it in Settings & SDK → Language: System default, English or 简体中文.
  • Switching is immediate and keeps your open project, unsaved edits and SDK.
  • Generated Lua, project files and exported mods are identical in every language. Game names, SDK text, identifiers and Lua stay as published.
  • Translations are standard .resx resource files. See docs/localization.md.

Compatibility

  • Projects from earlier versions open unchanged and stay on their SDK until you rebind. Projects using features new in 1.4.0 save in format 11; older ModBuilder versions refuse that format rather than dropping edits.
  • The language choice is stored in preferences.json in %LOCALAPPDATA%\HD2RuntimeGUI\.

Known limits

  • Some Chinese text was written during implementation and still awaits review by a native speaker. Text published by the SDK stays in English.
  • Runtime 0.28.0 has no custom projectile rows yet; the builder composes existing rows only.

Thanks

Special thanks to @CChusky for proposing ModBuilder's localization support and providing the original UI string inventory and Simplified Chinese translation baseline (issue #1).

Their inventory and zh-Hans resources covered the v1.3.0 interface. Text added or reworded since then was translated or adapted during implementation, following their terminology.