Repository navigation
HD2Runtime v0.31.0 — Beams, Wind-up, Missiles, Charges, Other Mods' Values and Every Game Language
HD2Runtime 0.31.0 — beams, wind-up, missiles, charges, other mods' values and every game language
0.31.0 is a feature release built from player reports and the stats editor's wish list. Each item says whether it was
seen working in game ("live", solo unless stated) or is covered by the offline tests only. Most new fields need
allow_unverified_effect: the Runtime proves where each value lives and that the game reads it, but its effect in
play is still awaiting confirmation in game. Expect hotfixes as reports come in.
Other mods' values
- A value another mod changed refuses only itself (offline only). When a value differs from both the game's and
every HD2Runtime write, it belongs to a mod outside HD2Runtime (a data-file mod or another program). That write is
refused withCONFLICT ... owner: unknown mod, not HD2Runtime, and its result carriesowner = 'unknown'and
foreign = true. Every other write goes ahead. Each such value is logged once (FOREIGN VALUE) and listed by
hd2.diagnostics.foreign_values(). A link another mod changed in a stratagem's attack chain refuses only the
values below it. A conflict on bytes HD2Runtime does not track (an attachment delta row) is a plainCONFLICT,
never blamed on an unknown mod. - Component tables another mod moved (offline only). Some mods point the game at their own copy of a component
table, so writes to the game's table changed nothing (the LAS-12 Sai heat report). HD2Runtime now checks, read-only,
that the game reads each component from the table it writes. A moved table refuses only that component
(COMPONENT TABLE MOVED, owner unknown) and is logged once. hd2.inspect{target, fields}(live: reads and ownership). Read-only. For up to 64 fields of a typed target it
says who owns the live value:vanilla,runtime(and which mod),foreign(an unknown mod),changed,
unavailableorinvalid, with the value. A stats editor can show other mods' values read-only before writing
anything. A weapon whose entity map row another mod rebuilt reads as changed, owner unknown. Detection of a real
data-file mod's value has not been confirmed in game yet.
Text in every game language (fixes issue #8)
- Mod windows draw Chinese, Japanese, Korean, Russian and Latin extras with the game's own fonts (live,
2026-10-09: Simplified and Traditional Chinese, Japanese, Korean, Russian and Spanish each drew their own text).
Characters no loaded font has still show?. Text is now 1-512 bytes and wraps without splitting a character. - In any game language (offline only). The game loads only its selected language's font. Text that needs another
language's font now loads that font package on demand. The Runtime's own panels (the custom stratagem details and
tooltips, the alert card) use the same fonts. hd2.ui.can_draw(text),hd2.ui.game_fonts()andhd2.ui.unsupported(text)(the characters no game font can ever
draw, for translation tools). Greek cannot be drawn: no game font has it.
Status effects
- Status effect stats (writes live; gameplay effect not yet confirmed).
hd2.status_effect(id)edits a status
definition itself:status.duration, and through:damage()the damage it deals while active (needs
allow_unverified_effect). Every user of that status changes, so writes needallow_shared.hd2.status_effects()
lists all 71 ids. The tick rate is not exposed.
Weapons
- Wind-up (firing charge) on heat weapons (offline only).
heat.firing_charge,heat.charge_gain_per_second,
heat.charge_loss_per_secondandheat.reset_charge_after_shot(the Sickles' 0.5 s wind-up, the Quasar's warm-up).
Also on the AX/LAS-5 Rover gun and the A/LAS-98 Laser Sentry.heat.warmupnow reads as the derived value, and
"cooldown after overheat" says which fields to edit (the LAS-99 Quasar report). - Wind-up controls everywhere (offline only).
windup.wind_up_secondsandwindup.wind_down_secondson the
EXO-45 Patriot minigun and the TD-110 Maelstrom tank gun.windup.wind_down_secondsis described as what it is: a
spin-down switch. - Beam pulse fields (offline only).
beam.fire_mode,beam.fire_rate,beam.pulse_beamsandbeam.pulse_seconds
on every beam weapon: a Trident-like LAS-5 Scythe is one transaction on its own record. The LAS-13 Trident's pulse
length is labelled as what limits its fire rate (a pulse starts only after the previous one ended). The Rover gun's
beam.fire_ratehas the reviewed 1-6000 range. - Beam swaps (offline only). The LAS-5 Scythe, LAS-7 Dagger, LAS-13 Trident, LAS-98 Laser Cannon, 40-K Meltagun and
A/LAS-98 Laser Sentry fire any catalogued beam throughweapon:beam_source()andhd2.fields.attack.beam
(allow_unverified_referenceandallow_unverified_effect). A projectile weapon cannot fire a beam this way. - Beam conversion (experimental; solo, or a lobby where every member runs the same HD2Runtime with the identical
conversion).hd2.weapon(name):beam_conversion()makes a projectile weapon fire the LAS-13 Trident's pulsed beam,
with its own rate of fire (1-900 rpm), beams per pulse, pulse length and, optionally, its own damage, armor
penetration and range. It needsallow_component_swapandallow_unverified_effect, and writes only while no
instance of that weapon exists.- Add layout (42 weapons): the weapon keeps its projectile component and gains a beam. Allowed with other
players only when every member posts the identical conversion; otherwise it is refused or restored. - Swap layout (24 weapons, such as the AR-23 Liberator): solo only, and restart the game after using it.
- Refused (25): shotguns and launchers fed by rounds, the autocannon, the Maxigun and GL-28, and charge weapons.
Melee, arc, spray and beam weapons are out of scope. - The swap layout's mechanism was seen working live, solo, in development builds (Liberator, Talon and Reprimand at
their own rates). Neither layout has been played through this API yet, and nothing of it has been tested with
other players. Seedocs/beam-conversion.md.
- Add layout (42 weapons): the weapon keeps its projectile component and gains a beam. Allowed with other
- Missiles (offline only).
missile.*andfunction_missile.*: the flight of the missile the StA-X3 W.A.S.P.,
FAF-14 Spear, MLS-4X Commando, P-33 and P-92 spawn per shot (lifetime, speeds, acceleration, turn rates, guidance
delay). No missile swap is offered. - Team-reload ammunition (offline only). The GR-8, RL-77, FAF-14 and StA-X3 can carry spares of their own
(magazine.spare_magazines,starting_magazines,magazines_from_supply, 0-31), and the AC-8 rounds of its own
(rounds.spare_rounds,starting_rounds,rounds_from_supply, 0-511; multiples of 5 recommended). The wielder
reloads from them alone before the backpack is used. The five team-reload backpacks getdeposit.capacity,
start_amountandrefill_amount. - Fire-mode selector on single-mode weapons (offline only). The 30 single-mode weapons with a free input (the
R/40-K Hot-Shot among them) can get two or three modes, withweapon_function = 'fire_mode'bound in the same
transaction. The selector reaches three modes (the docs said four). - CQC-20 Breaching Hammer blast (offline only).
support_weapon(...):attack('ability'):explosion().
Vehicles and backpacks
- Mounted spread (offline only).
weapon.horizontal_spread/weapon.vertical_spreadon the 17 projectile mounts
(Exosuit guns, FRV guns, Bastion, Maelstrom and more). - EXO-55 Breakthrough shield arm (offline only).
hd2.vehicle('EXO-55 Breakthrough Exosuit'):shield(): the arm's
health, and its plate's health and armor. - Hover Pack height explained. There is no height value: the pack climbs only while its lift
(hover.vertical_acceleration_low_speed) is above gravity (9.82; vanilla 9.8 only holds height), for
hover.durationseconds of air time. The descriptions and names now say so. Nothing in the write path changed.
Stratagems
- Charges before cooldown (offline only).
stratagem.rearm_pool = 'eagle_rearm'puts a non-Eagle stratagem in the
Eagle Rearm pool, the game's only charge mechanism: its uses become charges refilled together by Eagle Rearm, and
it shares the Eagle cooldown. An unlimited pool member is refused. - Orbital targeting (offline only). The Orbital Railcannon Strike's
orbital.search_radius,movement_speed,
durationandfire_delay; the Orbital Laser'sorbital.retarget_interval. The Railcannon's shot count and
target priority are not editable.
Thanks
Bans, author of
True Lasgun Beam Overhaul, whose mod was the research lead
for the laser work in this release: the wind-up, the Trident's pulsed beam, beam swaps and the add layout of beam
conversion. HD2Runtime proves each member itself from the game's data; none of his code is used.
Compatibility
- Mods built for 0.30.3 work unchanged. New 0.31.0 features need
min_version0.31.0. - The team-reload weapons' own magazine rows and the AC-8's own rounds rows now need
allow_unverified_effect. Mods
that declare an older SDK keep writing them without it, as logged legacy operations
(docs/legacy-sdk-compatibility.md). Their values are bounded by the game's network fields (0-31 magazines, 0-511
rounds). fire_mode.modesaccepts at most 3 modes (was 4: the fourth slot is never selected).- The startup line reads
HD2Runtime 0.31.0 initialized (API 1). - Multiplayer: only beam conversion has multiplayer rules (above), and they are implemented and tested offline only.
Nothing else new in 0.31.0 was tested with several players.