# HG changeset patch # User Adam Kaminski # Date 1601774620 14400 # Sat Oct 03 21:23:40 2020 -0400 # Node ID 81f0277cf01052b354cc58b657ab540f4aa8bcb0 # Parent 1d7faab82baa159add79dd3f02d579534c9ffb29 Fixed the obituary for the BFG tracer not being used if a player was killed by them. diff -r 1d7faab82baa -r 81f0277cf010 docs/zandronum-history.txt --- a/docs/zandronum-history.txt Mon Jul 20 23:31:14 2020 +0300 +++ b/docs/zandronum-history.txt Sat Oct 03 21:23:40 2020 -0400 @@ -33,6 +33,7 @@ - - Fixed: Bots DH_ARRAYSET implementation is wrong. [sleep] - - Fixed jittery model interpolation, partly based on dpJudas's fix for GZDoom. [StrikerMan780] - - Fixed an integer overflow crash related to decals. [eagle, Torr Samaho] +- - Fixed the obituary for the BFG tracer not being used if a player was killed by them. [Kaminsky] ! - sv_forcegldefaults renamed to sv_forcevideodefaults. The old name still exists for compatibility. [Dusk] ! - r_3dfloors is now forced to be true when sv_forcevideodefaults is true. [Dusk] ! - When the wad authentication fails for a connecting client, the client only reports the missing and incompatible PWADS instead of all of them. [Pol Marcet] diff -r 1d7faab82baa -r 81f0277cf010 src/p_interaction.cpp --- a/src/p_interaction.cpp Mon Jul 20 23:31:14 2020 +0300 +++ b/src/p_interaction.cpp Sat Oct 03 21:23:40 2020 -0400 @@ -325,7 +325,7 @@ if (message == NULL) { - if (inflictor != NULL) + if (inflictor != NULL && inflictor != attacker) { message = inflictor->GetClass()->Meta.GetMetaString (AMETA_Obituary); } # HG changeset patch # User Adam Kaminski # Date 1601992837 14400 # Tue Oct 06 10:00:37 2020 -0400 # Node ID 7c520afaf68de47d8789a55aab2422105b1a24c2 # Parent 81f0277cf01052b354cc58b657ab540f4aa8bcb0 Fixed color codes being ignored for obituaries defined within an actor's class. diff -r 81f0277cf010 -r 7c520afaf68d src/c_console.cpp --- a/src/c_console.cpp Sat Oct 03 21:23:40 2020 -0400 +++ b/src/c_console.cpp Tue Oct 06 10:00:37 2020 -0400 @@ -1029,6 +1029,8 @@ if ( G15_IsReady() ) G15_Printf( outlinecopy ); + V_ColorizeString( outlinecopy ); + // User wishes to remove color from all messages. if ( con_colorinmessages == 0 ) V_RemoveColorCodes( outlinecopy ); # HG changeset patch # User Adam Kaminski # Date 1601994114 14400 # Tue Oct 06 10:21:54 2020 -0400 # Node ID f5eb9eb9d13373d546116eea9168ea6f45e41036 # Parent 7c520afaf68de47d8789a55aab2422105b1a24c2 Added and removed a couple of menu options. Since support for OpenAL was removed for the FMOD version currently used in 3.1, the option should also be removed. diff -r 7c520afaf68d -r f5eb9eb9d133 wadsrc/static/menudef.txt --- a/wadsrc/static/menudef.txt Tue Oct 06 10:00:37 2020 -0400 +++ b/wadsrc/static/menudef.txt Tue Oct 06 10:21:54 2020 -0400 @@ -1443,6 +1443,7 @@ Option "Weapons must be lowered fully", "compat_fullweaponlower", "YesNo" Option "Auto-aiming has vertical holes", "compat_autoaim", "YesNo" Option "West facing spawns are silent", "compat_silentwestspawns", "YesNo" + Option "Use old Skulltag jumping behavior", "compat_skulltagjumping", "YesNo" Class "CompatibilityMenu" } @@ -1503,7 +1504,6 @@ "WASAPI", "Vista WASAPI" "ASIO", "ASIO" "WaveOut", "WaveOut" - "OpenAL", "OpenAL (very beta)" "No sound", "No sound" } # HG changeset patch # User Adam Kaminski # Date 1602804020 14400 # Thu Oct 15 19:20:20 2020 -0400 # Node ID 85611f1916910226bf995f5cd418afbc1c57ece2 # Parent f5eb9eb9d13373d546116eea9168ea6f45e41036 Fixed GAMEEVENT_CAPTURES and GAMEEVENT_RETURNS scripts not executing in One Flag CTF or Skulltag. Also, GAMEEVENT_CAPTURES scripts will now pass the number of points earned as the second arg. diff -r f5eb9eb9d133 -r 85611f191691 docs/zandronum-history.txt --- a/docs/zandronum-history.txt Tue Oct 06 10:21:54 2020 -0400 +++ b/docs/zandronum-history.txt Thu Oct 15 19:20:20 2020 -0400 @@ -34,9 +34,11 @@ - - Fixed jittery model interpolation, partly based on dpJudas's fix for GZDoom. [StrikerMan780] - - Fixed an integer overflow crash related to decals. [eagle, Torr Samaho] - - Fixed the obituary for the BFG tracer not being used if a player was killed by them. [Kaminsky] +- - Fixed GAMEEVENT_CAPTURES and GAMEEVENT_RETURNS scripts not executing in One Flag CTF or Skulltag. [Kaminsky] ! - sv_forcegldefaults renamed to sv_forcevideodefaults. The old name still exists for compatibility. [Dusk] ! - r_3dfloors is now forced to be true when sv_forcevideodefaults is true. [Dusk] ! - When the wad authentication fails for a connecting client, the client only reports the missing and incompatible PWADS instead of all of them. [Pol Marcet] +! - GAMEEVENT_CAPTURES scripts now pass the number of points earned as 'arg2'. [Kaminsky] 3.0.1 diff -r f5eb9eb9d133 -r 85611f191691 src/g_shared/a_flags.cpp --- a/src/g_shared/a_flags.cpp Tue Oct 06 10:21:54 2020 -0400 +++ b/src/g_shared/a_flags.cpp Thu Oct 15 19:20:20 2020 -0400 @@ -539,7 +539,8 @@ // [CK] Now we have the information to trigger an event script (Activator is the capturer, assister is the second arg) // PlayerAssistNumber will be GAMEEVENT_CAPTURE_NOASSIST (-1) if there was no assister - GAMEMODE_HandleEvent ( GAMEEVENT_CAPTURES, Owner, playerAssistNumber ); + // [AK] Also pass the number of points earned. + GAMEMODE_HandleEvent ( GAMEEVENT_CAPTURES, Owner, playerAssistNumber, 1 ); // Take the flag away. pInventory = Owner->FindInventory( this->GetClass( )); @@ -854,6 +855,7 @@ DHUDMessageFadeOut *pMsg; AInventory *pInventory; ULONG ulTeam; + int playerAssistNumber = GAMEEVENT_CAPTURE_NOASSIST; // [AK] Need this for game event. // If this object being given isn't a flag, then we don't really care. if ( pItem->GetClass( )->IsDescendantOf( RUNTIME_CLASS( AFlag )) == false ) @@ -890,6 +892,8 @@ // If someone just recently returned the flag, award him with an "Assist!" medal. if ( TEAM_GetAssistPlayer( Owner->player->ulTeam ) != MAXPLAYERS ) { + // [AK] Mark the assisting player. + playerAssistNumber = TEAM_GetAssistPlayer( Owner->player->ulTeam ); MEDAL_GiveMedal( TEAM_GetAssistPlayer( Owner->player->ulTeam ), MEDAL_ASSIST ); // Tell clients about the medal that been given. @@ -943,6 +947,9 @@ else SERVERCOMMANDS_PrintHUDMessageFadeOut( szString, 1.5f, TEAM_MESSAGE_Y_AXIS_SUB, 0, 0, CR_UNTRANSLATED, 3.0f, 0.5f, "SmallFont", false, MAKE_ID( 'S','U','B','S' )); + // [AK] Trigger an event script when the white flag is captured. + GAMEMODE_HandleEvent( GAMEEVENT_CAPTURES, Owner, playerAssistNumber, 1 ); + // Take the flag away. pInventory = Owner->FindInventory( this->GetClass( )); if ( NETWORK_GetState( ) == NETSTATE_SERVER ) @@ -1135,6 +1142,9 @@ // Mark the white flag as no longer being taken. TEAM_SetWhiteFlagTaken( false ); + + // [AK] Trigger an event script. Since the white flag doesn't belong to any team, don't pass any team's ID. + GAMEMODE_HandleEvent( GAMEEVENT_RETURNS, NULL, teams.Size() ); } //=========================================================================== @@ -1362,11 +1372,17 @@ // [RC] Create the "returned by" message for this team. ULONG playerIndex = ULONG( pReturner->player - players ); sprintf( szString, "\\c%cReturned by: %s", V_GetColorChar( TEAM_GetTextColor( players[playerIndex].ulTeam )), players[playerIndex].userinfo.GetName() ); + + // [AK] Trigger an event script indicating that a player returned the skull. + GAMEMODE_HandleEvent( GAMEEVENT_RETURNS, pReturner, static_cast ( ulItemTeam ), GAMEEVENT_RETURN_PLAYERRETURN ); } else { // [RC] Create the "returned automatically" message for this team. sprintf( szString, "\\c%cReturned automatically.", V_GetColorChar( TEAM_GetTextColor( TEAM_GetTeamFromItem( this )))); + + // [AK] Trigger an event script indicating that the skull was returned after a timeout. + GAMEMODE_HandleEvent( GAMEEVENT_RETURNS, NULL, static_cast ( ulItemTeam ), GAMEEVENT_RETURN_TIMEOUTRETURN ); } V_ColorizeString( szString ); diff -r f5eb9eb9d133 -r 85611f191691 src/team.cpp --- a/src/team.cpp Tue Oct 06 10:21:54 2020 -0400 +++ b/src/team.cpp Thu Oct 15 19:20:20 2020 -0400 @@ -479,6 +479,7 @@ bool bAssisted; bool bSelfAssisted = false; ULONG ulTeamIdx = 0; + int playerAssistNumber = GAMEEVENT_CAPTURE_NOASSIST; // [AK] Need this for game event. // Determine who assisted. bAssisted = ( TEAM_GetAssistPlayer( pPlayer->ulTeam ) != MAXPLAYERS ); @@ -642,6 +643,9 @@ // If someone just recently returned the skull, award him with an "Assist!" medal. if ( TEAM_GetAssistPlayer( pPlayer->ulTeam ) != MAXPLAYERS ) { + // [AK] Mark the assisting player. + playerAssistNumber = TEAM_GetAssistPlayer( pPlayer->ulTeam ); + MEDAL_GiveMedal( TEAM_GetAssistPlayer( pPlayer->ulTeam ), MEDAL_ASSIST ); // Tell clients about the medal that been given. @@ -651,6 +655,9 @@ TEAM_SetAssistPlayer( pPlayer->ulTeam, MAXPLAYERS ); } + // [AK] Trigger an event script (activator is the capturer, assister is the first arg, and points earned is second arg). + GAMEMODE_HandleEvent( GAMEEVENT_CAPTURES, pPlayer->mo, playerAssistNumber, ulNumPoints ); + FString Name; Name = "Tag"; # HG changeset patch # User Adam Kaminski # Date 1603598002 14400 # Sat Oct 24 23:53:22 2020 -0400 # Node ID e00f12ae8786eb4e34c7be62fe4a7600a7c39ccd # Parent 85611f1916910226bf995f5cd418afbc1c57ece2 Added new ACS functions: SetGamemodeLimit() to change gamemode limits, SetCurrentGamemode() to allow switching of gamemodes during a game, and GetCurrentGamemode() to get the current gamemode. diff -r 85611f191691 -r e00f12ae8786 docs/zandronum-history.txt --- a/docs/zandronum-history.txt Thu Oct 15 19:20:20 2020 -0400 +++ b/docs/zandronum-history.txt Sat Oct 24 23:53:22 2020 -0400 @@ -20,6 +20,7 @@ + - The server can now broadcast the MD5 hashes of loaded PWADs to launchers. [Sean] + - Added new console commands "demo_ticsplayed" to show the current position in demo playback and "demo_skipto" to skip to such a position. + - Added new console variable "sv_nodoorclose" to prevent manual door closing, in order to prevent large numbers of players from blocking a door by continuously opening and closing it. [DoomJoshuaBoy] ++ - Added new ACS functions: SetGamemodeLimits(int limit, int value) to change gamemode limits, SetCurrentGamemode(str gamemode, bool reset) to switch gamemodes during a game, and GetCurrentGamemode() to get the gamemode being played. [Kaminsky] - - Fixed: Bots tries to jump to reach item when sv_nojump is true. [sleep] - - Fixed: ACS function SetSkyScrollSpeed didn't work online. [Edward-san] - - Fixed: color codes in callvote reasons weren't terminated properly. [Dusk] diff -r 85611f191691 -r e00f12ae8786 src/p_acs.cpp --- a/src/p_acs.cpp Thu Oct 15 19:20:20 2020 -0400 +++ b/src/p_acs.cpp Sat Oct 24 23:53:22 2020 -0400 @@ -89,6 +89,10 @@ #include "za_database.h" #include "cl_commands.h" #include "cl_main.h" +#include "survival.h" +#include "duel.h" +#include "lastmanstanding.h" +#include "possession.h" #include "g_shared/a_pickups.h" @@ -5118,6 +5122,9 @@ ACSF_Strftime, ACSF_SetDeadSpectator, ACSF_SetActivatorToPlayer, + ACSF_SetCurrentGamemode, + ACSF_GetCurrentGamemode, + ACSF_SetGamemodeLimit, // ZDaemon ACSF_GetTeamScore = 19620, // (int team) @@ -7007,6 +7014,206 @@ } break; + case ACSF_SetCurrentGamemode: + { + const char *name = FBehavior::StaticLookupString( args[0] ); + const GAMEMODE_e oldmode = GAMEMODE_GetCurrentMode(); + const GAMESTATE_e state = GAMEMODE_GetState(); + GAMEMODE_e newmode; + ULONG ulCountdownTicks; + + const bool bResetLevel = !!args[1]; + + // [AK] Only the server can change the gamemode, but not during the result sequence. + if ( NETWORK_InClientMode() || state == GAMESTATE_INRESULTSEQUENCE ) + return 0; + + // [AK] No need to change the gamemode if we're already playing it. + if ( stricmp( name, GAMEMODE_GetName( oldmode )) == 0 ) + return 0; + + for ( int i = 0; i < NUM_GAMEMODES; i++ ) + { + newmode = static_cast ( i ); + if ( stricmp( name, GAMEMODE_GetName( newmode )) != 0 ) + continue; + + // [AK] Don't change to any team game if there's no team starts on the map! + if (( GAMEMODE_GetFlags( newmode ) & GMF_TEAMGAME ) && TEAM_GetNumTeamsWithStarts() < 1 ) + return 0; + // [AK] Don't change to deathmatch if there's no deathmatch starts on the map! + if ( GAMEMODE_GetFlags( newmode ) & GMF_DEATHMATCH ) + { + if ( deathmatchstarts.Size() < 1 ) + return 0; + + // [AK] If we're changing to duel, check if there's not too many players either. + if ( newmode == GAMEMODE_DUEL ) + { + ULONG ulNumPlayers = 0; + for ( ULONG ulIdx = 0; ulIdx < MAXPLAYERS; ulIdx++ ) + { + if ( playeringame[ulIdx] && players[ulIdx].bSpectating == false ) + ulNumPlayers++; + } + + if (ulNumPlayers > 2) + return 0; + } + } + // [AK] Don't change to cooperative if there's no cooperative starts on the map! + else if ( GAMEMODE_GetFlags( newmode ) & GMF_COOPERATIVE ) + { + ULONG ulNumSpawns = 0; + for ( ULONG ulIdx = 0; ulIdx < MAXPLAYERS; ulIdx++ ) + { + if ( playerstarts[ulIdx].type != 0 ) + { + ulNumSpawns++; + break; + } + } + + if ( ulNumSpawns < 1 ) + return 0; + } + + // [AK] Get the ticks left in the countdown and reset the gamemode, if necessary. + switch ( oldmode ) + { + case GAMEMODE_SURVIVAL: + ulCountdownTicks = SURVIVAL_GetCountdownTicks(); + SURVIVAL_SetState( SURVS_WAITINGFORPLAYERS ); + break; + + case GAMEMODE_INVASION: + ulCountdownTicks = INVASION_GetCountdownTicks(); + INVASION_SetState( IS_WAITINGFORPLAYERS ); + break; + + case GAMEMODE_DUEL: + ulCountdownTicks = DUEL_GetCountdownTicks(); + DUEL_SetState( DS_WAITINGFORPLAYERS ); + break; + + case GAMEMODE_LASTMANSTANDING: + case GAMEMODE_TEAMLMS: + ulCountdownTicks = LASTMANSTANDING_GetCountdownTicks(); + LASTMANSTANDING_SetState( LMSS_WAITINGFORPLAYERS ); + break; + + case GAMEMODE_POSSESSION: + case GAMEMODE_TEAMPOSSESSION: + ulCountdownTicks = POSSESSION_GetCountdownTicks(); + POSSESSION_SetState( PSNS_WAITINGFORPLAYERS ); + break; + } + + // [AK] If everything's okay now, change the gamemode. + GAMEMODE_ResetSpecalGamemodeStates(); + GAMEMODE_SetCurrentMode( newmode ); + + // [AK] If we're the server, tell the clients to change the gamemode too. + if ( NETWORK_GetState() == NETSTATE_SERVER ) + SERVERCOMMANDS_SetGameMode(); + + // [AK] Check if we want to reset the current map. + if ( bResetLevel ) + G_ChangeLevel( level.mapname, 0, 0 ); + else + { + // [AK] Remove players from any teams if the new gamemode doesn't support them. + if (( GAMEMODE_GetFlags( oldmode ) & GMF_PLAYERSONTEAMS ) && ( GAMEMODE_GetCurrentFlags() & GMF_PLAYERSONTEAMS ) == false ) + { + for ( ULONG ulIdx = 0; ulIdx < MAXPLAYERS; ulIdx++ ) + PLAYER_SetTeam( &players[ulIdx], teams.Size(), true ); + } + // [AK] If we need to move players into teams instead, assign them automatically. + else if (( GAMEMODE_GetFlags( oldmode ) & GMF_PLAYERSONTEAMS ) == false && ( GAMEMODE_GetCurrentFlags() & GMF_PLAYERSONTEAMS )) + { + for ( ULONG ulIdx = 0; ulIdx < MAXPLAYERS; ulIdx++ ) + { + if ( playeringame[ulIdx] && players[ulIdx].bSpectating == false && players[ulIdx].bOnTeam == false ) + PLAYER_SetTeam( &players[ulIdx], TEAM_ChooseBestTeamForPlayer(), true ); + } + } + + // [AK] If necessary, transfer the countdown time and state to the new gamemode. + if ( state > GAMESTATE_WAITFORPLAYERS ) + { + switch ( newmode ) + { + case GAMEMODE_SURVIVAL: + SURVIVAL_SetCountdownTicks( ulCountdownTicks ); + SURVIVAL_SetState( state == GAMESTATE_COUNTDOWN ? SURVS_COUNTDOWN : SURVS_INPROGRESS ); + break; + + case GAMEMODE_INVASION: + INVASION_SetCountdownTicks( ulCountdownTicks ); + INVASION_SetState( state == GAMESTATE_COUNTDOWN ? IS_FIRSTCOUNTDOWN : IS_INPROGRESS ); + break; + + case GAMEMODE_DUEL: + DUEL_SetCountdownTicks( ulCountdownTicks ); + DUEL_SetState( state == GAMESTATE_COUNTDOWN ? DS_COUNTDOWN : DS_INDUEL ); + break; + + case GAMEMODE_LASTMANSTANDING: + case GAMEMODE_TEAMLMS: + LASTMANSTANDING_SetCountdownTicks( ulCountdownTicks ); + LASTMANSTANDING_SetState( state == GAMESTATE_COUNTDOWN ? LMSS_COUNTDOWN : LMSS_INPROGRESS ); + break; + + case GAMEMODE_POSSESSION: + case GAMEMODE_TEAMPOSSESSION: + POSSESSION_SetCountdownTicks( ulCountdownTicks ); + POSSESSION_SetState( state == GAMESTATE_COUNTDOWN ? PSNS_COUNTDOWN : PSNS_INPROGRESS ); + break; + } + } + } + return 1; + } + return 0; + } + + case ACSF_GetCurrentGamemode: + { + return GlobalACSStrings.AddString( GAMEMODE_GetName( GAMEMODE_GetCurrentMode() )); + } + + case ACSF_SetGamemodeLimit: + { + enum + { + GAMELIMIT_FRAGS, + GAMELIMIT_TIME, + GAMELIMIT_POINTS, + GAMELIMIT_DUELS, + GAMELIMIT_WINS, + GAMELIMIT_WAVES, + }; + + // [AK] Setup the value(s). + UCVarValue Val; + if ( args[0] == GAMELIMIT_TIME ) + Val.Float = args[1]; + else + Val.Int = args[1]; + + // [AK] Change the value of the CVar for the corresponding gamemode limit. + switch( args[0] ) + { + case GAMELIMIT_FRAGS: fraglimit.ForceSet( Val, CVAR_Int ); break; + case GAMELIMIT_TIME: timelimit.ForceSet( Val, CVAR_Float ); break; + case GAMELIMIT_POINTS: pointlimit.ForceSet( Val, CVAR_Int ); break; + case GAMELIMIT_DUELS: duellimit.ForceSet( Val, CVAR_Int ); break; + case GAMELIMIT_WINS: winlimit.ForceSet( Val, CVAR_Int ); break; + case GAMELIMIT_WAVES: wavelimit.ForceSet( Val, CVAR_Int ); break; + } + break; + } + case ACSF_GetActorFloorTexture: { auto a = SingleActorFromTID(args[0], activator); # HG changeset patch # User Adam Kaminski # Date 1603598374 14400 # Sat Oct 24 23:59:34 2020 -0400 # Node ID a8611a8e91867758dddf91d4d32f0b874a944677 # Parent e00f12ae8786eb4e34c7be62fe4a7600a7c39ccd Added new console variable "sv_noobituaries" to prevent obituaries from being printed to the server's console when a player dies. diff -r e00f12ae8786 -r a8611a8e9186 docs/zandronum-history.txt --- a/docs/zandronum-history.txt Sat Oct 24 23:53:22 2020 -0400 +++ b/docs/zandronum-history.txt Sat Oct 24 23:59:34 2020 -0400 @@ -21,6 +21,7 @@ + - Added new console commands "demo_ticsplayed" to show the current position in demo playback and "demo_skipto" to skip to such a position. + - Added new console variable "sv_nodoorclose" to prevent manual door closing, in order to prevent large numbers of players from blocking a door by continuously opening and closing it. [DoomJoshuaBoy] + - Added new ACS functions: SetGamemodeLimits(int limit, int value) to change gamemode limits, SetCurrentGamemode(str gamemode, bool reset) to switch gamemodes during a game, and GetCurrentGamemode() to get the gamemode being played. [Kaminsky] ++ - Added new console variable "sv_noobituaries" to prevent obituaries from being printed to the server console when a player dies. [Kaminsky] - - Fixed: Bots tries to jump to reach item when sv_nojump is true. [sleep] - - Fixed: ACS function SetSkyScrollSpeed didn't work online. [Edward-san] - - Fixed: color codes in callvote reasons weren't terminated properly. [Dusk] diff -r e00f12ae8786 -r a8611a8e9186 src/cl_main.cpp --- a/src/cl_main.cpp Sat Oct 24 23:53:22 2020 -0400 +++ b/src/cl_main.cpp Sat Oct 24 23:59:34 2020 -0400 @@ -3840,7 +3840,8 @@ } // Finally, print the obituary string. - ClientObituary( player->mo, inflictor, source, ( ulSourcePlayer < MAXPLAYERS ) ? DMG_PLAYERATTACK : 0, MOD ); + if (( zadmflags & ZADF_NO_OBITUARIES ) == false ) + ClientObituary( player->mo, inflictor, source, ( ulSourcePlayer < MAXPLAYERS ) ? DMG_PLAYERATTACK : 0, MOD ); // [BB] Restore the weapon the player actually is using now. if ( ( ulSourcePlayer < MAXPLAYERS ) && ( players[ulSourcePlayer].ReadyWeapon != pSavedReadyWeapon ) ) diff -r e00f12ae8786 -r a8611a8e9186 src/d_main.cpp --- a/src/d_main.cpp Sat Oct 24 23:53:22 2020 -0400 +++ b/src/d_main.cpp Sat Oct 24 23:59:34 2020 -0400 @@ -627,6 +627,7 @@ CVAR (Flag, sv_deadplayerscankeepinventory, zadmflags, ZADF_DEAD_PLAYERS_CAN_KEEP_INVENTORY); CVAR (Flag, sv_nounlaggedbfgtracers, zadmflags, ZADF_NOUNLAGGED_BFG_TRACERS); CVAR (Flag, sv_nodoorclose, zadmflags, ZADF_NODOORCLOSE); +CVAR (Flag, sv_noobituaries, zadmflags, ZADF_NO_OBITUARIES); // Old name kept for compatibility CVAR (Flag, sv_forcegldefaults, zadmflags, ZADF_FORCE_VIDEO_DEFAULTS); diff -r e00f12ae8786 -r a8611a8e9186 src/doomdef.h --- a/src/doomdef.h Sat Oct 24 23:53:22 2020 -0400 +++ b/src/doomdef.h Sat Oct 24 23:59:34 2020 -0400 @@ -380,6 +380,9 @@ // This prevents players intentionally (or unintentionally) griefing // by closing doors that other players (or the same player) have opened. ZADF_NODOORCLOSE = 1 << 19, + + // [AK] Prevent obituary messages from being printed onto the server console when a player dies. + ZADF_NO_OBITUARIES = 1 << 20, }; // [RH] Compatibility flags. diff -r e00f12ae8786 -r a8611a8e9186 src/p_interaction.cpp --- a/src/p_interaction.cpp Sat Oct 24 23:53:22 2020 -0400 +++ b/src/p_interaction.cpp Sat Oct 24 23:59:34 2020 -0400 @@ -968,7 +968,7 @@ } // [RH] Death messages - if (( player ) && ( NETWORK_InClientMode() == false )) + if (( player ) && ( NETWORK_InClientMode() == false ) && ( zadmflags & ZADF_NO_OBITUARIES ) == false ) ClientObituary (this, inflictor, source, dmgflags, MeansOfDeath); }