<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hl2h/src/vischeck.cpp, branch master</title>
<subtitle>Simple internal C++ cheat for HL2 for GNU/Linux.
</subtitle>
<id>https://git.2137697.xyz/hl2h/atom?h=master</id>
<link rel='self' href='https://git.2137697.xyz/hl2h/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/'/>
<updated>2026-11-06T15:09:55Z</updated>
<entry>
<title>Fix audit findings: crash safety, correctness, rendering, performance</title>
<updated>2026-11-06T15:09:55Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-06T15:09:55Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=33f5ed9ef58f26c6b3b52cf605dd4311d658a60d'/>
<id>urn:sha1:33f5ed9ef58f26c6b3b52cf605dd4311d658a60d</id>
<content type='text'>
Crash/UB:
- gate every hook behind an init-stage flag until config/surface/input are ready
- publish module maps as immutable atomic snapshots instead of reallocating
  shared vectors under unlocked readers
- validate the %ebp walk in the RandomSeed/RandomFloat hooks against the stack
- bounds-check every RecvTable/RecvProp/string dereference with module_range()
- preserve the Itanium vtable header when cloning (client, CInput, model render,
  studio render)
- reject negative usercmd sequence numbers; guard config_load against a null
  section target; cap the bone parent walk; check mprotect; drop PROT_EXEC on
  the GOT patch; absorb server.so .bss tail

Correctness:
- filter dormant entities across ESP, aimbot, triggerbot, melee, items and
  projectiles (slot self-tested against the local player)
- reset the server-health latch per map and only latch on valid model indices
- bone cache sized for the 128-target scan; set valid=false on every failure;
  head_position keeps searching past an invalid bone
- vischeck steps past glass by probing until clear, and ignores entities owned
  by the target (held weapons, bone followers)
- aimbot: maxs no longer disables it, AABB-aware FOV prefilter, lock hysteresis,
  lead point re-checked for FOV and visibility
- spread: seed hook arms on the no-spread toggle alone; engine toggle only
  controls the RandomFloat zeroing
- resolve m_hOwnerEntity/m_hOwner; NPC lead velocity from the server entity
- vector_angles pitch range, point_ground normal test, underwater jump+duck no
  longer skips combat, semi-auto press/release edge for synthetic fire
- item/projectile markers and blast rings refresh origin per frame while
  discovery stays at 10 Hz; trajectory uses the real m_DmgRadius and honours
  the blast-radius toggle

Rendering/GUI:
- one overlay draw per engine frame (FRAME_RENDER_START boundary), fixing
  alpha stacking and the speed-graph flicker
- clipped lines/outlines and ellipsised text instead of drawing past the
  content pane or shifting over neighbours
- dropdown dismissal consumes the click; hover ignores hidden controls
- chams: reset AlphaModulate, reference shared materials once, restore prop
  tint colour; fonts created once per handle
- projection uses Source's 4:3 aspect scaling and roll; screen size refreshed
  each frame; FOV circle gated on the aim toggles, not the bind

Performance:
- TTL caches for NPC relation, friendly/neutral and damage class
- model names memoised per model index
- entity pointer -&gt; index cache for the triggerbot (was a 4096-slot walk/tick)

Build:
- real Makefile with -MMD dependency tracking, debug/release objects and an
  always-relink rule; build.sh kept as a thin wrapper
</content>
</entry>
<entry>
<title>Add grenade trajectory, RPG armour priority, empty chargers, mega gravity gun</title>
<updated>2026-11-04T22:26:53Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T22:26:53Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=074e315c8550712dce0c7b530a90eee6aca29e63'/>
<id>urn:sha1:074e315c8550712dce0c7b530a90eee6aca29e63</id>
<content type='text'>
- Projectiles gets a "Grenade trajectory" toggle. While a frag grenade is
  held, simulate the weapon_frag throw (1200 u/s forward + 120 z, player
  velocity, gravity 600) and trace each step with a new
  trace_solid_segment(); reflect on impact, stop on a slow upward-normal hit,
  and draw the path, landing cross and a 300-unit blast ring. Verified on :99
  (arcs, bounces off the tunnel wall, lands).
- With the RPG equipped, armoured NPCs (striders, gunships, dropships,
  hunter-choppers) sort before normal enemies during target acquisition.
  Added helicopter/chopper to the ARMORED model list.
- Empty health/suit chargers are hidden: read m_iJuice from the server
  datamap (0 = depleted, -1 = unreadable/fail open).
- The citadel supercharged gravity gun (d3_citadel_03, d3_citadel_04,
  d3_breen_01 via IVEngineClient::GetLevelName) is treated as a normal
  weapon, so the melee aimbot no longer restricts it to VULNERABLE NPCs.
</content>
</entry>
<entry>
<title>Add ESP, aim, view and movement batch</title>
<updated>2026-11-04T12:53:45Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T12:53:45Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=12fde50efc7e1f1d123f9fc34ffef53d4387de2d'/>
<id>urn:sha1:12fde50efc7e1f1d123f9fc34ffef53d4387de2d</id>
<content type='text'>
- ESP: alert state (IDLE/ALERT/COMBAT/SCRIPT), enemy weapon labels, hostile/
  neutral/friendly colour pickers, off-screen direction arrows, and
  trigger_changelevel volumes with next/previous map labels.
- Aim: silent aim reuses the Aimbot FOV, vischeck and bone settings; add
  optional aim-punch compensation for aimbot, silent aim, triggerbot and
  melee (server bullets add m_vecPunchAngle to the usercmd angles).
- View: always-on Camera / display card with camera FOV (writes the client
  m_iDefaultFOV netvar), viewmodel FOV and monitor gamma (client cvars).
- Movement: Jump assist card with auto crouch-jump and edge jump (point
  ground probe 0.12 s ahead).
