rodecomp/Source/Contents/Effects/MonsterSkillEffects.cpp
ragnarok-clanker 3fb26e4b1b Decompile 4 functions in Source/Contents/Effects/MonsterSkillEffects.cpp, Source/Contents/Effects/MonsterSkillEffects.h
Batch #3290 by eAthena: 4 byte-identical, 0 confirmed by peer review.

- fn_07378 CRichsCoinEffect::Slot06: byte-identical
- fn_07401 CServantWeaponNewEffect::Slot01: byte-identical
- fn_07402 CServantWeaponEffect::Slot06: byte-identical
- fn_07403 CServantWeaponNewEffect::Slot06: byte-identical

Merged automatically: every function is byte-identical to the original.
2026-10-29 21:15:22 +00:00

303 lines
6.7 KiB
C++

#include "Contents/Effects/MonsterSkillEffects.h"
#include "Client/Mode/CGameMode.h"
#include "Client/Mode/ModeMgr.h"
#include "Client/Session.h"
#include "Contents/Camera/Camera.h"
#include "Contents/Configuration/ServiceOptions.h"
#include "Contents/Effects/EffectActor.h"
#include "Contents/Effects/Particle.h"
#include "Contents/Effects/SkillEffects.h"
#include "Contents/World/World.h"
#include "Utility/Math/AffineMatrix.h"
#include <windows.h>
#include <timeapi.h>
// OFFSET: 0x0070C070
// OFFSET: 0x0070C3B0
// OFFSET: 0x0070C3D0
// FUNCTION: fn_07131
bool CRootTwistEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x0070C3E0
// OFFSET: 0x0070C7F0
// OFFSET: 0x0070D150
// FUNCTION: fn_07145
bool CSpriteMableEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x0070D660
// FUNCTION: fn_07153
bool CStemSpearEffect::Slot06() {
for (auto emitter = this->emitters.begin(); emitter != this->emitters.end(); ++emitter) {
if ((*emitter)->elapsed < this->unknown_002C) {
return true;
}
}
return false;
}
// OFFSET: 0x0070D690
// OFFSET: 0x0070DB30
// FUNCTION: fn_07160
bool CSvgSpiritEffect::Slot06() {
return this->emitter->elapsed < this->unknown_002C;
}
// OFFSET: 0x0070DB50
// OFFSET: 0x0070DF30
// FUNCTION: fn_07167
bool CTunaPartyEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x0070EB60
// FUNCTION: fn_07178
bool CCurseOfCubeEffect::Slot06() {
if (!this->ActorExists() || this->emitters.empty()) {
return false;
}
return true;
}
// OFFSET: 0x0070F350
// FUNCTION: fn_07185
void CWarningPlaneEffect::Slot01() {
}
// OFFSET: 0x0070F360
// OFFSET: 0x0070FC60
// OFFSET: 0x007100D0
CDancingKnifeEffect::CDancingKnifeEffect() : CEffect(1829) {
}
// OFFSET: 0x00710830
// FUNCTION: fn_07203
bool CDancingKnifeEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00710AE0
CEternalSlashAttackEffect::CEternalSlashAttackEffect() : CEffect(-1) {
}
// OFFSET: 0x00710F50
bool CEternalSlashAttackEffect::Slot06() {
for (auto it = this->emitters.begin(); it != this->emitters.end(); ++it) {
EZ2STREmitter* emitter = *it;
if (emitter && (emitter->lifetime == 0.0f || static_cast<float>(emitter->elapsed) < emitter->lifetime * 60.0f)) {
return true;
}
}
return false;
}
// OFFSET: 0x00711120
CEternalSlashCountEffect::CEternalSlashCountEffect() : CEffect(1913), emitter(nullptr) {
}
// OFFSET: 0x00711340
bool CEternalSlashCountEffect::Slot06() {
EZ2STREmitter* emitter = this->emitter;
if (!emitter) {
return false;
}
if (emitter->lifetime == 0.0f) {
return true;
}
return static_cast<float>(emitter->elapsed) < emitter->lifetime * 60.0f;
}
// OFFSET: 0x00711420
CFallenAngelEffect::CFallenAngelEffect() : CEffect(1140), emitter(nullptr), unknown_00D0(0), unknown_00D4(0), unknown_00D8(0) {
}
// OFFSET: 0x00711690
bool CFallenAngelEffect::Slot06() {
if (this->emitter->lifetime == 0.0f) {
return true;
}
return static_cast<float>(this->emitter->elapsed) < this->emitter->lifetime * 60.0f;
}
// OFFSET: 0x007118C0
CFloralFlareRoad::CFloralFlareRoad() : CEffect(1804) {
}
// OFFSET: 0x00711DA0
// FUNCTION: fn_07232
bool CFloralFlareRoad::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00711F80
CFootprintEffect::CFootprintEffect() : CEffect(2411), stepDistance(0.0), unknown_0110(1), lastPosition{}, unknown_0120(-1000.0f) {
this->lastPosition.x = this->position[0];
this->lastPosition.y = this->position[1];
this->lastPosition.z = this->position[2];
}
// OFFSET: 0x007123C0
bool CFootprintEffect::Slot33() {
EffectActor* actor = static_cast<EffectActor*>(FindRenderObject(this->actor));
if (!actor || actor->render.unknown_00A8 == 0) {
return true;
}
if (g_serviceOptions.Get(269) && this->actor != g_session.m_aid) {
return false;
}
return actor->EffectVisible();
}
// OFFSET: 0x007127A0
// FUNCTION: fn_07240
bool CFootprintEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00713370
bool CFootprintStrEffect::Slot33() {
EffectActor* actor = static_cast<EffectActor*>(FindRenderObject(this->actor));
if (!actor || actor->render.unknown_00A8 == 0) {
return true;
}
if (g_serviceOptions.Get(269) && this->actor != g_session.m_aid) {
return false;
}
return actor->EffectVisible();
}
// OFFSET: 0x00713830
// FUNCTION: fn_07250
bool CFootprintStrEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00715400
// FUNCTION: fn_07266
void CFromTheAbyssEffect::Slot01() {
this->retained = 1;
}
// OFFSET: 0x00715410
// FUNCTION: fn_07267
bool CFromTheAbyssEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x0071F5F0
CPetitioEffect::CPetitioEffect() : CEffect(1911) {
}
// OFFSET: 0x0071FA30
bool CPetitioEffect::Slot06() {
for (auto it = this->emitters.begin(); it != this->emitters.end(); ++it) {
EZ2STREmitter* emitter = *it;
if (emitter->lifetime == 0.0f || static_cast<float>(emitter->elapsed) < emitter->lifetime * 60.0f) {
return true;
}
}
return false;
}
// OFFSET: 0x0071FBF0
CPneumaticusProcellaEffect::CPneumaticusProcellaEffect() : CEffect(1957) {
}
// OFFSET: 0x00720480
CRandomHitEffect::CRandomHitEffect() : CEffect(-1), active(true) {
}
// OFFSET: 0x00720970
CRandomOptEffect::CRandomOptEffect() : CEffect(-1), offsets{} {
}
// OFFSET: 0x00720AF0
void CRandomOptEffect::Slot08(int red, int green, int blue) {
for (auto it = this->particles.begin(); it != this->particles.end(); ++it) {
(*it)->SetColor(red, green, blue);
}
}
// OFFSET: 0x00720B30
void CRandomOptEffect::Slot11(std::string name) {
for (auto it = this->particles.begin(); it != this->particles.end(); ++it) {
(*it)->SetTexture(name);
}
}
// OFFSET: 0x00721560
CRichsCoinEffect::CRichsCoinEffect() : CEffect(1135), unknown_00E4(0) {
}
// OFFSET: 0x00721AE0
// FUNCTION: fn_07378
bool CRichsCoinEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00722070
CSavageImpactEffect::CSavageImpactEffect() : CEffect(1837), offset{} {
}
// OFFSET: 0x00722460
bool CSavageImpactEffect::Slot06() {
if (this->emitter->lifetime == 0.0f) {
return true;
}
return static_cast<float>(this->emitter->elapsed) < this->emitter->lifetime * 60.0f;
}
// OFFSET: 0x007226A0
CServantWeaponEffect::CServantWeaponEffect() : CEffect(-1), offsets{} {
}
// OFFSET: 0x00722730
CServantWeaponNewEffect::CServantWeaponNewEffect() : CEffect(2460) {
}
// OFFSET: 0x00723A90
// FUNCTION: fn_07401
void CServantWeaponNewEffect::Slot01() {
this->retained = 1;
}
// OFFSET: 0x00723AA0
// FUNCTION: fn_07402
bool CServantWeaponEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00723AB0
// FUNCTION: fn_07403
bool CServantWeaponNewEffect::Slot06() {
return this->ActorExists();
}
// OFFSET: 0x00725130
CSevereRainStorm::CSevereRainStorm() : CEffect(-1) {
this->unknown_0050 = 0;
}