rodecomp/Source/Contents/Effects/PartyEffect.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

60 lines
2 KiB
C++

#include "Contents/Effects/EffectActor.h"
#include "Contents/Effects/EffectParticle.h"
#include "Contents/Effects/PartyEffect.h"
#include "Contents/Effects/RagEffectState.h"
#include "Contents/Ground/TerrainHeight.h"
#include "Render/Textures/TextureCache.h"
#include <limits>
#include <new>
// OFFSET: 0x00C2CF20
// FUNCTION: fn_20088
bool UpdatePartyEffect(
RagEffectState& effect, RenderObjectState& render, ResourceMgr& resources, JobNames& names, std::list<CRenderObject*>& worldObjects, TextureCache& textures,
const TerrainHeight& ground, int updateTick
) {
if (!effect.parent) {
return false;
}
if (updateTick == 0) {
return true;
}
if (updateTick > 0 && (effect.parent->render.unknown_00EC & 0xFFu) == 1) {
effect.parent->render.flags = 0;
effect.parent->render.unknown_00EC &= 0xFFFFFF00u;
}
const RenderObjectState& actor = effect.parent->render;
render.position[0] = actor.position[0];
render.position[1] = actor.position[1];
render.position[2] = actor.position[2];
if (effect.unknown_0178 == 9998) {
effect.unknown_0178 = 0;
}
if (effect.unknown_0178 == 0) {
EffectParticle* particle = CreateEffectParticle(effect, render, 15, 0, 0, 0, resources, names, worldObjects);
effect.unknown_11C84 = &particle->state;
EffectPrimitiveState& state = *effect.unknown_11C84;
state.lifetime = 9999;
state.unknown_030C = 0;
state.unknown_0314 = 90.0f;
state.unknown_0354 = 4.0f;
state.unknown_0360 = 4.0f;
state.red = 50;
state.blue = 253;
state.green = 50;
const auto bytes = state.textureCount >> 30 != 0 ? std::numeric_limits<std::size_t>::max() : static_cast<std::size_t>(4u * state.textureCount);
state.textures = static_cast<CTexture**>(::operator new(bytes));
state.textures[0] = textures.Load("effect\\party.tga", 0, false, true, false);
}
render.position[1] = ground.Height(render.position[0], render.position[2]) - 2.0f;
++effect.unknown_0178;
return effect.unknown_0178 < effect.lifetime;
}