fix(zone): a scene transition links the scenes of its first and last points

Scene transitions of versions 34-38 have five points. The client links
the scenes of the first and the last one (ZoneLoader::ReadZoneFile,
1.10.64: points[0] and points[count - 1], for every version); the scene
graph used the first two, so in those zones it linked a scene with the
one of the transition's second point instead.

Of the 130 five-point transitions on disk, six (all in one older client
zone) have a different scene at the second and last points; the rest
link the same scenes as before.
Live zones are unchanged.

Check in game: nothing to check (no live zone changes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-29 05:57:09 -05:00
parent 6a8e8ece04
commit ee9c6288cb
2 changed files with 14 additions and 3 deletions

View File

@@ -58,9 +58,11 @@ namespace ZoneScenes {
};
for (const auto& transition : transitions) {
if (transition.points.size() < 2) continue;
// The low half of a point's LWOSCENEID is the scene, the high half its layer
const auto a = static_cast<uint32_t>(transition.points[0].sceneID & 0xFFFFFFFF);
const auto b = static_cast<uint32_t>(transition.points[1].sceneID & 0xFFFFFFFF);
// A transition links the scenes of its first and last points (ZoneLoader::ReadZoneFile; 5-point transitions
// of versions 34-38 have 3 more between them). The low half of a point's LWOSCENEID is the scene, the high
// half its layer
const auto a = static_cast<uint32_t>(transition.points.front().sceneID & 0xFFFFFFFF);
const auto b = static_cast<uint32_t>(transition.points.back().sceneID & 0xFFFFFFFF);
if (a == b || !m_Scenes.contains(a) || !m_Scenes.contains(b)) continue;
link(a, b);
link(b, a);