Card Tech Draft (卡牌科技抽卡原型)


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.

Tweaks
8 hours ago
2.0
30

Changelog

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.