mirror of
https://github.com/diasurgical/DevilutionX.git
synced 2026-10-11 22:29:54 +00:00
Split several monolithic files to reduce transitive dependencies and
enable the dun_render_benchmark to link without bringing in all of
DevilutionX:
- Extract dungeon tile globals and loading functions from `gendung` into
`dun_tile_data.{hpp,cpp}`
- Extract light table data and MakeLightTable from lighting into
`engine/light_tables.{hpp,cpp}`
- Move cursor_id and SelectionRegion to cursor_defs.hpp
- Extract quest log rendering to `panels/quest_log.{hpp,cpp}`
- Extract drlg quest setpiece logic to `levels/drlg_quests.{hpp,cpp}`
- Extract quest data loading to `tables/questdat.{hpp,cpp}`
- Move `GameData` and `gbIsMultiplayer` into `game_mode.{hpp,cpp}`
- Add `parse_sfx_id.{hpp,cpp}`
- Update CMake libraries accordingly
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
/**
|
|
* @file multi.h
|
|
*
|
|
* Interface of functions for keeping multiplayer games in sync.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "dvlnet/leaveinfo.hpp"
|
|
#include "game_mode.hpp"
|
|
#include "msg.h"
|
|
#include "utils/attributes.h"
|
|
|
|
namespace devilution {
|
|
|
|
using net::leaveinfo_t;
|
|
|
|
// Defined in player.h, forward declared here to allow for functions which operate in the context of a player.
|
|
struct Player;
|
|
|
|
// must be unsigned to generate unsigned comparisons with pnum
|
|
#define MAX_PLRS 4
|
|
|
|
/* @brief Contains info of running public game (for game list browsing) */
|
|
struct GameInfo {
|
|
std::string name;
|
|
GameData gameData;
|
|
std::vector<std::string> players;
|
|
std::optional<int> latency;
|
|
std::optional<bool> peerIsRelayed;
|
|
};
|
|
|
|
extern bool gbSomebodyWonGameKludge;
|
|
extern uint16_t sgwPackPlrOffsetTbl[MAX_PLRS];
|
|
extern uint8_t gbActivePlayers;
|
|
extern bool gbGameDestroyed;
|
|
extern bool gbSelectProvider;
|
|
extern std::string GameName;
|
|
extern std::string GamePassword;
|
|
extern bool PublicGame;
|
|
extern uint8_t gbDeltaSender;
|
|
extern uint32_t player_state[MAX_PLRS];
|
|
extern bool IsLoopback;
|
|
|
|
void SwapGameDataLE(GameData &gameData);
|
|
DVL_API_FOR_TEST std::string DescribeLeaveReason(leaveinfo_t leaveReason);
|
|
std::string FormatGameSeed(const uint32_t gameSeed[4]);
|
|
|
|
void InitGameInfo();
|
|
void NetSendLoPri(uint8_t playerId, const std::byte *data, size_t size);
|
|
void NetSendHiPri(uint8_t playerId, const std::byte *data, size_t size);
|
|
void multi_send_msg_packet(uint32_t pmask, const std::byte *data, size_t size);
|
|
void multi_msg_countdown();
|
|
void multi_player_left(uint8_t pnum, leaveinfo_t reason);
|
|
void multi_net_ping();
|
|
|
|
/**
|
|
* @return Always true for singleplayer
|
|
*/
|
|
bool multi_handle_delta();
|
|
void ProcessGameMessagePackets();
|
|
void multi_send_zero_packet(uint8_t pnum, _cmd_id bCmd, const std::byte *data, size_t size);
|
|
void NetClose();
|
|
bool NetInit(bool bSinglePlayer);
|
|
void recv_plrinfo(Player &player, const TCmdPlrInfoHdr &header, bool recv);
|
|
|
|
} // namespace devilution
|