add support for all DC versions

This commit is contained in:
Martin Michelsen
2023-10-03 17:56:50 -07:00
parent 37c4cbd8f3
commit bc22327361
3 changed files with 18 additions and 18 deletions
+13 -14
View File
@@ -56,26 +56,25 @@ See TODO.md for a list of known issues and future work.
newserv supports several versions of PSO. Specifically: newserv supports several versions of PSO. Specifically:
| Version | Login | Lobbies | Games | Proxy | | Version | Login | Lobbies | Games | Proxy |
|----------------|--------------|--------------|--------------|--------------| |----------------|--------------|--------------|--------------|--------------|
| DC Trial | Yes (4) | Yes (4) | Yes (4) | No | | DC Trial | Yes (3) | Yes (3) | Yes (3) | No |
| DC Prototype | Yes (4) | Yes (4) | Yes (4) | No | | DC Prototype | Yes (3) | Yes (3) | Yes (3) | No |
| DC V1 | Yes (1) | Yes | Yes | Yes | | DC V1 | Yes | Yes | Yes | Yes |
| DC V2 | Yes (1) | Yes | Yes | Yes | | DC V2 | Yes | Yes | Yes | Yes |
| PC | Yes | Yes | Yes | Yes | | PC | Yes | Yes | Yes | Yes |
| GC Ep1&2 Trial | Untested (2) | Untested (2) | Untested (2) | Untested (2) | | GC Ep1&2 Trial | Untested (1) | Untested (1) | Untested (1) | Untested (1) |
| GC Ep1&2 | Yes | Yes | Yes | Yes | | GC Ep1&2 | Yes | Yes | Yes | Yes |
| GC Ep1&2 Plus | Yes | Yes | Yes | Yes | | GC Ep1&2 Plus | Yes | Yes | Yes | Yes |
| GC Ep3 Trial | Yes | Yes | Partial (5) | Yes | | GC Ep3 Trial | Yes | Yes | Partial (4) | Yes |
| GC Ep3 | Yes | Yes | Yes | Yes | | GC Ep3 | Yes | Yes | Yes | Yes |
| XBOX Ep1&2 | Untested (2) | Untested (2) | Untested (2) | Untested (2) | | XBOX Ep1&2 | Untested (1) | Untested (1) | Untested (1) | Untested (1) |
| BB (vanilla) | Yes | Yes | Yes (3) | Yes | | BB (vanilla) | Yes | Yes | Yes (2) | Yes |
| BB (Tethealla) | Yes | Yes | Yes (3) | Yes | | BB (Tethealla) | Yes | Yes | Yes (2) | Yes |
*Notes:* *Notes:*
1. *DC support has only been tested with the US versions of PSO DC. Other versions probably don't work, but will be easy to add support for. Please submit a GitHub issue if you have a non-US DC version, and can provide a log from a connection attempt.* 1. *newserv's implementations of these versions are based on disassembly of the client executables and have never been tested.*
2. *newserv's implementations of these versions are based on disassembly of the client executables and have never been tested.* 2. *BB games are mostly playable, but there are still some unimplemented features (for example, some quests that use rare commands may not work). Please submit a GitHub issue if you find something that doesn't work.*
3. *BB games are mostly playable, but there are still some unimplemented features (for example, some quests that use rare commands may not work). Please submit a GitHub issue if you find something that doesn't work.* 3. *Support for PSO Dreamcast Trial Edition and the December 2000 prototype is somewhat incomplete and probably never will be complete. These versions are rather unstable and seem to crash often, but it's not obvious whether it's because they're prototypes or because newserv sends data they can't handle.*
4. *Support for PSO Dreamcast Trial Edition and the December 2000 prototype is somewhat incomplete and probably never will be complete. These versions are rather unstable and seem to crash often, but it's not obvious whether it's because they're prototypes or because newserv sends data they can't handle.* 4. *Creating a game works and battle setup behaves mostly normally, but starting a battle doesn't work.*
5. *Creating a game works and battle setup behaves mostly normally, but starting a battle doesn't work.*
## Setup ## Setup
+1 -1
View File
@@ -306,7 +306,7 @@ void on_disconnect(shared_ptr<Client> c) {
static void set_console_client_flags(shared_ptr<Client> c, uint32_t sub_version) { static void set_console_client_flags(shared_ptr<Client> c, uint32_t sub_version) {
if (c->channel.crypt_in->type() == PSOEncryption::Type::V2) { if (c->channel.crypt_in->type() == PSOEncryption::Type::V2) {
if (sub_version < 0x28) { if (sub_version <= 0x28) {
c->channel.version = GameVersion::DC; c->channel.version = GameVersion::DC;
c->log.info("Game version changed to DC"); c->log.info("Game version changed to DC");
} else if (c->version() == GameVersion::GC) { } else if (c->version() == GameVersion::GC) {
+4 -3
View File
@@ -40,20 +40,21 @@ uint32_t flags_for_version(GameVersion version, int64_t sub_version) {
} }
break; break;
// TODO: Which other sub_versions of DC v1 and v2 exist? case 0x20: // DCNTE, possibly also DCv1 JP
case 0x20: // DCNTE
case 0x21: // DCv1 US case 0x21: // DCv1 US
// In the case of DCNTE, the IS_DC_TRIAL_EDITION flag is already set when // In the case of DCNTE, the IS_DC_TRIAL_EDITION flag is already set when
// we get here, so the remaining flags are the same as DCv1 // we get here, so the remaining flags are the same as DCv1
return Client::Flag::IS_DC_V1 | return Client::Flag::IS_DC_V1 |
Client::Flag::NO_D6 | Client::Flag::NO_D6 |
Client::Flag::NO_SEND_FUNCTION_CALL; Client::Flag::NO_SEND_FUNCTION_CALL;
case 0x23: // DCv1 EU? case 0x23: // DCv1 EU
return Client::Flag::IS_DC_V1 | return Client::Flag::IS_DC_V1 |
Client::Flag::NO_D6 | Client::Flag::NO_D6 |
Client::Flag::NO_SEND_FUNCTION_CALL; Client::Flag::NO_SEND_FUNCTION_CALL;
case 0x25: // DCv2 JP
case 0x26: // DCv2 US case 0x26: // DCv2 US
case 0x28: // DCv2 EU
return Client::Flag::NO_D6 | return Client::Flag::NO_D6 |
Client::Flag::SEND_FUNCTION_CALL_NO_CACHE_PATCH; Client::Flag::SEND_FUNCTION_CALL_NO_CACHE_PATCH;