Adds a short-ranged turret that burns liquid fuel into a pressurized stream of heat. It needs no ammunition. Balance and progression are still being tuned (see the changelog).
Mods introducing new content into the game.
Version: 0.6.5
Date: 2026-11-09
Performance:
- The turret registry used to be rebuilt by scanning every surface of the map every ten
seconds. On a large save with no meltas built, that scan alone was 60 ms of a tick, which
reads as a hitch every ten seconds. The full scan now happens once, when the mod loads,
and afterwards the map is repaired one 512x512-tile block per second, so the same work
costs well under a millisecond on any single tick
- A chunk is checked the moment it is generated, so newly explored ground is covered
without waiting for its block to come round
Bugfixes:
- A melta placed by construction robots on a space platform, or duplicated by another mod,
was never registered and stayed silent until the next rescan. Both are picked up now
Version: 0.6.4
Date: 2026-10-27
Major Features:
- The melta is a continuous weapon now. Damage is applied every tick instead of once per
pulse, so whatever the beam visibly crosses is burnt for as long as it is crossing: a
turret sweeping across a swarm no longer cuts through bodies that take nothing
- The lance follows the BARREL and the turret does not stop firing while there are enemies
in range. A target switch sweeps the beam across everything between the two bearings, and
the 2.5 s spin-up no longer restarts on every kill
- Pierce falloff is off by default: every body on the beam takes the full hit, up to 30 at
once. (Set C.pierce_falloff below 1 in constants.lua to bring the ladder back)
- New spin-up gauge: five lights on the hull deck fill as the turret heats and go out as it
cools, so how hot it is can be read without staring at the beam
- The lance is drawn from a soft sprite core rather than engine line primitives, so it now
renders consistently with smoke and weather mods (it used to draw in front of them), and
its far end frays and dissolves at maximum range instead of ending on a hard edge
- The hull and the cannon sit half a tile lower, on the tile they actually occupy. The pipe
stubs stay on the pipe grid, so nothing already built disconnects
- Any fuel that exists in the pack is accepted, including fluids that another mod defines
after this one loads (cubonium gas was being dropped); the tooltip lists the real fuel
roster with its damage multipliers
Bugfixes:
- Fire damage research now scales the beam on the INFINITE tier, not once. Ten extra levels
of refined-flammables bought 0.2 damage before instead of 2.0; damage is now read from the
engine's own accumulators. The melta also appears in the flamethrower damage technologies,
so the research screen shows what improves it
- A turret with an empty buffer no longer keeps firing on the fluid dust left behind
Balancing:
- NOT FULLY TESTED. This is the first release of the reworked weapon and the numbers were set
by measurement in a single game (dps against dummies and biters, armour, asteroids), not by
a balance pass. Damage, fuel costs, research scaling and progression placement are expected
to move in a later version. If something feels off -- too strong, too weak, too expensive
to feed -- that is useful and expected feedback, not a finished design
Version: 0.6.3
Date: 2026-10-27
Changes:
- The turret keeps firing while there are enemies in range. Two things used to break the
stream: the off-bore gate (the beam was only drawn when the head was within 2 degrees of
the target, so a turret could never sweep) and the moment of re-acquisition after a kill
(the engine has no target for a tick or three, and the script went down its "not
shooting" branch: beam out, pulse clock reset, charge decaying). Measured over 140 ticks
with the target forced across a nine-body fan: 123 silent ticks on 0.6.2, 0 on this
version, and the spin-up climbs straight through five forced 80 degree switches
- The lance is drawn along the BARREL now, not along the line to the target, and damages
whatever it crosses. A target switch therefore sweeps the beam across everything between
the old bearing and the new one, which is what a melta is for
- The off-bore charge-up glow is gone with the gate it existed for (no wind-up: the beam
fires from the first tick), and with it C.aim_tolerance and C.windup_ticks
- New C.target_grace_ticks (8): how long the lance stays lit after the last live target
while the turret looks for the next body itself. Idle turrets still do no surface work
Bugfixes:
- A dry turret no longer keeps firing. The fuel gate was get_fluid_count > 0 and fluids are
doubles, so a drained buffer's dust (measured 0.0005 units) was enough: 8580 damage dealt
over 240 ticks on an empty tank, and the lance drawn the whole time. The gate is now
C.fuel_empty = 0.1 units, and the same threshold applies to the fuel-colour choice
- Same measurement after the fix: 0 damage over 240 ticks with 0.0005 units in the buffer
Version: 0.6.2
Date: 2026-10-27
Bugfixes:
- The beam now damages what it visibly touches. Damage was tested against the corridor on
the tick a pulse happened (8 ticks apart), while the beam is redrawn along a moving
target every tick, so a turret dragging its beam across a swarm cut through bodies that
took nothing whenever no pulse landed on them. Damage is now applied EVERY tick at
pulse damage / pulse interval, which is the same damage per second on a locked target
and the right damage per second of exposure for everything the beam crosses
- Damage rollup is now visible per tick rather than per pulse in the health bar of
anything being burnt (measured series in docs/verification/sweep-damage.md)
Changes:
- Pierce falloff is off by default (C.pierce_falloff = 1): every body on the beam axis
takes the whole hit, up to C.pierce_max bodies. With per-tick damage a "who is in
front" ranking decides damage at the moment the corridor is refreshed rather than at
the moment of a pulse, so the ladder stopped meaning anything; setting the constant
below 1 brings it back
- The pulse clock is now purely the thump: muzzle flash, cut marks, impact pop, the fuel
surcharge and the fuel sample. Nothing about the look or the fuel bill changed
- Corridor refreshes only when the beam moved (or every C.hit_refresh_ticks), so a
locked-on turret still costs one spatial query per pulse window; a sweeping one costs
one per tick, which is exactly when it matters
- Cost: measured with 20 turrets firing, 9.09 -> 10.21 ms per update (+12 %). Per body
radius is cached at refresh (bounding_box allocates), and the fire and physical halves
of a hit land on alternating ticks at double the amount -- every resistance is linear
in the amount, so a two-tick window is identical for half the engine calls
- Tooltip: with no falloff the description no longer claims a ladder it does not apply
Balance:
- Single-target dps is unchanged (a body on the axis for a full interval takes exactly
one pulse's damage). Total damage against a LINE goes up, because there is no falloff:
the old ladder paid 82 % to the second body; it now pays 100 %
Version: 0.6.1
Date: 2026-10-27
Bugfixes:
- Fuels that another mod defines LATER than this one now work. The turret's fuel list is
built in data.lua and can only keep fluids that already exist; on her install
lilys-melta's data.lua loads at 37.9 s and lilys-cubeine's (which defines cubonium-gas)
at 41.2 s, so cubonium-gas was silently dropped. data-updates now tops the list up and
the tooltip is rebuilt at the same stage, so what the turret accepts and what the
tooltip promises cannot disagree. Verified: cubonium-gas is accepted, listed, shown in
the tooltip, and burnt (196.4 -> 131.2 units over 200 firing ticks)
- Fire damage research on the INFINITE tier now counts every level. refined-flammables-7
is max_level = "infinite" (+0.2 per level) and the old hand sum added its modifier once,
so ten extra levels bought 0.2 instead of 2.0 -- the turret looked researched and
fought like it was not. Damage and firing speed are now read from the engine's own
accumulators (get_ammo_damage_modifier / get_turret_attack_modifier /
get_gun_speed_modifier), which include infinite levels. Measured on a dummy: +200 % on
either damage modifier takes the beam from 1398 to 7426 dps (5.3x, i.e. (1+2)^1.5), and
+100 % firing speed from 1398 to 2654 (1.9x)
- The bonus cache now expires after a second instead of waiting for a research event:
another mod's script can change a force modifier and no event this mod can hear is
raised for it
Graphics:
- No art changed in this version
Balance:
- Research now visibly applies, which is a large late-game buff by construction (that is
the fix, not a retune): at all finite tiers plus 10 levels of the infinite one the
damage factor is 9.9x instead of 4.7x
- Numbers retuned by the author on top of 0.6.0: damage_hot 56 -> 128 (4x cold),
pierce_falloff 0.82 -> 0.95, pierce_max 12 -> 30, hit_half_width 0.45 -> 0.9,
pipe_reach 1.12 -> 1.0, fluid_consumption 2.5 -> 2.0, extra_fluid_per_pulse_hot 3.8 ->
3.0, fuel multipliers (petroleum-gas 0.85 -> 1.25, melta-fuel 1.60 -> 3.00, napalm
1.35 -> 1.50) and a new cubonium-gas entry at 2.00
Version: 0.6.0
Date: 2026-10-27
Graphics:
- The turret stands on its own tile now. The hull AND the cannon are both drawn half a
tile further south, so the emplacement stops reading as balanced on the tile boundary
behind it. Measured on the before/after screenshots: 0.5 tiles (32 px at 64 px/tile)
for both sprites, which is what makes the gun sit on the deck instead of floating
above it
- The pipe stubs do not move: they are drawn by the engine on the pipe grid, not as
part of the art. The north stub therefore loses half a tile of overlap with the hull
(visible in docs/verification/visual-rework); the south stub, which used to show bare
ground between itself and the front rim, now tucks under it properly. No
pipe_connections changed, so nothing already built disconnects
- The beam's cutting core is a soft sprite instead of two rendering.draw_line quads.
draw_line has no render_layer field at all, so with a smog/weather mod installed the
core drew in FRONT of the smoke while the rest of the lance sat behind it -- the
whole lance now shares one render layer and one tint. It also loses the hard edge
that made it read as a graph line at every zoom
- The lance no longer stops dead at maximum range: a ragged plume is carried past the
tip (1.2 tiles cold, 2.6 white hot) and the last two sheath tongues run past the end,
so the heat thins out instead of being cut
- A barrel pointing away from the camera now fires a lance that starts past the gun
rather than burning over it (the drawn start moves 0.55 tiles down the barrel). The
lance stays in front of the world -- deliberately: an earlier attempt drew it behind
the turret on a lower render layer, which put it behind every biter nest and wall it
crossed
- Spin-up indicator: five lights on the hull deck fill one at a time as the turret
winds up (cold to white hot over 2.5 s) and go out as it cools, so "how hot is this
one" is readable instead of guessed from beam width
- The emitter's bleed-off glow follows the mouth now. It used to stay where the last
shot was fired, so a turret that turned left a glowing disc hanging next to the gun
Bugfixes:
- The lance is coloured by the fuel that is BURNING, not by whatever fuel is present.
A fluid turret holds two fluid boxes (the piped one and the internal buffer) and both
are reported by get_fluid_count, so "highest damage_modifier present" could colour the
beam with fluid that was only waiting in the pipe. The turret now samples its own
consumption once per pulse (docs/verification/fluid-buffer.md)
Balance:
- No damage, rate, range or fuel numbers changed. The lance follows the burning fluid's
damage_modifier, which is the same rule the engine uses for its own stream
Version: 0.5.2
Date: 2026-10-27
Graphics:
- Pipe connections are the same hardware the Cubeine combustion center uses: the
space-age electromagnetic-plant pipe stubs, in their normal grey, drawn only on a
side that actually has a pipe connected (draw_only_when_connected), and drawn
behind the hull so what shows is the pipe running into the housing
- An unused side is now bare hull. The old build put a cap on all four sides, and
that cap sat at the connection point while the hull starts further out, so every
unused port showed a plate floating half a tile off the deck
- The mod's own rendered port and cap sprites are no longer used; on a base-only
install (no Space Age) the turret falls back to vanilla's pipe covers, the same
thing the flamethrower turret uses
Version: 0.5.1
Date: 2026-10-26
Graphics:
- The turret is re-rendered toward the vanilla palette. The body is mid-value warm
gunmetal instead of dark grey, the fluid hardware (compressor block, turbine
housing, pressurised fuel tank, copper feed lines running into the receiver) is
brass and copper, and the only saturated thing left is the orange heat in the
vents and the gauge lights
- The muzzle is a WH40K-style melta projector now: a fat cylinder with a ring of six
radial vents and a hollow, warm bore, so the pressurised stream has somewhere
visible to come out of. The flat pale plate that used to cap the barrel front is
gone -- the muzzle face is a dark bore with a hot-metal lip, and the vents carry
the glow
- The tone curve is refit for the new model (quantile-matched to vanilla
gun-turret-shooting-1.png). The assembled head measures mean 79 against vanilla
gun turret's 75, p50 63 vs 60, p75 116 vs 105, p90 177 vs 160, 14 % of pixels
under luma 16 (vanilla 11 %), warm +27 against +27 and no pure-white pixel at
all; the base layer measures mean 61 beside the vanilla flamethrower's 56-60 and
the laser's 63. The old curve was fitted to the dark model and sent the new
render to p90 234, which is what read as a white plate at the muzzle
- The warm accent is its own material, so it survives the downsample without
washing the barrel: the vent bores, the muzzle lip, the two pressure gauges and
the sight lens are lit by a small lamp material, while the glow collar between
the heat rings stays dim. One vent dot is about 2 art pixels at sheet scale,
which is why the first pass (an emissive of 0.9) disappeared entirely in game
- The icon and thumbnail are re-rendered from the same model through a fixed rig. A
lighting softbox used to be photographed as a flat white triangle in the icon's
top-left (the icon camera sees 4.2 tiles where the sheets see 4.0), which also
shrank the turret to 54 % of the icon cell; the plates are hidden from camera rays
now, the icon fills 65 % of the cell (vanilla gun turret 64 %) and its values sit
at p10/p50/p90 11/72/190 against vanilla's 19/80/175
- check_sheets.py checks the thing a misordered or duplicated direction actually
breaks: the head centroid has to walk a closed loop with no jump over 4 px (this
art: 2.08 px worst step, 1.53 px closure). The old test compared the centroid's
bearing against 64 bins, which this model can never pass -- the receiver is
heavier than the barrel, so the bearing trails the muzzle and flips at the poles
(60-63 distinct bins on both the old and the new sheets)
- The crafting-menu icon reads as a turret now instead of a rounded pod. It was a
shape-budget problem, not a camera one: the 3.1-tile emplacement left the 1.5-tile
cannon 15 % of the silhouette, so at the 32 px size the menu draws it collapsed into
a warm oval. The icon render now scales the gun about its own bore (sheets untouched)
and lights the muzzle white-hot: protrusion 15.5 % -> 23.1 %, reach 1.60 -> 2.03,
barrel-versus-body contrast 21 -> 50 luma, against vanilla turret icons at 20-24 %
and 1.7-2.5. The technology icon and the portal thumbnail keep the machine's real
proportions (docs/verification/icon-read-0.5.1.md)
Balance:
- The cold barrel now lands where it has to: 32 damage per pulse (240 dps) instead of
14 (105 dps), i.e. level with a gun turret on uranium rounds, even though the melta
only reaches 16 tiles and drinks fluid. Fully spun up it is 56 per pulse (420 dps,
1.75x cold) -- measured against an unarmoured dummy in game.
- The beam damage now scales with research. Before this it was invisible to every
technology in the game: the turret stayed at 240/420 dps while a gun turret went to
1633. It takes the same two dips a gun turret takes -- the fire damage line
(refined flammables) and the turret firing speed line -- and holds cold parity with the
gun turret at every tier (1.00x-1.15x measured), 1.75x its own cold dps when white hot
(1.76x-2.02x the gun turret) (docs/verification/balance-verification.md).
- The researched firing speed is delivered in full. The pulse clock used to round every
interval up to a whole tick, which silently threw part of the bonus away (+80 % rate
fires every 4.44 ticks: the old clock pulsed every 5, i.e. 12 pulses/s instead of
13.5). It now carries the fraction of a tick forward, so the average interval is the
researched one; that alone was worth 15 % of the melta's dps at tier 4.
- Flat armour no longer eats the beam. The engine subtracts a target's `decrease`
before applying its percentage resistance; the pulse is now handed that much extra so
the subtraction cancels. Percentage resistance is untouched (a 100 % fire-resistant
target still ignores the fire share), and a NEGATIVE flat resistance (which means
"takes extra damage") is left alone. A behemoth's 12 flat armour used to absorb a
whole cold pulse (2.75 damage where an unarmoured body took 17.6); it now takes 90 %
of the unarmoured figure, i.e. only its 10 % resistance. Big/huge asteroids carry
positive 2000/3000 physical flat armour, so their slice is compensated too -- it is
0.2 % of a big rock's health, and the asteroid channel is unchanged.
- The tooltip says both things: it ignores flat armour, and it scales with flamethrower
damage and turret firing speed research.
Changes:
- The turret is listed with the other turrets instead of at the end of the combat
tab. Its item moved out of the defensive-structure subgroup, where the walls, gate
and radar live, into the turret subgroup, on an order key taken from the
flamethrower turret's own and extended by one segment: in the 2.1.23 crafting menu,
searching "turret" reads gun, laser, flamethrower, melta, artillery, rocket, tesla,
railgun
- Every string the player reads is in the base game's register now instead of the
mod's own: item, entity, technology, fluid and mod descriptions in sentence case
with US spelling, using the "needs a fluid supply instead of ammunition" phrasing
the flamethrower turret uses. The fuel list names the fluids it takes instead of
drawing three unnamed drops, and the two lines about armour and research render at
all -- a parameterised localised string drops everything appended after its last
parameter, so they belong to the tooltip's own description
Fixed:
- The pipe ports are sized and placed like a pipe fitting rather than like a collar:
1.03 to 1.08 tiles across, against a pipe's 1.00 to 1.11 and vanilla's own 0.80
pipe cover, where they were 0.59 to 0.70; and the inboard end sits 0.35 to 0.52
tiles from the centre where it was 0.91 to 1.09. The port is scaled about its
mouth, so the far end stays on the pipe on all four sides and no floor shows
between the two (seam 0.00 on every side). Moving the connection point itself a
tile inwards cannot work: at pipe_reach 0.75 all four sides still link, at 0.50
two of them stop linking and no fluid arrives, so the art carries the move and the
reach stays 1.12
Version: 0.5.0
Date: 2026-10-25
Graphics:
- The firing beam is no longer a hairline. rendering.draw_line's `width` is in PIXELS
(32 per tile) and the old layer table was written as if it were tiles, so the whole
four-line stack was at most 1.90 px = 0.06 tiles wide -- thinner than the barrel it
came out of. Measured from a 64 px/tile screenshot, the lance is now 1.03 tiles wide
at half maximum (16.5x wider), puts 2.8x the light into the scene, and the peak is
no brighter (so it gained body, not glare)
- The beam is built in layers now: two sharp core lines, three additive glow sprites
(wide soft haze -> tight bright gas), six boiling sheath tongues that re-roll a few
times a second, a muzzle flare plus a directional blast cone, an impact flare that
follows the body it is cutting, and a tip flare where the lance runs out of reach
- The glow reads on dark ground: the sprite layers blend additively, and their
textures are generated white with the shape in the alpha channel
(graphics/beam/generate.py), so one set of five textures is tinted with whatever
fuel is burning (oil orange, gas blue, melta green, napalm red)
- The beam fades out over 10 ticks instead of snapping off, and it keeps fading when
the turret or its target dies mid-beam: a dead turret's lance is handed to a fade
list, drawn from its last geometry and then freed, so no beam can be left stuck in
the air
- Cheaper than the old beam despite owning 17 render objects per turret instead of 15:
the draw path allocates nothing per tick (measured -15% script time with six turrets
firing continuously)
Changes:
- Reach is 16 tiles (was 12), and quality extends it through the engine's own
`range_multiplier` rather than a script multiplier: 16 / 17.6 / 19.2 / 20.8 / 24 at
normal / uncommon / rare / epic / legendary, and that is both the acquisition and the
firing range. The drawn lance mirrors the multiplier and stops at `C.range_max` = 24,
so a modded quality with a silly number cannot hand the turret a 48-tile beam.
Measured headless on 2.1.23: a normal melta engages at 15 tiles and not 19, a
legendary at 23 and not 27, and with the quality mod disabled the whole ladder
collapses back to 16
- The head turns 5x faster, 0.03 turns/tick (10.8 deg/tick) instead of 0.006 (2.16,
inherited from the rocket turret): half a turn takes 16-17 ticks (0.27 s) instead of
83 (1.4 s). The old speed could not track a behemoth biter crossing at 0.3 tiles/tick
inside its own range; worst-case aim error while tracking that crossing is now 10.7
deg. Still twice the vanilla gun turret's 0.015, so it reads as a heavy mount and not
a snap turret
- The beam can break asteroids now. Every space-age asteroid resists 100 % of the
damage types it does not list, and fire is listed for none, so 85 % of every pulse was
zero; big and huge rocks then subtracted 2000/3000 flat armour from what was left.
Measured before: 11 pulses per small rock, 31 per medium, and a big rock took 0.14 hp
from 236 pulses -- effectively immune. Each pulse now adds one extra `explosion` hit
(the type the vanilla asteroid ladder is balanced on: 50/30/10/99 %) sized
`C.asteroid_damage_multiplier` = 1.6 and gated on `entity.type == "asteroid"`:
small 100 hp = 2-3 pulses (0.75 s), medium 400 = 5-7 (1.4 s), big 2000 = 17-21
(3.4 s), while a huge rock still outlives a full minute of fire and stays railgun
work. Pawns are untouched (821 -> 823 dps on a plain dummy, behemoth TTK ~4.2 s
either way); set the dial to 0 to switch the rock channel off
Fixed:
- Pipes read as connected on all four sides. The turret was setting only
`fluid_box.pipe_covers`, which 2.1 draws where NOTHING is connected
(`always_draw_covers` defaults to true when `pipe_picture` is absent), so every side
got vanilla's cap collar about 0.3 tiles short of the pipe, and no port art at all
where the pipe arrived. It now carries its own port model -- mount pad, ribbed neck,
bolted clamp collar, socket mouth -- as `pipe_picture` where a pipe is connected and a
blanked-off plate as `pipe_covers` where none is, with a per-side offset for the 51
deg camera (south +0.18, west -0.22 tiles). Port reach overlaps the pipe's near edge
by 0.35-0.58 tiles on every side with no bare floor between them; straight, L, T,
cross and dead-end runs all meet cleanly, and an unconnected port shows the bolted
plate instead of a floating collar
- The impact flare no longer lingers on a dead body: it is re-positioned to its target
every tick and hidden the instant that body dies
- The core lines are mixed toward white; a fuel-coloured line over an additive glow
measured darker than its surroundings and drew a dark seam down the middle of the
beam
- Beams no longer outlive their turret's death: mining or destroying a firing melta
used to leave the render objects destroyed mid-fade, now the lance is retired and
freed through a fenced path
- The inspect panel now prints the damage the turret actually deals. The beam is
script damage, not the engine's, so the panel had no damage line at all; the text
is generated from constants.lua (14 per pulse cold, 56 at full charge, 85 % fire +
15 % physical, 7.5 pulses/s, 82 % pierce falloff up to 12 bodies, every fuel
multiplier, the asteroid channel) and is translated in locale/en and locale/ru,
so the tooltip cannot drift from the numbers control.lua applies. Verified by
measuring a pulse against an unarmoured dummy: 56.00 hp at full charge on light
oil, and 89.63 = 56 x 1.60 on enriched melta fuel
Sound:
- The firing cue is a layered sound now instead of one flat noise bed: a sharp
pressurised release on the first sample, a sizzling roar as the stream burns, and
a turbopump hum spinning up underneath that gives the shot its weight. Three
variations of the ignition, so a turret that stops and starts firing does not
sound identical every time
- It is heavier than the gun and laser turrets on purpose, and longer than a
gunshot: the melta holds a beam, so the cue is the engine's begin/middle/end
cycle (the same model the vanilla flamethrower turret uses). Measured effective
loudness -18.5 dBFS for the shot and -18.4 for the sustained loop, against -19.2
and -19.7 for the flamethrower turret, -25.9 for the gun turret and -26.2 for
the laser turret
- Every cue is synthesised by sound/_generator/melta_sounds.py and checked after
encoding: 44.1 kHz mono Ogg Vorbis, RMS-normalised (peak-normalising is why the
old loop measured -26 dBFS RMS and sounded quiet), a transient on sample 0 with
no leading silence, and no cue decoding above -3 dBFS so two overlapping shots
cannot clip
- melta-start.ogg is replaced by melta-fire-1/2/3.ogg, listed as `variations` on
begin_sound; nothing references the old file and no unreferenced sound is left
in the mod
Version: 0.4.0
Date: 2026-10-25
Graphics:
- The turret is modelled and rendered in Blender now instead of drawn: a rusted
industrial emplacement plus a wide-bore melta cannon (chunky breech, ribbed copper
heat coils, vented shroud, welded seams, rivets, dents, chipped paint, rust streaks)
rendered for all 64 directions off one fixed top-down key light
- The cannon is ~2.4x longer and ~2x fatter than the old drawn head, so it reads as a
real gun next to the vanilla gun and laser turrets
- The muzzle's front face is 1.512 tiles from the pivot (it was 0.66): the beam starts
at the barrel mouth, and gun_barrel_length / the beam anchors follow the art
- The hull art is the mod's own render, so the turret looks the same with or without
the Space Age rocket turret installed
- selection_box widened to +-1.6 tiles and drawing_box_vertical_extension added so the
big cannon is fully clickable and does not clip behind neighbours; collision_box is
unchanged at +-1.2 tiles, so existing blueprints place exactly as before
- The turret, the item that places it, the technology and thumbnail.png use icons
rendered from that same model now, so no vanilla turret icon art is borrowed
- The fluid box became a symmetric four-port set at 1.12 tiles carrying vanilla
pipe covers, and the hull is de-squashed in Y so the north and south sockets
meet it: a pipe ends in a visible socket on all four sides
Fixed:
- The beam no longer appears while the turret is still turning: it waits until the
head is within one rotation step (2.16 deg) of the target, and the muzzle plays a
short charge-up glow instead. dps is unchanged against a target the barrel is
already on (measured: 673.0 dps before and after)
- The beam now starts exactly at the barrel mouth in every direction, instead of at a
fixed point in front of the pivot: the rendered head is a pitched-camera image, so
the mouth sits 1.51 tiles from the pivot pointing north but only 0.39 pointing south
(a raised muzzle is drawn further up the screen)
- Damage is fire with a physical slice instead of a damage type of the mod's own:
each pulse is 85 % fire + 15 % physical out of the same total, and the `thermal`
damage type is gone from the mod entirely
- The firing sound is ~15 dB louder in the mix: the loop was re-mastered
(-26.4 -> -15.2 dBFS RMS) and now sits at -18.3 dBFS against the vanilla
flamethrower turret's -19.2, with aggregation capped at 2 voices so several
turrets cannot clip
Notes:
- Art pipeline lives in graphics/_blender/ (melta_render.py, assemble.py,
check_sheets.py, muzzle_marker.py, check_beam_anchor.py, README.md); re-render with
one command, no hand-drawn pixels
- muzzle_marker.py projects the model's own muzzle points through Blender's camera and
check_beam_anchor.py tests the result against every shipped frame, so the beam anchor
can be re-derived after any re-render instead of guessed
- The 15 % physical slice is absorbed by the biters' flat physical armour: dps is
unchanged against unarmoured targets but ~8-15 % lower against medium, big and
behemoth biters. C.physical_share is the dial if that trade is not wanted
- Pipe joins: east, south and west meet the hull; north leaves ~0.12 tiles, and
vanilla assembling-machine-2 (same +-1.2 collision box) leaves 0.22 on its own
north side. Measured by graphics/_blender/pipe_sockets.py --check
Version: 0.3.0
Date: 2026-10-22
Features:
- Own sound set, synthesised (sound/_generator/melta_sounds.py): a jet-exhaust loop with a
sizzling top layer, plus pressure build-up and shut-down cues
- Fuel defines the beam: light-oil (orange, 1.0x), petroleum-gas (blue, 0.85x),
enriched melta-fuel (green-white, 1.6x), incendiaries napalm (deep red, 1.35x)
- Enriched melta-fuel is now laced with uranium: 20 light oil + 2 uranium-238 + 1 sulfur -> 100
- Burn rate raised to ~19/s cold and ~47/s held at full intensity (was ~1/s)
Bugfixes:
- The fuel surcharge could throw "Fluid index out of bounds": remove_fluid is (index, amount)
Version: 0.2.1
Date: 2026-10-22
Changes:
- Fuel list is data-driven: the turret accepts any fluid listed in constants.lua that exists
in the install, and the fluid box is no longer filtered to one fluid
- Lily's Incendiaries integration: lilys-napalm-mix can be piped straight in and burns 35%
hotter than pyrum
- Wanderer integration hooks: if an iridium item/technology appears, the turret recipe and
the technology pick it up automatically (nothing happens when they are absent)
Version: 0.2.0
Date: 2026-10-22
Changes:
- Fuel is now a liquid: melta-fuel, brewed from light oil, piped straight into the turret
(the turret is a fluid turret for that reason; its stream is invisible and only carries
the fluid burn, the beam is drawn by the script)
- New drawn 64-direction emitter head replaces the recoloured rocket pod; the hull art is
still the vanilla rocket turret, untouched
- The beam now runs its full length instead of stopping at the first body it cuts
- Beam is layered (haze / glow / hot / white core) with a boiling plasma sheath on the
outer edge, a muzzle flash and a burn pop on every body it cuts
- Friendly forces are never damaged; the beam passes over your own walls like any turret
Bugfixes:
- A turret with no fuel no longer damages anything
Version: 0.1.0
Date: 2026-10-22
Features:
- Melta turret: fuel-fed thermal beam turret on the rocket turret hull
- The beam pierces every body in line; thermal damage is its own damage type
- Beam spins up over 2.5 s of sustained fire and decays in 1 s
- Melta fuel item, recipe and the technology that unlocks both