diff --git a/Source/Contents/Effects/ViolentQuakeEffect.cpp b/Source/Contents/Effects/ViolentQuakeEffect.cpp index b82a2cf1..c3b04766 100644 --- a/Source/Contents/Effects/ViolentQuakeEffect.cpp +++ b/Source/Contents/Effects/ViolentQuakeEffect.cpp @@ -96,17 +96,17 @@ void CViolentQuakeEffect::Slot03() { continue; } - const float x = this->position[0]; - const float y = this->position[1]; - const float z = this->position[2]; - const float* view = static_cast(g_modeMgr.GetGameMode())->camera->frame.view.values; - const float* inverse = static_cast(g_modeMgr.GetGameMode())->camera->frame.inverse.values; - const float viewX = view[0] * x + view[3] * y + view[6] * z + view[9] + emitter->unknown_00D0; - const float viewY = view[1] * x + view[4] * y + view[7] * z + view[10] + emitter->unknown_00D4; - const float viewZ = view[2] * x + view[5] * y + view[8] * z + view[11] + emitter->unknown_00D8; - emitter->position.x = viewY * inverse[3] + viewX * inverse[0] + viewZ * inverse[6] + inverse[9]; - emitter->position.y = viewY * inverse[4] + viewX * inverse[1] + viewZ * inverse[7] + inverse[10]; - emitter->position.z = viewY * inverse[5] + viewX * inverse[2] + viewZ * inverse[8] + inverse[11]; + const vector3d origin = *reinterpret_cast(this->position); + const matrix view = static_cast(g_modeMgr.GetGameMode())->camera->frame.view; + const matrix& inverse = static_cast(g_modeMgr.GetGameMode())->camera->frame.inverse; + + const float viewX = view.values[0] * origin.x + view.values[3] * origin.y + view.values[6] * origin.z + view.values[9] + emitter->unknown_00D0; + const float viewY = view.values[1] * origin.x + view.values[4] * origin.y + view.values[7] * origin.z + view.values[10] + emitter->unknown_00D4; + const float viewZ = view.values[2] * origin.x + view.values[5] * origin.y + view.values[8] * origin.z + view.values[11] + emitter->unknown_00D8; + + emitter->position.x = viewY * inverse.values[3] + viewX * inverse.values[0] + viewZ * inverse.values[6] + inverse.values[9]; + emitter->position.y = viewY * inverse.values[4] + viewX * inverse.values[1] + viewZ * inverse.values[7] + inverse.values[10]; + emitter->position.z = viewY * inverse.values[5] + viewX * inverse.values[2] + viewZ * inverse.values[8] + inverse.values[11]; emitter->Process(0.0f, 0.0f, 0.0f); } }