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).
This commit is contained in:
ragnarok-clanker 2026-10-31 12:22:31 +00:00
commit 1f06dcf728
4 changed files with 124 additions and 4 deletions

View file

@ -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(

View file

@ -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

View file

@ -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(

View file

@ -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) {