- Spread: Engine spread override toggle gates the direct RandomFloat zeroing;
  off leaves only the seed search.
- Server: entity count/base/classname helpers, trigger_changelevel map name
  and world bounds via IServerUnknown/ICollideable.
- Netvars: m_vecPunchAngle and m_iDefaultFOV.
</content>
</entry>
<entry>
<title>Vischeck: only glass materials are glass; log font/glass diagnostics</title>
<updated>2026-11-03T21:04:06Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-03T21:04:06Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=62cc5b2a08df1a347b78b98d056b62e79e88f5f3'/>
<id>urn:sha1:62cc5b2a08df1a347b78b98d056b62e79e88f5f3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>GUI: recover invalid fonts; vischeck: props and bulletproof glass</title>
<updated>2026-11-03T21:03:01Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-03T21:03:01Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=2e9373d530bca779b4070a79972f246ef41e4038'/>
<id>urn:sha1:2e9373d530bca779b4070a79972f246ef41e4038</id>
<content type='text'>
- Validate the GUI font handles with GetTextSize and recreate them when the
  local player entity or UI scale changes. Small scaled sizes fall back to the
  proven 16 px size, and the failure log/toast is emitted once instead of every
  frame. This fixes sessions where the menu rendered with no text after a
  level transition.
- Rework visibility: trace with MASK_SHOT/TRACE_EVERYTHING while ignoring the
  local player and target, so static props, crates and other NPCs block.
  Non-solid glass and breakable-glass materials are skipped; solid non-break
  glass (bulletproof) blocks. Fix CONTENTS_WINDOW 0x2 (was 0x4) in the masks.
- Pass self/target to is_visible from aimbot/silent/melee callers.
</content>
</entry>
<entry>
<title>Logging: per-session file and debug-gated verbose logs</title>
<updated>2026-10-28T11:24:10Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-10-28T11:24:10Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=16546e5818408f35adc60c2d937cf4541ff7840a'/>
<id>urn:sha1:16546e5818408f35adc60c2d937cf4541ff7840a</id>
<content type='text'>
- Open /tmp/hl2hake.log once in the library constructor with "w" so each
  session starts clean, use line buffering, flush each line, and close it via
  atexit. No more fopen/fclose per message.
- Add logd() for verbose diagnostics, enabled only with HL2H_DEBUG=1.
- Move ESP/NPC scans, item-prop/item-classification logs, aimbot/silent-aim/
  melee/triggerbot/spread details, jumpbug tracking, bone dumps, netvar dumps,
  cmd-modified and ground-trace noise to logd().
- Keep logf() for lifecycle, config, warnings/errors, GUI open/close, item
  category/tagging summaries and item-crate detections so crate debugging
  works without the ESP stream.
- Supply crates now respect the max-distance slider (user change), with the
  stale comment and CONTEXT updated.
- Document HL2H_DEBUG=1 in play.sh and CONTEXT.
</content>
</entry>
<entry>
<title>Jumpbug: automatic duck+jump on damaging falls</title>
<updated>2026-10-27T12:22:27Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-10-27T12:19:00Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=bb99c978c5f982e80a3007101fd61fe23635e242'/>
<id>urn:sha1:bb99c978c5f982e80a3007101fd61fe23635e242</id>
<content type='text'>
- Predict the landing speed from the current vertical velocity and a swept
  standing-hull ground trace; engage only when it exceeds
  PLAYER_MAX_SAFE_FALL_SPEED.
- Press duck one command before the unduck window so FinishDuck's 36-unit
  origin raise places the feet ~37 units above the floor.
- On the next command release duck and press jump: PlayerMove runs Duck()
  before CheckJumpButton, so FinishUnDuck sets ground, the jump executes, and
  CheckFalling never sees ground for the fall-damage check.
- Measure the per-command fall from consecutive airborne origins instead of a
  fixed tick interval; clear IN_JUMP while waiting so the pogo latch is clear.
- New Movement -&gt; Jumpbug -&gt; Active toggle (default on), config [jumpbug].
</content>
</entry>
<entry>
<title>Triggerbot: crosshair entity trace, hostile-only</title>
<updated>2026-10-26T16:22:25Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-10-26T16:22:25Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=e9944657c7ddefb3b8d2c8373c97fa47629ea1b8'/>
<id>urn:sha1:e9944657c7ddefb3b8d2c8373c97fa47629ea1b8</id>
<content type='text'>
- top-level Triggerbot feature (Active + Bind, default Mouse4, rebindable)
- trace the crosshair ray from the eye with MASK_SHOT and TRACE_EVERYTHING;
  the filter ignores the local player
- if the first entity hit is a live hostile NPC, press IN_ATTACK and fix the
  usercmd CRC; walls/props/friendly/neutral/corpses do not trigger
- independent of Aimbot; config [triggerbot] active/bind
</content>
</entry>
<entry>
<title>Aimbot v3: world-only vischeck</title>
<updated>2026-10-26T16:16:35Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-10-26T16:16:35Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/hl2h/commit/?id=b37e1f6892895e438aa7974e1144a6269d94e4aa'/>
<id>urn:sha1:b37e1f6892895e438aa7974e1144a6269d94e4aa</id>
<content type='text'>
- resolve EngineTraceClient003; TraceRay (slot 4) from the eye to the exact
  selected hitbox/bone point with MASK_VISIBLE
- TRACE_WORLD_ONLY filter as requested (static props are not tested, per SDK)
- Aimbot -&gt; Vischeck toggle, persisted as vischeck=1; when on, blocked targets
  are skipped and the next-nearest candidate is tried
- target candidates are ranked by angle; on each target the nearest visible
  selected hitbox point wins
</content>
</entry>
</feed>
