shortest-path icon indicating copy to clipboard operation
shortest-path copied to clipboard

no transport data for The Abyss

Open rmobis opened this issue 6 months ago • 3 comments

[!NOTE] Most of the more technical information on this issue has been extracted from the Wiki's regular and talk pages about The Abyss.

There's currently no transport data for The Abyss. That includes not only transport to get inside it using the Zamorak Mage, but also how to move from the outer to the inner ring. This means when pathing to the Dark Mage - either to restore your pouches or, more commonly, for the hard clue step - in the center of The Abyss, the plugin usually chooses to take the fairy ring to the Abyssal Nexus and go through the unpassable one-way passage.

To fix the part of just getting into the outer ring, it should be pretty simple to just add the NPC transport.

Going from the outer ring to the inner ring, things get a bit more tricky... Once inside, there are 12 different possible configurations for the player's initial position and the locations of the obstacles that take you to the inner ring and these are different per player. These configurations can be detected by checking the value of varbit 625, but that is only set once the player enters The Abyss. Not to mention every obstacle has its own associated skill and some have required items.

One solution could be to register all 24 obstacles for all 12 configurations with the appropriate varbit restrictions. We could then register a listener to the VarbitChanged event for varbit 625 where it would refresh the transports and recalculate the path, if there's one active. This wouldn't give the exact path length from the get go, but would be pretty close and would at least give the correct path.

Do you think that's a viable solution? I could work on a PR for that if so.

rmobis avatar Aug 05 '25 09:08 rmobis

Going from the outer ring to the inner ring, things get a bit more tricky... Once inside, there are 12 different possible configurations for the player's initial position and the locations of the obstacles that take you to the inner ring and these are different per player. These configurations can be detected by checking the value of varbit 625, but that is only set once the player enters The Abyss. Not to mention every obstacle has its own associated skill and some have required items.

Do you know if it is persistent per player during an entire playing session, or is it randomized every time the player enters The Abyss? What happens if you read varbit 625 when you have not yet entered The Abyss in the current login session? If it is randomized every time the player enters The Abyss then it might be worth checking if the randomization is predictable. Maybe they only shuffle the values?

One solution could be to register all 24 obstacles for all 12 configurations with the appropriate varbit restrictions. We could then register a listener to the VarbitChanged event for varbit 625 where it would refresh the transports and recalculate the path, if there's one active. This wouldn't give the exact path length from the get go, but would be pretty close and would at least give the correct path.

Yes, this sounds like a good solution if varbit 625 is randomized every time the player enters The Abyss

Skretzo avatar Aug 05 '25 10:08 Skretzo

Do you know if it is persistent per player during an entire playing session, or is it randomized every time the player enters The Abyss?

It is generated every time the player enters The Abyss.

What happens if you read varbit 625 when you have not yet entered The Abyss in the current login session?

It seems to store whatever value it had the last time you were inside it. My alt, that has never been in The Abyss, has the value of 0.

If it is randomized every time the player enters The Abyss then it might be worth checking if the randomization is predictable. Maybe they only shuffle the values?

From my very limited testing, it doesn't seem to be shuffling or have any predictable pattern. The Talk page for the wiki also goes reasonably deep into the it, but doesn't mention any pattern or predictability. For my few attempts, I got:

1 -> 7 -> 8 -> 8 -> 4 -> 9 -> 1 -> 2 -> 7 -> 8

From my understanding, this is its "lifecycle":

  1. New characters start with the value 0.
  2. Once you enter The Abyss, a random value is generated.
  3. Once you enter the inner rings, the value is reset to 0.
  4. This value is persisted between logins (might reset when servers restart?)

rmobis avatar Aug 05 '25 11:08 rmobis

One solution could be to register all 24 obstacles for all 12 configurations with the appropriate varbit restrictions. We could then register a listener to the VarbitChanged event for varbit 625 where it would refresh the transports and recalculate the path, if there's one active. This wouldn't give the exact path length from the get go, but would be pretty close and would at least give the correct path.

Do you think that's a viable solution? I could work on a PR for that if so.

Yes, this does sound like a good solution. Feel free to work on it. I will soon need something similar for the PoH where I need to update transports, update collision map data and recalculate the path when the player enters the PoH.

Skretzo avatar Aug 05 '25 12:08 Skretzo