Files

51 lines
2.7 KiB
C++

#pragma once
#include "Engine/Game/Build/fingerprint.h"
namespace dingosdk::game::build::v20260929::offboard_flight {
// Supported executable. Offboard owns these embedded substates
// (constructor RVA 480fd40), selected through +48 and updated through vtable+18.
// Ground/Slide add context+910 to velocity XYZ at +10; Falling adds gravity*dt
// to the same velocity. The motion target override alone cannot stop that sum.
// Constructor caller: RDX=core+3c0 (context), R8=core+430 (board wrapper),
// R9=core+438 (rig wrapper). Constructor stores R8 at parent+10, R9 at +18.
inline constexpr std::array<Fingerprint, 2> offboard_owner_contracts{{
{0x47bf916, {
0x4c,0x8b,0x8b,0x38,0x04,0x00,0x00,0x48,0x8d,0x4c,0x24,0x50,0x4c,0x8b,0x83,0x30,
0x04,0x00,0x00,0x48,0x8b,0x93,0xc0,0x03,0x00,0x00,0x48,0x89,0x4c,0x24,0x20,0x48}},
{0x48108e9, {
0x4c,0x89,0x41,0x10,0x4c,0x89,0x49,0x18,0x48,0x8b,0x42,0x08,0x48,0x89,0x41,0x20,
0x48,0x8b,0x02,0x48,0x89,0x41,0x28,0x48,0x8b,0x42,0x10,0x48,0x89,0x41,0x30,0x48}},
}};
struct OffboardFlightState {
std::uintptr_t offset, vtable_rva, update_rva;
Fingerprint velocity_write;
};
inline constexpr std::array<OffboardFlightState, 3> offboard_flight_states{{
// FollowGround
{0x60, 0x65e8c20, 0x48318a0, {0x4832134, {
0x48,0x8b,0x43,0x08,0xc5,0xf8,0x10,0x80,0x10,0x09,0x00,0x00,0xc5,0xf8,0x58,0x4f,
0x10,0xc5,0xf8,0x11,0x4f,0x10,0x48,0x89,0xb3,0x48,0x0d,0x00,0x00,0xc7,0x83,0x50}}},
// FollowGroundSlide
{0x1c0, 0x65e8c80, 0x4832530, {0x4832a6b, {
0x43,0x08,0xc5,0xf8,0x10,0x80,0x10,0x09,0x00,0x00,0xc5,0xf8,0x58,0x4f,0x10,0xc5,
0xf8,0x11,0x4f,0x10,0x48,0x89,0xb3,0x48,0x0d,0x00,0x00,0xc7,0x83,0x50,0x0d,0x00}}},
// Falling
{0x5b0, 0x65e8da0, 0x4820860, {0x4820c6c, {
0xc5,0xf0,0x59,0xd0,0xc5,0xfa,0x10,0x0e,0xc4,0xe3,0x71,0x21,0x4f,0x14,0x10,0xc4,
0xe3,0x71,0x21,0x4f,0x18,0x20,0xc5,0xe8,0x58,0xc1,0xc5,0xf8,0x11,0x06,0x4c,0x8b}}},
}};
inline constexpr std::uintptr_t offboard_flight_vtable = 0x65e8f40;
// FollowRagdoll / FollowAnimatedRagdoll / FollowSimulatedRagdoll also keep
// world velocity at +10. Their shared update derives it from displacement
// (RVA 48380DE), including Y at +14. Boosts must update this cached velocity
// as well as the skeleton bodies when diving or gliding.
inline constexpr std::array<std::array<std::uintptr_t, 3>, 3> offboard_ragdoll_states{{
{0x720, 0x65e8df8, 0x4832c80},
{0x8e0, 0x65e8e60, 0x4830a70},
{0xaa0, 0x65e8ed0, 0x48332f0},
}};
inline constexpr Fingerprint ragdoll_velocity_write{0x48380de, {
0xc4,0xe2,0x79,0x18,0x80,0xec,0x17,0x00,0x00,0xc5,0xe8,0x5e,0xc8,0xc5,0xf8,0x11,
0x4f,0x10,0xc5,0xf8,0x10,0x43,0x30,0xc5,0xf8,0x11,0x87,0x60,0x01,0x00,0x00,0x4c}};
}