Hosting an out-of-region local multiplayer game

Discussion in '3DS - ROM Hacking, Translations and Utilities' started by Neobeo, Dec 21, 2016.

  1. Neobeo
    OP

    Neobeo Advanced Member

    Newcomer
    58
    41
    Jul 20, 2008
    So it is well-established that certain games will not allow you to host a local multiplayer game if you are using the wrong region. I've quoted a couple of them here:
    This is with Luma v6.6, regardless of the locale settings. Things like playing online always work fine. I believe joining a local multiplayer game also works fine (though the game would need to have been hosted by a console of the correct region).

    I haven't found any success on gbatemp.net or otherwise on how to get around this, so decided to investigate a bit further. I believe the problem is caused by the system trying to host a Download Play copy. For the purpose of this thread, I'm not interested in Download Play, so I'm wondering if this problem can be solved by simply eliminating the Download Play part somehow. I'm also not interested in trying to get different regions to play together, e.g. EUR Tetris with USA Tetris.

    My question is thus as follows: Is it feasible to patch out the code that shares the Download Play, perhaps on a per-title basis? I'm thinking anything beyond this is probably too difficult. Would this be as simple as NOPping some instructions in code.bin, or do you think we'd need to play around with modifying some NCCH headers and/or other partitions?

    (Or maybe this problem has in fact already been solved and I just haven't found it)
     
  2. Neobeo
    OP

    Neobeo Advanced Member

    Newcomer
    58
    41
    Jul 20, 2008
    After some research, it appears that DLPSRVR:Initialize is failing due to the region mismatch. Of course we don't have any control over how/when it fails.

    I figured Luma was somehow modifying Cfg:SecureInfoGetRegion for the locales patch, and was hoping we might adapt their patch to our situation. But upon further investigation it seems Luma doesn't actually "patch" that method, it just replaces the call with the intended return value. Which doesn't quite work for DLPSRVR:Initialize assuming we want it to initialize.

    This leaves us with two options:
    1. Try to get Download Play working (in some form) after all. The easiest way that comes to mind would probably to just modify the download play partition/cia so that it matches the system's region. It's then not clear whether it would fail some sort of hash/signature checks, but it'll probably work. An extension to this idea, if it works, is to probably get Luma to update the Download Play cia on-the-fly.
    2. Prevent Download Play from doing anything at all, as was the original idea. Meaning we still host the multiplayer game, but we'd have to sift through all instances of when DLPSRVR is used to do something, and replace that with some "do-nothing" code that "makes sense". Which would probably require actually understanding all the operations of DLPSRVR. In most cases NOPping would probably suffice, but it still seems like quite a fair bit of effort.
    I think option 1 seems more attractive at this point.
     
  3. total_split

    total_split Member

    Newcomer
    14
    4
    Mar 4, 2008
    United States
    I have a US and European 3ds and run into this too when trying to multiplayer, its really frustrating.

    One thing i have observed is with Terraria, I can successfully multiplayer between both systems as long as no updates are installed. even if both copies have the same level of update patches they wont talk to each other, and i've tried both systems with the Europe version, and mixing US/EUR. if i remove all Terraria updates they will play together. I haven't been messing with luma region patching in this case as the game already starts without it

    I think the game itself also has to cooperate or be hacked to work, as well as the download play / 3ds components hacked or patched somehow.
     
  4. Neobeo
    OP

    Neobeo Advanced Member

    Newcomer
    58
    41
    Jul 20, 2008
    From my experience, the updates don't really affect anything. If I had to guess why your Terraria updates worked without the updates, it would be either than the download play child (for the base game) was already region patched, or that the base game didn't have a download play option at all.

    In any case, I've fixed this in a recent Luma commit.
     
    DarkSynopsis likes this.
  5. DarkSynopsis

    DarkSynopsis GBAtemp Fan

    Member
    392
    234
    Oct 15, 2014
    New Zealand
    New Zealand
    Surprised it took this long! love that its fixed! look forward to the next stable Luma that has it :)