michael
bcdadb1b1e
feat: overlay ACTIONS ring — every mod ping/cancel logged with breed + reason (PING[tag] breed (new|switch), CANCEL breed (mod|dead)) at the three choke points (set_auto_mark, cancel_mark, dead-release), last 5 shown with age; makes priority-switch double-pinging directly observable; NOT installed
2026-10-04 12:54:23 -04:00
michael
52cb8e9cbf
review polish: skull reject classifier checks ritualists before capacitance (was mislabeling ritual-gated rejections), fixed mangled indentation in SERVO_SKULL reject block, enumeration filter predicate now shared (mod:passes_breed_target_filter) between breed-priority init and breed_dump so the post-update diff can't drift; NOT installed yet (user in-session)
2026-10-04 11:47:08 -04:00
michael
a18194519b
review: prod-readiness fix pass (3-agent code review + 2 self-found)
...
HIGH:
- rpc shadow dropped tagger_game_object_id and target_location (wrong vararg capture,
args shifted); now forwards all varargs verbatim via unpack
- rpc shadow could NEVER install: ensure() read context.smart_tag_system (client-side
instance) instead of the updating self; now armed per-instance, client shadow still
pinned to the context instance only
- on_setting_changed debug_mode branch returned before the snapshot write: Debug Mode
toggles were dead mid-session and the ON-notify read the stale value (AGENTS.md trap
again, in my own fix); debug_chat/debug_hud now update the snapshot live too
- capacitance retention unit bug: widget relabel to charges (-10..10) left the legacy
/100 in load + change handler + breed menu round-trip (*100) + breed setter (/100),
making every retention threshold 100x too small; removed all four conversions
(health-threshold percent semantics untouched)
MEDIUM:
- TARGETS capture was observer-non-neutral: MARKED candidate fell through into full
re-evaluation (burned shared visibility budget); now skips like vanilla
- omni_diag_counter was an implicit global incremented in the prod hot path; now a
file-local, only touched under debug_mode
- hack skull/check/blacklist state survived mission end (stale unit handles + stamped
_automark_hack_order flags); mod:reset_servo_skull_local_state() runs on state exit,
which also clears omni_last/omni_candidates/last_skull_confirm/banners
LOW: dead-tag release now honors per-class reset_cooldown; SERVO_SKULL gate checks class
before doing GameSession reads; mod:diag hard-gated on debug_mode internally (diag_log.txt
is never created for normal users anymore; un-gates OMNI-BOOT/banner/load probes); hits[]
pooled per call; early no-candidates return no longer dangles omni_rejects/omni_hud_units;
omni_last allocation gated on hud_capture; omni_hud_cur reset at entry and per-iteration
before actor resolution (no cross-candidate leakage); builder runs only while a level
world exists (no menu-side pcall spam); debug_hud_y fallback 24->0 matches default;
px unit_text localization added; six new widgets had orphan *_tooltip loc keys - DMF
only shows tooltips via an explicit tooltip field, added
2026-10-04 11:18:23 -04:00
michael
ea76cb9067
feat: overlay TARGETS table — per-candidate breed/distance/fate captured in find_auto_mark_target_unit (zero-cost unless debug_hud/debug_mode on): enumeration records unit->entry, omni_reject attributes first reject reason to current candidate, marked unit shows MARKED, winner shows PING; overlay renders nearest-10 by distance with pass name, green=PING/MARKED/ACCEPTED, gray=not_visible, rejects summary line dropped (redundant)
2026-10-04 10:50:04 -04:00
michael
fede4eb18f
refactor: debug overlay abandons the UIHud element pipeline entirely — draws direct to level_world screen gui (Gui.rect dark panel + Gui.slug_text lines) per FpsDoctor's proven pattern in the same mods dir: per-world gui handle validation, pcall+backoff, 5Hz rebuild, RESOLUTION_LOOKUP scaling; X/Y now anchor top-left; deletes hud_element_debug.lua + require-path/injection/recreate machinery; works hub/MeatGrinder/mission, applies live
2026-10-04 10:40:18 -04:00
michael
ce5eb10f04
fix: debug_chat/debug_hud/debug_hud_x/y were DEAD settings — AutoMark's mod.settings is a hand-built snapshot table (line ~27), every key must be listed explicitly; unlisted keys read nil at load AND on_setting_changed's nil-guard refuses live updates, so the toggles did nothing from day one. Registers all four keys. THE reason the HUD never showed
2026-10-04 10:34:30 -04:00
michael
e9f81632cd
debug: OMNI-HUD value probes — dump in-memory debug_hud/chat/debug at mod load, every UIHud:init pass (count + setting + element count), and on toggle; settles config-vs-memory divergence
2026-10-04 10:29:29 -04:00
michael
610dc0169e
feat: debug-on reminder now also fires once per mission at gameplay start when Debug Mode was already ON at load (deferred from state-enter so the chat message is actually visible; silent when debug off or mod disabled)
2026-10-04 10:05:19 -04:00
michael
61bf2879ab
fix: Debug HUD toggle is now LIVE — flipping the checkbox mid-session recreates the player HUD on the spot (NumericUI recreate_hud pattern, pcall-guarded, 0.5s debounce); UIHud:init hook also strips the element when setting is off so recreate removes it; inject log now reports ADDED
2026-10-04 10:03:33 -04:00
michael
58b1764f4a
feat: Debug HUD Overlay X/Y sliders (0..3440 / -1440..1440 UI px, defaults 25/0) — live position sync in element update, no mission restart needed
2026-10-04 09:59:34 -04:00
michael
7f645e806a
fix: debug HUD never injected — mod files are invisible to the game require system (DMF loads via own file loader); registered element with mod:add_require_path and moved injection to UIHud:init hook following NumericUI's proven pattern (+ inject evidence line, super.update call, Color fn for text)
2026-10-04 09:54:45 -04:00
michael
2535c1aaaf
feat: Debug HUD overlay — live left-side text panel (own HUD element injected via UIManager.create_player_hud hook, plain-text widget, game's own HudElementBase pipeline): per-tag target/cooldown/priority-switch, skull state + hacking flag, last omni pick + reject counts, last server accept verdict; toggled by 'Debug HUD Overlay' (takes effect at mission start), fed at 5Hz
2026-10-04 09:49:47 -04:00
michael
3dcb228387
debug: OMNI-GATES one-line un-gated status banner per mission (class/companion/skull/mode/toggles/debug as the mod actually reads them) — settles 'was debug really on / did the class gates open' without any debug requirement
2026-10-04 09:28:46 -04:00
michael
30d18e2762
feat: chat reminder whenever Debug Mode is switched on (file diagnostics grow silently otherwise)
2026-10-04 08:52:40 -04:00
michael
7800afe0d6
feat: 'Debug Chat Messages' sub-setting under Debug Mode (default OFF) gates mod:echo chat spam; chat stays quiet with debug on, file diagnostics unaffected
2026-10-04 08:51:47 -04:00
michael
a75ae3492c
feat: server-side rpc_request_set_smart_tag shadow — flip testify around the request handler so client auto-mark requests stop dying in the server's aim-cone/LOS re-check at packet arrival (OMNI-CONFIRM measured 34% silent rejects, heaviest on ranged breeds); armed from SmartTagSystem:update hook_safe so it installs in the server state too (client ticks never run there); OMNI-BOOT probe proves whether/where mod code executes
2026-10-04 08:49:20 -04:00
michael
28c653428d
debug: OMNI-CONFIRM probe (did the server actually create each outgoing skull tag?) + OMNI-GATE trace (which readiness sub-check closed and skull state) — netgunner selection proven fine (best 29x skull passes, prio 5), ping loss is between send and accept
2026-10-03 18:08:32 -04:00
michael
afb458e2c2
fix: don't auto-mark when the skull can't shoot — mirrors game's validate_target_func_shooting_ability (must be in a following state + above minimum capacitance, with the game's training-grounds charge exemption); previously a ping issued while busy/low-charge hit the prevent_shooting_activation_on_fail branch which sticks the tag for its full 25s lifetime with no retry, blocking mark_limit — the real 'long cooldown after a kill' the game itself routes around for manual double-tags
2026-10-03 17:34:09 -04:00
michael
eb8b178a0f
fix: release auto-mark tag the moment the marked target dies — vanilla keeps it until corpse despawn (skull shoot tag lifetime is 25s) which starves mark_limit and produced the post-kill dead zone; cancel_tag + cooldown reset now, next tick re-marks within 0.2s
2026-10-03 17:32:36 -04:00
michael
625c30e264
debug: skull_invalid sub-gate breakdown (vet_conflict/unaggroed/capacitance/range) + one-shot wrapper-hack state trace (is_server/self/flag) — sniper candidate reaches pass loop fine (1870 lines w/ snipers in candidates), hack shadow confirmed on call path but flagged-branch never fires, need internals
2026-10-03 16:53:34 -04:00
michael
1827c9e3c0
fix+feat: auto-hack LOS bypass now flips GameParameters.testify around a normal orig set_tag call (keeps upstream bookkeeping/template/rpc intact — previous accept-branch replication diverged and caused inconsistency); auto-marking verified to never hit the look-gate (set_auto_mark creates tags directly), so sniper misses were the 100m max_range cap — slider ceiling raised to 250
2026-10-03 16:23:22 -04:00
michael
19046de0e7
fix: Lua functions don't accept ad-hoc fields — dropped the marker stamp that threw every hack tick (safe_hook spam, 412x); call-site check now compares rawset identity against stored patched fn ref
2026-10-03 16:09:20 -04:00
michael
297fbcdb93
fix(again): shadow set_tag directly on the SmartTagSystem INSTANCE (rawset) — three class-table hook attempts all provably missed the instance call path (marker nil, counter 0, zero fires); instance shadow also re-arms per mission since systems are recreated
2026-10-03 16:03:37 -04:00
michael
5ab17ac22e
change: remove omni auto-hack range cap (companion decoding costs the player no charges per user; nearest decoding objective anywhere wins, 30s per-object retry blacklist still guards loop-de-loop)
2026-10-03 15:52:02 -04:00
michael
ab5ff1ee49
fix: omni auto-hack retargeted at DECODING OBJECTS (_target_type=='hack' + interactee can_interact) — per cryptic_double_tag_settings the companion hack template applies to data-interro objectives, NOT enemies (enemy double-ping = shooting tag, already covered by marking); validates the exact same way the game's own double-ping resolver does
2026-10-03 15:50:37 -04:00
michael
1479b62a61
debug: hook wrapper stamp (marker field on fn) + unconditional fire-counter — engine stubs tostring(function) so pointer traces were blind; counters settle whether wrapper is on the call path at all
2026-10-03 15:45:56 -04:00
michael
c274d177ec
fix: hook the real class table via metatable.__index (getmetatable may return a wrapper whose raw fields are invisible to instance lookups) + pointer-trace diag to prove hook actually sits on the call path
2026-10-03 15:37:48 -04:00
michael
dfcafb9f4a
debug: one-shot hook-fire trace (is_server/flag state inside wrapped set_tag) — last run: hook installed OK, tag created-then-gone or branch-skipped, console shows zero SmartTagSystem warnings, ambiguous
2026-10-03 15:31:19 -04:00
michael
33bdc872b2
feat: bypass host-side look-check by replicating set_tag's accept-branch in a hook (source from Darktide-Source-Code dump: gate is _tagger_is_looking_at_target dot-0.75 cone + LOS sweep inside set_tag/handler; everything after is _generate_tag_id/_create_tag_locally/group-limit/rpc — reproduced verbatim for flagged auto-hack targets, pcall-guarded with vanilla fallback); replaces never-installed spoof attempt
2026-10-03 15:23:52 -04:00
michael
ac79578c19
fix: install spoof hook lazily from a live extension instance (getmetatable/__index) — CLASS-registry scan at mod load found nothing because extension classes register later; failure path now dumps class keys for next diagnosis
2026-10-03 15:21:13 -04:00
michael
e62d6dc6e8
feat: spoof _contextual_tag_template_name for the flagged auto-hack target — tagcheck proved the game silently rejects off-LOS set_tag (27/29 tag_applied=false); the game re-validates tags through this forward-LOS check, so flagging the chosen unit's extension makes its own validation accept the order
2026-10-03 15:13:50 -04:00
michael
e98d5e166e
debug: OMNI-HACK tagcheck — 1s after each auto set_tag, log whether the tag actually applied and whether skull entered hacking state (selection itself confirmed working: 16 picks incl 7m; skull only flies on-screen targets) + blacklist entries carry breed name
2026-10-03 15:05:46 -04:00
michael
15994ed04e
debug: sample per-candidate distances when filter matches but nothing within OMNI_HACK_RANGE (measured: enemies=8-10 yet selected=nil all mission — suspect NaN/long distances from position reads)
2026-10-03 14:52:21 -04:00
michael
2cabef7661
feat: omni auto-hack picks target itself (measured: game's _contextual_tag_template_name is forward-LOS gated — hackable=0 all session even under crosshair); nearest filtered enemy breed within 45m, direct set_tag, 30s per-unit retry blacklist
2026-10-03 14:43:21 -04:00
michael
5334580fd3
fix: diagnostics write to mods/AutoMark/diag_log.txt — printf is not a Lua sandbox global (nil call crashed the hook every tick once debug_mode was on) and DMF :info spams notifications; pcall-guarded mod:diag via Mods.lua.io
2026-10-03 14:25:13 -04:00
michael
b16a9cc8df
fix: route OMNI/HACK diagnostics through raw engine printf — DMF :info also fires on-screen notifications and spammed chat
2026-10-03 14:10:07 -04:00
michael
0ba1d73ba4
fix: capacitance retention thresholds were mislabeled 'percent' (-1000..1000) — values are compared to remaining ability charges; relabel to charge(s), range -10..10, rewrite tooltip in plain English (+zh)
2026-10-03 14:07:05 -04:00
michael
f41ef1793e
debug: OMNI-HACK-DIAG probe — dump hack-tag template fields + hackable-vs-total unit counts (debug_mode-gated) to locate why omni auto-hack doesn't fire off-LOS
2026-10-03 14:07:05 -04:00
michael
32994520bb
feat: auto-hack is 360-aware — with omni_mark on, pick nearest hackable unit from smart-tag registry instead of crosshair-scoped HUD markers
2026-10-03 07:24:54 -04:00
michael
bd8b3f2f72
fix: 360 omni marking now enumerates smart-tag registry instead of physics sweep
...
linear_sphere_sweep returns only a capped hit table (no count) and its
slots flood with world-geometry actors, starving real enemies behind the
player (crash: nil num_hits compare; then silent no-marks). Candidates
now come from smart_tag_system._unit_extension_data (alive, breed-typed,
in range) — geometry can't interfere, LOS gates still apply unless
omni_mark_ignore_los. OMNI-DIAG candidate/reject logging kept, gated on
debug_mode.
2026-10-03 07:15:32 -04:00
michael
791c68b64e
chore: make breed dump silent (debug-mode logging only, file still refreshed each boot)
2026-10-03 06:18:09 -04:00
michael
57ba90fe71
fix: sandbox strips standard io, use Mods.lua.io (DMF engine backup); pcall the load-time dump
2026-10-03 06:13:50 -04:00
michael
5862b9194f
feat: 360-degree omni marking option
...
- omni_mark: full-sphere sweep (linear_sphere_sweep capsule covering max_range
around the player) replaces the forward-only ping raycast, so enemies behind
you / off-screen become mark candidates
- omni_mark_ignore_los: optional sub-toggle, skips line-of-sight checks entirely
- prefer nearest unit on score ties (sweep hit order is arbitrary)
- bypass FOV dot gate in is_target_pingable when omni_mark is on
- LOS check budget 10 -> 16 per frame
2026-10-03 06:09:31 -04:00
michael
a2de1dfd1d
dev: dump live game breeds to breed_dump.txt on mod load (for post-update enemy table diffing)
2026-10-03 06:09:31 -04:00
michael
41a999f7d7
Upstream AutoMark v2.5.3 (Shui Yu, Nexus #736 ) baseline
2026-10-03 06:04:57 -04:00