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 CBaseAnimGraph M SkeletonInstance AND CGameSceneNode GetSkeletonInstance AND CSkeletonInstance M AnimationController

ASecurity

Find and identify the CGameSceneNode::GetSkeletonInstance virtual function's vtable slot, plus the CBaseAnimGraph::m_skeletonInstance and CSkeletonInstance::m_animationController struct member offsets, in the CS2 server binary using IDA Pro MCP. Use this skill when reverse engineering server.dll or libserver.so to locate the scene-node accessor that returns a node's CSkeletonInstance* (or null if the node isn't a skinned model), and the two related struct-member offsets used by CounterStrikeS...

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

Works with

mcp

Security Analysis

A100/100

Scanned 9/27/2026

Install to Claude Code

$npx -y skills add mrc4tt/CS2_VibeSignatures --skill find-CBaseAnimGraph_m_skeletonInstance-AND-CGameSceneNode_GetSkeletonInstance-AND-CSkeletonInstance_m_animationController --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Find CBaseAnimGraph M SkeletonInstance AND CGameSceneNode GetSkeletonInstance AND CSkeletonInstance M AnimationController?

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

Security grade badge for Find CBaseAnimGraph M SkeletonInstance AND CGameSceneNode GetSkeletonInstance AND CSkeletonInstance M AnimationController
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mrc4tt-find-cbaseanimgraph-m-skeletoninstance-and-cgamesc/badge)](https://www.skillsdirectory.com/skills/mrc4tt-find-cbaseanimgraph-m-skeletoninstance-and-cgamesc)

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

Download with Pro
Files
SKILL.md
---
name: find-CBaseAnimGraph_m_skeletonInstance-AND-CGameSceneNode_GetSkeletonInstance-AND-CSkeletonInstance_m_animationController
description: |
  Find and identify the CGameSceneNode::GetSkeletonInstance virtual function's vtable slot, plus the
  CBaseAnimGraph::m_skeletonInstance and CSkeletonInstance::m_animationController struct member offsets, in the
  CS2 server binary using IDA Pro MCP. Use this skill when reverse engineering server.dll or libserver.so to
  locate the scene-node accessor that returns a node's CSkeletonInstance* (or null if the node isn't a skinned
  model), and the two related struct-member offsets used by CounterStrikeSharp's animation-graph memory patches.
  Trigger: CBaseAnimGraph_m_skeletonInstance, CGameSceneNode_GetSkeletonInstance, CSkeletonInstance_m_animationController
disable-model-invocation: true
---

# Find CBaseAnimGraph_m_skeletonInstance, CGameSceneNode_GetSkeletonInstance, CSkeletonInstance_m_animationController

Locate `CGameSceneNode::GetSkeletonInstance` (vtable slot), `CBaseAnimGraph::m_skeletonInstance` (struct
offset), and `CSkeletonInstance::m_animationController` (struct offset) in CS2 `server.dll` / `libserver.so`
using IDA Pro MCP tools.

## Method

### 1. Resolve CGameSceneNode_GetSkeletonInstance (vtable-slot output)

**ALWAYS** Use SKILL `/get-vtable-address` with `class_name=CGameSceneNode` (RTTI walk via the Itanium typeinfo
name string `"14CGameSceneNode"`; primary vtable = the candidate whose `offset_to_top` qword is `0` and whose
first few slots point into executable memory).

> Linux 14168 reference: `CGameSceneNode` primary vtable `0x23e6930`.

Read slot **13** directly (`FUNC_VTABLE_RELATIONS = [("CGameSceneNode_GetSkeletonInstance", "CGameSceneNode")]`
— the class/slot pair is already known from the preprocessor config; no additional discovery is required for the
index itself):

```text
mcp__ida-pro-mcp__idalib get_int queries=[{"addr":"<vtable_va + 0x10 + 13*8>","ty":"u64"}]
```

