rodecomp/Source/Contents/Effects/RagEffectInitialization.cpp
ragnarok-clanker a47d20f8be Reconstruct readable C++ and organize cohesive source subsystems
Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.

Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
2026-10-25 07:42:41 +00:00

47 lines
1.4 KiB
C++

#include "Contents/Effects/EffectTypes.h"
#include "Contents/Effects/RagEffectInitialization.h"
#include "Contents/Effects/RagEffectState.h"
#include "Resource/EZeffectResource.h"
#include "Resource/ResourceMgr.h"
#include <bit>
#include <cstring>
// 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<std::uint32_t>(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<CEZeffectRes*>(resources.Load(name));
effect.resource = resource;
if (resource) {
++resource->references;
effect.resourceData = &resource->maximumFrame;
int count = resource->clipCount;
if (resource->clips[0].frameCount == 0) {
--count;
}
const auto bits = static_cast<std::uint32_t>(count);
std::memcpy(effect.unknown_119F8, &bits, sizeof(bits));
}
}
}