Git Product home page Git Product logo

gdxsv's Introduction

LICENSE GitHub go.mod Go version of a Go module GoReportCard example codecov

Mobile Suit Gundam: Federation vs. Zeon & DX private game server.

The brother project zdxsv is here.

Introduction

Mobile Suit Gundam: Federation vs. Zeon was released on Playstation2 and Dreamcast. This game has online mode, but the service ended in 2004. This project aims to keep the online mode alive for fans.

Running Server links

Contributors ✨

All Contributors

Thanks goes to these wonderful people (emoji key):

Shingo INADA
Shingo INADA

πŸ’»
vkedwardli
vkedwardli

πŸ’» πŸ’΅
Ming Chan
Ming Chan

πŸ’» πŸ’΅
Q-SJO-Q
Q-SJO-Q

πŸ’΅
crazytaka3
crazytaka3

πŸ’΅
HK-DX-Players
HK-DX-Players

πŸ’΅
SMGMpartner
SMGMpartner

πŸ’΅
migu
migu

πŸ’΅
kyafun
kyafun

πŸ’΅
shiotarosan
shiotarosan

πŸ’΅
pantirarism
pantirarism

πŸ’΅
Moumann
Moumann

πŸ’΅

This project follows the all-contributors specification. Contributions of any kind welcome!


Build and Run

Requirements to build

  • Go 1.16 or newer with CGO
  • stringer. (Run make install-tools to install)
  • protoc-gen-go (Run make install-tools to install)
  • protoc v3.6.1 (if modify .proto files)

Build and Run gdxsv

  1. Clone this repository
  2. Run make then bin/gdxsv is generated. (cgo required)
  3. Run ./bin/gdxsv initdb, then gdxsv.db is generated.
  4. Edit build_run.sh to fix server address. (set you PC's address. Don't edit the port number.)
  5. Run ./bin/gdxsv lbs. This command serves one lobby and one matching server.

LBS and MCS architecture

There are two ways to run the gdxsv binary.

  1. lbs serves a lobby and a match server one by one.
  2. mcs serves only a match server and connects to the parent lbs.

This allows one lobby server to manage match servers around the world. There is a CloudFunction script in the mcsfunc directory that launches mcs on GCP.

Using only the lbs command to act as a standalone lobby and match server. (This is especially useful during local development.)

Configulations

Environment variables

  • GDXSV_LOBBY_PUBLIC_ADDR : Specifies the TCP address that used when a mcs connects to a lbs.
  • GDXSV_LOBBY_ADDR : Specifies the TCP address that the lbs listens on. Currently only the port number is used.
  • GDXSV_BATTLE_PUBLIC_ADDR : Specifies the TCP/UDP address that a client will use to connect with TCP/UDP.
  • GDXSV_BATTLE_ADDR : Specifies the TCP/UDP address that the mcs listens on. Currently only the port number is used.
  • GDXSV_BATTLE_LOG_PATH : Specifies a file path that will be used to save battle log file.
  • GDXSV_GCP_PROJECT_ID : Specifies the project id of Google Cloud Platform. Required if you use mcsfunc or CloudProfiler.
  • GDXSV_GCP_KEY_PATH : Specifies a GCP Service Account keyfile that have permission for following roles.
    • roles/cloudfunctions.invoker
    • roles/cloudprofiler.agent
  • GDXSV_MCSFUNC_URL : Specifies a URL of mcsfunc that you deployed.

Commandline arguments

Usage: gdxsv <Flags...> [lbs, mcs, initdb, migratedb]

  lbs: Serve lobby server and default battle server.
    A lbs hosts PS2, DC1 and DC2 version, but their lobbies are separated internally.

  mcs: Serve battle server.
    The mcs attempts to register itself with a lbs.
    When the mcs is vacant for a certain period, it will automatically end.
    It is supposed to host mcs in a different location than the lobby server.

  initdb: Initialize database.
    It is supposed to run this command before you run lbs first time.
    Note that if the database file already exists it will be permanently deleted.

  migratedb: Update database schema.
    It is supposed to run this command before you run updated gdxsv.

  battlelog2json: Convert battle log file to json.

