From 145d506ad12b2fa69b0c4720eba9e9ea49f87f05 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 5 Nov 2026 16:06:48 +0000 Subject: [PATCH] Decompile 3 functions in Source/Contents/Actors/Player.cpp Batch #12505 by Yommy: 0 byte-identical, 3 confirmed by peer review. - fn_22602 CPc::SendMsg: logic confirmed by peer review - fn_22647 CPc::Slot24: logic confirmed by peer review (already on main) - fn_22649 CPc::Slot23: logic confirmed by peer review (already on main) Peer-reviewed-by: gordaoprogramas, cremane, codeplay Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/Actors/Player.cpp | 404 +++++++++++++++--------------- 1 file changed, 208 insertions(+), 196 deletions(-) diff --git a/Source/Contents/Actors/Player.cpp b/Source/Contents/Actors/Player.cpp index 33dbcee4..79d3e8f0 100644 --- a/Source/Contents/Actors/Player.cpp +++ b/Source/Contents/Actors/Player.cpp @@ -4724,6 +4724,27 @@ void CPc::SendMsg( ) { CGameMode* mode = static_cast(g_modeMgr.GetGameMode()); switch (static_cast(a) << 32 | static_cast(message)) { + case 100: + if (this->render.unknown_0070 == 0 || this->render.unknown_0070 == 6) { + this->render.curMotion = b; + } + break; + case 35: + if (this->unknown_0490) { + g_windowMgr.Schedule(this->unknown_0490); + this->unknown_0490 = nullptr; + } + break; + case 34: + if (!this->unknown_0490) { + this->unknown_0490 = new UIPcGage(); + this->unknown_0490->SetSize(60, 5); + g_windowMgr.AddRenderedFront(this->unknown_0490); + } + static_cast(this->unknown_0490)->SetValues(b, d); + static_cast(this->unknown_0490)->SetLimits(0, 0); + this->unknown_0490->Move(this->render.screenX - 30, ScaleByScreenHeight(12) + this->render.screenY); + break; case 3: { PcStandEntry* entry = reinterpret_cast(b); mode->CellCenter(entry->cellX, entry->cellY, this->render.position.x, this->render.position.z); @@ -4746,6 +4767,9 @@ void CPc::SendMsg( this->Slot49(entry->guildId, entry->guildVersion); this->Slot41(entry->unknown_0068, entry->unknown_006C); switch (entry->state) { + case 0: + this->Slot15(0, 1); + break; case 1: this->Slot15(3, 1); break; @@ -4758,6 +4782,62 @@ void CPc::SendMsg( } break; } + case 124: { + PcStandEntry* entry = reinterpret_cast(b); + this->unknown_04D0 = entry->unknown_0078; + mode->CellCenter(entry->cellX, entry->cellY, this->render.position.x, this->render.position.z); + this->render.position.y = + mode->scene->terrain->Height(this->render.position.x, this->render.position.z); + this->render.angle = static_cast((entry->direction + 4) * 45); + this->unknown_0294 = entry->unknown_001C; + this->unknown_0298 = entry->unknown_0020; + this->unknown_0158[5] = entry->cellX; + *reinterpret_cast(this->unknown_0170) = entry->cellY; + this->unknown_043C = entry->unknown_005C; + *reinterpret_cast(this->unknown_029C) = entry->unknown_0024; + entry->job = MountedJob(entry->job, entry->stateFlags); + this->Slot20( + entry->job, entry->unknown_0008, entry->unknown_0024, entry->unknown_0028, entry->unknown_002C, entry->unknown_0030, entry->unknown_004C, + entry->unknown_0050, entry->unknown_0054, entry->unknown_0058, entry->stateFlags + ); + this->Slot43(entry->robe, 0); + this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); + this->SetUnknown02C8(entry->unknown_0044); + this->Slot49(entry->guildId, entry->guildVersion); + this->Slot41(entry->unknown_0068, entry->unknown_006C); + this->unknown_04CC = entry->unknown_0074; + switch (entry->state) { + case 0: + this->Slot15(0, 1); + break; + case 1: + this->Slot15(3, 1); + break; + case 2: + this->Slot15(6, 1); + break; + default: + this->Slot15(0, 1); + break; + } + break; + } + case 105: + case 106: + case 136: { + this->Slot21(this->GetEffectiveJob(-1)); + this->Slot30(); + const std::int64_t weapon = this->Slot35(); + if (weapon >= 1 && weapon <= 104) { + this->Slot23(static_cast(weapon), static_cast(weapon >> 32)); + } else { + this->Slot24(static_cast(weapon), static_cast(weapon >> 32)); + } + this->Slot28(this->unknown_045C); + this->Slot31(); + this->Slot32(); + break; + } case 4: { PcStandEntry* entry = reinterpret_cast(b); this->render.accountId = entry->aid; @@ -4783,6 +4863,9 @@ void CPc::SendMsg( this->Slot49(entry->guildId, entry->guildVersion); this->Slot41(entry->unknown_0068, entry->unknown_006C); switch (entry->state) { + case 0: + this->Slot15(0, 1); + break; case 1: this->Slot15(3, 1); break; @@ -4799,30 +4882,51 @@ void CPc::SendMsg( this->ShowPartyMemberEffect(entry->aid); break; } - case 5: { - PcMoveEntry* entry = reinterpret_cast(b); - this->unknown_04D0 = entry->unknown_007C; + case 121: { + PcStandEntry* entry = reinterpret_cast(b); + this->unknown_04D0 = entry->unknown_0078; this->render.accountId = entry->aid; + CGameMode* gameMode = static_cast(g_modeMgr.GetGameMode()); + gameMode->CellCenter(entry->cellX, entry->cellY, this->render.position.x, this->render.position.z); + this->render.position.y = + gameMode->scene->terrain->Height(this->render.position.x, this->render.position.z); + this->render.angle = static_cast((entry->direction + 4) * 45); *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; - this->routeStartTick = entry->moveStartTick; - this->unknown_043C = 0; + this->unknown_0294 = entry->unknown_001C; + this->unknown_0298 = entry->unknown_0020; + this->unknown_0158[5] = entry->cellX; + *reinterpret_cast(this->unknown_0170) = entry->cellY; + this->unknown_043C = entry->unknown_005C; + *reinterpret_cast(this->unknown_029C) = entry->unknown_0024; entry->job = MountedJob(entry->job, entry->stateFlags); - this->Slot19( - entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, - entry->unknown_0054, entry->unknown_004C, entry->unknown_0058, entry->unknown_005C + this->Slot20( + entry->job, entry->unknown_0008, entry->unknown_0024, entry->unknown_0028, entry->unknown_002C, entry->unknown_0030, entry->unknown_004C, + entry->unknown_0050, entry->unknown_0054, entry->unknown_0058, entry->stateFlags ); + this->Slot43(entry->robe, 0); this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); - this->SetUnknown02C8(entry->unknown_0048); + this->SetUnknown02C8(entry->unknown_0044); this->Slot49(entry->guildId, entry->guildVersion); - this->Slot41(entry->unknown_006C, entry->unknown_0070); - if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { - this->unknown_0158[5] = entry->destX; - *reinterpret_cast(this->unknown_0170) = entry->destY; - this->Slot15(1, 1); - this->unknown_023C = 0; + this->Slot41(entry->unknown_0068, entry->unknown_006C); + switch (entry->state) { + case 0: + this->Slot15(0, 1); + break; + case 1: + this->Slot15(3, 1); + break; + case 2: + this->Slot15(6, 1); + break; + default: + this->Slot15(0, 1); + break; + } + if (d == 2 && e == 0 && !StateFlag06(this->stateFlags)) { + this->LaunchEffect(0x158, vector3d{0.0f, 0.0f, 0.0f}, 0.0f); } this->ShowPartyMemberEffect(entry->aid); - this->unknown_04CC = entry->unknown_0078; + this->unknown_04CC = entry->unknown_0074; break; } case 6: { @@ -4856,28 +4960,97 @@ void CPc::SendMsg( this->ShowPartyMemberEffect(entry->aid); break; } - case 34: - if (!this->unknown_0490) { - this->unknown_0490 = new UIPcGage(); - this->unknown_0490->SetSize(60, 5); - g_windowMgr.AddRenderedFront(this->unknown_0490); + case 122: { + PcMoveEntry* entry = reinterpret_cast(b); + this->unknown_04D0 = entry->unknown_007C; + this->render.accountId = entry->aid; + *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; + this->routeStartTick = entry->moveStartTick; + this->unknown_043C = 0; + entry->job = MountedJob(entry->job, entry->stateFlags); + this->Slot20( + entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, + entry->unknown_0054, entry->unknown_0058, entry->unknown_005C, entry->stateFlags + ); + this->Slot43(entry->robe, 0); + this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); + this->SetUnknown02C8(entry->unknown_0048); + this->Slot49(entry->guildId, entry->guildVersion); + this->Slot41(entry->unknown_006C, entry->unknown_0070); + mode->CellCenter(entry->startX, entry->startY, this->render.position.x, this->render.position.z); + this->render.position.x += static_cast(mode->scene->terrain->cellSize) * 0.0625f * static_cast(entry->startSubX - 8); + this->render.position.z += static_cast(mode->scene->terrain->cellSize) * 0.0625f * static_cast(entry->startSubY - 8); + this->render.position.y = + mode->scene->terrain->Height(this->render.position.x, this->render.position.z); + if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { + this->unknown_0158[5] = entry->destX; + *reinterpret_cast(this->unknown_0170) = entry->destY; + this->Slot15(1, 1); + this->unknown_023C = 0; + } else { + this->Slot15(0, 1); } - static_cast(this->unknown_0490)->SetValues(b, d); - static_cast(this->unknown_0490)->SetLimits(0, 0); - this->unknown_0490->Move(this->render.screenX - 30, ScaleByScreenHeight(12) + this->render.screenY); + this->ShowPartyMemberEffect(entry->aid); + this->unknown_04CC = entry->unknown_0078; break; - case 35: - if (this->unknown_0490) { - g_windowMgr.Schedule(this->unknown_0490); - this->unknown_0490 = nullptr; + } + case 5: { + PcMoveEntry* entry = reinterpret_cast(b); + this->unknown_04D0 = entry->unknown_007C; + this->render.accountId = entry->aid; + *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; + this->routeStartTick = entry->moveStartTick; + this->unknown_043C = 0; + entry->job = MountedJob(entry->job, entry->stateFlags); + this->Slot19( + entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, + entry->unknown_0054, entry->unknown_004C, entry->unknown_0058, entry->unknown_005C + ); + this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); + this->SetUnknown02C8(entry->unknown_0048); + this->Slot49(entry->guildId, entry->guildVersion); + this->Slot41(entry->unknown_006C, entry->unknown_0070); + if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { + this->unknown_0158[5] = entry->destX; + *reinterpret_cast(this->unknown_0170) = entry->destY; + this->Slot15(1, 1); + this->unknown_023C = 0; } + this->ShowPartyMemberEffect(entry->aid); + this->unknown_04CC = entry->unknown_0078; break; - case 77: - break; - case 100: - if (this->render.unknown_0070 == 0 || this->render.unknown_0070 == 6) { - this->render.curMotion = b; + } + case 123: { + PcMoveEntry* entry = reinterpret_cast(b); + this->unknown_04D0 = entry->unknown_007C; + this->render.accountId = entry->aid; + *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; + this->routeStartTick = entry->moveStartTick; + this->unknown_043C = 0; + entry->job = MountedJob(entry->job, entry->stateFlags); + this->Slot20( + entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, + entry->unknown_0054, entry->unknown_0058, entry->unknown_005C, entry->stateFlags + ); + this->Slot43(entry->robe, 0); + this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); + this->SetUnknown02C8(entry->unknown_0048); + this->Slot49(entry->guildId, entry->guildVersion); + this->Slot41(entry->unknown_006C, entry->unknown_0070); + if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { + this->unknown_0158[5] = entry->destX; + *reinterpret_cast(this->unknown_0170) = entry->destY; + this->Slot15(1, 1); + this->unknown_023C = 0; } + this->ShowPartyMemberEffect(entry->aid); + this->unknown_04CC = entry->unknown_0078; + this->unknown_04D0 = entry->unknown_007C; + break; + } + case 114: + this->unknown_0494 = d; + this->unknown_0498 = b; break; case 101: { if (this->unknown_037C[0] != 0) { @@ -4922,169 +5095,6 @@ void CPc::SendMsg( this->unknown_037C[0] = reinterpret_cast(effect); break; } - case 105: - case 106: - case 136: { - this->Slot21(this->GetEffectiveJob(-1)); - this->Slot30(); - const std::int64_t weapon = this->Slot35(); - if (weapon >= 1 && weapon <= 104) { - this->Slot23(static_cast(weapon), static_cast(weapon >> 32)); - } else { - this->Slot24(static_cast(weapon), static_cast(weapon >> 32)); - } - this->Slot28(this->unknown_045C); - this->Slot31(); - this->Slot32(); - break; - } - case 114: - this->unknown_0494 = d; - this->unknown_0498 = b; - break; - case 121: { - PcStandEntry* entry = reinterpret_cast(b); - this->unknown_04D0 = entry->unknown_0078; - this->render.accountId = entry->aid; - CGameMode* gameMode = static_cast(g_modeMgr.GetGameMode()); - gameMode->CellCenter(entry->cellX, entry->cellY, this->render.position.x, this->render.position.z); - this->render.position.y = - gameMode->scene->terrain->Height(this->render.position.x, this->render.position.z); - this->render.angle = static_cast((entry->direction + 4) * 45); - *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; - this->unknown_0294 = entry->unknown_001C; - this->unknown_0298 = entry->unknown_0020; - this->unknown_0158[5] = entry->cellX; - *reinterpret_cast(this->unknown_0170) = entry->cellY; - this->unknown_043C = entry->unknown_005C; - *reinterpret_cast(this->unknown_029C) = entry->unknown_0024; - entry->job = MountedJob(entry->job, entry->stateFlags); - this->Slot20( - entry->job, entry->unknown_0008, entry->unknown_0024, entry->unknown_0028, entry->unknown_002C, entry->unknown_0030, entry->unknown_004C, - entry->unknown_0050, entry->unknown_0054, entry->unknown_0058, entry->stateFlags - ); - this->Slot43(entry->robe, 0); - this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); - this->SetUnknown02C8(entry->unknown_0044); - this->Slot49(entry->guildId, entry->guildVersion); - this->Slot41(entry->unknown_0068, entry->unknown_006C); - switch (entry->state) { - case 1: - this->Slot15(3, 1); - break; - case 2: - this->Slot15(6, 1); - break; - default: - this->Slot15(0, 1); - break; - } - if (d == 2 && e == 0 && !StateFlag06(this->stateFlags)) { - this->LaunchEffect(0x158, vector3d{0.0f, 0.0f, 0.0f}, 0.0f); - } - this->ShowPartyMemberEffect(entry->aid); - this->unknown_04CC = entry->unknown_0074; - break; - } - case 122: { - PcMoveEntry* entry = reinterpret_cast(b); - this->unknown_04D0 = entry->unknown_007C; - this->render.accountId = entry->aid; - *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; - this->routeStartTick = entry->moveStartTick; - this->unknown_043C = 0; - entry->job = MountedJob(entry->job, entry->stateFlags); - this->Slot20( - entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, - entry->unknown_0054, entry->unknown_0058, entry->unknown_005C, entry->stateFlags - ); - this->Slot43(entry->robe, 0); - this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); - this->SetUnknown02C8(entry->unknown_0048); - this->Slot49(entry->guildId, entry->guildVersion); - this->Slot41(entry->unknown_006C, entry->unknown_0070); - mode->CellCenter(entry->startX, entry->startY, this->render.position.x, this->render.position.z); - this->render.position.x += static_cast(mode->scene->terrain->cellSize) * 0.0625f * static_cast(entry->startSubX - 8); - this->render.position.z += static_cast(mode->scene->terrain->cellSize) * 0.0625f * static_cast(entry->startSubY - 8); - this->render.position.y = - mode->scene->terrain->Height(this->render.position.x, this->render.position.z); - if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { - this->unknown_0158[5] = entry->destX; - *reinterpret_cast(this->unknown_0170) = entry->destY; - this->Slot15(1, 1); - this->unknown_023C = 0; - } else { - this->Slot15(0, 1); - } - this->ShowPartyMemberEffect(entry->aid); - this->unknown_04CC = entry->unknown_0078; - break; - } - case 123: { - PcMoveEntry* entry = reinterpret_cast(b); - this->unknown_04D0 = entry->unknown_007C; - this->render.accountId = entry->aid; - *reinterpret_cast(&this->unknown_0170[4]) = entry->speed; - this->routeStartTick = entry->moveStartTick; - this->unknown_043C = 0; - entry->job = MountedJob(entry->job, entry->stateFlags); - this->Slot20( - entry->job, entry->unknown_0008, entry->unknown_002C, entry->unknown_0030, entry->unknown_0034, entry->unknown_0038, entry->unknown_0050, - entry->unknown_0054, entry->unknown_0058, entry->unknown_005C, entry->stateFlags - ); - this->Slot43(entry->robe, 0); - this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); - this->SetUnknown02C8(entry->unknown_0048); - this->Slot49(entry->guildId, entry->guildVersion); - this->Slot41(entry->unknown_006C, entry->unknown_0070); - if (this->FindRoute(entry->startX, entry->startY, entry->startSubX, entry->startSubY, entry->destX, entry->destY, entry->speed)) { - this->unknown_0158[5] = entry->destX; - *reinterpret_cast(this->unknown_0170) = entry->destY; - this->Slot15(1, 1); - this->unknown_023C = 0; - } - this->ShowPartyMemberEffect(entry->aid); - this->unknown_04CC = entry->unknown_0078; - this->unknown_04D0 = entry->unknown_007C; - break; - } - case 124: { - PcStandEntry* entry = reinterpret_cast(b); - this->unknown_04D0 = entry->unknown_0078; - mode->CellCenter(entry->cellX, entry->cellY, this->render.position.x, this->render.position.z); - this->render.position.y = - mode->scene->terrain->Height(this->render.position.x, this->render.position.z); - this->render.angle = static_cast((entry->direction + 4) * 45); - this->unknown_0294 = entry->unknown_001C; - this->unknown_0298 = entry->unknown_0020; - this->unknown_0158[5] = entry->cellX; - *reinterpret_cast(this->unknown_0170) = entry->cellY; - this->unknown_043C = entry->unknown_005C; - *reinterpret_cast(this->unknown_029C) = entry->unknown_0024; - entry->job = MountedJob(entry->job, entry->stateFlags); - this->Slot20( - entry->job, entry->unknown_0008, entry->unknown_0024, entry->unknown_0028, entry->unknown_002C, entry->unknown_0030, entry->unknown_004C, - entry->unknown_0050, entry->unknown_0054, entry->unknown_0058, entry->stateFlags - ); - this->Slot43(entry->robe, 0); - this->SetStatusStates(entry->bodyState, entry->stateFlags, entry->effectState, false); - this->SetUnknown02C8(entry->unknown_0044); - this->Slot49(entry->guildId, entry->guildVersion); - this->Slot41(entry->unknown_0068, entry->unknown_006C); - this->unknown_04CC = entry->unknown_0074; - switch (entry->state) { - case 1: - this->Slot15(3, 1); - break; - case 2: - this->Slot15(6, 1); - break; - default: - this->Slot15(0, 1); - break; - } - break; - } case 137: { if (this->unknown_037C[1] != 0) { break; @@ -5124,6 +5134,8 @@ void CPc::SendMsg( default: CGameActor::SendMsg(sender, message, a, b, c, d, e, f, g, h, i, j, k, l, m); break; + case 77: + break; } }