#include "Contents/EffectTypes.h" #include "Contents/RagEffectInitialization.h" #include "Contents/RagEffectState.h" #include "Resource/EZeffectResource.h" #include "Resource/ResourceMgr.h" #include #include // OFFSET: 0x00C1C2D0 // FUNCTION: fn_20074 void InitializeRagEffect( RagEffectState& effect, RenderObjectState& render, EffectActor* parent, const RenderObjectState& parentState, int id, float x, float y, float z, ServiceOptions& options, ResourceMgr& resources ) { effect.id = id; effect.parent = parent; render.position[0] = parentState.position[0]; render.position[1] = parentState.position[1]; render.position[2] = parentState.position[2]; effect.unknown_013C[4] = std::bit_cast(parentState.angle); effect.lifetime = EffectLifetime(effect.id); effect.offset[0] = x; effect.offset[1] = y; effect.offset[2] = z; char name[64]; SelectRagEffectResource(effect, options, name); if (std::strlen(name) != 0) { auto* resource = static_cast(resources.Load(name)); effect.resource = resource; if (resource) { ++resource->references; // Original +0x7F0 points at its resource header (+0x110). effect.resourceData = &resource->maximumFrame; int count = resource->clipCount; if (resource->clips[0].frameCount == 0) { --count; } const auto bits = static_cast(count); std::memcpy(effect.unknown_119F8, &bits, sizeof(bits)); } } }