Flags:

  -cprof int
        0: disable cloud profiler, 1: enable cloud profiler, 2: also enable mtx profile
  -cpu int
        setting GOMAXPROCS (default 2)
  -mcsdelay duration
        mcs room delay for network lag emulation
  -noban
        not to check bad users
  -pprof int
        0: disable pprof, 1: enable http pprof, 2: enable blocking profile (default 1)
  -prodlog
        use production logging mode
  -v int
        logging level. 1:error, 2:info, 3:debug (default 2)

Directory structures

gdxsv

The gdxsv directory contains main server program.

flycast

The flycast directory is a submodule, that is flycast fork customized for the development of this server.

It contains some dirty code for gdxsv, but I would like to deliver the artifacts upstream someday....

You can download the latest version of flycast built for gdxsv from the Release page of this repository.

pcsx2

The pcsx2 directory is a submodule, that is pcsx2 fork customized for the development of this server. I don't expect to play with this for now, but PS2 version has a lot of debug symbols left and useful for analysis.


LICENSE

All server-side codes are AGPL-3.0 Licensed. Submodules and dependent packages are subject to their respective licenses.

gdxsv's People

Contributors

allcontributors[bot] avatar dependabot[bot] avatar hamcha avatar htc001120 avatar inada-s avatar vkedwardli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gdxsv's Issues

MCS is dead but Lobby think it is alive

The Hong Kong and Tokyo battle servers are not working now (6:22AM GMT+9). Seems to be not allocated, but Lobby just transfer all players immediately right after θ‡ͺ動選拔, then stuck in black screen and time out and go back to main lobby.

I tried allocating a new region (Taiwan), and it is working after waiting the MCS to be allocated.

[Flycast] Porting Arcade Machines' characteristic to DC

I'm redirecting a popular request from HK players:

They would love all the "bugs" (or feature) to be ported back to the Dreamcast version.

e.g.

  1. MSM-03 ゴッグ severe damage bug
  2. Zaku angled dash + shooting machine gun -> cannot fly up by boost in the Dreamcast version

This is possible in the arcade:
Oct-25-2020 16-54-37

fix playerpositions

Regardless of the order of entry, set like the following

1p-4p
Renpo-Renpo-Zeon-Zeon

Change default rule

  • set stage side7
  • disable MA(ビグ・アム、をッアム、Gフゑむター)
  • set time 210sec

global battle server

Still in the conceptual stage.
Prepare mcs in each region of GCP, and launch a preemptible instance only when playing a match.

Battle initial implementation

goal

  • Enter the battle scene and go back to lobby.
  • Save battle records.
  • Don't think about performance issues right now.

Fix quit handler

goal

  • fix signal handler to check only signals that the lobby is going to quit.

#6 (comment)

I'm getting Got signal: urgent I/O condition on mac immediately if run with -dump.
Without -dump I can run the server for a while and then the same error would appear.

Prepare website

We have to prepare a web page to:

  • explain how to connect
  • see who is logged in

Ping limited lobby

Measure latency between player and for each gcp region, and prevent entry into fixed region lobbies.

"UNSUPPORTED LOGIN TYPE" when connecting

Hello,

I am trying to connect on my Dreamcast, and I'm having this issue:

image

I've tried connecting locally with a homemade server and with Flycast, but the issue persists.

LOG:

