Files
ReSkate/Engine/Game/Build/20260929/effects.h
T
gbgyo 550887162f Effects: release stale resources and require resident assets
Resolve private effects only from the level-wide Game compartment and validate
their resident declarations with the same parser used by the mod merge.

Release surviving native services during world changes, check decal realm
ownership before cleanup, defer ordinary off-thread releases, and prune expired
VM handles so they return their quota. Size the temporary decal allowance from
the live count while preserving external settings changes.

Gate contact geometry behind events.physics.geometry, document the manifest
migration, and test Blood impacts through the plugin host using its own manifest.
Add regression coverage for residency, lifetime, quota and draw-budget handling.

Validation: Release builds of the runtime and plugin/effect test targets succeed.
The plugins, effect_geometry and effect_lifetime tests pass. Existing MSBuild
asset-directory dependency warnings remain; native visuals need an in-game check.
2026-10-26 22:19:43 +03:00

40 lines
3.4 KiB
C++

#pragma once
#include "Engine/Game/Build/fingerprint.h"
namespace dingosdk::game::build::v20260929::effects {
// Supported Skate.exe SHA-256 fbce74d5e28ef525dbba2cb4adbebc13405bdbd88f31bc940bca45e4ae88b8f9.
// EffectEntity::onStart (29d0b40) and the skater VFX factory (486e720)
// construct the same 0x100-byte descriptor and own an 8-byte effect reference.
inline constexpr std::uintptr_t service=0x74deb20;
// Asset+8 is its TypeInfo; *TypeInfo is the record whose first word is the
// generated type identity, not native_name_hash(class name). Confirmed on the
// loaded private assets and in records 0x80c7870 / 0x8090360 of the pinned image.
inline constexpr std::uintptr_t client_world = 0x8, asset_type = 0x8;
// 41b9c20 names compartment 5 "Game"; 6..3006 are streamed sublevels.
// 2990dd0 copies the blueprint's u16 compartment at +0x16 into the effect
// descriptor. Looking up a name in Game can also return an asset inherited
// from a parent registry, so check the returned asset's own compartment too.
inline constexpr std::uintptr_t asset_compartment = 0x16;
inline constexpr std::uint16_t resident_compartment = 5;
// Loaded by Level::startLoadLevelResources (4649bf0) for the whole level.
// A resident declaration preserves merge additions; it does not load or pin a
// streamed bundle. Plugin effects must be compiled into this shared root.
// EffectManager's level-unload listener (29cb290) cancels queued creations for
// the departing compartment (29c88c0), drains stop/release commands (29c89e0)
// and tears down its active effects. Ordinary stop/release only enqueue work.
inline constexpr char resident_bundle[] = "win32/levels/game/dingolevel_root/dingolevel_root";
inline constexpr std::uint32_t particle_type_hash = 0xf258c6f9; // EffectBlueprint
inline constexpr std::uint32_t decal_type_hash = 0x5de4ae3c; // EnvironmentDecalVolumeTemplateData
inline constexpr std::uint16_t domain_count = 0xbbf;
inline constexpr Fingerprint descriptor_init{0x2990dd0,{0xc4,0xc1,0x7c,0x10,0x00,0xc5,0xfc,0x11,0x01,0xc4,0xc1,0x7c,0x10,0x48,0x20,0x45,0x33,0xc0,0x44,0x88,0x41,0x48,0xc5,0xfc,0x11,0x49,0x20,0x44,0x89,0x41,0x40,0x44}};
inline constexpr Fingerprint descriptor_destroy{0x2991490,{0x40,0x53,0x48,0x83,0xec,0x20,0x48,0x8b,0xd9,0x48,0x81,0xc1,0xe0,0x00,0x00,0x00,0x48,0x8b,0x41,0x10,0x48,0x85,0xc0,0x74,0x07,0x45,0x33,0xc0,0x33,0xd2,0xff,0xd0}};
inline constexpr Fingerprint create{0x2996b70,{0x40,0x53,0x48,0x83,0xec,0x20,0x48,0x8b,0x0d,0xa3,0x7f,0xb4,0x04,0x48,0x8b,0xda,0x49,0x8b,0xd0,0x48,0x8b,0x01,0xff,0x50,0x10,0x48,0x89,0x03,0x48,0x8b,0xc3,0x48}};
// EffectEntity's 29cef80/29cd4e0 callers pass a 64-byte world matrix.
inline constexpr Fingerprint move{0x299a180,{0x4c,0x8b,0xc2,0x48,0x8b,0x11,0x48,0x85,0xd2,0x74,0x0e,0x48,0x8b,0x0d,0x8e,0x49,0xb4,0x04,0x48,0x8b,0x01,0x48,0xff,0x60,0x30,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc}};
inline constexpr Fingerprint stop{0x299b5e0,{0x44,0x0f,0xb6,0xc2,0x48,0x8b,0x11,0x48,0x85,0xd2,0x74,0x12,0x48,0x8b,0x0d,0x2d,0x35,0xb4,0x04,0xc5,0xf8,0x28,0xda,0x48,0x8b,0x01,0x48,0xff,0x60,0x28,0xc3,0xcc}};
inline constexpr Fingerprint release{0x29915a0,{0x40,0x53,0x48,0x83,0xec,0x20,0x48,0x8b,0x11,0x48,0x8b,0xd9,0x48,0x85,0xd2,0x74,0x14,0x48,0x8b,0x0d,0x68,0xd5,0xb4,0x04,0x48,0x8b,0x01,0xff,0x50,0x20,0x48,0xc7}};
inline constexpr std::size_t descriptor_size = 0x100, descriptor_flags = 0xc0;
inline constexpr std::uint32_t descriptor_flags_value = 0x20;
inline constexpr std::array<std::uintptr_t, 4> service_methods{0x10, 0x20, 0x28, 0x30};
}