| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
Move vtable patching into hooks.cpp: one call clones the table, validates every
slot, records the originals and installs the clone. Installs happen from the
setup, game and paint threads, so the bookkeeping is mutex-protected.
Client, CInput, IVModelRender, IStudioRender and ISurface all use it, and
hooks_restore_all() can now put every interface back (previously impossible).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 -> 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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Prefer the local player's thrown frag over the pre-throw estimate: resolve
CBaseGrenade::m_hThrower from the server datamap (client owner handles as
fallback), then seed the prediction from the live origin/velocity. The real
frag is a spinning VPhysics box with a random Y angular impulse, so bounce
points remain approximate; the doc now says so.
- Keep 512 path points sampled every other 20 ms step (up to 24 s) instead of
127 points / ~2.5 s, so the line reaches the landing instead of stopping in
mid-air.
- Radius rings use 36 segments; a segment whose near-plane-clipped endpoint
the engine overlay refuses falls back to the local projection, and that
projection now uses the configured camera FOV instead of a hardcoded 75
degrees (the wide-FOV ring no longer kinks/drops pieces).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Testing on :99 showed the material $alpha path is a dead end: UnlitGeneric
takes translucency from the base texture/vertex alpha, and the debug materials
have neither. Follow Amalgam: apply alpha with IVRenderView::SetBlend
(VEngineRenderView014 slot 4) around the model draw, saving/restoring it.
To have something translucent to blend, write a tiny UnlitGeneric VMT with
$model 1 + $translucent 1 + a white base texture to
<game>/<mod>/materials/hl2hake/translucent.vmt (plus a custom/ copy). It is
written by a preload constructor so it exists before the material system scans
its search paths, then loaded once with FindMaterial. Styles 0/3/4/6 use it
when the colour alpha is below 255.
Also:
- Visible wireframe + through-wall: fill the visible silhouette first so the
through-wall pass cannot show in the wireframe gaps, then draw a brightened
contour. Style 6 is now "Solid + contour" (recolour + visible edges).
- find_modules builds local snapshots and publishes them under a mutex; the
setup thread and the server retry could reset the shared vectors live and
crash at startup.
Verified on :99: Solid + alpha 64 renders a see-through viewmodel, Solid +
contour shows a blue fill with bright blue contours, Additive is a translucent
coloured glow and Fullbright is a white additive glow.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Colour picker gains an optional alpha bar (checkerboard preview, #RRGGBBAA
readout); add_color_alpha is used for the chams colours. Chams colours are
now r,g,b,a and chams_apply sets $alpha plus MATERIAL_VAR_TRANSLUCENT when
alpha < 255. Config stores vis_a / inv_a / vm a.
- The additive viewmodel base is now a faint translucent tint (alpha/8)
instead of an opaque fill, so additive/Fullbright stay see-through and the
viewmodel no longer becomes a solid blob. Fullbright whitening reduced to
25% so blue stays blue instead of turning lavender.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Hostile/neutral/friendly each have independent visible and through-wall
settings: enable, style and colour. Viewmodel has its own enable/style/colour.
- Styles: Flat, Wireframe, Additive, Solid, White, Fullbright, Glow outline.
Additive uses the model solid material + ADDITIVE flag (the VGUI additive
was invisible on NPCs). White/fullbright are solid-based, so the viewmodel
no longer disappears/checkerboards. Glow outline adds a wireframe contour
pass for depth.
- Config: [chams] active/bind, [chams_hostile|neutral|friendly] vis/inv
settings, [chams_vm]. GUI sections for each group.
|
| |
|
|
|
|
|
|
|
| |
FindMaterial inside DrawModelExecute did not load the style VMTs, so every
style fell back to the solid material. Preload the six style materials from
outer_draw (throttled) and have the render hook use the cached pointers only.
world_find_material now returns only the exact requested material; the caller
falls back to the solid style. Add a vgui/white probe and per-style preload
logs.
|
| |
|
|
|
|
|
|
|
| |
- Material selector 0..4: debugwhite, debug wireframe (ignorez), vgui
white_additive, debugtranslucentsinglecolor, vgui/white; cached per index
with a debugwhite fallback.
- Add "Viewmodel (hands/weapon)" toggle; viewmodel entities (class contains
viewmodel or model path /v_...) get a normal-depth chams pass.
- [chams] gains viewmodel= and material=.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Hook IVModelRender::DrawModelExecute (VEngineModel016 slot 19) and force
models/debug/debugwhite for NPC models, identified by
ModelRenderInfo_t::entity_index.
- Two passes: MATERIAL_VAR_IGNOREZ through walls, then normal depth, with
IMaterial::ColorModulate for the configured colour; restore the shared
material's flag/colour afterwards.
- Material lookup via the IMaterialSystem list, FindMaterial fallback.
- New Chams feature/card with Through walls and colour; [chams] config.
- Remove the temporary ammo/projectile/fuse diagnostics.
|
| |
|
|
|
|
|
|
|
|
|
| |
The client m_iAmmo/m_hMyWeapons recv props still do not resolve, but the
listen server has the same CBaseCombatCharacter arrays in its datamap. Resolve
m_iAmmo and m_hMyWeapons there:
- reserve ammo comes from server_player_ammo() when the client array is
missing, so full-ammo filtering works (RPG rockets at 3);
- the owned-weapon mask is filled from the server m_hMyWeapons[48] handles,
so fallen weapons count as ammo before the player equips them.
Widen the datamap field-size filter to 512 for the 192-byte handle array.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Resolve m_iAmmo and m_hMyWeapons arrays from the client recv tables.
- "Only if usable" now compares m_iAmmo[type] against sk_max_* (stock caps as
fallback: RPG rockets 3, AR2 60, ...). Full ammo hides the pickup, including
RPG rockets and fallen weapons converted to ammo.
- Inventory now comes from m_hMyWeapons directly, so fallen weapons are ammo
before the player equips the matching weapon.
- Projection: fall back to local math when ScreenPosition claims "behind" for
a point with positive view depth, and build NPC boxes from vertical samples
so feet behind the near plane no longer drop the whole target. Log the first
8 near-target projection failures for diagnosis.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Items: "Only if usable" hides health tags at full health and armor at full
suit. Health ceiling is the server player's m_iMaxHealth; armor uses the
server m_ArmorValue against HL2's 100 cap. Fails open when unreadable.
- Projectiles: new Visuals feature/card for thrown grenades, RPG rockets,
helicopter bombs and AR2 balls. Fuse from server m_flDetonateTime vs engine
time; radius from m_DmgRadius with per-type fallback; optional 24-segment
radius ring and FRAG timer label.
- Melee: the killbot now handles the gravity gun as well; only VULNERABLE
targets, 1200-unit range, primary attack to launch the held object, and no
aim-punch compensation because the launch uses EyeVectors.
- Server/netvars: m_ArmorValue, m_flDetonateTime, m_DmgRadius.
|
| |
|
|
|
|
|
| |
Wayland/XWayland discards window gamma ramps, so mat_monitorgamma could not
work on the development setup. Drop the slider, config key and readback.
Keep the in-engine HDR tonemap brightness and document that Fullbright turns
tonemapping off.
|
| |
|
|
|
|
|
|
|
| |
The engine applies mat_monitorgamma (SDL receives changing ramp midpoints),
but Wayland/XWayland compositors discard the window gamma ramp, so the gamma
slider has no visible effect there. Add an in-engine brightness control that
does not depend on the window system: mat_force_tonemap_scale, exposed as
"HDR brightness" (x10, 0 = automatic). Drop the temporary SDL gamma ramp
diagnostic.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The server RandomSeed GOT slot was hardcoded to 0xce1348, measured on the
older bin/server.so. The anniversary branch loads hl2_complete/bin/server.so,
whose R_386_JMP_SLOT for RandomSeed is 0xce5348, so the patch hit unrelated
writable data and no spread silently did nothing.
- Read the relocation from the loaded module's ELF (module_jump_slot) instead
of hardcoding, with the two known offsets as fallback.
- Override whenever the RandomSeed caller's `this` is the local server player
(CBaseEntity::FireBullets) instead of matching a hardcoded return-address
range that also moved between builds.
- m_takedamage is a char (FIELD_CHARACTER) in the 2013 SDK; resolve it as such
and read a byte, so the IMMUNE damage tag actually works.
|
| |
|
|
|
|
|
|
| |
Draw ARM/VULN/IMM on the left edge of the box with a 10px font and a black
1px shadow, instead of full-size text above the name. The small font is a
second HFont created next to the 16px body font.
CONTEXT: document the DrawModel argument fix and the tag styling.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Resolve server m_takedamage (DAMAGE_NO/DAMAGE_EVENTS_ONLY = immune).
- Classify gunship/strider/dropship as ARMORED (OnTakeDamage only accepts
DMG_BLAST; only the RPG passes), and headcrab/antlion/manhack as VULN
(gravity gun / physics impact).
- ESP draws ARMORED/VULN/IMMUNE tags above the name (new "Damage tags"
toggle, [esp] dmg).
- Aimbot, silent aim, triggerbot and melee skip immune targets and armoured
targets unless the active weapon is the RPG.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Most of the crates are prop_static, which have no client entity, so writing
m_clrRender only reached the three dynamic ones. Hook the StudioRender
interface (VStudioRender025) on the interface object's vtable: substitute the
prop colour in SetColorModulation/SetAlphaModulation while
DrawModelStaticProp is drawing a models/props model, and set the modulation
explicitly before the original draw in case the engine sets it just before the
call.
Vtable indices verified by disassembling CStudioRenderContext: 27 = three
float stores from the argument pointer, 28 = one float, 30 = the
DrawModelInfo_t-drawing entry with three arguments (the 2013 SDK header lists
these slots five positions earlier in this build).
|
| |
|
|
|
|
|
|
|
|
| |
Prop model materials (VertexLitGeneric) ignore IMaterial::ColorModulate: the
engine feeds StudioRender the per-entity render colour (m_clrRender) on every
draw, so the material-side tint never showed on crates and other props.
Resolve m_clrRender from DT_BaseEntity and, every 10 ms while World tint and
Props are enabled, write the prop colour into every entity whose model is
under models/props. Restore white once when disabled.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sv_skyname did not take effect at runtime in this build, so the Skybox card now
replaces the skybox materials' textures with <config dir>/skybox.png.
The PNG is decoded through libpng16's simplified API (dlopen'ed, so no new link
dependency) and uploaded with IMaterialSystem::CreateTextureFromBits as an
RGBA8888 texture. IMaterialVar::SetTextureValue assigns it to $basetexture and
the HDR variants for every material in the SkyBox textures group (all six
faces get the same image).
Original textures are recorded per material/var (texture pointer plus string
fallback) and restored when the feature is off. Records survive level changes
so a reused sky material is still restorable; the override is re-applied to a
new map automatically. The card shows the image path and has a Reload image
button; a missing/unreadable PNG raises an error toast.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
New Visuals -> Skybox card with a runtime sv_skyname override using the same
mechanism as the stock skybox_swapper entity. The choice list is the HL2
skybox set extracted from the game VPKs.
The map's own sky is captured from loaded materials (SkyBox group, parsing
skybox/<name>... face names) before the first override, so turning the
feature off or picking "Map default" restores it; a level change restores it
implicitly. Sky changes invalidate the world tint so new sky materials are
tinted as well.
GUI: add a CK_CHOICE control (value box with < / > zones).
|
| |
|
|
|
|
|
|
|
|
| |
Read the server m_NPCState and mark NPC_STATE_SCRIPT actors neutral so
cutscene NPCs and scripted pets are not aimbot targets and draw in the
neutral colour. Add Lamarr (Kleiner's pet headcrab) to the neutral model
list as requested.
Also log state changes in the NPC debug line and resolve/log m_NPCState in
the server datamap summary.
|
| |
|
|
|
|
|
|
|
|
| |
- World tint now also colours prop materials (models/props*) with their own
colour, covering static props and prop_physics while leaving NPC, player and
weapon materials untouched.
- New Fog card: fog_override colour/start/end via ClientCmd, optional skybox
fog, and a Remove fog mode. Restores the map fog (fog_override 0) when
disabled and re-applies after level changes.
- Config sections [worldtint] prop/colour keys and [fog].
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Port Amalgam's modulation approach: obtain IMaterialSystem from the already
loaded materialsystem.so (VMaterialSystem080) and walk materials with
FirstMaterial/NextMaterial/GetMaterial. ColorModulate the "World textures"
group (sky names excluded) and the "SkyBox textures"/sky-named group.
The walk runs only when the enabled groups or colours change, restores white
when disabled, and re-applies after level changes. Before touching materials,
GetNumMaterials() and the first material's name/group are sanity-checked so a
wrong vtable slot logs and aborts instead of walking garbage.
GUI: "World tint" card with world/sky toggles and RGB sliders; config section
[worldtint].
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
m_Relationship is DEFINE_UTLVECTOR (FIELD_CUSTOM), not FIELD_EMBEDDED, so the
datamap scan always returned -1 and every NPC fell back to the model
heuristic. Resolve it as FIELD_CUSTOM with an embedded fallback.
Floor turrets never add relationship rows when friendly: CNPC_FloorTurret
overrides Classify() to CLASS_PLAYER_ALLY for citizen-built
(SF_FLOOR_TURRET_CITIZEN) and Alyx-hacked turrets. Read m_spawnflags and
m_bHackedByAlyx from the server instead.
Widen the datamap offset window (0x4..0x4000) for derived-class fields and
log the new offsets plus turret state in the NPC debug line.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Read the server NPC's m_Relationship CUtlVector (entity row for the local
player first, then the CLASS_PLAYER row): D_LI friendly, D_NU neutral,
D_HT/D_FR hostile.
- Use it for ESP colours and aimbot/silent-aim/melee target filtering, with
the existing model heuristic as a fallback.
- Treat bugbait-controlled antlions as friendly when their server
m_hFollowTarget is set.
- Resolve m_Relationship/m_hFollowTarget datamap offsets and log them.
|
| |
|
|
|
|
|
|
|
|
| |
- New Visuals card with the usual Active + Bind; default off. Unbound+Active
is always-on, a bind makes it hold-to-brighten.
- Resolve VEngineCvar004 and set mat_fullbright 1/0 through FindVar (slot 12)
and ConVar::SetValue(int) (slot 11), bypassing the console cheat gate.
Fall back to ClientCmd if the cvar interface is unavailable.
- Reapply after map loads/respawns and persist [fullbright] active/bind.
- Log on/off; show an error toast if the cvar cannot be applied.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Map transitions often leave a non-crowbar weapon active, so the killbot
silently does nothing. Log every active-weapon change as a normal
`melee: active ... crowbar=0/1` line and toast once suggesting the crowbar.
- Recover the crowbar model from the server entity when the client weapon
model index is missing/0 after a map change.
- Clear the bone cache and aim/silent locks when the local player entity
changes (map load/respawn) so stale entity/model data cannot poison melee
target selection.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Add a Weapons category and classify world weapon models (crowbar, pistol,
revolver, SMG, AR2, shotgun, crossbow, RPG, grenade, gravity gun, stunstick,
bugbait, sniper). Skip the active weapon and anything with a valid
m_hOwner/m_hOwnerEntity handle so held weapons do not tag.
- Label ammo by model: pistol, SMG, AR2, .357, crossbow, shotgun, sniper,
flares, AR2 grenade, RPG rocket and specific ammo-crate variants.
- Only item_item_crate and item_beacon_crate are supply crates; generic
breakable crates are no longer tagged. Crate chunks stay excluded.
- Add item diagnostics: category state, prop-like entities with class/model/
kind/distance/origin, and every item crate seen.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Drop the stucklaunch feature, its settings, diagnostics and
m_hGroundEntity resolution.
- Add a Visuals feature that scans the client entity list for valuable
pickups: health/medkits/chargers, ammo boxes/crates/grenades, batteries,
HEV suit modules/chargers, supply crates and generic items.
- Model-first classification with class fallbacks; category toggles, distance
labels and a max-distance slider.
- Draw colored marker/label tags through walls, independent of the hostile NPC
ESP.
- Persist [items] active/bind/health/ammo/armor/crates/distance/max_dist;
Reset restores defaults; GUI card and CONTEXT updated.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Client physics props are CPhysicsProp/CPhysBox, not the server class
prop_physics; the old case-sensitive class check never matched. Detect
MOVETYPE_VPHYSICS first (the reliable signal), then case-insensitive
class/model patterns.
- Log the first few prop checks with index, movetype, class and model so a
failed ground lookup is diagnosable.
- Log once when Stucklaunch is active (with run state, bind and ground
offset), when it engages, and when the ground is not a prop.
- Toast a warning when binding a feature that is not Active yet.
|
| |
|
|
|
|
|
|
| |
- Gravity-gun spam now alternates +attack (grab) and +use (drop) instead of
pressing both together, which would punt the prop.
- Add a Spam rate slider (1..16 ticks, default 2) so the pickup/drop cycle can
be tuned; it persists as spam_ticks in [stucklaunch].
- Log the prop index the first few times a stucklaunch engages to aid testing.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tooltips: text_in() shifted the x position to fit the full string before
truncating, which drew the tooltip text outside its box. Truncate to the
available width first, then clamp inside the clip.
Stucklaunch (Movement):
- opt-in feature (Active off by default) with its own bind;
- holds jump, alternates +use every 2 ticks to regrab a physics prop,
optionally +attack while the gravity gun is active, and air-strafes;
- engagement uses m_hGroundEntity (client netvar) latched for ~0.5 s so the
prop stays active while airborne; falls back to running whenever active if
the netvar is unavailable, with a startup warning to bind it;
- does not spawn or place props; the player supplies the prop and initial
speed.
Config gets [stucklaunch] active/bind/use_spam/gravspam/autostrafe; Reset
restores those defaults. CONTEXT documents the assist and its limits.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Toast queue drawn in the top-right by the overlay, independent of the GUI
being open. Info/warn/error colors and 6/9/12 s lifetimes; timers start on
the first painted frame so startup messages are not missed.
- Queue a load toast after install_menu, plus warnings/errors for missing
modules/interfaces/netvars, input hooks, fonts, ISurface, server datamap,
and spread seed support.
- Toast on config reload, reset, bind/unbind and config save failure.
- Config saves now write `config.tmp`, flush, then rename it over the real
file; failures leave the previous config intact.
- config_load reports whether a file was found so Reload can distinguish a
successful reload from a missing file.
- Update CONTEXT and ISURFACE_STATUS for the single GUI, toasts and atomic
config writes.
|
| |
|
|
|
|
|
|
|
|
| |
- Right-align the footer hint and size the config label from the remaining
width, so "INS close" is no longer truncated.
- Delete the text-tree menu now that the GUI has feature parity: remove the
tree/input/render code, the F1 toggle and menu_force_close.
- Keep only held-key polling for feature binds; poll it every frame from
outer_draw.
- Update CONTEXT/ADR: the GUI is the only menu.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the dummy preview controls with the actual settings:
- cards bind directly to the feature state and the existing option
variables; Active/Bind now drive the same gates as the text menu;
- every feature persists active+bind, including movement, melee and spread;
- config path and build info are real; Reload config re-reads the INI;
- Reset defaults is two-click, restores feature settings/binds and keeps
the GUI layout;
- window position, category and expanded cards persist under [gui] in the
same config file; layout saves on drag/category/expand/close;
- mouse bind capture handles all five buttons and consumes the click so it
cannot re-arm immediately;
- Active/Bind tooltips and full scancode names.
The old text tree stays on F1 for one verification pass.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Feedback pass:
- Insert now toggles the GUI; the old text tree moved to F1.
- Remove the title-bar X. Insert is the only close path; Esc only cancels
bind capture.
- Discard accumulated mouse deltas in CInput::CreateMove before the game can
apply them (CInput::ClearStates), so the camera no longer moves for a frame
and snaps back. Also skip ExtraMouseSample and zero relative mouse state
while the GUI is open.
- Strip attack/use/impulse/weapon selection from the command while open;
keep jump, duck and walk. Skip combat command edits (spread seed) too.
- Widen System page buttons so "Reload config" and "Reset defaults" fit.
- Update CONTEXT/ADR for the Insert-only close behavior.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Feedback pass on the preview shell:
- Freeze the rendered view explicitly in CreateMove and again at
FRAME_RENDER_START; CInput was still letting mouse look move the camera.
- Allow normal WASD/jump/duck movement while the GUI is open; strip
attack/use/impulse/weapon selection so GUI clicks do not fire.
- While bind capture is active, block all game input.
- Esc no longer closes the GUI; it only cancels bind capture. F2 or the
title-bar X close the preview.
- Interpose SDL_ShowCursor / SDL_SetRelativeMouseMode / warp / window grab so
the game cannot re-capture or hide the native cursor while the GUI is open.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
First vertical slice for the custom ISurface GUI:
- window/sidebar/content shell with Movement, Combat, Visuals, Weapons and
System categories;
- cards with dummy Active/Bind, collapsible settings, toggles, sliders,
buttons, bind capture, scrolling and tooltips;
- native OS cursor by releasing SDL relative mode; reasserted while open;
- F2 toggles the preview; Insert still opens the old text tree;
- while the GUI is open, do_move freezes movement/buttons/impulses/view and
skips combat features; ESP and the speed graph keep drawing.
Dummy controls do not touch the real config yet. The text menu is removed
after feature parity in the next pass.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The installed 2024 server ignores the client usercmd random_seed and uses its
own shot seed. Force the server's CBaseEntity::FireBullets RandomSeed call for
the local player only:
- hook the server.so RandomSeed GOT slot (R_386_JUMP_SLOT at 0xce1348);
- read the FireBullets `this` from the caller frame and compare it with the
local server player base;
- replace the seed with the precomputed best single/shotgun window and step it
per pellet; NPC shots and everything else pass through.
- client prediction still uses the same chosen usercmd seed, so both sides
agree on the spread pattern.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
HL2's CBaseEntity::FireBullets seeds its RNG from the usercmd random_seed
(m_bUseServerRandomSeed is false for HL2 weapons), so the client can select the
8-bit seed that puts CShotManipulator::ApplySpread closest to the center.
- New feature Spread control -> Active / No spread (both default on).
- Precompute the best seed for a single shot and for the shotgun's 8-shot
primary (first pellet accurate) and 12-shot secondary windows using the
engine's own RandomSeed/RandomFloat from libvstdlib.
- Set cmd->random_seed on attack commands; note_modified repairs the CRC.
- The random cone offset is neutralized, but the cone size, the pistol
accuracy penalty, server view punch and any damage falloff remain
server-side; stock HL2 has no distance damage falloff.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- New feature (default on): while the local player's active weapon is the
crowbar, pick the nearest visible hostile NPC within the 75-unit crowbar
range, sorted by distance to its collision AABB, and attack it through the
normal silent-aim path (usercmd view + IN_ATTACK, movement preserved,
rendered view restored at FRAME_RENDER_START).
- Prefer the nearest visible hitbox center; fall back to the AABB center /
closest point when bones are unavailable. Reuses the existing friendly /
neutral and life-state filters and the world-only vischeck.
- Detect the active weapon from the client m_hActiveWeapon handle, with the
authoritative server m_hActiveWeapon handle as a fallback (client entity
index from the low 16 bits).
- While the crowbar is active and this feature is on, skip the gun aimbot,
triggerbot and silent aim so they do not fight over the usercmd view.
- Menu: Melee killbot -> Active; config [melee] active=...
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The unduck window is only 2 units, while a 625-ups fall moves ~9.3 units per
66.7 Hz movement command, so pure jumpbug is ~20% reliable at that speed.
- Add Jumpbug -> Assist timing (default off). When the natural next command
would skip [36,38], pin the post-command ducked distance to 37 by writing
the vertical velocity for that command. Pure jumpbug remains available with
the option off.
- Resolve the client local m_vecAbsVelocity (0x11C) via the client datamap
and the server m_vecAbsVelocity (0x228) via the server datamap.
- Write both the authoritative server velocity (what SetupMove reads through
GetAbsVelocity) and the local prediction fields, so the next CreateMove sees
the assisted origin on both sides.
- Do not write the server m_vecVelocity directly: the datamap scan finds two
same-named entries (0x1C and 0x29C); SetAbsVelocity syncs it after movement.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 -> Jumpbug -> Active toggle (default on), config [jumpbug].
|
| |
|
|
|
|
|
| |
- 0.1 s sampling, 100-sample ring; horizontal speed of the local player
- small (240x64) panel centered in the lower half of the screen
- min 0, max auto-scales to the maximum in the 10 s window; shows max value
- ESP -> Show speed graph toggle, persisted as speedgraph=1
|
| |
|
|
|
|
|
|
|
|
|
| |
- Aimbot -> FOV and Silent aim -> FOV values (1..180 deg from the crosshair)
- Aimbot -> Show FOV circle: projects the FOV cone through the engine's
world->screen transform (hidden for >=89 deg since the boundary is behind
the eye)
- target lock: while a feature has a bind and the key is held, the acquired
target is kept while it is alive and has a visible selected hitbox point;
it only re-acquires when the target dies/leaves visibility or the key is
released. With bind = None both features keep selecting the nearest target.
|