⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_netcmd.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 2 页
字号:
// Emacs style mode select   -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: d_netcmd.c,v 1.24 2001/04/01 17:35:06 bpereira Exp $//// Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.////// $Log: d_netcmd.c,v $// Revision 1.24  2001/04/01 17:35:06  bpereira// no message//// Revision 1.23  2001/03/19 21:18:48  metzgermeister//   * missing textures in HW mode are replaced by default texture//   * fixed crash bug with P_SpawnMissile(.) returning NULL//   * deep water trick and other nasty thing work now in HW mode (tested with tnt/map02 eternal/map02)//   * added cvar gr_correcttricks//// Revision 1.22  2001/02/24 13:35:19  bpereira// no message//// Revision 1.21  2001/02/10 12:27:13  bpereira// no message//// Revision 1.20  2001/01/25 22:15:41  bpereira// added heretic support//// Revision 1.19  2000/11/26 20:36:14  hurdler// Adding autorun2//// Revision 1.18  2000/11/11 13:59:45  bpereira// no message//// Revision 1.17  2000/11/02 19:49:35  bpereira// no message//// Revision 1.16  2000/10/08 13:30:00  bpereira// no message//// Revision 1.15  2000/09/10 10:39:06  metzgermeister// *** empty log message ***//// Revision 1.14  2000/08/31 14:30:55  bpereira// no message//// Revision 1.13  2000/08/16 14:10:01  hurdler// add master server code//// Revision 1.12  2000/08/10 14:51:25  ydario// OS/2 port//// Revision 1.11  2000/05/13 19:52:10  metzgermeister// cd vol jiggle//// Revision 1.10  2000/04/23 16:19:52  bpereira// no message//// Revision 1.9  2000/04/16 18:38:07  bpereira// no message//// Revision 1.8  2000/04/07 23:11:17  metzgermeister// added mouse move//// Revision 1.7  2000/04/04 00:32:45  stroggonmeth// Initial Boom compatability plus few misc changes all around.//// Revision 1.6  2000/03/29 19:39:48  bpereira// no message//// Revision 1.5  2000/03/06 15:58:47  hurdler// Add Bell Kin's changes//// Revision 1.4  2000/03/05 17:10:56  bpereira// no message//// Revision 1.3  2000/02/27 00:42:10  hurdler// fix CR+LF problem//// Revision 1.2  2000/02/26 00:28:42  hurdler// Mostly bug fix (see borislog.txt 23-2-2000, 24-2-2000)////// DESCRIPTION://      host/client network commands//      commands are executed through the command buffer//      like console commands//      other miscellaneous commands (at the end)////-----------------------------------------------------------------------------#include "doomdef.h"#include "console.h"#include "command.h"#include "d_netcmd.h"#include "i_system.h"#include "dstrings.h"#include "g_game.h"#include "hu_stuff.h"#include "g_input.h"#include "m_menu.h"#include "r_local.h"#include "r_things.h"#include "p_inter.h"#include "p_local.h" #include "p_setup.h"#include "s_sound.h"#include "m_misc.h"#include "am_map.h"#include "byteptr.h"#include "d_netfil.h"#include "p_spec.h"#include "m_cheat.h"#include "d_clisrv.h"#include "v_video.h"#include "d_main.h"// ------// protos// ------void Command_Color_f (void);void Command_Name_f (void);void Command_WeaponPref(void);void Got_NameAndcolor(char **cp,int playernum);void Got_WeaponPref  (char **cp,int playernum);void Got_Mapcmd      (char **cp,int playernum);void Got_ExitLevelcmd(char **cp,int playernum);void Got_LoadGamecmd (char **cp,int playernum);void Got_SaveGamecmd (char **cp,int playernum);void Got_Pause       (char **cp,int playernum);void Got_UseArtefact (char **cp,int playernum);void TeamPlay_OnChange(void);void FragLimit_OnChange(void);void Deahtmatch_OnChange(void);void TimeLimit_OnChange(void);void Command_Playdemo_f (void);void Command_Timedemo_f (void);void Command_Stopdemo_f (void);void Command_Map_f (void);void Command_Restart_f (void);void Command_Addfile (void);void Command_Pause(void);void Command_Frags_f (void);void Command_TeamFrags_f(void);void Command_Version_f (void);void Command_Quit_f (void);void Command_Water_f (void);void Command_ExitLevel_f(void);void Command_Load_f(void);void Command_Save_f(void);void Command_ExitGame_f(void);//Added by Hurdler for master server connectionvoid AddMServCommands(void);// =========================================================================//                           CLIENT VARIABLES// =========================================================================void SendWeaponPref(void);void SendNameAndColor(void);void SendNameAndColor2(void);// these two are just meant to be saved to the configconsvar_t cv_playername           = {"name"                ,NULL       ,CV_SAVE | CV_CALL | CV_NOINIT,NULL,SendNameAndColor};consvar_t cv_playercolor          = {"color"               ,"0"        ,CV_SAVE | CV_CALL | CV_NOINIT,Color_cons_t,SendNameAndColor};// player's skin, saved for commodity, when using a favorite skins wad..consvar_t cv_skin                 = {"skin"                ,DEFAULTSKIN,CV_SAVE | CV_CALL | CV_NOINIT,NULL /*skin_cons_t*/,SendNameAndColor};consvar_t cv_weaponpref           = {"weaponpref"          ,"014576328",CV_SAVE | CV_CALL | CV_NOINIT,NULL,SendWeaponPref};consvar_t cv_autoaim              = {"autoaim"             ,"1"        ,CV_SAVE | CV_CALL | CV_NOINIT,CV_OnOff,SendWeaponPref};consvar_t cv_originalweaponswitch = {"originalweaponswitch","0"        ,CV_SAVE | CV_CALL | CV_NOINIT,CV_OnOff,SendWeaponPref};// secondary player for splitscreen modeconsvar_t cv_playername2          = {"name2"               ,"big b"    ,CV_SAVE | CV_CALL | CV_NOINIT,NULL,SendNameAndColor2};consvar_t cv_playercolor2         = {"color2"              ,"1"        ,CV_SAVE | CV_CALL | CV_NOINIT,Color_cons_t,SendNameAndColor2};consvar_t cv_skin2                = {"skin2"               ,DEFAULTSKIN,CV_SAVE | CV_CALL | CV_NOINIT,NULL /*skin_cons_t*/,SendNameAndColor2};CV_PossibleValue_t usemouse_cons_t[]={{0,"Off"},{1,"On"},{2,"Force"},{0,NULL}};#ifdef LMOUSE2CV_PossibleValue_t mouse2port_cons_t[]={{0,"/dev/gpmdata"},{1,"/dev/ttyS0"},{2,"/dev/ttyS1"},{3,"/dev/ttyS2"},{4,"/dev/ttyS3"},{0,NULL}};#elseCV_PossibleValue_t mouse2port_cons_t[]={{1,"COM1"},{2,"COM2"},{3,"COM3"},{4,"COM4"},{0,NULL}};#endif#ifdef LJOYSTICKCV_PossibleValue_t joyport_cons_t[]={{1,"/dev/js0"},{2,"/dev/js1"},{3,"/dev/js2"},{4,"/dev/js3"},{0,NULL}};#endif#ifdef __WIN32__#define usejoystick_cons_t  NULL        // accept whatever value                                        // it is in fact the joystick device number#else#ifdef __DJGPP__CV_PossibleValue_t usejoystick_cons_t[]={{0,"Off"}                                        ,{1,"4 BUttons"}                                        ,{2,"Standart"}                                        ,{3,"6 Buttons"}                                        ,{4,"Wingman Extreme"}                                        ,{5,"Flightstick Pro"}                                        ,{6,"8 Buttons"}                                        ,{7,"Sidewinder"}                                        ,{8,"GamePad Pro"}                                        ,{9,"Snes lpt1"}                                        ,{10,"Snes lpt2"}                                        ,{11,"Snes lpt3"}                                        ,{12,"Wingman Warrior"}                                        ,{0,NULL}};#else#define usejoystick_cons_t  NULL//#error "cv_usejoystick don't have possible value for this OS !"#endif#endifconsvar_t cv_usemouse    = {"use_mouse","1", CV_SAVE | CV_CALL,usemouse_cons_t,I_StartupMouse};consvar_t cv_usemouse2   = {"use_mouse2","0", CV_SAVE | CV_CALL,usemouse_cons_t,I_StartupMouse2};consvar_t cv_usejoystick = {"use_joystick","0",CV_SAVE | CV_CALL,usejoystick_cons_t,I_InitJoystick};#ifdef LJOYSTICKextern void I_JoyScale();consvar_t cv_joyport = {"joyport","/dev/js0", CV_SAVE, joyport_cons_t};consvar_t cv_joyscale = {"joyscale","0",CV_SAVE | CV_CALL,NULL,I_JoyScale};#endif#ifdef LMOUSE2consvar_t cv_mouse2port  = {"mouse2port","/dev/gpmdata", CV_SAVE, mouse2port_cons_t };consvar_t cv_mouse2opt = {"mouse2opt","0", CV_SAVE, NULL};#elseconsvar_t cv_mouse2port  = {"mouse2port","COM2", CV_SAVE, mouse2port_cons_t };#endifCV_PossibleValue_t teamplay_cons_t[]={{0,"Off"},{1,"Color"},{2,"Skin"},{3,NULL}};CV_PossibleValue_t deathmatch_cons_t[]={{0,"Coop"},{1,"1"},{2,"2"},{3,"3"},{0,NULL}};CV_PossibleValue_t fraglimit_cons_t[]={{0,"MIN"},{1000,"MAX"},{0,NULL}};consvar_t cv_teamplay   = {"teamplay"  ,"0",CV_NETVAR | CV_CALL,teamplay_cons_t, TeamPlay_OnChange};consvar_t cv_teamdamage = {"teamdamage","0",CV_NETVAR,CV_OnOff};consvar_t cv_fraglimit  = {"fraglimit" ,"0",CV_NETVAR | CV_CALL | CV_NOINIT,fraglimit_cons_t, FragLimit_OnChange};consvar_t cv_timelimit  = {"timelimit" ,"0",CV_NETVAR | CV_CALL | CV_NOINIT,CV_Unsigned, TimeLimit_OnChange};consvar_t cv_deathmatch = {"deathmatch","0",CV_NETVAR | CV_CALL, deathmatch_cons_t, Deahtmatch_OnChange};consvar_t cv_allowexitlevel = {"allowexitlevel"  ,"1",CV_NETVAR , CV_YesNo, NULL};consvar_t cv_netstat = {"netstat","0",0,CV_OnOff};// =========================================================================//                           CLIENT STARTUP// =========================================================================// register client and server commands//void D_RegisterClientCommands (void){    int i;    for(i=0;i<MAXSKINCOLORS;i++)        Color_cons_t[i].strvalue=Color_Names[i];  //  // register commands  //    RegisterNetXCmd(XD_NAMEANDCOLOR,Got_NameAndcolor);    RegisterNetXCmd(XD_WEAPONPREF,Got_WeaponPref);    RegisterNetXCmd(XD_MAP,Got_Mapcmd);    RegisterNetXCmd(XD_EXITLEVEL,Got_ExitLevelcmd);    RegisterNetXCmd(XD_PAUSE,Got_Pause);    RegisterNetXCmd(XD_USEARTEFACT,Got_UseArtefact);     COM_AddCommand ("playdemo", Command_Playdemo_f);    COM_AddCommand ("timedemo", Command_Timedemo_f);    COM_AddCommand ("stopdemo", Command_Stopdemo_f);    COM_AddCommand ("map", Command_Map_f);    COM_AddCommand ("restartlevel", Command_Restart_f);    COM_AddCommand ("exitgame",Command_ExitGame_f);    COM_AddCommand ("exitlevel",Command_ExitLevel_f);    COM_AddCommand ("addfile", Command_Addfile);    COM_AddCommand ("pause", Command_Pause);    COM_AddCommand ("turbo", Command_Turbo_f);     // turbo speed    COM_AddCommand ("version", Command_Version_f);    COM_AddCommand ("quit", Command_Quit_f);    COM_AddCommand ("chatmacro", Command_Chatmacro_f); // hu_stuff.c    COM_AddCommand ("setcontrol", Command_Setcontrol_f);    COM_AddCommand ("setcontrol2", Command_Setcontrol2_f);    COM_AddCommand ("frags",Command_Frags_f);    COM_AddCommand ("teamfrags",Command_TeamFrags_f);    COM_AddCommand ("saveconfig",Command_SaveConfig_f);    COM_AddCommand ("loadconfig",Command_LoadConfig_f);    COM_AddCommand ("changeconfig",Command_ChangeConfig_f);    COM_AddCommand ("screenshot",M_ScreenShot);  //  // register main variables  //    //register these so it is saved to config    cv_playername.defaultvalue=I_GetUserName();    if( cv_playername.defaultvalue == NULL )        cv_playername.defaultvalue = "gi joe";    CV_RegisterVar (&cv_playername);    CV_RegisterVar (&cv_playercolor);    CV_RegisterVar (&cv_weaponpref);    CV_RegisterVar (&cv_autoaim);    CV_RegisterVar (&cv_originalweaponswitch);    // r_things.c (skin NAME)    CV_RegisterVar (&cv_skin);    // secondary player (splitscreen)    CV_RegisterVar (&cv_skin2);    CV_RegisterVar (&cv_playername2);    CV_RegisterVar (&cv_playercolor2);    //FIXME: not to be here.. but needs be done for config loading    CV_RegisterVar (&cv_usegamma);    //m_menu.c    CV_RegisterVar (&cv_crosshair);    CV_RegisterVar (&cv_autorun);    CV_RegisterVar (&cv_invertmouse);    CV_RegisterVar (&cv_alwaysfreelook);    CV_RegisterVar (&cv_mousemove);    CV_RegisterVar (&cv_showmessages);    //see m_menu.c    //CV_RegisterVar (&cv_showmessages2);    CV_RegisterVar (&cv_autorun2);    //CV_RegisterVar (&cv_crosshair2);    //CV_RegisterVar (&cv_autoaim2);    //CV_RegisterVar (&cv_controlperkey2);    //g_input.c    CV_RegisterVar (&cv_usemouse2);    CV_RegisterVar (&cv_invertmouse2);    CV_RegisterVar (&cv_alwaysfreelook2);    CV_RegisterVar (&cv_mousemove2);    CV_RegisterVar (&cv_mousesens2);    CV_RegisterVar (&cv_mlooksens2);    CV_RegisterVar (&cv_joystickfreelook);    // WARNING : the order is important when inititing mouse2     //           we need the mouse2port    CV_RegisterVar (&cv_mouse2port); #ifdef LMOUSE2    CV_RegisterVar (&cv_mouse2opt);#endif    CV_RegisterVar (&cv_mousesens);    CV_RegisterVar (&cv_mlooksens);    CV_RegisterVar (&cv_controlperkey);    CV_RegisterVar (&cv_usemouse);    CV_RegisterVar (&cv_usejoystick);#ifdef LJOYSTICK    CV_RegisterVar (&cv_joyport);    CV_RegisterVar (&cv_joyscale);#endif    CV_RegisterVar (&cv_allowjump);    CV_RegisterVar (&cv_allowrocketjump);    CV_RegisterVar (&cv_allowautoaim);    CV_RegisterVar (&cv_allowturbo);    CV_RegisterVar (&cv_allowexitlevel);    //s_sound.c    CV_RegisterVar (&cv_soundvolume);    CV_RegisterVar (&cv_musicvolume);    CV_RegisterVar (&cv_numChannels);    //i_cdmus.c    CV_RegisterVar (&cd_volume);    CV_RegisterVar (&cdUpdate);#if defined (LINUX) && !defined (SDL)    CV_RegisterVar (&cv_jigglecdvol);#endif    // screen.c ?    CV_RegisterVar (&cv_fullscreen);  // only for opengl so use differant name please and move it to differant place    CV_RegisterVar (&cv_scr_depth);    CV_RegisterVar (&cv_scr_width);    CV_RegisterVar (&cv_scr_height);    // add cheat commands, I'm bored of deh patches renaming the idclev ! :-)    COM_AddCommand ("noclip", Command_CheatNoClip_f);    COM_AddCommand ("god", Command_CheatGod_f);    COM_AddCommand ("gimme", Command_CheatGimme_f);    // p_mobj.c    CV_RegisterVar (&cv_itemrespawntime);    CV_RegisterVar (&cv_itemrespawn);    CV_RegisterVar (&cv_respawnmonsters);    CV_RegisterVar (&cv_respawnmonsterstime);    CV_RegisterVar (&cv_fastmonsters);    CV_RegisterVar (&cv_splats);    // WATER HACK TEST UNTIL FULLY FINISHED    COM_AddCommand ("dev_water", Command_Water_f);    //misc    CV_RegisterVar (&cv_teamplay);    CV_RegisterVar (&cv_teamdamage);    CV_RegisterVar (&cv_fraglimit);    CV_RegisterVar (&cv_deathmatch);    CV_RegisterVar (&cv_timelimit);    CV_RegisterVar (&cv_playdemospeed);    CV_RegisterVar (&cv_netstat);        COM_AddCommand ("load",Command_Load_f);    RegisterNetXCmd(XD_LOADGAME,Got_LoadGamecmd);    COM_AddCommand ("save",Command_Save_f);    RegisterNetXCmd(XD_SAVEGAME,Got_SaveGamecmd);/* ideas of commands names from Quake    "status"    "notarget"    "fly"    "changelevel"    "reconnect"    "tell"    "kill"    "spawn"    "begin"    "prespawn"    "ping"    "startdemos"    "demos"    "stopdemo"*/    //Added by Hurdler for master server connection    AddMServCommands();}// =========================================================================//                            CLIENT STUFF// =========================================================================//  name, color, or skin has changed//void SendNameAndColor(void){    char     buf[MAXPLAYERNAME+1+SKINNAMESIZE+1],*p;    p=buf;    WRITEBYTE(p,cv_playercolor.value);    WRITESTRINGN(p,cv_playername.string,MAXPLAYERNAME);    *(p-1) = 0; // finish teh string;    // check if player has the skin loaded (cv_skin may have    //  the name of a skin that was available in the previous game)    cv_skin.value=R_SkinAvailable(cv_skin.string);    if (!cv_skin.value)        WRITESTRINGN(p,DEFAULTSKIN,SKINNAMESIZE)    else        WRITESTRINGN(p,cv_skin.string,SKINNAMESIZE);    *(p-1) = 0; // finish the string;    SendNetXCmd(XD_NAMEANDCOLOR,buf,p-buf);}// splitscreenvoid SendNameAndColor2(void){    char     buf[MAXPLAYERNAME+1+SKINNAMESIZE+1],*p;    p=buf;    WRITEBYTE(p,cv_playercolor2.value);    WRITESTRINGN(p,cv_playername2.string,MAXPLAYERNAME);    *(p-1) = 0; // finish teh string;    // check if player has the skin loaded (cv_skin may have    //  the name of a skin that was available in the previous game)    cv_skin2.value=R_SkinAvailable(cv_skin2.string);    if (!cv_skin2.value)        WRITESTRINGN(p,DEFAULTSKIN,SKINNAMESIZE)    else        WRITESTRINGN(p,cv_skin2.string,SKINNAMESIZE);    *(p-1) = 0; // finish the string;    SendNetXCmd2(XD_NAMEANDCOLOR,buf,p-buf);}void Got_NameAndcolor(char **cp,int playernum){    player_t *p=&players[playernum];    // color    p->skincolor=READBYTE(*cp) % MAXSKINCOLORS;    // a copy of color    if(p->mo)        p->mo->flags =  (p->mo->flags & ~MF_TRANSLATION)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -