Forum: General Online
Page 1 of 1
"Hello there! I'm dude22072, and back in November along with my friend Ioncannon we reverse engineered the Capcom fighting games that used the KDDI service. However, we ran into a roadblock that seemingly can only be solved with creating new hardware to work alongside DreamPi setups. After not touching it for months we figured it would probably be best to post the work we've done to the wider community, both for the sake of documentation and as a call for assistance in solving this roadblock. Here's what we've discovered and how you can potentially help.
This is the name that Capcom gave to their service that was used across 15 games. All of the game that use this service have a singled shared configuration file (referred to as the "NET File", saved as "CAP_NET_.NET") that stores a nickname, a user ID, ZIP code, a phone number (more on this later), and your limit as to how much you're willing to spend per month on the service (it cost 13yen/minute while you were in a match). When filling out the information and attempting to connect to the server to register it instead of the dreamcast dialing your ISP it will instead specifically dial the number "186005363011102". When using a DreamPi setup we could not get it to connect to our server emulator, however when using an old Windows XP machine with Internet Connection Sharing and a dial-in interface setup it connected and was able the create the NET File without any issues. Maybe the game is looking for something Windows specific? Maybe the DreamPi isn't emulating something properly? Ion also had issues with it not working over his PortMaster setup so it would seemingly be the former. Whatever the issue may be there, we now have our NET File and can move on to actually connecting to Capcom Direct.
Now, the Capcom Direct service was simply the matchmaking, lobby, and ranking side of things, and actual matches would take place over the KDDI network. After going through the matchmaking process it is decided who will be on the P1 side and who will be on the P2 side and this information is sent to the two players, along with the phone number the players setup in their respective NET Files. After this the dreamcast disconnects from your ISP. One player's dreamcast enters a mode waiting for the phone line to ring, while the other player's dreamcast attempts to dial the number previous sent to them. This opens a direct serial connection between the two dreamcast modems rather than the PPP connection that is used to connect to an ISP/DreamPi. After the match takes place both players disconnect from each other and reconnect to their ISP to report the results of the match to the server.
So why exactly would we need some new hardware for this? Well, the issue comes from one of the dreamcasts waiting for the phone line to ring. This is because a phone line ringing is not a simple DC signal or a sound that could be played from the modem like DreamPi does with the dial tone, instead a phone line ringing is actually caused by a 20Hz 90v RMS AC signal (North American standard). So the roadblock becomes: 1) how do we generate this signal, 2) how do we determine when the dreamcast has answer the line to stop generating the signal, and 3) how do we actually connect the two dreamcasts directly together without an ISP in-between. One theory I had was to take two Subscriber Line Interface Circuit (SLIC) chips and just connect the TX/RX of them to each other and to connect the Ring Enable/Ring Signal/Off Hook Signal to the RPi's GPIO pins to generate the ring and detect when the dreamcast had answered. The specific chips I was looking at were the "Ag1171S" chips from Silvertel, however due to them being a low need product or simply supply issues from current world events they have a lead time of 29 weeks on them. If you ordered one off of mouser today it wouldn't show up until December. I'm unsure if simply going the old route of using a Phone Line Simulator would be enough, but even if it is discovering a cheaper option would probably be preferred by most people. As for solving the third issue I mentioned, it could be as simple as having the user pre-register with the service to generate a unique number to use as the phone number during the dreamcast signup process, and then having another service running on the DreamPi (a la DCVoip, DCGameSpy, etc) to deal with handling the connection between the two by connecting to the service and establishing a P2P connection between the DreamPis accordingly, and then potentially using some sort of Serial over TCP connection to get the two modems talking to each other.
So that's where things currently stand. Solving this hardware issue (which personally I'd love for it to be called something like "DreamPi-Direct") would be useful not just for Capcom games, but for ALL games that use the KDDI service, which is a decent number of the still currently offline games (hence the "15+" in the title). The source of our Capcom Direct emulator is publicly available on GitHub (iirc there's an issue with the build not making an NLOG config file so throw one in the output directory after building). Everything about registering and using the lobby was tested to work except for reporting the results of the match back to the server as we could never get into a match without solving the ringing issue. Also shoutouts to pcwzrd13, kazade, and shuouma. We had an email chain with them at one point to discuss how the Gundam server worked due to how similar it is to the Capcom service, even if we weren't able to use much of it in the end. And finally here's an imgur album of some images Ion took while working on the server to show that it does indeed work with a real dreamcast."