Skip to content

[Todo list] Online play #1

Description

@DimitriPilot3
  • Online Play with unknown heroes
    • Bug: ModifyCurrentGameAttribute off-by-one error in the attribute index, causing the wrong attribute to change. Steps to reproduce this:
      1. Have three players find unknown heroes with the area set to "I can't decide!", making sure no one else is searching during that time
      2. The host client will randomly decide the area to play in, which will remain set for the remainder of the session. (At this point, the session stored in the database hasn't been updated yet.)
      3. Have one of the players leave
      • This triggers the ModifyCurrentGameAttribute call, which does update the session in the database, but edits the 2nd attribute instead of the 1st one! As a result, the database still implies that the session has the "I can't decide" area selected
      1. Have the same player find unknown heroes again with the area set to "I can't decide!"
      • That player will rejoin the same session
      1. Have that player leave and find unknown heroes in a different area
      • The game submits two sets of search criterias - one in which the first attribute corresponds to the player's desired area to play, and one in which it sets the first attribute to 0, which will also match existing "I can't decide!" lobbies
      • That player finds the same session as before, but is unable to join and will get a 018-0501 error. This is because the host player wants a different area from the one the other player wants, causing the host client to reject the incoming connection. This is not a NAT traversal error!
    • Possible bug: nex-protocols-common-go: the 2nd matchmake attribute is sorted on, rather than compared against for equality. This means unknown players are matched regardless of their decision to play with or without bonus challenges
  • Online Play with friends
    • Find a friend room hosted by someone in your friend list
    • Join a friend room
    • Start playing with friends
    • (in-progress) Search for unknown heroes while hosting a friend room
      • Calls the following methods: CloseParticipation, UpdateMatchmakeSessionPart, OpenParticipation
      • UpdateMatchmakeSessionPart takes an argument of type UpdateMatchmakeSessionParam, specifying the ID of the matchmake session to edit, which properties to edit, and what to set them to:
        • updates ParticipationPolicy from 98 to 95 and MatchmakeSystemType from 2 to 1
        • updates all attributes (to reflect the desired search conditions: area, bonus challenges, adventuring style)
        • updates the ApplicationBuffer (presumably not important)
        • overrides a few matchmake parameters (the only one that changes is @DR (TypeID 3) from 77 to 0)
      • (in-progress) Implement UpdateMatchmakeSessionPart
      • Prevent friends from joining a friend session whose host player has started looking for unknown heroes
        • Failure to do so can cause desync on the voting screen
        • The steps needed to reproduce this:
          1. player A opens a friend room
          2. player B find existing friend rooms and is prompted to choose a group to join, but waits there
          3. player A starts looking for unknown heroes
          4. player B tries to join the room they found earlier
      • Auto matchmake as soon as a friend room starts looking for unknown heroes
        • Otherwise, if someone on 'Unknown heroes' was already searching with the same conditions, either them or the host of the former friend lobby will have change their conditions back and forth
        • I think auto matchmake is supposed to occur at some point after the OpenParticipation call completes, but i'm not sure how, as neither game client is making additional RMC requests past that point.
  • Remove the region lock from Online Play
    • Option A: Remove the region lock entirely, allowing anyone to be matched regardless of game region.
    • Option B: Remove the region lock when playing with friends, with anyone in the Coliseum, or with unknown heroes in any area except Fortress, Sky Realm, and "I can't decide!". For these 3 area preferences, keep the region lock but allow EU and American heroes to find other EU/Americal sessions so they can play together.
  • Mitigate or prevent multiplayer desync errors that may arise from removing region lock
    • Two of the 32 Drablands levels, found in Fortress and in Sky Temple, feature automated dialogue that differs in timing across different regional copies. Those levels are The Lady's Lair (5-4) and Sky Temple (8-4).
      • EU and American players (who play among themselves) will only experience desync in The Lady's Lair if it is anyone's first time reaching the 4th stage of that level. If it does happen, simply replay the same level with the same people and it won't occur again.
      • Non-EU, non-Americal players are guaranteed to desync in The Lady's Lair and in Sky Temple unless all players are on the same region.
    • To this day, Den of Trials has not been known to cause desyncs.
  • Blacklist feature

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions