add support for all DC versions
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user