| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
- world_find_material now tries the exact requested style first (resident,
then FindMaterial) before falling back to debugwhite/vgui white. The old
candidate scan returned vgui/white for every style, so all materials looked
flat.
- Add a real CK_DROPDOWN control (overlay list, outside-click close, config
save) and use it for the Chams material selector.
- Chams viewmodel toggle included in config/UI.
|
| |
|
|
|
|
|
|
|
| |
- 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=.
|
| |
|
|
|
|
| |
ColorModulate alone left the forced material white. Also set the shader's
$color and $color2 vars (IMaterialVar SetVecValue 3-float) and restore them to
white after the draw. Log which fallback material was selected.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- 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 datamap offset points at the array length header, so every ammo count was
read one type early. That made the RPG slot read the buckshot count (30) and
permanently exceed the 3-rocket cap, which is why RPG pickups never showed and
grenades/AR2/weapon ammo never hid. Read the elements 4 bytes after the field
offset.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
Transition-box edges and projectile radius rings were only drawn when both
endpoints projected. An edge with one corner behind the camera vanished, so a
half-visible box or ring showed nothing. Add a segment projector that clips at
the near plane in view space, then clips the 2D result to the screen bounds,
and use it for both.
|
| |
|
|
|
|
|
|
|
|
|
| |
- world_to_screen now rejects NaN/inf and absurd projections. A point on the
view axis (directly below the feet) could produce NaN and corrupt the
ISurface clip state, hiding the whole ESP for that frame.
- Draw projectile radius rings even when the projectile centre is off-screen
or behind the camera.
- Owner netvars are -1 on this client, so the "owned weapon -> ammo" rule now
accumulates the weapon types the player has actually held (active weapon,
server fallback), reset when the local entity changes.
|
| |
|
|
|
|
|
|
|
| |
- World weapons of a type already in the local player's inventory are retagged
as ammo ("SMG ammo", ...). Inventory scan only counts weapons owned by the
local player index, so NPC weapons do not trigger it.
- Projectile fuse: log det/cur/base/raw server value, and fall back to a
3-second first-sighting countdown when m_flDetonateTime or engine time is
unavailable.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
| |
The engine clamps mat_monitorgamma at 2.6, so the 2.8..3.0 end of the slider
did nothing. Read the value back one tick later (ClientCmd is queued) and
interpose SDL_SetWindowGammaRamp to see whether the engine pushes a ramp at
all.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Each changelevel trigger now shows its own target map. The trigger whose
target is the map we came from is marked "<- map"; the forward one is
"-> map". No more appending one global previous-map line to every box.
- Draw the volume as a projected 8-corner / 12-edge wireframe with the tag
above its highest visible corner instead of a screen-space rectangle.
- Camera FOV is 40..140 (stock 75) and viewmodel FOV 20..120 (stock 54); 0 is
no longer allowed and old configs using 0 migrate to the stock value.
- Log the mat_monitorgamma readback via ICvar so we can tell whether the
command is rejected or the OS/compositor ignores the gamma ramp.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 ApplySpread random draws are not guaranteed to run in the player's frame
(the compiler can outline them), so the frame-based shooter check missed and
the shotgun kept its seed-minimised spread. The player's FireBullets
RandomSeed call now arms a short 8-draw window; the next RandomFloat draws
return 0. Keep the frame check as the other path. Remove the diagnostics used
to find this.
|
| |
|
|
|
|
|
|
|
| |
Picking the best of 256 pending seeds still leaves the shotgun's 8/12 pellets
a few degrees apart. CShotManipulator::ApplySpread is inlined into
CBaseEntity::FireBullets and draws x/y through the global
CUniformRandomStream; hook its RandomFloat slot and return 0 when the calling
frame's shooter is the local server player. This collapses every pellet onto
the shot direction while NPC fire and client prediction keep their randomness.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
Drop the temporary DrawModel/SetColor logs now that the prop tint works, and
document the IStudioRender hook layout, the short model-name format used for
prop detection, the SetColor-before-DrawModel ordering, and why prop
materials cannot be tinted directly.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- The material system rejects textures whose dimensions are not multiples of 4
("Image dimensions must be multiple of 4!"), so scale the decoded image to
the next power of two (bilinear). 798x798 -> 1024x1024. The invalid VTF also
crashed the renderer after the apply.
- Move skybox_update() out of the VGUI paint hook into the FRAME_RENDER_START
FrameStageNotify stage. ITexture::Download only regenerates bits when the
material system considers the frame render-safe; during paint it returned
early, the regenerator never ran (no pixels), and a later upload of the
empty VTF crashed.
- Log the regenerator entry so the log shows whether the upload path ran.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The HDR sky materials use the "sky" shader with $hdrcompressedtexture (DXT5).
Assigning an RGBA8 procedural texture there sampled as compressed data and
rendered black. Point $hdrbasetexture at the image, undefine
$hdrcompressedtexture (and its 0/1/2 variants) so the shader falls back, and
call IMaterial::Refresh (37) because the sky shader binds textures in
SHADER_INIT, which is otherwise cached.
GUI: draw_checkbox and the card expand chevron ignored the content clip, so
cards scrolled out of view leaked header widgets outside the window.
Log the first regenerator call (size/pitch/first pixel) for diagnosis.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
client.so, engine.so and vguimatsurface.so all export their own
png_create_read_struct. Loading the system libpng16 made its internal calls
bind to the game's older libpng, whose png_struct layout differs, so
png_safe_warning read a NULL error_ptr and crashed.
Replace libpng with a small PNG reader: zlib's uncompress (dlopen'ed) plus the
five PNG row filters, supporting 8-bit non-interlaced RGB/RGBA/gray/palette
images with tRNS alpha for palettes. Output verified byte-identical to libpng
for the skybox.png in use.
|
| |
|
|
|
|
|
|
|
|
|
| |
The crash was CreateTextureFromBits: this build's IMaterialSystem interface
stops at GetDisplayDeviceName, and the slots after it are CMaterialSystem's
own virtuals, so index 134 was an unrelated function.
Use CreateProceduralTexture (81, verified by disassembling the interface
vtable) together with an ITextureRegenerator (SetTextureRegenerator 12,
Download 13) that fills mip 0 via IVTFTexture::ImageData (39; IVTFTexture has
a two-slot virtual destructor, so Width=15, Height=16, RowSizeInBytes=19).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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].
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Replace the six RGB sliders on the World tint card with a CK_COLOR control:
each row shows a live swatch and expands an inline picker with a
saturation/value square, a hue bar, and hex/RGB preview. The picker grows the
card in place so it scrolls/clips like any other row, keeps HSV state while
open (grey does not lose its hue), writes the shared 0-255 RGB triple used by
the config, and saves on mouse release.
Costs ~1.2k small rects per frame only while a picker is open; no texture
interface needed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
The client m_hActiveWeapon is a networked EHANDLE: low 11 bits are the
entity index and the rest is the serial. Masking with 0xFFFF included serial
bits, so on later maps the weapon index became garbage (e.g. 49184/12319)
and melee killbot could not recognize the crowbar. Use 0x7FF for client and
server active-weapon handles, weapon owner checks and item-ESP weapon skips.
Document the layout in CONTEXT.
|
| |
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
| |
- Silent aim and triggerbot set IN_ATTACK after CInput::CreateMove, so the
minimal-spread seed was never applied to their shots. Re-apply
spread_control_apply after setting the attack button, then update the CRC.
- Crossbow bolts and RPG rockets are not hitscan. Lead the selected hitbox by
target velocity * travel time; the crossbow bolt also gets its 0.05 gravity
drop (30 u/s^2). Apply the same correction to the smooth aimbot.
- Document both paths in CONTEXT.
|
| |
|
|
|
|
|
|
|
|
| |
- config_load now accepts max_dist=0 instead of clamping it to 250, so the
"unlimited" setting survives a restart.
- The Max distance slider shows "All" at 0 and its tooltip documents 0 =
unlimited; the categories log prints max=All.
- Skip unclassified entities before projecting them / computing distance.
- Keep the removed prop/crate debug logging and the user's rule that the
distance slider applies to every tag.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
| |
Client CPhysicsProp entities frequently report m_nModelIndex == 0, so item
crates appeared as model=? and were never classified. Fall back to the
server entity's m_nModelIndex (set in CItem_ItemCrate::Spawn) when the client
model index is missing, then resolve the name through the shared modelinfo.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Remove ellipsis truncation from text_in; text is never cut to fit.
- Add a wrapping helper that breaks at spaces and, for long words such as
paths, at character boundaries. Card titles, control labels, info rows,
sections, tooltips and toasts now wrap and their rows/panels grow.
- Use ISurface::GetTextSize (slot 75) for real glyph widths, with the old
estimate only as a fallback before the surface/fonts exist.
- Dynamic card header height for wrapped titles; Active/Bind controls stay
vertically centered. Slider controls are vertically centered in taller
wrapped rows.
- Auto-size System buttons to their labels.
- Tooltips wrap to a panel sized by the widest line.
- Drop the duplicate config path from the footer; the System page shows it
wrapped, so the footer hint fits without clipping.
|
| |
|
|
|
|
|
|
| |
- 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.
|