- Status
- Offline
- Joined
- Mar 3, 2026
- Messages
- 142
- Reaction score
- 7
Found this base for BloodStrike while digging through the files. Shared it so those working on custom externals can stop wasting time on basic sig scanning.
Important Note: Do NOT attempt to hook or even open the game process with IDA active. The engine has active debugger detection and will flag you immediately.
Technical Details:
Has anyone had success with internal injections on this yet, or is everyone sticking to external RPM? I’m curious if anyone has managed to bypass the integrity checks on the
vftable without getting a near-instant shadowban. Drop your findings or any updated offsets you’ve found in your own dumps.
Important Note: Do NOT attempt to hook or even open the game process with IDA active. The engine has active debugger detection and will flag you immediately.
Technical Details:
- Engine: Messiah.
- Matrix Logic: Uses 3x4 row-major matrices for transformations. Keep this in mind when mapping your view matrix to your W2S (WorldToScreen) implementation.
- Render Chain: The chain is located at
(0x65F7AD0). Follow the offsetsCode:
render_system_rootto reach the view data.Code:+0x58 -> +0x58 -> +0x238 - W2S: I included the
offset. It should save you a massive headache compared to manual projection.Code:
GetScreenPointFromWorldPoint
Code:
namespace bloodstrike
{
// ============================================
// Image Base
// ============================================
constexpr uintptr_t image_base = 0x140000000;
// ============================================
// Renderer
// ============================================
namespace renderer
{
constexpr uintptr_t hwnd_offset = 0x6DE9430;
inline uintptr_t base() { return (uintptr_t)GetModuleHandleA("BloodStrike.exe"); }
inline uintptr_t hwnd() { return base() + hwnd_offset; }
}
// ============================================
// Functions
// ============================================
namespace funcs
{
constexpr uintptr_t IObject__Initializer = 0x02CF160;
constexpr uintptr_t IObject__Deconstructor = 0x02CF890;
constexpr uintptr_t GetScreenPointFromWorldPoint = 0x0940F60; // W2S
constexpr uintptr_t GetRayDirectionFromScreenPoint = 0x093FF90;
constexpr uintptr_t GetOrigin = 0x0940E90;
constexpr uintptr_t GetBoneTransform = 0x0D2BEC0;
constexpr uintptr_t GetRawInputData = 0x3BE8FF8;
}
// ============================================
// VFTables
// ============================================
namespace vftables
{
constexpr uintptr_t IEntity = 0x3D80048;
constexpr uintptr_t ICamera = 0x3F9B1D0;
constexpr uintptr_t AnimationCore_Pose = 0x3FA2F18;
constexpr uintptr_t SkeletonComponent = 0x4103698;
constexpr uintptr_t Actor = 0x5001C20;
constexpr uintptr_t ActorComponent = 0x4138AB0;
constexpr uintptr_t IArea = 0x3FBAA68;
constexpr uintptr_t TachComponent = 0x4101FC8;
constexpr uintptr_t FontType = 0x3C189F0;
}
// ============================================
// ICamera Offsets (856 bytes / 0x358)
// ============================================
namespace camera_offsets
{
constexpr uintptr_t vftable = 0x000;
constexpr uintptr_t flags = 0x030;
constexpr uintptr_t view_matrix = 0x058; // float[12] (3x4 row-major)
constexpr uintptr_t pos_x_local = 0x07C; // float
constexpr uintptr_t pos_y_local = 0x080; // float
constexpr uintptr_t pos_z_local = 0x084; // float
constexpr uintptr_t transform_matrix = 0x0B8; // float[12] (3x4)
constexpr uintptr_t world_offset_x = 0x180; // int32
constexpr uintptr_t world_offset_y = 0x184; // int32
constexpr uintptr_t world_offset_z = 0x188; // int32
constexpr uintptr_t screen_width = 0x2F0; // uint16
constexpr uintptr_t screen_height = 0x2F2; // uint16
constexpr uintptr_t viewproj_matrix = 0x304; // float[9] (3x3)
constexpr uintptr_t proj_scale = 0x338; // float
}
// ============================================
// Render View System Chain
// ============================================
namespace render_chain
{
// qword_1465F7AD0 -> +0x58 -> +0x58 -> +0x238 -> view data
constexpr uintptr_t render_system_root = 0x65F7AD0; // from base
}
// ============================================
// Math Structures
// ============================================
struct Vec2 { float x, y; };
struct Vec3 { float x, y, z; };
struct Vec4 { float x, y, z, w; };
// 3x4 row-major matrix (used by Messiah engine)
struct Matrix3x4
{
float m[3][4];
Vec3 origin() const { return { m[0][3], m[1][3], m[2][3] }; }
Vec3 forward() const { return { m[0][0], m[1][0], m[2][0] }; }
Vec3 right() const { return { m[0][1], m[1][1], m[2][1] }; }
Vec3 up() const { return { m[0][2], m[1][2], m[2][2] }; }
};
// 4x4 matrix for W2S calculations
struct Matrix4x4
{
float m[4][4];
};
}
Has anyone had success with internal injections on this yet, or is everyone sticking to external RPM? I’m curious if anyone has managed to bypass the integrity checks on the
Code:
IEntity