From 6a9444e5d6c7be5a724d8c527a76666f6ea1c9db Mon Sep 17 00:00:00 2001 From: Kp Date: Fri, 11 Sep 2020 03:08:02 +0000 Subject: [PATCH] Move some multiplayer functions into namespaces --- common/main/multi.h | 2 +- similar/main/multi.cpp | 93 +++++++++++++++++++++++++++++++++++------- 2 files changed, 80 insertions(+), 15 deletions(-) diff --git a/common/main/multi.h b/common/main/multi.h index 705e81311..e64661b8f 100644 --- a/common/main/multi.h +++ b/common/main/multi.h @@ -482,9 +482,9 @@ void multi_send_hostage_door_status(vcwallptridx_t wallnum); void multi_prep_level_objects(const d_vclip_array &Vclip); void multi_prep_level_player(); void multi_leave_game(void); +void multi_process_bigdata(playernum_t pnum, const uint8_t *buf, uint_fast32_t len); } #endif -void multi_process_bigdata(playernum_t pnum, const ubyte *buf, uint_fast32_t len); void multi_do_death(int objnum); #ifdef dsx namespace dsx { diff --git a/similar/main/multi.cpp b/similar/main/multi.cpp index 99f1fc55e..6a64ec359 100644 --- a/similar/main/multi.cpp +++ b/similar/main/multi.cpp @@ -94,6 +94,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. constexpr std::integral_constant owner_none{}; namespace dsx { +namespace { static void multi_reset_object_texture(object_base &objp); static void multi_new_bounty_target(playernum_t pnum); static void multi_process_data(playernum_t pnum, const ubyte *dat, uint_fast32_t type); @@ -101,14 +102,17 @@ static void multi_update_objects_for_non_cooperative(); static void multi_restore_game(unsigned slot, unsigned id); static void multi_save_game(unsigned slot, unsigned id, const d_game_unique_state::savegame_description &desc); } +} static void multi_add_lifetime_killed(); static void multi_send_heartbeat(); #if defined(DXX_BUILD_DESCENT_II) namespace dsx { +namespace { static void multi_do_capture_bonus(const playernum_t pnum); static void multi_do_orb_bonus(const playernum_t pnum, const ubyte *buf); static void multi_send_drop_flag(vmobjptridx_t objnum,int seed); } +} #endif static void multi_send_ranking(uint8_t); static void multi_send_gmode_update(); @@ -119,9 +123,8 @@ static int multi_message_index; static std::array, MAX_PLAYERS> remote_to_local; // Remote object number for each local object static std::array local_to_remote; static std::array sorted_kills; - -} static void multi_send_quit(); +} DEFINE_SERIAL_UDT_TO_MESSAGE(shortpos, s, (s.bytemat, s.xo, s.yo, s.zo, s.segment, s.velx, s.vely, s.velz)); } static playernum_t multi_who_is_master(); @@ -1037,6 +1040,8 @@ void _multi_send_data(const uint8_t *const buf, const unsigned len, const int pr } } +namespace { + static void _multi_send_data_direct(const ubyte *buf, unsigned len, const playernum_t pnum, int priority) { if (pnum >= MAX_PLAYERS) @@ -1079,6 +1084,8 @@ static inline void multi_send_data_direct(multi_command &buf, const playernum _multi_send_data_direct(buf.data(), buf.size(), pnum, priority); } +} + namespace dsx { void multi_leave_game() @@ -1221,9 +1228,10 @@ void multi_define_macro(const int key) multi_message_index = 0; Network_message = {}; } - } +namespace { + static void multi_message_feedback(void) { char *colon; @@ -1277,6 +1285,8 @@ static void multi_message_feedback(void) } } +} + void multi_send_macro(const int fkey) { if (! (Game_mode & GM_MULTI) ) @@ -1324,6 +1334,8 @@ void multi_send_message_start() namespace dsx { +namespace { + static void kick_player(const player &plr, netplayer_info &nplr) { switch (multi_protocol) @@ -1537,6 +1549,8 @@ static void multi_send_message_end(fvmobjptr &vmobjptr) } +} + static void multi_define_macro_end() { Assert( multi_defining_message > 0 ); @@ -1630,6 +1644,8 @@ void multi_do_death(int) namespace dsx { +namespace { + static void multi_do_fire(fvmobjptridx &vmobjptridx, const playernum_t pnum, const uint8_t *const buf) { ubyte weapon; @@ -1697,6 +1713,8 @@ static void multi_do_fire(fvmobjptridx &vmobjptridx, const playernum_t pnum, con } +} + static void multi_do_message(const uint8_t *const cbuf) { const auto buf = reinterpret_cast(cbuf); @@ -1728,6 +1746,8 @@ static void multi_do_message(const uint8_t *const cbuf) namespace dsx { +namespace { + static void multi_do_position(fvmobjptridx &vmobjptridx, const playernum_t pnum, const uint8_t *const buf) { const auto &&obj = vmobjptridx(vcplayerptr(pnum)->objnum); @@ -1890,6 +1910,8 @@ static void multi_do_player_deres(object_array &Objects, const playernum_t pnum, } +} + /* * Process can compute a kill. If I am a Client this might be my own one (see multi_send_kill()) but with more specific data so I can compute my kill correctly. */ @@ -1941,6 +1963,8 @@ static void multi_do_kill(object_array &Objects, const uint8_t *const buf) namespace dsx { +namespace { + // Changed by MK on 10/20/94 to send NULL as object to net_destroy_controlcen if it got -1 // which means not a controlcen object, but contained in another object static void multi_do_controlcen_destroy(fimobjptridx &imobjptridx, const uint8_t *const buf) @@ -2028,6 +2052,8 @@ static void multi_do_remobj(fvmobjptr &vmobjptr, const uint8_t *const buf) } +} + void multi_disconnect_player(const playernum_t pnum) { if (!(Game_mode & GM_NETWORK)) @@ -2117,6 +2143,8 @@ static void multi_do_quit(const uint8_t *const buf) namespace dsx { +namespace { + static void multi_do_cloak(fvmobjptr &vmobjptr, const playernum_t pnum) { Assert(pnum < N_players); @@ -2135,8 +2163,12 @@ static void multi_do_cloak(fvmobjptr &vmobjptr, const playernum_t pnum) } +} + namespace dcx { +namespace { + static const char *deny_multi_save_game_duplicate_callsign(const partial_range_t range) { const auto e = range.end(); @@ -2157,8 +2189,12 @@ static void multi_do_decloak(const playernum_t pnum) } +} + namespace dsx { +namespace { + static void multi_do_door_open(fvmwallptr &vmwallptr, const uint8_t *const buf) { ubyte side; @@ -2302,6 +2338,8 @@ static void multi_do_play_sound(object_array &Objects, const playernum_t pnum, c } +} + static void multi_do_score(fvmobjptr &vmobjptr, const playernum_t pnum, const uint8_t *const buf) { if (pnum >= N_players) @@ -2342,6 +2380,8 @@ static void multi_do_trigger(const playernum_t pnum, const ubyte *buf) #if defined(DXX_BUILD_DESCENT_II) namespace dsx { +namespace { + static void multi_do_effect_blowup(const playernum_t pnum, const ubyte *buf) { int side; @@ -2406,6 +2446,8 @@ static void multi_do_drop_marker(object_array &Objects, fvmsegptridx &vmsegptrid mo = drop_marker_object(position, vmsegptridx(plr_objp->segnum), plr_objp->orient, gmi); } +} + } #endif @@ -2480,6 +2522,8 @@ void multi_reset_player_object(object &objp) multi_reset_object_texture (objp); } +namespace { + static void multi_reset_object_texture(object_base &objp) { if (objp.type == OBJ_GHOST) @@ -2541,8 +2585,6 @@ void multi_process_bigdata(const playernum_t pnum, const uint8_t *const buf, con } } -namespace dsx { - // // Part 2 : Functions that send communication messages to inform the other // players of something we did. @@ -2906,6 +2948,8 @@ void multi_send_remobj(const vmobjidx_t objnum) namespace dcx { +namespace { + void multi_send_quit() { // I am quitting the game, tell the other guy the bad news. @@ -2913,6 +2957,7 @@ void multi_send_quit() multi_command multibuf; multibuf[1] = Player_num; multi_send_data(multibuf, 2); +} } @@ -3649,6 +3694,8 @@ void multi_apply_goal_textures() } #endif +namespace { + static int object_allowed_in_anarchy(const object_base &objp) { if (objp.type == OBJ_NONE || @@ -3808,6 +3855,8 @@ void multi_update_objects_for_non_cooperative() } +} + // Returns the Player_num of Master/Host of this game playernum_t multi_who_is_master() { @@ -4320,6 +4369,8 @@ void multi_send_orb_bonus (const playernum_t pnum, const uint8_t hoard_orbs) multi_do_orb_bonus (pnum, multibuf.data()); } +namespace { + void multi_do_capture_bonus(const playernum_t pnum) { auto &Objects = LevelUniqueObjectState.Objects; @@ -4445,6 +4496,8 @@ void multi_do_orb_bonus(const playernum_t pnum, const uint8_t *const buf) multi_show_player_list(); } +} + void multi_send_got_flag (const playernum_t pnum) { multi_command multibuf; @@ -4572,6 +4625,7 @@ void DropFlag () player_info.powerup_flags &=~(PLAYER_FLAGS_FLAG); } +namespace { void multi_send_drop_flag(const vmobjptridx_t objp, int seed) { @@ -4607,6 +4661,8 @@ static void multi_do_drop_flag (const playernum_t pnum, const ubyte *buf) objp->ctype.player_info.powerup_flags &= ~(PLAYER_FLAGS_FLAG); } +} + } #endif @@ -4863,6 +4919,10 @@ void multi_send_bounty( void ) multi_send_data(multibuf, 2); } +namespace dsx { + +namespace { + static void multi_do_bounty( const ubyte *buf ) { if ( multi_i_am_master() ) @@ -4871,8 +4931,6 @@ static void multi_do_bounty( const ubyte *buf ) multi_new_bounty_target( buf[1] ); } -namespace dsx { - void multi_new_bounty_target(const playernum_t pnum ) { /* If it's already the same, don't do it */ @@ -4894,6 +4952,8 @@ void multi_new_bounty_target(const playernum_t pnum ) #endif } +} + static void multi_do_save_game(const uint8_t *const buf) { int count = 1; @@ -5036,6 +5096,8 @@ void multi_initiate_restore_game() multi_restore_game(slot,state_game_id); } +namespace { + void multi_save_game(const unsigned slot, const unsigned id, const d_game_unique_state::savegame_description &desc) { auto &LevelUniqueControlCenterState = LevelUniqueObjectState.ControlCenterState; @@ -5089,6 +5151,8 @@ void multi_restore_game(const unsigned slot, const unsigned id) } +} + static void multi_do_msgsend_state(const uint8_t *buf) { multi_sending_message[static_cast(buf[1])] = static_cast(buf[2]); @@ -5478,12 +5542,12 @@ void MultiLevelInv_Repopulate(fix frequency) namespace dsx { #if defined(DXX_BUILD_DESCENT_II) +namespace { + /// /// CODE TO LOAD HOARD DATA /// -namespace { - class hoard_resources_type { static constexpr auto invalid_bm_idx = std::integral_constant{}; @@ -5501,10 +5565,10 @@ public: constexpr std::integral_constant hoard_resources_type::invalid_bm_idx; constexpr std::integral_constant hoard_resources_type::invalid_snd_idx; -} - static hoard_resources_type hoard_resources; +} + int HoardEquipped() { static int checked=-1; @@ -5729,6 +5793,8 @@ void save_hoard_data(void) #endif #endif +namespace { + static void multi_process_data(const playernum_t pnum, const ubyte *buf, const uint_fast32_t type) { auto &Objects = LevelUniqueObjectState.Objects; @@ -5900,6 +5966,8 @@ static void multi_process_data(const playernum_t pnum, const ubyte *buf, const u } } +} + // Following functions convert object to object_rw and back. // turn object to object_rw for sending void multi_object_to_object_rw(object &obj, object_rw *obj_rw) @@ -6259,9 +6327,6 @@ void multi_object_rw_to_object(object_rw *obj_rw, object &obj) } } -} - -namespace dsx { static int show_netgame_info_poll( newmenu *menu, const d_event &event, char *ngii ) { newmenu_item *menus = newmenu_get_items(menu);