2020-10-31T13:36:18.782Z        INFO    gdxsv/lbs.go:100        a new connection open   {"addr": "192.168.1.16:52282"}
2020-10-31T13:36:18.783Z        INFO    gdxsv/lbs.go:228        eventPeerCome   {"addr": "192.168.1.16:52282"}
2020-10-31T13:36:18.783Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [Q][]\n lbsAskConnectionID (ID:0x6102) Seq:471 Body(0 bytes): "}
2020-10-31T13:36:19.001Z        INFO    gdxsv/lbs.go:233        eventPeerMessage        {"addr": "192.168.1.16:52282", "msg": "C->S [A][0 8 57 53 52 52 49 49 57 57]\n lbsAskConnectionID (ID:0x6102) Seq:0 Body(10 bytes): 00083935343431313939"}
2020-10-31T13:36:19.002Z        INFO    gdxsv/lbs_handler.go:205        update session id       {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619"}
2020-10-31T13:36:19.002Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [Q][0 8 51 52 53 50 56 54 49 57]\n lbsConnectionID (ID:0x6101) Seq:472 Body(10 bytes): 00083334353238363139"}
2020-10-31T13:36:19.121Z        INFO    gdxsv/lbs.go:233        eventPeerMessage        {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619", "msg": "C->S [A][]\n lbsConnectionID (ID:0x6101) Seq:0 Body(0 bytes): "}
2020-10-31T13:36:19.122Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [N][0]\n lbsWarningMessage (ID:0x6103) Seq:473 Body(1 bytes): 00"}
2020-10-31T13:36:19.501Z        INFO    gdxsv/lbs.go:233        eventPeerMessage        {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619", "msg": "C->S [Q][0 4 49 48 48 48]\n lbsRegulationHeader (ID:0x6820) Seq:0 Body(6 bytes): 000431303030"}
2020-10-31T13:36:19.502Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [A][0 4 49 48 48 48 0 4 49 48 48 48]\n lbsRegulationHeader (ID:0x6820) Seq:0 Body(12 bytes): 000431303030000431303030"}
2020-10-31T13:36:19.503Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [N][0 3 116 97 103 0 4 116 101 120 116]\n lbsRegulationText (ID:0x6821) Seq:474 Body(11 bytes): 0003746167000474657874"}
2020-10-31T13:36:19.503Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [N][]\n lbsRegulationFooter (ID:0x6822) Seq:475 Body(0 bytes): "}
2020-10-31T13:36:19.504Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [Q][]\n lbsLoginType (ID:0x6110) Seq:476 Body(0 bytes): "}
2020-10-31T13:36:19.841Z        INFO    gdxsv/lbs.go:233        eventPeerMessage        {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619", "msg": "C->S [A][0]\n lbsLoginType (ID:0x6110) Seq:0 Body(1 bytes): 00"}
2020-10-31T13:36:19.842Z        INFO    gdxsv/lbs_handler.go:291        unsupported login type  {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619", "login_type": 0}
2020-10-31T13:36:19.842Z        DEBUG   gdxsv/lbs.go:572        lobby -> client {"addr": "192.168.1.16:52282", "msg": "C<-S [N][0 47 60 76 70 61 53 62 60 66 79 68 89 62 60 67 69 78 84 69 82 62 85 78 83 85 80 80 79 82 84 69 68 32 76 79 71 73 78 32 84 89 80 69 60 69 78 68 62]\n lbsShutDown (ID:0x6003) Seq:477 Body(49 bytes): 002f3c4c463d353e3c424f44593e3c43454e5445523e554e535550504f52544544204c4f47494e20545950453c454e443e"}
2020-10-31T13:36:20.041Z        INFO    gdxsv/lbs.go:233        eventPeerMessage        {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619", "msg": "C->S [N][]\n lbsLogout (ID:0x6002) Seq:0 Body(0 bytes): "}
2020-10-31T13:36:20.059Z        INFO    gdxsv/lbs.go:604        tcp read error  {"error": "EOF"}
2020-10-31T13:36:20.060Z        INFO    gdxsv/lbs.go:254        eventPeerLeave  {"addr": "192.168.1.16:52282", "last_session_id": "95441199", "session_id": "34528619"}```

Detect platform

goal

  • Establishes a way to distinguish between DC1 and DC2

Out sync during battle

Sometimes this would happen right after reborn, could be time difference for "when can player start moving after reborn", seems never happen during Battle Start.

Game didn't show Connection Issue or disconnect, from player perspective the opponent's movement becomes unreasonable.

Testing environment:
macOS (server + Flycast) + Windows, both using Wi-Fi, over internet

Will try to screencap both screen for further investigation

update mcs fluentd

Logs cannot be collected because the installation commands has changed.

Separate lobby settings by platform

My recent changes have focused too much on the flycast.
In order not to confuse the normal DC version player, we have to separate the settings for each platform.

Connect to lobby server (dc)

goal

  • Manage modem handshake and connect to lobby server from Dreamcast Emulator.

@vkedwardli said at #2 (comment)

From my investigation, as long as we can emulate the correct server response, it is better to use https://github.com/flyinghead/flycast with the DC version.

Attached is the MODEM log (I've added the modem reg write log myself)

D[MODEM]: ModemNormalWrite : TBUFFER = 1
I[MODEM]: MODEM Dialing
D[MODEM]: modem reg 010 write 1
D[MODEM]: ModemNormalWrite : TBUFFER = 8
D[MODEM]: modem reg 010 write 8
D[MODEM]: ModemNormalWrite : TBUFFER = 6
D[MODEM]: modem reg 010 write 6
D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 1 RDBF 0
D[MODEM]: Switching to RINGING state
D[MODEM]: 		 *** RINGING STATE ***
D[MODEM]: modem reg 010 write 0
D[MODEM]: modem reg 010 write 0
D[MODEM]: modem reg 010 write 5
D[MODEM]: modem reg 010 write 3
D[MODEM]: modem reg 010 write 6
D[MODEM]: modem reg 010 write 3
D[MODEM]: modem reg 010 write 1
D[MODEM]: modem reg 010 write 3
D[MODEM]: modem reg 010 write 1
D[MODEM]: modem reg 010 write 2
D[MODEM]: modem reg 010 write 0
D[MODEM]: modem reg 010 write 3
D[MODEM]: modem reg 001 write 40
D[MODEM]: modem reg 01D write A 
D[MODEM]: modem reg 01D write A 
D[MODEM]: modem reg 01D write 2A 
D[MODEM]: modem reg 01C write A1 
D[MODEM]: modem reg 018 write C2 
D[MODEM]: modem reg 019 write 8 
D[MODEM]: DSP mem Write (w) address 00000aa1 = 8c2

When the modem is going into the ringing state, it reads + dial the number from the 010 register.

So the DC version is using the MODEM to dial to 186-0053-63-13-1203, which matches the KDDI ISDNε›žη·š, also according to the KDDI call menu0053-63 is out of service.

From the PS2 MIPS code, I also found the game is dialing to a very similar number:

186-0053-63-13-1202

Finally the below is the full modem log, you can find that the game instructed the modem to dial a number, handshake correctly and the connection is established successfully. (all by modem emulation, no connection is made actually) Then the game is waiting for the initial data from the server, timed out, and close the connection (reset the modem)

 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:144 D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 0 RDBF 0
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000006a9 = 7
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=76
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000009f == 0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000009f == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000010f = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021e = 1
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021f = d2
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:144 D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 0 RDBF 0
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000006a9 = 7
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=76
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000009f == 0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000009f == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000010f = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021e = 1
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021f = d2
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:144 D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 0 RDBF 0
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000006a9 = 7
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=76
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa1 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa2 = ee7c
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa3 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa4 = c774
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa5 = 74fe
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba1 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba2 = 1184
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba3 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba4 = cd4f
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba5 = 6495
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba0 = 7b30
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa0 = 4cf
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab8 = 500
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb8 = 500
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa7 = 205
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa8 = fbf9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa9 = 206
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aaa = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aab = d22d
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba7 = 205
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba8 = 380
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba9 = 206
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000baa = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bab = d1f8
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba6 = 7e67
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa6 = 2df
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab9 = 2a00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb9 = 1c00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab2 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab3 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab4 = 7fff
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab5 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab6 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb2 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb3 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb4 = 7fff
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb5 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb6 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aad = 244
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aae = fb7b
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aaf = 245
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab0 = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab1 = 35a7
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bad = 244
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bae = ca
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000baf = 245
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb0 = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb1 = 3574
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bac = 7e67
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aac = 2df
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aba = 2a00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bba = 1c00
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=76
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029b = 11b2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029c = 11
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029d = 1648
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029e = 16
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000218 = ed
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002db = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000219 = ed
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002dc = 0
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=81
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=81
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029b = 11b2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029c = 11
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029d = 1648
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 0000029e = 16
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000218 = ed
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002db = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000219 = ed
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002dc = 0
 hw/modem/modem.cpp:504 D[MODEM]: ModemNormalWrite : TBUFFER = 1
 hw/modem/modem.cpp:507 I[MODEM]: MODEM Dialing
 hw/modem/modem.cpp:504 D[MODEM]: ModemNormalWrite : TBUFFER = 8
 hw/modem/modem.cpp:504 D[MODEM]: ModemNormalWrite : TBUFFER = 6
 hw/modem/modem.cpp:144 D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 1 RDBF 0
 hw/modem/modem.cpp:172 D[MODEM]: Switching to RINGING state
 hw/modem/modem.cpp:186 D[MODEM]: 		 *** RINGING STATE ***
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa1 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa2 = ee7c
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa3 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa4 = c774
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa5 = 74fe
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba1 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba2 = 1184
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba3 = 8c2
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba4 = cd4f
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba5 = 6495
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba0 = 7b30
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa0 = 4cf
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab8 = 200
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb8 = 200
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa7 = 205
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa8 = fbf9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa9 = 206
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aaa = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aab = d22d
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba7 = 205
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba8 = 380
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba9 = 206
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000baa = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bab = d1f8
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ba6 = 7e67
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aa6 = 2df
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab9 = 2a00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb9 = 1c00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab2 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab3 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab4 = 7fff
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab5 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab6 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb2 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb3 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb4 = 7fff
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb5 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb6 = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aad = 244
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aae = fb7b
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aaf = 245
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab0 = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000ab1 = 35a7
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bad = 244
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bae = ca
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000baf = 245
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb0 = c147
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bb1 = 3574
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bac = 7e67
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aac = 2df
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000aba = 2a00
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 00000bba = 1c00
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000305 == 4028
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000304 == 28c0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000306 = 2840
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000307 = 2803
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000308 = 2884
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000304 = 28c0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000305 = 2828
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000013f == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000013f = 40
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000100 == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000100 = 0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000105 == 0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000101 == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000105 = f0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000101 = 38
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c4 = 99
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c5 = 9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c6 = 99
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c7 = 9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c0 = 99
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c1 = 9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c2 = 99
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000002c3 = 9
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000309 = ce
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000382 = e0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000383 = 3f
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 00000304 = c8
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000006a3 = 0
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=aa
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write (w) address 000003da = 4000
 hw/modem/modem.cpp:624 D[MODEM]: NEWC CONF=aa
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000304 == 28c8
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 000003a5 == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 000003a5 = 10
 hw/modem/modem.cpp:450 D[MODEM]: DTR asserted. starting handshaking
 hw/modem/modem.cpp:490 D[MODEM]: TPDM = 0 ASYN = 0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000010d == 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000010d = 8
 hw/modem/modem.cpp:144 D[MODEM]: Stats sent 0 (0.00 kB/s) received 0 (0.00 kB/s) TDBE 1 RDBF 0
 hw/modem/modem.cpp:195 D[MODEM]: 		 *** HANDSHAKING STATE ***
 hw/modem/modem.cpp:211 I[MODEM]: MODEM Connected
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 00 == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 01 == 40
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 02 == 41
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 03 == 10
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 04 == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 05 == 08
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 06 == 00
2020-03-16 18:14:01.364453+0800 Flycast[6447:5796323] hw/modem/picoppp.cpp:716 I[MODEM]: pico_thread_func: fuck
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 07 == 82
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 08 == 01
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 09 == 35
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0a == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0b == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0c == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0d == 02
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0e == 02
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 0f == d0
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 10 == 03
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 11 == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 12 == a1
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 13 == 79
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 14 == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 15 == 31
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 16 == 74
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 17 == ff
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 18 == 08
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 19 == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1a == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1b == 00
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1c == 0d
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1d == 01
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1e == 08
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 1f == 08
 hw/modem/modem.cpp:281 D[MODEM]: modem_regs 20 == 00
2020-03-16 18:14:01.441888+0800 Flycast[6447:5796323] hw/modem/picoppp.cpp:643 I[MODEM]: My IP is XXX.XX.XXX.XXX
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000026b = 20
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000026c = 64
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000026d = 60
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000302 == e0d8
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 00000303 == c8e0
 hw/modem/modem.cpp:603 D[MODEM]: DSP mem Read address 0000009f == 0
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...
 hw/modem/modem.cpp:440 I[MODEM]: MODEM Reset
 hw/modem/modem.cpp:374 D[MODEM]: DSPTestStart
 hw/modem/modem.cpp:367 D[MODEM]: DSPTestEnd
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000010f = 0
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021e = 1
 hw/modem/modem.cpp:583 D[MODEM]: DSP mem Write address 0000021f = d2
 hw/modem/modem.cpp:431 D[MODEM]: Modem reset start ...

Go Into NetworkMode (ps2)

Probably this is the most difficult phase of creating GDX server.

There is a talk of making a Dreamcast version of the game server, but there are a lot of debug symbols left in the PS2 version of the game, so I plan to develop a server based on the PS2 version.

I believe the Dreamcast and PS2 versions to be served on almost the same game server.

Fix the lobby to accept the DC version

goal

  • Modify lobby features can be used in the dc version.

We cannot enter lobby scene from DC version.
There are some features that worked on the PS2 version but not the DC version.

Rule bug

Failed to take copy and rule is broken. Other lobby settings are mixed.

LICENSE

Prepare the license notation in this repository

UDP Support

In zdxsv, I introduced the UDP proxy and dramatically improve lag.
I'll get started after the client-side implementation is established.

p2p implementation

I decided to focus on the emulator version, so I no longer need to exchange packets via mcs servers.
I will not disable actual dc/ps2, but will implement p2p mode.

Lobby initial development

goal

  • To be able to visit all pages in the lobby server.
  • It's ok to be displayed temporary strings values.

Network lag (dc)

goal

  • Players under 50ms ping can play smoothly on 5fr pad-delay limit.

Support custom DNS server for dc ver

goal

  • Prepare a DNS server for DC to connect to lobby server without editing original hostname in binary.

The flycast supports adding custom DNS server in the emu.cfg
We have to modify to use this.

#6 (comment)

Connect battle server (dc)

The modem devil is coming again
DC version fails to connect battle server.

This game can only be played by four players, and it is difficult to debug because it is different from pcsx2.

Network module replacement (ps2)

The embedded protocol stack AVE_TCP is installed as irx modules in the PS2 game.
In the original implementation, the game communicate with game server through this module.
I think it is difficult to reuse this well, so it is better to develop the replacement module using ps2sdk's tcpip and use it instead of AVE_TCP.

I have no knowledge of the irx module, so I have to start with a survey. Fortunately, the irx module in the game still has debug symbols.

In the future, it may be better to provide patches for the original game iso image.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.