FS2_Open
Open source remastering of the Freespace 2 engine
multiutil.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #ifndef MULTI_UTIL_H
13 #define MULTI_UTIL_H
14 
15 #include "network/psnet2.h"
16 
17 // prototypes instead of headers :)
18 struct net_player;
19 struct net_addr;
20 class player;
21 struct button_info;
22 struct join_request;
23 struct physics_info;
24 class object;
25 struct active_game;
26 class ship;
27 struct server_item;
28 class ship_info;
29 class p_object;
30 
31 // two types of signatures that we can request, permanent signatures are all below 1000. non-permanent are above 1000
32 #define MULTI_SIG_SHIP 1
33 #define MULTI_SIG_ASTEROID 2
34 #define MULTI_SIG_NON_PERMANENT 3
35 #define MULTI_SIG_DEBRIS 4
36 
37 extern ushort multi_assign_network_signature( int what_kind );
38 extern ushort multi_get_next_network_signature( int what_kind );
39 extern void multi_set_network_signature( ushort signature, int what_kind );
40 
41 extern void stuff_netplayer_info( net_player *nplayer, net_addr *addr, int ship_class, player *pplayer );
42 extern int find_player(net_addr* addr);
43 extern int find_player_no_port(net_addr *addr);
44 extern int find_player_id(short player_id);
45 extern int find_player_socket(PSNET_SOCKET_RELIABLE sock); // note this is only valid to do on a server!
46 extern int multi_find_player_by_object( object *obj );
47 extern int multi_find_player_by_signature( int signature );
48 extern int multi_find_player_by_callsign(const char *callsign);
50 extern int multi_find_player_by_parse_object(p_object *p_objp );
51 extern int multi_find_player_by_ship_name(const char *ship_name, bool inc_respawning = false);
52 extern int multi_create_player(int player_num, player *pl, const char* name, net_addr* addr, int ship_class, short id);
54 extern int multi_find_open_player_slot();
55 extern void delete_player(int player_num, int kicked_reason = -1);
56 extern int multi_get_player_ship(int np_index);
57 
58 extern int multi_num_players();
59 extern int multi_num_observers();
60 extern int multi_num_connections();
61 
62 extern const char* multi_random_death_word();
63 extern const char* multi_random_chat_start();
64 
65 extern int multi_ship_class_lookup(const char* ship_name);
66 extern ushort netmisc_calc_checksum( void * vptr, int len );
67 extern void fill_net_addr(net_addr* addr, ubyte* address, ushort port);
68 extern char* get_text_address( char * text, ubyte * address );
69 
70 extern object *multi_get_network_object( ushort net_signature ); // find a network object
71 
72 void multi_find_ingame_join_pos(object *new_obj);
73 
74 // return size of packed matrix
76 
77 // return bytes processed
79 
80 // catchall to do any necessary client-side simulation processing or master side process for menu pauses, etc.
82 
83 void multi_assign_player_ship( int net_player_num, object *objp, int ship_class );
84 
85 // -------------------------------------------------------------------
86 // ship status change functions (used both client and server side)
87 int lookup_ship_status(net_player *p, int unique_id, int remove=0); // auto-remove if remove == 1
88 void remove_ship_status_item(net_player *p, int id);
89 void add_net_button_info(net_player *p, button_info *bi, int unique_id);
90 
91 // called client-side every frame
93 
94 // will be used server side _and_ client side.
95 void multi_apply_ship_status(net_player *p,button_info *bi, int locally);
96 
98 
100 
101 void server_verify_filesig(short player_id, ushort sum_sig, int length_sig);
103 
105 
106 // broadcast alltime stats to everyone in the game
107 void multi_broadcast_stats(int stats_code);
108 
109 int multi_netplayer_state_check(int state, int ignore_standalone = 0);
110 int multi_netplayer_state_check2(int state, int state2, int ignore_standalone = 0);
111 int multi_netplayer_state_check3(int state, int state2, int state3, int ignore_standalone = 0);
112 int multi_netplayer_flag_check(int flags, int ignore_standalone = 0);
113 
114 void multi_eval_socket_error(PSNET_SOCKET sock, int error);
115 
116 void multi_maybe_send_repair_info(object *dest_obj, object *source_objp, int code);
117 
119 
120 // create a bogus object for the standalone
122 
123 // determine whether (as a server), you should be rebroadcasting certain messages to everyone in the game
125 
126 // the active game list manager functions
130 
133 
134 // netgame options evaluation stuff
137 
139 
140 // called by any machine (client, host, server, standalone, etc), to begin warping out all player objects
142 
143 // determine the highest rank of any of the players in the game
145 
146 // called on the machine of the player who hit alt+j
148 
149 // called to handle any special cases where a player is in some submenu when he needs to get pushed into some other state
151 
152 // called by the file xfer subsytem when we start receiving a file
153 void multi_file_xfer_notify(int handle);
154 
155 // return the lag/disconnected status of the game
157 
158 // process a valid join request
159 void multi_process_valid_join_request(join_request *jr, net_addr *who_from, int ingame_join_team = -1);
160 
161 // if a player is trying to join a restricted game, evaluate the keypress (accept or not, etc)
163 
164 // determine the status of available player ships (use team_0 for non team vs. team situations)
165 void multi_player_ships_available(int *team_0, int *team_1);
166 
167 // server should update the player's bank/link status with the data in the passed ship
169 
170 // flush the multidata cache directory
172 
173 // flush all data from a previous mission before starting the next
175 
176 // should we ignore all controls and keypresses because of some multiplayer
177 int multi_ignore_controls(int key = -1);
178 
179 // if the kill limit has been reached by any given player
181 
182 // display a chat message (write to the correct spot - hud, standalone gui, chatbox, etc)
183 void multi_display_chat_msg(const char *msg, int player_index, int add_id);
184 
185 // fill in Current_file_checksum and Current_file_length
186 void multi_get_mission_checksum(const char *filename);
187 
188 // Packs/unpacks an object position.
189 // Returns number of bytes read or written.
190 #define OO_POS_RET_SIZE 9
191 int multi_pack_unpack_position(int write, ubyte *data, vec3d *pos);
192 
193 // Packs/unpacks an orientation matrix.
194 // Returns number of bytes read or written.
195 #define OO_ORIENT_RET_SIZE 6
196 int multi_pack_unpack_orient(int write, ubyte *data, matrix *orient);
197 
198 // Packs/unpacks velocity
199 // Returns number of bytes read or written.
200 #define OO_VEL_RET_SIZE 4
202 
203 // Packs/unpacks desired_velocity
204 // Returns number of bytes read or written.
205 #define OO_DESIRED_VEL_RET_SIZE 3
207 
208 // Packs/unpacks rotational velocity
209 // Returns number of bytes read or written.
210 #define OO_ROTVEL_RET_SIZE 4
212 
213 // Packs/unpacks desired rotvel
214 // Returns number of bytes read or written.
215 #define OO_DESIRED_ROTVEL_RET_SIZE 3
217 
218 char multi_unit_to_char(float unit);
219 float multi_char_to_unit(float val);
220 
221 // if we should render our ping time to the server in a multiplayer game
223 
224 // if Game_current_mission_filename is a builtin multiplayer mission
226 
228 
229 // if we're in tracker mode, do a validation update on all known missions
231 
232 // get a new id# for a player
233 short multi_get_new_id();
234 
235 // Karajorma - sends the player to the correct debrief for this game type
236 void send_debrief_event();
237 
238 // Karajorma - Performs any cleanup needed by missions which don't end with a warpout.
240 
241 // Send a ping to make sure the mission doesn't timeout during loading.
243 
244 // make a bunch of fake players - don't rely on this to be very safe - its mostly used for interface testing
245 #ifndef NDEBUG
247 #endif
248 
249 #endif
int multi_netplayer_flag_check(int flags, int ignore_standalone=0)
Definition: multiutil.cpp:1486
ushort netmisc_calc_checksum(void *vptr, int len)
Definition: multiutil.cpp:252
int multi_pack_unpack_vel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi)
Definition: multiutil.cpp:3893
int find_player(net_addr *addr)
Definition: multiutil.cpp:431
void multi_handle_end_mission_request()
Definition: multiutil.cpp:2218
void multi_find_ingame_join_pos(object *new_obj)
int multi_message_should_broadcast(int type)
Definition: multiutil.cpp:1605
void multi_process_valid_join_request(join_request *jr, net_addr *who_from, int ingame_join_team=-1)
Definition: multiutil.cpp:2416
void fill_net_addr(net_addr *addr, ubyte *address, ushort port)
Definition: multiutil.cpp:1049
int multi_kill_limit_reached()
Definition: multiutil.cpp:2872
int multi_find_open_player_slot()
Definition: multiutil.cpp:647
void multi_create_standalone_object()
Definition: multiutil.cpp:1569
server_item * multi_new_server_item(void)
Definition: multiutil.cpp:1758
uint PSNET_SOCKET_RELIABLE
Definition: multi_xfer.h:20
int multi_find_player_by_callsign(const char *callsign)
Definition: multiutil.cpp:1291
Definition: pstypes.h:88
int multi_can_end_mission(net_player *p)
Definition: multiutil.cpp:1897
int server_all_filesigs_ok()
Definition: multiutil.cpp:1389
int multi_can_message(net_player *p)
Definition: multiutil.cpp:1848
void multi_maybe_send_ship_status()
Definition: multiutil.cpp:1242
int ship_class
Definition: missionparse.h:351
const char * multi_random_chat_start()
Definition: multiutil.cpp:376
uint PSNET_SOCKET
Definition: psnet2.h:46
hull_check orient
Definition: lua.cpp:5049
int key
object * objp
Definition: lua.cpp:3105
int multi_pack_unpack_position(int write, ubyte *data, vec3d *pos)
Definition: multiutil.cpp:3586
int multi_pack_unpack_desired_rotvel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi, ship_info *sip)
Definition: multiutil.cpp:4081
ushort net_signature
Definition: missionparse.h:413
char multi_unit_to_char(float unit)
Definition: multiutil.cpp:2958
ship * shipp
Definition: lua.cpp:9162
int multi_num_players()
Definition: multiutil.cpp:1799
GLenum type
Definition: Gl.h:1492
void multi_make_fake_players(int count)
void multi_assign_player_ship(int net_player_num, object *objp, int ship_class)
Definition: multiutil.cpp:681
HWND DWORD code
Definition: vddraw.h:425
int multi_get_player_ship(int np_index)
Definition: multiutil.cpp:599
int multi_find_player_by_signature(int signature)
Definition: multiutil.cpp:520
void server_verify_filesig(short player_id, ushort sum_sig, int length_sig)
Definition: multiutil.cpp:1324
active_game * multi_update_active_games(active_game *ag)
Definition: multiutil.cpp:1649
void multi_handle_sudden_mission_end()
Definition: multiutil.cpp:2135
object * multi_get_network_object(ushort net_signature)
Definition: multiutil.cpp:220
void multi_free_server_list()
Definition: multiutil.cpp:1781
Definition: player.h:85
void multi_subsys_update_all()
Definition: multiutil.cpp:1279
void multi_free_active_games()
Definition: multiutil.cpp:1739
void multi_pack_orient_matrix(ubyte *data, matrix *m)
Definition: multiutil.cpp:1089
void multi_update_valid_missions()
Definition: multiutil.cpp:3041
int find_player_socket(PSNET_SOCKET_RELIABLE sock)
Definition: multiutil.cpp:482
char * filename
void multi_do_client_warp(float frame_time)
Definition: multiutil.cpp:1140
int multi_netplayer_state_check(int state, int ignore_standalone=0)
Definition: multiutil.cpp:1433
ushort multi_get_next_network_signature(int what_kind)
Definition: multiutil.cpp:168
int multi_find_player_by_parse_object(p_object *p_objp)
Definition: multiutil.cpp:554
float multi_char_to_unit(float val)
Definition: multiutil.cpp:2975
int multi_pack_unpack_rotvel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi)
Definition: multiutil.cpp:4041
void multi_player_ships_available(int *team_0, int *team_1)
Definition: multiutil.cpp:2711
int multi_pack_unpack_desired_vel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi, ship_info *sip)
Definition: multiutil.cpp:3941
int multi_netplayer_state_check2(int state, int state2, int ignore_standalone=0)
Definition: multiutil.cpp:1450
void multi_eval_socket_error(PSNET_SOCKET sock, int error)
Definition: multiutil.cpp:1506
char * get_text_address(char *text, ubyte *address)
Definition: multiutil.cpp:1067
int multi_get_connection_speed()
Definition: multiutil.cpp:2999
int find_player_no_port(net_addr *addr)
Definition: multiutil.cpp:448
Definition: ship.h:534
short multi_get_new_id()
Definition: multiutil.cpp:3167
void add_net_button_info(net_player *p, button_info *bi, int unique_id)
Definition: multiutil.cpp:1183
int multi_is_builtin_mission()
Definition: multiutil.cpp:1304
void multi_get_mission_checksum(const char *filename)
Definition: multiutil.cpp:2921
void multiplayer_match_target_speed(net_player *p)
void multi_set_network_signature(ushort signature, int what_kind)
Definition: multiutil.cpp:198
int multi_num_observers()
Definition: multiutil.cpp:1815
unsigned char ubyte
Definition: pstypes.h:62
Definition: object.h:141
void stuff_netplayer_info(net_player *nplayer, net_addr *addr, int ship_class, player *pplayer)
Definition: multiutil.cpp:664
void multi_flush_mission_stuff()
Definition: multiutil.cpp:2787
int multi_find_player_by_object(object *obj)
Definition: multiutil.cpp:500
GLbitfield flags
Definition: Glext.h:6722
int multi_create_player(int player_num, player *pl, const char *name, net_addr *addr, int ship_class, short id)
Definition: multiutil.cpp:728
GLuint const GLchar * name
Definition: Glext.h:5608
GLuint GLfloat * val
Definition: Glext.h:6741
int multi_find_player_by_ship_name(const char *ship_name, bool inc_respawning=false)
Definition: multiutil.cpp:570
int multi_is_valid_unknown_packet(ubyte type)
Definition: multiutil.cpp:1563
ushort multi_assign_network_signature(int what_kind)
Definition: multiutil.cpp:105
const char * multi_random_death_word()
Definition: multiutil.cpp:277
float frame_time
Definition: multi.cpp:1426
void remove_ship_status_item(net_player *p, int id)
Definition: multiutil.cpp:1172
int multi_get_highest_rank()
Definition: multiutil.cpp:2201
int lookup_ship_status(net_player *p, int unique_id, int remove=0)
Definition: multiutil.cpp:1156
void multi_server_update_player_weapons(net_player *pl, ship *shipp)
Definition: multiutil.cpp:2737
void delete_player(int player_num, int kicked_reason=-1)
Definition: multiutil.cpp:862
void multi_apply_ship_status(net_player *p, button_info *bi, int locally)
Definition: multiutil.cpp:1212
active_game * multi_new_active_game(void)
Definition: multiutil.cpp:1621
unsigned short ushort
Definition: pstypes.h:63
int multi_find_open_netplayer_slot()
Definition: multiutil.cpp:621
void multi_send_anti_timeout_ping()
Definition: multiutil.cpp:4171
void multi_unpack_orient_matrix(ubyte *data, matrix *m)
Definition: multiutil.cpp:1113
GLfloat GLfloat p
Definition: Glext.h:8373
int multi_query_lag_status()
Definition: multiutil.cpp:2392
GLenum GLsizei GLenum GLenum const GLvoid * data
Definition: Gl.h:1509
void multi_untag_player_ships()
Definition: multiutil.cpp:1404
int multi_show_ingame_ping()
Definition: multiutil.cpp:2993
hull_check pos
Definition: lua.cpp:5050
const GLfloat * m
Definition: Glext.h:10319
GLsizei GLsizei GLuint * obj
Definition: Glext.h:5619
void multi_display_chat_msg(const char *msg, int player_index, int add_id)
Definition: multiutil.cpp:2895
void send_debrief_event()
Definition: multiutil.cpp:4159
GLint GLsizei count
Definition: Gl.h:1491
void multi_handle_state_special()
Definition: multiutil.cpp:2253
GLenum GLsizei len
Definition: Glext.h:6283
int multi_ship_class_lookup(const char *ship_name)
Definition: multiutil.cpp:409
void multi_maybe_send_repair_info(object *dest_obj, object *source_objp, int code)
Definition: multiutil.cpp:1551
int multi_pack_unpack_orient(int write, ubyte *data, matrix *orient)
Definition: multiutil.cpp:3677
GLenum const GLvoid * addr
Definition: Glext.h:9092
int find_player_id(short player_id)
Definition: multiutil.cpp:465
int multi_process_restricted_keys(int k)
Definition: multiutil.cpp:2609
void multi_broadcast_stats(int stats_code)
Definition: multiutil.cpp:1419
void multi_flush_multidata_cache()
Definition: multiutil.cpp:2778
int multi_netplayer_state_check3(int state, int state2, int state3, int ignore_standalone=0)
Definition: multiutil.cpp:1467
int multi_num_connections()
Definition: multiutil.cpp:1832
int multi_find_player_by_net_signature(ushort net_signature)
Definition: multiutil.cpp:537
void multi_warpout_all_players()
Definition: multiutil.cpp:2143
int multi_eval_join_request(join_request *jr, net_addr *addr)
Definition: multiutil.cpp:1946
GLuint address
Definition: Glext.h:8864
void multi_file_xfer_notify(int handle)
Definition: multiutil.cpp:2327
int multi_ignore_controls(int key=-1)
Definition: multiutil.cpp:2845