]> icculus.org git repositories - btb/d2x.git/blob - main/network.h
Lotsa networking stuff from d1x
[btb/d2x.git] / main / network.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 /*
15  * $Source: /cvs/cvsroot/d2x/main/network.h,v $
16  * $Revision: 1.5 $
17  * $Author: bradleyb $
18  * $Date: 2002-02-13 10:39:22 $
19  *
20  * FIXME: put description here
21  *
22  * $Log: not supported by cvs2svn $
23  * Revision 1.4  2001/10/25 02:15:57  bradleyb
24  * conditionalize including multi.h and network.h, fix backslashes
25  *
26  *
27  */
28
29 #ifndef _NETWORK_H
30 #define _NETWORK_H
31
32 #include "gameseq.h"
33 #include "multi.h"
34 #include "newmenu.h"
35
36 #define NETSTAT_MENU                                    0
37 #define NETSTAT_PLAYING                         1
38 #define NETSTAT_BROWSING                        2
39 #define NETSTAT_WAITING                         3
40 #define NETSTAT_STARTING                        4
41 #define NETSTAT_ENDLEVEL                        5
42
43 #define CONNECT_DISCONNECTED            0
44 #define CONNECT_PLAYING                         1
45 #define CONNECT_WAITING                         2
46 #define CONNECT_DIED_IN_MINE            3
47 #define CONNECT_FOUND_SECRET            4
48 #define CONNECT_ESCAPE_TUNNEL           5
49 #define CONNECT_END_MENU                        6
50
51 #define MAX_ACTIVE_NETGAMES                     12
52
53 #define NETGAMEIPX                              1
54 #define NETGAMETCP                              2
55
56 // defines and other things for appletalk/ipx games on mac
57
58 #define IPX_GAME                1
59 #define APPLETALK_GAME  2
60 #ifdef MACINTOSH
61 extern int Network_game_type;
62 #else
63 #define Network_game_type IPX_GAME
64 #endif
65
66 typedef struct sequence_packet {
67         ubyte                                   type;
68         int                                     Security;
69    ubyte pad1[3];
70         netplayer_info          player;
71 } __pack__ sequence_packet;
72
73 #define NET_XDATA_SIZE 454
74
75
76 // frame info is aligned -- 01/18/96 -- MWA
77 // if you change this structure -- be sure to keep
78 // alignment:
79 //              bytes on byte boundries
80 //              shorts on even byte boundries
81 //              ints on even byte boundries
82
83 typedef struct frame_info {
84         ubyte                           type;                                           // What type of packet
85         ubyte                           pad[3];                                 // Pad out length of frame_info packet
86         int                             numpackets;                     
87         vms_vector              obj_pos;
88         vms_matrix              obj_orient;
89         vms_vector              phys_velocity;
90         vms_vector              phys_rotvel;
91         short                           obj_segnum;
92         ushort                  data_size;              // Size of data appended to the net packet
93         ubyte                           playernum;
94         ubyte                           obj_render_type;
95         ubyte                           level_num;
96         ubyte                           data[NET_XDATA_SIZE];           // extra data to be tacked on the end
97 } __pack__ frame_info;
98
99 // short_frame_info is not aligned -- 01/18/96 -- MWA
100 // won't align because of shortpos.  Shortpos needs
101 // to stay in current form.
102
103 typedef struct short_frame_info {
104         ubyte                           type;                                           // What type of packet
105         ubyte                           pad[3];                                 // Pad out length of frame_info packet
106         int                             numpackets;                     
107         shortpos                        thepos;
108         ushort                  data_size;              // Size of data appended to the net packet
109         ubyte                           playernum;
110         ubyte                           obj_render_type;
111         ubyte                           level_num;
112         ubyte                           data[NET_XDATA_SIZE];           // extra data to be tacked on the end
113 } __pack__ short_frame_info;
114
115 void network_start_game();
116 void network_join_game();
117 void network_rejoin_game();
118 void network_leave_game();
119 int network_endlevel(int *secret);
120 void network_endlevel_poll2( int nitems, struct newmenu_item * menus, int * key, int citem );
121
122 int network_level_sync();
123 void network_send_endlevel_packet();
124
125 int network_delete_extra_objects();
126 int network_find_max_net_players();
127 int network_objnum_is_past(int objnum);
128 char * network_get_player_name( int objnum );
129 void network_send_endlevel_sub(int player_num);
130
131 void network_disconnect_player(int playernum);
132
133 extern int NetGameType;
134 extern int Network_send_objects;
135 extern int Network_send_objnum;
136 extern int PacketUrgent;
137 extern int Network_rejoined;
138
139 extern int Network_new_game;
140 extern int Network_status;
141
142 extern fix LastPacketTime[MAX_PLAYERS];
143
144 extern ushort my_segments_checksum;
145
146 extern int Network_initial_pps;
147 extern int Network_initial_shortpackets;
148
149 // By putting an up-to-20-char-message into Network_message and 
150 // setting Network_message_reciever to the player num you want to
151 // send it to (100 for broadcast) the next frame the player will
152 // get your message.
153
154 // Call once at the beginning of a frame
155 void network_do_frame(int force, int listen);
156
157 // Tacks data of length 'len' onto the end of the next
158 // packet that we're transmitting.
159 void network_send_data( ubyte * ptr, int len, int urgent );
160
161 void network_send_objects(void);
162 void network_dump_player(ubyte * server, ubyte *node, int why);
163 void network_send_game_info(sequence_packet *their);
164
165 int GetMyNetRanking();
166 int HoardEquipped();
167
168 #define PID_LITE_INFO                           43
169 #define PID_SEND_ALL_GAMEINFO                   44
170 #define PID_PLAYERSINFO                         45
171 #define PID_REQUEST                             46
172 #define PID_SYNC                                47
173 #define PID_PDATA                               48
174 #define PID_ADDPLAYER                           49
175 #define PID_DUMP                                51
176 #define PID_ENDLEVEL                            52
177 #define PID_QUIT_JOINING                        54
178 #define PID_OBJECT_DATA                         55
179 #define PID_GAME_LIST                           56
180 #define PID_GAME_INFO                           57
181 #define PID_PING_SEND                           58
182 #define PID_PING_RETURN                         59
183 #define PID_GAME_UPDATE                         60
184 #define PID_ENDLEVEL_SHORT                      61
185 #define PID_NAKED_PDATA                         62
186 #define PID_GAME_PLAYERS                        63
187 #define PID_NAMES_RETURN                        64
188
189 #define PID_SHORTPDATA                          42
190 #define PID_DXX_GAME_INFO_REQ                   65
191 #define PID_DXX_GAME_LITE                       68
192 #define PID_PDATA_SHORT2                        70
193
194 #define NETGAME_ANARCHY                         0
195 #define NETGAME_TEAM_ANARCHY                    1
196 #define NETGAME_ROBOT_ANARCHY                   2
197 #define NETGAME_COOPERATIVE                     3
198 #define NETGAME_CAPTURE_FLAG                    4
199 #define NETGAME_HOARD                           5
200 #define NETGAME_TEAM_HOARD                      6
201
202 typedef struct endlevel_info {
203         ubyte                                   type;
204         ubyte                                   player_num;
205         byte                                    connected;
206         ubyte                                   seconds_left;
207         short                                   kill_matrix[MAX_PLAYERS][MAX_PLAYERS];
208         short                                   kills;
209         short                                   killed;
210 } __pack__ endlevel_info;
211
212 #endif