update some notes
This commit is contained in:
@@ -374,7 +374,7 @@ In the server drop modes, the item tables used to generate common items are in t
|
|||||||
|
|
||||||
## Cross-version play
|
## Cross-version play
|
||||||
|
|
||||||
All versions of PSO can see and interact with each other in the lobby. By default, newserv allows V1 and V2 players to play together, and allows GC and Xbox players to play together. You can change these rules to allow all versions to play together, or to prevent versions from playing together, with the CompatibilityGroups setting in config.json.
|
All versions of PSO can see and interact with each other in the lobby. By default, newserv allows V1 and V2 players to play in games together, and allows GC and Xbox players to play in games together. You can change these rules to allow all versions to play in games together, or to prevent versions from playing in games together, with the CompatibilityGroups setting in config.json.
|
||||||
|
|
||||||
There are several cross-version restrictions that always apply regardless of the compatibility groups setting:
|
There are several cross-version restrictions that always apply regardless of the compatibility groups setting:
|
||||||
* DC V1 players cannot join DC V2 games if the game creator didn't choose to allow them.
|
* DC V1 players cannot join DC V2 games if the game creator didn't choose to allow them.
|
||||||
|
|||||||
+919
-919
File diff suppressed because it is too large
Load Diff
+16
-6
@@ -2007,8 +2007,18 @@ static const vector<DATEntityDefinition> dat_object_definitions({
|
|||||||
{0x018C, F_V3_V4, 0x0000400000008000, "TObjParticleLobby"},
|
{0x018C, F_V3_V4, 0x0000400000008000, "TObjParticleLobby"},
|
||||||
{0x018C, F_EP3, 0x0000000000008000, "TObjParticleLobby"},
|
{0x018C, F_EP3, 0x0000000000008000, "TObjParticleLobby"},
|
||||||
|
|
||||||
// Episode 3 lobby battle table. Params:
|
// Episode 3 lobby battle table. This object is responsible for the red
|
||||||
// param4 = player count (1-4); only 2 and 4 are used in-game
|
// panels on the floor next to the battle table that turn green when you
|
||||||
|
// step on them; it also shows the confirmation window and sends the
|
||||||
|
// necessary commands to the server. The actual table model and the non-lit
|
||||||
|
// parts of the floor panels are part of the lobby geometry, not this
|
||||||
|
// object. Params:
|
||||||
|
// param4 = player count
|
||||||
|
// 1 = 1 player (doesn't work properly - there's no way to confirm)
|
||||||
|
// 2 = 2 players
|
||||||
|
// 3 = 3 players (unused, but works)
|
||||||
|
// 4 = 4 players
|
||||||
|
// anything else = object doesn't load
|
||||||
// param5 = table number (used in E4 and E5 commands)
|
// param5 = table number (used in E4 and E5 commands)
|
||||||
{0x018D, F_EP3, 0x0000000000008000, "TObjLobbyTable"},
|
{0x018D, F_EP3, 0x0000000000008000, "TObjLobbyTable"},
|
||||||
|
|
||||||
@@ -4038,12 +4048,12 @@ string MapFile::disassemble_action_stream(const void* data, size_t size) {
|
|||||||
}
|
}
|
||||||
case 0x0A: {
|
case 0x0A: {
|
||||||
uint16_t id = r.get_u16l();
|
uint16_t id = r.get_u16l();
|
||||||
ret.emplace_back(std::format(" 0A {:04X} enable_switch_flag id={:04X}", id, id));
|
ret.emplace_back(std::format(" 0A {:04X} set_switch_flag id={:04X}", id, id));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x0B: {
|
case 0x0B: {
|
||||||
uint16_t id = r.get_u16l();
|
uint16_t id = r.get_u16l();
|
||||||
ret.emplace_back(std::format(" 0B {:04X} disable_switch_flag id={:04X}", id, id));
|
ret.emplace_back(std::format(" 0B {:04X} clear_switch_flag id={:04X}", id, id));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x0C: {
|
case 0x0C: {
|
||||||
@@ -4885,8 +4895,8 @@ static size_t get_action_stream_size(const void* data, size_t size) {
|
|||||||
r.skip(4);
|
r.skip(4);
|
||||||
done = (cmd == 0x0D);
|
done = (cmd == 0x0D);
|
||||||
break;
|
break;
|
||||||
case 0x0A: // enable_switch_flag(uint16_t flag_num)
|
case 0x0A: // set_switch_flag(uint16_t flag_num)
|
||||||
case 0x0B: // disable_switch_flag(uint16_t flag_num)
|
case 0x0B: // clear_switch_flag(uint16_t flag_num)
|
||||||
r.skip(2);
|
r.skip(2);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -3342,8 +3342,8 @@ static asio::awaitable<void> on_set_entity_set_flag(shared_ptr<Client> c, Subcom
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x0A: // enable_switch_flag
|
case 0x0A: // set_switch_flag
|
||||||
case 0x0B: { // disable_switch_flag
|
case 0x0B: { // clear_switch_flag
|
||||||
// These opcodes cause the client to send 6x05 commands, so
|
// These opcodes cause the client to send 6x05 commands, so
|
||||||
// we don't have to do anything here.
|
// we don't have to do anything here.
|
||||||
uint16_t switch_flag_num = actions_r.get_u16l();
|
uint16_t switch_flag_num = actions_r.get_u16l();
|
||||||
|
|||||||
Reference in New Issue
Block a user