From eb96e386ebaa3c5ab2582745706552c30b424df2 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Wed, 28 Oct 2026 22:19:30 +0000 Subject: [PATCH] Decompile 15 functions in Source/Contents/NavigationLink.cpp, Source/Contents/NavigationManager.h Batch #1782 by Yommy: 0 byte-identical, 15 confirmed by peer review. - fn_19438 CNaviInfo::AddNpc: logic confirmed by peer review - fn_19439 CNaviInfo::AddLink: logic confirmed by peer review - fn_19440 CNaviInfo::AddMob: logic confirmed by peer review - fn_19441 CNavi_Link::AddLinkedLink: logic confirmed by peer review - fn_19442 CNavi_Link::AddLink: logic confirmed by peer review - fn_19443 CNavi_Object::AddLink: logic confirmed by peer review - fn_19445 CNavi_Link::LinksBegin: logic confirmed by peer review - fn_19446 CNavi_Object::LinksBegin: logic confirmed by peer review - fn_19447 CNavi_Link::FindLinkAt: logic confirmed by peer review - fn_19448 CNavi_Object::FindLinkAt: logic confirmed by peer review - fn_19449 CNavi_Link::FindLinkTo: logic confirmed by peer review - fn_19450 CNavi_Object::FindLinkTo: logic confirmed by peer review - fn_19454 CNavi_Link::EraseLink: logic confirmed by peer review - fn_19455 CNavi_Object::EraseLink: logic confirmed by peer review - fn_19491 CNavi_Link::GetLinkedCell: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Contents/NavigationLink.cpp | 108 +++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/Source/Contents/NavigationLink.cpp b/Source/Contents/NavigationLink.cpp index 0aefb48..886dbf0 100644 --- a/Source/Contents/NavigationLink.cpp +++ b/Source/Contents/NavigationLink.cpp @@ -80,28 +80,121 @@ void CNavi_Link::SetDepth(int depth) { } // OFFSET: 0x00B8D9A0 +// FUNCTION: fn_19438 +bool CNaviInfo::AddNpc(CNavi_Object* npc) { + if (npc == nullptr) { + return false; + } + + this->npcs.push_back(npc); + return true; +} // OFFSET: 0x00B8D9E0 +// FUNCTION: fn_19439 +bool CNaviInfo::AddLink(CNavi_Link* link) { + if (link == nullptr) { + return false; + } + + this->links.push_back(link); + return true; +} // OFFSET: 0x00B8DA20 +// FUNCTION: fn_19440 +bool CNaviInfo::AddMob(CNavi_Object* mob) { + if (mob == nullptr) { + return false; + } + + this->mobs.push_back(mob); + return true; +} // OFFSET: 0x00B8DA60 +// FUNCTION: fn_19441 +void CNavi_Link::AddLinkedLink(const NaviLink& link) { + this->linkedLinks.push_back(link); +} // OFFSET: 0x00B8DAA0 +// FUNCTION: fn_19442 +void CNavi_Link::AddLink(const NaviLink& link) { + this->links.push_back(link); +} // OFFSET: 0x00B8DAE0 +// FUNCTION: fn_19443 +void CNavi_Object::AddLink(const NaviLink& link) { + this->links.push_back(link); +} // OFFSET: 0x00B8DB40 +// FUNCTION: fn_19445 +std::vector::iterator CNavi_Link::LinksBegin() { + return this->links.begin(); +} // OFFSET: 0x00B8DB50 +// FUNCTION: fn_19446 +std::vector::iterator CNavi_Object::LinksBegin() { + return this->links.begin(); +} // OFFSET: 0x00B8DBB0 +// FUNCTION: fn_19447 +CNavi_Link* CNavi_Link::FindLinkAt(int x, int y) { + for (std::vector::iterator it = this->links.begin(); it != this->links.end(); ++it) { + NaviCell cell; + NaviCell* found = it->link->GetCell(&cell); + if (found->x == x && found->y == y) { + return it->link; + } + } + + return nullptr; +} // OFFSET: 0x00B8DC00 +// FUNCTION: fn_19448 +CNavi_Link* CNavi_Object::FindLinkAt(int x, int y) { + for (std::vector::iterator it = this->links.begin(); it != this->links.end(); ++it) { + NaviCell cell; + NaviCell* found = it->link->GetCell(&cell); + if (found->x == x && found->y == y) { + return it->link; + } + } + + return nullptr; +} // OFFSET: 0x00B8DC50 +// FUNCTION: fn_19449 +CNavi_Link* CNavi_Link::FindLinkTo(int x, int y) { + for (std::vector::iterator it = this->links.begin(); it != this->links.end(); ++it) { + CNavi_Link* link = it->link; + if (link->unknown_0080 == x && link->unknown_0084 == y) { + return link; + } + } + + return nullptr; +} // OFFSET: 0x00B8DC90 +// FUNCTION: fn_19450 +CNavi_Link* CNavi_Object::FindLinkTo(int x, int y) { + for (std::vector::iterator it = this->links.begin(); it != this->links.end(); ++it) { + CNavi_Link* link = it->link; + if (link->unknown_0080 == x && link->unknown_0084 == y) { + return link; + } + } + + return nullptr; +} // OFFSET: 0x00B8DCD0 // FUNCTION: fn_19451 @@ -122,8 +215,16 @@ void CNavi_Object::ClearLinks() { } // OFFSET: 0x00B8DDE0 +// FUNCTION: fn_19454 +void CNavi_Link::EraseLink(std::vector::iterator& it) { + it = this->links.erase(it); +} // OFFSET: 0x00B8DE20 +// FUNCTION: fn_19455 +void CNavi_Object::EraseLink(std::vector::iterator& it) { + it = this->links.erase(it); +} // OFFSET: 0x00B8DE80 // FUNCTION: fn_19457 @@ -144,6 +245,13 @@ const char* CNavi_Link::GetLinkedName() const { } // OFFSET: 0x00B8E880 +// FUNCTION: fn_19491 +NaviCell CNavi_Link::GetLinkedCell() const { + NaviCell cell; + cell.x = this->unknown_0080; + cell.y = this->unknown_0084; + return cell; +} // OFFSET: 0x00B90470 // FUNCTION: fn_19510