EffectPrimitiveState: name 84 CEffectPrim members after DHXJ (layout matches DHXJ member order with 12-byte std::vector and one extra 2026 dword at 0x1D8): stateCnt, duration, pattern, count, renderFlag, numSegment, speed/accel, gravSpeed/gravAccel, longitude/latitude/roll, size, alpha*, lati*/long*/roll* speeds and accels, radius*, width*/height*, orgPos, deltaPos/deltaPos2/deltaPos3, segPos, rotAxis, transform/rotTransform, etc. Pure rename, codegen unchanged (221/221 functions with includers).

This commit is contained in:
ragnarok-clanker 2026-10-29 15:58:02 +01:00
commit bdd9736af4
8 changed files with 1053 additions and 1053 deletions

View file

@ -5,8 +5,8 @@
// OFFSET: 0x00BC5E00
// FUNCTION: fn_19849
void EffectPrimitiveState::ProcessAlpha() {
const int current = this->unknown_01E0;
const bool valuesAndLimit = this->unknown_0158 != 0;
const int current = this->stateCnt;
const bool valuesAndLimit = this->chRadiSpeed != 0;
if (valuesAndLimit || this->unknown_014C.y != 0) {
auto index = this->unknown_01D8;
@ -25,7 +25,7 @@ void EffectPrimitiveState::ProcessAlpha() {
if (valuesAndLimit) {
this->alpha = value;
this->unknown_02D4 = this->unknown_0258[2][index];
this->maxAlpha = this->unknown_0258[2][index];
} else {
this->alphaSpeed = value;
}
@ -34,39 +34,39 @@ void EffectPrimitiveState::ProcessAlpha() {
}
}
const float lower = this->unknown_02D8;
const float lower = this->minAlpha;
if ((this->flags & 0x80u) != 0) {
const bool below = this->alphaSpeed >= 0.0f ? this->alpha < this->unknown_02D4 : lower < this->alpha;
if ((this->pattern & 0x80u) != 0) {
const bool below = this->alphaSpeed >= 0.0f ? this->alpha < this->maxAlpha : lower < this->alpha;
if (!below) {
this->alphaSpeed *= -1.0f;
}
}
if (this->unknown_015C == 0) {
if (this->isDisappear == 0) {
const int parentRemaining = this->master->state.lifetime - this->master->state.unknown_0178;
const int remaining = this->lifetime - current;
const int remaining = this->duration - current;
if (remaining > parentRemaining + 1) {
this->unknown_015C = 1;
this->flags &= ~0x80u;
this->isDisappear = 1;
this->pattern &= ~0x80u;
this->alphaSpeed = -(this->alpha / static_cast<float>(parentRemaining));
}
}
if (current == this->unknown_01F0) {
this->flags &= ~0x80u;
const int remaining = this->lifetime - current;
if (current == this->fadeOutCnt) {
this->pattern &= ~0x80u;
const int remaining = this->duration - current;
this->alphaSpeed = -(this->alpha / static_cast<float>(remaining)) * this->alphaDelta;
}
const float sum = this->alphaSpeed + this->alpha;
const float minimum = lower > sum ? lower : sum;
const float bounded = this->unknown_02D4 < minimum ? this->unknown_02D4 : minimum;
const float bounded = this->maxAlpha < minimum ? this->maxAlpha : minimum;
this->alpha = bounded;
const auto alpha = static_cast<std::uint32_t>(TruncateToInt(bounded));
const auto color =
((alpha * 256u + static_cast<unsigned char>(this->red)) * 256u + static_cast<unsigned char>(this->green)) * 256u + static_cast<unsigned char>(this->blue);
this->unknown_01C0 = color;
this->argb = color;
}

File diff suppressed because it is too large Load diff

View file

@ -8,14 +8,14 @@
// OFFSET: 0x00BAE670
// FUNCTION: fn_19768
void CEffectPrim::InitSegment() {
for (int index = 0; index < this->state.unknown_01F4; ++index) {
for (int index = 0; index < this->state.numSegment; ++index) {
EffectPrimitiveRecord& record = this->state.records[index];
record.position = this->render.position;
std::memcpy(record.corners, this->state.corners, sizeof(record.corners));
record.unknown_003C = this->state.unknown_0348;
record.scale = this->state.scale;
record.angle = this->state.unknown_030C;
std::memcpy(record.matrix, this->state.matrix1, sizeof(record.matrix));
std::memcpy(record.corners, this->state.segPos, sizeof(record.corners));
record.unknown_003C = this->state.radius;
record.scale = this->state.size;
record.angle = this->state.longitude;
std::memcpy(record.matrix, this->state.transform, sizeof(record.matrix));
record.alpha = this->state.alpha;
record.red = this->state.red;
record.green = this->state.green;

View file

@ -21,21 +21,21 @@
// OFFSET: 0x00BCD960
// FUNCTION: fn_19865
void DrawEffectPrimitive15(EffectPrimitiveState& particle, const RenderObjectState& render, EffectPrimitiveRenderContext& context) {
const float width = particle.unknown_0354;
const float width = particle.widthSize;
const float left = -width;
float top = -particle.unknown_0360;
float bottom = particle.unknown_0360;
float top = -particle.heightSize;
float bottom = particle.heightSize;
if ((particle.flags & 0x80u) != 0) {
if ((particle.pattern & 0x80u) != 0) {
top = top + top;
bottom = 0.0f;
}
if ((particle.flags & 8u) != 0) {
if ((particle.pattern & 8u) != 0) {
bottom = 0.0f;
}
const float* matrix = particle.matrix2;
const float* matrix = particle.rotTransform;
const float zeroX = matrix[0] * 0.0f;
const float zeroY = matrix[1] * 0.0f;
const float zeroZ = matrix[2] * 0.0f;
@ -61,8 +61,8 @@ void DrawEffectPrimitive15(EffectPrimitiveState& particle, const RenderObjectSta
constexpr unsigned indices[2][3] = {{0, 1, 2}, {3, 2, 1}};
constexpr float u[2][3] = {{0, 1, 0}, {1, 0, 1}};
const float vTop = particle.unknown_02E4;
const float vBottom = particle.unknown_02E8;
const float vTop = particle.v1;
const float vBottom = particle.v2;
const float v[2][3] = {{vTop, vTop, vBottom}, {vBottom, vBottom, vTop}};
for (unsigned triangleIndex = 0; triangleIndex < 2; ++triangleIndex) {
@ -75,7 +75,7 @@ void DrawEffectPrimitive15(EffectPrimitiveState& particle, const RenderObjectSta
context.projection.Project(position, context.cameraMatrix, projected);
RenderVertex& vertex = triangle.vertices[vertexIndex];
vertex = projected;
vertex.diffuse = particle.unknown_01C0;
vertex.diffuse = particle.argb;
vertex.u = u[triangleIndex][vertexIndex];
vertex.v = v[triangleIndex][vertexIndex];
}
@ -88,7 +88,7 @@ void DrawEffectPrimitive15(EffectPrimitiveState& particle, const RenderObjectSta
if (triangle.Visible()) {
context.queues.SubmitTriangle(
triangle, static_cast<std::uint16_t>(particle.unknown_01C4), context.commands, context.depthAlpha, context.depthStart, context.depthEnd
triangle, static_cast<std::uint16_t>(particle.renderFlag), context.commands, context.depthAlpha, context.depthStart, context.depthEnd
);
}
}
@ -204,7 +204,7 @@ void CEffectPrim::RenderTeiRect(
if (triangle.Visible()) {
g_renderer->queues.SubmitTriangle(
triangle, static_cast<std::uint16_t>(this->state.unknown_01C4), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
triangle, static_cast<std::uint16_t>(this->state.renderFlag), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
);
++*rpCnt;
}
@ -227,7 +227,7 @@ void CEffectPrim::RenderTeiRect(
int blue = 255;
float textureV = 1.0f;
switch (static_cast<int>(this->state.scale)) {
switch (static_cast<int>(this->state.size)) {
case 0:
blend = 6;
break;
@ -500,7 +500,7 @@ void CEffectPrim::RenderTeiRect(
if (triangle.Visible()) {
g_renderer->queues.SubmitTriangle(
triangle, static_cast<std::uint16_t>(this->state.unknown_01C4), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
triangle, static_cast<std::uint16_t>(this->state.renderFlag), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
);
++*rpCnt;
}
@ -579,7 +579,7 @@ void CEffectPrim::RenderTeiRect(
if (triangle.Visible()) {
g_renderer->queues.SubmitTriangle(
triangle, static_cast<std::uint16_t>(this->state.unknown_01C4), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
triangle, static_cast<std::uint16_t>(this->state.renderFlag), g_renderer->commands, g_renderer->fog.supported != 0, g_depthStart, g_depthEnd
);
++*rpCnt;
}
@ -1306,7 +1306,7 @@ void CEffectPrim::RenderSMA2(matrix& wtm) {
const float sn1 = g_sinTable[angle];
const float rx = g_cosTable[slot.riseAngle] * slot.height[order];
const float ry = g_sinTable[slot.riseAngle] * slot.height[order];
const vector3d& delta = this->state.offset;
const vector3d& delta = this->state.deltaPos;
const vector3d vec2{cs1 * slot.distance + delta.x, delta.y + 0.0f, sn1 * slot.distance + delta.z};
const vector3d vec4{cs1 * rx + cs1 * slot.distance + delta.x, delta.y - ry, sn1 * rx + sn1 * slot.distance + delta.z};

View file

@ -17,111 +17,111 @@ EffectPrimitiveSlot::EffectPrimitiveSlot() {
// INLINED
EffectPrimitiveState::EffectPrimitiveState(RenderObjectState& render) {
this->textures = nullptr;
this->unknown_0208 = 0;
this->unknown_0148 = 0;
this->unknown_01CC = 0;
this->playWaveType = 0;
this->playWaveName = 0;
this->type = 0;
this->flags = 0;
this->unknown_01C4 = 1;
this->count = 0;
this->pattern = 0;
this->renderFlag = 1;
this->unknown_014C.x = 0;
this->unknown_014C.y = 0;
this->unknown_014C.z = 0;
this->unknown_0158 = 0;
this->unknown_015C = 0;
this->chRadiSpeed = 0;
this->isDisappear = 0;
this->unknown_0138 = 0;
this->master = nullptr;
this->unknown_01D4 = 0;
this->chCnt = 0;
this->unknown_01D8 = 0;
this->unknown_01E0 = 0;
this->unknown_0348 = 0;
this->unknown_028C = 0;
this->unknown_0288 = 36.0f;
this->stateCnt = 0;
this->radius = 0;
this->minRadius = 0;
this->arcAngle = 36.0f;
render.angle = 0;
this->unknown_01F8 = 180;
this->scale = 1.0f;
this->unknown_02F4 = 0;
this->unknown_02F8 = 0;
this->unknown_0354 = 0.0f;
this->unknown_0360 = 0.0f;
this->unknown_036C = 100.0f;
this->unknown_02BC = 0.0f;
this->unknown_031C = 0.0f;
this->unknown_034C = 0.0f;
this->unknown_0300 = 0;
this->unknown_02FC = 0;
this->unknown_0330 = 0;
this->unknown_0334 = 0;
this->unknown_0338 = 0;
this->unknown_0358 = 0.0f;
this->unknown_0364 = 0.0f;
this->validAngle = 180;
this->size = 1.0f;
this->innerSize = 0;
this->outerSize = 0;
this->widthSize = 0.0f;
this->heightSize = 0.0f;
this->maxHeightSize = 100.0f;
this->speed = 0.0f;
this->sizeSpeed = 0.0f;
this->radiusSpeed = 0.0f;
this->outerSpeed = 0;
this->innerSpeed = 0;
this->longSpeed = 0;
this->latiSpeed = 0;
this->rollSpeed = 0;
this->widthSpeed = 0.0f;
this->heightSpeed = 0.0f;
this->alphaSpeed = 0.0f;
this->unknown_02EC = 0;
this->unknown_02C0 = 0.0f;
this->unknown_0320 = 0;
this->unknown_0350 = 0.0f;
this->unknown_02F0 = 0;
this->unknown_033C = 0;
this->unknown_0340 = 0;
this->unknown_0344 = 0;
this->unknown_0308 = 0;
this->unknown_0304 = 0;
this->unknown_035C = 0;
this->unknown_0368 = 0;
this->gravSpeed = 0;
this->accel = 0.0f;
this->sizeAccel = 0;
this->radiusAccel = 0.0f;
this->gravAccel = 0;
this->longAccel = 0;
this->latiAccel = 0;
this->rollAccel = 0;
this->outerAccel = 0;
this->innerAccel = 0;
this->widthAccel = 0;
this->heightAccel = 0;
this->red = 255;
this->green = 255;
this->blue = 255;
this->unknown_0248 = 0;
this->unknown_024C = 0;
this->unknown_0250 = 0;
this->unknown_0200 = -1;
this->unknown_02C8 = 0.0001f;
this->unknown_02CC = 0.0001f;
this->unknown_029C = 0.0001f;
this->unknown_02A4.x = 0;
this->unknown_02A4.y = 0;
this->unknown_02A4.z = 0;
this->unknown_02B0.x = 0;
this->unknown_02B0.y = 0;
this->unknown_02B0.z = 0;
this->unknown_02C4 = 0.0001f;
this->unknown_02D0 = 0.0001f;
this->unknown_02A0 = 0.0001f;
this->unknown_01FC = 0;
this->unknown_0234 = 0;
this->unknown_0238 = 0;
this->unknown_030C = 0;
this->unknown_0310 = 0;
this->unknown_0314 = 0.0f;
this->lifetime = 100;
this->unknown_01EC = -1;
this->unknown_01F0 = -1;
this->unknown_01C0 = -1;
this->redSpeed = 0;
this->greenSpeed = 0;
this->blueSpeed = 0;
this->changePoint = -1;
this->changeWidthSpeed = 0.0001f;
this->changeHeightSpeed = 0.0001f;
this->changeSpeed = 0.0001f;
this->changeSpeed3d.x = 0;
this->changeSpeed3d.y = 0;
this->changeSpeed3d.z = 0;
this->changeAccel3d.x = 0;
this->changeAccel3d.y = 0;
this->changeAccel3d.z = 0;
this->changeWidthAccel = 0.0001f;
this->changeHeightAccel = 0.0001f;
this->changeAccel = 0.0001f;
this->RGBCycleCnt = 0;
this->RGBCycleDelay = 0;
this->commonPattern = 0;
this->longitude = 0;
this->latitude = 0;
this->roll = 0.0f;
this->duration = 100;
this->fadeInCnt = -1;
this->fadeOutCnt = -1;
this->argb = -1;
this->alpha = 254.0f;
this->alphaDelta = 1.0f;
this->unknown_02D4 = 254.0f;
this->unknown_02D8 = 0;
this->unknown_0254 = 1;
this->unknown_01F4 = 1;
this->unknown_01E8 = 4;
this->maxAlpha = 254.0f;
this->minAlpha = 0;
this->repeatAnim = 1;
this->numSegment = 1;
this->animSpeed = 4;
render.previousAnimation = 0;
render.curMotion = 0;
this->textureCount = 1;
this->unknown_02E4 = 0;
this->totalTexture = 1;
this->v1 = 0;
this->unknown_02DC = 0;
this->unknown_02E8 = 1.0f;
this->unknown_02E0 = 1.0f;
this->v2 = 1.0f;
this->u2 = 1.0f;
this->unknown_01C8[0] = 0;
this->unknown_FA10 = 0;
this->unknown_FA14 = 0;
this->unknown_0370 = {};
this->origin = {};
this->offset = {};
this->velocity = {};
this->unknown_03A0 = {};
this->unknown_03AC = {};
this->speed3d = {};
this->orgPos = {};
this->deltaPos = {};
this->deltaPos2 = {};
this->deltaPos3 = {};
this->deltaPosAccel = {};
for (vector3d& corner : this->corners) {
for (vector3d& corner : this->segPos) {
corner = {};
}
@ -139,8 +139,8 @@ EffectPrimitiveState::EffectPrimitiveState(RenderObjectState& render) {
}
}
std::memcpy(this->matrix1, g_identityMatrix, sizeof(g_identityMatrix));
std::memcpy(this->matrix2, g_identityMatrix, sizeof(g_identityMatrix));
std::memcpy(this->transform, g_identityMatrix, sizeof(g_identityMatrix));
std::memcpy(this->rotTransform, g_identityMatrix, sizeof(g_identityMatrix));
std::memset(this->slots, 0, sizeof(this->slots));
}
@ -200,15 +200,15 @@ void __stdcall Get_Angle(float x, float y, std::int16_t* angle) {
void EffectPrimitiveState::Initialize(
RenderObjectState& render, CRagEffect& master, const RenderObjectState& masterRender, int type, float x, float y, float z
) {
const float first = x + this->offset.x;
const float first = x + this->deltaPos.x;
this->master = &master;
this->type = type;
this->offset.x = first;
this->offset.y = y + this->offset.y;
this->offset.z = z + this->offset.z;
this->origin = {masterRender.position.x, masterRender.position.y, masterRender.position.z};
render.position.x = this->origin.x;
render.position.y = this->origin.y;
render.position.z = this->origin.z;
this->unknown_013C = 0;
this->count = type;
this->deltaPos.x = first;
this->deltaPos.y = y + this->deltaPos.y;
this->deltaPos.z = z + this->deltaPos.z;
this->orgPos = {masterRender.position.x, masterRender.position.y, masterRender.position.z};
render.position.x = this->orgPos.x;
render.position.y = this->orgPos.y;
render.position.z = this->orgPos.z;
this->isChangeProcessed = 0;
}

View file

@ -61,105 +61,105 @@ struct EffectPrimitiveState {
void GetColorOverride(unsigned char* red, unsigned char* green, unsigned char* blue);
/* 0138 */ std::uint32_t unknown_0138;
/* 013C */ std::uint32_t unknown_013C;
/* 013C */ std::uint32_t isChangeProcessed;
/* 0140 */ CRagEffect* master;
/* 0144 */ CTexture** textures;
/* 0148 */ std::uint32_t unknown_0148;
/* 0148 */ std::uint32_t playWaveName;
/* 014C */ vector3d unknown_014C;
/* 0158 */ std::uint32_t unknown_0158;
/* 015C */ std::uint32_t unknown_015C;
/* 0160 */ float matrix1[12];
/* 0190 */ float matrix2[12];
/* 01C0 */ std::uint32_t unknown_01C0;
/* 01C4 */ std::uint32_t unknown_01C4;
/* 0158 */ std::uint32_t chRadiSpeed;
/* 015C */ std::uint32_t isDisappear;
/* 0160 */ float transform[12];
/* 0190 */ float rotTransform[12];
/* 01C0 */ std::uint32_t argb;
/* 01C4 */ std::uint32_t renderFlag;
/* 01C8 */ unsigned char unknown_01C8[4];
/* 01CC */ std::uint32_t unknown_01CC;
/* 01D0 */ int type;
/* 01D4 */ std::uint32_t unknown_01D4;
/* 01CC */ std::uint32_t type;
/* 01D0 */ int count;
/* 01D4 */ std::uint32_t chCnt;
/* 01D8 */ int unknown_01D8;
/* 01DC */ std::uint32_t flags;
/* 01E0 */ int unknown_01E0;
/* 01E4 */ int lifetime;
/* 01E8 */ int unknown_01E8;
/* 01EC */ int unknown_01EC;
/* 01F0 */ int unknown_01F0;
/* 01F4 */ int unknown_01F4;
/* 01F8 */ int unknown_01F8;
/* 01FC */ std::uint32_t unknown_01FC;
/* 0200 */ int unknown_0200;
/* 0204 */ unsigned textureCount;
/* 0208 */ std::uint32_t unknown_0208;
/* 01DC */ std::uint32_t pattern;
/* 01E0 */ int stateCnt;
/* 01E4 */ int duration;
/* 01E8 */ int animSpeed;
/* 01EC */ int fadeInCnt;
/* 01F0 */ int fadeOutCnt;
/* 01F4 */ int numSegment;
/* 01F8 */ int validAngle;
/* 01FC */ std::uint32_t RGBCycleCnt;
/* 0200 */ int changePoint;
/* 0204 */ unsigned totalTexture;
/* 0208 */ std::uint32_t playWaveType;
/* 020C */ unsigned char unknown_020C[40];
/* 0234 */ std::uint32_t unknown_0234;
/* 0238 */ std::uint32_t unknown_0238;
/* 0234 */ std::uint32_t RGBCycleDelay;
/* 0238 */ std::uint32_t commonPattern;
/* 023C */ int red;
/* 0240 */ int green;
/* 0244 */ int blue;
/* 0248 */ int unknown_0248;
/* 024C */ int unknown_024C;
/* 0250 */ int unknown_0250;
/* 0254 */ unsigned char unknown_0254;
/* 0248 */ int redSpeed;
/* 024C */ int greenSpeed;
/* 0250 */ int blueSpeed;
/* 0254 */ unsigned char repeatAnim;
/* 0255 */ unsigned char unknown_0255[3];
/* 0258 */ std::vector<float> unknown_0258[4];
/* 0288 */ float unknown_0288;
/* 028C */ std::uint32_t unknown_028C;
/* 0290 */ float unknown_0290[3];
/* 029C */ float unknown_029C;
/* 02A0 */ float unknown_02A0;
/* 02A4 */ vector3d unknown_02A4;
/* 02B0 */ vector3d unknown_02B0;
/* 02BC */ float unknown_02BC;
/* 02C0 */ float unknown_02C0;
/* 02C4 */ float unknown_02C4;
/* 02C8 */ float unknown_02C8;
/* 02CC */ float unknown_02CC;
/* 02D0 */ float unknown_02D0;
/* 02D4 */ float unknown_02D4;
/* 02D8 */ float unknown_02D8;
/* 0288 */ float arcAngle;
/* 028C */ std::uint32_t minRadius;
/* 0290 */ float rotAxis[3];
/* 029C */ float changeSpeed;
/* 02A0 */ float changeAccel;
/* 02A4 */ vector3d changeSpeed3d;
/* 02B0 */ vector3d changeAccel3d;
/* 02BC */ float speed;
/* 02C0 */ float accel;
/* 02C4 */ float changeWidthAccel;
/* 02C8 */ float changeWidthSpeed;
/* 02CC */ float changeHeightSpeed;
/* 02D0 */ float changeHeightAccel;
/* 02D4 */ float maxAlpha;
/* 02D8 */ float minAlpha;
/* 02DC */ std::uint32_t unknown_02DC;
/* 02E0 */ float unknown_02E0;
/* 02E4 */ float unknown_02E4;
/* 02E8 */ float unknown_02E8;
/* 02EC */ float unknown_02EC;
/* 02F0 */ float unknown_02F0;
/* 02F4 */ float unknown_02F4;
/* 02F8 */ float unknown_02F8;
/* 02FC */ float unknown_02FC;
/* 0300 */ float unknown_0300;
/* 0304 */ float unknown_0304;
/* 0308 */ float unknown_0308;
/* 030C */ float unknown_030C;
/* 0310 */ float unknown_0310;
/* 0314 */ float unknown_0314;
/* 0318 */ float scale;
/* 031C */ float unknown_031C;
/* 0320 */ float unknown_0320;
/* 02E0 */ float u2;
/* 02E4 */ float v1;
/* 02E8 */ float v2;
/* 02EC */ float gravSpeed;
/* 02F0 */ float gravAccel;
/* 02F4 */ float innerSize;
/* 02F8 */ float outerSize;
/* 02FC */ float innerSpeed;
/* 0300 */ float outerSpeed;
/* 0304 */ float innerAccel;
/* 0308 */ float outerAccel;
/* 030C */ float longitude;
/* 0310 */ float latitude;
/* 0314 */ float roll;
/* 0318 */ float size;
/* 031C */ float sizeSpeed;
/* 0320 */ float sizeAccel;
/* 0324 */ float alpha;
/* 0328 */ float alphaSpeed;
/* 032C */ float alphaDelta;
/* 0330 */ float unknown_0330;
/* 0334 */ float unknown_0334;
/* 0338 */ float unknown_0338;
/* 033C */ float unknown_033C;
/* 0340 */ float unknown_0340;
/* 0344 */ float unknown_0344;
/* 0348 */ float unknown_0348;
/* 034C */ float unknown_034C;
/* 0350 */ float unknown_0350;
/* 0354 */ float unknown_0354;
/* 0358 */ float unknown_0358;
/* 035C */ float unknown_035C;
/* 0360 */ float unknown_0360;
/* 0364 */ float unknown_0364;
/* 0368 */ float unknown_0368;
/* 036C */ float unknown_036C;
/* 0370 */ vector3d unknown_0370;
/* 037C */ vector3d origin;
/* 0388 */ vector3d offset;
/* 0394 */ vector3d velocity;
/* 03A0 */ vector3d unknown_03A0;
/* 03AC */ vector3d unknown_03AC;
/* 03B8 */ vector3d corners[4];
/* 0330 */ float longSpeed;
/* 0334 */ float latiSpeed;
/* 0338 */ float rollSpeed;
/* 033C */ float longAccel;
/* 0340 */ float latiAccel;
/* 0344 */ float rollAccel;
/* 0348 */ float radius;
/* 034C */ float radiusSpeed;
/* 0350 */ float radiusAccel;
/* 0354 */ float widthSize;
/* 0358 */ float widthSpeed;
/* 035C */ float widthAccel;
/* 0360 */ float heightSize;
/* 0364 */ float heightSpeed;
/* 0368 */ float heightAccel;
/* 036C */ float maxHeightSize;
/* 0370 */ vector3d speed3d;
/* 037C */ vector3d orgPos;
/* 0388 */ vector3d deltaPos;
/* 0394 */ vector3d deltaPos2;
/* 03A0 */ vector3d deltaPos3;
/* 03AC */ vector3d deltaPosAccel;
/* 03B8 */ vector3d segPos[4];
/* 03E8 */ EffectPrimitiveSlot slots[4];
/* 06B8 */ EffectPrimitiveRecord records[50];
/* 2210 */ RenderTriangle triangles[512];

View file

@ -42,15 +42,15 @@ bool UpdatePartyEffect(
CEffectPrim* particle = CreateEffectParticle(self, render, 15, 0, 0, 0, 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.duration = 9999;
state.longitude = 0;
state.roll = 90.0f;
state.widthSize = 4.0f;
state.heightSize = 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);
const auto bytes = state.totalTexture >> 30 != 0 ? std::numeric_limits<std::size_t>::max() : static_cast<std::size_t>(4u * state.totalTexture);
state.textures = static_cast<CTexture**>(::operator new(bytes));
state.textures[0] = textures.Load("effect\\party.tga", 0, false, true, false);

View file

@ -82,7 +82,7 @@ static vector3d RotatedForward(const float* matrix, float distance) {
// INLINED
static void AllocateTextures(EffectPrimitiveState& particle) {
const auto bytes = particle.textureCount >> 30 != 0 ? std::numeric_limits<std::size_t>::max() : static_cast<std::size_t>(4u * particle.textureCount);
const auto bytes = particle.totalTexture >> 30 != 0 ? std::numeric_limits<std::size_t>::max() : static_cast<std::size_t>(4u * particle.totalTexture);
particle.textures = static_cast<CTexture**>(::operator new(bytes));
}
@ -106,33 +106,33 @@ void CRagEffect::BloodDrain() {
for (int angle = -90; angle < 180; angle += 90) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 8, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 60;
this->state.unknown_11C84->velocity = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->unknown_0348 = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->duration = 60;
this->state.unknown_11C84->deltaPos2 = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->radius = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
const float speed = this->state.unknown_11C84->unknown_0348 / this->state.unknown_11C84->lifetime;
this->state.unknown_11C84->unknown_02BC = speed + speed;
this->state.unknown_11C84->unknown_02EC = 2.0f;
const float rise = -(this->state.unknown_11C84->unknown_02EC / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_02F0 = rise + rise;
this->state.unknown_11C84->unknown_0334 = -2.0f;
const float spread = -(this->state.unknown_11C84->unknown_0334 / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_0340 = spread + spread;
this->state.unknown_11C84->unknown_0314 = static_cast<float>(angle);
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
const float speed = this->state.unknown_11C84->radius / this->state.unknown_11C84->duration;
this->state.unknown_11C84->speed = speed + speed;
this->state.unknown_11C84->gravSpeed = 2.0f;
const float rise = -(this->state.unknown_11C84->gravSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->gravAccel = rise + rise;
this->state.unknown_11C84->latiSpeed = -2.0f;
const float spread = -(this->state.unknown_11C84->latiSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->latiAccel = spread + spread;
this->state.unknown_11C84->roll = static_cast<float>(angle);
EffectPrimitiveState& particle = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(particle.matrix1)->MakeYRotation(GetRadian(static_cast<int>(particle.unknown_030C)));
this->state.unknown_11C84->unknown_03A0 = RotatedForward(this->state.unknown_11C84->matrix1, 1.0f);
this->state.unknown_11C84->unknown_0290[0] = this->state.unknown_11C84->unknown_03A0.x;
this->state.unknown_11C84->unknown_0290[1] = this->state.unknown_11C84->unknown_03A0.y;
this->state.unknown_11C84->unknown_0290[2] = this->state.unknown_11C84->unknown_03A0.z;
reinterpret_cast<matrix*>(particle.transform)->MakeYRotation(GetRadian(static_cast<int>(particle.longitude)));
this->state.unknown_11C84->deltaPos3 = RotatedForward(this->state.unknown_11C84->transform, 1.0f);
this->state.unknown_11C84->rotAxis[0] = this->state.unknown_11C84->deltaPos3.x;
this->state.unknown_11C84->rotAxis[1] = this->state.unknown_11C84->deltaPos3.y;
this->state.unknown_11C84->rotAxis[2] = this->state.unknown_11C84->deltaPos3.z;
this->state.unknown_11C84->red = 100;
this->state.unknown_11C84->green = 100;
this->state.unknown_11C84->blue = 250;
this->state.unknown_11C84->scale = 1.7f;
this->state.unknown_11C84->size = 1.7f;
Owner(this->state.unknown_11C84).SetSpriteName(ResourceMgr::Instance(), "이팩트\\particle1.spr");
Owner(this->state.unknown_11C84).SetActionName(ResourceMgr::Instance(), "이팩트\\particle1.act");
this->state.unknown_11C84->unknown_01F4 = 7;
this->state.unknown_11C84->numSegment = 7;
Owner(this->state.unknown_11C84).InitSegment();
}
}
@ -148,11 +148,11 @@ void CRagEffect::FireBall() {
PlayEffectWave(*this, "effect\\EF_FireBall.wav");
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 5, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 20;
this->state.unknown_11C84->flags |= 0x120u;
this->state.unknown_11C84->velocity = {0.0f, -15.0f, 0.0f};
this->state.unknown_11C84->duration = 20;
this->state.unknown_11C84->pattern |= 0x120u;
this->state.unknown_11C84->deltaPos2 = {0.0f, -15.0f, 0.0f};
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
Owner(this->state.unknown_11C84).render.angle = 180.0f - Owner(this->state.unknown_11C84).render.angle;
if (Owner(this->state.unknown_11C84).render.angle < 0.0f) {
@ -160,10 +160,10 @@ void CRagEffect::FireBall() {
}
CEffectPrim& particle = Owner(this->state.unknown_11C84);
particle.state.unknown_02BC = -(particle.CalcDist(this->state.offset[0], this->state.offset[2]) / particle.state.lifetime);
reinterpret_cast<matrix*>(this->state.unknown_11C84->matrix1)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->unknown_030C)));
this->state.unknown_11C84->scale = 1.3f;
this->state.unknown_11C84->unknown_01E8 = 1;
particle.state.speed = -(particle.CalcDist(this->state.offset[0], this->state.offset[2]) / particle.state.duration);
reinterpret_cast<matrix*>(this->state.unknown_11C84->transform)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->longitude)));
this->state.unknown_11C84->size = 1.3f;
this->state.unknown_11C84->animSpeed = 1;
if (this->state.unknown_0178 != 20) {
this->state.unknown_11C84->red = 246;
@ -220,36 +220,36 @@ void CRagEffect::FrostDiver(TextureCache& textures, char type) {
this->render.position = saved;
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 9, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 40;
this->state.unknown_11C84->flags |= 1u;
this->state.unknown_11C84->duration = 40;
this->state.unknown_11C84->pattern |= 1u;
this->state.unknown_11C84->slots[0].flag1[0] = type == 3 ? 3 : 0;
const int angle = std::max(rand() % 360, 0);
const float distance = static_cast<float>(std::max(rand() % 10, 0) + 5) / 10.0f;
const float sine = ClientSine(angle);
const float cosine = ClientCosine(angle);
this->state.unknown_11C84->velocity.y = 30.0f;
this->state.unknown_11C84->velocity.x = sine * distance;
this->state.unknown_11C84->velocity.z = -distance * cosine;
vector3d& velocity = this->state.unknown_11C84->velocity;
this->state.unknown_11C84->deltaPos2.y = 30.0f;
this->state.unknown_11C84->deltaPos2.x = sine * distance;
this->state.unknown_11C84->deltaPos2.z = -distance * cosine;
vector3d& velocity = this->state.unknown_11C84->deltaPos2;
velocity.x = this->state.unknown_018C[3] + velocity.x;
velocity.y = this->state.unknown_018C[4] + velocity.y;
velocity.z = this->state.unknown_018C[5] + velocity.z;
this->state.unknown_11C84->scale = static_cast<float>(std::max(rand() % 40, 0) + 60) / 100.0f;
this->state.unknown_11C84->unknown_0360 = static_cast<float>(std::max(rand() % 30, 0) + 150) / 10.0f;
this->state.unknown_11C84->unknown_030C = static_cast<float>(std::max(rand() % 360, 0));
this->state.unknown_11C84->unknown_0310 = static_cast<float>(std::max(rand() % 30, 0) + 75);
this->state.unknown_11C84->size = static_cast<float>(std::max(rand() % 40, 0) + 60) / 100.0f;
this->state.unknown_11C84->heightSize = static_cast<float>(std::max(rand() % 30, 0) + 150) / 10.0f;
this->state.unknown_11C84->longitude = static_cast<float>(std::max(rand() % 360, 0));
this->state.unknown_11C84->latitude = static_cast<float>(std::max(rand() % 30, 0) + 75);
EffectPrimitiveState& tilt = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(tilt.matrix1)->MakeXRotation(GetRadian(static_cast<int>(tilt.unknown_0310)));
reinterpret_cast<matrix*>(tilt.transform)->MakeXRotation(GetRadian(static_cast<int>(tilt.latitude)));
EffectPrimitiveState& turn = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(turn.matrix1)->AppendYRotation(GetRadian(static_cast<int>(turn.unknown_030C)));
reinterpret_cast<matrix*>(turn.transform)->AppendYRotation(GetRadian(static_cast<int>(turn.longitude)));
EffectPrimitiveState& copy = *this->state.unknown_11C84;
std::memcpy(copy.matrix2, copy.matrix1, sizeof(copy.matrix2));
this->state.unknown_11C84->unknown_02BC = 3.0f;
std::memcpy(copy.rotTransform, copy.transform, sizeof(copy.rotTransform));
this->state.unknown_11C84->speed = 3.0f;
EffectPrimitiveState& slow = *this->state.unknown_11C84;
const float decay = -(slow.unknown_02BC / slow.lifetime);
slow.unknown_02C0 = decay + decay;
this->state.unknown_11C84->unknown_01D4 = 20;
this->state.unknown_11C84->unknown_01F0 = this->state.unknown_11C84->lifetime - 10;
const float decay = -(slow.speed / slow.duration);
slow.accel = decay + decay;
this->state.unknown_11C84->chCnt = 20;
this->state.unknown_11C84->fadeOutCnt = this->state.unknown_11C84->duration - 10;
AllocateTextures(*this->state.unknown_11C84);
CTexture* texture = textures.Load("effect\\ice.tga", 0, false, true, false);
this->state.unknown_11C84->textures[0] = texture;
@ -294,33 +294,33 @@ void CRagEffect::GrimTooth(TextureCache& textures) {
this->render.position = saved;
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 9, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->flags |= 1u;
this->state.unknown_11C84->lifetime = 40;
this->state.unknown_11C84->pattern |= 1u;
this->state.unknown_11C84->duration = 40;
const int angle = std::max(rand() % 360, 0);
rand();
ClientSine(angle);
ClientCosine(angle);
this->state.unknown_11C84->velocity = {0.0f, 20.0f, 0.0f};
vector3d& velocity = this->state.unknown_11C84->velocity;
this->state.unknown_11C84->deltaPos2 = {0.0f, 20.0f, 0.0f};
vector3d& velocity = this->state.unknown_11C84->deltaPos2;
velocity.x = this->state.unknown_018C[3] + velocity.x;
velocity.y = this->state.unknown_018C[4] + velocity.y;
velocity.z = this->state.unknown_018C[5] + velocity.z;
this->state.unknown_11C84->scale = static_cast<float>(std::max(rand() % 40, 0) + 60) / 100.0f;
this->state.unknown_11C84->unknown_0360 = 10.0f;
this->state.unknown_11C84->unknown_030C = static_cast<float>(std::max(rand() % 360, 0));
this->state.unknown_11C84->unknown_0310 = static_cast<float>(std::max(rand() % 30, 0) + 75);
this->state.unknown_11C84->size = static_cast<float>(std::max(rand() % 40, 0) + 60) / 100.0f;
this->state.unknown_11C84->heightSize = 10.0f;
this->state.unknown_11C84->longitude = static_cast<float>(std::max(rand() % 360, 0));
this->state.unknown_11C84->latitude = static_cast<float>(std::max(rand() % 30, 0) + 75);
EffectPrimitiveState& tilt = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(tilt.matrix1)->MakeXRotation(GetRadian(static_cast<int>(tilt.unknown_0310)));
reinterpret_cast<matrix*>(tilt.transform)->MakeXRotation(GetRadian(static_cast<int>(tilt.latitude)));
EffectPrimitiveState& turn = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(turn.matrix1)->AppendYRotation(GetRadian(static_cast<int>(turn.unknown_030C)));
reinterpret_cast<matrix*>(turn.transform)->AppendYRotation(GetRadian(static_cast<int>(turn.longitude)));
EffectPrimitiveState& copy = *this->state.unknown_11C84;
std::memcpy(copy.matrix2, copy.matrix1, sizeof(copy.matrix2));
this->state.unknown_11C84->unknown_02BC = 3.0f;
std::memcpy(copy.rotTransform, copy.transform, sizeof(copy.rotTransform));
this->state.unknown_11C84->speed = 3.0f;
EffectPrimitiveState& slow = *this->state.unknown_11C84;
const float decay = -(slow.unknown_02BC / slow.lifetime);
slow.unknown_02C0 = decay + decay;
this->state.unknown_11C84->unknown_01D4 = 6;
this->state.unknown_11C84->unknown_01F0 = this->state.unknown_11C84->lifetime - 10;
const float decay = -(slow.speed / slow.duration);
slow.accel = decay + decay;
this->state.unknown_11C84->chCnt = 6;
this->state.unknown_11C84->fadeOutCnt = this->state.unknown_11C84->duration - 10;
AllocateTextures(*this->state.unknown_11C84);
CTexture* texture = textures.Load("effect\\stone.bmp", 0, false, true, false);
this->state.unknown_018C[3] = this->state.unknown_018C[3] - this->state.unknown_018C[0];
@ -345,52 +345,52 @@ void CRagEffect::Hit4(const RenderProjection& projection, TextureCache& textures
const int facing = static_cast<int>(180.0f - this->state.parent->render.angle);
const int direction = facing < 0 ? facing + 360 : facing;
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 13, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 15;
this->state.unknown_11C84->unknown_030C = static_cast<float>(direction);
this->state.unknown_11C84->unknown_0310 = -90.0f;
this->state.unknown_11C84->duration = 15;
this->state.unknown_11C84->longitude = static_cast<float>(direction);
this->state.unknown_11C84->latitude = -90.0f;
EffectPrimitiveState& tilt = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(tilt.matrix1)->MakeXRotation(GetRadian(static_cast<int>(tilt.unknown_0310)));
reinterpret_cast<matrix*>(tilt.transform)->MakeXRotation(GetRadian(static_cast<int>(tilt.latitude)));
EffectPrimitiveState& turn = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(turn.matrix1)->AppendYRotation(GetRadian(static_cast<int>(turn.unknown_030C)));
this->state.unknown_11C84->velocity = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->unknown_02BC = 0.7f;
reinterpret_cast<matrix*>(turn.transform)->AppendYRotation(GetRadian(static_cast<int>(turn.longitude)));
this->state.unknown_11C84->deltaPos2 = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->speed = 0.7f;
EffectPrimitiveState& slow = *this->state.unknown_11C84;
slow.unknown_02C0 = -(slow.unknown_02BC / slow.lifetime) * 0.5f;
this->state.unknown_11C84->unknown_02F8 = 4.0f;
this->state.unknown_11C84->unknown_02F4 = 0.5f;
this->state.unknown_11C84->unknown_0364 = 0.25f;
this->state.unknown_11C84->unknown_0368 = 0.15f;
const int lifetime = this->state.unknown_11C84->lifetime;
this->state.unknown_11C84->unknown_01F0 = lifetime - lifetime / 3;
slow.accel = -(slow.speed / slow.duration) * 0.5f;
this->state.unknown_11C84->outerSize = 4.0f;
this->state.unknown_11C84->innerSize = 0.5f;
this->state.unknown_11C84->heightSpeed = 0.25f;
this->state.unknown_11C84->heightAccel = 0.15f;
const int lifetime = this->state.unknown_11C84->duration;
this->state.unknown_11C84->fadeOutCnt = lifetime - lifetime / 3;
AllocateTextures(*this->state.unknown_11C84);
CTexture* texture = textures.Load("effect\\lens2.tga", 0, false, true, false);
this->state.unknown_11C84->textures[0] = texture;
for (int count = 5; count != 0; --count) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 5, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->unknown_030C = static_cast<float>(direction - 40 + std::max(rand() % 80, 0));
this->state.unknown_11C84->unknown_0310 = static_cast<float>(std::max(rand() % 100, 0) - 50);
this->state.unknown_11C84->longitude = static_cast<float>(direction - 40 + std::max(rand() % 80, 0));
this->state.unknown_11C84->latitude = static_cast<float>(std::max(rand() % 100, 0) - 50);
EffectPrimitiveState& yaw = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(yaw.matrix1)->MakeYRotation(GetRadian(static_cast<int>(yaw.unknown_030C)));
reinterpret_cast<matrix*>(yaw.transform)->MakeYRotation(GetRadian(static_cast<int>(yaw.longitude)));
EffectPrimitiveState& pitch = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(pitch.matrix1)->AppendXRotation(GetRadian(static_cast<int>(pitch.unknown_0310)));
reinterpret_cast<matrix*>(pitch.transform)->AppendXRotation(GetRadian(static_cast<int>(pitch.latitude)));
EffectPrimitiveState& spark = *this->state.unknown_11C84;
spark.unknown_03A0 = RotatedForward(spark.matrix1, static_cast<float>(std::max(rand() % 4, 0) + 4));
spark.deltaPos3 = RotatedForward(spark.transform, static_cast<float>(std::max(rand() % 4, 0) + 4));
EffectPrimitiveState& moving = *this->state.unknown_11C84;
moving.velocity.x = moving.unknown_03A0.x + 0.0f;
moving.velocity.y = moving.unknown_03A0.y - 10.0f;
moving.velocity.z = moving.unknown_03A0.z + 0.0f;
this->state.unknown_11C84->unknown_02BC = static_cast<float>(std::max(rand() % 90, 0) + 60) / 100.0f;
this->state.unknown_11C84->lifetime = std::max(rand() % 24, 0) + 6;
moving.deltaPos2.x = moving.deltaPos3.x + 0.0f;
moving.deltaPos2.y = moving.deltaPos3.y - 10.0f;
moving.deltaPos2.z = moving.deltaPos3.z + 0.0f;
this->state.unknown_11C84->speed = static_cast<float>(std::max(rand() % 90, 0) + 60) / 100.0f;
this->state.unknown_11C84->duration = std::max(rand() % 24, 0) + 6;
EffectPrimitiveState& fading = *this->state.unknown_11C84;
fading.unknown_02C0 = -(fading.unknown_02BC / fading.lifetime) * 0.5f;
this->state.unknown_11C84->scale = static_cast<float>(std::max(rand() % 100, 0) + 60) / 100.0f;
fading.accel = -(fading.speed / fading.duration) * 0.5f;
this->state.unknown_11C84->size = static_cast<float>(std::max(rand() % 100, 0) + 60) / 100.0f;
EffectPrimitiveState& shrinking = *this->state.unknown_11C84;
shrinking.unknown_031C = -(shrinking.scale / shrinking.lifetime);
this->state.unknown_11C84->unknown_01F0 = 0;
shrinking.sizeSpeed = -(shrinking.size / shrinking.duration);
this->state.unknown_11C84->fadeOutCnt = 0;
Owner(this->state.unknown_11C84).SetSpriteName(ResourceMgr::Instance(), "이팩트\\particle1.spr");
Owner(this->state.unknown_11C84).SetActionName(ResourceMgr::Instance(), "이팩트\\particle1.act");
this->state.unknown_11C84->unknown_01F4 = 3;
this->state.unknown_11C84->numSegment = 3;
Owner(this->state.unknown_11C84).InitSegment();
}
}
@ -451,31 +451,31 @@ void CRagEffect::SoulStrike(char F1) {
const int index = frame / 11;
PlayEffectWave(*this, "effect\\EF_SoulStrike.wav");
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 8, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 40;
this->state.unknown_11C84->velocity = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->unknown_0348 = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->duration = 40;
this->state.unknown_11C84->deltaPos2 = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->radius = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->unknown_02BC = this->state.unknown_11C84->unknown_0348 / this->state.unknown_11C84->lifetime;
this->state.unknown_11C84->unknown_02EC = 3.5f;
const float rise = -(this->state.unknown_11C84->unknown_02EC / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_02F0 = rise + rise;
this->state.unknown_11C84->unknown_0334 = -2.0f;
const float spread = -(this->state.unknown_11C84->unknown_0334 / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_0340 = spread + spread;
this->state.unknown_11C84->unknown_0314 = static_cast<float>(base + step * index);
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->speed = this->state.unknown_11C84->radius / this->state.unknown_11C84->duration;
this->state.unknown_11C84->gravSpeed = 3.5f;
const float rise = -(this->state.unknown_11C84->gravSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->gravAccel = rise + rise;
this->state.unknown_11C84->latiSpeed = -2.0f;
const float spread = -(this->state.unknown_11C84->latiSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->latiAccel = spread + spread;
this->state.unknown_11C84->roll = static_cast<float>(base + step * index);
EffectPrimitiveState& particle = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(particle.matrix1)->MakeYRotation(GetRadian(static_cast<int>(particle.unknown_030C)));
this->state.unknown_11C84->unknown_03A0 = RotatedForward(this->state.unknown_11C84->matrix1, 1.0f);
this->state.unknown_11C84->unknown_0290[0] = this->state.unknown_11C84->unknown_03A0.x;
this->state.unknown_11C84->unknown_0290[1] = this->state.unknown_11C84->unknown_03A0.y;
this->state.unknown_11C84->unknown_0290[2] = this->state.unknown_11C84->unknown_03A0.z;
this->state.unknown_11C84->scale = 2.75f;
reinterpret_cast<matrix*>(particle.transform)->MakeYRotation(GetRadian(static_cast<int>(particle.longitude)));
this->state.unknown_11C84->deltaPos3 = RotatedForward(this->state.unknown_11C84->transform, 1.0f);
this->state.unknown_11C84->rotAxis[0] = this->state.unknown_11C84->deltaPos3.x;
this->state.unknown_11C84->rotAxis[1] = this->state.unknown_11C84->deltaPos3.y;
this->state.unknown_11C84->rotAxis[2] = this->state.unknown_11C84->deltaPos3.z;
this->state.unknown_11C84->size = 2.75f;
const char* action = F1 != 0 ? "이팩트\\particle5.act" : "이팩트\\particle1.act";
const char* sprite = F1 != 0 ? "이팩트\\particle5.spr" : "이팩트\\particle1.spr";
Owner(this->state.unknown_11C84).SetSpriteName(ResourceMgr::Instance(), sprite);
Owner(this->state.unknown_11C84).SetActionName(ResourceMgr::Instance(), action);
this->state.unknown_11C84->unknown_01F4 = 12;
this->state.unknown_11C84->numSegment = 12;
Owner(this->state.unknown_11C84).InitSegment();
}
@ -490,11 +490,11 @@ void CRagEffect::SpearBmr() {
PlayEffectWave(*this, "effect\\EF_FireBall.wav");
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 5, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 15;
this->state.unknown_11C84->flags |= 0x120u;
this->state.unknown_11C84->velocity = {0.0f, -15.0f, 0.0f};
this->state.unknown_11C84->duration = 15;
this->state.unknown_11C84->pattern |= 0x120u;
this->state.unknown_11C84->deltaPos2 = {0.0f, -15.0f, 0.0f};
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
Owner(this->state.unknown_11C84).render.angle = 180.0f - Owner(this->state.unknown_11C84).render.angle;
if (Owner(this->state.unknown_11C84).render.angle < 0.0f) {
@ -502,10 +502,10 @@ void CRagEffect::SpearBmr() {
}
CEffectPrim& particle = Owner(this->state.unknown_11C84);
particle.state.unknown_02BC = -(particle.CalcDist(this->state.offset[0], this->state.offset[2]) / particle.state.lifetime);
reinterpret_cast<matrix*>(this->state.unknown_11C84->matrix1)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->unknown_030C)));
this->state.unknown_11C84->scale = 1.0f;
this->state.unknown_11C84->unknown_01E8 = 1;
particle.state.speed = -(particle.CalcDist(this->state.offset[0], this->state.offset[2]) / particle.state.duration);
reinterpret_cast<matrix*>(this->state.unknown_11C84->transform)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->longitude)));
this->state.unknown_11C84->size = 1.0f;
this->state.unknown_11C84->animSpeed = 1;
if (this->state.unknown_0178 != 0) {
if (this->state.unknown_0178 == 4) {
@ -529,20 +529,20 @@ void CRagEffect::SprayPond(TextureCache& textures) {
if (this->state.unknown_0178 == 0) {
for (int angle = 0; angle < 360; angle += 45) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 15, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->flags = 2;
this->state.unknown_11C84->lifetime = 130;
this->state.unknown_11C84->pattern = 2;
this->state.unknown_11C84->duration = 130;
EffectPrimitiveState& yaw = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(yaw.matrix1)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle) + 22.5f)));
reinterpret_cast<matrix*>(yaw.transform)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle) + 22.5f)));
EffectPrimitiveState& moving = *this->state.unknown_11C84;
const vector3d edge = RotatedForward(moving.matrix1, 12.2f);
moving.velocity.x = edge.x + 0.0f;
moving.velocity.y = edge.y - 2.0f;
moving.velocity.z = edge.z + 0.0f;
const vector3d edge = RotatedForward(moving.transform, 12.2f);
moving.deltaPos2.x = edge.x + 0.0f;
moving.deltaPos2.y = edge.y - 2.0f;
moving.deltaPos2.z = edge.z + 0.0f;
EffectPrimitiveState& facing = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(facing.matrix2)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle + 90) + 22.5f)));
reinterpret_cast<matrix*>(facing.rotTransform)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle + 90) + 22.5f)));
this->state.unknown_11C84->alpha = 120.0f;
this->state.unknown_11C84->unknown_0354 = 5.0f;
this->state.unknown_11C84->unknown_0360 = 2.7f;
this->state.unknown_11C84->widthSize = 5.0f;
this->state.unknown_11C84->heightSize = 2.7f;
AllocateTextures(*this->state.unknown_11C84);
this->state.unknown_11C84->textures[0] = textures.Load("effect\\pond_water.bmp", 0, false, true, false);
}
@ -551,22 +551,22 @@ void CRagEffect::SprayPond(TextureCache& textures) {
if (this->state.unknown_0178 % 10 == 0) {
for (int angle = 0; angle < 360; angle += 45) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 15, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 30;
this->state.unknown_11C84->duration = 30;
EffectPrimitiveState& yaw = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(yaw.matrix1)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle) + 22.5f)));
reinterpret_cast<matrix*>(yaw.transform)->MakeYRotation(GetRadian(static_cast<int>(static_cast<float>(angle) + 22.5f)));
EffectPrimitiveState& moving = *this->state.unknown_11C84;
const vector3d edge = RotatedForward(moving.matrix1, 13.8f);
moving.velocity.x = edge.x;
moving.velocity.y = edge.y;
moving.velocity.z = edge.z;
const vector3d edge = RotatedForward(moving.transform, 13.8f);
moving.deltaPos2.x = edge.x;
moving.deltaPos2.y = edge.y;
moving.deltaPos2.z = edge.z;
EffectPrimitiveState& roll = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(roll.matrix2)->MakeZRotation(GetRadian(90));
reinterpret_cast<matrix*>(roll.rotTransform)->MakeZRotation(GetRadian(90));
EffectPrimitiveState& facing = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(facing.matrix2)->AppendYRotation(GetRadian(static_cast<int>(static_cast<float>(angle + 90) + 22.5f)));
reinterpret_cast<matrix*>(facing.rotTransform)->AppendYRotation(GetRadian(static_cast<int>(static_cast<float>(angle + 90) + 22.5f)));
this->state.unknown_11C84->alpha = 100.0f;
this->state.unknown_11C84->unknown_01F0 = 0;
this->state.unknown_11C84->unknown_0354 = 5.5f;
this->state.unknown_11C84->unknown_0360 = 1.0f;
this->state.unknown_11C84->fadeOutCnt = 0;
this->state.unknown_11C84->widthSize = 5.5f;
this->state.unknown_11C84->heightSize = 1.0f;
AllocateTextures(*this->state.unknown_11C84);
this->state.unknown_11C84->textures[0] = textures.Load("effect\\alpha_down.tga", 0, false, true, false);
}
@ -574,18 +574,18 @@ void CRagEffect::SprayPond(TextureCache& textures) {
if (this->state.unknown_0178 % 20 == 0) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 12, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 25;
this->state.unknown_11C84->unknown_0348 = 13.0f;
this->state.unknown_11C84->unknown_0288 = 10.0f;
this->state.unknown_11C84->scale = 1.25f;
this->state.unknown_11C84->unknown_0310 = 90.0f;
this->state.unknown_11C84->duration = 25;
this->state.unknown_11C84->radius = 13.0f;
this->state.unknown_11C84->arcAngle = 10.0f;
this->state.unknown_11C84->size = 1.25f;
this->state.unknown_11C84->latitude = 90.0f;
EffectPrimitiveState& tilt = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(tilt.matrix1)->MakeXRotation(GetRadian(static_cast<int>(tilt.unknown_0310)));
this->state.unknown_11C84->unknown_034C = 0.25f;
reinterpret_cast<matrix*>(tilt.transform)->MakeXRotation(GetRadian(static_cast<int>(tilt.latitude)));
this->state.unknown_11C84->radiusSpeed = 0.25f;
EffectPrimitiveState& growing = *this->state.unknown_11C84;
growing.unknown_0350 = -(growing.unknown_034C / growing.lifetime);
growing.radiusAccel = -(growing.radiusSpeed / growing.duration);
this->state.unknown_11C84->alpha = 100.0f;
this->state.unknown_11C84->unknown_01F0 = 0;
this->state.unknown_11C84->fadeOutCnt = 0;
Owner(this->state.unknown_11C84).InitSegment();
AllocateTextures(*this->state.unknown_11C84);
this->state.unknown_11C84->textures[0] = textures.Load("effect\\alpha_center.tga", 0, false, true, false);
@ -603,27 +603,27 @@ void CRagEffect::WaterBall2() {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 8, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
Owner(this->state.unknown_11C84).SetSpriteName(ResourceMgr::Instance(), "이팩트\\Waterball.spr");
Owner(this->state.unknown_11C84).SetActionName(ResourceMgr::Instance(), "이팩트\\Waterball.act");
this->state.unknown_11C84->lifetime = 40;
this->state.unknown_11C84->velocity = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->unknown_0348 = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->duration = 40;
this->state.unknown_11C84->deltaPos2 = {0.0f, -10.0f, 0.0f};
this->state.unknown_11C84->radius = Owner(this->state.unknown_11C84).CalcDist(this->state.offset[0], this->state.offset[2]);
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->unknown_02BC = this->state.unknown_11C84->unknown_0348 / this->state.unknown_11C84->lifetime;
this->state.unknown_11C84->unknown_02EC = 3.5f;
const float rise = -(this->state.unknown_11C84->unknown_02EC / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_02F0 = rise + rise;
this->state.unknown_11C84->unknown_0334 = -2.0f;
const float spread = -(this->state.unknown_11C84->unknown_0334 / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_0340 = spread + spread;
this->state.unknown_11C84->unknown_0314 = 0.0f;
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->speed = this->state.unknown_11C84->radius / this->state.unknown_11C84->duration;
this->state.unknown_11C84->gravSpeed = 3.5f;
const float rise = -(this->state.unknown_11C84->gravSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->gravAccel = rise + rise;
this->state.unknown_11C84->latiSpeed = -2.0f;
const float spread = -(this->state.unknown_11C84->latiSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->latiAccel = spread + spread;
this->state.unknown_11C84->roll = 0.0f;
EffectPrimitiveState& particle = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(particle.matrix1)->MakeYRotation(GetRadian(static_cast<int>(particle.unknown_030C)));
this->state.unknown_11C84->unknown_03A0 = RotatedForward(this->state.unknown_11C84->matrix1, 1.0f);
this->state.unknown_11C84->unknown_0290[0] = this->state.unknown_11C84->unknown_03A0.x;
this->state.unknown_11C84->unknown_0290[1] = this->state.unknown_11C84->unknown_03A0.y;
this->state.unknown_11C84->unknown_0290[2] = this->state.unknown_11C84->unknown_03A0.z;
this->state.unknown_11C84->scale = 0.75f;
this->state.unknown_11C84->unknown_01F4 = 12;
reinterpret_cast<matrix*>(particle.transform)->MakeYRotation(GetRadian(static_cast<int>(particle.longitude)));
this->state.unknown_11C84->deltaPos3 = RotatedForward(this->state.unknown_11C84->transform, 1.0f);
this->state.unknown_11C84->rotAxis[0] = this->state.unknown_11C84->deltaPos3.x;
this->state.unknown_11C84->rotAxis[1] = this->state.unknown_11C84->deltaPos3.y;
this->state.unknown_11C84->rotAxis[2] = this->state.unknown_11C84->deltaPos3.z;
this->state.unknown_11C84->size = 0.75f;
this->state.unknown_11C84->numSegment = 12;
Owner(this->state.unknown_11C84).InitSegment();
}
@ -641,14 +641,14 @@ void CRagEffect::Yufitel(TextureCache& textures, char F1) {
}
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 15, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 20;
this->state.unknown_11C84->flags |= 0x40u;
this->state.unknown_11C84->flags |= 0x400u;
this->state.unknown_11C84->unknown_01C4 |= 2u;
this->state.unknown_11C84->unknown_0354 = 3.5f;
this->state.unknown_11C84->unknown_0360 = 3.5f;
this->state.unknown_11C84->duration = 20;
this->state.unknown_11C84->pattern |= 0x40u;
this->state.unknown_11C84->pattern |= 0x400u;
this->state.unknown_11C84->renderFlag |= 2u;
this->state.unknown_11C84->widthSize = 3.5f;
this->state.unknown_11C84->heightSize = 3.5f;
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
Owner(this->state.unknown_11C84).render.angle = 180.0f - Owner(this->state.unknown_11C84).render.angle;
if (Owner(this->state.unknown_11C84).render.angle < 0.0f) {
@ -656,23 +656,23 @@ void CRagEffect::Yufitel(TextureCache& textures, char F1) {
}
CEffectPrim& center = Owner(this->state.unknown_11C84);
center.state.unknown_02BC = -(center.CalcDist(this->state.offset[0], this->state.offset[2]) / center.state.lifetime);
reinterpret_cast<matrix*>(this->state.unknown_11C84->matrix1)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->unknown_030C)));
this->state.unknown_11C84->velocity.y = -5.0f;
center.state.speed = -(center.CalcDist(this->state.offset[0], this->state.offset[2]) / center.state.duration);
reinterpret_cast<matrix*>(this->state.unknown_11C84->transform)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->longitude)));
this->state.unknown_11C84->deltaPos2.y = -5.0f;
this->state.unknown_11C84->alpha = 170.0f;
AllocateTextures(*this->state.unknown_11C84);
this->state.unknown_11C84->textures[0] =
F1 != 0 ? textures.Load("effect\\twirl_soft.bmp", 0, false, true, false) : textures.Load("effect\\thunder_center.bmp", 0, false, true, false);
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 15, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 20;
this->state.unknown_11C84->flags = 0x40u;
this->state.unknown_11C84->flags |= 0x400u;
this->state.unknown_11C84->unknown_01C4 |= 2u;
this->state.unknown_11C84->unknown_0254 = 1;
this->state.unknown_11C84->unknown_0354 = 4.5f;
this->state.unknown_11C84->unknown_0360 = 4.5f;
this->state.unknown_11C84->duration = 20;
this->state.unknown_11C84->pattern = 0x40u;
this->state.unknown_11C84->pattern |= 0x400u;
this->state.unknown_11C84->renderFlag |= 2u;
this->state.unknown_11C84->repeatAnim = 1;
this->state.unknown_11C84->widthSize = 4.5f;
this->state.unknown_11C84->heightSize = 4.5f;
Owner(this->state.unknown_11C84).Face(this->state.offset[0], this->state.offset[2]);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
Owner(this->state.unknown_11C84).render.angle = 180.0f - Owner(this->state.unknown_11C84).render.angle;
if (Owner(this->state.unknown_11C84).render.angle < 0.0f) {
@ -680,11 +680,11 @@ void CRagEffect::Yufitel(TextureCache& textures, char F1) {
}
CEffectPrim& ball = Owner(this->state.unknown_11C84);
ball.state.unknown_02BC = -(ball.CalcDist(this->state.offset[0], this->state.offset[2]) / ball.state.lifetime);
reinterpret_cast<matrix*>(this->state.unknown_11C84->matrix1)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->unknown_030C)));
this->state.unknown_11C84->velocity.y = -5.0f;
this->state.unknown_11C84->unknown_01E8 = 1;
this->state.unknown_11C84->textureCount = 6;
ball.state.speed = -(ball.CalcDist(this->state.offset[0], this->state.offset[2]) / ball.state.duration);
reinterpret_cast<matrix*>(this->state.unknown_11C84->transform)->MakeYRotation(GetRadian(static_cast<int>(this->state.unknown_11C84->longitude)));
this->state.unknown_11C84->deltaPos2.y = -5.0f;
this->state.unknown_11C84->animSpeed = 1;
this->state.unknown_11C84->totalTexture = 6;
AllocateTextures(*this->state.unknown_11C84);
if (F1 != 0) {
@ -718,11 +718,11 @@ void CRagEffect::AirTexture(TextureCache& textures, const char* name) {
}
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 98, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->unknown_01C4 = 5;
this->state.unknown_11C84->lifetime = this->state.lifetime;
this->state.unknown_11C84->renderFlag = 5;
this->state.unknown_11C84->duration = this->state.lifetime;
AllocateTextures(*this->state.unknown_11C84);
this->state.unknown_11C84->textures[0] = textures.Load(name, 0, false, true, false);
this->state.unknown_11C84->scale = 0.0f;
this->state.unknown_11C84->size = 0.0f;
this->state.unknown_11C84->slots[0].life = 1;
this->state.unknown_11C84->slots[0].process = 0;
this->state.unknown_11C84->slots[0].distance = 5.0f;
@ -757,42 +757,42 @@ void CRagEffect::EnergyDrain2() {
for (int angle = -90; angle < 180; angle += 90) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 8, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.unknown_11C84->lifetime = 60;
this->state.unknown_11C84->duration = 60;
const float deltaZ = this->state.offset[2] - this->render.position.z;
EffectPrimitiveState& launched = *this->state.unknown_11C84;
launched.velocity.x = this->state.offset[0] - this->render.position.x;
launched.velocity.z = deltaZ;
launched.velocity.y = -10.0f;
this->state.unknown_11C84->unknown_0348 = Owner(this->state.unknown_11C84).CalcDist(
launched.deltaPos2.x = this->state.offset[0] - this->render.position.x;
launched.deltaPos2.z = deltaZ;
launched.deltaPos2.y = -10.0f;
this->state.unknown_11C84->radius = Owner(this->state.unknown_11C84).CalcDist(
this->state.offset[0] - (this->state.offset[0] - this->render.position.x) * 0.5f,
this->state.offset[2] - (this->state.offset[2] - this->render.position.z) * 0.5f
);
Owner(this->state.unknown_11C84).Face(
(this->render.position.x + this->render.position.x) - this->state.offset[0], (this->render.position.z + this->render.position.z) - this->state.offset[2]
);
this->state.unknown_11C84->unknown_030C = -Owner(this->state.unknown_11C84).render.angle;
const float speed = this->state.unknown_11C84->unknown_0348 / this->state.unknown_11C84->lifetime;
this->state.unknown_11C84->unknown_02BC = speed + speed;
this->state.unknown_11C84->unknown_02EC = 2.0f;
const float rise = -(this->state.unknown_11C84->unknown_02EC / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_02F0 = rise + rise;
this->state.unknown_11C84->unknown_0334 = -2.0f;
const float spread = -(this->state.unknown_11C84->unknown_0334 / this->state.unknown_11C84->lifetime);
this->state.unknown_11C84->unknown_0340 = spread + spread;
this->state.unknown_11C84->unknown_0314 = static_cast<float>(angle);
this->state.unknown_11C84->longitude = -Owner(this->state.unknown_11C84).render.angle;
const float speed = this->state.unknown_11C84->radius / this->state.unknown_11C84->duration;
this->state.unknown_11C84->speed = speed + speed;
this->state.unknown_11C84->gravSpeed = 2.0f;
const float rise = -(this->state.unknown_11C84->gravSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->gravAccel = rise + rise;
this->state.unknown_11C84->latiSpeed = -2.0f;
const float spread = -(this->state.unknown_11C84->latiSpeed / this->state.unknown_11C84->duration);
this->state.unknown_11C84->latiAccel = spread + spread;
this->state.unknown_11C84->roll = static_cast<float>(angle);
EffectPrimitiveState& particle = *this->state.unknown_11C84;
reinterpret_cast<matrix*>(particle.matrix1)->MakeYRotation(GetRadian(static_cast<int>(particle.unknown_030C)));
this->state.unknown_11C84->unknown_03A0 = RotatedForward(this->state.unknown_11C84->matrix1, 1.0f);
this->state.unknown_11C84->unknown_0290[0] = this->state.unknown_11C84->unknown_03A0.x;
this->state.unknown_11C84->unknown_0290[1] = this->state.unknown_11C84->unknown_03A0.y;
this->state.unknown_11C84->unknown_0290[2] = this->state.unknown_11C84->unknown_03A0.z;
reinterpret_cast<matrix*>(particle.transform)->MakeYRotation(GetRadian(static_cast<int>(particle.longitude)));
this->state.unknown_11C84->deltaPos3 = RotatedForward(this->state.unknown_11C84->transform, 1.0f);
this->state.unknown_11C84->rotAxis[0] = this->state.unknown_11C84->deltaPos3.x;
this->state.unknown_11C84->rotAxis[1] = this->state.unknown_11C84->deltaPos3.y;
this->state.unknown_11C84->rotAxis[2] = this->state.unknown_11C84->deltaPos3.z;
this->state.unknown_11C84->red = std::max(rand() % 81, 0) + 160;
this->state.unknown_11C84->green = std::max(rand() % 81, 0) + 160;
this->state.unknown_11C84->blue = 255;
this->state.unknown_11C84->scale = static_cast<float>(std::max(rand() % 6, 0)) * 0.1f + 1.5f;
this->state.unknown_11C84->size = static_cast<float>(std::max(rand() % 6, 0)) * 0.1f + 1.5f;
Owner(this->state.unknown_11C84).SetSpriteName(ResourceMgr::Instance(), "이팩트\\particle1.spr");
Owner(this->state.unknown_11C84).SetActionName(ResourceMgr::Instance(), "이팩트\\particle1.act");
this->state.unknown_11C84->unknown_01F4 = 7;
this->state.unknown_11C84->numSegment = 7;
Owner(this->state.unknown_11C84).InitSegment();
}
}
@ -988,21 +988,21 @@ bool CRagEffect::Aspersio() {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 7, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
this->state.lifetime = 400;
EffectPrimitiveState& particle = *this->state.unknown_11C84;
particle.lifetime = 40;
particle.unknown_0348 = 1.5f;
particle.unknown_02EC = 0.19f;
particle.unknown_02F0 = 0.01f;
particle.unknown_030C = static_cast<float>(std::max(rand() % 360, 0));
particle.scale = 1.2f;
reinterpret_cast<matrix*>(particle.matrix1)->MakeYRotation(GetRadian(static_cast<int>(particle.unknown_030C)));
const float* m = particle.matrix1;
const float distance = particle.unknown_0348;
particle.velocity = {
particle.duration = 40;
particle.radius = 1.5f;
particle.gravSpeed = 0.19f;
particle.gravAccel = 0.01f;
particle.longitude = static_cast<float>(std::max(rand() % 360, 0));
particle.size = 1.2f;
reinterpret_cast<matrix*>(particle.transform)->MakeYRotation(GetRadian(static_cast<int>(particle.longitude)));
const float* m = particle.transform;
const float distance = particle.radius;
particle.deltaPos2 = {
(m[0] * 0.0f - m[3] * 30.0f) + distance * m[6] + m[9],
(m[1] * 0.0f - m[4] * 30.0f) + distance * m[7] + m[10],
(m[2] * 0.0f - m[5] * 30.0f) + distance * m[8] + m[11]
};
particle.unknown_01F0 = 30;
particle.fadeOutCnt = 30;
Owner(&particle).SetSpriteName(ResourceMgr::Instance(), "이팩트\\particle1.spr");
Owner(&particle).SetActionName(ResourceMgr::Instance(), "이팩트\\particle1.act");
Owner(&particle).InitSegment();
@ -1028,18 +1028,18 @@ void CRagEffect::Blessing(TextureCache& textures) {
PlayEffectWave(*this, "effect\\EF_Blessing.wav");
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 12, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
EffectPrimitiveState& ring = *this->state.unknown_11C84;
ring.lifetime = this->state.lifetime;
ring.flags |= 1u;
ring.unknown_01C4 |= 0x200u;
ring.unknown_0348 = 10.0f;
ring.unknown_0310 = 90.0f;
ring.duration = this->state.lifetime;
ring.pattern |= 1u;
ring.renderFlag |= 0x200u;
ring.radius = 10.0f;
ring.latitude = 90.0f;
ring.red = 32;
ring.green = 176;
ring.blue = 232;
ring.alpha = 0.0f;
ring.unknown_02D4 = 100.0f;
ring.alphaSpeed = ring.unknown_02D4 / 30.0f;
ring.unknown_01F0 = ring.lifetime - 30;
ring.maxAlpha = 100.0f;
ring.alphaSpeed = ring.maxAlpha / 30.0f;
ring.fadeOutCnt = ring.duration - 30;
Owner(&ring).InitSegment();
AllocateTextures(ring);
ring.textures[0] = textures.Load("effect\\alpha_down.tga", 0, false, true, false);
@ -1048,10 +1048,10 @@ void CRagEffect::Blessing(TextureCache& textures) {
if (this->state.unknown_0178 % 3 == 0 && this->state.unknown_0178 < 10) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 5, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
EffectPrimitiveState& wing = *this->state.unknown_11C84;
wing.lifetime = this->state.lifetime;
wing.unknown_01E8 = 2;
wing.duration = this->state.lifetime;
wing.animSpeed = 2;
wing.alpha = static_cast<float>(this->state.unknown_0178 * -6 + 200);
wing.velocity = {0.0f, -25.0f, 0.0f};
wing.deltaPos2 = {0.0f, -25.0f, 0.0f};
Owner(&wing).SetSpriteName(ResourceMgr::Instance(), "이팩트\\축복.spr");
Owner(&wing).SetActionName(ResourceMgr::Instance(), "이팩트\\축복.act");
Owner(&wing).InitSegment();
@ -1060,23 +1060,23 @@ void CRagEffect::Blessing(TextureCache& textures) {
if (this->state.unknown_0178 % 4 == 0) {
this->state.unknown_11C84 = &CreateEffectParticle(*this, this->render, 5, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
EffectPrimitiveState& spark = *this->state.unknown_11C84;
spark.lifetime = 80;
spark.flags |= 0x80u;
reinterpret_cast<matrix*>(spark.matrix1)->MakeYRotation(GetRadian(std::max(rand() % 360, 0)));
const float* m = spark.matrix1;
spark.duration = 80;
spark.pattern |= 0x80u;
reinterpret_cast<matrix*>(spark.transform)->MakeYRotation(GetRadian(std::max(rand() % 360, 0)));
const float* m = spark.transform;
const float distance = static_cast<float>(std::max(rand() % 7, 0) + 2);
spark.velocity = {
spark.deltaPos2 = {
(m[0] * 0.0f - m[3] * 25.0f) + distance * m[6] + m[9],
(m[1] * 0.0f - m[4] * 25.0f) + distance * m[7] + m[10],
(m[2] * 0.0f - m[5] * 25.0f) + distance * m[8] + m[11]
};
reinterpret_cast<matrix*>(spark.matrix1)->MakeXRotation(GetRadian(-90));
spark.unknown_02BC = static_cast<float>(std::max(rand() % 20, 0) + 20) / 100.0f;
spark.unknown_02C0 = -(spark.unknown_02BC / static_cast<float>(spark.lifetime)) * 0.5f;
reinterpret_cast<matrix*>(spark.transform)->MakeXRotation(GetRadian(-90));
spark.speed = static_cast<float>(std::max(rand() % 20, 0) + 20) / 100.0f;
spark.accel = -(spark.speed / static_cast<float>(spark.duration)) * 0.5f;
spark.alpha = 0.0f;
spark.scale = 0.5f;
spark.unknown_01F0 = spark.lifetime - spark.lifetime / 5;
spark.alphaSpeed = spark.unknown_02D4 / 10.0f;
spark.size = 0.5f;
spark.fadeOutCnt = spark.duration - spark.duration / 5;
spark.alphaSpeed = spark.maxAlpha / 10.0f;
Owner(&spark).SetActionName(ResourceMgr::Instance(), "이팩트\\particle6.act");
Owner(&spark).SetSpriteName(ResourceMgr::Instance(), "이팩트\\particle6.spr");
Owner(&spark).InitSegment();
@ -1087,19 +1087,19 @@ void CRagEffect::Blessing(TextureCache& textures) {
static __forceinline void SpawnBottomQuad(CRagEffect& effect, TextureCache& textures, const vector3d& velocity, int angle) {
effect.state.unknown_11C84 = &CreateEffectParticle(effect, effect.render, 15, 0.0f, 0.0f, 0.0f, WorldObjects())->state;
EffectPrimitiveState& quad = *effect.state.unknown_11C84;
quad.lifetime = 9999;
quad.unknown_0238 = 1;
quad.flags = 0x28;
quad.unknown_01CC = 0x32;
quad.velocity = velocity;
quad.unknown_030C = static_cast<float>(angle);
quad.unknown_0354 = 5.0f;
quad.unknown_0360 = 15.0f;
quad.unknown_0364 = 0.25f;
quad.duration = 9999;
quad.commonPattern = 1;
quad.pattern = 0x28;
quad.type = 0x32;
quad.deltaPos2 = velocity;
quad.longitude = static_cast<float>(angle);
quad.widthSize = 5.0f;
quad.heightSize = 15.0f;
quad.heightSpeed = 0.25f;
quad.alpha = 0.0f;
quad.unknown_02D4 = 180.0f;
quad.alphaSpeed = quad.unknown_02D4 / 6.0f;
quad.unknown_01F0 = quad.lifetime - 35;
quad.maxAlpha = 180.0f;
quad.alphaSpeed = quad.maxAlpha / 6.0f;
quad.fadeOutCnt = quad.duration - 35;
AllocateTextures(quad);
quad.textures[0] = textures.Load("effect\\magic_violet.tga", 0, false, true, false);
}