in g_local.h in the clientPersistant_t struct 
	qboolean            decapulated;
in g_admin.h
qboolean G_admin_decapulate( gentity_t *ent, int skiparg );
in g_admin.c
{"capulate", G_admin_decapulate, "0",
		"capulate a decapulated player",
		"[^3name|slot#^7]"
    },
{"decapulate", G_admin_decapulate, "0",
		"decapulate a capulated player",
		"[^3name|slot#^7]"
    },
and then a bit further down in g_admin.c
qboolean G_admin_decapulate( gentity_t *ent, int skiparg ) 
{
	int pids[ MAX_CLIENTS ];
	char name[ MAX_NAME_LENGTH ], err[ MAX_STRING_CHARS ];
	char command[ MAX_ADMIN_CMD_LEN ], *cmd;
	gentity_t *vic;
	
	if( G_SayArgc() < 2 + skiparg )
	{
		ADMP( "^3!decapulate: ^7usage: !decapulate [name|slot#]\n" );
		return qfalse;
	}
	G_SayArgv( skiparg, command, sizeof( command ) );
	cmd = command;
	if( cmd && *cmd == '!' )
		cmd++;
	G_SayArgv( 1 + skiparg, name, sizeof( name ) );
	if( G_ClientNumbersFromString( name, pids ) != 1 )
	{
		G_MatchOnePlayer( pids, err, sizeof( err ) );
		ADMP( va( "^3!decapulate: ^7%s\n", err ) );
		return qfalse;
	}
	if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) )
	{
		ADMP( "^3!decapulate: ^7sorry, but your intended victim has a higher admin"
			 " level than you\n" );
		return qfalse;
	}
	vic = &g_entities[ pids[ 0 ] ];
	if( vic->client->pers.decapulated == qtrue )
	{
		if( !Q_stricmp( cmd, "decapulate" ) )
		{
			ADMP( "^3!decapulate: ^7player is already decapulated\n" );
			return qtrue;
		}
		vic->client->pers.decapulated = qfalse;
		CPx( pids[ 0 ], "cp \"^1You have been capulated\"" );
		AP( va( "print \"^3!capulate: ^7%s^7 has been capulated by %s\n\"",
			   vic->client->pers.netname,
			   ( ent ) ? ent->client->pers.netname : "console" ) );
	}
	else
	{
		if( !Q_stricmp( cmd, "capulate" ) )
		{
			ADMP( "^3!capulate: ^7player is not currently decapulated\n" );
			return qtrue;
		}
		vic->client->pers.decapulated = qtrue;
		CPx( pids[ 0 ], "cp \"^1You've been decapulated\"" );
		AP( va( "print \"^3!decapulate: ^7%s^7 has been decapulated by ^7%s\n\"",
			   vic->client->pers.netname,
			   ( ent ) ? ent->client->pers.netname : "console" ) );
	}
	ClientUserinfoChanged( pids[ 0 ] );
	return qtrue;
}
in g_cmds at the top of the function G_Say I added
int         i=0;
qboolean usedCaps = FALSE;
and a bit further down, I added
if (!ent->client->pers.decapulated) 
		Q_strncpyz( text, chatText, sizeof( text ) );
	
	else {
		while (i < MAX_SAY_TEXT) {
			if (chatText[i]) {
				if (chatText[i] <= 90 && chatText[i] >= 41) {
					text[i] += 32;
					usedCaps = TRUE;
				}
				else
					text[i] = chatText[i];
			}
			++i;
		}
	}
	if (usedCaps) {
		ADMP( "^1You can't use capital letters\n" );
		CP("cp \"^1You can't use capital letters\"");
	}
A friend who is helping me test says when aliens go near to turrets using this qvm, there is the error: ERROR: Cvar_Update: handle out of range