From 1f06dcf728f1ccc56e70fd65bcb8bd245fb0d31c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Sat, 31 Oct 2026 12:22:31 +0000 Subject: [PATCH] Decompile 7 functions in Source/Contents/Sound/SoundMaker.cpp, Source/Contents/Actors/Npc.h, ... Batch #7863 by eAthena: 0 byte-identical, 7 confirmed by peer review. - fn_22355 CGndRiser::CGndRiser: logic confirmed by peer review - fn_22356 CHalluNPC::CHalluNPC: logic confirmed by peer review - fn_22359 CHalluPlant::CHalluPlant: logic confirmed by peer review - fn_22360 CMasterChaser::CMasterChaser: logic confirmed by peer review - fn_22361 CNpc::CNpc: logic confirmed by peer review - fn_22362 CNumEffect::CNumEffect: logic confirmed by peer review - fn_22431 CNpc::Slot18: logic confirmed by peer review Peer-reviewed-by: secret, Romain, Snow, ragnarok-clanker, alisonrag, SapitoSucio Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/Actors/EffectActors.h | 2 + Source/Contents/Actors/GndRiser.h | 1 + Source/Contents/Actors/Npc.h | 12 ++- Source/Contents/Sound/SoundMaker.cpp | 113 ++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 4 deletions(-) diff --git a/Source/Contents/Actors/EffectActors.h b/Source/Contents/Actors/EffectActors.h index 0daa2581..baa370c9 100644 --- a/Source/Contents/Actors/EffectActors.h +++ b/Source/Contents/Actors/EffectActors.h @@ -31,6 +31,7 @@ public: class CMasterChaser : public CRenderObject { public: + CMasterChaser(); ~CMasterChaser() override; void ClearUnknown0138(); @@ -41,6 +42,7 @@ public: class CNumEffect : public CRenderObject { public: + CNumEffect(); ~CNumEffect() override; bool OnProcess() override; void SendMsg( diff --git a/Source/Contents/Actors/GndRiser.h b/Source/Contents/Actors/GndRiser.h index 014d9321..91a2b83e 100644 --- a/Source/Contents/Actors/GndRiser.h +++ b/Source/Contents/Actors/GndRiser.h @@ -7,6 +7,7 @@ class CGndRiser : public EffectActor { public: + CGndRiser(); bool OnProcess() override; void SendMsg( CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m diff --git a/Source/Contents/Actors/Npc.h b/Source/Contents/Actors/Npc.h index 8b47e72d..aede9d32 100644 --- a/Source/Contents/Actors/Npc.h +++ b/Source/Contents/Actors/Npc.h @@ -10,6 +10,7 @@ class UIWindow; class CNpc : public CGameActor { public: + CNpc(); ~CNpc() override; bool OnProcess() override; void SendMsg( @@ -18,6 +19,7 @@ public: void Render(int argument) override; void Slot16() override; void Slot17() override; + void Slot18(int job, int value, int unused) override; void Slot21(int value) override; void Slot22(int value) override; void Slot23(int first, int second) override; @@ -27,14 +29,14 @@ public: void UpdateBubblePositions(); void UpdateMinimapMarker(); - /* 0410 */ unsigned char unknown_0410[0x14]; + /* 0410 */ unsigned char unknown_0410[0x10]; + /* 0420 */ int unknown_0420; /* 0424 */ std::uint32_t unknown_0424; - /* 0428 */ unsigned char unknown_0428[0x04]; + /* 0428 */ int unknown_0428; /* 042C */ UIWindow* unknown_042C; /* 0430 */ UIWindow* unknown_0430; /* 0434 */ CGameObject* unknown_0434; - /* 0438 */ std::uint16_t unknown_0438; - /* 043A */ std::uint16_t unknown_043A; + /* 0438 */ int unknown_0438; /* 043C */ int unknown_043C; }; @@ -52,6 +54,7 @@ public: class CHalluNPC : public CNpc { public: + explicit CHalluNPC(CGameActor* source); ~CHalluNPC() override; bool OnProcess() override; void SendMsg( @@ -69,6 +72,7 @@ public: class CHalluPlant : public CNpc { public: + CHalluPlant(); ~CHalluPlant() override; bool OnProcess() override; void SendMsg( diff --git a/Source/Contents/Sound/SoundMaker.cpp b/Source/Contents/Sound/SoundMaker.cpp index 18de274d..54d9fd9e 100644 --- a/Source/Contents/Sound/SoundMaker.cpp +++ b/Source/Contents/Sound/SoundMaker.cpp @@ -60,6 +60,106 @@ CCorpse::CCorpse() { this->render.unknown_008C = timeGetTime(); } +// OFFSET: 0x00DA1210 +// FUNCTION: fn_22355 +CGndRiser::CGndRiser() { +} + +// OFFSET: 0x00DA1270 +// FUNCTION: fn_22356 +CHalluNPC::CHalluNPC(CGameActor* source) { + this->render.visible = 1; + this->render.unknown_00A4Bytes[0] = 0; + this->render.unknown_008C = timeGetTime(); + this->SetUnknown0260(source->unknown_0260); + this->SetActorJob(source->GetEffectiveJob(-1)); + this->unknown_02CC = source->unknown_02CC; + this->SetUnknown03C4(source->Slot55()); + this->render.position = source->render.position; + this->render.unknown_005C = source->render.unknown_005C; + this->render.unknown_0078 = source->render.unknown_0078; + this->render.scale = source->render.scale; + this->render.animation = source->render.animation; + this->render.previousAnimation = source->render.previousAnimation; + this->render.curMotion = source->render.curMotion; + this->SetActionName(ResourceMgr::Instance(), source->GetActName()); + this->render.unknown_00A2 = source->render.unknown_00A2; + this->render.unknown_0080 = source->render.unknown_0080; + this->render.isLieOnGround = source->render.isLieOnGround; + this->render.isSingleColor = source->render.isSingleColor; + this->render.unknown_007C = source->render.unknown_007C; + this->render.unknown_0048 = 0; + this->stateFlags = source->Slot13(); + this->Slot18(source->GetEffectiveJob(-1), source->unknown_0260, 0); + this->guildId = source->Slot50(); + this->render.accountId = 0; + this->unknown_0440 = 0.0f; + this->unknown_0454 = 0; + this->unknown_0444 = 0x10000000; + this->unknown_03E1 = true; +} + +// OFFSET: 0x00DA1AF0 +// FUNCTION: fn_22359 +CHalluPlant::CHalluPlant() { + this->render.visible = 1; + this->render.unknown_00A4Bytes[0] = 0; + this->render.unknown_008C = timeGetTime(); + this->SetUnknown0260(0); + this->SetActorJob(1079); + this->unknown_02CC = 0; + this->SetUnknown03C4(-1); + this->render.position.x = 0.0f; + this->render.position.y = 0.0f; + this->render.position.z = 0.0f; + this->render.unknown_005C = 1.0f; + this->render.unknown_0078 = 0; + this->render.scale = 1.0f; + this->render.animation = 0; + this->render.previousAnimation = 4; + this->render.curMotion = 0; + this->SetActionName(ResourceMgr::Instance(), "sprite\\몬스터\\blue_plant.act"); + this->render.unknown_00A2 = 0; + this->render.unknown_0080 = 0; + this->render.isLieOnGround = false; + this->render.isSingleColor = false; + this->render.unknown_007C = 0; + this->render.unknown_0048 = 0; + this->stateFlags = 0; + this->Slot18(this->GetEffectiveJob(-1), this->unknown_0260, 0); + this->guildId = 0; + this->render.accountId = 0; + this->unknown_0440 = 0; + this->unknown_03E1 = true; +} + +// OFFSET: 0x00DA1CB0 +// FUNCTION: fn_22360 +CMasterChaser::CMasterChaser() { + this->unknown_0138 = 0; +} + +// OFFSET: 0x00DA1D10 +// FUNCTION: fn_22361 +CNpc::CNpc() { + this->unknown_042C = nullptr; + this->unknown_0430 = nullptr; + this->unknown_0420 = 0; + this->unknown_0424 = timeGetTime(); + this->unknown_0428 = 0; + this->unknown_0434 = nullptr; + this->unknown_0438 = 9999; +} + +// OFFSET: 0x00DA1DB0 +// FUNCTION: fn_22362 +CNumEffect::CNumEffect() { + this->SetSpriteName(ResourceMgr::Instance(), "이팩트\\숫자.spr"); + this->SetActionName(ResourceMgr::Instance(), "이팩트\\숫자.act"); + this->render.animation = 0; + this->render.unknown_00A2 = 1; +} + // OFFSET: 0x00DA1E30 // FUNCTION: fn_22363 CSoundMaker::CSoundMaker() { @@ -685,6 +785,19 @@ void CSoundMaker::SendMsg( this->lastTick = timeGetTime() - this->cycle; } +// OFFSET: 0x00DA5820 +// FUNCTION: fn_22431 +void CNpc::Slot18(int job, int value, int) { + char name[64]; + this->SetActorJob(job); + this->SetUnknown0260(value); + this->render.unknown_0048 = 0; + if (g_session.IsGuildMemberCharacter(this->GetEffectiveJob(-1), name)) { + this->render.unknown_0048 = 1; + this->render.name = name; + } +} + // OFFSET: 0x00DA58A0 // FUNCTION: fn_22432 void CNpc::Slot21(int job) {