38fbc6ecd1
The owner: choose the tile pool not only from the heat point but from the geometric position too. Heat stays the hard filter; the draw over the survivors is re-weighted by turn and/or distance. Three weighting forms (soft softmax / top-K third / rejection band), one env name carrying both axes. Default = off = today's uniform draw, byte-for-byte (golden parity). WHAT DIFFERS FROM j9 (TR_TFIL_TURN_BIAS, a live null): that was a tiebreak weight among the non-empty safe set only. This runs on the WHOLE pool the draw already runs on, including the 2 promoted least-hot tiles the ~65% forced picks choose from. OFFLINE (8 fixtures x 3 seeds, no java): headline 'tile actually reached at tta' 4.5% -> 16.9% at TR_TFIL_GEO_MODE=both-soft TR_TFIL_GEO_TAU=45, with no diversity collapse (distinct tiles 220 -> 219, normalised entropy 0.87 -> 0.86, top-tile share 7.0% -> 8.6%). perpE — the perpendicular rate in the FORCED population — does not move in ANY arm: that pool is 2 tiles ranked by heat alone and the only lever is a coin flip. Also registers j150's TR_TFIL_DIAG / TR_TFIL_DANGER_THRESHOLD in env_report + knownEnvNames + .env.example (test_env_report was red) and documents DANGER_THRESHOLD as quantisation-limited: heat comes in 5s, so the effective steps are 10/15/20 and 10-14 admits zero extra tiles. No battle, no server, no A/B run.
277 lines
20 KiB
Bash
277 lines
20 KiB
Bash
# ModularBot environment — EVERY knob the bot reads, already set to its default.
|
|
#
|
|
# cp .env.example .env
|
|
#
|
|
# The bot reads `.env` from its own folder automatically when you start it from
|
|
# there. To use a different file: ./out/ModularBot --env-file /path/to/my.env
|
|
# The FILE WINS over variables you exported in the shell: if a shell value
|
|
# differs, the bot prints one override line at boot so you know it happened.
|
|
#
|
|
# Every value below IS the built-in default, so running the bot with this file
|
|
# is identical to a clean run with no file at all. Delete a line (or comment it
|
|
# out with #) and that knob falls back to the built-in default. An inline
|
|
# `# comment` after a value is fine — the loader strips it.
|
|
#
|
|
# A few switches are PRESENCE-only (`existsEnv`): for those, OFF means the line
|
|
# is absent, so they are shown commented out. Writing `=0` would still turn them
|
|
# ON.
|
|
#
|
|
# SNAPSHOT of the code at commit 5e32ec1. Regenerate this file whenever a default
|
|
# changes, or it will start lying.
|
|
|
|
# ── movement ─────────────────────────────────────────────────────────────────
|
|
# Which dodging engine runs: tfil, tfil_ring, strafe, surf or learned.
|
|
TR_MOVEMENT=strafe
|
|
# Whole-engine on/off switches. 0 removes an engine from the TR_MOVEMENT choices.
|
|
TR_MODULE_MOVE_TFIL=on # the long-shipped "floor is lava" engine
|
|
TR_MODULE_MOVE_TFIL_RING=on # the same, re-weighted toward a target range
|
|
TR_MODULE_MOVE_STRAFE=on # perpendicular strafe with sign-flip reversals
|
|
TR_MODULE_MOVE_SURF=on # wave surfing, steered by the GuessFactor
|
|
TR_MODULE_MOVE_LEARNED=on # learned per-state danger field
|
|
|
|
# ── gun rack: which guns the bot may choose (off | 1v1 | melee | both) ───────
|
|
# The shipped rack is Pattern only. Turn a gun on with `both`.
|
|
TR_RACK_PATTERN=both # the only admitted gun; both = usable in 1v1 and melee
|
|
TR_RACK_HEADON=off # aim straight at the target, no lead
|
|
TR_RACK_LINEAR=off # constant-angle linear aim
|
|
TR_RACK_TSETLIN=off # Tsetlin automaton gun
|
|
TR_RACK_CIRCULAR=off # assumes the enemy circles
|
|
TR_RACK_GUESSFACTOR=off # learns the wave-surfing GF of the enemy
|
|
TR_RACK_WALLBOUNCE=off # predicts a rebound off the arena wall
|
|
TR_RACK_ACCEL=off # leads a bullet that is still accelerating
|
|
TR_RACK_STOPSHOT=off # fires only when it expects a full stop
|
|
TR_RACK_DISPLACE=off # leads a displaced enemy
|
|
TR_RACK_AVGLEAD=off # averaged lead over recent shots
|
|
TR_RACK_DECAYGF=off # GuessFactor with a forgetting decay
|
|
TR_RACK_KNN=off # nearest-neighbour over past gun states
|
|
TR_RACK_TMSELECT=off # Tsetlin machine used as the shot selector
|
|
TR_RACK_TMPATTERN=off # Tsetlin machine used as a pattern matcher
|
|
TR_RACK_TMHORIZON=off # horizon Tsetlin automata gun
|
|
TR_RACK_LEADGAIN=off # per-range-band learned lead-gain corrector
|
|
# Give every admitted gun a fixed share of the turns instead of ranking them,
|
|
# e.g. TR_RACK_SHARE=PATTERN:60%,HEADON:40%. Empty = the ranking selector.
|
|
TR_RACK_SHARE=
|
|
# Drop whole guns by rack id (comma separated, e.g. 16). Empty = keep them all.
|
|
GUN_RACK_DISABLE=
|
|
|
|
# ── gun selector (which admitted gun fires this tick) ───────────────────────
|
|
GUN_VBULLET_METRIC=path # fitness measure: path (time-to-collision) or point
|
|
GUN_SELECTOR_MODE=relative # rank guns against the incumbent (absolute = vs a fixed bar)
|
|
GUN_SELECTOR_WINDOW=100 # ticks of virtual-bullet history behind the fitness
|
|
GUN_SELECTOR_MINOBS=50 # observations a gun needs before it may compete
|
|
GUN_SELECTOR_TIE=0.2 # relative margin two guns must differ by to count as separated
|
|
GUN_SELECTOR_FLOOR=0.25 # fitness fraction of the peak below which a band is unsafe
|
|
GUN_SELECTOR_POOL=on # pool the per-tick samples over the window instead of replacing
|
|
GUN_SELECTOR_RANK=mean # how to rank guns: mean, wilson, ucb, thompson or shrunk
|
|
GUN_SELECTOR_SHRINK=20.0 # pseudo-count the shrunk rank adds per prior observation
|
|
GUN_SELECTOR_DWELL=10 # ticks a gun must lead before it can be switched away from
|
|
GUN_SELECTOR_MARGIN=0.05 # fraction the challenger must beat the incumbent by
|
|
GUN_SELECTOR_TIEBREAK=off # off, point or pointCommit: break ties on arrival accuracy
|
|
GUN_SELECTOR_POINT_TIE=0.5 # relative width of the point band used by the tie-break
|
|
# Seed for the selector's tie-breaks. Empty = seed from the clock + pid.
|
|
GUN_SELECTOR_SEED=
|
|
|
|
# ── power / energy policy ────────────────────────────────────────────────────
|
|
# Every rule below only ever CAPS power; the gun's own preference is the ceiling.
|
|
TR_POWER_POLICY=on # 0 = no cap at all (the control arm)
|
|
TR_POWER_FAR_DIST=200.0 # px; past this the enemy is in the bad-chances zone
|
|
TR_POWER_FAR_CAP=1.0 # cap applied past TR_POWER_FAR_DIST
|
|
TR_POWER_MID_CAP=2.0 # cap when close and healthy but not above its average
|
|
TR_POWER_REF=0.0 # 0 = the gun's own mean; >0 = that fixed reference power
|
|
TR_POWER_ENERGY_HI=80.0 # our energy at/above which the energy slope stops capping
|
|
TR_POWER_ENERGY_LO=20.0 # our energy at/below which the cap is TR_POWER_ENERGY_MIN
|
|
TR_POWER_ENERGY_MIN=0.5 # NOTE: this is a CEILING, not a floor — low energy, low power
|
|
TR_POWER_ENERGY_MAX=3.0 # the cap at/above ENERGY_HI; 3.0 means effectively uncapped
|
|
TR_POWER_FINISH_KILL=on # cap to the smallest bullet that still kills a low-energy enemy
|
|
|
|
# ── radar ────────────────────────────────────────────────────────────────────
|
|
#TR_RADAR_FORCE_SPIN=1 # presence-only: force the old full 360 spin instead of 1v1 lock
|
|
TR_RADAR_SCAN_LOG_PATH=/tmp/radar_scan_log.jsonl # where the per-tick scan log is written
|
|
|
|
# ── ram ──────────────────────────────────────────────────────────────────────
|
|
TR_MODULE_RAM=on # 0 = never ram; the movement engine alone drives
|
|
TR_RAM_OPPORTUNITY=off # the proactive "close the distance" gate (measured not to convert)
|
|
TR_RAM_OPP_DIST=200.0 # px; max range at which that gate may fire
|
|
TR_RAM_OPP_MARGIN=15.0 # energy advantage the gate needs before it starts
|
|
TR_RAM_ABORT_DMG=2.0 # incoming damage per turn that aborts a ram in progress
|
|
TR_RAM_PLAN=off # the change-of-plan trigger (enemy outguns us while we ram)
|
|
TR_RAM_PLAN_DIST=250.0 # px; max range at which the plan trigger may fire
|
|
TR_RAM_PLAN_MARGIN=20.0 # energy advantage the plan trigger needs
|
|
TR_RAM_PLAN_HITRATE=0.05 # pooled virtual hit rate below which the gun duel counts as failing
|
|
|
|
# ── movement internals: tfil (the floor-is-lava field) ──────────────────────
|
|
TR_TFIL_RANGE_LO=100.0 # px; lower edge of the range band the ring mover prefers
|
|
TR_TFIL_RANGE_HI=200.0 # px; upper edge of that band
|
|
TR_TFIL_RANGE_TEMP=0.4 # sharpness of the ring mover's weighted random draw
|
|
TR_TFIL_RANGE_K=60.0 # px; how fast the weight falls off outside the band
|
|
TR_TFIL_CORRIDOR_HEAT=10.0 # lava painted per corridor-overlapping tile
|
|
TR_TFIL_CORRIDOR_TICKS=0.0 # corridor length in ticks: 0 = to the wall (shipped); N>0 = min(to wall, bullet speed * N)
|
|
TR_TFIL_WALL_HOTNESS=15.0 # peak heat painted on tiles next to a wall
|
|
TR_TFIL_WALL_RADIANCE=10.0 # how fast wall heat falls off with distance
|
|
TR_TFIL_BULLET_CORE=10.0 # tfil only: lava per bullet-overlapping tile (== PathDangerThreshold, so a bullet is never hot on its own)
|
|
TR_TFIL_BULLET_AURA=5.0 # tfil only: lava for the bullet's aura ring tiles
|
|
TR_TFIL_TILE_REPLAN=self # self | enemy | off: when a dodge commitment is cancelled
|
|
TR_TFIL_COMMIT_TICKS=15 # ticks to commit to a dodge point before replanning
|
|
TR_TFIL_ARRIVE_TICKS=0.0 # hard bound: never pick a tile farther than this (ticks at 8px/tick); 0 = off = today's draw
|
|
TR_TFIL_HOLD_WHEN_TRAPPED=off # on = when NO safe tile exists, hold position one tick instead of taking the 2 least-hot blocked tiles; off = today's fallback
|
|
TR_TFIL_DANGER_THRESHOLD=10.0 # hard heat filter on the path; lava is quantised to 5, so the effective steps are 10/15/20 and 10-14 admits exactly what 10 does
|
|
TR_TFIL_DIAG=off # on = fill the per-pick picker loss histogram (TfilLoss*); observability only
|
|
TR_TFIL_GEO_MODE=off # off | turn | dist | both, each with a `-soft` (default) / `-topk` / `-rej` suffix; shapes the DRAW over the heat-filtered pool
|
|
TR_TFIL_GEO_TAU=0.0 # deg; the geometric cost scale. 0 = off = today's uniform draw
|
|
TR_TFIL_NO_REV=off # on = never reverse direction inside a corridor
|
|
TR_TFIL_COMMIT_LOG= # path for the per-commit log; empty = no log
|
|
TR_TFIL_COMMIT_ARRIVAL=off # on = hold the dodge tile until we are ON it (not a fixed dwell)
|
|
TR_TFIL_COMMIT_MARGIN=0.0 # lava an alternative tile must be cooler by before it wins the tile
|
|
TR_TFIL_NOREV_SPEED=0.0 # px/tick; below this, a mid-flight switch may not turn the bot around
|
|
TR_TFIL_TURN_BIAS=0.0 # turn TIEBREAK odds ratio among SAFE tiles; 0 = uniform draw as today
|
|
TR_TFIL_TURN_REF_DEG=45.0 # deg; turn below which the tiebreak applies no penalty
|
|
TR_TFIL_HEAT_TIME=off # on = index bullet heat by time (flat field when off)
|
|
TR_TFIL_HEAT_TAU=9.0 # ticks a tracked bullet's heat lives for
|
|
TR_TFIL_HEAT_POWER_GAIN=1.0 # scale of the heat a bullet paints, per firepower
|
|
TR_TFIL_PILLAR_ON=off # on = paint heat on the arena centre, which has no pillar
|
|
|
|
# ── movement internals: strafe ───────────────────────────────────────────────
|
|
TR_STRAFE_BAND=20.0 # degrees the heading may sit off the perpendicular
|
|
TR_STRAFE_SPREAD=1 # tiles of sideways jitter added to each candidate
|
|
TR_STRAFE_REACH=144.0 # px the candidate line reaches in each direction
|
|
TR_STRAFE_DWELL_MIN=6 # min ticks on a target tile before it may be re-picked
|
|
TR_STRAFE_DWELL_MAX=20 # max ticks on a target tile before it is re-picked anyway
|
|
TR_STRAFE_RANGE=325.0 # px; the enemy distance the line is tilted toward
|
|
TR_STRAFE_RANGE_TOL=25.0 # px dead band around it, where the tilt is exactly 0
|
|
TR_STRAFE_TILT_MAX=15.0 # degrees; the hard cap on that tilt
|
|
TR_STRAFE_TILT_GAIN=0.1 # degrees of tilt per px of range error beyond the band
|
|
TR_STRAFE_KAPPA=0.0025 # 1/px; how hard the candidate wing bends near a wall
|
|
TR_STRAFE_WALL_MARGIN=108.0 # px range over which the wing starts to bend
|
|
TR_STRAFE_WING_MAX=30.0 # degrees; cap on the wing's own tilt toward the interior
|
|
TR_STRAFE_WALL_BIAS=0.35 # how strongly a tile farther from the wall is preferred
|
|
TR_STRAFE_WALL_SAFE=24.0 # px; a wing point never lands nearer than this to a wall
|
|
TR_STRAFE_ESCAPE=on # the guaranteed wall escape when every candidate is hot
|
|
TR_STRAFE_FIRE_FIX=on # strafe's share of the shared TR_FIRE_FIX switch
|
|
TR_FIRE_FIX=on # 0 = the shipped previous-energy bullet detector
|
|
#TR_FIRE_DIAG=1 # presence-only: per-reading tick/raw/correction trace
|
|
#TR_FIRE_LAG=0 # ticks to back-date each detected fire at spawn (0=shipped; 1=the measured live detection lag)
|
|
TR_STRAFE_HEAT_GRID=on # draw the whole heat grid; 0 leaves only the chosen tile
|
|
TR_STRAFE_BULLET_CORE=20.0 # strafe's own retune: lava per bullet-overlapping tile
|
|
TR_STRAFE_BULLET_AURA=10.0 # strafe's own retune: lava for the bullet aura ring
|
|
TR_STRAFE_CORRIDOR_HEAT=10.0 # strafe's own retune: lava per corridor tile
|
|
TR_STRAFE_CORRIDOR_TICKS=0.0 # same length bound for strafe: 0 = to the wall (shipped)
|
|
TR_STRAFE_WALL_HOTNESS=15.0 # strafe's own retune: peak wall heat
|
|
TR_STRAFE_WALL_RADIANCE=5.0 # strafe's own retune: wall heat falloff
|
|
|
|
# ── movement internals: surf (wave surfing) ─────────────────────────────────
|
|
TR_SURF_PREF_DIST=400.0 # px; the wave distance the mover tries to sit at
|
|
TR_SURF_DIST_BAND=50.0 # px dead band around it
|
|
TR_SURF_WALL_MARGIN=48.0 # px kept from the wall when picking a wave point
|
|
TR_SURF_RADIAL_FRAC=0.35 # how much of the remaining weight goes to the radial blend
|
|
#TR_SURF_LOG=1 # presence-only: one line per wave-surfing decision
|
|
|
|
# ── movement internals: learned (per-state learned danger) ──────────────────
|
|
TR_LEARNED_DECAY_EVERY=128 # learns between forgetting passes; 0 never forgets
|
|
TR_LEARNED_DECAY_SHIFT=1 # forgetting is c -= c shr shift; 0 disables it
|
|
TR_LEARNED_ALPHA=5.0 # weight of the uniform prior against the learned counts
|
|
TR_LEARNED_TRAVEL=0.01 # danger cost of crossing a wave
|
|
TR_LEARNED_REVERSAL=0.02 # danger cost of flipping the strafe side
|
|
TR_LEARNED_PREF_DIST=400.0 # px; the enemy distance this mover prefers
|
|
TR_LEARNED_DIST_BAND=50.0 # px dead band around it
|
|
TR_LEARNED_RADIAL_FRAC=0.35 # radial blend used outside the band
|
|
TR_LEARNED_WALL_MARGIN=48.0 # px kept from the wall
|
|
TR_LEARNED_GLOBAL=off # on = ignore the learned state (ablation arm)
|
|
TR_LEARNED_LABEL=histogram # histogram (default) or outcome: what a wave is labelled with
|
|
TR_LEARNED_REAL_EVENTS=off # on = resolve a wave on the real bullet event, not on energy
|
|
#TR_LEARNED_LOG=1 # presence-only: one line per learned decision
|
|
|
|
# ── guns ─────────────────────────────────────────────────────────────────────
|
|
# Virtual bullets: the prediction the whole gun selector is built on.
|
|
TR_MODULE_VBULLETS=on # 0 = no gun predicts or spawns; the selector falls back to its floor gun
|
|
|
|
# TMH — the horizon Tsetlin automata gun.
|
|
TR_TMHORIZON_SHIFT=2.0 # degrees added to the aim; 0 disables the correction arm
|
|
TR_TMHORIZON_BIG_MULT=1.5 # extra scale applied when the error magnitude is big
|
|
TR_TMHORIZON_RESET_ON_TARGET=on # wipe the automata when the target changes
|
|
TR_TMHORIZON_NSTATES=64 # automata state count (the inertia it can hold)
|
|
TR_TMHORIZON_WINDOW=0 # samples kept in the sliding window; 0 keeps everything
|
|
TR_TMHORIZON_RESET_DROP=0.0 # rolling accuracy drop, in points, that forces a retrain
|
|
TR_TMHORIZON_ACCURVE=off # log the accuracy curve even without the thinking log
|
|
TR_TMHORIZON_RETRAIN_EVERY=50 # samples between full retrains in sliding mode
|
|
TR_TMHORIZON_EPOCHS=1 # epochs each full retrain runs
|
|
|
|
# LEADGAIN (rack id 16) — the per-range-band learned lead-gain corrector.
|
|
TR_LEADGAIN_MEM=perRound # perRound | retained | decay: how corrections are kept
|
|
TR_LEADGAIN_GAINS=0.0,0.25,0.5,0.75,1.0 # the candidate lead gains it picks among
|
|
TR_LEADGAIN_MIN_OBS=8 # samples a band needs before its gain is trusted
|
|
TR_LEADGAIN_DECAY=250 # samples between count-decay passes
|
|
TR_LEADGAIN_DECAY_FRAC=0.02 # fraction each decay pass takes off every count
|
|
TR_LEADGAIN_RESET_ON_TARGET=on # wipe the learned gains when the target changes
|
|
TR_LEADGAIN_LOG=off # on = one line per gain change
|
|
# Kept only so a pre-rename .env does not warn. The gun does not read them.
|
|
TR_LEADGAIN_N=32 # NO-OP: the old SBC geometry, no longer used
|
|
TR_LEADGAIN_NADE=256 # NO-OP: the old ADE count, no longer used
|
|
TR_LEADGAIN_RANGE=40.0 # NO-OP: the old class half-range, no longer used
|
|
TR_LEADGAIN_WARMUP=400 # NO-OP: the old warm-up count, no longer used
|
|
TR_LEADGAIN_ADAPT=32 # NO-OP: the old adapt interval, no longer used
|
|
TR_LEADGAIN_CALIB=512 # NO-OP: the old calibration interval, no longer used
|
|
TR_LEADGAIN_SEED=20240921 # NO-OP: the old seed, no longer used
|
|
|
|
# PATTERN — the shipped gun, the only one the rack admits.
|
|
TR_PATTERN_LEN=10 # ticks of movement history used as the search key
|
|
TR_PATTERN_DEPTH=500 # how far back the history scan may reach
|
|
TR_PATTERN_RAD_OFFSET=0.0 # px added to the aim distance; negative aims short
|
|
TR_PATTERN_RAD_SCALE=1.0 # multiplier on the whole aim distance
|
|
|
|
# The SBC library (common_libs/bitbrain), not a gun knob. Registered so a config
|
|
# that sets them is not reported as a typo; the shipped bot path never reads them.
|
|
TR_BITBRAIN_MODE=bitset # bitset (default) or counted: the memory's storage
|
|
TR_BITBRAIN_DECAY_EVERY=1024 # learns between forgetting passes, counted mode only
|
|
TR_BITBRAIN_DECAY_SHIFT=1 # forgetting strength, counted mode only; 0 disables it
|
|
|
|
# Legacy names. `TR_BITBRAIN_<X>` is the old namespace of TR_LEADGAIN_<X> and
|
|
# `TR_RACK_BITBRAIN` the old name of TR_RACK_LEADGAIN; they are still honoured,
|
|
# but the new name always wins and setting an old one prints a [depr] line, so
|
|
# they stay commented out here.
|
|
#TR_RACK_BITBRAIN=off # LEGACY: old name of TR_RACK_LEADGAIN
|
|
#TR_BITBRAIN_MEM=perRound # LEGACY: old name of TR_LEADGAIN_MEM
|
|
#TR_BITBRAIN_GAINS=0.0,0.25,0.5,0.75,1.0 # LEGACY: old name of TR_LEADGAIN_GAINS
|
|
#TR_BITBRAIN_N=32 # LEGACY: old name of TR_LEADGAIN_N
|
|
#TR_BITBRAIN_NADE=256 # LEGACY: old name of TR_LEADGAIN_NADE
|
|
#TR_BITBRAIN_RANGE=40.0 # LEGACY: old name of TR_LEADGAIN_RANGE
|
|
#TR_BITBRAIN_LOG=off # LEGACY: old name of TR_LEADGAIN_LOG
|
|
#TR_BITBRAIN_MIN_OBS=8 # LEGACY: old name of TR_LEADGAIN_MIN_OBS
|
|
#TR_BITBRAIN_WARMUP=400 # LEGACY: old name of TR_LEADGAIN_WARMUP
|
|
#TR_BITBRAIN_ADAPT=32 # LEGACY: old name of TR_LEADGAIN_ADAPT
|
|
#TR_BITBRAIN_CALIB=512 # LEGACY: old name of TR_LEADGAIN_CALIB
|
|
#TR_BITBRAIN_DECAY=250 # LEGACY: old name of TR_LEADGAIN_DECAY
|
|
#TR_BITBRAIN_DECAY_FRAC=0.02 # LEGACY: old name of TR_LEADGAIN_DECAY_FRAC
|
|
#TR_BITBRAIN_SEED=20240921 # LEGACY: old name of TR_LEADGAIN_SEED
|
|
#TR_BITBRAIN_RESET_ON_TARGET=on # LEGACY: old name of TR_LEADGAIN_RESET_ON_TARGET
|
|
|
|
# ── debug overlays (all on top of the gun; they never change a decision) ─────
|
|
TR_DEBUG_DRAW=on # master switch for every mover's debugGraphics
|
|
TR_GEO_DEBUG=off # draw the shared candidate-tile geometry overlay
|
|
TR_VBULLET_DEBUG=off # draw each admitted gun's virtual-bullet paths
|
|
TR_VBULLET_DEBUG_GUN= # which gun the overlay draws: empty = the selected one
|
|
TR_VBULLET_DEBUG_MAX=32 # max virtual bullets drawn per gun
|
|
TR_VBULLET_ADMIT_ONLY=on # on = a gun the rack does not admit is not even predicted
|
|
|
|
# ── logs (set the value to 1; presence alone turns some of them on) ──────────
|
|
TR_RESULT_LOG=on # one line per round result
|
|
#TR_POWER_LOG=1 # presence-only: one line per power decision
|
|
#TR_RAM_LOG=1 # presence-only: one line per ram start/stop and why
|
|
#TR_MOVEMENT_LOG=1 # presence-only: movement band/class changes
|
|
#TR_STRAFE_LOG=1 # presence-only: one line per strafe tile pick
|
|
#TR_TMHORIZON_LOG=1 # presence-only: the per-shot thinking of the TM horizon gun
|
|
GUN_STATS_PATH=/tmp/gun_stats.jsonl # where the per-round gun stats are written
|
|
GUN_SHOTLOG_PATH=/tmp/shot_log.jsonl # where the per-shot log is written
|
|
|
|
# ── measurement helpers (leave off unless you are measuring) ─────────────────
|
|
#TR_RECORD_WORLDSTATE=1 # presence-only: dump every observed world state
|
|
#TR_RADAR_SCANLOG=1 # presence-only: log every radar scan tick
|
|
#TR_TRACKER_PROBE=1 # presence-only: dump the enemy-tracker's internal state
|
|
TR_TRACKER_PROBE_PATH=/tmp/tracker_probe.jsonl # where that dump is written
|
|
|
|
# ── dotenv / boot report ─────────────────────────────────────────────────────
|
|
# Name of the env file to load. Must be set in the REAL environment, not in the
|
|
# file it points at. Empty = use ./.env, else .env next to the binary.
|
|
TR_ENV_FILE=
|
|
# 1 = print the [env] report on startup (default). 0 = do not print it.
|
|
TR_ENV_REPORT=1
|