From 7f6ccfb0151ea2df76a469f681dababfd1ff5d16 Mon Sep 17 00:00:00 2001 From: Davide Cappellini Date: Wed, 23 Sep 2026 00:30:52 +0200 Subject: [PATCH] Ring mover heat retune (author: the user) - dodge bullets, ignore walls/centre, re-plan 3x more often Uncommitted working-tree change in `the_floor_is_lava_ring.nim`, confirmed by the user as theirs. Committing it so it stops appearing in every job's `git status`. WHAT IT DOES - a coherent "be far more afraid of bullets" strategy: - BULLETS 2x hotter: BulletCore 10 -> 20, BulletAura 5 -> 10. - Walls weaker and thinner: WallRadiance 10 -> 5; the `WallHotness` default 10 -> 15 (so the heat falls off over ~3 tiles instead of 1, with a higher peak). - CENTRE PILLAR DISABLED: PillarHotness 30 -> 0, PillarRadiance 10 -> 0, so the bot may now use the middle of the arena instead of treating it as a no-go zone. - MUCH more reactive: CommitTicks 15 -> 5 and MinCommitTicks 5 -> 0, i.e. the dodge target is re-chosen 3x more often and a replan is allowed immediately. - `CorridorHeat` default 5 -> 10. This applies ONLY to the ring mover, which is NOT the shipped movement (the default is `tfil`), so the shipped bot is unaffected. TWO FACTS RECORDED, not objections - it is the user's call: 1. `CorridorHeat = 10` now EQUALS `PathDangerThreshold = 10`. The earlier measured taming set it to 5 precisely so a single corridor could no longer poison a path on its own (a corridor at 10 puts every tile along it at/over the threshold). That is part of what lifted the "band-weightable" fraction from 10.8% to 26.5%. At 10 the range weighting gets less to work with. 2. UNMEASURED: this retune has not been A/B'd. The ring mover it modifies was itself measured as a glass cannon (best offline hit rate, but round wins 16/49 -> 6/49, p=0.012). The two changes push in the same direction - hotter bullets and more frequent replanning mean MORE dodging and LESS time spent closing to the 100-200px band where our hit rate peaks (27% vs 5% at 450px). Worth an A/B before drawing conclusions, but it is an experiment, not a shipped change. --- .../movements/the_floor_is_lava_ring.nim | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/common_libs/movements/the_floor_is_lava_ring.nim b/common_libs/movements/the_floor_is_lava_ring.nim index 561f66d..01927ca 100644 --- a/common_libs/movements/the_floor_is_lava_ring.nim +++ b/common_libs/movements/the_floor_is_lava_ring.nim @@ -80,8 +80,8 @@ const BulletCoreRadiusMax = 54.0 ## core radius at power 3.0 const BulletAuraExtMin = 36.0 ## aura extension at power 3.0 (slow) const BulletAuraExtMax = 54.0 ## aura extension at power 0.1 (fast) -const BulletCore = 10.0 ## lava accumulation per bullet-overlapping tile -const BulletAura = 5.0 ## lava accumulation for aura ring tiles +const BulletCore = 20.0 ## lava accumulation per bullet-overlapping tile +const BulletAura = 10.0 ## lava accumulation for aura ring tiles const EnemyCoreRadius = 18.0 ## half of 36px body const EnemyAuraRadius = 54.0 ## 18 + 36 @@ -92,13 +92,13 @@ const EnemyAura = 10.0 ## lava per tile in enemy aura ring ## NOTE: CorridorHeat and WallHotness are NOT const here (unlike the original ## `the_floor_is_lava.nim`): they are env-overridable and read at module init, ## below, in the same style as the range-weighting knobs. -const WallRadiance = 10.0 +const WallRadiance = 5.0 -const PillarHotness = 30.0 -const PillarRadiance = 10.0 +const PillarHotness = 0.0 +const PillarRadiance = 0.0 -const CommitTicks = 15 ## ticks to commit to a dodge point -const MinCommitTicks = 5 ## must commit for this many ticks before danger replan allowed +const CommitTicks = 5 ## ticks to commit to a dodge point +const MinCommitTicks = 0 ## must commit for this many ticks before danger replan allowed const DangerReplanThreshold = 25.0 ## replan on serious threats only (bullet core), not corridors/auras const CoolestLevels = 2 ## how many distinct lava values count as "cool" const MaxTrackedBullets = 20 ## hard cap on tracked bullets @@ -129,8 +129,8 @@ let RangeK* = getEnvFloat("TR_TFIL_RANGE_K", DefaultRangeK) let MovementLog* = existsEnv("TR_MOVEMENT_LOG") # ── Heat-field knobs (see the rationale in the file header) ────────────────── -let CorridorHeat* = getEnvFloat("TR_TFIL_CORRIDOR_HEAT", 5.0) -let WallHotness* = getEnvFloat("TR_TFIL_WALL_HOTNESS", 10.0) +let CorridorHeat* = getEnvFloat("TR_TFIL_CORRIDOR_HEAT", 10.0) +let WallHotness* = getEnvFloat("TR_TFIL_WALL_HOTNESS", 15.0) proc rangeWeight*(d, lo, hi, k: float): float = ## Flat-topped range weight. Exactly 1.0 for d inside [lo, hi]; Gaussian