Decompile the resulting address and confirm it matches `GetSkeletonInstance`'s expected shape: `CGameSceneNode`
itself is not a skinned/animated node, so its **own** (base-class) implementation of this virtual is expected to
be a trivial stub that unconditionally returns null/0 — only overriding classes further down the hierarchy
(e.g. `CSkeletonInstance` itself, or classes that own one) return a real pointer.

> Linux 14168 reference: slot 13 resolves to `0xa60770`, a 3-byte function whose entire body is `return 0;`
> (`xor eax,eax; retn` — i.e. `mov eax, 0; ret`) — confirming the "returns null unless this is actually a
> skinned node" pattern and matching ground truth slot index **13**.

**ALWAYS** Use SKILL `/get-vtable-index` to double check the resolved function occupies exactly slot 13 if you
re-derive it by any other means (e.g. from a caller that devirtualizes the call).

**ALWAYS** Use SKILL `/generate-signature-for-vfuncoffset` if a call-site signature (rather than just the raw
slot index) is also desired for a patch/hook use-case — most CounterStrikeSharp consumers only need the plain
`vfunc_index`/`vfunc_offset`, emitted via `/write-vfunc-as-yaml` below.

### 2. Resolve CBaseAnimGraph_m_skeletonInstance (struct-offset output)

This is a plain data-member offset, not a vtable slot: the byte offset of the embedded `CSkeletonInstance`
sub-object within `CBaseAnimGraph`. Locate a `CBaseAnimGraph`-owning class's constructor or an accessor that
reads/writes this member with a fixed, small immediate displacement off `this` (e.g. `CBaseModelEntity`'s or
`CBaseAnimGraph`'s own `GetSkeletonInstance`-equivalent accessor, or the constructor that placement-news the
`CSkeletonInstance` into the object).

**ALWAYS** Use SKILL `/generate-signature-for-structoffset` on the anchor instruction that references
`this + <m_skeletonInstance offset>` (e.g. a `lea reg, [rdi+OFF]` or `add rdi, OFF` feeding a
`CSkeletonInstance`-constructor-shaped call) once you've located a suitable instruction — this both confirms the
offset and produces a version-resilient signature for it.

**ALWAYS** Use SKILL `/write-structoffset-as-yaml` to persist the result, with `struct_name=CBaseAnimGraph`,
`member_name=m_skeletonInstance`, and the offset + signature from the previous step.

> This offset was **not** independently re-derived/validated in this pass (only `CGameSceneNode_GetSkeletonInstance`'s
> vtable slot was in scope for validation here) — follow the pattern above on a fresh run to resolve and confirm
> a concrete value before relying on it.

### 3. Resolve CSkeletonInstance_m_animationController (struct-offset output)

