Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Find CCSPlayerPawn SnapEyeAngles

ASecurity

Find and identify the CCSPlayerPawn_SnapEyeAngles function in CS2 server binary using IDA Pro MCP. Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the non-virtual SnapEyeAngles method. It is the one caller of the shared apply helper (CCSPlayerPawn_ApplyEyeAngleNetworkChange) that is NOT CCSPlayerPawn_SnapViewAngles. Emits a unique IDA-style byte signature and a func YAML. Mirrors the find-CCSPlayerPawn_SnapEyeAngles.py preprocessor (xref_funcs apply-helper, ex...

3 stars
0 votes
0 copies
0 views
Added 9/27/2026
tools

Works with

mcp

Security Analysis

A100/100

Scanned 9/27/2026

Install to Claude Code

$npx -y skills add mrc4tt/CS2_VibeSignatures --skill find-CCSPlayerPawn_SnapEyeAngles --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Find CCSPlayerPawn SnapEyeAngles?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Find CCSPlayerPawn SnapEyeAngles
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mrc4tt-find-ccsplayerpawn-snapeyeangles/badge)](https://www.skillsdirectory.com/skills/mrc4tt-find-ccsplayerpawn-snapeyeangles)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: find-CCSPlayerPawn_SnapEyeAngles
description: |
  Find and identify the CCSPlayerPawn_SnapEyeAngles function in CS2 server binary using IDA Pro MCP.
  Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the non-virtual
  SnapEyeAngles method. It is the one caller of the shared apply helper
  (CCSPlayerPawn_ApplyEyeAngleNetworkChange) that is NOT CCSPlayerPawn_SnapViewAngles. Emits a
  unique IDA-style byte signature and a func YAML. Mirrors the find-CCSPlayerPawn_SnapEyeAngles.py
  preprocessor (xref_funcs apply-helper, exclude_funcs SnapViewAngles).
  Trigger: CCSPlayerPawn_SnapEyeAngles, SnapEyeAngles
disable-model-invocation: true
---

# Find CCSPlayerPawn_SnapEyeAngles

Locate `CCSPlayerPawn_SnapEyeAngles` in CS2 `server.dll` or `libserver.so` using IDA Pro MCP tools.

This is a **non-virtual, direct-call** member function (no vtable slot — emit a byte sig, not an
offset). It is the structural **twin** of `CCSPlayerPawn_SnapViewAngles`: same normalize helper,
same apply helper, same network-change fields — but it does **NOT** cache the angle+previous into
the pawn, and sets a different internal state byte.

**Primary resolution = the apply-helper caller chain** (matches the preprocessor script): the
shared apply helper `CCSPlayerPawn_ApplyEyeAngleNetworkChange` has **exactly two callers** —
`SnapViewAngles` and `SnapEyeAngles`. Take the caller that is not `SnapViewAngles`.

## Method

### 1. Reuse previous signature (fast path)

If a prior `CCSPlayerPawn_SnapEyeAngles.{platform}.yaml` exists, try its `func_sig` via
`mcp__ida-pro-mcp__find_bytes`. Single match → resolve to function start, skip to Step 5. Else continue.

### 2. Load CCSPlayerPawn_SnapViewAngles (the anchor)

**ALWAYS** use SKILL `/get-func-from-yaml` with `func_name=CCSPlayerPawn_SnapViewAngles`.

If it errors (not yet found), run SKILL `/find-CCSPlayerPawn_SnapViewAngles` first, then retry.
Extract `func_va` of `CCSPlayerPawn_SnapViewAngles`.

### 3. Identify the apply helper inside SnapViewAngles

```
mcp__ida-pro-mcp__callees addrs="<SnapViewAngles_func_va>"
mcp__ida-pro-mcp__decompile addr="<SnapViewAngles_func_va>" include_addresses=false
```

The **apply helper** (`CCSPlayerPawn_ApplyEyeAngleNetworkChange`) is the call made late in
SnapViewAngles (just before the memfree tail), taking `(pawn, local)`; it applies the m_angEyeAngles
network-state change (touches the pawn's networkvar change-component). Record `apply_helper_addr`.
Optionally rename it to `CCSPlayerPawn_ApplyEyeAngleNetworkChange`.

### 4. Apply-helper caller minus SnapViewAngles → SnapEyeAngles

```
mcp__ida-pro-mcp__xrefs_to addrs="<apply_helper_addr>"
```

The apply helper has **exactly two code callers**: `SnapViewAngles` and `SnapEyeAngles` (plus
data/vtable refs). `SnapEyeAngles` = **the code caller that is not `SnapViewAngles`**. This is the
interactive form of the preprocessor's `xref_funcs=[ApplyEyeAngleNetworkChange]` +
`exclude_funcs=[SnapViewAngles]`. If a third code caller ever appears, fall back to the structural
confirmation below.

Decompile the candidate and confirm ALL:

1. Calls the **same** apply helper as SnapViewAngles.
2. Writes the **same** network-change fields, guarded by the same entity-handle validity check.
3. Does **NOT** perform the angle+previous cache stores into the pawn (no consecutive member stores
   at the SnapViewAngles cache offsets). ← key disambiguator.
4. Internal state byte set to the **eye** value (`2`), vs view's value.
5. (Confirmation) its only caller is the `eyeangle` console command handler (no string of its own;
   reached via a command-dispatch table).

Adjacency hint (linux often, not guaranteed on windows): SnapEyeAngles frequently sits immediately
**before** SnapViewAngles in address order. Use only as a hint — always confirm structurally.

Record `func_addr`. Optionally rename to `CCSPlayerPawn_SnapEyeAngles`.

### 5. Generate signature

**ALWAYS** use SKILL `/generate-signature-for-function` with `addr=<func_addr>`. Emit IDA style
verbatim (space hex, `?` wildcards) — do NOT convert to CSS `\x2A` unless a `gamedata.json` entry
is explicitly requested.

Reference sigs (build 14165 — sanity check only, regenerate per binary):
- linux:   `55 48 89 E5 41 57 41 56 41 55 41 54 53 48 89 FB 48 89 F7 48 81 EC ? ? ? ? E8 ? ? ? ? 8B 8B`
- windows: `48 89 5C 24 ? 48 89 74 24 ? 55 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B DA`

### 6. Write func YAML

**ALWAYS** use SKILL `/write-func-as-yaml`:
- `func_name`: `CCSPlayerPawn_SnapEyeAngles`
- `func_addr`: `<func_addr>`
- `func_sig`: validated sig from step 5

## Function Characteristics

- **Linkage**: non-virtual, direct-call (no vtable entry)
- **Binary**: `server.dll` / `libserver.so`
- **Parameters**: `(pawn, QAngle* angles)` (+ float on linux ABI)
- **Caller**: the `eyeangle` console-command handler
- **Distinguishing trait**: structural twin of SnapViewAngles WITHOUT the prediction cache;
  state byte = `2`; same normalize + apply helpers; networks `m_angEyeAngles`

## Discovery Strategy (why this is stable across updates)

1. `SnapViewAngles` is the durable anchor (found via the `setang` usage string → handler → its
   non-teleport branch call).
2. The apply helper `CCSPlayerPawn_ApplyEyeAngleNetworkChange` is pinned inside SnapViewAngles, and
   has exactly two callers; `SnapEyeAngles` is the non-view caller — deterministic, not
   address-based.
3. The final byte sig is regenerated per binary, so it self-heals each game update once the
   functions are re-resolved.

## Preprocessor pipeline equivalent

This skill is the interactive twin of the unattended chain in `ida_preprocessor_scripts/`:

```
find-Setang_CommandHandler                    [xref_strings "setang pitch yaw"]
 -> find-CCSPlayerPawn_SnapViewAngles          [LLM_DECOMPILE off handler, non-teleport call]
 -> find-CCSPlayerPawn_ApplyEyeAngleNetworkChange [LLM_DECOMPILE off SnapViewAngles, apply call]
 -> find-CCSPlayerPawn_SnapEyeAngles           [xref_funcs apply-helper, exclude_funcs SnapViewAngles]
```

Reference YAMLs live in `references/server/{Setang_CommandHandler,CCSPlayerPawn_SnapViewAngles}.{platform}.yaml`.

## Output YAML Format

- `server.dll`     -> `CCSPlayerPawn_SnapEyeAngles.windows.yaml`
- `libserver.so`   -> `CCSPlayerPawn_SnapEyeAngles.linux.yaml`

Attribution

mrc4ttmrc4tt
View sourceMore from mrc4tt →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

813271 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1074700 votes
View all in tools →