本文へ移動
cccskills
無料GitHub で公開

find-CBaseEntity_TakeDamageOld

Find and identify the CBaseEntity::TakeDamageOld function in the CS2 server binary using IDA Pro MCP. Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the legacy damage-application entry point by finding the code that references its self-identifying assert/warning message "CBaseEntity::TakeDamageOld: damagetype %d with info.GetDamageForce() == Vector::vZero". Trigger: CBaseEntity_TakeDamageOld

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Find CBaseEntity_TakeDamageOld

Locate CBaseEntity::TakeDamageOld in CS2 server.dll / libserver.so using IDA Pro MCP tools.

Method

1. Find the Self-Identifying Warning String

mcp__ida-pro-mcp__find_regex pattern="TakeDamageOld: damagetype"

There are two closely related warning strings (one for GetDamagePosition() == VectorWS::vZero, one for GetDamageForce() == Vector::vZero); either works as an anchor since both are printed from inside the same function. Use "CBaseEntity::TakeDamageOld: damagetype %d with info.GetDamageForce() == Vector::vZero".

Linux 14168 reference: the string is at 0x982d40 (the GetDamagePosition variant is at 0x97a258).

2. Get the Referencing Function

mcp__ida-pro-mcp__xrefs_to addr="0x982d40"

The string has exactly one xref; its containing function is CBaseEntity::TakeDamageOld.

Linux 14168 reference: 0x982d40 is referenced from 0xd4c387, inside the function starting at 0xd4c280 (size 0xd15).

3. Sanity-Check the Candidate

mcp__ida-pro-mcp__decompile addr="0xd4c280"

Confirm the decompilation is consistent with TakeDamageOld's known role: takes this plus a CTakeDamageInfo-like structure/handle and additional damage-position/force parameters, validates the damage-force/position vectors are non-zero (emitting the anchor warning otherwise), and applies health reduction, armor absorption, and damage-event bookkeeping. The candidate's prologue also has a distinctive pxor xmm0, xmm0 (66 0F EF C0) immediately after the push rbp, used to zero-initialize a local vector/float before the standard mov rbp, rsp — a useful secondary fingerprint alongside the string anchor.

4. Generate Function Signature

ALWAYS Use SKILL /generate-signature-for-function with addr=0xd4c280 to generate a robust and unique func_sig.

Linux 14168 reference: generated signature is 55 66 0F EF C0 48 89 E5 41 57 41 56 41 55 49 89 FD 31 FF — already unique across the binary at this length.

5. Write IDA Analysis Output as YAML

ALWAYS Use SKILL /write-func-as-yaml to write the analysis results.

Required parameters:

  • func_name: CBaseEntity_TakeDamageOld
  • func_addr: 0xd4c280
  • func_sig: The validated signature from step 4

Function Characteristics

  • Purpose: Legacy/compat damage-application entry point on CBaseEntity. Validates the incoming damage info's force/position vectors (warning if either is exactly zero for a damage type that expects a nonzero value), then applies health/armor reduction and damage-event bookkeeping.
  • Binary: server.dll / libserver.so
  • Parameters: (this, damage info handle/pointer, double, float, ...) (observed decompiled shape: (_QWORD *a1, __int64 a2, void **a3, double a4, float a5)).
  • Return value: __int64 (result/status, exact meaning not confirmed beyond "not a simple bool").

Discovery Strategy

  1. TakeDamageOld prints a self-identifying warning message (embedding its own qualified name, "CBaseEntity::TakeDamageOld: ...") when it detects an invalid zero damage-force/position vector — this kind of self-naming assert string is an extremely reliable, low-ambiguity anchor since the function name is baked directly into the string.
  2. The string has a single xref, so its containing function is unambiguous.
  3. The candidate's parameter shape and the distinctive early pxor xmm0, xmm0 in its prologue corroborate the identification.

This is robust because the anchor string literally contains the fully-qualified function name, making misidentification essentially impossible as long as the string survives (which self-documenting assert/warning strings reliably do across recompiles).

Output YAML Format

The output YAML filename depends on the platform:

  • server.dll -> CBaseEntity_TakeDamageOld.windows.yaml
  • libserver.so -> CBaseEntity_TakeDamageOld.linux.yaml

Fields: func_name, func_va, func_rva, func_size, func_sig.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Clean up the local workspace after a dev branch has been merged into main. Verifies the current dev branch is fully merged into origin/main, then switches to main, pulls the latest, deletes the local dev branch, and deletes the remote dev branch if it still exists. STOPS and warns the user if the current branch is not yet merged. Triggers: cleanup workspace, cleanup branch, delete merged branch, finish dev branch, post-merge cleanup

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

Convert an existing find-XXXX SKILL.md into a preprocessor Python script, updating configs/<GAMEVER>.yaml and removing the old SKILL.md. Covers xref-string-based and LLM_DECOMPILE-based discovery patterns.

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

Create an Agent SKILL.md fallback for an existing find-XXXX finder that relies on a fragile discovery foundation — above all LLM_DECOMPILE (patterns C/D/E), which matches the decompiled shape of a predecessor function against a stored reference and breaks when a symbol is inlined or de-inlined in a way the reference does not cover. The generated fallback coexists with the preprocessor and runs only when it returns failure, recovering every target robustly by decompiling the predecessor and following the inline/de-inline boundary with semantic anchors. Use when a finder broke on a game update, or you want to durably backstop one before it does. The recipe generalizes to any finder foundation. Triggers: create agent skill fallback, add SKILL.md fallback, robust fallback for finder, backstop LLM_DECOMPILE finder, final guarantee skill

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

Create a new cpp_tests entry for validating a C++ interface vtable layout against binary reference YAMLs. Creates the .cpp test file in cpp_tests/ and appends a configs/<GAMEVER>.yaml entry under cpp_tests:. Use when a user asks to add vtable layout validation for a new hl2sdk_cs2 interface class.

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

create-pr

無料

Create a GitHub pull request from staged task changes or an already-committed current branch. Deliver source/config/ reference changes together with their computed source-owned `bin_artifacts` closure. PR validation routing is owned by the default-branch trusted workflow; snapshots, gamedata, and manifests are Release-derived only.

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

Create a new find-XXXX preprocessor Python script from scratch (no existing SKILL.md), add configs/<GAMEVER>.yaml skill and symbol entries. Covers xref-string-based and LLM_DECOMPILE-based discovery patterns. Use when a GitHub issue or user instruction specifies a new function to find.

日本語の概要は準備中です。原文の説明を表示しています。

mrc4tt/CS2_VibeSignatures32026年10月13日 更新

mrc4tt のスキルをすべて見る

このスキルの問題を報告する