In response to reports and concerns about issues connecting successfully to another game in Arcade1Up's NBA Jam, we'd like to offer some suggestions as the developer:
What's Likely Happening
Typically the problem isn't bandwidth. Not yours and not your opponent's unless you have a 20-year-old WiFi router. Most WiFi routers have sufficient bandwidth to support the game's modest needs.
If there's a problem connecting, it's more typically an issue with what's called "NAT restrictions". It's a fancy term for your router's rules on who from the outside world can connect to a machine on your LAN and when.
On Xbox Live, they have a notion of "open", "moderate" and "strict" NATs. You can read more about that here.
Like Xbox Live multiplayer, NBA Jam is peer-to-peer, so it works on similar principles. Two "strict" NATs can't talk to each other, since, basically, neither is willing to let their security guard down first.
If your router is employing a strict NAT and you try to connect to another user who has a strict NAT, it will fail. This is why some users have no issues while others could have a dodgy 50/50 success rate.
What Can I Do?
There are three basic strategies for overcoming this problem, which are similar to what you would do for Xbox:
- Examine your router's security settings. It may have an option to select a less restrictive NAT, such as "Open NAT".
- Your router may allow you to assign your NBA Jam cabinet's LAN IP to a "Demilitarised Zone" (DMZ)
- If your router provides virtual server options, try setting up a virtual server to forward port 1972 to the LAN IP for your NBA Jam machine. If given the option, be sure to allow it to forward UDP (or "both") types of data packets.
But... When a Stall is not a Stall
When someone chooses to join your game, you can set in the Social Options (under the Live menu) what happens. You may want to allow them to pop in without asking, which can result in your game being interrupted unexpectedly at any time. Or, you can choose to have a small "toast" (pop up) appear in the corner announcing someone wants to join. In that case you can let them wait and keep playing until you have a moment you're comfortable being interrupted and are ready to add (or decline) them.
Most people have the second option set for people they don't know. (You can add people you know to your Favourites list, and the rules can be set to be more relaxed for them.)
If you join a game, you will see "Requesting to join ___'s game..." while the machine is waiting for them to answer their popup and decide to add or decline you. You will have to wait as long as they decide to leave the pop up unanswered, or until you give up.
To give up and look for someone else, hit the Live button and select "Leave This Game". (You may also hold P1 Start for 5 seconds to return to the main menu.)
Dispelling Some Other Myths
Before we close off, we'd like to dispell a few myths about peer-to-peer and our netcode in particular:
- Peer-to-peer vs. servers: it's generally not true that server-based online multiplayer gives better performance than peer-to-peer in a game like this. Peer-to-peer is direct communication between two machines while server-based multiplayer requires the data to take a detour through a third party server. Unless you and your opponent both have a better routing to that server than the direct line from A (you) to B (them), latency will actually be higher through a server than via peer-to-peer. If it's something like Google then you might both reach different Google servers quickly and those servers may have an "express route" to each other, but that's an infrastructure out of reach of most companies without their resources. When a game server is involved, they tend to offer two advantages: (a) they can punch through restrictive NATs easier, which can help with these router issues, and (b) for arena style games (e.g. Call of Duty) the loss of performance is worth it because it's easier to synchronise a lot of players on a big map (whereas we just share user inputs where everyone is on one screen). That said, even Xbox doesn't offer server-mediated online gameplay on its own servers.
- Arcade1Up NBA Jam does use a server to help you find other machines and to maintain your high scores. It only hands off to peer-to-peer for game play.
- There is no host advantage in a match. While it's true some peer-to-peer netcode may offer an advantage in responsiveness vs. visiting guest players, we have designed our netcode to be "democratic." If your Ping (data round trip time) with your opponent is 100ms, we'll allocate 50ms of that delay to your inputs and 50ms of that delay to your opponent. It doesn't matter who the "host" was. The only advantages the host has are (a) being the person whose game is shared with newcomers and (b) having the privilege to kick guests.
- No one's input can lag by more than about half a second. There have been suggestions that your opponent's inputs can be many seconds behind you in the game, but this isn't possible. If the input lag exceeds around 1/3 to 1/2 a second for any player, the game will stall to allow them to catch up. It doesn't have the ability to store a multi-second history of inputs. So a poor connection which can't keep up would stutter rather than lag. If the game stalls for 4 seconds, it will disconnect.
- Rage quitters don't steal your win. It's true a person can leave a game when they're losing, but it's roughly the same as them walking away from the controls. You can still finish the game and record the win for yourself against their now-defenceless players. Control of their players even returns to you (at their respective player stations) should you need to move them to aid in finishing the game. That said, a game will only count toward your record if you were in it from the start. If you weren't asked to enter you initials and birthday (or if you don't play all four quarters), your win or loss won't be recorded.