Index: common/doomstat.h =================================================================== --- common/doomstat.h (revision 1832) +++ common/doomstat.h (working copy) @@ -89,6 +89,7 @@ #define GM_DM 1.0f #define GM_TEAMDM 2.0f #define GM_CTF 3.0f +#define GM_ARENA 4.0f // ------------------------- Index: server/src/p_mobj.cpp =================================================================== --- server/src/p_mobj.cpp (revision 1832) +++ server/src/p_mobj.cpp (working copy) @@ -1383,6 +1383,56 @@ // send new objects SV_SpawnMobj(mobj); } + + if (sv_gametype == GM_ARENA) + { + size_t i; + + p->health = deh.MaxSoulsphere; + p->mo->health = p->health; + p->armorpoints = deh.MaxArmor; + p->armortype = deh.BlueAC; + /*if(p->readyweapon != wp_supershotgun) + { + SV_BroadcastPrintf(PRINT_HIGH, "this one?\n"); + p->pendingweapon = wp_supershotgun; + }*/ + p->backpack = true; + p->powers[pw_strength] = true; + + for (i = 0; i < NUMWEAPONS; i++) + p->weaponowned[i] = true; + + p->weaponowned[wp_bfg] = false; + p->weaponowned[wp_chainsaw] = false; + + for (i = 0; i < NUMAMMO; i++) { + p->maxammo[i] *= 2; + p->ammo[i] = p->maxammo[i]; + } + + // inform client + { + size_t j; + client_t *cl = &p->client; + MSG_WriteMarker (&cl->reliablebuf, svc_playerinfo); + + for(j = 0; j < NUMWEAPONS; j++) + MSG_WriteByte (&cl->reliablebuf, p->weaponowned[j]); + + for(j = 0; j < NUMAMMO; j++) + { + MSG_WriteShort (&cl->reliablebuf, p->maxammo[j]); + MSG_WriteShort (&cl->reliablebuf, p->ammo[j]); + } + + MSG_WriteByte (&cl->reliablebuf, p->health); + MSG_WriteByte (&cl->reliablebuf, p->armorpoints); + MSG_WriteByte (&cl->reliablebuf, p->armortype); + MSG_WriteByte (&cl->reliablebuf, p->readyweapon); + MSG_WriteByte (&cl->reliablebuf, p->backpack); + } + } } // @@ -1628,6 +1678,9 @@ if (i == MT_SKULL || (mobjinfo[i].flags & MF_COUNTKILL) ) return; + if (sv_gametype == GM_ARENA && (mobjinfo[i].flags & MF_SPECIAL) && (mthing->type < MT_BSOK || mthing->type > MT_RDWN)) + return; + // spawn it x = mthing->x << FRACBITS; y = mthing->y << FRACBITS; Index: server/src/sv_main.cpp =================================================================== --- server/src/sv_main.cpp (revision 1832) +++ server/src/sv_main.cpp (working copy) @@ -3719,7 +3719,7 @@ // LEVEL TIMER if (players.size()) { - if (sv_gametype == GM_DM) { + if (sv_gametype == GM_DM || sv_gametype == GM_ARENA) { player_t *winplayer = &players[0]; bool drawgame = false; Index: server/src/p_interaction.cpp =================================================================== --- server/src/p_interaction.cpp (revision 1832) +++ server/src/p_interaction.cpp (working copy) @@ -1175,7 +1175,7 @@ if (source && source->player && target->player && level.time) { // [Toke] Better sv_fraglimit - if (sv_gametype == GM_DM && sv_fraglimit && splayer->fragcount >= (int)sv_fraglimit && !sv_fragexitswitch) // [ML] 04/4/06: Added !sv_fragexitswitch + if ((sv_gametype == GM_DM || sv_gametype == GM_ARENA) && sv_fraglimit && splayer->fragcount >= (int)sv_fraglimit && !sv_fragexitswitch) // [ML] 04/4/06: Added !sv_fragexitswitch { SV_BroadcastPrintf (PRINT_HIGH, "Frag limit hit. Game won by %s!\n", splayer->userinfo.netname); shotclock = TICRATE*2; Index: server/src/d_player.h =================================================================== --- server/src/d_player.h (revision 1832) +++ server/src/d_player.h (working copy) @@ -362,7 +362,7 @@ deathcount = 0; killcount = 0; pendingweapon = wp_nochange; - readyweapon = wp_nochange; + readyweapon = wp_nochange; for (i = 0; i < NUMWEAPONS; i++) weaponowned[i] = false; for (i = 0; i < NUMAMMO; i++) Index: server/src/sv_sqpold.cpp =================================================================== --- server/src/sv_sqpold.cpp (revision 1832) +++ server/src/sv_sqpold.cpp (working copy) @@ -179,7 +179,7 @@ for (i = 1; i < numwads; ++i) MSG_WriteString(&ml_message, wadnames[i].c_str()); - MSG_WriteBool(&ml_message, (sv_gametype == GM_DM || sv_gametype == GM_TEAMDM)); + MSG_WriteBool(&ml_message, (sv_gametype == GM_DM || sv_gametype == GM_TEAMDM || sv_gametype == GM_ARENA)); MSG_WriteByte(&ml_message, (BYTE)sv_skill); MSG_WriteBool(&ml_message, (sv_gametype == GM_TEAMDM)); MSG_WriteBool(&ml_message, (sv_gametype == GM_CTF)); Index: server/src/g_game.cpp =================================================================== --- server/src/g_game.cpp (revision 1832) +++ server/src/g_game.cpp (working copy) @@ -593,9 +593,20 @@ p.health = deh.StartHealth; // [RH] Used to be MAXHEALTH p.armortype = 0; p.armorpoints = 0; - p.readyweapon = p.pendingweapon = wp_pistol; - p.weaponowned[wp_fist] = true; - p.weaponowned[wp_pistol] = true; + if(sv_gametype == GM_ARENA) + { + p.readyweapon = p.pendingweapon = wp_pistol; + p.weaponowned[wp_fist] = true; + p.weaponowned[wp_pistol] = true; + } + else + { + p.readyweapon = p.pendingweapon = wp_pistol; + p.weaponowned[wp_fist] = true; + p.weaponowned[wp_pistol] = true; + + } + p.ammo[am_clip] = deh.StartBullets; // [RH] Used to be 50 p.respawn_time = level.time; Index: client/src/g_game.cpp =================================================================== --- client/src/g_game.cpp (revision 1832) +++ client/src/g_game.cpp (working copy) @@ -432,7 +432,7 @@ } else if (consoleplayer().spectator || sv_gametype == GM_COOP || - (sv_gametype != GM_DM && + ((sv_gametype != GM_DM || sv_gametype != GM_ARENA) && players[curr].userinfo.team == consoleplayer().userinfo.team)) { displayplayer_id = players[curr].id; @@ -1141,10 +1141,10 @@ p->usedown = p->attackdown = true; // don't do anything immediately p->playerstate = PST_LIVE; - p->health = deh.StartHealth; // [RH] Used to be MAXHEALTH - p->readyweapon = p->pendingweapon = wp_pistol; - p->weaponowned[wp_fist] = true; - p->weaponowned[wp_pistol] = true; +/ p->health = deh.StartHealth; // [RH] Used to be MAXHEALTH + p.readyweapon = p.pendingweapon = wp_pistol; + p.weaponowned[wp_fist] = true; + p.weaponowned[wp_pistol] = true; p->ammo[am_clip] = deh.StartBullets; // [RH] Used to be 50 for (i = 0; (i < NUMAMMO); i++) @@ -1171,9 +1171,20 @@ p.health = deh.StartHealth; // [RH] Used to be MAXHEALTH p.armortype = 0; p.armorpoints = 0; - p.readyweapon = p.pendingweapon = wp_pistol; - p.weaponowned[wp_fist] = true; - p.weaponowned[wp_pistol] = true; + if(sv_gametype == GM_ARENA) + { + p.readyweapon = p.pendingweapon = wp_pistol; + p.weaponowned[wp_fist] = true; + p.weaponowned[wp_pistol] = true; + } + else + { + p.readyweapon = p.pendingweapon = wp_pistol; + p.weaponowned[wp_fist] = true; + p.weaponowned[wp_pistol] = true; + + } + p.ammo[am_clip] = deh.StartBullets; // [RH] Used to be 50 p.respawn_time = level.time; Index: client/src/hu_stuff.cpp =================================================================== --- client/src/hu_stuff.cpp (revision 1832) +++ client/src/hu_stuff.cpp (working copy) @@ -713,7 +713,9 @@ // Scoreboard Identify // Dan - Tells which current game mode is being played - if (sv_gametype != GM_COOP) + if(sv_gametype == GM_ARENA) + screen->DrawTextClean (CR_GOLD,120 * CleanXfac,10 * CleanYfac,"Arena"); + else if (sv_gametype != GM_COOP) screen->DrawTextClean (CR_GOLD,120 * CleanXfac,10 * CleanYfac,"Deathmatch"); else screen->DrawTextClean (CR_GOLD,120 * CleanXfac,10 * CleanYfac,"Cooperative"); @@ -875,7 +877,9 @@ // Scoreboard Identify // Dan - Tells which current game mode is being played - if (sv_gametype != GM_COOP) + if (sv_gametype == GM_ARENA) + screen->DrawText (CR_GOLD,locx + 135,locy + 0,"Arena"); + else if (sv_gametype != GM_COOP) screen->DrawText (CR_GOLD,locx + 135,locy + 0,"Deathmatch"); else screen->DrawText (CR_GOLD,locx + 150,locy + 0,"Cooperative"); @@ -1817,7 +1821,7 @@ Printf_Bold("%-15s\n", player->userinfo.netname); } } - } else if (sv_gametype == GM_DM) { + } else if (sv_gametype == GM_DM || sv_gametype == GM_ARENA) { std::sort(sortedplayers.begin(), sortedplayers.end(), compare_player_frags); Printf_Bold("\n--------------------------------------\n"); Index: client/src/am_map.cpp =================================================================== --- client/src/am_map.cpp (revision 1832) +++ client/src/am_map.cpp (working copy) @@ -1454,7 +1454,7 @@ mpoint_t pt; if (!players[i].ingame() || !p->mo || - (((sv_gametype == GM_DM && p != &conplayer) || + ((((sv_gametype == GM_DM || sv_gametype == GM_ARENA) && p != &conplayer) || ((sv_gametype == GM_TEAMDM || sv_gametype == GM_CTF) && p->userinfo.team != conplayer.userinfo.team)) && !demoplayback && !(conplayer.spectator)) || p->spectator) {