diff -r 05b5a7cc3293 src/c_dispatch.cpp
--- a/src/c_dispatch.cpp	Sun Feb 10 13:00:09 2013 +0100
+++ b/src/c_dispatch.cpp	Mon Feb 11 18:31:22 2013 +0100
@@ -1538,3 +1538,8 @@
 	}
 }
 
+// [BB]
+bool IsConsoleCommand ( const char *pszCommandName )
+{
+	return ( FindNameInHashTable ( Commands, pszCommandName, strlen ( pszCommandName ) ) != NULL );
+}
\ No newline at end of file
diff -r 05b5a7cc3293 src/c_dispatch.h
--- a/src/c_dispatch.h	Sun Feb 10 13:00:09 2013 +0100
+++ b/src/c_dispatch.h	Mon Feb 11 18:31:22 2013 +0100
@@ -161,4 +161,7 @@
 extern unsigned int MakeKey (const char *s);
 extern unsigned int MakeKey (const char *s, size_t len);
 
+// [BB]
+bool IsConsoleCommand ( const char *pszCommandName );
+
 #endif //__C_DISPATCH_H__
diff -r 05b5a7cc3293 src/p_acs.cpp
--- a/src/p_acs.cpp	Sun Feb 10 13:00:09 2013 +0100
+++ b/src/p_acs.cpp	Mon Feb 11 18:31:22 2013 +0100
@@ -3406,6 +3406,7 @@
 	ACSF_GetPlayerLivesLeft,
 	ACSF_SetPlayerLivesLeft,
 	ACSF_KickFromGame,
+	ACSF_SetCVar,
 	// ZDaemon
 	ACSF_GetTeamScore = 19620,
 };
@@ -3706,6 +3707,56 @@
 				else
 					return 0;
 			}
+		case ACSF_SetCVar:
+			{
+				const char *pszVarName = FBehavior::StaticLookupString ( args[0] );
+				if ( pszVarName == NULL )
+					return 0;
+
+				const int len = strlen ( pszVarName );
+				for ( int i = 0; i < len; ++i )
+				{
+					if ( ( isalnum ( pszVarName[i] ) == false ) && ( pszVarName[i] != '_' ) )
+					{
+						Printf ( "CVar name contains non-alphanumeric, non-underscore characters!\n" );
+						return 0;
+					}
+				}
+
+				if ( IsConsoleCommand ( pszVarName ) )
+				{
+					Printf ( "%s is a console command!\n", pszVarName );
+					return 0;
+				}
+
+				FBaseCVar *cvar = FindCVar ( pszVarName, NULL );
+
+				if ( cvar == NULL )
+				{
+					cvar = new FStringCVar ( pszVarName, NULL, CVAR_AUTO | CVAR_UNSETTABLE | cvar_defflags );
+
+					if ( cvar == NULL )
+					{
+						Printf ( "Error creating CVAR %s\n", pszVarName );
+						return 0;
+					}
+				}
+				else if ( !( cvar->GetFlags() & CVAR_AUTO ) )
+				{
+					Printf ( "Can't set built-in CVAR %s\n", cvar->GetName() );
+					return 0;
+				}
+
+				if ( cvar->GetFlags() & CVAR_AUTO )
+				{
+					if ( args[2] != 0 )
+					  cvar->SetArchiveBit ();
+					cvar->CmdSet ( FBehavior::StaticLookupString ( args[1] ) );
+					return 1;
+				}
+				else
+					return 0;
+			}
 
 		default:
 			break;
