diff --git a/README.md b/README.md
index 7bdfc9f81..88c393b12 100644
--- a/README.md
+++ b/README.md
@@ -123,6 +123,7 @@ This means that plugins that do binary code analysis (Orpheu for example) probab
| mp_ammo_respawn_time | 20 | 0.0 | - | The respawn time for ammunition. |
| mp_vote_flags | km | 0 | - | Vote systems enabled in server.
`0` voting disabled
`k` votekick enabled via `vote` command
`m` votemap enabled via `votemap` command |
| mp_votemap_min_time | 180 | 0.0 | - | Minimum seconds that must elapse on map before `votemap` command can be used. |
+| bot_excellent_morale | 0 | 0 | 1 | Bots always have great morale regardless of defeat or victory. |
diff --git a/dist/game.cfg b/dist/game.cfg
index c5dad01c9..65ffb07ed 100644
--- a/dist/game.cfg
+++ b/dist/game.cfg
@@ -521,7 +521,7 @@ mp_give_c4_frags "3"
// Default value: "1.0"
mp_hostages_rescued_ratio "1.0"
-// Legacy func_vehicle behavior when blocked by another entity.
+// Legacy func_vehicle behavior when blocked by another entity.
// New one is more useful for playing multiplayer.
//
// 0 - New behavior
@@ -620,3 +620,10 @@ mp_vote_flags "km"
//
// Default value: "180"
mp_votemap_min_time "180"
+
+// Bots always have great morale regardless of defeat or victory.
+// 0 - disabled (default behaviour)
+// 1 - enabled
+//
+// Default value: "0"
+bot_excellent_morale "0"
diff --git a/regamedll/dlls/bot/cs_bot.h b/regamedll/dlls/bot/cs_bot.h
index 9670744f9..d6b369cb0 100644
--- a/regamedll/dlls/bot/cs_bot.h
+++ b/regamedll/dlls/bot/cs_bot.h
@@ -1109,6 +1109,11 @@ inline bool CCSBot::IsAtBombsite()
inline CCSBot::MoraleType CCSBot::GetMorale() const
{
+#ifdef REGAMEDLL_ADD
+ if (cv_bot_excellent_morale.value != 0.0f)
+ return EXCELLENT;
+#endif
+
return m_morale;
}
diff --git a/regamedll/dlls/bot/cs_bot_init.cpp b/regamedll/dlls/bot/cs_bot_init.cpp
index 665b3c337..7b8ffb87b 100644
--- a/regamedll/dlls/bot/cs_bot_init.cpp
+++ b/regamedll/dlls/bot/cs_bot_init.cpp
@@ -65,6 +65,7 @@ cvar_t cv_bot_join_delay = { "bot_join_delay", "0", FCVAR_SERVER, 0.
cvar_t cv_bot_freeze = { "bot_freeze", "0", 0, 0.0f, nullptr };
cvar_t cv_bot_mimic = { "bot_mimic", "0", 0, 0.0f, nullptr };
cvar_t cv_bot_mimic_yaw_offset = { "bot_mimic_yaw_offset", "0", 0, 0.0f, nullptr };
+cvar_t cv_bot_excellent_morale = { "bot_excellent_morale", "0", 0, 0.0f, nullptr };
#else
// Migrated to bot_quota_mode, use "match"
cvar_t cv_bot_quota_match = { "bot_quota_match", "0", FCVAR_SERVER, 0.0f, nullptr };
@@ -136,6 +137,7 @@ void Bot_RegisterCVars()
CVAR_REGISTER(&cv_bot_freeze);
CVAR_REGISTER(&cv_bot_mimic);
CVAR_REGISTER(&cv_bot_mimic_yaw_offset);
+ CVAR_REGISTER(&cv_bot_excellent_morale);
#endif
}
diff --git a/regamedll/dlls/bot/cs_bot_init.h b/regamedll/dlls/bot/cs_bot_init.h
index b50e020c3..691c518f2 100644
--- a/regamedll/dlls/bot/cs_bot_init.h
+++ b/regamedll/dlls/bot/cs_bot_init.h
@@ -65,6 +65,7 @@ extern cvar_t cv_bot_join_delay;
extern cvar_t cv_bot_freeze;
extern cvar_t cv_bot_mimic;
extern cvar_t cv_bot_mimic_yaw_offset;
+extern cvar_t cv_bot_excellent_morale;
#else
extern cvar_t cv_bot_quota_match;
#endif