An experimental prototype that replaces the linear tech tree with a mining-triggered card draft: weighted odds and pity protection decide which technologies you're allowed to research next, while drill heat builds up alongside it and throttles how efficiently that mining converts into progress — deliberately paired with the draft, not meant to be balanced or modded separately. Tuned against Space Age progression; no full gameplay validation performed for either configuration.
Small changes concerning balance, gameplay, or graphics.
Version: 0.2.27
Date: 2026-08-22
IMPORTANT:
- The "Spell Card Reissue" setting for established/old players has
also been reversed and renamed to "Block Old Fairy (experimental)",
to match the "New Fairy" fix below and use the same opt-in-to-block
pattern. Its old key (card-tech-draft-late-join-deal-enabled) let
established players get their hand reissued on reconnect only when
a server owner opted in; the new key
(card-tech-draft-late-join-deal-block-old-players) flips this:
default off means established players are reissued a hand
immediately on reconnect; turning it on is the opt-in action, for
owners who specifically want returning players to wait for the
next round instead.
- The "New Fairy (experimental)" setting has been reversed and renamed
to "Block New Fairy (experimental)". Its old key
(card-tech-draft-late-join-deal-include-new-players) let brand-new
players draft mid-round only when a server owner opted in; that
turned out to be an unfriendly default for the vast majority of
server owners who never touch this setting, since it silently
blocked every new joiner by default. The new key
(card-tech-draft-late-join-deal-block-new-players) flips this:
default off means new players are dealt in immediately, same as
always-known players; turning it on is now the opt-in action, for
owners who specifically want to keep newcomers out of the current
round.
- Both settings work the same way now: opt-in to block, for a single
round's worth of card-pack access -- not a persistent restriction.
A blocked player still gets their pack normally starting the very
next round; the setting only delays that one initial "you get to
draft this round" moment, giving new or returning players a chance
to get their bearings before facing an irreversible tech-card
choice. It isn't a tool for gatekeeping who gets to play the mod.
- This is a real, intentional default-behavior change for every
existing save -- regardless of what either old setting was
previously set to, both old and new players are no longer blocked
by default unless the corresponding new setting is explicitly
turned on. Both old settings have been removed; any values they
held are simply unused going forward.
- Turning either "Block Old Fairy" or "Block New Fairy" off (from on)
now immediately grants a hand to any already-connected player who
was being held back by it, instead of making them wait to
reconnect again. Turning either one on does not retroactively take
back any hand already dealt.
- "Block Old Fairy" now targets anyone who has connected before, not
just players who've actually drafted a card -- it's meant as a
lighthearted switch for messing with friends on your server, not a
strict newcomer check. A player only counts as an "Old Fairy" from
their second connection onward; their very first-ever connection
is still governed by "Block New Fairy".
- Fixed a real bug: "Block Old Fairy" and "Block New Fairy" only
affected players reconnecting mid-round; a player who stayed
connected and simply waited for the next round to deal naturally
was never blocked, since the normal per-round dealing loop never
checked either setting. Both settings now apply consistently
whether a blocked player is already online when a new round starts
or reconnects mid-round -- as long as the setting stays on, they
won't get dealt in either way.
- "Block Old Fairy" and "Block New Fairy" now take effect
immediately the moment you turn them on, even for a player who
already has this round's pack or eligibility -- their access to
the current round is revoked on the spot (with a heads-up message)
instead of only affecting future rounds or reconnects. Turning
either one off immediately restores access the same way.
- Fixed another gap in the same area: if either setting was already
on *before* upgrading the mod (or before a save was reloaded), the
revoke described above never ran, since it only fires in response
to the setting actually changing value. Loading a save (or
upgrading the mod) now re-applies both settings immediately,
including to players who happen to be offline at that moment.
- Fixed a third gap: a blocked player who already had a leftover
pack or eligibility from before they were blocked (e.g. they went
offline holding a legitimately-dealt pack, and the host blocked
them while they were away) would still briefly see that old pack
the moment they reconnected, before anything caught up with them.
Reconnecting now clears any such leftover access immediately, and
the on-screen HUD is only built after that check runs, so a
blocked player never sees so much as a flash of a pack they
shouldn't have.
- Added a final safety net: opening, selecting, or confirming a pack
now always re-checks "Block Old Fairy" / "Block New Fairy" at the
moment of the action itself, regardless of how any underlying
pack data got there. This closes the loop against any
not-yet-discovered path that might otherwise let a blocked player
slip through -- being blocked now means blocked everywhere,
checked at the single point every part of the mod already reads
pack data from.
Bugfixes:
- N/A (this is a design correction, not a code defect -- see IMPORTANT
above; the old defaults were working exactly as coded, just in the
wrong direction).
Version: 0.2.26
Date: 2026-08-21
Features:
- New experimental setting "Frog Points spread to whole factory"
(off by default). When enabled, every producing building (not
just mining drills) contributes Frog Points and heat, and --
if the optional "thermal-debt" mod is also installed -- its
heatsinks work alongside the built-in Waste Heat Exchanger
(not instead of it) to dissipate that heat, with quality and
building-adjacency both increasing the effect.
- Waste Heat Exchanger and thermal-debt's heatsinks now boost each
other when placed adjacent to each other (previously only
same-type adjacency counted), so mixed layouts of both building
types are rewarded, not just clusters of one or the other.
- Waste Heat Exchanger now cools itself down gradually over time
even when this setting is off, and never takes damage or is
destroyed from overheating.
- Waste Heat Boiler gains a quality-scaled bonus to its steam
output when the whole-factory setting above is active.
Changes:
- Waste Heat Exchanger and Waste Heat Boiler max health raised
(200 -> 600 and 200 -> 300) and their crafting costs reduced.
- Various balance numbers for the new whole-factory heat/dissipation
system were tuned based on testing (decay rates, generation
rates, fluid conversion ratios); see notes/design_notes_8.md for
the full derivation history if curious.
- The "Thermal Debt compatibility mode" setting was renamed to
"Frog Points spread to whole factory" and its description
simplified.
Compatibility:
- Added "? thermal-debt" as an optional dependency. Nothing changes
for players who don't have it installed.
- Added notes/thermal-debt-api-request.txt documenting the remote
interfaces this mod can use from thermal-debt when present
(cool_building, get_heatsink_info, get_heatsink_summary), all
used defensively -- their absence never breaks anything.
Bugfixes:
- Fixed a real multiplayer desync caused by summing floating-point
values in an order that isn't guaranteed identical across
machines in several of the new heat/coverage calculations.
- Fixed existing player characters on upgraded saves sometimes
being unable to open card packs (two separate save-migration
gaps, one of which could permanently lock a force out of ever
opening packs again until fixed).
- Fixed the Waste Heat Exchanger having no effect on thermal-debt's
own separately-tracked mining-drill overheat while the
whole-factory setting was on.
- Fixed several formula and unit-conversion mistakes in the
whole-factory heat dissipation math found during testing.
- Fixed a stale, inaccurate in-game description and an incorrect
changelog format that broke this very changelog viewer for all
versions.
- Fixed the whole-factory setting's own description, which
incorrectly claimed both the Waste Heat Exchanger and Waste Heat
Boiler pause while it's on. Confirmed final: the Exchanger never
pauses under either mode (it keeps generating physical heat into
the network the whole time); the Boiler's own throttle depends
entirely on the shared network reaching a minimum temperature,
and under this setting the Exchanger's heat output is split with
thermal-debt's heatsinks rather than going to the Exchanger
alone, so in practice the network often doesn't clear the
Boiler's threshold and it sits idle -- confirmed by testing, not
an explicit "pause the boiler" rule in the code.
- Fixed a crash (attempt to index a nil value) in the exchanger/
heatsink mutual-adjacency check, reported from an actual game
session. Root cause: Factorio 2.0's runtime API can return a
prototype's selection_box using named fields (left_top/
right_bottom) instead of the older numeric-index array format
this code assumed; now supports both.
- Fixed a second, more severe multiplayer desync source: two
helper functions (recipe-weighting for mystery-pack rewards)
picked "whichever recipe pairs() happened to find first" when
multiple recipes produce the same fluid/item as a byproduct, then
cached that choice permanently for the session. If different
machines' internal table iteration order picked a different
recipe, the cached weight diverged permanently and fed into
reward calculations -- a discrete, immediate divergence rather
than a slow rounding drift, matching a report of desyncing much
faster (within ~12 minutes, then again ~17 seconds after
reconnecting -- the cache isn't persisted, so reconnecting
redoes the same ambiguous search) than the round-22 fix
addressed. Now collects all matching candidates and deterministically
picks the alphabetically-first one by recipe name, regardless of
iteration order.
- Found and fixed the most severe desync source yet, during a
requested conservative full-file audit: get_available_pool()
built its tech pool by iterating force.technologies with pairs(),
an order that isn't guaranteed consistent across machines. That
pool's order then flowed into both card-drawing paths' weighted
cumulative-sum selection (walk candidates in order, accumulate
weight, stop when a random roll falls within the running total)
-- for the exact same random roll and the exact same set of
weights, a different candidate order can select a completely
different technology card. This directly affects which card a
player is offered on every single pack, not an edge case. Fixed
at the source: the pool is now sorted by technology name before
being returned, so every downstream consumer (both drawing modes)
automatically gets a machine-independent order.
Version: 0.2.25
Date: 2026-08-13
Features:
- New debug command /draft-tech-check <tech id> -- looks up a
single technology's current enabled/hidden/researched state
and whether it's currently eligible for the draft pool, with
the specific reason why or why not. Mainly useful for
verifying that another mod's deliberately-hidden technologies
(e.g. The Cave's fluid-wagon under Train Interiors) are
correctly excluded, without having to open dozens of packs
and eyeball the results.
Optimizations:
- Replaced four separate per-second "scan every surface for
mining drills / waste heat boilers / waste heat exchangers"
loops with a single event-driven entity cache that's updated
only when those entities are actually built or removed.
Previously each of those loops re-scanned every surface on
every tick interval; with mods that create many additional
surfaces at runtime, the fixed per-surface call overhead
could add up noticeably. Existing saves get the cache
backfilled once on load; new games start with an empty cache
that fills in as things get built.
Changes:
- The mystery card (⑨) can now resolve into a mix of real tech
unlocks and item rewards in a single pick, instead of the
whole outcome always being one type or the other. The total
number of things it unlocks is still capped by how many cards
were shown that round, with one long-standing exception: when
⑨ is the only card in the round, it can still resolve into
1-3 outcomes as before. The ❄ item-rewards setting still
controls whether items can show up at all; turning it off now
falls back to a real tech unlock for that specific outcome
slot rather than removing the possibility of that slot
entirely, so turning ❄ off or on no longer changes how many
total things a given ⑨ pick can unlock -- only what kind of
things fill those slots.
- Spell Card Reissue now stays in effect for as long as its
setting is on, instead of only firing once at the moment you
flip the switch. An eligible player who reconnects while the
setting is on now gets a hand dealt automatically the moment
they join, on top of the existing one-time catch-up for
whoever's already connected when you turn the setting on.
- Spell Card Reissue and its "New Fairy" companion setting are
now fully independent instead of the latter only mattering
when the former is on. Any combination now works, including
"established players wait for the next round, new players get
dealt in immediately" -- previously impossible since the two
were coupled. Existing saves with the specific combination of
Spell Card Reissue off + New Fairy on will see a real behavior
change here: that combination used to do nothing, and now
enables reissue for new players only.
- IMPORTANT, affects Shared mode by default: both settings above
now also apply to Shared mode, not just Independent hands.
Shared mode previously had no eligibility concept at all -- any
connected player could always see and pick from the shared
pack, regardless of when they joined. That's no longer true.
With both settings at their off-by-default value, a player who
is offline when a round is dealt and reconnects later will now
see a "not eligible for this round yet" message instead of the
shared pack, exactly like Independent hands has worked since
0.2.21 -- they'll be eligible again starting next round. This
changes the out-of-the-box experience for every Shared-mode
game, not just testers of the two experimental settings; if you
want the old "anyone connected can always open the pack"
behavior back, turn Spell Card Reissue on (nobody has been
through a "New Fairy"-only scenario tested yet, so treat that
specific combination as less proven than the rest).
Bugfixes:
- `/draft-heat-debug` crashed with "Entity is not heat-interface"
when run on a waste heat boiler, because it unconditionally
called an exchanger-only API method. Selecting a boiler now
shows its own active/PWM-throttle state instead.
- `/draft-reveal-all` (the uninstall-prep command) didn't skip
technologies another mod deliberately marks hidden, so running
it could permanently un-hide something like The Cave's
fluid-wagon -- fighting that mod's own design even after this
one is removed. It now leaves those alone and reports how many
it skipped.
- Technologies that another mod deliberately marks as hidden
(used for internal, obsolete, or intentionally unreachable
tech) could still be pulled into the tech draft pool, letting
players unlock things the other mod never intended to expose.
The draft pool now skips hidden technologies, and a hidden
technology's downstream techs no longer count toward a card's
"how many follow-up cards does unlocking this open up"
weighting.
- Manual mining progress only ever counted vanilla resource
entities. Some mods (The Cave, specifically) build their core
digging gameplay around non-resource entities that are still
minable by hand -- those never contributed anything, so
playing through that content earned zero tech-draft progress
no matter how long you dug. There's now an extensible
allow-list for exactly this situation (currently covers The
Cave's cave-wall dig/rubble entities), using its own separate
weight from ordinary resource mining rather than assuming the
same conversion rate applies.
- The optional Discord bridge notification (see 0.2.24) now
sends the picking player's own tech/item names instead of
internal identifiers, translated into that player's own
client language. It's also no longer limited to real tech
picks -- picking the mystery card (⑨) or an item reward (❄)
now notifies the bridge too.
- The waste heat exchanger's highlight box (shown when you
select it, marking which nearby drills are actively
contributing) now uses the game's own selection-box artwork
tinted to this mod's colors, instead of a hand-drawn
rectangle, so it looks closer to native cursor highlights.
Version: 0.2.24
Date: 2026-08-11
Features:
- When a real tech card is picked, the mod can now optionally
notify an external Discord bridge mod (open-discord-bridge-v1)
if you have one installed, sharing the picking player's name
and which tech was unlocked. This requires both the bridge mod
to be installed AND a new server setting
(card-tech-draft-discord-bridge-enabled, off by default) to be
turned on -- having the bridge mod installed alone is not
enough to send anything.
- Added a server-admin setting for Independent hands mode
(card-tech-draft-late-join-deal-enabled, off by default). This
is a manual, on-demand tool, not a background process: the
instant you switch it on, every currently connected, eligible
player in that round who doesn't have a hand yet gets one dealt
immediately. "Eligible" specifically excludes brand-new players
who haven't received a hand through the normal dealing process
before, so newcomers on public servers aren't swept into an
in-progress round they don't understand yet -- a separate
setting (card-tech-draft-late-join-deal-include-new-players,
also off by default) lets you include them too if you'd rather
not draw that distinction. Neither setting keeps watching for
future arrivals -- turn late-join-deal off and back on again to
catch up anyone who becomes eligible later. Off by default,
matching the mod's behavior since 0.2.21 (a player who was
offline when hands were dealt just sees a clear "no hand this
round" message and waits for the next round).
Bugfixes:
- Fixed the waste heat exchanger's built-in settings GUI briefly
flashing open and immediately closing when non-admin players
clicked it in multiplayer. The entity's built-in GUI is now
disabled entirely (gui_mode = "none") since its temperature is
fully script-controlled and was never meant to be manually
adjusted; current temperature is still visible via the
entity's info panel as before.
Changes:
- Renamed several settings' display names and descriptions
(internal setting IDs are unchanged, so existing per-server
configuration carries over): "Tech point threshold" is now
"Frog Points", "Pack count difficulty" is now "Spell Card"
(with a shorter, more mysterious description to match), and
"Deal-in reconnecting players" is now "Spell Card Reissue".
The mystery-pack-rate option labels (Off/Low/High) are now
Flower/Dragonfly/Fairy.
- The mystery pack's low-rate option is back to its original,
lower value (it was briefly raised in 0.2.22, and is now
reverted by request). The high-rate option is unchanged. As
always, exact odds are intentionally not published here --
see the in-game setting description.
Version: 0.2.23
Date: 2026-08-09
Features:
- Added a "Masochist Mode" toggle
(card-tech-draft-dou-m-enabled, off by default). This is
independent from the difficulty threshold slider below --
the slider sets the starting cost, this switches which growth
curve formula gets applied to it. On, it brings back the
original 0.2.18-0.2.22 curve (the steep one being replaced this
version); off, it uses the new gentler curve. If you want to
fully recreate the old version's default feel, you'll want to
combine this with setting the threshold slider back up as well
-- the in-game description spells out the specific combination.
Switching it mid-game is reconciled the same way a difficulty
change is: any resulting surplus or shortfall gets settled
immediately rather than silently carried forward.
Changes:
- The tech point threshold difficulty setting
(card-tech-draft-difficulty-threshold) keeps its familiar
1-200 range, but the underlying growth curve itself has been
replaced rather than just adjusted -- the early-game ramp-up is
noticeably gentler than before. This is a full replacement, not
an additional option alongside the old curve: the previous
steep curve was tuned for players who rush mining expansion
hard from the start, and it created a real difficulty spike for
anyone playing at a more relaxed pace, especially early on. The
new curve keeps the same overall shape (a faster ramp for the
first ~20 packs, then a long steady stretch afterward) but
scales down substantially, so players who want a gentler ride
now have real room to dial it in, not just a narrow band at the
low end of the old range. (If you specifically want the old
steep curve back, see Masochist Mode above.) The default value
has also moved down accordingly. If you were previously running
at a high difficulty value expecting the old steep curve, note
that the same slider value now behaves differently -- the
settings screen shows the current valid range and default going
forward. Existing saves are handled automatically: on first
load under this version, any save that had already accumulated
progress under the old curve gets reconciled against the new
one, and any resulting surplus is refunded as
immediately-available packs, the same way a manual difficulty
change already gets reconciled today. You shouldn't need to do
anything for this to happen.
Bugfixes:
- Fixed an edge case where very low difficulty values could get
stuck: under certain conditions the threshold calculation could
round down to the same number it started from, permanently
halting the difficulty curve's progression for the rest of a
playthrough. This no longer happens across the supported range.
- Fixed a save-migration edge case: saves created before this
version's threshold history tracking existed now correctly
backfill their historical totals using the curve that was
actually in effect when those packs were purchased, instead of
the current one -- this only matters for older saves updating
through this version for the first time, and has no effect on
saves that already have this history tracked.
Notice:
- Versions 0.2.18 through 0.2.22 all shipped with the same tech
point growth curve, and that curve had a fundamental design
flaw: it compounds into an unplayable number by the late game.
0.2.22 is being kept on the mod portal going forward purely as
a historical reference -- it will not be pulled, but it is no
longer a recommended starting point for new games, and future
releases do not guarantee migration support from any save on
0.2.22 or earlier. If you're on one of these versions, this is
the version to update from.
- The migration path for saves from 0.2.18-0.2.21 has been
verified through code review and simulation (the growth curve
formula is confirmed identical across all four versions), but
has not been tested against an actual save file from any of
them. If you're updating from one of these and hit something
that looks wrong, please report it -- this is a known gap in
test coverage, not a known issue.
Version: 0.2.22
Date: 2026-08-09
Features:
- Added a "Pack count difficulty" runtime-global setting
(card-tech-draft-pack-count-difficulty, three tiers: easy/
normal/hard), replacing the previously fixed three-card hand.
Each time a pack opens, how many card options you see (1-5) is
now rolled from a bell-shaped distribution tied to this
setting -- rarer at the extremes, most common in the middle.
This is a separate axis from the existing tech point threshold
setting: it changes how many choices you get, not how often a
pack opens. In Independent hands mode, each connected player
rolls their own count independently, so different players in
the same round can end up with different-sized hands, not just
different cards.
- Added an experimental mystery pack setting
(card-tech-draft-mystery-pack-rate, off by default). When on,
each card slot has a chance of resolving to a special mystery
card ("⑨") instead of a real technology, competing directly in
the same weighted draw as the real candidates rather than being
a separate roll layered on top -- so it doesn't dilute or
inflate the odds of anything else. Never displaces a
pity-guaranteed pick. The setting has three tiers -- off, low,
and high -- for players who want a bigger dose of chaos. At
most one mystery card can appear in a given hand.
Picking it triggers a random payout whose strength and variance
scale with how many real cards accompanied it that round: fewer
real cards means a steadier, more guaranteed outcome; more real
cards means higher variance, anywhere from nothing at all to
unlocking a wide swath of technologies at once, and now also a
chance of a straight-up item windfall instead of a tech unlock
(see the item reward pool below). A brand new, still-experimental
mechanic -- feedback especially welcome.
- Added an item reward pool setting
(card-tech-draft-mystery-item-rewards-enabled, off by default).
When on, card draws (and the mystery card's payout above) can
also resolve into a bundle of items dropped straight into your
inventory instead of a technology -- one item pulled from each
of four rarity bands (common through epic; the rarest band is
reserved for other purposes), shown side by side so a single
pick isn't just one repetitive item. Quantities are pulled from
a curated pool spanning common materials all the way up to
end-game and Space Age items, and scale with how rare each item
is, how long it's been since that item last showed up, and how
involved its crafting recipe is, so the payout leans generous
rather than token. If your inventory can't hold it all, the
overflow spills on the ground at your feet instead of vanishing.
Turning this on also softens the tech point threshold for a
stretch afterward, refunding any packs you'd overpaid for under
the old threshold; turning it back off raises the threshold
again and settles the books the same way, so switching it on
and off isn't a way to game the threshold curve.
Changes:
- The hub-based "tiered draw" used in Independent hands mode
(each hand structurally spans a mix of high- and low-impact
technologies, instead of leaving diversity entirely to chance)
now scales to match however many cards a hand contains, instead
of assuming a fixed three. This is what makes the pack count
difficulty setting above actually produce varied, non-repetitive
hands in Independent hands mode regardless of hand size.
Version: 0.2.21
Date: 2026-08-08
Graphics:
- Opening a pack now uses a dedicated window centered on screen
instead of a row of small buttons tacked onto the bottom of the
HUD. Each of the three cards shows the technology's icon and
localized name, how many of its prerequisites are researched,
its science pack cost (as pack icons with counts, plus the
research cycle count), a short summary of what it unlocks, and
how many follow-up technologies it would open up. Previously the
only information on a card was its icon and a tooltip with its
name, which meant picking largely came down to recognizing the
artwork.
- The new window is registered as the player's open GUI, so Escape
closes it and opening any other interface dismisses it, matching
how vanilla windows behave. Closing it this way only closes the
window: the pack is not consumed, the hand is kept, and the pack
button reopens the same cards.
- Opening a pack no longer force-expands a collapsed HUD. The cards
used to live inside the HUD, so revealing them required expanding
it first, overriding the player's own collapse preference; the
cards are no longer in the HUD, so this side effect is gone.
- The Standard HUD size now carries a detail panel: Tech Points as
current / threshold with a progress bar, heat efficiency, working
drills out of total, how many of those working drills are covered
by a Waste Heat Exchanger, the resulting coverage ratio, idle
ratio, and the eligible exchanger count. The Compact size is
unchanged and shows none of this -- it stays deliberately minimal.
The figures are read from a snapshot the existing once-per-second
heat loop already computes, so the twice-per-second HUD refresh
adds no entity scanning of its own.
- All of the above uses stock Factorio frames, styles, fonts and
sprites (inside_shallow_frame, bordered_frame, slot_button,
progressbar, frame_action_button). No new prototypes or styles
were added for cosmetic purposes.
Features:
- Added a "Pack presentation style" per-player setting
(card-tech-draft-pack-ui-style, allowed values: window/simple).
"Window" is the new centered Draft window described above, with
full detail and two-step confirmation. "Simple list" restores
the pre-0.2.21 inline HUD card row -- one click and it's picked,
no confirmation step. Both share the same underlying data and
unlock logic; this is not a full/stripped-down pair, just two
ways to interact with the same system. Default: window.
- Added a "Tech point threshold (difficulty)" runtime-global
setting (card-tech-draft-difficulty-threshold, range 50-200,
default 100), replacing the previously hardcoded starting value.
Can be changed anytime, including mid-game -- this isn't meant
to punish players, it's meant to let each group pick its own
pace. The mod tracks how many tech points a force has actually
spent opening packs so far, and compares that against what the
new setting says should have been spent to reach the same pack
count. Lowering the setting mid-game refunds the difference as
tech points, immediately opening as many packs as that refund
now qualifies for. Raising it instead adds the difference as a
one-time surcharge tracked separately from the normal threshold;
the very next pack must cover the surcharge on top of its usual
cost, and once that's paid off the surcharge is cleared and the
threshold resumes its normal decay from where it already was,
untouched by the surcharge. The refund/surcharge accounting
itself has gone through several rounds of logic review but has
not yet been exercised in a live game -- feedback on whether the
numbers come out right in practice is especially welcome. This refund/surcharge accounting has
only been verified through logic review and offline simulation
of the same formulas, not by actually exercising it in a running
game -- feedback on how it behaves in practice, especially
around raising/lowering the setting repeatedly, is particularly
welcome.
- Picking a technology is now a two-step action: clicking a card
selects and highlights it and shows a confirmation row, and only
Confirm actually unlocks it. Cancel, or clicking the selected
card again, clears the selection. Unlocking is irreversible and
the cards were previously small, easily mis-clicked buttons, so a
single stray click could spend the round with no recourse. The
force-wide unlock announcement is unchanged.
- In a multiplayer round where several players have the window open,
whoever confirms first ends the round, and everyone else's window
is replaced with a notice naming who picked which technology
rather than silently vanishing. The same line is also printed to
chat, because a queued backlog pack can immediately start the
next round and overwrite the notice before it can be read.
- With Independent hands enabled, a player who was not connected at
the moment the round was drawn now gets an explicit message
explaining that hands are only dealt to players online at draw
time and that they will be included from the next round. It
previously returned silently, leaving the HUD showing a pending
pack that appeared to do nothing when clicked.
Bugfixes:
- Fixed a case where a single round could unlock two technologies in
multiplayer. A pack window is a static element and does not
update itself when the game state changes, so after one player
confirmed, another player's leftover window was still clickable.
Each round now carries an incrementing token (per force, bumped
only when a genuinely new hand is drawn, not when a backlog pack
is queued), and every select and confirm re-validates that a pack
is still pending, that the window's round token still matches,
that the technology is in that specific player's current hand,
and that it exists and is not already enabled. A click failing
any of these is rejected with a message instead of taking effect.
- The mining statistics behind the heat mechanic (idle ratio,
exchanger coverage) were only recalculated while heat was above
zero, so once heat decayed to zero they stayed frozen at whatever
they were in that last second. Harmless while the numbers were
only visible via a debug command, but they are now shown on the
Standard HUD, where a permanently stale idle ratio would actively
mislead. Statistics are now refreshed every second regardless of
heat; only the decay arithmetic itself remains conditional on
heat being above zero, exactly as before. The heat formula, the
exchanger eligibility rule and its force filtering are unchanged.
- Fixed the 0.2.18 Waste Heat Boiler 2x2-to-3x3 migration
indiscriminately destroying correctly-built 3x3 boilers on any
force experiencing its first mod update, regardless of whether
that force ever actually had old 2x2-era boilers. The migration
now checks that the save's old_version is actually no later than
0.2.18 before running, in addition to its existing per-force
one-time guard.
- Fixed the tech point threshold setting's refund/surcharge math
being based on an incorrect assumption about how many points a
force had already spent, which produced wrong results (usually
no refund at all when lowering the setting) for any force whose
history predates this setting, most notably saves updated from
0.2.19 or earlier. The mod now tracks each force's actual
cumulative spending and, for forces that predate that tracking,
mathematically reconstructs it from the force's current state
instead of assuming it always used today's configured value.
This reconciliation no longer depends solely on Factorio
detecting a mod version change between saves; it also runs the
first time a save is loaded under the new logic regardless of
version history, so it is not skipped by an in-place mod file
update that does not change the declared version.
Changes:
- The /draft-pack debug command now adds tech points via the same
code path real mining uses, instead of forcing a pack open
directly -- this lets the difficulty threshold setting actually
be exercised and tested through the command, including its decay
curve and backlog accumulation. Optional parameter to specify how
many points to add (e.g. /draft-pack 500); defaults to just
enough to cross the current threshold.
Version: 0.2.20
Date: 2026-08-07
Features:
- Added an experimental, off-by-default setting: "Independent hands"
(card-tech-draft-independent-hands, runtime-global). When enabled,
each connected player on a force draws their own independent hand
each round instead of the whole force sharing one hand -- useful
for comparing picks and discussing which one to spend the team's
shared research slot on. Tech unlocks remain force-wide (as they
always have been in vanilla); whichever player picks first ends
the round, and everyone else's still-unpicked hand is discarded.
Known trade-off, not yet addressed: the draft pool and its pity/
cooldown counters are still shared at the force level, not split
per player, so within the same round a player who draws later
sees a pool already shifted by earlier draws in that same round.
Untested in an actual multiplayer session -- feedback welcome.
Since this is a runtime-global setting, only admins can change it
mid-game (server owner discretion). Safe to flip at any time,
including while a pack is currently pending: each round now
locks in whichever mode was active at the moment it was drawn
(storage.pack_mode), so toggling the setting only affects the
*next* round -- it can no longer orphan a round already in
progress.
Changes:
- Waste Heat Exchanger no longer opens any GUI when clicked. Its
underlying vanilla type (heat-interface) ships with a debug panel
meant for manual heat testing, not player-facing interaction; a
custom read-only temperature window was previously substituted
in its place (since 0.2.16), but this is now removed entirely so
the building behaves like any other non-interactive entity (belts,
pipes, etc). The per-second heat_setting reset loop that prevents
cheating via the circuit network is unaffected and remains active.
- Waste Heat Boiler's entity description clarified: previously
stated the 465°C steam is "for ordinary steam engines," which
undersold its actual capability -- that temperature already
clears the threshold turbine generators require. Description
updated across all three locales to state it works with both.
- Fixed Waste Heat Recovery technology's effect icon ordering.
Waste Heat Boiler's recipe-unlock effect was appended to the end
of the effects list via an unindexed table.insert, landing it
after Heat Pipe and Steam Turbine. Now inserted at index 2, so
the display order is Waste Heat Exchanger -> Waste Heat Boiler ->
Heat Pipe -> Steam Turbine, matching the intended build sequence.
Bugfixes:
- Fixed a fatal, unrecoverable error on load for any save still
containing an old 2x2 Waste Heat Boiler pending the 0.2.18 size
migration. The migration's call to LuaSurface::spill_item_stack
still used the pre-2.0 positional-argument syntax; Factorio 2.0
changed this to a single named-parameter table, so the call was
being rejected with "Expected 1 argument but 4 were given."
Updated to the 2.0 table syntax. Thanks to Lobelia for catching
this on an actual affected save.
Version: 0.2.19
Date: 2026-08-06
Balancing:
- Waste Heat Exchanger's stage-1 heat extraction (the flat 83.9%
cut introduced in 0.2.15) previously ignored how many exchangers
were actually built -- a single exchanger got the same cut as
ten. It's now scaled by an achievement ratio: the number of
eligible exchangers (an exchanger with a working miner nearby)
divided by the force's current count of working mining drills,
capped at 1. Building enough exchangers to match your mining
scale (1 exchanger per working drill) is required to reach the
full 83.9% cut; falling short scales the cut down proportionally.
With zero working drills, the ratio is treated as 0.
- Waste Heat Recovery technology now additionally requires Lamp
and Repair Pack as prerequisites, on top of the existing Steam
Power, Logistic Science Pack, and Steel Processing. This pushes
the tech further out along the normal research path instead of
it being reachable as an early, disproportionately powerful pick.
Note: on saves upgrading from 0.2.18, if this technology was
already drafted (enabled) but not yet researched, it will
require researching Lamp and Repair Pack before research can
continue, even though those weren't required when it was drawn.
- Waste heat exchanger temperature rise was far too slow to be
useful in practice -- even with heat maxed out and full
coverage, 10 exchangers would only gain about 1.17°C/second,
taking nearly 400 seconds to reach the boiler's 465°C working
temperature under the best-case scenario. WASTE_HEAT_JOULES_PER_
UNIT raised from 100 to 2000 (20x), bringing that same scenario
to roughly 23.5°C/second -- reaching working temperature in
about 20 seconds. This is a deliberate shift toward the waste
heat system being an immediately rewarding, incentive-driven
building rather than a barely-functional decoration; it's fine
if recovered power now exceeds what the mining drills themselves
consume. Not a precisely calibrated number, just a starting
point meant to be responsive -- can go higher if still too slow.
- INITIAL_THRESHOLD (first pack's ore requirement) raised from 80
to 100. 80 was calibrated back in 0.2.18 against an observed
heat range of 18000-28000, with an explicit note at the time
that it would need revisiting once waste heat recovery matured
and effective efficiency improved. After this update's fixes
(achievement-ratio numerator corrected, temperature rise rate
raised 20x), best-case play now keeps heat under 20000 -- the
predicted efficiency improvement arrived, so the threshold is
raised to compensate, rather than leaving players with an
unintended difficulty reduction. Same as before, this is a
testing starting point, not a final calibrated value.
Changes:
- Added a one-time in-game notice (shown once, whether starting a
new game or updating an existing save) explaining that Waste
Heat Recovery now requires Logistic Science Pack, Repair Pack,
Steel Processing, and Lamp before it can appear in the draft
pool or be researched, so players aren't left confused about why
the tech won't show up or won't research.
- Waste Heat Exchanger: stack size 20 -> 50 (matching Solar panel /
Accumulator, and because the achievement-ratio mechanic requires
building roughly one per working mining drill). Recipe now
requires 25 steel plates (was 20) and 6 heat pipes (was 4,
reflecting its 8 active heat-pipe connections); pipe requirement
unchanged at 10; crafting energy 10 -> 12. Weight manually set to
40kg (rocket capacity ~25/launch, previously auto-calculated) --
these two buildings are materially light but physically bulky,
and weight is the only lever Factorio's rocket-capacity system
exposes for that (per Wube's own FFF: item weight is chosen for
balance, not realism), so this isn't a workaround, it's the
intended use of the field. Vanilla character inventory is
slot-limited, not weight-limited, so this doesn't make either
building awkward to carry by hand.
- Waste Heat Boiler: stack size 20 -> 30. Recipe now requires 15
steel plates (was 10), 8 pipes (was 5, for its three fluid
connections), 3 heat pipes (was 2); crafting energy 6 -> 8.
Weight manually set to 60kg (rocket capacity ~16/launch), same
reasoning as the exchanger above.
Footprint stays 3x3 (not reverted to 2x2 -- that size was chosen
specifically to fix pipe congestion from too many connections in
a 2x2 footprint). Water/steam buffer volumes (200 each) and power
draw (2MW) are unchanged, as neither showed evidence of being out
of proportion with the new material cost.
- Internal refactor: all 42 top-level tuning constants (previously
scattered as individual `local` declarations throughout
control.lua) are now centralized in a new constants.lua file, a
plain data table with no game/script/data:extend references, so
it can be required from both the data stage (prototypes/*.lua)
and the control stage (control.lua) -- these are separate Lua
environments in Factorio that couldn't previously share a single
source of truth for a constant, requiring manual "remember to
update both places" comments (e.g. the waste heat exchanger's
15-tile detection radius was duplicated between control.lua and
its prototype file). control.lua's existing constant names and
every place that uses them are unchanged; only their declarations
now read from the shared table, keeping this refactor's surface
area to 42 mechanical one-line edits rather than touching
call sites throughout the file. waste-heat-exchanger.lua's
radius_visualisation_specification now reads the same shared
constant instead of a duplicated literal.
- Added a reusable migration-registry pattern (a `migrations` array
plus a `run_migration_once` helper, tracked under
storage.completed_migrations) for future one-off save migrations
to register against, instead of each hand-rolling its own flag.
The existing 0.2.18 waste-heat-boiler 2x2->3x3 migration is left
exactly as-is on its own dedicated flag rather than retrofitted
into this system, to avoid any risk of already-migrated saves
being mistakenly re-triggered.
- Fixed a miscommunication in the waste heat achievement-ratio
calculation: its numerator (E) was implemented as the count of
eligible exchanger buildings, but the intended design was the
count of distinct currently-working mining drills actually
captured within any eligible exchanger's detection range (its
15-tile radius is meant to cover a wide area, so counting
buildings instead of captured drills defeated the point of that
radius -- a handful of exchangers could already capture dozens
of drills, yet the ratio was being computed against building
count, not drill count). achievement_ratio is now min(1, captured
working drills / total working drills for the force), still
guarding against covering only a small pocket of a larger mining
operation (uncovered drills still count against the denominator).
Building count is still used separately to split heat output
across exchangers for temperature purposes, unrelated to the
ratio itself. /draft-heat-ratio-debug was updated to report the
corrected E and now shares the same counting function as the
real calculation instead of duplicating the logic.
- Added a new debug command, /draft-heat-ratio-debug, that prints
the exact E (eligible exchanger count) and W (force-wide working
mining drill count, across all surfaces) used by the waste heat
achievement-ratio calculation, plus a "W_local" count of working
drills actually covered by an eligible exchanger's range, for
comparison. Added in response to a report that the 83.9% cap
wasn't being reached at E/W=1 in practice -- the likely cause is
that W counts every working drill belonging to the force across
all surfaces, not just ones near an exchanger, so any working
drills outside every exchanger's range will keep the ratio below
1 even when local coverage looks complete. Whether to change W's
scope to match E's local proximity (with the tradeoff of
reopening the small-coverage exploit this force-wide scope was
chosen to prevent) is still an open decision pending test
numbers from this command.
- Waste Heat Exchanger's item moved to the "energy" subgroup
(alongside Waste Heat Boiler, both parts of the same waste-heat
recovery pipeline), instead of the plain heat-pipe network parts
subgroup it was in before. Both buildings' order strings were
also changed to share a common prefix ("dz[waste-heat]-") so
they always sort next to each other, landing right after Solar
panel and before Accumulator in the crafting menu -- matching
how far into the tech tree this recovery method actually reaches
(its prerequisites never touch chemical science, unlike the
accumulator's battery ingredient, which does).
Version: 0.2.18
Date: 2026-08-04
Changes:
- Waste Heat Exchanger's "nearby working miners" check now uses a
square area (matching how vanilla substations judge their supply
area) instead of a center-to-center radius. A mining drill now
counts if any part of its footprint overlaps the square, even by
a single tile, rather than requiring its center point to fall
within the range. This affects both the actual heat-distribution
eligibility and the debug/highlight tooling — all three internal
lookups (eligibility calculation, on-hover highlight boxes, and
the /draft-heat-debug command) now share the same square-area
logic.
- Waste Heat Boiler is now 3x3 (up from 2x2), with one pipe/heat
connection per side instead of the old layout's 5 connections
crammed onto 4 sides (the heat input alone used to take 2). The
cramped 2x2 layout could cause the water input/output to jam in
practice. New layout: steam out on one side, heat in on the
opposite side, water in on each of the remaining two sides.
A one-time migration automatically removes any existing 2x2
Waste Heat Boilers on update and drops them as items on the
ground, since their collision box is read live from the
prototype and would otherwise jump straight to 3x3 in place.
This migration is temporary and is planned for removal in a
future update once older saves have had time to update.
- Waste Heat Boiler's output now ramps up gradually with the
connected heat-pipe network's temperature instead of switching
instantly from 0 to full output the moment the network crosses
20°C. Every 30 ticks, each boiler's current temperature is
converted to a 0-1 ratio between its 20°C minimum and 465°C
target, and a sigma-delta accumulator decides whether that
boiler runs at full rate for the next 30 ticks or sits idle,
averaging out to the correct ratio over time. This is a script
workaround: vanilla's boiler simulation only supports all-or-
nothing output once enough energy is available, so a true
continuous curve isn't natively possible.
Balancing:
- First pack threshold reduced from 200 to 80 ore. The original
200 was calibrated against raw ore totals from a rocket +
science-pack ship + spaceship launch, without accounting for
the drill overheat efficiency penalty, which measured 26%-44%
effective output across the 18,000-28,000 heat range typically
observed in play. 80 (40% of the original) is a starting point
for retesting, not a final calculated value — actual effective
efficiency changes over the course of a playthrough as Waste
Heat Recovery comes online, which can't be captured by a single
static number.
Bugfixes:
- Restored the cursor/selection range indicator on Waste Heat
Exchanger, which had briefly been removed while its underlying
shape was misdiagnosed as circular. It uses the same square-area
logic as the eligibility check itself.
- When selecting a placed exchanger, the range is now marked by
both the native translucent fill (for consistency with the
held-item preview) and a solid orange-red outline drawn on top
of it, matching the mod's existing waste-heat theme color. The
native fill alone was hard to see against Nauvis' brown dirt /
green grass terrain, so the outline exists specifically to stay
legible regardless of terrain color. Only the per-miner
working-status highlight boxes stay purely script-drawn, since
that information has no native equivalent.
- Waste Heat Boiler's heat buffer could climb to 500°C even though
its steam output was capped at 465°C, since
energy_source.max_temperature had been left at 500 instead of
being aligned to target_temperature. The displayed temperature
no longer disagrees with the actual steam output — both are
465°C now.
- Waste Heat Boiler's water and steam fluid boxes were both
missing production_type and pipe_covers, unlike vanilla's own
Boiler and Heat exchanger prototypes which set both. The water
connections' flow_direction was also changed from "input" to
"input-output" to match those two vanilla references exactly.
This is the most likely cause of water not transferring through
the connection points at all.
Locale:
- Waste Heat Exchanger's in-game description now states its max
power (10MW) directly, instead of requiring players to check
the mod's source. Phrased as "Max power" to match vanilla's own
terse convention for stating entity power figures in flavor
text, rather than engineering terms like "throughput cap."
Version: 0.2.17
Date: 2026-08-04
Bugfixes:
- Fixed a save-compatibility issue from 0.2.16: removing the extra
heat-exchanger recipe unlock from Waste Heat Recovery had
retroactively re-locked that recipe for anyone who'd already
researched the tech on an older version (and hadn't separately
researched Nuclear power). Updating now automatically re-enables
the recipe for those saves, with an in-game notice explaining
what happened.
Balancing:
- Waste Heat Recovery is now also a prerequisite for Automobilism
and, on Space Age saves, Advanced material processing. This
raises its hub importance in the weighted pack draw, without
adding any new tech content or touching the draw formula itself.
- Waste Heat Recovery now additionally requires Steel processing
as a prerequisite, alongside Steam power and Logistic science
pack — you need basic steel production before the tech that
lets you build its entities becomes available.
- Idle mining drills now cool overheated drills faster than
before: the same idle ratio now dissipates roughly 3x the heat
it used to. Full-throttle mining still generates heat exactly as
before — this only makes the "leave some drills idle to cool
down" side of the trade-off less punishing to lean on.
Version: 0.2.16
Date: 2026-08-04
Balancing:
- Waste Heat Boiler's target temperature raised from 165°C to
465°C, pushing its steam output much closer to (but still under)
vanilla steam-turbine's 500°C threshold.
- Waste Heat Recovery no longer additionally unlocks the vanilla
heat-exchanger recipe. That recipe is now available through the
Nuclear power tech path only, same as vanilla.
- Waste Heat Recovery now also requires the Logistic science pack
tech as a prerequisite, alongside Steam power. It could previously
surface in the draft before you were able to produce its own
research cost, wasting a pack opening on a card you couldn't
queue for research yet.
- A technology that just appeared in a pack (picked or not) now
goes on a random 2-6 pack cooldown: its hub-importance bonus is
fully suspended for that stretch, so it competes on equal footing
with minor technologies instead of being almost guaranteed to
show up again immediately. The pity/guarantee safety net is
untouched by this — it's a separate mechanism.
Gui:
- Smaller, flatter HUD: the outer frame now uses the built-in
invisible_frame style with zero padding, removing a stray blank
strip that used to sit below the panel. The collapse/expand
control is now a plain text ">" / "<" toggle instead of an icon,
and the pack button plus the point/heat labels are all a bit
smaller.
- New per-player "HUD size" setting (Compact / Standard, also
changeable via Mod Settings), so anyone who finds the compact HUD
too small can switch to a larger layout without affecting other
players. Left-click the collapse button to expand/collapse as
before; right-click it to switch HUD size directly, no need to
dig through the settings menu. A one-time tip is shown the first
time you join, and the button's tooltip always mentions the
shortcut.
Bugfixes:
- Fixed the Waste Heat Boiler's tooltip still stating 165°C after
the temperature was raised to 465°C.
Version: 0.2.15
Date: 2026-08-03
Features:
- New technology: Waste Heat Recovery (prerequisite: Steam power).
Unlocks a new building, Waste Heat Exchanger, plus the recipes
for the vanilla heat-pipe, heat-exchanger and steam-turbine
(in addition to their usual Nuclear power unlock path — both
paths coexist, researching either one unlocks the recipe).
Holding it in the cursor or selecting a placed one now shows its
15-tile range as an orange-red dashed circle (reusing the
reactor's neighbour-bonus radius sprite with a tint, to avoid
clashing with the beacon's yellow supply-area visualization).
Selecting a placed exchanger also highlights every currently-
working mining drill within range with an orange-red box, same
convention as the vanilla beacon highlighting the assemblers
it's currently boosting — except this had to be built by hand,
since "nearby working drill" is our own scripted rule and the
engine has no built-in way to know about it.
- Waste Heat Exchanger is a heat-interface entity that channels
part of your drill overheat into the vanilla heat-pipe network
instead of letting it evaporate. A working mining drill must be
within 15 tiles or the exchanger draws nothing. The shared
budget is split evenly across all eligible exchangers each
second, so building more doesn't increase the total — it only
lets you catch a larger share of the same fixed amount before
it's wasted on a single unit's 10MW physical throughput cap.
Output is capped at vanilla's 500°C heat-exchanger threshold;
this is not meant to out-produce a real reactor.
- Cooling is now two stages instead of one. If eligible exchangers
are present, a first pass removes the same 83.9%-capped fraction
as the existing decay formula, but ignores idle ratio entirely —
that removed heat is what feeds the exchangers. Whatever's left
then goes through the unchanged idle-ratio cooling as a second
pass. Stacked together this pushes total cooling well past the
old 83.9% ceiling (up toward 97%+ at full idle), which is
intentional: recovering heat you'd have lost anyway wasn't worth
building for, so it's now an actual reward for the investment,
not just a prettier way to waste the same amount. Bases without
an eligible exchanger nearby are completely unaffected and keep
the exact 0.2.14 formula and pacing.
Version: 0.2.14
Date: 2026-08-01
Balancing:
- Drill overheat no longer cools down just from time passing. Every
second, cooling is now calculated from the fraction of your mining
drills that are idle right then: if every drill is running, heat
doesn't move at all. Keep some drills idle at any given time —
whether by cycling them on and off or by keeping spare drills
powered down — to actually cool down.
- Heads up: this is a severe difficulty change, not a small tweak.
A fully automated base that never idles gets zero natural cooling
from this point on and will run straight into the efficiency
floor. Think it over before pulling this update, especially on a
server or an existing save with a mature factory already running.
Features:
- Saves that are loading this mod for the first time (including saves
that already had research done before the mod was installed) now
have every technology hidden and returned to the draft pool —
researched or not — so you can open packs and rebuild the whole
tech tree from the start. Already-researched technologies keep all
their unlocked recipes and effects; only their visibility in the
normal research queue is touched.
Debug:
- Added /draft-reveal-all. This sets every currently-hidden
technology on your force back to enabled, so the tech tree returns
to a normal, unstuck state before you remove this mod. This is
one-way: run it only when you're done with the mod for good.
Version: 0.2.13
Date: 2026-07-31
Balancing:
- Drill heat gain per ore raised from 10.0 to 500.0, and the minimum
efficiency floor lowered from 3% to 0.01%. Any automated mining
setup will now run into the heat penalty; avoiding it entirely
means mining by hand only.
Bugfixes:
- Fixed a locale folder mismatch dating back to 0.2.11: the
Traditional Chinese text was sitting under the Simplified Chinese
(zh-CN) locale code, so a zh-TW client silently fell back to
English. Added a proper zh-TW folder and converted zh-CN to
actual Simplified Chinese.
Version: 0.2.12
Date: 2026-07-31
Balancing:
- Base pack threshold raised from 50 to 200 ore.
- Reworked the early threshold growth curve into three stages: a
fixed 1.45x rate for the first 12 packs, a steady decline down to
1.05x over the next 8, then a flat 1.05x floor through pack 100.
After that, the rate keeps decaying by a much smaller step down
to a 1.02x floor that holds indefinitely, so the threshold never
truly stops growing but slows to a crawl in the very long run.
Version: 0.2.11
Date: 2026-07-31
Features:
- UI update.
Balancing:
- Balance adjustment.
Version: 0.2.1
Date: 2026-07-30
Balancing:
- Pity/guarantee draw order changed to longest-waiting-first, so a
technology can no longer be silently starved out of its guarantee.
- Drill overheat decay changed to a proportional rate, so a single
production spike no longer takes an unreasonably long time to
recover from.
- Heat efficiency floor pushed further out, so ordinary-scale mining
setups don't hit the penalty as early.
Features:
- Threshold crossings that happen while a pack is still unopened no
longer overwrite the pending pack. A backlog counter tracks how
many packs are owed, and the HUD button shows this count.
- Redesigned HUD: icon-only pack button, no title bar, tech points
and heat shown as separate labels, frame grows to fit content.
Bugfixes:
- Fixed a GUI compatibility gap where an older HUD frame would fail
to update after the layout changed.
Optimizations:
- Hub-importance scoring now reads a technology's own successor list
instead of scanning every technology on the force each time.
Version: 0.2.0
Date: 2026-07-30
Info:
- Initial internal architecture: pack opening, draft GUI, and
dependency-chain safeguards.
Balancing:
- Manual mining counts at full weight toward progress.
- Threshold growth uses a two-stage decaying compound rate to avoid
runaway numbers over a long game.
- Added the drill overheat mechanic: sustained automated output
raises heat, which throttles how much of that output converts to
progress; heat decays over time and manual mining actively cools
it down.
Bugfixes:
- Automated contribution tracking switched to reading the mining
target's remaining resource amount, since mining drills do not
expose a usable "products_finished" count.