Code Re-formatting; Preventing Redundancy in Restricted-game joining and leaving players (packet redundancy); Removed Network master menu (and mlticntl code) due to compatibility to older games; Using D2X code for restricted games; Expanded Game-help screen

This commit is contained in:
zicodxx 2007-09-13 10:08:47 +00:00
parent 5f78602f1b
commit dc1e0d5e65
9 changed files with 159 additions and 147 deletions

View file

@ -1,5 +1,9 @@
D1X-Rebirth Changelog
20070913
--------
Sconstruct, main/game.c, main/inferno.c, main/mlticntl.c, main/mprofile.c, main/multi.c, main/network.c, main/network.h: Code Re-formatting; Preventing Redundancy in Restricted-game joining and leaving players (packet redundancy); Removed Network master menu (and mlticntl code) due to compatibility to older games; Using D2X code for restricted games; Expanded Game-help screen
20070908
--------
main/command.c, main/game.c, main/gauges.c, main/multi.c, main/multiver.c, main/network.c, /main/network.h: Added complex netgame information screen (key PAUSE), Removed ping commands because ping handled in new screen

View file

@ -125,7 +125,6 @@ common_sources = [
'main/menu.c',
'main/mglobal.c',
'main/mission.c',
'main/mlticntl.c',
'main/morph.c',
'main/multi.c',
'main/multibot.c',

View file

@ -103,9 +103,6 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "reorder.h"
#include "hudmsg.h"
#include "timer.h"
#ifdef NETWORK
#include "mlticntl.h"
#endif
#include "radar.h"
#include "vers_id.h"
#include "ban.h"
@ -202,6 +199,7 @@ int Game_aborted;
void update_cockpits(int force_redraw);
extern void newdemo_strip_frames(char *, int);
extern int HUD_nmessages;
extern char WaitForRefuseAnswer,RefuseThisPlayer;
#define BACKGROUND_NAME "statback.pcx"
@ -1611,9 +1609,8 @@ void show_help()
int mc = 0;
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_ESC; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_ALT_F2; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_ALT_F3; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_F2; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "Alt-F2/F3\t SAVE/LOAD GAME"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "F3\t SWITCH COCKPIT MODES"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "F4\t TOGGLE RADAR"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_F5; mc++;
@ -1624,13 +1621,12 @@ void show_help()
m[mc].type = NM_TYPE_TEXT; m[mc].text = TXT_HELP_6TO10; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = ""; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "MULTIPLAYER:"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "CTRL-N\t GAME-MASTER MENU"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "ALT-F4\t SHOW RETICLE NAMES"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "F7\t SHOW KILL LIST"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "F8\t SEND MESSAGE"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "ALT-F6\t ACCEPT JOINING PLAYER"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "SHIFT-ALT-F6\t DUMP JOINING PLAYER"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "F8 to F12\t SEND MACRO"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "SHIFT-F8 to SHIFT-F12\t DEFINE MACRO"; mc++;
m[mc].type = NM_TYPE_TEXT; m[mc].text = "PAUSE\t SHOW NETGAME INFORMATION"; mc++;
newmenu_dotiny( NULL, TXT_KEYS, mc, m, NULL );
}
@ -2207,66 +2203,54 @@ void HandleGameKey(int key)
case KEY_F1: do_show_help(); break;
case KEY_F2: Config_menu_flag = 1; break;
case KEY_F3: toggle_cockpit(); break;
case KEY_F4:
case KEY_SHIFTED+KEY_F3: if(!(Game_mode & GM_MULTI)||Network_allow_radar)
case KEY_F4: if(!(Game_mode & GM_MULTI)||Network_allow_radar)
show_radar = !show_radar; break;
case KEY_ALTED + KEY_F4:
Show_reticle_name = (Show_reticle_name+1)%2;
break;
case KEY_F5:
if ( Newdemo_state == ND_STATE_RECORDING )
newdemo_stop_recording();
else if ( Newdemo_state == ND_STATE_NORMAL )
newdemo_start_recording();
break;
case KEY_F6:
#ifdef NETWORK
Show_reticle_name = (Show_reticle_name+1)%2;
#endif
case KEY_F6:
if (restrict_mode && WaitForRefuseAnswer)
{
RefuseThisPlayer=1;
HUD_init_message ("Player accepted!");
}
break;
case KEY_F7:
#ifdef NETWORK
Show_kill_list = (Show_kill_list+1) % ((Game_mode & GM_TEAM) ? 4 : 3);
#endif
break;
#endif
case KEY_ALTED+KEY_F7:
GameArg.GfxGaugeHudMode=(GameArg.GfxGaugeHudMode+1)%GAUGE_HUD_NUMMODES;
break;
#ifdef NETWORK
case KEY_F8:
#ifdef NETWORK
multi_send_message_start();
#endif
break;
#ifdef NETWORK
case KEY_CTRLED + KEY_N:
lamer_do_netgame_menu();
break;
case KEY_ALTED + KEY_F6:
lamer_accept_joining_player();
break;
case KEY_SHIFTED + KEY_ALTED + KEY_F6:
lamer_dump_joining_player();
break;
#endif
#ifdef NETWORK
case KEY_SHIFTED+KEY_F8:
mekh_resend_last();
break;
#endif
case KEY_F9:
case KEY_F10:
case KEY_F11:
case KEY_F12:
#ifdef NETWORK
multi_send_macro(key);
#endif
break; // send taunt macros
case KEY_SHIFTED + KEY_F9:
case KEY_SHIFTED + KEY_F10:
case KEY_SHIFTED + KEY_F11:
case KEY_SHIFTED + KEY_F12:
#ifdef NETWORK
multi_define_macro(key);
#endif
break; // redefine taunt macros
#endif
case KEY_PAUSE: do_game_pause(1); break;
case KEY_PRINT_SCREEN: save_screen_shot(0); break;
@ -3018,10 +3002,6 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
fuelcen_update_all();
do_ai_frame_all();
#ifdef NETWORK
if(restrict_mode)
lamer_do_restrict_frame();
#endif
if (allowed_to_fire_laser()) {
Global_laser_firing_count = Weapon_info[Primary_weapon_to_weapon_info[Primary_weapon]].fire_count * (Controls.fire_primary_state || Controls.fire_primary_down_count);
if ((Primary_weapon == FUSION_INDEX) && (Global_laser_firing_count)) {

View file

@ -445,10 +445,5 @@ int main(int argc,char **argv)
void quit_request()
{
#ifdef NETWORK
void network_abort_game();
if(Network_status)
network_abort_game();
#endif
exit(0);
}

View file

@ -154,39 +154,36 @@ void lamer_do_netgame_menu (void) //This function brings up a menu that lets yo
void lamer_do_restrict_alert (sequence_packet * their) //This function lets you know that someone wants to join a restricted netgame. Displays joining player's callsign and IP.
{
ubyte ipaddress[6];
ubyte ipaddress[6];
if(!restrict_mode)
return;
if(!restrict_mode)
return;
if((dump_join) && (!stricmp(their->player.callsign, restricted_callsign)))
{
network_dump_player(their->player.server, their->player.node, DUMP_DORK);
dump_join = 0;
return;
}
if((dump_join) && (!stricmp(their->player.callsign, restricted_callsign)))
{
network_dump_player(their->player.server, their->player.node, DUMP_DORK);
dump_join = 0;
return;
}
if((restrict_start_time+RESTRICT_WAIT > GameTime) && (waiting_to_join) && (!stricmp(restricted_callsign, their->player.callsign)))
return;
if((restrict_start_time+RESTRICT_WAIT > GameTime) && (waiting_to_join) && (!stricmp(restricted_callsign, their->player.callsign)))
return;
if(accept_join)
return;
if(accept_join)
return;
//if ( (*(uint *)their->player.server) != 0 )
// ipx_get_local_target( their->player.server, their->player.node, ipaddress );
//else
memcpy(ipaddress, their->player.node, 6);
memcpy(ipaddress, their->player.node, 6);
digi_play_sample(SOUND_CONTROL_CENTER_WARNING_SIREN, F1_0*4);
hud_message(MSGC_GAME_FEEDBACK,"%s, ip %d.%d.%d.%d, wants to join the game!", their->player.callsign, /*(int)ipaddress[5], (int)ipaddress[4],*/ (int)ipaddress[3], (int)ipaddress[2], (int)ipaddress[1], (int)ipaddress[0]);
digi_play_sample(SOUND_CONTROL_CENTER_WARNING_SIREN, F1_0*4);
hud_message(MSGC_GAME_FEEDBACK,"%s wants to join (ALT-F6: accept, SHIFT-ALT-F6: deny)", their->player.callsign /*, (int)ipaddress[5], (int)ipaddress[4], (int)ipaddress[3], (int)ipaddress[2], (int)ipaddress[1], (int)ipaddress[0]*/);
restrict_start_time = GameTime;
waiting_to_join = 1;
strcpy(restricted_callsign, their->player.callsign);
//accept_join = 0;
dump_join = 0;
restrict_start_time = GameTime;
waiting_to_join = 1;
strcpy(restricted_callsign, their->player.callsign);
//accept_join = 0;
dump_join = 0;
return;
return;
}
void lamer_do_restrict_frame (void) //This function times out a request to join a restricted netgame if the time has been longer than RESTRICT_TIMEOUT.

View file

@ -7,7 +7,6 @@
#include "multipow.h"
#include "network.h"
#include "text.h"
#include "mlticntl.h"
#include "d_io.h"
#include "args.h"
//added 05/17/99 Matt Mueller

View file

@ -959,7 +959,7 @@ multi_send_data_real(unsigned char *buf, int len, int repeat,char *file,char *fu
if (Game_mode & GM_NETWORK)
{
//edit 03/04/99 Matt Mueller - use direct mode for most packets. (pos_fire is handled elsewhere, so checking here might be redundant..)
if(buf[0]!=MULTI_FIRE && buf[0]!=MULTI_REAPPEAR)
if(buf[0]!=MULTI_FIRE && buf[0]!=MULTI_REAPPEAR && buf[0]!=MULTI_QUIT)
mekh_send_direct_broadcast(buf, len);
else
network_send_data(buf, len, repeat);
@ -1856,7 +1856,7 @@ multi_do_quit(char *buf)
{
//added/changed on 10/11/98 by Victor Rachels cuz this is annoying as a box
//-killed- nm_messagebox(NULL, 1, TXT_OK, TXT_YOU_ARE_ONLY);
hud_message(MSGC_GAME_FEEDBACK, TXT_YOU_ARE_ONLY);
hud_message(MSGC_GAME_FEEDBACK, "You are the only person remaining in this netgame");
//end this change - Victor Rachels
}

View file

@ -71,10 +71,6 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "radar.h" //int Network_allow_radar = 0;
//end this section addition - VR
//added on 11/16/98 by Victor Rachels (from GF) for more multi-control
#include "mlticntl.h"
//end this section addition - VR (from GF)
// Begin addition by GRiM FisH
#include "ignore.h"
// End addition by GRiM FisH
@ -107,6 +103,7 @@ void network_flush();
void network_listen();
void network_read_pdata_packet( ubyte *data, int short_pos );
int network_compare_players(netplayer_info *pl1, netplayer_info *pl2);
void DoRefuseStuff(sequence_packet *their);
#define NETWORK_NEW_LIST
#ifdef NETWORK_NEW_LIST
@ -114,6 +111,7 @@ extern int network_join_game_menu();
#endif
#define NETWORK_TIMEOUT (10*F1_0) // 10 seconds disconnect timeout
#define REFUSE_INTERVAL F1_0 * 8
netgame_info Active_games[MAX_ACTIVE_NETGAMES];
int num_active_games = 0;
@ -159,6 +157,8 @@ ushort my_segments_checksum = 0;
int Network_DOS_compability = 0; // ugly, yes - D1X ONLY or do we also play with DOS versions?
int restrict_mode = 0;
sequence_packet My_Seq;
extern obj_position Player_init[MAX_PLAYERS];
@ -579,9 +579,7 @@ network_new_player(sequence_packet *their)
digi_play_sample(SOUND_HUD_MESSAGE, F1_0);
hud_message(MSGC_MULTI_INFO, "'\002%c%s\004' %s",//removed a \n here.. I don't think its supposed to be there. -MPM
gr_getcolor(player_rgb[pnum].r,player_rgb[pnum].g,player_rgb[pnum].b)+1,
their->player.callsign, TXT_JOINING);
hud_message(MSGC_MULTI_INFO, "'%s' %s",their->player.callsign, TXT_JOINING);
multi_make_ghost_player(pnum);
@ -592,6 +590,10 @@ network_new_player(sequence_packet *their)
network_get_player_settings(pnum);
}
char RefuseThisPlayer=0,WaitForRefuseAnswer=0;
char RefusePlayerName[12];
fix RefuseTimeLimit=0;
void network_welcome_player(sequence_packet *their)
{
// Add a player to a game already in progress
@ -733,9 +735,7 @@ void network_welcome_player(sequence_packet *their)
digi_play_sample(SOUND_HUD_MESSAGE, F1_0);
hud_message(MSGC_MULTI_INFO, "'\002%c%s\004' %s",
gr_getcolor(player_rgb[player_num].r,player_rgb[player_num].g,player_rgb[player_num].b)+1,
Players[player_num].callsign, TXT_REJOIN);
hud_message(MSGC_MULTI_INFO, "'%s' %s", Players[player_num].callsign, TXT_REJOIN);
}
// Send updated Objects data to the new/returning player
@ -1191,7 +1191,6 @@ network_dump_player(ubyte * server, ubyte *node, int why)
{
// Remove player from game (not chosen, kicked, ...)
Assert(MySyncPackInitialized);
My_Seq.type = PID_DUMP;
My_Seq.player.connected = why;
#ifdef NATIVE_PACKETS
@ -1492,43 +1491,33 @@ void network_process_packet(ubyte *data, int length )
case PID_REQUEST:
mprintf( (0, "Got REQUEST from '%s'\n", their->player.callsign ));
if (!ipx_check_ready_to_join(their->player.server,their->player.node))
break;
if (!ipx_check_ready_to_join(their->player.server,their->player.node))
break;
//added on 2/1/99 by Victor Rachels for bans
if(checkban(their->player.node))
{
network_dump_player(their->player.server, their->player.node, DUMP_DORK);
hud_message(MSGC_GAME_FEEDBACK, "%s tried to join at banned ip %d.%d.%d.%d", their->player.callsign,their->player.node[3],their->player.node[2],their->player.node[1],their->player.node[0] );
}
//end this section addition - VR
else if (Network_status == NETSTAT_STARTING)
{
//added on 2/1/99 by Victor Rachels for bans
if(checkban(their->player.node))
{
network_dump_player(their->player.server, their->player.node, DUMP_DORK);
hud_message(MSGC_GAME_FEEDBACK, "%s tried to join at banned ip %d.%d.%d.%d", their->player.callsign,their->player.node[3],their->player.node[2],their->player.node[1],their->player.node[0] );
}
//end this section addition - VR
else if (Network_status == NETSTAT_STARTING)
{
// Someone wants to join our game!
network_add_player(their);
}
else if (Network_status == NETSTAT_WAITING)
{
network_add_player(their);
}
else if (Network_status == NETSTAT_WAITING)
{
// Someone is ready to recieve a sync packet
network_process_request(their);
}
}
else if (Network_status == NETSTAT_PLAYING)
{
//Begin addition by GF
if(!restrict_mode)
network_welcome_player(their);
else if(restrict_mode)
lamer_network_welcome_player_restricted(their);
// Someone wants to join a game in progress!
//-killed- network_welcome_player(their);
//End addition by GF
}
{
if (restrict_mode)
DoRefuseStuff (their);
else
network_welcome_player(their);
}
break;
// Begin addition by GF
case PID_DUMP:
@ -1826,7 +1815,7 @@ void network_sync_poll( int nitems, newmenu_item * menus, int * key, int citem )
if (Network_status != NETSTAT_WAITING) // Status changed to playing, exit the menu
*key = -2;
if (!Network_rejoined && (timer_get_approx_seconds() > t1+F1_0*2))
if (Network_status != NETSTAT_MENU && !Network_rejoined && (timer_get_approx_seconds() > t1+F1_0*2))
{
int i;
@ -2966,22 +2955,14 @@ network_wait_for_sync(void)
sprintf( m[0].text, "%s\n'%s' %s", TXT_NET_WAITING, Netgame.players[i].callsign, TXT_NET_TO_ENTER );
menu:
choice=newmenu_do( NULL, TXT_WAIT, 2, m, network_sync_poll );
while (choice > -1)
choice=newmenu_do( NULL, TXT_WAIT, 2, m, network_sync_poll );
if (choice > -1)
goto menu;
if (Network_status != NETSTAT_PLAYING)
{
sequence_packet me;
// if (Network_status == NETSTAT_ENDLEVEL)
// {
// network_send_endlevel_packet(0);
// longjmp(LeaveGame, 1);
// }
mprintf((0, "Aborting join.\n"));
me.type = PID_QUIT_JOINING;
memcpy( me.player.callsign, Players[Player_num].callsign, CALLSIGN_LEN+1 );
@ -3271,7 +3252,7 @@ void network_leave_game()
N_players = Netgame.numplayers = 0;
network_send_game_info(NULL, 1);
}
Players[Player_num].connected = 0;
network_send_endlevel_packet();
change_playernum_to(0);
@ -3356,9 +3337,7 @@ void network_timeout_player(int playernum)
digi_play_sample(SOUND_HUD_MESSAGE, F1_0);
hud_message(MSGC_MULTI_INFO, "\002%c%s\004 %s",
gr_getcolor(player_rgb[playernum].r,player_rgb[playernum].g,player_rgb[playernum].b)+1,
Players[playernum].callsign, TXT_DISCONNECTING);
hud_message(MSGC_MULTI_INFO, "%s %s", Players[playernum].callsign, TXT_DISCONNECTING);
for (i = 0; i < N_players; i++)
if (Players[i].connected)
n++;
@ -3367,7 +3346,7 @@ void network_timeout_player(int playernum)
{
//added/changed on 10/11/98 by Victor Rachels cuz this is annoying as a box
//-killed- nm_messagebox(NULL, 1, TXT_OK, TXT_YOU_ARE_ONLY);
hud_message(MSGC_GAME_FEEDBACK, TXT_YOU_ARE_ONLY);
hud_message(MSGC_GAME_FEEDBACK, "You are the only person remaining in this netgame");
//end this section change - VR
}
}
@ -3387,6 +3366,9 @@ void network_do_frame(int force, int listen)
if ((Network_status != NETSTAT_PLAYING) || (Endlevel_sequence)) // Don't send postion during escape sequence...
goto listen;
if (WaitForRefuseAnswer && timer_get_approx_seconds()>(RefuseTimeLimit+(F1_0*12)))
WaitForRefuseAnswer=0;
last_send_time += FrameTime;
last_timeout_check += FrameTime;
@ -3469,9 +3451,7 @@ void network_do_frame(int force, int listen)
//added on 11/18/98 by Victor Rachels to hack ghost disconnects
if(Players[i].connected != 1 && Objects[Players[i].objnum].type != OBJ_GHOST)
{
hud_message(MSGC_MULTI_INFO, "\002%c%s\004 has left.",
gr_getcolor(player_rgb[i].r,player_rgb[i].g,player_rgb[i].b)+1,
Players[i].callsign);
hud_message(MSGC_MULTI_INFO, "%s has left.", Players[i].callsign);
multi_make_player_ghost(i);
}
//end this section addition - VR
@ -3637,9 +3617,7 @@ void network_read_pdata_packet(ubyte *data, int short_packet)
create_player_appearance_effect(&Objects[TheirObjnum]);
digi_play_sample( SOUND_HUD_MESSAGE, F1_0);
hud_message( MSGC_MULTI_INFO, "'\002%c%s\004' %s",
gr_getcolor(player_rgb[TheirPlayernum].r,player_rgb[TheirPlayernum].g,player_rgb[TheirPlayernum].b)+1,
Players[TheirPlayernum].callsign, TXT_REJOIN );
hud_message( MSGC_MULTI_INFO, "'%s' %s",Players[TheirPlayernum].callsign, TXT_REJOIN );
#ifndef SHAREWARE
multi_send_score();
@ -3681,16 +3659,74 @@ int network_who_is_master(void)
return Player_num;
}
#if 0 // currently not used
// compare two players
// players are considered equal if they have the same callsign and
// the same network address
// returns 1 if equal, 0 if not.
int network_compare_players(netplayer_info *pl1, netplayer_info *pl2) {
return ((strcasecmp(pl1->callsign, pl2->callsign) == 0) &&
(memcmp(pl1->node, pl2->node, 6) == 0) &&
(memcmp(pl1->server, pl2->server, 4) == 0));
void DoRefuseStuff (sequence_packet *their)
{
int i;
for (i=0;i<MAX_PLAYERS;i++)
{
if (!strcmp (their->player.callsign,Players[i].callsign))
{
network_welcome_player(their);
return;
}
}
if (!WaitForRefuseAnswer)
{
for (i=0;i<MAX_PLAYERS;i++)
{
if (!strcmp (their->player.callsign,Players[i].callsign))
{
network_welcome_player(their);
return;
}
}
digi_play_sample (SOUND_CONTROL_CENTER_WARNING_SIREN,F1_0*2);
HUD_init_message ("%s wants to join (accept: F6)",their->player.callsign);
strcpy (RefusePlayerName,their->player.callsign);
RefuseTimeLimit=timer_get_approx_seconds();
RefuseThisPlayer=0;
WaitForRefuseAnswer=1;
}
else
{
for (i=0;i<MAX_PLAYERS;i++)
{
if (!strcmp (their->player.callsign,Players[i].callsign))
{
network_welcome_player(their);
return;
}
}
if (strcmp(their->player.callsign,RefusePlayerName))
return;
if (RefuseThisPlayer)
{
RefuseTimeLimit=0;
RefuseThisPlayer=0;
WaitForRefuseAnswer=0;
network_welcome_player(their);
return;
}
if ((timer_get_approx_seconds()) > RefuseTimeLimit+REFUSE_INTERVAL)
{
RefuseTimeLimit=0;
RefuseThisPlayer=0;
WaitForRefuseAnswer=0;
if (!strcmp (their->player.callsign,RefusePlayerName))
{
network_dump_player(their->player.server,their->player.node, DUMP_DORK);
}
return;
}
}
}
#endif
#endif

View file

@ -135,6 +135,8 @@ extern int Network_rejoined;
extern int Network_new_game;
extern int Network_status;
extern int restrict_mode;
extern fix LastPacketTime[MAX_PLAYERS];
//added on 8/6/98 by Matt Mueller