Same shape as step 2, but for the offset of the embedded/owned `CAnimationController` (or pointer to one) within
`CSkeletonInstance`. Look for an accessor on `CSkeletonInstance` (commonly named something like
`GetAnimationController` if it's virtual, or a direct field read if not) that references `this + OFF` with a
small fixed displacement, feeding calls into animation-graph update code.

**ALWAYS** Use SKILL `/generate-signature-for-structoffset` on the anchor instruction, then **ALWAYS** Use SKILL
`/write-structoffset-as-yaml` with `struct_name=CSkeletonInstance`, `member_name=m_animationController`, and the
resolved offset + signature.

> This offset was **not** independently re-derived/validated in this pass either — same caveat as step 2.

## Function/Member Characteristics

### CGameSceneNode_GetSkeletonInstance

- **Purpose**: Returns the `CSkeletonInstance*` associated with a scene node, or `nullptr` if the node has no
  skeleton (e.g. a plain, non-animated `CGameSceneNode`). Used throughout the animation/bone-access code paths
  to safely down-cast a generic scene node to its skeleton data.
- **Binary**: `server.dll` / `libserver.so`
- **Parameters**: `(CGameSceneNode *this)`
- **Return value**: `CSkeletonInstance*` or `nullptr`
- **VTable**: `CGameSceneNode`, slot **13** (`vfunc_offset = 0x68`) — matches ground truth.

### CBaseAnimGraph_m_skeletonInstance

- **Purpose**: Byte offset of the embedded `CSkeletonInstance` sub-object within `CBaseAnimGraph`-derived
  entities, used by patches/hooks that need direct field access without going through the virtual accessor.
- **Binary**: `server.dll` / `libserver.so`
- **Type**: struct member offset (not a pointer necessarily — may be an embedded value sub-object).

### CSkeletonInstance_m_animationController

- **Purpose**: Byte offset of the `CAnimationController` member within `CSkeletonInstance`, used by patches/hooks
  that manipulate animation playback state directly.
- **Binary**: `server.dll` / `libserver.so`
- **Type**: struct member offset.

## Discovery Strategy

1. `CGameSceneNode_GetSkeletonInstance`'s slot index (13) is already known from
   `FUNC_VTABLE_RELATIONS = [("CGameSceneNode_GetSkeletonInstance", "CGameSceneNode")]`, so the only work is an
   RTTI walk to the class's primary vtable plus a slot read — no anchor/xref search needed. The resulting stub
   (`return 0;`) is a strong behavioral confirmation independent of the address, since a null-returning base
   implementation is exactly what's expected for a scene-node accessor that only concrete skinned-node
   subclasses meaningfully override.
2. The two struct-offset siblings are data-member offsets rather than functions, so they're located via
   `/generate-signature-for-structoffset` on a concrete instruction that references `this + OFF` with the
   expected member semantics — this keeps the recipe consistent with how CounterStrikeSharp's gamedata consumes
   struct offsets (as a signature anchoring a fixed immediate, not as a bare number that could drift silently).

## Output YAML Format

The output YAML filenames depend on the platform and output kind:
- `server.dll` -> `CGameSceneNode_GetSkeletonInstance.windows.yaml`,
  `CBaseAnimGraph_m_skeletonInstance.windows.yaml`, `CSkeletonInstance_m_animationController.windows.yaml`
- `libserver.so` -> `CGameSceneNode_GetSkeletonInstance.linux.yaml`,
  `CBaseAnimGraph_m_skeletonInstance.linux.yaml`, `CSkeletonInstance_m_animationController.linux.yaml`

`CGameSceneNode_GetSkeletonInstance.{platform}.yaml` fields: `func_name`, `func_va`, `func_rva`, `func_size`,
`vtable_name`, `vfunc_offset`, `vfunc_index`.

`CBaseAnimGraph_m_skeletonInstance.{platform}.yaml` / `CSkeletonInstance_m_animationController.{platform}.yaml`
fields: `struct_name`, `member_name`, `member_offset`, `sig`, `sig_va`, `inst_offset`, `inst_length`, `inst_disp`.

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

Responsive Design

Implement modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first breakpoint strategies. Use when building adaptive interfaces, implementing fluid layouts, or creating component-level responsive behavior.

400052 votes

Mermaid Diagrams

Creating and refining Mermaid diagrams with live reload. Use when users want flowcharts, sequence diagrams, class diagrams, ER diagrams, state diagrams, or any other Mermaid visualization. Provides best practices for syntax, styling, and the iterative workflow using mermaid_preview and mermaid_save tools.

2102 votes

sleek-design-mobile-apps

Use when the user wants to design a mobile app, create screens, build UI, or interact with their Sleek projects. Covers high-level requests ("design an app that does X") and specific ones ("list my projects", "create a new project", "screenshot that screen").

5711 votes

swiftui-design-skill

SwiftUI frontend visual design skill. Creates beautiful, distinctive iOS/macOS interfaces that avoid generic AI slop patterns. Covers design direction, layout systems, typography, color, spacing, brand integration, and design review. Use when designing new SwiftUI views, reviewing UI quality, creating iOS prototypes, choosing visual styles, improving app aesthetics, or when the UI looks generic or AI-generated.

1801 votes

Ios Hig

Use when designing iOS interfaces, implementing accessibility (VoiceOver, Dynamic Type), handling dark mode, ensuring adequate touch targets, providing animation/haptic feedback, or requesting user permissions. Apple Human Interface Guidelines for iOS compliance.

761 votes
View all in design →