From 1865b689c5b47e40b0ab9920cf0e599359c02a8d Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 29 Oct 2026 23:37:28 +0000 Subject: [PATCH] Decompile 4 functions in Source/Contents/Effects/MagnumBreak.cpp, Source/Contents/Effects/MagnumBreak.h, ... Batch #3836 by eAthena: 4 byte-identical, 0 confirmed by peer review. - fn_18951 CMapChainEffect::Slot06: byte-identical - fn_18957 CMappillarEffect::Slot06: byte-identical - fn_18966 CSquareRangeEffect::Slot04: byte-identical - fn_18975 CSteal::Slot04: byte-identical Merged automatically: every function is byte-identical to the original. Adds to the build: Source/Contents/Effects/MagnumBreak.cpp, Source/Contents/Effects/MapChainEffect.cpp, Source/Contents/Effects/MappillarEffect.cpp, Source/Contents/Effects/SquareRangeEffect.cpp, Source/Contents/Effects/StealEffect.cpp, Source/Contents/Effects/MagicFloorEffect.cpp --- Source/Contents/Effects/MagicFloorEffect.cpp | 5 +++ Source/Contents/Effects/MagicFloorEffect.h | 25 ++++++++++++ Source/Contents/Effects/MagnumBreak.cpp | 10 +++++ Source/Contents/Effects/MagnumBreak.h | 31 ++++++++++++++ Source/Contents/Effects/MapChainEffect.cpp | 13 ++++++ Source/Contents/Effects/MapChainEffect.h | 40 +++++++++++++++++++ Source/Contents/Effects/MappillarEffect.cpp | 11 +++++ Source/Contents/Effects/MappillarEffect.h | 25 ++++++++++++ Source/Contents/Effects/SquareRangeEffect.cpp | 20 ++++++++++ Source/Contents/Effects/SquareRangeEffect.h | 27 +++++++++++++ Source/Contents/Effects/StealEffect.cpp | 11 +++++ Source/Contents/Effects/StealEffect.h | 25 ++++++++++++ data/compile.json | 6 +++ 13 files changed, 249 insertions(+) create mode 100644 Source/Contents/Effects/MagicFloorEffect.cpp create mode 100644 Source/Contents/Effects/MagicFloorEffect.h create mode 100644 Source/Contents/Effects/MagnumBreak.cpp create mode 100644 Source/Contents/Effects/MagnumBreak.h create mode 100644 Source/Contents/Effects/MapChainEffect.cpp create mode 100644 Source/Contents/Effects/MapChainEffect.h create mode 100644 Source/Contents/Effects/MappillarEffect.cpp create mode 100644 Source/Contents/Effects/MappillarEffect.h create mode 100644 Source/Contents/Effects/SquareRangeEffect.cpp create mode 100644 Source/Contents/Effects/SquareRangeEffect.h create mode 100644 Source/Contents/Effects/StealEffect.cpp create mode 100644 Source/Contents/Effects/StealEffect.h diff --git a/Source/Contents/Effects/MagicFloorEffect.cpp b/Source/Contents/Effects/MagicFloorEffect.cpp new file mode 100644 index 00000000..db11384f --- /dev/null +++ b/Source/Contents/Effects/MagicFloorEffect.cpp @@ -0,0 +1,5 @@ +#include "Contents/Effects/MagicFloorEffect.h" + +#include "Contents/Effects/Particle.h" + +// OFFSET: 0x00B49760 diff --git a/Source/Contents/Effects/MagicFloorEffect.h b/Source/Contents/Effects/MagicFloorEffect.h new file mode 100644 index 00000000..7c931eb6 --- /dev/null +++ b/Source/Contents/Effects/MagicFloorEffect.h @@ -0,0 +1,25 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAGICFLOOREFFECT_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAGICFLOOREFFECT_H + +#include "Contents/Effects/Effect.h" + +#include +#include + +class CParticle; + +class CMagicFloorEffect : public CEffect { +public: + void Slot04() override; + + /* 00CC */ unsigned char unknown_00CC[0x30]; + /* 00FC */ std::vector floors; + /* 0108 */ std::vector particles; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CMagicFloorEffect, floors) == 0xFC); +static_assert(offsetof(CMagicFloorEffect, particles) == 0x108); +#endif + +#endif diff --git a/Source/Contents/Effects/MagnumBreak.cpp b/Source/Contents/Effects/MagnumBreak.cpp new file mode 100644 index 00000000..a04c539f --- /dev/null +++ b/Source/Contents/Effects/MagnumBreak.cpp @@ -0,0 +1,10 @@ +#include "Contents/Effects/MagnumBreak.h" + +#include "Contents/Effects/Particle.h" +#include "Utility/Math/AffineMatrix.h" + +// OFFSET: 0x00B49E60 + +// OFFSET: 0x00B4A150 + +// OFFSET: 0x00B4A590 diff --git a/Source/Contents/Effects/MagnumBreak.h b/Source/Contents/Effects/MagnumBreak.h new file mode 100644 index 00000000..15a09126 --- /dev/null +++ b/Source/Contents/Effects/MagnumBreak.h @@ -0,0 +1,31 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAGNUMBREAK_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAGNUMBREAK_H + +#include "Contents/Effects/Effect.h" + +#include +#include + +class CParticle; + +class CMagnumBreak : public CEffect { +public: + void Slot03() override; + void Slot04() override; + + static void UpdateWave(CParticle* particle); + + /* 00CC */ std::vector rings; + /* 00D8 */ std::vector waves; + /* 00E4 */ float fadeStep; + /* 00E8 */ int fadeFrame; + /* 00EC */ int alpha; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CMagnumBreak, waves) == 0xD8); +static_assert(offsetof(CMagnumBreak, alpha) == 0xEC); +static_assert(sizeof(CMagnumBreak) == 0xF0); +#endif + +#endif diff --git a/Source/Contents/Effects/MapChainEffect.cpp b/Source/Contents/Effects/MapChainEffect.cpp new file mode 100644 index 00000000..db1fdbe1 --- /dev/null +++ b/Source/Contents/Effects/MapChainEffect.cpp @@ -0,0 +1,13 @@ +#include "Contents/Effects/MapChainEffect.h" + +#include "Contents/Effects/Particle.h" + +// OFFSET: 0x00B4A9E0 + +// OFFSET: 0x00B4B130 +// FUNCTION: fn_18951 +bool CMapChainEffect::Slot06() { + return this->ActorExists(); +} + +// OFFSET: 0x00B4B740 diff --git a/Source/Contents/Effects/MapChainEffect.h b/Source/Contents/Effects/MapChainEffect.h new file mode 100644 index 00000000..3e0562bb --- /dev/null +++ b/Source/Contents/Effects/MapChainEffect.h @@ -0,0 +1,40 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAPCHAINEFFECT_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAPCHAINEFFECT_H + +#include "Contents/Effects/Effect.h" + +#include +#include + +class CParticle; + +struct MapChainPoint { + MapChainPoint() : x(0), y(0), z(0) { + } + + /* 0000 */ float x; + /* 0004 */ float y; + /* 0008 */ float z; +}; + +class CMapChainEffect : public CEffect { +public: + CMapChainEffect(); + void Slot04() override; + bool Slot06() override; + + /* 00CC */ MapChainPoint corners[2]; + /* 00E4 */ std::vector particles; + /* 00F0 */ int unknown_00F0; + /* 00F4 */ int unknown_00F4; + /* 00F8 */ int unknown_00F8; + /* 00FC */ int unknown_00FC; + /* 0100 */ int unknown_0100; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CMapChainEffect, particles) == 0xE4); +static_assert(sizeof(CMapChainEffect) == 0x104); +#endif + +#endif diff --git a/Source/Contents/Effects/MappillarEffect.cpp b/Source/Contents/Effects/MappillarEffect.cpp new file mode 100644 index 00000000..1241d7c8 --- /dev/null +++ b/Source/Contents/Effects/MappillarEffect.cpp @@ -0,0 +1,11 @@ +#include "Contents/Effects/MappillarEffect.h" + +#include "Contents/Effects/Particle.h" + +// OFFSET: 0x00B4C0B0 +// FUNCTION: fn_18957 +bool CMappillarEffect::Slot06() { + return this->ActorExists(); +} + +// OFFSET: 0x00B4C4C0 diff --git a/Source/Contents/Effects/MappillarEffect.h b/Source/Contents/Effects/MappillarEffect.h new file mode 100644 index 00000000..698e0d94 --- /dev/null +++ b/Source/Contents/Effects/MappillarEffect.h @@ -0,0 +1,25 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAPPILLAREFFECT_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_MAPPILLAREFFECT_H + +#include "Contents/Effects/Effect.h" + +#include +#include + +class CParticle; + +class CMappillarEffect : public CEffect { +public: + void Slot04() override; + bool Slot06() override; + + /* 00CC */ unsigned char unknown_00CC[0x18]; + /* 00E4 */ std::vector particles; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CMappillarEffect, particles) == 0xE4); +static_assert(sizeof(CMappillarEffect) == 0xF0); +#endif + +#endif diff --git a/Source/Contents/Effects/SquareRangeEffect.cpp b/Source/Contents/Effects/SquareRangeEffect.cpp new file mode 100644 index 00000000..dda31721 --- /dev/null +++ b/Source/Contents/Effects/SquareRangeEffect.cpp @@ -0,0 +1,20 @@ +#include "Contents/Effects/SquareRangeEffect.h" + +#include "Contents/Effects/Particle.h" +#include "Utility/Math/AffineMatrix.h" + +#include + +// OFFSET: 0x00B4C5E0 + +// OFFSET: 0x00B4C8E0 + +// OFFSET: 0x00B4CB40 +// FUNCTION: fn_18966 +void CSquareRangeEffect::Slot04() { + for (std::vector::iterator it = this->particles.begin(); it != this->particles.end(); ++it) { + if (*it) { + (*it)->Render(false, 0.0f, 1.0f, 0.0f, 1.0f, false, true); + } + } +} diff --git a/Source/Contents/Effects/SquareRangeEffect.h b/Source/Contents/Effects/SquareRangeEffect.h new file mode 100644 index 00000000..ceebb268 --- /dev/null +++ b/Source/Contents/Effects/SquareRangeEffect.h @@ -0,0 +1,27 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_SQUARERANGEEFFECT_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_SQUARERANGEEFFECT_H + +#include "Contents/Effects/Effect.h" + +#include +#include + +class CParticle; + +class CSquareRangeEffect : public CEffect { +public: + CSquareRangeEffect(); + void Slot03() override; + void Slot04() override; + + /* 00CC */ float size; + /* 00D0 */ unsigned char resize; + /* 00D4 */ std::vector particles; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CSquareRangeEffect, particles) == 0xD4); +static_assert(sizeof(CSquareRangeEffect) == 0xE0); +#endif + +#endif diff --git a/Source/Contents/Effects/StealEffect.cpp b/Source/Contents/Effects/StealEffect.cpp new file mode 100644 index 00000000..9dbae7af --- /dev/null +++ b/Source/Contents/Effects/StealEffect.cpp @@ -0,0 +1,11 @@ +#include "Contents/Effects/StealEffect.h" + +#include "Contents/Effects/SpriteParticle.h" + +// OFFSET: 0x00B4D720 +// FUNCTION: fn_18975 +void CSteal::Slot04() { + for (std::list::iterator it = this->particles.begin(); it != this->particles.end(); ++it) { + (*it)->sub_B40F30(1); + } +} diff --git a/Source/Contents/Effects/StealEffect.h b/Source/Contents/Effects/StealEffect.h new file mode 100644 index 00000000..ebc287c1 --- /dev/null +++ b/Source/Contents/Effects/StealEffect.h @@ -0,0 +1,25 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_EFFECTS_STEALEFFECT_H +#define RAGNAROK_SOURCE_CONTENTS_EFFECTS_STEALEFFECT_H + +#include "Contents/Effects/Effect.h" +#include "Utility/Math/Vector3d.h" + +#include +#include + +class CSpriteParticle; + +class CSteal : public CEffect { +public: + void Slot04() override; + + /* 00CC */ std::list particles; + /* 00D4 */ vector3d offsets[10]; +}; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(CSteal, offsets) == 0xD4); +static_assert(sizeof(CSteal) == 0x14C); +#endif + +#endif diff --git a/data/compile.json b/data/compile.json index 947bae60..e984803c 100644 --- a/data/compile.json +++ b/data/compile.json @@ -353,6 +353,10 @@ "Source/Contents/Effects/FriggSongEffect.cpp": 4, "Source/Contents/Effects/FuumaShouakuEffect.cpp": 4, "Source/Contents/Effects/JupitelThunderStormEffect.cpp": 4, + "Source/Contents/Effects/MagicFloorEffect.cpp": 4, + "Source/Contents/Effects/MagnumBreak.cpp": 4, + "Source/Contents/Effects/MapChainEffect.cpp": 4, + "Source/Contents/Effects/MappillarEffect.cpp": 4, "Source/Contents/Effects/MeteorEffect.cpp": 4, "Source/Contents/Effects/MonsterSkillEffects.cpp": 4, "Source/Contents/Effects/NyanggrassEffect.cpp": 4, @@ -365,6 +369,8 @@ "Source/Contents/Effects/RagEffectInitialization.cpp": 4, "Source/Contents/Effects/RectUpEffect.cpp": 4, "Source/Contents/Effects/SpriteParticle.cpp": 4, + "Source/Contents/Effects/SquareRangeEffect.cpp": 4, + "Source/Contents/Effects/StealEffect.cpp": 4, "Source/Contents/Effects/TalismanMarkEffect.cpp": 4, "Source/Contents/Effects/TetraBallEffect.cpp": 4, "Source/Contents/Effects/ThrowEffects.cpp": 4,