lit
align 4
LABELV validOrders
address $71
byte 4 1
address $72
byte 4 1
address $73
byte 4 2
address $74
byte 4 2
address $75
byte 4 3
address $76
byte 4 7
address $77
byte 4 4
address $78
byte 4 5
address $79
byte 4 6
align 4
LABELV numValidOrders
byte 4 9
code
proc CG_ParseScores 212 12
file "../cg_servercmds.c"
line 47
;1:// Copyright (C) 1999-2000 Id Software, Inc.
;2://
;3:// cg_servercmds.c -- reliably sequenced text commands sent by the server
;4:// these are processed at snapshot transition time, so there will definately
;5:// be a valid snapshot this frame
;6:
;7:#include "cg_local.h"
;8:#include "../../ui/menudef.h" // bk001205 - for Q3_ui as well
;9:
;10:typedef struct {
;11:	const char *order;
;12:	int taskNum;
;13:} orderTask_t;
;14:
;15:static const orderTask_t validOrders[] = {
;16:	{ VOICECHAT_GETFLAG,						TEAMTASK_OFFENSE },
;17:	{ VOICECHAT_OFFENSE,						TEAMTASK_OFFENSE },
;18:	{ VOICECHAT_DEFEND,							TEAMTASK_DEFENSE },
;19:	{ VOICECHAT_DEFENDFLAG,					TEAMTASK_DEFENSE },
;20:	{ VOICECHAT_PATROL,							TEAMTASK_PATROL },
;21:	{ VOICECHAT_CAMP,								TEAMTASK_CAMP },
;22:	{ VOICECHAT_FOLLOWME,						TEAMTASK_FOLLOW },
;23:	{ VOICECHAT_RETURNFLAG,					TEAMTASK_RETRIEVE },
;24:	{ VOICECHAT_FOLLOWFLAGCARRIER,	TEAMTASK_ESCORT }
;25:};
;26:
;27:static const int numValidOrders = sizeof(validOrders) / sizeof(orderTask_t);
;28:
;29:#ifdef MISSIONPACK // bk001204
;30:static int CG_ValidOrder(const char *p) {
;31:	int i;
;32:	for (i = 0; i < numValidOrders; i++) {
;33:		if (Q_stricmp(p, validOrders[i].order) == 0) {
;34:			return validOrders[i].taskNum;
;35:		}
;36:	}
;37:	return -1;
;38:}
;39:#endif
;40:
;41:/*
;42:=================
;43:CG_ParseScores
;44:
;45:=================
;46:*/
;47:static void CG_ParseScores( void ) {
line 50
;48:	int		i, powerups;
;49:
;50:	cg.numScores = atoi( CG_Argv( 1 ) );
CNSTI4 1
ARGI4
ADDRLP4 8
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 12
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cg+110464
ADDRLP4 12
INDIRI4
ASGNI4
line 51
;51:	if ( cg.numScores > MAX_CLIENTS ) {
ADDRGP4 cg+110464
INDIRI4
CNSTI4 64
LEI4 $82
line 52
;52:		cg.numScores = MAX_CLIENTS;
ADDRGP4 cg+110464
CNSTI4 64
ASGNI4
line 53
;53:	}
LABELV $82
line 55
;54:
;55:	cg.teamScores[0] = atoi( CG_Argv( 2 ) );
CNSTI4 2
ARGI4
ADDRLP4 16
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 16
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cg+110472
ADDRLP4 20
INDIRI4
ASGNI4
line 56
;56:	cg.teamScores[1] = atoi( CG_Argv( 3 ) );
CNSTI4 3
ARGI4
ADDRLP4 24
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 24
INDIRP4
ARGP4
ADDRLP4 28
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cg+110472+4
ADDRLP4 28
INDIRI4
ASGNI4
line 58
;57:
;58:	memset( cg.scores, 0, sizeof( cg.scores ) );
ADDRGP4 cg+110480
ARGP4
CNSTI4 0
ARGI4
CNSTI4 3840
ARGI4
ADDRGP4 memset
CALLP4
pop
line 59
;59:	for ( i = 0 ; i < cg.numScores ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $94
JUMPV
LABELV $91
line 61
;60:		//
;61:		cg.scores[i].client = atoi( CG_Argv( i * 14 + 4 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 4
ADDI4
ARGI4
ADDRLP4 36
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 36
INDIRP4
ARGP4
ADDRLP4 40
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480
ADDP4
ADDRLP4 40
INDIRI4
ASGNI4
line 62
;62:		cg.scores[i].score = atoi( CG_Argv( i * 14 + 5 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 5
ADDI4
ARGI4
ADDRLP4 48
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 48
INDIRP4
ARGP4
ADDRLP4 52
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+4
ADDP4
ADDRLP4 52
INDIRI4
ASGNI4
line 63
;63:		cg.scores[i].ping = atoi( CG_Argv( i * 14 + 6 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 6
ADDI4
ARGI4
ADDRLP4 60
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 60
INDIRP4
ARGP4
ADDRLP4 64
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+8
ADDP4
ADDRLP4 64
INDIRI4
ASGNI4
line 64
;64:		cg.scores[i].time = atoi( CG_Argv( i * 14 + 7 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 7
ADDI4
ARGI4
ADDRLP4 72
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 72
INDIRP4
ARGP4
ADDRLP4 76
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+12
ADDP4
ADDRLP4 76
INDIRI4
ASGNI4
line 65
;65:		cg.scores[i].scoreFlags = atoi( CG_Argv( i * 14 + 8 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 8
ADDI4
ARGI4
ADDRLP4 84
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 84
INDIRP4
ARGP4
ADDRLP4 88
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+16
ADDP4
ADDRLP4 88
INDIRI4
ASGNI4
line 66
;66:		powerups = atoi( CG_Argv( i * 14 + 9 ) );
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 9
ADDI4
ARGI4
ADDRLP4 92
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 92
INDIRP4
ARGP4
ADDRLP4 96
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 4
ADDRLP4 96
INDIRI4
ASGNI4
line 67
;67:		cg.scores[i].accuracy = atoi(CG_Argv(i * 14 + 10));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 10
ADDI4
ARGI4
ADDRLP4 104
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 104
INDIRP4
ARGP4
ADDRLP4 108
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+24
ADDP4
ADDRLP4 108
INDIRI4
ASGNI4
line 68
;68:		cg.scores[i].impressiveCount = atoi(CG_Argv(i * 14 + 11));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 11
ADDI4
ARGI4
ADDRLP4 116
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 116
INDIRP4
ARGP4
ADDRLP4 120
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+28
ADDP4
ADDRLP4 120
INDIRI4
ASGNI4
line 69
;69:		cg.scores[i].excellentCount = atoi(CG_Argv(i * 14 + 12));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 12
ADDI4
ARGI4
ADDRLP4 128
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 128
INDIRP4
ARGP4
ADDRLP4 132
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+32
ADDP4
ADDRLP4 132
INDIRI4
ASGNI4
line 70
;70:		cg.scores[i].guantletCount = atoi(CG_Argv(i * 14 + 13));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 13
ADDI4
ARGI4
ADDRLP4 140
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 140
INDIRP4
ARGP4
ADDRLP4 144
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+36
ADDP4
ADDRLP4 144
INDIRI4
ASGNI4
line 71
;71:		cg.scores[i].defendCount = atoi(CG_Argv(i * 14 + 14));
ADDRLP4 148
CNSTI4 14
ASGNI4
ADDRLP4 148
INDIRI4
ADDRLP4 0
INDIRI4
MULI4
ADDRLP4 148
INDIRI4
ADDI4
ARGI4
ADDRLP4 156
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 156
INDIRP4
ARGP4
ADDRLP4 160
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+40
ADDP4
ADDRLP4 160
INDIRI4
ASGNI4
line 72
;72:		cg.scores[i].assistCount = atoi(CG_Argv(i * 14 + 15));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 15
ADDI4
ARGI4
ADDRLP4 168
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 168
INDIRP4
ARGP4
ADDRLP4 172
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+44
ADDP4
ADDRLP4 172
INDIRI4
ASGNI4
line 73
;73:		cg.scores[i].perfect = atoi(CG_Argv(i * 14 + 16));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 16
ADDI4
ARGI4
ADDRLP4 180
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 180
INDIRP4
ARGP4
ADDRLP4 184
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+52
ADDP4
ADDRLP4 184
INDIRI4
ASGNI4
line 74
;74:		cg.scores[i].captures = atoi(CG_Argv(i * 14 + 17));
CNSTI4 14
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 17
ADDI4
ARGI4
ADDRLP4 192
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 192
INDIRP4
ARGP4
ADDRLP4 196
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480+48
ADDP4
ADDRLP4 196
INDIRI4
ASGNI4
line 76
;75:
;76:		if ( cg.scores[i].client < 0 || cg.scores[i].client >= MAX_CLIENTS ) {
ADDRLP4 200
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ASGNI4
ADDRLP4 200
INDIRI4
ADDRGP4 cg+110480
ADDP4
INDIRI4
CNSTI4 0
LTI4 $125
ADDRLP4 200
INDIRI4
ADDRGP4 cg+110480
ADDP4
INDIRI4
CNSTI4 64
LTI4 $121
LABELV $125
line 77
;77:			cg.scores[i].client = 0;
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480
ADDP4
CNSTI4 0
ASGNI4
line 78
;78:		}
LABELV $121
line 79
;79:		cgs.clientinfo[ cg.scores[i].client ].score = cg.scores[i].score;
ADDRLP4 204
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ASGNI4
CNSTI4 1708
ADDRLP4 204
INDIRI4
ADDRGP4 cg+110480
ADDP4
INDIRI4
MULI4
ADDRGP4 cgs+40972+100
ADDP4
ADDRLP4 204
INDIRI4
ADDRGP4 cg+110480+4
ADDP4
INDIRI4
ASGNI4
line 80
;80:		cgs.clientinfo[ cg.scores[i].client ].powerups = powerups;
CNSTI4 1708
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 cg+110480
ADDP4
INDIRI4
MULI4
ADDRGP4 cgs+40972+140
ADDP4
ADDRLP4 4
INDIRI4
ASGNI4
line 82
;81:
;82:		cg.scores[i].team = cgs.clientinfo[cg.scores[i].client].team;
ADDRLP4 208
CNSTI4 60
ADDRLP4 0
INDIRI4
MULI4
ASGNI4
ADDRLP4 208
INDIRI4
ADDRGP4 cg+110480+56
ADDP4
CNSTI4 1708
ADDRLP4 208
INDIRI4
ADDRGP4 cg+110480
ADDP4
INDIRI4
MULI4
ADDRGP4 cgs+40972+68
ADDP4
INDIRI4
ASGNI4
line 83
;83:	}
LABELV $92
line 59
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $94
ADDRLP4 0
INDIRI4
ADDRGP4 cg+110464
INDIRI4
LTI4 $91
line 88
;84:#ifdef MISSIONPACK
;85:	CG_SetScoreSelection(NULL);
;86:#endif
;87:
;88:}
LABELV $80
endproc CG_ParseScores 212 12
proc CG_ParseTeamInfo 68 4
line 96
;89:
;90:/*
;91:=================
;92:CG_ParseTeamInfo
;93:
;94:=================
;95:*/
;96:static void CG_ParseTeamInfo( void ) {
line 100
;97:	int		i;
;98:	int		client;
;99:
;100:	numSortedTeamPlayers = atoi( CG_Argv( 1 ) );
CNSTI4 1
ARGI4
ADDRLP4 8
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 12
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 numSortedTeamPlayers
ADDRLP4 12
INDIRI4
ASGNI4
line 102
;101:
;102:	for ( i = 0 ; i < numSortedTeamPlayers ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $144
JUMPV
LABELV $141
line 103
;103:		client = atoi( CG_Argv( i * 6 + 2 ) );
CNSTI4 6
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 2
ADDI4
ARGI4
ADDRLP4 16
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 16
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 4
ADDRLP4 20
INDIRI4
ASGNI4
line 105
;104:
;105:		sortedTeamPlayers[i] = client;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 sortedTeamPlayers
ADDP4
ADDRLP4 4
INDIRI4
ASGNI4
line 107
;106:
;107:		cgs.clientinfo[ client ].location = atoi( CG_Argv( i * 6 + 3 ) );
CNSTI4 6
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 3
ADDI4
ARGI4
ADDRLP4 24
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 24
INDIRP4
ARGP4
ADDRLP4 28
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 1708
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 cgs+40972+104
ADDP4
ADDRLP4 28
INDIRI4
ASGNI4
line 108
;108:		cgs.clientinfo[ client ].health = atoi( CG_Argv( i * 6 + 4 ) );
CNSTI4 6
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 4
ADDI4
ARGI4
ADDRLP4 32
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 32
INDIRP4
ARGP4
ADDRLP4 36
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 1708
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 cgs+40972+108
ADDP4
ADDRLP4 36
INDIRI4
ASGNI4
line 109
;109:		cgs.clientinfo[ client ].armor = atoi( CG_Argv( i * 6 + 5 ) );
CNSTI4 6
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 5
ADDI4
ARGI4
ADDRLP4 40
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 40
INDIRP4
ARGP4
ADDRLP4 44
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 1708
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 cgs+40972+112
ADDP4
ADDRLP4 44
INDIRI4
ASGNI4
line 110
;110:		cgs.clientinfo[ client ].curWeapon = atoi( CG_Argv( i * 6 + 6 ) );
ADDRLP4 48
CNSTI4 6
ASGNI4
ADDRLP4 48
INDIRI4
ADDRLP4 0
INDIRI4
MULI4
ADDRLP4 48
INDIRI4
ADDI4
ARGI4
ADDRLP4 52
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 52
INDIRP4
ARGP4
ADDRLP4 56
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 1708
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 cgs+40972+116
ADDP4
ADDRLP4 56
INDIRI4
ASGNI4
line 111
;111:		cgs.clientinfo[ client ].powerups = atoi( CG_Argv( i * 6 + 7 ) );
CNSTI4 6
ADDRLP4 0
INDIRI4
MULI4
CNSTI4 7
ADDI4
ARGI4
ADDRLP4 60
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 60
INDIRP4
ARGP4
ADDRLP4 64
ADDRGP4 atoi
CALLI4
ASGNI4
CNSTI4 1708
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 cgs+40972+140
ADDP4
ADDRLP4 64
INDIRI4
ASGNI4
line 112
;112:	}
LABELV $142
line 102
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $144
ADDRLP4 0
INDIRI4
ADDRGP4 numSortedTeamPlayers
INDIRI4
LTI4 $141
line 113
;113:}
LABELV $140
endproc CG_ParseTeamInfo 68 4
export CG_ParseServerinfo
proc CG_ParseServerinfo 84 16
line 124
;114:
;115:
;116:/*
;117:================
;118:CG_ParseServerinfo
;119:
;120:This is called explicitly when the gamestate is first received,
;121:and whenever the server updates any serverinfo flagged cvars
;122:================
;123:*/
;124:void CG_ParseServerinfo( void ) {
line 128
;125:	const char	*info;
;126:	char	*mapname;
;127:
;128:	info = CG_ConfigString( CS_SERVERINFO );
CNSTI4 0
ARGI4
ADDRLP4 8
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 8
INDIRP4
ASGNP4
line 129
;129:	cgs.gametype = atoi( Info_ValueForKey( info, "g_gametype" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $157
ARGP4
ADDRLP4 12
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 12
INDIRP4
ARGP4
ADDRLP4 16
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31456
ADDRLP4 16
INDIRI4
ASGNI4
line 130
;130:	trap_Cvar_Set("g_gametype", va("%i", cgs.gametype));
ADDRGP4 $158
ARGP4
ADDRGP4 cgs+31456
INDIRI4
ARGI4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
ADDRGP4 $157
ARGP4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 131
;131:	cgs.dmflags = atoi( Info_ValueForKey( info, "dmflags" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $161
ARGP4
ADDRLP4 24
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 24
INDIRP4
ARGP4
ADDRLP4 28
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31460
ADDRLP4 28
INDIRI4
ASGNI4
line 132
;132:	cgs.teamflags = atoi( Info_ValueForKey( info, "teamflags" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $163
ARGP4
ADDRLP4 32
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 32
INDIRP4
ARGP4
ADDRLP4 36
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31464
ADDRLP4 36
INDIRI4
ASGNI4
line 133
;133:	cgs.fraglimit = atoi( Info_ValueForKey( info, "fraglimit" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $165
ARGP4
ADDRLP4 40
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 40
INDIRP4
ARGP4
ADDRLP4 44
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31468
ADDRLP4 44
INDIRI4
ASGNI4
line 134
;134:	cgs.capturelimit = atoi( Info_ValueForKey( info, "capturelimit" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $167
ARGP4
ADDRLP4 48
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 48
INDIRP4
ARGP4
ADDRLP4 52
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31472
ADDRLP4 52
INDIRI4
ASGNI4
line 135
;135:	cgs.timelimit = atoi( Info_ValueForKey( info, "timelimit" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $169
ARGP4
ADDRLP4 56
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 56
INDIRP4
ARGP4
ADDRLP4 60
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31476
ADDRLP4 60
INDIRI4
ASGNI4
line 136
;136:	cgs.maxclients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $171
ARGP4
ADDRLP4 64
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 64
INDIRP4
ARGP4
ADDRLP4 68
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31480
ADDRLP4 68
INDIRI4
ASGNI4
line 137
;137:	mapname = Info_ValueForKey( info, "mapname" );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $172
ARGP4
ADDRLP4 72
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 72
INDIRP4
ASGNP4
line 138
;138:	Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname );
ADDRGP4 cgs+31484
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $175
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 139
;139:	Q_strncpyz( cgs.redTeam, Info_ValueForKey( info, "g_redTeam" ), sizeof(cgs.redTeam) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $177
ARGP4
ADDRLP4 76
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRGP4 cgs+31548
ARGP4
ADDRLP4 76
INDIRP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 140
;140:	trap_Cvar_Set("g_redTeam", cgs.redTeam);
ADDRGP4 $177
ARGP4
ADDRGP4 cgs+31548
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 141
;141:	Q_strncpyz( cgs.blueTeam, Info_ValueForKey( info, "g_blueTeam" ), sizeof(cgs.blueTeam) );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $181
ARGP4
ADDRLP4 80
ADDRGP4 Info_ValueForKey
CALLP4
ASGNP4
ADDRGP4 cgs+31612
ARGP4
ADDRLP4 80
INDIRP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 142
;142:	trap_Cvar_Set("g_blueTeam", cgs.blueTeam);
ADDRGP4 $181
ARGP4
ADDRGP4 cgs+31612
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 143
;143:}
LABELV $155
endproc CG_ParseServerinfo 84 16
proc CG_ParseWarmup 24 8
line 150
;144:
;145:/*
;146:==================
;147:CG_ParseWarmup
;148:==================
;149:*/
;150:static void CG_ParseWarmup( void ) {
line 154
;151:	const char	*info;
;152:	int			warmup;
;153:
;154:	info = CG_ConfigString( CS_WARMUP );
CNSTI4 5
ARGI4
ADDRLP4 8
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 8
INDIRP4
ASGNP4
line 156
;155:
;156:	warmup = atoi( info );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 12
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 12
INDIRI4
ASGNI4
line 157
;157:	cg.warmupCount = -1;
ADDRGP4 cg+124660
CNSTI4 -1
ASGNI4
line 159
;158:
;159:	if ( warmup == 0 && cg.warmup ) {
ADDRLP4 16
CNSTI4 0
ASGNI4
ADDRLP4 0
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $186
ADDRGP4 cg+124656
INDIRI4
ADDRLP4 16
INDIRI4
EQI4 $186
line 161
;160:
;161:	} else if ( warmup > 0 && cg.warmup <= 0 ) {
ADDRGP4 $187
JUMPV
LABELV $186
ADDRLP4 20
CNSTI4 0
ASGNI4
ADDRLP4 0
INDIRI4
ADDRLP4 20
INDIRI4
LEI4 $189
ADDRGP4 cg+124656
INDIRI4
ADDRLP4 20
INDIRI4
GTI4 $189
line 167
;162:#ifdef MISSIONPACK
;163:		if (cgs.gametype >= GT_CTF && cgs.gametype <= GT_HARVESTER) {
;164:			trap_S_StartLocalSound( cgs.media.countPrepareTeamSound, CHAN_ANNOUNCER );
;165:		} else
;166:#endif
;167:		{
line 168
;168:			trap_S_StartLocalSound( cgs.media.countPrepareSound, CHAN_ANNOUNCER );
ADDRGP4 cgs+152340+972
INDIRI4
ARGI4
CNSTI4 7
ARGI4
ADDRGP4 trap_S_StartLocalSound
CALLV
pop
line 169
;169:		}
line 170
;170:	}
LABELV $189
LABELV $187
line 172
;171:
;172:	cg.warmup = warmup;
ADDRGP4 cg+124656
ADDRLP4 0
INDIRI4
ASGNI4
line 173
;173:}
LABELV $184
endproc CG_ParseWarmup 24 8
export CG_SetConfigValues
proc CG_SetConfigValues 36 4
line 182
;174:
;175:/*
;176:================
;177:CG_SetConfigValues
;178:
;179:Called on load to set the initial values from configure strings
;180:================
;181:*/
;182:void CG_SetConfigValues( void ) {
line 185
;183:	const char *s;
;184:
;185:	cgs.scores1 = atoi( CG_ConfigString( CS_SCORES1 ) );
CNSTI4 6
ARGI4
ADDRLP4 4
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 8
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34800
ADDRLP4 8
INDIRI4
ASGNI4
line 186
;186:	cgs.scores2 = atoi( CG_ConfigString( CS_SCORES2 ) );
CNSTI4 7
ARGI4
ADDRLP4 12
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 12
INDIRP4
ARGP4
ADDRLP4 16
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34804
ADDRLP4 16
INDIRI4
ASGNI4
line 187
;187:	cgs.levelStartTime = atoi( CG_ConfigString( CS_LEVEL_START_TIME ) );
CNSTI4 21
ARGI4
ADDRLP4 20
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 20
INDIRP4
ARGP4
ADDRLP4 24
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34796
ADDRLP4 24
INDIRI4
ASGNI4
line 188
;188:	if( cgs.gametype == GT_CTF ) {
ADDRGP4 cgs+31456
INDIRI4
CNSTI4 4
NEI4 $199
line 189
;189:		s = CG_ConfigString( CS_FLAGSTATUS );
CNSTI4 23
ARGI4
ADDRLP4 28
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 28
INDIRP4
ASGNP4
line 190
;190:		cgs.redflag = s[0] - '0';
ADDRGP4 cgs+34808
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 48
SUBI4
ASGNI4
line 191
;191:		cgs.blueflag = s[1] - '0';
ADDRGP4 cgs+34812
ADDRLP4 0
INDIRP4
CNSTI4 1
ADDP4
INDIRI1
CVII4 1
CNSTI4 48
SUBI4
ASGNI4
line 192
;192:	}
LABELV $199
line 199
;193:#ifdef MISSIONPACK
;194:	else if( cgs.gametype == GT_1FCTF ) {
;195:		s = CG_ConfigString( CS_FLAGSTATUS );
;196:		cgs.flagStatus = s[0] - '0';
;197:	}
;198:#endif
;199:	cg.warmup = atoi( CG_ConfigString( CS_WARMUP ) );
CNSTI4 5
ARGI4
ADDRLP4 28
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 28
INDIRP4
ARGP4
ADDRLP4 32
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cg+124656
ADDRLP4 32
INDIRI4
ASGNI4
line 200
;200:}
LABELV $195
endproc CG_SetConfigValues 36 4
export CG_ShaderStateChanged
proc CG_ShaderStateChanged 188 12
line 207
;201:
;202:/*
;203:=====================
;204:CG_ShaderStateChanged
;205:=====================
;206:*/
;207:void CG_ShaderStateChanged(void) {
line 214
;208:	char originalShader[MAX_QPATH];
;209:	char newShader[MAX_QPATH];
;210:	char timeOffset[16];
;211:	const char *o;
;212:	char *n,*t;
;213:
;214:	o = CG_ConfigString( CS_SHADERSTATE );
CNSTI4 24
ARGI4
ADDRLP4 156
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 156
INDIRP4
ASGNP4
ADDRGP4 $207
JUMPV
LABELV $206
line 215
;215:	while (o && *o) {
line 216
;216:		n = strstr(o, "=");
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $209
ARGP4
ADDRLP4 160
ADDRGP4 strstr
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 160
INDIRP4
ASGNP4
line 217
;217:		if (n && *n) {
ADDRLP4 4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $208
ADDRLP4 4
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $208
line 218
;218:			strncpy(originalShader, o, n-o);
ADDRLP4 12
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 4
INDIRP4
CVPU4 4
ADDRLP4 0
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ARGI4
ADDRGP4 strncpy
CALLP4
pop
line 219
;219:			originalShader[n-o] = 0;
ADDRLP4 4
INDIRP4
CVPU4 4
ADDRLP4 0
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ADDRLP4 12
ADDP4
CNSTI1 0
ASGNI1
line 220
;220:			n++;
ADDRLP4 4
ADDRLP4 4
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
line 221
;221:			t = strstr(n, ":");
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 $212
ARGP4
ADDRLP4 172
ADDRGP4 strstr
CALLP4
ASGNP4
ADDRLP4 8
ADDRLP4 172
INDIRP4
ASGNP4
line 222
;222:			if (t && *t) {
ADDRLP4 8
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $208
ADDRLP4 8
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $208
line 223
;223:				strncpy(newShader, n, t-n);
ADDRLP4 76
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRLP4 4
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ARGI4
ADDRGP4 strncpy
CALLP4
pop
line 224
;224:				newShader[t-n] = 0;
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRLP4 4
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ADDRLP4 76
ADDP4
CNSTI1 0
ASGNI1
line 225
;225:			} else {
line 226
;226:				break;
LABELV $214
line 228
;227:			}
;228:			t++;
ADDRLP4 8
ADDRLP4 8
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
line 229
;229:			o = strstr(t, "@");
ADDRLP4 8
INDIRP4
ARGP4
ADDRGP4 $215
ARGP4
ADDRLP4 180
ADDRGP4 strstr
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 180
INDIRP4
ASGNP4
line 230
;230:			if (o) {
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $211
line 231
;231:				strncpy(timeOffset, t, o-t);
ADDRLP4 140
ARGP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ARGI4
ADDRGP4 strncpy
CALLP4
pop
line 232
;232:				timeOffset[o-t] = 0;
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
ADDRLP4 140
ADDP4
CNSTI1 0
ASGNI1
line 233
;233:				o++;
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
line 234
;234:				trap_R_RemapShader( originalShader, newShader, timeOffset );
ADDRLP4 12
ARGP4
ADDRLP4 76
ARGP4
ADDRLP4 140
ARGP4
ADDRGP4 trap_R_RemapShader
CALLV
pop
line 235
;235:			}
line 236
;236:		} else {
line 237
;237:			break;
LABELV $211
line 239
;238:		}
;239:	}
LABELV $207
line 215
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $218
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $206
LABELV $218
LABELV $208
line 240
;240:}
LABELV $205
endproc CG_ShaderStateChanged 188 12
proc CG_ConfigStringModified 48 12
line 248
;241:
;242:/*
;243:================
;244:CG_ConfigStringModified
;245:
;246:================
;247:*/
;248:static void CG_ConfigStringModified( void ) {
line 252
;249:	const char	*str;
;250:	int		num;
;251:
;252:	num = atoi( CG_Argv( 1 ) );
CNSTI4 1
ARGI4
ADDRLP4 8
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 12
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 12
INDIRI4
ASGNI4
line 256
;253:
;254:	// get the gamestate from the client system, which will have the
;255:	// new configstring already integrated
;256:	trap_GetGameState( &cgs.gameState );
ADDRGP4 cgs
ARGP4
ADDRGP4 trap_GetGameState
CALLV
pop
line 259
;257:
;258:	// look up the individual string that was modified
;259:	str = CG_ConfigString( num );
ADDRLP4 0
INDIRI4
ARGI4
ADDRLP4 16
ADDRGP4 CG_ConfigString
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 16
INDIRP4
ASGNP4
line 262
;260:
;261:	// do something with it if necessary
;262:	if ( num == CS_MUSIC ) {
ADDRLP4 0
INDIRI4
CNSTI4 2
NEI4 $220
line 263
;263:		CG_StartMusic();
ADDRGP4 CG_StartMusic
CALLV
pop
line 264
;264:	} else if ( num == CS_SERVERINFO ) {
ADDRGP4 $221
JUMPV
LABELV $220
ADDRLP4 0
INDIRI4
CNSTI4 0
NEI4 $222
line 265
;265:		CG_ParseServerinfo();
ADDRGP4 CG_ParseServerinfo
CALLV
pop
line 266
;266:	} else if ( num == CS_WARMUP ) {
ADDRGP4 $223
JUMPV
LABELV $222
ADDRLP4 0
INDIRI4
CNSTI4 5
NEI4 $224
line 267
;267:		CG_ParseWarmup();
ADDRGP4 CG_ParseWarmup
CALLV
pop
line 268
;268:	} else if ( num == CS_SCORES1 ) {
ADDRGP4 $225
JUMPV
LABELV $224
ADDRLP4 0
INDIRI4
CNSTI4 6
NEI4 $226
line 269
;269:		cgs.scores1 = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34800
ADDRLP4 20
INDIRI4
ASGNI4
line 270
;270:	} else if ( num == CS_SCORES2 ) {
ADDRGP4 $227
JUMPV
LABELV $226
ADDRLP4 0
INDIRI4
CNSTI4 7
NEI4 $229
line 271
;271:		cgs.scores2 = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34804
ADDRLP4 20
INDIRI4
ASGNI4
line 272
;272:	} else if ( num == CS_LEVEL_START_TIME ) {
ADDRGP4 $230
JUMPV
LABELV $229
ADDRLP4 0
INDIRI4
CNSTI4 21
NEI4 $232
line 273
;273:		cgs.levelStartTime = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+34796
ADDRLP4 20
INDIRI4
ASGNI4
line 274
;274:	} else if ( num == CS_VOTE_TIME ) {
ADDRGP4 $233
JUMPV
LABELV $232
ADDRLP4 0
INDIRI4
CNSTI4 8
NEI4 $235
line 275
;275:		cgs.voteTime = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31676
ADDRLP4 20
INDIRI4
ASGNI4
line 276
;276:		cgs.voteModified = qtrue;
ADDRGP4 cgs+31688
CNSTI4 1
ASGNI4
line 277
;277:	} else if ( num == CS_VOTE_YES ) {
ADDRGP4 $236
JUMPV
LABELV $235
ADDRLP4 0
INDIRI4
CNSTI4 10
NEI4 $239
line 278
;278:		cgs.voteYes = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31680
ADDRLP4 20
INDIRI4
ASGNI4
line 279
;279:		cgs.voteModified = qtrue;
ADDRGP4 cgs+31688
CNSTI4 1
ASGNI4
line 280
;280:	} else if ( num == CS_VOTE_NO ) {
ADDRGP4 $240
JUMPV
LABELV $239
ADDRLP4 0
INDIRI4
CNSTI4 11
NEI4 $243
line 281
;281:		cgs.voteNo = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cgs+31684
ADDRLP4 20
INDIRI4
ASGNI4
line 282
;282:		cgs.voteModified = qtrue;
ADDRGP4 cgs+31688
CNSTI4 1
ASGNI4
line 283
;283:	} else if ( num == CS_VOTE_STRING ) {
ADDRGP4 $244
JUMPV
LABELV $243
ADDRLP4 0
INDIRI4
CNSTI4 9
NEI4 $247
line 284
;284:		Q_strncpyz( cgs.voteString, str, sizeof( cgs.voteString ) );
ADDRGP4 cgs+31692
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
CNSTI4 1024
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 288
;285:#ifdef MISSIONPACK
;286:		trap_S_StartLocalSound( cgs.media.voteNow, CHAN_ANNOUNCER );
;287:#endif //MISSIONPACK
;288:	} else if ( num >= CS_TEAMVOTE_TIME && num <= CS_TEAMVOTE_TIME + 1) {
ADDRGP4 $248
JUMPV
LABELV $247
ADDRLP4 0
INDIRI4
CNSTI4 12
LTI4 $251
ADDRLP4 0
INDIRI4
CNSTI4 13
GTI4 $251
line 289
;289:		cgs.teamVoteTime[num-CS_TEAMVOTE_TIME] = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 24
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32716-48
ADDP4
ADDRLP4 24
INDIRI4
ASGNI4
line 290
;290:		cgs.teamVoteModified[num-CS_TEAMVOTE_TIME] = qtrue;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32740-48
ADDP4
CNSTI4 1
ASGNI4
line 291
;291:	} else if ( num >= CS_TEAMVOTE_YES && num <= CS_TEAMVOTE_YES + 1) {
ADDRGP4 $252
JUMPV
LABELV $251
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $257
ADDRLP4 0
INDIRI4
CNSTI4 17
GTI4 $257
line 292
;292:		cgs.teamVoteYes[num-CS_TEAMVOTE_YES] = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 28
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32724-64
ADDP4
ADDRLP4 28
INDIRI4
ASGNI4
line 293
;293:		cgs.teamVoteModified[num-CS_TEAMVOTE_YES] = qtrue;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32740-64
ADDP4
CNSTI4 1
ASGNI4
line 294
;294:	} else if ( num >= CS_TEAMVOTE_NO && num <= CS_TEAMVOTE_NO + 1) {
ADDRGP4 $258
JUMPV
LABELV $257
ADDRLP4 0
INDIRI4
CNSTI4 18
LTI4 $263
ADDRLP4 0
INDIRI4
CNSTI4 19
GTI4 $263
line 295
;295:		cgs.teamVoteNo[num-CS_TEAMVOTE_NO] = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 32
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32732-72
ADDP4
ADDRLP4 32
INDIRI4
ASGNI4
line 296
;296:		cgs.teamVoteModified[num-CS_TEAMVOTE_NO] = qtrue;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+32740-72
ADDP4
CNSTI4 1
ASGNI4
line 297
;297:	} else if ( num >= CS_TEAMVOTE_STRING && num <= CS_TEAMVOTE_STRING + 1) {
ADDRGP4 $264
JUMPV
LABELV $263
ADDRLP4 0
INDIRI4
CNSTI4 14
LTI4 $269
ADDRLP4 0
INDIRI4
CNSTI4 15
GTI4 $269
line 298
;298:		Q_strncpyz( cgs.teamVoteString[num-CS_TEAMVOTE_STRING], str, sizeof( cgs.teamVoteString ) );
ADDRLP4 0
INDIRI4
CNSTI4 10
LSHI4
ADDRGP4 cgs+32748-14336
ADDP4
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
CNSTI4 2048
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 302
;299:#ifdef MISSIONPACK
;300:		trap_S_StartLocalSound( cgs.media.voteNow, CHAN_ANNOUNCER );
;301:#endif
;302:	} else if ( num == CS_INTERMISSION ) {
ADDRGP4 $270
JUMPV
LABELV $269
ADDRLP4 0
INDIRI4
CNSTI4 22
NEI4 $274
line 303
;303:		cg.intermissionStarted = atoi( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 36
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRGP4 cg+24
ADDRLP4 36
INDIRI4
ASGNI4
line 304
;304:	} else if ( num >= CS_MODELS && num < CS_MODELS+MAX_MODELS ) {
ADDRGP4 $275
JUMPV
LABELV $274
ADDRLP4 0
INDIRI4
CNSTI4 32
LTI4 $277
ADDRLP4 0
INDIRI4
CNSTI4 288
GEI4 $277
line 305
;305:		cgs.gameModels[ num-CS_MODELS ] = trap_R_RegisterModel( str );
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 40
ADDRGP4 trap_R_RegisterModel
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+34824-128
ADDP4
ADDRLP4 40
INDIRI4
ASGNI4
line 306
;306:	} else if ( num >= CS_SOUNDS && num < CS_SOUNDS+MAX_MODELS ) {
ADDRGP4 $278
JUMPV
LABELV $277
ADDRLP4 0
INDIRI4
CNSTI4 288
LTI4 $281
ADDRLP4 0
INDIRI4
CNSTI4 544
GEI4 $281
line 307
;307:		if ( str[0] != '*' ) {	// player specific sounds don't register here
ADDRLP4 4
INDIRP4
INDIRI1
CVII4 1
CNSTI4 42
EQI4 $282
line 308
;308:			cgs.gameSounds[ num-CS_SOUNDS] = trap_S_RegisterSound( str, qfalse );
ADDRLP4 4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 44
ADDRGP4 trap_S_RegisterSound
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+35848-1152
ADDP4
ADDRLP4 44
INDIRI4
ASGNI4
line 309
;309:		}
line 310
;310:	} else if ( num >= CS_PLAYERS && num < CS_PLAYERS+MAX_CLIENTS ) {
ADDRGP4 $282
JUMPV
LABELV $281
ADDRLP4 0
INDIRI4
CNSTI4 544
LTI4 $287
ADDRLP4 0
INDIRI4
CNSTI4 608
GEI4 $287
line 311
;311:		CG_NewClientInfo( num - CS_PLAYERS );
ADDRLP4 0
INDIRI4
CNSTI4 544
SUBI4
ARGI4
ADDRGP4 CG_NewClientInfo
CALLV
pop
line 312
;312:		CG_BuildSpectatorString();
ADDRGP4 CG_BuildSpectatorString
CALLV
pop
line 313
;313:	} else if ( num == CS_FLAGSTATUS ) {
ADDRGP4 $288
JUMPV
LABELV $287
ADDRLP4 0
INDIRI4
CNSTI4 23
NEI4 $289
line 314
;314:		if( cgs.gametype == GT_CTF ) {
ADDRGP4 cgs+31456
INDIRI4
CNSTI4 4
NEI4 $290
line 316
;315:			// format is rb where its red/blue, 0 is at base, 1 is taken, 2 is dropped
;316:			cgs.redflag = str[0] - '0';
ADDRGP4 cgs+34808
ADDRLP4 4
INDIRP4
INDIRI1
CVII4 1
CNSTI4 48
SUBI4
ASGNI4
line 317
;317:			cgs.blueflag = str[1] - '0';
ADDRGP4 cgs+34812
ADDRLP4 4
INDIRP4
CNSTI4 1
ADDP4
INDIRI1
CVII4 1
CNSTI4 48
SUBI4
ASGNI4
line 318
;318:		}
line 324
;319:#ifdef MISSIONPACK
;320:		else if( cgs.gametype == GT_1FCTF ) {
;321:			cgs.flagStatus = str[0] - '0';
;322:		}
;323:#endif
;324:	}
ADDRGP4 $290
JUMPV
LABELV $289
line 325
;325:	else if ( num == CS_SHADERSTATE ) {
ADDRLP4 0
INDIRI4
CNSTI4 24
NEI4 $296
line 326
;326:		CG_ShaderStateChanged();
ADDRGP4 CG_ShaderStateChanged
CALLV
pop
line 327
;327:	}
LABELV $296
LABELV $290
LABELV $288
LABELV $282
LABELV $278
LABELV $275
LABELV $270
LABELV $264
LABELV $258
LABELV $252
LABELV $248
LABELV $244
LABELV $240
LABELV $236
LABELV $233
LABELV $230
LABELV $227
LABELV $225
LABELV $223
LABELV $221
line 329
;328:		
;329:}
LABELV $219
endproc CG_ConfigStringModified 48 12
proc CG_AddToTeamChat 60 0
line 338
;330:
;331:
;332:/*
;333:=======================
;334:CG_AddToTeamChat
;335:
;336:=======================
;337:*/
;338:static void CG_AddToTeamChat( const char *str ) {
line 344
;339:	int len;
;340:	char *p, *ls;
;341:	int lastcolor;
;342:	int chatHeight;
;343:
;344:	if (cg_teamChatHeight.integer < TEAMCHAT_HEIGHT) {
ADDRGP4 cg_teamChatHeight+12
INDIRI4
CNSTI4 8
GEI4 $299
line 345
;345:		chatHeight = cg_teamChatHeight.integer;
ADDRLP4 12
ADDRGP4 cg_teamChatHeight+12
INDIRI4
ASGNI4
line 346
;346:	} else {
ADDRGP4 $300
JUMPV
LABELV $299
line 347
;347:		chatHeight = TEAMCHAT_HEIGHT;
ADDRLP4 12
CNSTI4 8
ASGNI4
line 348
;348:	}
LABELV $300
line 350
;349:
;350:	if (chatHeight <= 0 || cg_teamChatTime.integer <= 0) {
ADDRLP4 20
CNSTI4 0
ASGNI4
ADDRLP4 12
INDIRI4
ADDRLP4 20
INDIRI4
LEI4 $306
ADDRGP4 cg_teamChatTime+12
INDIRI4
ADDRLP4 20
INDIRI4
GTI4 $303
LABELV $306
line 352
;351:		// team chat disabled, dump into normal chat
;352:		cgs.teamChatPos = cgs.teamLastChatPos = 0;
ADDRLP4 24
CNSTI4 0
ASGNI4
ADDRGP4 cgs+152248
ADDRLP4 24
INDIRI4
ASGNI4
ADDRGP4 cgs+152244
ADDRLP4 24
INDIRI4
ASGNI4
line 353
;353:		return;
ADDRGP4 $298
JUMPV
LABELV $303
line 356
;354:	}
;355:
;356:	len = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 358
;357:
;358:	p = cgs.teamChatMsgs[cgs.teamChatPos % chatHeight];
ADDRLP4 0
CNSTI4 241
ADDRGP4 cgs+152244
INDIRI4
ADDRLP4 12
INDIRI4
MODI4
MULI4
ADDRGP4 cgs+150284
ADDP4
ASGNP4
line 359
;359:	*p = 0;
ADDRLP4 0
INDIRP4
CNSTI1 0
ASGNI1
line 361
;360:
;361:	lastcolor = '7';
ADDRLP4 16
CNSTI4 55
ASGNI4
line 363
;362:
;363:	ls = NULL;
ADDRLP4 8
CNSTP4 0
ASGNP4
ADDRGP4 $312
JUMPV
LABELV $311
line 364
;364:	while (*str) {
line 365
;365:		if (len > TEAMCHAT_WIDTH - 1) {
ADDRLP4 4
INDIRI4
CNSTI4 79
LEI4 $314
line 366
;366:			if (ls) {
ADDRLP4 8
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $316
line 367
;367:				str -= (p - ls);
ADDRFP4 0
ADDRFP4 0
INDIRP4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
SUBP4
ASGNP4
line 368
;368:				str++;
ADDRFP4 0
ADDRFP4 0
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
line 369
;369:				p -= (p - ls);
ADDRLP4 0
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
SUBP4
ASGNP4
line 370
;370:			}
LABELV $316
line 371
;371:			*p = 0;
ADDRLP4 0
INDIRP4
CNSTI1 0
ASGNI1
line 373
;372:
;373:			cgs.teamChatMsgTimes[cgs.teamChatPos % chatHeight] = cg.time;
ADDRGP4 cgs+152244
INDIRI4
ADDRLP4 12
INDIRI4
MODI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+152212
ADDP4
ADDRGP4 cg+107604
INDIRI4
ASGNI4
line 375
;374:
;375:			cgs.teamChatPos++;
ADDRLP4 24
ADDRGP4 cgs+152244
ASGNP4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 376
;376:			p = cgs.teamChatMsgs[cgs.teamChatPos % chatHeight];
ADDRLP4 0
CNSTI4 241
ADDRGP4 cgs+152244
INDIRI4
ADDRLP4 12
INDIRI4
MODI4
MULI4
ADDRGP4 cgs+150284
ADDP4
ASGNP4
line 377
;377:			*p = 0;
ADDRLP4 0
INDIRP4
CNSTI1 0
ASGNI1
line 378
;378:			*p++ = Q_COLOR_ESCAPE;
ADDRLP4 28
ADDRLP4 0
INDIRP4
ASGNP4
ADDRLP4 0
ADDRLP4 28
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
ADDRLP4 28
INDIRP4
CNSTI1 94
ASGNI1
line 379
;379:			*p++ = lastcolor;
ADDRLP4 32
ADDRLP4 0
INDIRP4
ASGNP4
ADDRLP4 0
ADDRLP4 32
INDIRP4
CNSTI4 1
ADDP4
ASGNP4
ADDRLP4 32
INDIRP4
ADDRLP4 16
INDIRI4
CVII1 4
ASGNI1
line 380
;380:			len = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 381
;381:			ls = NULL;
ADDRLP4 8
CNSTP4 0
ASGNP4
line 382
;382:		}
LABELV $314
line 384
;383:
;384:		if ( Q_IsColorString( str ) ) {
ADDRLP4 24
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $324
ADDRLP4 28
CNSTI4 94
ASGNI4
ADDRLP4 24
INDIRP4
INDIRI1
CVII4 1
ADDRLP4 28
INDIRI4
NEI4 $324
ADDRLP4 32
ADDRLP4 24
INDIRP4
CNSTI4 1
ADDP4
INDIRI1
CVII4 1
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 0
EQI4 $324
ADDRLP4 32
INDIRI4
ADDRLP4 28
INDIRI4
EQI4 $324
line 385
;385:			*p++ = *str++;
ADDRLP4 36
ADDRLP4 0
INDIRP4
ASGNP4
ADDRLP4 44
CNSTI4 1
ASGNI4
ADDRLP4 0
ADDRLP4 36
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
ASGNP4
ADDRLP4 40
ADDRFP4 0
INDIRP4
ASGNP4
ADDRFP4 0
ADDRLP4 40
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
ADDRLP4 40
INDIRP4
INDIRI1
ASGNI1
line 386
;386:			lastcolor = *str;
ADDRLP4 16
ADDRFP4 0
INDIRP4
INDIRI1
CVII4 1
ASGNI4
line 387
;387:			*p++ = *str++;
ADDRLP4 48
ADDRLP4 0
INDIRP4
ASGNP4
ADDRLP4 56
CNSTI4 1
ASGNI4
ADDRLP4 0
ADDRLP4 48
INDIRP4
ADDRLP4 56
INDIRI4
ADDP4
ASGNP4
ADDRLP4 52
ADDRFP4 0
INDIRP4
ASGNP4
ADDRFP4 0
ADDRLP4 52
INDIRP4
ADDRLP4 56
INDIRI4
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 52
INDIRP4
INDIRI1
ASGNI1
line 388
;388:			continue;
ADDRGP4 $312
JUMPV
LABELV $324
line 390
;389:		}
;390:		if (*str == ' ') {
ADDRFP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 32
NEI4 $326
line 391
;391:			ls = p;
ADDRLP4 8
ADDRLP4 0
INDIRP4
ASGNP4
line 392
;392:		}
LABELV $326
line 393
;393:		*p++ = *str++;
ADDRLP4 36
ADDRLP4 0
INDIRP4
ASGNP4
ADDRLP4 44
CNSTI4 1
ASGNI4
ADDRLP4 0
ADDRLP4 36
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
ASGNP4
ADDRLP4 40
ADDRFP4 0
INDIRP4
ASGNP4
ADDRFP4 0
ADDRLP4 40
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
ADDRLP4 40
INDIRP4
INDIRI1
ASGNI1
line 394
;394:		len++;
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 395
;395:	}
LABELV $312
line 364
ADDRFP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $311
line 396
;396:	*p = 0;
ADDRLP4 0
INDIRP4
CNSTI1 0
ASGNI1
line 398
;397:
;398:	cgs.teamChatMsgTimes[cgs.teamChatPos % chatHeight] = cg.time;
ADDRGP4 cgs+152244
INDIRI4
ADDRLP4 12
INDIRI4
MODI4
CNSTI4 2
LSHI4
ADDRGP4 cgs+152212
ADDP4
ADDRGP4 cg+107604
INDIRI4
ASGNI4
line 399
;399:	cgs.teamChatPos++;
ADDRLP4 24
ADDRGP4 cgs+152244
ASGNP4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 401
;400:
;401:	if (cgs.teamChatPos - cgs.teamLastChatPos > chatHeight)
ADDRGP4 cgs+152244
INDIRI4
ADDRGP4 cgs+152248
INDIRI4
SUBI4
ADDRLP4 12
INDIRI4
LEI4 $332
line 402
;402:		cgs.teamLastChatPos = cgs.teamChatPos - chatHeight;
ADDRGP4 cgs+152248
ADDRGP4 cgs+152244
INDIRI4
ADDRLP4 12
INDIRI4
SUBI4
ASGNI4
LABELV $332
line 403
;403:}
LABELV $298
endproc CG_AddToTeamChat 60 0
proc CG_MapRestart 0 12
line 416
;404:
;405:/*
;406:===============
;407:CG_MapRestart
;408:
;409:The server has issued a map_restart, so the next snapshot
;410:is completely new and should not be interpolated to.
;411:
;412:A tournement restart will clear everything, but doesn't
;413:require a reload of all the media
;414:===============
;415:*/
;416:static void CG_MapRestart( void ) {
line 417
;417:	if ( cg_showmiss.integer ) {
ADDRGP4 cg_showmiss+12
INDIRI4
CNSTI4 0
EQI4 $339
line 418
;418:		CG_Printf( "CG_MapRestart\n" );
ADDRGP4 $342
ARGP4
ADDRGP4 CG_Printf
CALLV
pop
line 419
;419:	}
LABELV $339
line 421
;420:
;421:	CG_InitLocalEntities();
ADDRGP4 CG_InitLocalEntities
CALLV
pop
line 422
;422:	CG_InitMarkPolys();
ADDRGP4 CG_InitMarkPolys
CALLV
pop
line 423
;423:	CG_ClearParticles ();
ADDRGP4 CG_ClearParticles
CALLV
pop
line 426
;424:
;425:	// make sure the "3 frags left" warnings play again
;426:	cg.fraglimitWarnings = 0;
ADDRGP4 cg+107620
CNSTI4 0
ASGNI4
line 428
;427:
;428:	cg.timelimitWarnings = 0;
ADDRGP4 cg+107616
CNSTI4 0
ASGNI4
line 430
;429:
;430:	cg.intermissionStarted = qfalse;
ADDRGP4 cg+24
CNSTI4 0
ASGNI4
line 432
;431:
;432:	cgs.voteTime = 0;
ADDRGP4 cgs+31676
CNSTI4 0
ASGNI4
line 434
;433:
;434:	cg.mapRestart = qtrue;
ADDRGP4 cg+107624
CNSTI4 1
ASGNI4
line 436
;435:
;436:	CG_StartMusic();
ADDRGP4 CG_StartMusic
CALLV
pop
line 438
;437:
;438:	trap_S_ClearLoopingSounds(qtrue);
CNSTI4 1
ARGI4
ADDRGP4 trap_S_ClearLoopingSounds
CALLV
pop
line 443
;439:
;440:	// we really should clear more parts of cg here and stop sounds
;441:
;442:	// play the "fight" sound if this is a restart without warmup
;443:	if ( cg.warmup == 0 /* && cgs.gametype == GT_TOURNAMENT */) {
ADDRGP4 cg+124656
INDIRI4
CNSTI4 0
NEI4 $348
line 444
;444:		trap_S_StartLocalSound( cgs.media.countFightSound, CHAN_ANNOUNCER );
ADDRGP4 cgs+152340+968
INDIRI4
ARGI4
CNSTI4 7
ARGI4
ADDRGP4 trap_S_StartLocalSound
CALLV
pop
line 445
;445:		CG_CenterPrint( "FIGHT!", 120, GIANTCHAR_WIDTH*2 );
ADDRGP4 $353
ARGP4
CNSTI4 120
ARGI4
CNSTI4 64
ARGI4
ADDRGP4 CG_CenterPrint
CALLV
pop
line 446
;446:	}
LABELV $348
line 455
;447:#ifdef MISSIONPACK
;448:	if (cg_singlePlayerActive.integer) {
;449:		trap_Cvar_Set("ui_matchStartTime", va("%i", cg.time));
;450:		if (cg_recordSPDemo.integer && cg_recordSPDemoName.string && *cg_recordSPDemoName.string) {
;451:			trap_SendConsoleCommand(va("set g_synchronousclients 1 ; record %s \n", cg_recordSPDemoName.string));
;452:		}
;453:	}
;454:#endif
;455:	trap_Cvar_Set("cg_thirdPerson", "0");
ADDRGP4 $354
ARGP4
ADDRGP4 $355
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 456
;456:}
LABELV $338
endproc CG_MapRestart 0 12
export CG_ParseVoiceChats
proc CG_ParseVoiceChats 16504 16
line 495
;457:
;458:#define MAX_VOICEFILESIZE	16384
;459:#define MAX_VOICEFILES		8
;460:#define MAX_VOICECHATS		64
;461:#define MAX_VOICESOUNDS		64
;462:#define MAX_CHATSIZE		64
;463:#define MAX_HEADMODELS		64
;464:
;465:typedef struct voiceChat_s
;466:{
;467:	char id[64];
;468:	int numSounds;
;469:	sfxHandle_t sounds[MAX_VOICESOUNDS];
;470:	char chats[MAX_VOICESOUNDS][MAX_CHATSIZE];
;471:} voiceChat_t;
;472:
;473:typedef struct voiceChatList_s
;474:{
;475:	char name[64];
;476:	int gender;
;477:	int numVoiceChats;
;478:	voiceChat_t voiceChats[MAX_VOICECHATS];
;479:} voiceChatList_t;
;480:
;481:typedef struct headModelVoiceChat_s
;482:{
;483:	char headmodel[64];
;484:	int voiceChatNum;
;485:} headModelVoiceChat_t;
;486:
;487:voiceChatList_t voiceChatLists[MAX_VOICEFILES];
;488:headModelVoiceChat_t headModelVoiceChat[MAX_HEADMODELS];
;489:
;490:/*
;491:=================
;492:CG_ParseVoiceChats
;493:=================
;494:*/
;495:int CG_ParseVoiceChats( const char *filename, voiceChatList_t *voiceChatList, int maxVoiceChats ) {
line 504
;496:	int	len, i;
;497:	fileHandle_t f;
;498:	char buf[MAX_VOICEFILESIZE];
;499:	char **p, *ptr;
;500:	char *token;
;501:	voiceChat_t *voiceChats;
;502:	qboolean compress;
;503:
;504:	compress = qtrue;
ADDRLP4 12
CNSTI4 1
ASGNI4
line 505
;505:	if (cg_buildScript.integer) {
ADDRGP4 cg_buildScript+12
INDIRI4
CNSTI4 0
EQI4 $357
line 506
;506:		compress = qfalse;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 507
;507:	}
LABELV $357
line 509
;508:
;509:	len = trap_FS_FOpenFile( filename, &f, FS_READ );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 24
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 16416
ADDRGP4 trap_FS_FOpenFile
CALLI4
ASGNI4
ADDRLP4 20
ADDRLP4 16416
INDIRI4
ASGNI4
line 510
;510:	if ( !f ) {
ADDRLP4 24
INDIRI4
CNSTI4 0
NEI4 $360
line 511
;511:		trap_Print( va( S_COLOR_RED "voice chat file not found: %s\n", filename ) );
ADDRGP4 $362
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 16420
ADDRGP4 va
CALLP4
ASGNP4
ADDRLP4 16420
INDIRP4
ARGP4
ADDRGP4 trap_Print
CALLV
pop
line 512
;512:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $356
JUMPV
LABELV $360
line 514
;513:	}
;514:	if ( len >= MAX_VOICEFILESIZE ) {
ADDRLP4 20
INDIRI4
CNSTI4 16384
LTI4 $363
line 515
;515:		trap_Print( va( S_COLOR_RED "voice chat file too large: %s is %i, max allowed is %i", filename, len, MAX_VOICEFILESIZE ) );
ADDRGP4 $365
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 20
INDIRI4
ARGI4
CNSTI4 16384
ARGI4
ADDRLP4 16420
ADDRGP4 va
CALLP4
ASGNP4
ADDRLP4 16420
INDIRP4
ARGP4
ADDRGP4 trap_Print
CALLV
pop
line 516
;516:		trap_FS_FCloseFile( f );
ADDRLP4 24
INDIRI4
ARGI4
ADDRGP4 trap_FS_FCloseFile
CALLV
pop
line 517
;517:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $356
JUMPV
LABELV $363
line 520
;518:	}
;519:
;520:	trap_FS_Read( buf, len, f );
ADDRLP4 28
ARGP4
ADDRLP4 20
INDIRI4
ARGI4
ADDRLP4 24
INDIRI4
ARGI4
ADDRGP4 trap_FS_Read
CALLV
pop
line 521
;521:	buf[len] = 0;
ADDRLP4 20
INDIRI4
ADDRLP4 28
ADDP4
CNSTI1 0
ASGNI1
line 522
;522:	trap_FS_FCloseFile( f );
ADDRLP4 24
INDIRI4
ARGI4
ADDRGP4 trap_FS_FCloseFile
CALLV
pop
line 524
;523:
;524:	ptr = buf;
ADDRLP4 16412
ADDRLP4 28
ASGNP4
line 525
;525:	p = &ptr;
ADDRLP4 8
ADDRLP4 16412
ASGNP4
line 527
;526:
;527:	Com_sprintf(voiceChatList->name, sizeof(voiceChatList->name), "%s", filename);
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 528
;528:	voiceChats = voiceChatList->voiceChats;
ADDRLP4 4
ADDRFP4 4
INDIRP4
CNSTI4 72
ADDP4
ASGNP4
line 529
;529:	for ( i = 0; i < maxVoiceChats; i++ ) {
ADDRLP4 16
CNSTI4 0
ASGNI4
ADDRGP4 $370
JUMPV
LABELV $367
line 530
;530:		voiceChats[i].id[0] = 0;
CNSTI4 4420
ADDRLP4 16
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
CNSTI1 0
ASGNI1
line 531
;531:	}
LABELV $368
line 529
ADDRLP4 16
ADDRLP4 16
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $370
ADDRLP4 16
INDIRI4
ADDRFP4 8
INDIRI4
LTI4 $367
line 532
;532:	token = COM_ParseExt(p, qtrue);
ADDRLP4 8
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16420
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 16420
INDIRP4
ASGNP4
line 533
;533:	if (!token || token[0] == 0) {
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $373
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $371
LABELV $373
line 534
;534:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $356
JUMPV
LABELV $371
line 536
;535:	}
;536:	if (!Q_stricmp(token, "female")) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $376
ARGP4
ADDRLP4 16428
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16428
INDIRI4
CNSTI4 0
NEI4 $374
line 537
;537:		voiceChatList->gender = GENDER_FEMALE;
ADDRFP4 4
INDIRP4
CNSTI4 64
ADDP4
CNSTI4 1
ASGNI4
line 538
;538:	}
ADDRGP4 $375
JUMPV
LABELV $374
line 539
;539:	else if (!Q_stricmp(token, "male")) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $379
ARGP4
ADDRLP4 16432
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16432
INDIRI4
CNSTI4 0
NEI4 $377
line 540
;540:		voiceChatList->gender = GENDER_MALE;
ADDRFP4 4
INDIRP4
CNSTI4 64
ADDP4
CNSTI4 0
ASGNI4
line 541
;541:	}
ADDRGP4 $378
JUMPV
LABELV $377
line 542
;542:	else if (!Q_stricmp(token, "neuter")) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $382
ARGP4
ADDRLP4 16436
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16436
INDIRI4
CNSTI4 0
NEI4 $380
line 543
;543:		voiceChatList->gender = GENDER_NEUTER;
ADDRFP4 4
INDIRP4
CNSTI4 64
ADDP4
CNSTI4 2
ASGNI4
line 544
;544:	}
ADDRGP4 $381
JUMPV
LABELV $380
line 545
;545:	else {
line 546
;546:		trap_Print( va( S_COLOR_RED "expected gender not found in voice chat file: %s\n", filename ) );
ADDRGP4 $383
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 16440
ADDRGP4 va
CALLP4
ASGNP4
ADDRLP4 16440
INDIRP4
ARGP4
ADDRGP4 trap_Print
CALLV
pop
line 547
;547:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $356
JUMPV
LABELV $381
LABELV $378
LABELV $375
line 550
;548:	}
;549:
;550:	voiceChatList->numVoiceChats = 0;
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
CNSTI4 0
ASGNI4
ADDRGP4 $385
JUMPV
LABELV $384
line 551
;551:	while ( 1 ) {
line 552
;552:		token = COM_ParseExt(p, qtrue);
ADDRLP4 8
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16440
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 16440
INDIRP4
ASGNP4
line 553
;553:		if (!token || token[0] == 0) {
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $389
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $387
LABELV $389
line 554
;554:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $356
JUMPV
LABELV $387
line 556
;555:		}
;556:		Com_sprintf(voiceChats[voiceChatList->numVoiceChats].id, sizeof( voiceChats[voiceChatList->numVoiceChats].id ), "%s", token);
CNSTI4 4420
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 557
;557:		token = COM_ParseExt(p, qtrue);
ADDRLP4 8
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16448
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 16448
INDIRP4
ASGNP4
line 558
;558:		if (Q_stricmp(token, "{")) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $392
ARGP4
ADDRLP4 16452
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16452
INDIRI4
CNSTI4 0
EQI4 $390
line 559
;559:			trap_Print( va( S_COLOR_RED "expected { found %s in voice chat file: %s\n", token, filename ) );
ADDRGP4 $393
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 16456
ADDRGP4 va
CALLP4
ASGNP4
ADDRLP4 16456
INDIRP4
ARGP4
ADDRGP4 trap_Print
CALLV
pop
line 560
;560:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $356
JUMPV
LABELV $390
line 562
;561:		}
;562:		voiceChats[voiceChatList->numVoiceChats].numSounds = 0;
CNSTI4 4420
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
CNSTI4 64
ADDP4
CNSTI4 0
ASGNI4
ADDRGP4 $395
JUMPV
LABELV $394
line 563
;563:		while(1) {
line 564
;564:			token = COM_ParseExt(p, qtrue);
ADDRLP4 8
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16456
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 16456
INDIRP4
ASGNP4
line 565
;565:			if (!token || token[0] == 0) {
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $399
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $397
LABELV $399
line 566
;566:				return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $356
JUMPV
LABELV $397
line 568
;567:			}
;568:			if (!Q_stricmp(token, "}"))
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $402
ARGP4
ADDRLP4 16464
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16464
INDIRI4
CNSTI4 0
NEI4 $400
line 569
;569:				break;
ADDRGP4 $396
JUMPV
LABELV $400
line 570
;570:			voiceChats[voiceChatList->numVoiceChats].sounds[voiceChats[voiceChatList->numVoiceChats].numSounds] = 
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 12
INDIRI4
ARGI4
ADDRLP4 16468
ADDRGP4 trap_S_RegisterSound
CALLI4
ASGNI4
ADDRLP4 16472
CNSTI4 68
ASGNI4
ADDRLP4 16476
CNSTI4 4420
ADDRFP4 4
INDIRP4
ADDRLP4 16472
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
ASGNP4
ADDRLP4 16476
INDIRP4
CNSTI4 64
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 16476
INDIRP4
ADDRLP4 16472
INDIRI4
ADDP4
ADDP4
ADDRLP4 16468
INDIRI4
ASGNI4
line 572
;571:          trap_S_RegisterSound( token , compress );
;572:			token = COM_ParseExt(p, qtrue);
ADDRLP4 8
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16480
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 16480
INDIRP4
ASGNP4
line 573
;573:			if (!token || token[0] == 0) {
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $405
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $403
LABELV $405
line 574
;574:				return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $356
JUMPV
LABELV $403
line 576
;575:			}
;576:			Com_sprintf(voiceChats[voiceChatList->numVoiceChats].chats[
ADDRLP4 16488
CNSTI4 4420
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
ASGNP4
ADDRLP4 16492
CNSTI4 64
ASGNI4
ADDRLP4 16488
INDIRP4
ADDRLP4 16492
INDIRI4
ADDP4
INDIRI4
CNSTI4 6
LSHI4
ADDRLP4 16488
INDIRP4
CNSTI4 324
ADDP4
ADDP4
ARGP4
ADDRLP4 16492
INDIRI4
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 578
;577:							voiceChats[voiceChatList->numVoiceChats].numSounds], MAX_CHATSIZE, "%s", token);
;578:			voiceChats[voiceChatList->numVoiceChats].numSounds++;
ADDRLP4 16496
CNSTI4 4420
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
CNSTI4 64
ADDP4
ASGNP4
ADDRLP4 16496
INDIRP4
ADDRLP4 16496
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 579
;579:			if (voiceChats[voiceChatList->numVoiceChats].numSounds >= MAX_VOICESOUNDS)
ADDRLP4 16500
CNSTI4 64
ASGNI4
CNSTI4 4420
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
MULI4
ADDRLP4 4
INDIRP4
ADDP4
ADDRLP4 16500
INDIRI4
ADDP4
INDIRI4
ADDRLP4 16500
INDIRI4
LTI4 $406
line 580
;580:				break;
ADDRGP4 $396
JUMPV
LABELV $406
line 581
;581:		}
LABELV $395
line 563
ADDRGP4 $394
JUMPV
LABELV $396
line 582
;582:		voiceChatList->numVoiceChats++;
ADDRLP4 16456
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
ASGNP4
ADDRLP4 16456
INDIRP4
ADDRLP4 16456
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 583
;583:		if (voiceChatList->numVoiceChats >= maxVoiceChats)
ADDRFP4 4
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
ADDRFP4 8
INDIRI4
LTI4 $408
line 584
;584:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $356
JUMPV
LABELV $408
line 585
;585:	}
LABELV $385
line 551
ADDRGP4 $384
JUMPV
line 586
;586:	return qtrue;
CNSTI4 1
RETI4
LABELV $356
endproc CG_ParseVoiceChats 16504 16
export CG_LoadVoiceChats
proc CG_LoadVoiceChats 12 12
line 594
;587:}
;588:
;589:/*
;590:=================
;591:CG_LoadVoiceChats
;592:=================
;593:*/
;594:void CG_LoadVoiceChats( void ) {
line 597
;595:	int size;
;596:
;597:	size = trap_MemoryRemaining();
ADDRLP4 4
ADDRGP4 trap_MemoryRemaining
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 4
INDIRI4
ASGNI4
line 598
;598:	CG_ParseVoiceChats( "scripts/female1.voice", &voiceChatLists[0], MAX_VOICECHATS );
ADDRGP4 $411
ARGP4
ADDRGP4 voiceChatLists
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 599
;599:	CG_ParseVoiceChats( "scripts/female2.voice", &voiceChatLists[1], MAX_VOICECHATS );
ADDRGP4 $412
ARGP4
ADDRGP4 voiceChatLists+282952
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 600
;600:	CG_ParseVoiceChats( "scripts/female3.voice", &voiceChatLists[2], MAX_VOICECHATS );
ADDRGP4 $414
ARGP4
ADDRGP4 voiceChatLists+565904
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 601
;601:	CG_ParseVoiceChats( "scripts/male1.voice", &voiceChatLists[3], MAX_VOICECHATS );
ADDRGP4 $416
ARGP4
ADDRGP4 voiceChatLists+848856
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 602
;602:	CG_ParseVoiceChats( "scripts/male2.voice", &voiceChatLists[4], MAX_VOICECHATS );
ADDRGP4 $418
ARGP4
ADDRGP4 voiceChatLists+1131808
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 603
;603:	CG_ParseVoiceChats( "scripts/male3.voice", &voiceChatLists[5], MAX_VOICECHATS );
ADDRGP4 $420
ARGP4
ADDRGP4 voiceChatLists+1414760
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 604
;604:	CG_ParseVoiceChats( "scripts/male4.voice", &voiceChatLists[6], MAX_VOICECHATS );
ADDRGP4 $422
ARGP4
ADDRGP4 voiceChatLists+1697712
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 605
;605:	CG_ParseVoiceChats( "scripts/male5.voice", &voiceChatLists[7], MAX_VOICECHATS );
ADDRGP4 $424
ARGP4
ADDRGP4 voiceChatLists+1980664
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 CG_ParseVoiceChats
CALLI4
pop
line 606
;606:	CG_Printf("voice chat memory size = %d\n", size - trap_MemoryRemaining());
ADDRLP4 8
ADDRGP4 trap_MemoryRemaining
CALLI4
ASGNI4
ADDRGP4 $426
ARGP4
ADDRLP4 0
INDIRI4
ADDRLP4 8
INDIRI4
SUBI4
ARGI4
ADDRGP4 CG_Printf
CALLV
pop
line 607
;607:}
LABELV $410
endproc CG_LoadVoiceChats 12 12
export CG_HeadModelVoiceChats
proc CG_HeadModelVoiceChats 16424 16
line 614
;608:
;609:/*
;610:=================
;611:CG_HeadModelVoiceChats
;612:=================
;613:*/
;614:int CG_HeadModelVoiceChats( char *filename ) {
line 621
;615:	int	len, i;
;616:	fileHandle_t f;
;617:	char buf[MAX_VOICEFILESIZE];
;618:	char **p, *ptr;
;619:	char *token;
;620:
;621:	len = trap_FS_FOpenFile( filename, &f, FS_READ );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 12
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 16408
ADDRGP4 trap_FS_FOpenFile
CALLI4
ASGNI4
ADDRLP4 8
ADDRLP4 16408
INDIRI4
ASGNI4
line 622
;622:	if ( !f ) {
ADDRLP4 12
INDIRI4
CNSTI4 0
NEI4 $428
line 624
;623:		//trap_Print( va( "voice chat file not found: %s\n", filename ) );
;624:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $427
JUMPV
LABELV $428
line 626
;625:	}
;626:	if ( len >= MAX_VOICEFILESIZE ) {
ADDRLP4 8
INDIRI4
CNSTI4 16384
LTI4 $430
line 627
;627:		trap_Print( va( S_COLOR_RED "voice chat file too large: %s is %i, max allowed is %i", filename, len, MAX_VOICEFILESIZE ) );
ADDRGP4 $365
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 16384
ARGI4
ADDRLP4 16412
ADDRGP4 va
CALLP4
ASGNP4
ADDRLP4 16412
INDIRP4
ARGP4
ADDRGP4 trap_Print
CALLV
pop
line 628
;628:		trap_FS_FCloseFile( f );
ADDRLP4 12
INDIRI4
ARGI4
ADDRGP4 trap_FS_FCloseFile
CALLV
pop
line 629
;629:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $427
JUMPV
LABELV $430
line 632
;630:	}
;631:
;632:	trap_FS_Read( buf, len, f );
ADDRLP4 16
ARGP4
ADDRLP4 8
INDIRI4
ARGI4
ADDRLP4 12
INDIRI4
ARGI4
ADDRGP4 trap_FS_Read
CALLV
pop
line 633
;633:	buf[len] = 0;
ADDRLP4 8
INDIRI4
ADDRLP4 16
ADDP4
CNSTI1 0
ASGNI1
line 634
;634:	trap_FS_FCloseFile( f );
ADDRLP4 12
INDIRI4
ARGI4
ADDRGP4 trap_FS_FCloseFile
CALLV
pop
line 636
;635:
;636:	ptr = buf;
ADDRLP4 16404
ADDRLP4 16
ASGNP4
line 637
;637:	p = &ptr;
ADDRLP4 16400
ADDRLP4 16404
ASGNP4
line 639
;638:
;639:	token = COM_ParseExt(p, qtrue);
ADDRLP4 16400
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 16412
ADDRGP4 COM_ParseExt
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 16412
INDIRP4
ASGNP4
line 640
;640:	if (!token || token[0] == 0) {
ADDRLP4 4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $434
ADDRLP4 4
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $432
LABELV $434
line 641
;641:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $427
JUMPV
LABELV $432
line 644
;642:	}
;643:
;644:	for ( i = 0; i < MAX_VOICEFILES; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $435
line 645
;645:		if ( !Q_stricmp(token, voiceChatLists[i].name) ) {
ADDRLP4 4
INDIRP4
ARGP4
CNSTI4 282952
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 voiceChatLists
ADDP4
ARGP4
ADDRLP4 16420
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 16420
INDIRI4
CNSTI4 0
NEI4 $439
line 646
;646:			return i;
ADDRLP4 0
INDIRI4
RETI4
ADDRGP4 $427
JUMPV
LABELV $439
line 648
;647:		}
;648:	}
LABELV $436
line 644
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 8
LTI4 $435
line 652
;649:
;650:	//FIXME: maybe try to load the .voice file which name is stored in token?
;651:
;652:	return -1;
CNSTI4 -1
RETI4
LABELV $427
endproc CG_HeadModelVoiceChats 16424 16
export CG_GetVoiceChat
proc CG_GetVoiceChat 16 8
line 661
;653:}
;654:
;655:
;656:/*
;657:=================
;658:CG_GetVoiceChat
;659:=================
;660:*/
;661:int CG_GetVoiceChat( voiceChatList_t *voiceChatList, const char *id, sfxHandle_t *snd, char **chat) {
line 664
;662:	int i, rnd;
;663:
;664:	for ( i = 0; i < voiceChatList->numVoiceChats; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $445
JUMPV
LABELV $442
line 665
;665:		if ( !Q_stricmp( id, voiceChatList->voiceChats[i].id ) ) {
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 4420
ADDRLP4 0
INDIRI4
MULI4
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
ADDP4
ARGP4
ADDRLP4 8
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
NEI4 $446
line 666
;666:			rnd = random() * voiceChatList->voiceChats[i].numSounds;
ADDRLP4 12
ADDRGP4 rand
CALLI4
ASGNI4
ADDRLP4 4
ADDRLP4 12
INDIRI4
CNSTI4 32767
BANDI4
CVIF4 4
CNSTF4 1191181824
DIVF4
CNSTI4 4420
ADDRLP4 0
INDIRI4
MULI4
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
ADDP4
CNSTI4 64
ADDP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 667
;667:			*snd = voiceChatList->voiceChats[i].sounds[rnd];
ADDRFP4 8
INDIRP4
ADDRLP4 4
INDIRI4
CNSTI4 2
LSHI4
CNSTI4 4420
ADDRLP4 0
INDIRI4
MULI4
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
ADDP4
CNSTI4 68
ADDP4
ADDP4
INDIRI4
ASGNI4
line 668
;668:			*chat = voiceChatList->voiceChats[i].chats[rnd];
ADDRFP4 12
INDIRP4
ADDRLP4 4
INDIRI4
CNSTI4 6
LSHI4
CNSTI4 4420
ADDRLP4 0
INDIRI4
MULI4
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
ADDP4
CNSTI4 324
ADDP4
ADDP4
ASGNP4
line 669
;669:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $441
JUMPV
LABELV $446
line 671
;670:		}
;671:	}
LABELV $443
line 664
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $445
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 68
ADDP4
INDIRI4
LTI4 $442
line 672
;672:	return qfalse;
CNSTI4 0
RETI4
LABELV $441
endproc CG_GetVoiceChat 16 8
export CG_VoiceChatListForClient
proc CG_VoiceChatListForClient 164 20
line 680
;673:}
;674:
;675:/*
;676:=================
;677:CG_VoiceChatListForClient
;678:=================
;679:*/
;680:voiceChatList_t *CG_VoiceChatListForClient( int clientNum ) {
line 685
;681:	clientInfo_t *ci;
;682:	int voiceChatNum, i, j, k, gender;
;683:	char filename[MAX_QPATH], headModelName[MAX_QPATH];
;684:
;685:	if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
ADDRLP4 152
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 152
INDIRI4
CNSTI4 0
LTI4 $451
ADDRLP4 152
INDIRI4
CNSTI4 64
LTI4 $449
LABELV $451
line 686
;686:		clientNum = 0;
ADDRFP4 0
CNSTI4 0
ASGNI4
line 687
;687:	}
LABELV $449
line 688
;688:	ci = &cgs.clientinfo[ clientNum ];
ADDRLP4 148
CNSTI4 1708
ADDRFP4 0
INDIRI4
MULI4
ADDRGP4 cgs+40972
ADDP4
ASGNP4
line 690
;689:
;690:	for ( k = 0; k < 2; k++ ) {
ADDRLP4 144
CNSTI4 0
ASGNI4
LABELV $453
line 691
;691:		if ( k == 0 ) {
ADDRLP4 144
INDIRI4
CNSTI4 0
NEI4 $457
line 692
;692:			if (ci->headModelName[0] == '*') {
ADDRLP4 148
INDIRP4
CNSTI4 288
ADDP4
INDIRI1
CVII4 1
CNSTI4 42
NEI4 $459
line 693
;693:				Com_sprintf( headModelName, sizeof(headModelName), "%s/%s", ci->headModelName+1, ci->headSkinName );
ADDRLP4 8
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $461
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 289
ADDP4
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 352
ADDP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 694
;694:			}
ADDRGP4 $458
JUMPV
LABELV $459
line 695
;695:			else {
line 696
;696:				Com_sprintf( headModelName, sizeof(headModelName), "%s/%s", ci->headModelName, ci->headSkinName );
ADDRLP4 8
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $461
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 288
ADDP4
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 352
ADDP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 697
;697:			}
line 698
;698:		}
ADDRGP4 $458
JUMPV
LABELV $457
line 699
;699:		else {
line 700
;700:			if (ci->headModelName[0] == '*') {
ADDRLP4 148
INDIRP4
CNSTI4 288
ADDP4
INDIRI1
CVII4 1
CNSTI4 42
NEI4 $462
line 701
;701:				Com_sprintf( headModelName, sizeof(headModelName), "%s", ci->headModelName+1 );
ADDRLP4 8
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 289
ADDP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 702
;702:			}
ADDRGP4 $463
JUMPV
LABELV $462
line 703
;703:			else {
line 704
;704:				Com_sprintf( headModelName, sizeof(headModelName), "%s", ci->headModelName );
ADDRLP4 8
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 288
ADDP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 705
;705:			}
LABELV $463
line 706
;706:		}
LABELV $458
line 708
;707:		// find the voice file for the head model the client uses
;708:		for ( i = 0; i < MAX_HEADMODELS; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $464
line 709
;709:			if (!Q_stricmp(headModelVoiceChat[i].headmodel, headModelName)) {
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
ADDRLP4 8
ARGP4
ADDRLP4 156
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 156
INDIRI4
CNSTI4 0
NEI4 $468
line 710
;710:				break;
ADDRGP4 $466
JUMPV
LABELV $468
line 712
;711:			}
;712:		}
LABELV $465
line 708
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 64
LTI4 $464
LABELV $466
line 713
;713:		if (i < MAX_HEADMODELS) {
ADDRLP4 0
INDIRI4
CNSTI4 64
GEI4 $470
line 714
;714:			return &voiceChatLists[headModelVoiceChat[i].voiceChatNum];
CNSTI4 282952
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat+64
ADDP4
INDIRI4
MULI4
ADDRGP4 voiceChatLists
ADDP4
RETP4
ADDRGP4 $448
JUMPV
LABELV $470
line 717
;715:		}
;716:		// find a <headmodelname>.vc file
;717:		for ( i = 0; i < MAX_HEADMODELS; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $473
line 718
;718:			if (!strlen(headModelVoiceChat[i].headmodel)) {
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
ADDRLP4 156
ADDRGP4 strlen
CALLI4
ASGNI4
ADDRLP4 156
INDIRI4
CNSTI4 0
NEI4 $477
line 719
;719:				Com_sprintf(filename, sizeof(filename), "scripts/%s.vc", headModelName);
ADDRLP4 76
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $479
ARGP4
ADDRLP4 8
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 720
;720:				voiceChatNum = CG_HeadModelVoiceChats(filename);
ADDRLP4 76
ARGP4
ADDRLP4 160
ADDRGP4 CG_HeadModelVoiceChats
CALLI4
ASGNI4
ADDRLP4 72
ADDRLP4 160
INDIRI4
ASGNI4
line 721
;721:				if (voiceChatNum == -1)
ADDRLP4 72
INDIRI4
CNSTI4 -1
NEI4 $480
line 722
;722:					break;
ADDRGP4 $475
JUMPV
LABELV $480
line 723
;723:				Com_sprintf(headModelVoiceChat[i].headmodel, sizeof ( headModelVoiceChat[i].headmodel ),
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 8
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 725
;724:							"%s", headModelName);
;725:				headModelVoiceChat[i].voiceChatNum = voiceChatNum;
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat+64
ADDP4
ADDRLP4 72
INDIRI4
ASGNI4
line 726
;726:				return &voiceChatLists[headModelVoiceChat[i].voiceChatNum];
CNSTI4 282952
CNSTI4 68
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat+64
ADDP4
INDIRI4
MULI4
ADDRGP4 voiceChatLists
ADDP4
RETP4
ADDRGP4 $448
JUMPV
LABELV $477
line 728
;727:			}
;728:		}
LABELV $474
line 717
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 64
LTI4 $473
LABELV $475
line 729
;729:	}
LABELV $454
line 690
ADDRLP4 144
ADDRLP4 144
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 144
INDIRI4
CNSTI4 2
LTI4 $453
line 730
;730:	gender = ci->gender;
ADDRLP4 140
ADDRLP4 148
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
line 731
;731:	for (k = 0; k < 2; k++) {
ADDRLP4 144
CNSTI4 0
ASGNI4
LABELV $484
line 733
;732:		// just pick the first with the right gender
;733:		for ( i = 0; i < MAX_VOICEFILES; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $488
line 734
;734:			if (strlen(voiceChatLists[i].name)) {
CNSTI4 282952
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 voiceChatLists
ADDP4
ARGP4
ADDRLP4 156
ADDRGP4 strlen
CALLI4
ASGNI4
ADDRLP4 156
INDIRI4
CNSTI4 0
EQI4 $492
line 735
;735:				if (voiceChatLists[i].gender == gender) {
CNSTI4 282952
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 voiceChatLists+64
ADDP4
INDIRI4
ADDRLP4 140
INDIRI4
NEI4 $494
line 737
;736:					// store this head model with voice chat for future reference
;737:					for ( j = 0; j < MAX_HEADMODELS; j++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
LABELV $497
line 738
;738:						if (!strlen(headModelVoiceChat[j].headmodel)) {
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
ADDRLP4 160
ADDRGP4 strlen
CALLI4
ASGNI4
ADDRLP4 160
INDIRI4
CNSTI4 0
NEI4 $501
line 739
;739:							Com_sprintf(headModelVoiceChat[j].headmodel, sizeof ( headModelVoiceChat[j].headmodel ),
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 8
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 741
;740:									"%s", headModelName);
;741:							headModelVoiceChat[j].voiceChatNum = i;
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat+64
ADDP4
ADDRLP4 0
INDIRI4
ASGNI4
line 742
;742:							break;
ADDRGP4 $499
JUMPV
LABELV $501
line 744
;743:						}
;744:					}
LABELV $498
line 737
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 64
LTI4 $497
LABELV $499
line 745
;745:					return &voiceChatLists[i];
CNSTI4 282952
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 voiceChatLists
ADDP4
RETP4
ADDRGP4 $448
JUMPV
LABELV $494
line 747
;746:				}
;747:			}
LABELV $492
line 748
;748:		}
LABELV $489
line 733
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 8
LTI4 $488
line 750
;749:		// fall back to male gender because we don't have neuter in the mission pack
;750:		if (gender == GENDER_MALE)
ADDRLP4 140
INDIRI4
CNSTI4 0
NEI4 $504
line 751
;751:			break;
ADDRGP4 $486
JUMPV
LABELV $504
line 752
;752:		gender = GENDER_MALE;
ADDRLP4 140
CNSTI4 0
ASGNI4
line 753
;753:	}
LABELV $485
line 731
ADDRLP4 144
ADDRLP4 144
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 144
INDIRI4
CNSTI4 2
LTI4 $484
LABELV $486
line 755
;754:	// store this head model with voice chat for future reference
;755:	for ( j = 0; j < MAX_HEADMODELS; j++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
LABELV $506
line 756
;756:		if (!strlen(headModelVoiceChat[j].headmodel)) {
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
ADDRLP4 156
ADDRGP4 strlen
CALLI4
ASGNI4
ADDRLP4 156
INDIRI4
CNSTI4 0
NEI4 $510
line 757
;757:			Com_sprintf(headModelVoiceChat[j].headmodel, sizeof ( headModelVoiceChat[j].headmodel ),
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat
ADDP4
ARGP4
CNSTI4 64
ARGI4
ADDRGP4 $366
ARGP4
ADDRLP4 8
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 759
;758:					"%s", headModelName);
;759:			headModelVoiceChat[j].voiceChatNum = 0;
CNSTI4 68
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 headModelVoiceChat+64
ADDP4
CNSTI4 0
ASGNI4
line 760
;760:			break;
ADDRGP4 $508
JUMPV
LABELV $510
line 762
;761:		}
;762:	}
LABELV $507
line 755
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 64
LTI4 $506
LABELV $508
line 764
;763:	// just return the first voice chat list
;764:	return &voiceChatLists[0];
ADDRGP4 voiceChatLists
RETP4
LABELV $448
endproc CG_VoiceChatListForClient 164 20
export CG_PlayVoiceChat
proc CG_PlayVoiceChat 0 0
line 785
;765:}
;766:
;767:#define MAX_VOICECHATBUFFER		32
;768:
;769:typedef struct bufferedVoiceChat_s
;770:{
;771:	int clientNum;
;772:	sfxHandle_t snd;
;773:	int voiceOnly;
;774:	char cmd[MAX_SAY_TEXT];
;775:	char message[MAX_SAY_TEXT];
;776:} bufferedVoiceChat_t;
;777:
;778:bufferedVoiceChat_t voiceChatBuffer[MAX_VOICECHATBUFFER];
;779:
;780:/*
;781:=================
;782:CG_PlayVoiceChat
;783:=================
;784:*/
;785:void CG_PlayVoiceChat( bufferedVoiceChat_t *vchat ) {
line 812
;786:#ifdef MISSIONPACK
;787:	// if we are going into the intermission, don't start any voices
;788:	if ( cg.intermissionStarted ) {
;789:		return;
;790:	}
;791:
;792:	if ( !cg_noVoiceChats.integer ) {
;793:		trap_S_StartLocalSound( vchat->snd, CHAN_VOICE);
;794:		if (vchat->clientNum != cg.snap->ps.clientNum) {
;795:			int orderTask = CG_ValidOrder(vchat->cmd);
;796:			if (orderTask > 0) {
;797:				cgs.acceptOrderTime = cg.time + 5000;
;798:				Q_strncpyz(cgs.acceptVoice, vchat->cmd, sizeof(cgs.acceptVoice));
;799:				cgs.acceptTask = orderTask;
;800:				cgs.acceptLeader = vchat->clientNum;
;801:			}
;802:			// see if this was an order
;803:			CG_ShowResponseHead();
;804:		}
;805:	}
;806:	if (!vchat->voiceOnly && !cg_noVoiceText.integer) {
;807:		CG_AddToTeamChat( vchat->message );
;808:		CG_Printf( "%s\n", vchat->message );
;809:	}
;810:	voiceChatBuffer[cg.voiceChatBufferOut].snd = 0;
;811:#endif
;812:}
LABELV $513
endproc CG_PlayVoiceChat 0 0
export CG_PlayBufferedVoiceChats
proc CG_PlayBufferedVoiceChats 0 0
line 819
;813:
;814:/*
;815:=====================
;816:CG_PlayBufferedVoieChats
;817:=====================
;818:*/
;819:void CG_PlayBufferedVoiceChats( void ) {
line 831
;820:#ifdef MISSIONPACK
;821:	if ( cg.voiceChatTime < cg.time ) {
;822:		if (cg.voiceChatBufferOut != cg.voiceChatBufferIn && voiceChatBuffer[cg.voiceChatBufferOut].snd) {
;823:			//
;824:			CG_PlayVoiceChat(&voiceChatBuffer[cg.voiceChatBufferOut]);
;825:			//
;826:			cg.voiceChatBufferOut = (cg.voiceChatBufferOut + 1) % MAX_VOICECHATBUFFER;
;827:			cg.voiceChatTime = cg.time + 1000;
;828:		}
;829:	}
;830:#endif
;831:}
LABELV $514
endproc CG_PlayBufferedVoiceChats 0 0
export CG_AddBufferedVoiceChat
proc CG_AddBufferedVoiceChat 0 0
line 838
;832:
;833:/*
;834:=====================
;835:CG_AddBufferedVoiceChat
;836:=====================
;837:*/
;838:void CG_AddBufferedVoiceChat( bufferedVoiceChat_t *vchat ) {
line 852
;839:#ifdef MISSIONPACK
;840:	// if we are going into the intermission, don't start any voices
;841:	if ( cg.intermissionStarted ) {
;842:		return;
;843:	}
;844:
;845:	memcpy(&voiceChatBuffer[cg.voiceChatBufferIn], vchat, sizeof(bufferedVoiceChat_t));
;846:	cg.voiceChatBufferIn = (cg.voiceChatBufferIn + 1) % MAX_VOICECHATBUFFER;
;847:	if (cg.voiceChatBufferIn == cg.voiceChatBufferOut) {
;848:		CG_PlayVoiceChat( &voiceChatBuffer[cg.voiceChatBufferOut] );
;849:		cg.voiceChatBufferOut++;
;850:	}
;851:#endif
;852:}
LABELV $515
endproc CG_AddBufferedVoiceChat 0 0
export CG_VoiceChatLocal
proc CG_VoiceChatLocal 0 0
line 859
;853:
;854:/*
;855:=================
;856:CG_VoiceChatLocal
;857:=================
;858:*/
;859:void CG_VoiceChatLocal( int mode, qboolean voiceOnly, int clientNum, int color, const char *cmd ) {
line 901
;860:#ifdef MISSIONPACK
;861:	char *chat;
;862:	voiceChatList_t *voiceChatList;
;863:	clientInfo_t *ci;
;864:	sfxHandle_t snd;
;865:	bufferedVoiceChat_t vchat;
;866:
;867:	// if we are going into the intermission, don't start any voices
;868:	if ( cg.intermissionStarted ) {
;869:		return;
;870:	}
;871:
;872:	if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
;873:		clientNum = 0;
;874:	}
;875:	ci = &cgs.clientinfo[ clientNum ];
;876:
;877:	cgs.currentVoiceClient = clientNum;
;878:
;879:	voiceChatList = CG_VoiceChatListForClient( clientNum );
;880:
;881:	if ( CG_GetVoiceChat( voiceChatList, cmd, &snd, &chat ) ) {
;882:		//
;883:		if ( mode == SAY_TEAM || !cg_teamChatsOnly.integer ) {
;884:			vchat.clientNum = clientNum;
;885:			vchat.snd = snd;
;886:			vchat.voiceOnly = voiceOnly;
;887:			Q_strncpyz(vchat.cmd, cmd, sizeof(vchat.cmd));
;888:			if ( mode == SAY_TELL ) {
;889:				Com_sprintf(vchat.message, sizeof(vchat.message), "[%s]: %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
;890:			}
;891:			else if ( mode == SAY_TEAM ) {
;892:				Com_sprintf(vchat.message, sizeof(vchat.message), "(%s): %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
;893:			}
;894:			else {
;895:				Com_sprintf(vchat.message, sizeof(vchat.message), "%s: %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
;896:			}
;897:			CG_AddBufferedVoiceChat(&vchat);
;898:		}
;899:	}
;900:#endif
;901:}
LABELV $516
endproc CG_VoiceChatLocal 0 0
export CG_VoiceChat
proc CG_VoiceChat 0 0
line 908
;902:
;903:/*
;904:=================
;905:CG_VoiceChat
;906:=================
;907:*/
;908:void CG_VoiceChat( int mode ) {
line 929
;909:#ifdef MISSIONPACK
;910:	const char *cmd;
;911:	int clientNum, color;
;912:	qboolean voiceOnly;
;913:
;914:	voiceOnly = atoi(CG_Argv(1));
;915:	clientNum = atoi(CG_Argv(2));
;916:	color = atoi(CG_Argv(3));
;917:	cmd = CG_Argv(4);
;918:
;919:	if (cg_noTaunt.integer != 0) {
;920:		if (!strcmp(cmd, VOICECHAT_KILLINSULT)  || !strcmp(cmd, VOICECHAT_TAUNT) || \
;921:			!strcmp(cmd, VOICECHAT_DEATHINSULT) || !strcmp(cmd, VOICECHAT_KILLGAUNTLET) || \
;922:			!strcmp(cmd, VOICECHAT_PRAISE)) {
;923:			return;
;924:		}
;925:	}
;926:
;927:	CG_VoiceChatLocal( mode, voiceOnly, clientNum, color, cmd );
;928:#endif
;929:}
LABELV $517
endproc CG_VoiceChat 0 0
proc CG_RemoveChatEscapeChar 16 0
line 936
;930:
;931:/*
;932:=================
;933:CG_RemoveChatEscapeChar
;934:=================
;935:*/
;936:static void CG_RemoveChatEscapeChar( char *text ) {
line 939
;937:	int i, l;
;938:
;939:	l = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 940
;940:	for ( i = 0; text[i]; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $522
JUMPV
LABELV $519
line 941
;941:		if (text[i] == '\x19')
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
ADDP4
INDIRI1
CVII4 1
CNSTI4 25
NEI4 $523
line 942
;942:			continue;
ADDRGP4 $520
JUMPV
LABELV $523
line 943
;943:		text[l++] = text[i];
ADDRLP4 8
ADDRLP4 4
INDIRI4
ASGNI4
ADDRLP4 4
ADDRLP4 8
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 12
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 8
INDIRI4
ADDRLP4 12
INDIRP4
ADDP4
ADDRLP4 0
INDIRI4
ADDRLP4 12
INDIRP4
ADDP4
INDIRI1
ASGNI1
line 944
;944:	}
LABELV $520
line 940
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $522
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $519
line 945
;945:	text[l] = '\0';
ADDRLP4 4
INDIRI4
ADDRFP4 0
INDIRP4
ADDP4
CNSTI1 0
ASGNI1
line 946
;946:}
LABELV $518
endproc CG_RemoveChatEscapeChar 16 0
proc CG_ServerCommand 224 12
line 956
;947:
;948:/*
;949:=================
;950:CG_ServerCommand
;951:
;952:The string has been tokenized and can be retrieved with
;953:Cmd_Argc() / Cmd_Argv()
;954:=================
;955:*/
;956:static void CG_ServerCommand( void ) {
line 960
;957:	const char	*cmd;
;958:	char		text[MAX_SAY_TEXT];
;959:
;960:	cmd = CG_Argv(0);
CNSTI4 0
ARGI4
ADDRLP4 156
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 156
INDIRP4
ASGNP4
line 962
;961:
;962:	if ( !cmd[0] ) {
ADDRLP4 0
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $526
line 964
;963:		// server claimed the command
;964:		return;
ADDRGP4 $525
JUMPV
LABELV $526
line 967
;965:	}
;966:
;967:	if ( !strcmp( cmd, "cp" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $530
ARGP4
ADDRLP4 160
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 160
INDIRI4
CNSTI4 0
NEI4 $528
line 968
;968:		CG_CenterPrint( CG_Argv(1), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
CNSTI4 1
ARGI4
ADDRLP4 164
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 164
INDIRP4
ARGP4
CNSTI4 144
ARGI4
CNSTI4 16
ARGI4
ADDRGP4 CG_CenterPrint
CALLV
pop
line 969
;969:		return;
ADDRGP4 $525
JUMPV
LABELV $528
line 972
;970:	}
;971:
;972:	if ( !strcmp( cmd, "cs" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $533
ARGP4
ADDRLP4 164
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 164
INDIRI4
CNSTI4 0
NEI4 $531
line 973
;973:		CG_ConfigStringModified();
ADDRGP4 CG_ConfigStringModified
CALLV
pop
line 974
;974:		return;
ADDRGP4 $525
JUMPV
LABELV $531
line 977
;975:	}
;976:
;977:	if ( !strcmp( cmd, "print" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $536
ARGP4
ADDRLP4 168
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 168
INDIRI4
CNSTI4 0
NEI4 $534
line 978
;978:		CG_Printf( "%s", CG_Argv(1) );
CNSTI4 1
ARGI4
ADDRLP4 172
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRGP4 $366
ARGP4
ADDRLP4 172
INDIRP4
ARGP4
ADDRGP4 CG_Printf
CALLV
pop
line 988
;979:#ifdef MISSIONPACK
;980:		cmd = CG_Argv(1);			// yes, this is obviously a hack, but so is the way we hear about
;981:									// votes passing or failing
;982:		if ( !Q_stricmpn( cmd, "vote failed", 11 ) || !Q_stricmpn( cmd, "team vote failed", 16 )) {
;983:			trap_S_StartLocalSound( cgs.media.voteFailed, CHAN_ANNOUNCER );
;984:		} else if ( !Q_stricmpn( cmd, "vote passed", 11 ) || !Q_stricmpn( cmd, "team vote passed", 16 ) ) {
;985:			trap_S_StartLocalSound( cgs.media.votePassed, CHAN_ANNOUNCER );
;986:		}
;987:#endif
;988:		return;
ADDRGP4 $525
JUMPV
LABELV $534
line 991
;989:	}
;990:
;991:	if ( !strcmp( cmd, "chat" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $539
ARGP4
ADDRLP4 172
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 172
INDIRI4
CNSTI4 0
NEI4 $537
line 992
;992:		if ( !cg_teamChatsOnly.integer ) {
ADDRGP4 cg_teamChatsOnly+12
INDIRI4
CNSTI4 0
NEI4 $525
line 993
;993:			trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
ADDRGP4 cgs+152340+728
INDIRI4
ARGI4
CNSTI4 6
ARGI4
ADDRGP4 trap_S_StartLocalSound
CALLV
pop
line 994
;994:			Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT );
CNSTI4 1
ARGI4
ADDRLP4 176
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 4
ARGP4
ADDRLP4 176
INDIRP4
ARGP4
CNSTI4 150
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 995
;995:			CG_RemoveChatEscapeChar( text );
ADDRLP4 4
ARGP4
ADDRGP4 CG_RemoveChatEscapeChar
CALLV
pop
line 996
;996:			CG_Printf( "%s\n", text );
ADDRGP4 $545
ARGP4
ADDRLP4 4
ARGP4
ADDRGP4 CG_Printf
CALLV
pop
line 997
;997:		}
line 998
;998:		return;
ADDRGP4 $525
JUMPV
LABELV $537
line 1001
;999:	}
;1000:
;1001:	if ( !strcmp( cmd, "tchat" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $548
ARGP4
ADDRLP4 176
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 176
INDIRI4
CNSTI4 0
NEI4 $546
line 1002
;1002:		trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
ADDRGP4 cgs+152340+728
INDIRI4
ARGI4
CNSTI4 6
ARGI4
ADDRGP4 trap_S_StartLocalSound
CALLV
pop
line 1003
;1003:		Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT );
CNSTI4 1
ARGI4
ADDRLP4 180
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 4
ARGP4
ADDRLP4 180
INDIRP4
ARGP4
CNSTI4 150
ARGI4
ADDRGP4 Q_strncpyz
CALLV
pop
line 1004
;1004:		CG_RemoveChatEscapeChar( text );
ADDRLP4 4
ARGP4
ADDRGP4 CG_RemoveChatEscapeChar
CALLV
pop
line 1005
;1005:		CG_AddToTeamChat( text );
ADDRLP4 4
ARGP4
ADDRGP4 CG_AddToTeamChat
CALLV
pop
line 1006
;1006:		CG_Printf( "%s\n", text );
ADDRGP4 $545
ARGP4
ADDRLP4 4
ARGP4
ADDRGP4 CG_Printf
CALLV
pop
line 1007
;1007:		return;
ADDRGP4 $525
JUMPV
LABELV $546
line 1009
;1008:	}
;1009:	if ( !strcmp( cmd, "vchat" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $553
ARGP4
ADDRLP4 180
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 180
INDIRI4
CNSTI4 0
NEI4 $551
line 1010
;1010:		CG_VoiceChat( SAY_ALL );
CNSTI4 0
ARGI4
ADDRGP4 CG_VoiceChat
CALLV
pop
line 1011
;1011:		return;
ADDRGP4 $525
JUMPV
LABELV $551
line 1014
;1012:	}
;1013:
;1014:	if ( !strcmp( cmd, "vtchat" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $556
ARGP4
ADDRLP4 184
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 184
INDIRI4
CNSTI4 0
NEI4 $554
line 1015
;1015:		CG_VoiceChat( SAY_TEAM );
CNSTI4 1
ARGI4
ADDRGP4 CG_VoiceChat
CALLV
pop
line 1016
;1016:		return;
ADDRGP4 $525
JUMPV
LABELV $554
line 1019
;1017:	}
;1018:
;1019:	if ( !strcmp( cmd, "vtell" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $559
ARGP4
ADDRLP4 188
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 188
INDIRI4
CNSTI4 0
NEI4 $557
line 1020
;1020:		CG_VoiceChat( SAY_TELL );
CNSTI4 2
ARGI4
ADDRGP4 CG_VoiceChat
CALLV
pop
line 1021
;1021:		return;
ADDRGP4 $525
JUMPV
LABELV $557
line 1024
;1022:	}
;1023:
;1024:	if ( !strcmp( cmd, "scores" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $562
ARGP4
ADDRLP4 192
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 192
INDIRI4
CNSTI4 0
NEI4 $560
line 1025
;1025:		CG_ParseScores();
ADDRGP4 CG_ParseScores
CALLV
pop
line 1026
;1026:		return;
ADDRGP4 $525
JUMPV
LABELV $560
line 1029
;1027:	}
;1028:
;1029:	if ( !strcmp( cmd, "tinfo" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $565
ARGP4
ADDRLP4 196
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 196
INDIRI4
CNSTI4 0
NEI4 $563
line 1030
;1030:		CG_ParseTeamInfo();
ADDRGP4 CG_ParseTeamInfo
CALLV
pop
line 1031
;1031:		return;
ADDRGP4 $525
JUMPV
LABELV $563
line 1034
;1032:	}
;1033:
;1034:	if ( !strcmp( cmd, "map_restart" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $568
ARGP4
ADDRLP4 200
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 200
INDIRI4
CNSTI4 0
NEI4 $566
line 1035
;1035:		CG_MapRestart();
ADDRGP4 CG_MapRestart
CALLV
pop
line 1036
;1036:		return;
ADDRGP4 $525
JUMPV
LABELV $566
line 1039
;1037:	}
;1038:
;1039:  if ( Q_stricmp (cmd, "remapShader") == 0 ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $571
ARGP4
ADDRLP4 204
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 204
INDIRI4
CNSTI4 0
NEI4 $569
line 1040
;1040:		if (trap_Argc() == 4) {
ADDRLP4 208
ADDRGP4 trap_Argc
CALLI4
ASGNI4
ADDRLP4 208
INDIRI4
CNSTI4 4
NEI4 $572
line 1041
;1041:			trap_R_RemapShader(CG_Argv(1), CG_Argv(2), CG_Argv(3));
CNSTI4 1
ARGI4
ADDRLP4 212
ADDRGP4 CG_Argv
CALLP4
ASGNP4
CNSTI4 2
ARGI4
ADDRLP4 216
ADDRGP4 CG_Argv
CALLP4
ASGNP4
CNSTI4 3
ARGI4
ADDRLP4 220
ADDRGP4 CG_Argv
CALLP4
ASGNP4
ADDRLP4 212
INDIRP4
ARGP4
ADDRLP4 216
INDIRP4
ARGP4
ADDRLP4 220
INDIRP4
ARGP4
ADDRGP4 trap_R_RemapShader
CALLV
pop
line 1042
;1042:		}
LABELV $572
line 1043
;1043:	}
LABELV $569
line 1046
;1044:
;1045:	// loaddeferred can be both a servercmd and a consolecmd
;1046:	if ( !strcmp( cmd, "loaddefered" ) ) {	// FIXME: spelled wrong, but not changing for demo
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $576
ARGP4
ADDRLP4 208
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 208
INDIRI4
CNSTI4 0
NEI4 $574
line 1047
;1047:		CG_LoadDeferredPlayers();
ADDRGP4 CG_LoadDeferredPlayers
CALLV
pop
line 1048
;1048:		return;
ADDRGP4 $525
JUMPV
LABELV $574
line 1053
;1049:	}
;1050:
;1051:	// clientLevelShot is sent before taking a special screenshot for
;1052:	// the menu system during development
;1053:	if ( !strcmp( cmd, "clientLevelShot" ) ) {
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 $579
ARGP4
ADDRLP4 212
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 212
INDIRI4
CNSTI4 0
NEI4 $577
line 1054
;1054:		cg.levelShot = qtrue;
ADDRGP4 cg+12
CNSTI4 1
ASGNI4
line 1055
;1055:		return;
ADDRGP4 $525
JUMPV
LABELV $577
line 1058
;1056:	}
;1057:
;1058:	CG_Printf( "Unknown client game command: %s\n", cmd );
ADDRGP4 $581
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 CG_Printf
CALLV
pop
line 1059
;1059:}
LABELV $525
endproc CG_ServerCommand 224 12
export CG_ExecuteNewServerCommands
proc CG_ExecuteNewServerCommands 12 4
line 1070
;1060:
;1061:
;1062:/*
;1063:====================
;1064:CG_ExecuteNewServerCommands
;1065:
;1066:Execute all of the server commands that were received along
;1067:with this this snapshot.
;1068:====================
;1069:*/
;1070:void CG_ExecuteNewServerCommands( int latestSequence ) {
ADDRGP4 $584
JUMPV
LABELV $583
line 1071
;1071:	while ( cgs.serverCommandSequence < latestSequence ) {
line 1072
;1072:		if ( trap_GetServerCommand( ++cgs.serverCommandSequence ) ) {
ADDRLP4 0
ADDRGP4 cgs+31444
ASGNP4
ADDRLP4 4
ADDRLP4 0
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 4
INDIRI4
ASGNI4
ADDRLP4 4
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 trap_GetServerCommand
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $587
line 1073
;1073:			CG_ServerCommand();
ADDRGP4 CG_ServerCommand
CALLV
pop
line 1074
;1074:		}
LABELV $587
line 1075
;1075:	}
LABELV $584
line 1071
ADDRGP4 cgs+31444
INDIRI4
ADDRFP4 0
INDIRI4
LTI4 $583
line 1076
;1076:}
LABELV $582
endproc CG_ExecuteNewServerCommands 12 4
bss
export voiceChatBuffer
align 4
LABELV voiceChatBuffer
skip 9984
export headModelVoiceChat
align 4
LABELV headModelVoiceChat
skip 4352
export voiceChatLists
align 4
LABELV voiceChatLists
skip 2263616
import CG_NewParticleArea
import initparticles
import CG_ParticleExplosion
import CG_ParticleMisc
import CG_ParticleDust
import CG_ParticleSparks
import CG_ParticleBulletDebris
import CG_ParticleSnowFlurry
import CG_AddParticleShrapnel
import CG_ParticleSmoke
import CG_ParticleSnow
import CG_AddParticles
import CG_ClearParticles
import trap_GetEntityToken
import trap_getCameraInfo
import trap_startCamera
import trap_loadCamera
import trap_SnapVector
import trap_CIN_SetExtents
import trap_CIN_DrawCinematic
import trap_CIN_RunCinematic
import trap_CIN_StopCinematic
import trap_CIN_PlayCinematic
import trap_Key_GetKey
import trap_Key_SetCatcher
import trap_Key_GetCatcher
import trap_Key_IsDown
import trap_R_RegisterFont
import trap_MemoryRemaining
import testPrintFloat
import testPrintInt
import trap_SetUserCmdValue
import trap_GetUserCmd
import trap_GetCurrentCmdNumber
import trap_GetServerCommand
import trap_GetSnapshot
import trap_GetCurrentSnapshotNumber
import trap_GetGameState
import trap_GetGlconfig
import trap_R_RemapShader
import trap_R_LerpTag
import trap_R_ModelBounds
import trap_R_DrawStretchPic
import trap_R_SetColor
import trap_R_RenderScene
import trap_R_LightForPoint
import trap_R_AddLightToScene
import trap_R_AddPolysToScene
import trap_R_AddPolyToScene
import trap_R_AddRefEntityToScene
import trap_R_ClearScene
import trap_R_RegisterShaderNoMip
import trap_R_RegisterShader
import trap_R_RegisterSkin
import trap_R_RegisterModel
import trap_R_LoadWorldMap
import trap_S_StopBackgroundTrack
import trap_S_StartBackgroundTrack
import trap_S_RegisterSound
import trap_S_Respatialize
import trap_S_UpdateEntityPosition
import trap_S_AddRealLoopingSound
import trap_S_AddLoopingSound
import trap_S_ClearLoopingSounds
import trap_S_StartLocalSound
import trap_S_StopLoopingSound
import trap_S_StartSound
import trap_CM_MarkFragments
import trap_CM_TransformedBoxTrace
import trap_CM_BoxTrace
import trap_CM_TransformedPointContents
import trap_CM_PointContents
import trap_CM_TempBoxModel
import trap_CM_InlineModel
import trap_CM_NumInlineModels
import trap_CM_LoadMap
import trap_UpdateScreen
import trap_SendClientCommand
import trap_AddCommand
import trap_SendConsoleCommand
import trap_FS_FCloseFile
import trap_FS_Write
import trap_FS_Read
import trap_FS_FOpenFile
import trap_Args
import trap_Argv
import trap_Argc
import trap_Cvar_VariableStringBuffer
import trap_Cvar_Set
import trap_Cvar_Update
import trap_Cvar_Register
import trap_Milliseconds
import trap_Error
import trap_Print
import CG_CheckChangedPredictableEvents
import CG_TransitionPlayerState
import CG_Respawn
import CG_InitConsoleCommands
import CG_ConsoleCommand
import CG_DrawOldTourneyScoreboard
import CG_DrawOldScoreboard
import CG_DrawInformation
import CG_LoadingClient
import CG_LoadingItem
import CG_LoadingString
import CG_ProcessSnapshots
import CG_MakeExplosion
import CG_Bleed
import CG_BigExplode
import CG_GibPlayer
import CG_ScorePlum
import CG_SpawnEffect
import CG_BubbleTrail
import CG_SmokePuff
import CG_AddLocalEntities
import CG_AllocLocalEntity
import CG_InitLocalEntities
import CG_ImpactMark
import CG_AddMarks
import CG_InitMarkPolys
import CG_OutOfAmmoChange
import CG_DrawWeaponSelect
import CG_AddPlayerWeapon
import CG_AddViewWeapon
import CG_GrappleTrail
import CG_RailTrail
import CG_Bullet
import CG_ShotgunFire
import CG_MissileHitPlayer
import CG_MissileHitWall
import CG_FireWeapon
import CG_RegisterItemVisuals
import CG_RegisterWeapon
import CG_Weapon_f
import CG_PrevWeapon_f
import CG_NextWeapon_f
import CG_PositionRotatedEntityOnTag
import CG_PositionEntityOnTag
import CG_AdjustPositionForMover
import CG_Beam
import CG_AddPacketEntities
import CG_SetEntitySoundPosition
import CG_PainEvent
import CG_EntityEvent
import CG_PlaceString
import CG_CheckEvents
import CG_LoadDeferredPlayers
import CG_PredictPlayerState
import CG_Trace
import CG_PointContents
import CG_BuildSolidList
import CG_CustomSound
import CG_NewClientInfo
import CG_AddRefEntityWithPowerups
import CG_ResetPlayerEntity
import CG_Player
import CG_StatusHandle
import CG_OtherTeamHasFlag
import CG_YourTeamHasFlag
import CG_GameTypeString
import CG_CheckOrderPending
import CG_Text_PaintChar
import CG_Draw3DModel
import CG_GetKillerText
import CG_GetGameStatusText
import CG_GetTeamColor
import CG_InitTeamChat
import CG_SetPrintString
import CG_ShowResponseHead
import CG_RunMenuScript
import CG_OwnerDrawVisible
import CG_GetValue
import CG_SelectNextPlayer
import CG_SelectPrevPlayer
import CG_Text_Height
import CG_Text_Width
import CG_Text_Paint
import CG_OwnerDraw
import CG_DrawTeamBackground
import CG_DrawFlagModel
import CG_DrawActive
import CG_DrawHead
import CG_CenterPrint
import CG_AddLagometerSnapshotInfo
import CG_AddLagometerFrameInfo
import teamChat2
import teamChat1
import systemChat
import drawTeamOverlayModificationCount
import numSortedTeamPlayers
import sortedTeamPlayers
import CG_DrawTopBottom
import CG_DrawSides
import CG_DrawRect
import UI_DrawProportionalString
import CG_GetColorForHealth
import CG_ColorForHealth
import CG_TileClear
import CG_TeamColor
import CG_FadeColor
import CG_DrawStrlen
import CG_DrawSmallStringColor
import CG_DrawSmallString
import CG_DrawBigStringColor
import CG_DrawBigString
import CG_DrawStringExt
import CG_DrawString
import CG_DrawPic
import CG_FillRect
import CG_AdjustFrom640
import CG_DrawActiveFrame
import CG_AddBufferedSound
import CG_ZoomUp_f
import CG_ZoomDown_f
import CG_TestModelPrevSkin_f
import CG_TestModelNextSkin_f
import CG_TestModelPrevFrame_f
import CG_TestModelNextFrame_f
import CG_TestGun_f
import CG_TestModel_f
import CG_BuildSpectatorString
import CG_GetSelectedScore
import CG_SetScoreSelection
import CG_RankRunFrame
import CG_EventHandling
import CG_MouseEvent
import CG_KeyEvent
import CG_LoadMenus
import CG_LastAttacker
import CG_CrosshairPlayer
import CG_UpdateCvars
import CG_StartMusic
import CG_Error
import CG_Printf
import CG_Argv
import CG_ConfigString
import cg_trueLightning
import cg_oldPlasma
import cg_oldRocket
import cg_oldRail
import cg_noProjectileTrail
import cg_noTaunt
import cg_bigFont
import cg_smallFont
import cg_cameraMode
import cg_timescale
import cg_timescaleFadeSpeed
import cg_timescaleFadeEnd
import cg_cameraOrbitDelay
import cg_cameraOrbit
import pmove_msec
import pmove_fixed
import cg_smoothClients
import cg_scorePlum
import cg_noVoiceText
import cg_noVoiceChats
import cg_teamChatsOnly
import cg_drawFriend
import cg_deferPlayers
import cg_predictItems
import cg_blood
import cg_paused
import cg_buildScript
import cg_forceModel
import cg_stats
import cg_teamChatHeight
import cg_teamChatTime
import cg_synchronousClients
import cg_drawAttacker
import cg_lagometer
import cg_stereoSeparation
import cg_thirdPerson
import cg_thirdPersonAngle
import cg_thirdPersonRange
import cg_zoomFov
import cg_fov
import cg_simpleItems
import cg_ignore
import cg_autoswitch
import cg_tracerLength
import cg_tracerWidth
import cg_tracerChance
import cg_viewsize
import cg_drawGun
import cg_gun_z
import cg_gun_y
import cg_gun_x
import cg_gun_frame
import cg_brassTime
import cg_addMarks
import cg_footsteps
import cg_showmiss
import cg_noPlayerAnims
import cg_nopredict
import cg_errorDecay
import cg_railTrailTime
import cg_debugEvents
import cg_debugPosition
import cg_debugAnim
import cg_animSpeed
import cg_draw2D
import cg_drawStatus
import cg_crosshairHealth
import cg_crosshairSize
import cg_crosshairY
import cg_crosshairX
import cg_teamOverlayUserinfo
import cg_drawTeamOverlay
import cg_drawRewards
import cg_drawCrosshairNames
import cg_drawCrosshair
import cg_drawAmmoWarning
import cg_drawIcons
import cg_draw3dIcons
import cg_drawSnapshot
import cg_drawFPS
import cg_drawTimer
import cg_gibs
import cg_shadows
import cg_swingSpeed
import cg_bobroll
import cg_bobpitch
import cg_bobup
import cg_runroll
import cg_runpitch
import cg_centertime
import cg_markPolys
import cg_items
import cg_weapons
import cg_entities
import cg
import cgs
import BG_PlayerTouchesItem
import BG_PlayerStateToEntityStateExtraPolate
import BG_PlayerStateToEntityState
import BG_TouchJumpPad
import BG_AddPredictableEventToPlayerstate
import BG_EvaluateTrajectoryDelta
import BG_EvaluateTrajectory
import BG_CanItemBeGrabbed
import BG_FindItemForHoldable
import BG_FindItemForPowerup
import BG_FindItemForWeapon
import BG_FindItem
import bg_numItems
import bg_itemlist
import Pmove
import PM_UpdateViewAngles
import Com_Printf
import Com_Error
import Info_NextPair
import Info_Validate
import Info_SetValueForKey_Big
import Info_SetValueForKey
import Info_RemoveKey_big
import Info_RemoveKey
import Info_ValueForKey
import va
import Q_CleanStr
import Q_PrintStrlen
import Q_strcat
import Q_strncpyz
import Q_strrchr
import Q_strupr
import Q_strlwr
import Q_stricmpn
import Q_strncmp
import Q_stricmp
import Q_isalpha
import Q_isupper
import Q_islower
import Q_isprint
import Com_sprintf
import Parse3DMatrix
import Parse2DMatrix
import Parse1DMatrix
import SkipRestOfLine
import SkipBracedSection
import COM_MatchToken
import COM_ParseWarning
import COM_ParseError
import COM_Compress
import COM_ParseExt
import COM_Parse
import COM_GetCurrentParseLine
import COM_BeginParseSession
import COM_DefaultExtension
import COM_StripExtension
import COM_SkipPath
import Com_Clamp
import PerpendicularVector
import AngleVectors
import MatrixMultiply
import MakeNormalVectors
import RotateAroundDirection
import RotatePointAroundVector
import ProjectPointOnPlane
import PlaneFromPoints
import AngleDelta
import AngleNormalize180
import AngleNormalize360
import AnglesSubtract
import AngleSubtract
import LerpAngle
import AngleMod
import BoxOnPlaneSide
import SetPlaneSignbits
import AxisCopy
import AxisClear
import AnglesToAxis
import vectoangles
import Q_crandom
import Q_random
import Q_rand
import Q_acos
import Q_log2
import VectorRotate
import Vector4Scale
import VectorNormalize2
import VectorNormalize
import CrossProduct
import VectorInverse
import VectorNormalizeFast
import DistanceSquared
import Distance
import VectorLengthSquared
import VectorLength
import VectorCompare
import AddPointToBounds
import ClearBounds
import RadiusFromBounds
import NormalizeColor
import ColorBytes4
import ColorBytes3
import _VectorMA
import _VectorScale
import _VectorCopy
import _VectorAdd
import _VectorSubtract
import _DotProduct
import ByteToDir
import DirToByte
import ClampShort
import ClampChar
import Q_rsqrt
import Q_fabs
import axisDefault
import vec3_origin
import g_color_table
import colorDkGrey
import colorMdGrey
import colorLtGrey
import colorWhite
import colorCyan
import colorMagenta
import colorYellow
import colorBlue
import colorGreen
import colorRed
import colorBlack
import bytedirs
import Com_Memcpy
import Com_Memset
import Hunk_Alloc
import FloatSwap
import LongSwap
import ShortSwap
import acos
import fabs
import abs
import tan
import atan2
import cos
import sin
import sqrt
import floor
import ceil
import memcpy
import memset
import memmove
import sscanf
import vsprintf
import _atoi
import atoi
import _atof
import atof
import toupper
import tolower
import strncpy
import strstr
import strchr
import strcmp
import strcpy
import strcat
import strlen
import rand
import srand
import qsort
lit
align 1
LABELV $581
byte 1 85
byte 1 110
byte 1 107
byte 1 110
byte 1 111
byte 1 119
byte 1 110
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 103
byte 1 97
byte 1 109
byte 1 101
byte 1 32
byte 1 99
byte 1 111
byte 1 109
byte 1 109
byte 1 97
byte 1 110
byte 1 100
byte 1 58
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $579
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 76
byte 1 101
byte 1 118
byte 1 101
byte 1 108
byte 1 83
byte 1 104
byte 1 111
byte 1 116
byte 1 0
align 1
LABELV $576
byte 1 108
byte 1 111
byte 1 97
byte 1 100
byte 1 100
byte 1 101
byte 1 102
byte 1 101
byte 1 114
byte 1 101
byte 1 100
byte 1 0
align 1
LABELV $571
byte 1 114
byte 1 101
byte 1 109
byte 1 97
byte 1 112
byte 1 83
byte 1 104
byte 1 97
byte 1 100
byte 1 101
byte 1 114
byte 1 0
align 1
LABELV $568
byte 1 109
byte 1 97
byte 1 112
byte 1 95
byte 1 114
byte 1 101
byte 1 115
byte 1 116
byte 1 97
byte 1 114
byte 1 116
byte 1 0
align 1
LABELV $565
byte 1 116
byte 1 105
byte 1 110
byte 1 102
byte 1 111
byte 1 0
align 1
LABELV $562
byte 1 115
byte 1 99
byte 1 111
byte 1 114
byte 1 101
byte 1 115
byte 1 0
align 1
LABELV $559
byte 1 118
byte 1 116
byte 1 101
byte 1 108
byte 1 108
byte 1 0
align 1
LABELV $556
byte 1 118
byte 1 116
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 0
align 1
LABELV $553
byte 1 118
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 0
align 1
LABELV $548
byte 1 116
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 0
align 1
LABELV $545
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $539
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 0
align 1
LABELV $536
byte 1 112
byte 1 114
byte 1 105
byte 1 110
byte 1 116
byte 1 0
align 1
LABELV $533
byte 1 99
byte 1 115
byte 1 0
align 1
LABELV $530
byte 1 99
byte 1 112
byte 1 0
align 1
LABELV $479
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 37
byte 1 115
byte 1 46
byte 1 118
byte 1 99
byte 1 0
align 1
LABELV $461
byte 1 37
byte 1 115
byte 1 47
byte 1 37
byte 1 115
byte 1 0
align 1
LABELV $426
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 32
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 32
byte 1 109
byte 1 101
byte 1 109
byte 1 111
byte 1 114
byte 1 121
byte 1 32
byte 1 115
byte 1 105
byte 1 122
byte 1 101
byte 1 32
byte 1 61
byte 1 32
byte 1 37
byte 1 100
byte 1 10
byte 1 0
align 1
LABELV $424
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 53
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $422
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 52
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $420
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 51
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $418
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 50
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $416
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 49
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $414
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 102
byte 1 101
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 51
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $412
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 102
byte 1 101
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 50
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $411
byte 1 115
byte 1 99
byte 1 114
byte 1 105
byte 1 112
byte 1 116
byte 1 115
byte 1 47
byte 1 102
byte 1 101
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 49
byte 1 46
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 0
align 1
LABELV $402
byte 1 125
byte 1 0
align 1
LABELV $393
byte 1 94
byte 1 49
byte 1 101
byte 1 120
byte 1 112
byte 1 101
byte 1 99
byte 1 116
byte 1 101
byte 1 100
byte 1 32
byte 1 123
byte 1 32
byte 1 102
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 105
byte 1 110
byte 1 32
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 32
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 32
byte 1 102
byte 1 105
byte 1 108
byte 1 101
byte 1 58
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $392
byte 1 123
byte 1 0
align 1
LABELV $383
byte 1 94
byte 1 49
byte 1 101
byte 1 120
byte 1 112
byte 1 101
byte 1 99
byte 1 116
byte 1 101
byte 1 100
byte 1 32
byte 1 103
byte 1 101
byte 1 110
byte 1 100
byte 1 101
byte 1 114
byte 1 32
byte 1 110
byte 1 111
byte 1 116
byte 1 32
byte 1 102
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 32
byte 1 105
byte 1 110
byte 1 32
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 32
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 32
byte 1 102
byte 1 105
byte 1 108
byte 1 101
byte 1 58
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $382
byte 1 110
byte 1 101
byte 1 117
byte 1 116
byte 1 101
byte 1 114
byte 1 0
align 1
LABELV $379
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 0
align 1
LABELV $376
byte 1 102
byte 1 101
byte 1 109
byte 1 97
byte 1 108
byte 1 101
byte 1 0
align 1
LABELV $366
byte 1 37
byte 1 115
byte 1 0
align 1
LABELV $365
byte 1 94
byte 1 49
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 32
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 32
byte 1 102
byte 1 105
byte 1 108
byte 1 101
byte 1 32
byte 1 116
byte 1 111
byte 1 111
byte 1 32
byte 1 108
byte 1 97
byte 1 114
byte 1 103
byte 1 101
byte 1 58
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 105
byte 1 115
byte 1 32
byte 1 37
byte 1 105
byte 1 44
byte 1 32
byte 1 109
byte 1 97
byte 1 120
byte 1 32
byte 1 97
byte 1 108
byte 1 108
byte 1 111
byte 1 119
byte 1 101
byte 1 100
byte 1 32
byte 1 105
byte 1 115
byte 1 32
byte 1 37
byte 1 105
byte 1 0
align 1
LABELV $362
byte 1 94
byte 1 49
byte 1 118
byte 1 111
byte 1 105
byte 1 99
byte 1 101
byte 1 32
byte 1 99
byte 1 104
byte 1 97
byte 1 116
byte 1 32
byte 1 102
byte 1 105
byte 1 108
byte 1 101
byte 1 32
byte 1 110
byte 1 111
byte 1 116
byte 1 32
byte 1 102
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 58
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $355
byte 1 48
byte 1 0
align 1
LABELV $354
byte 1 99
byte 1 103
byte 1 95
byte 1 116
byte 1 104
byte 1 105
byte 1 114
byte 1 100
byte 1 80
byte 1 101
byte 1 114
byte 1 115
byte 1 111
byte 1 110
byte 1 0
align 1
LABELV $353
byte 1 70
byte 1 73
byte 1 71
byte 1 72
byte 1 84
byte 1 33
byte 1 0
align 1
LABELV $342
byte 1 67
byte 1 71
byte 1 95
byte 1 77
byte 1 97
byte 1 112
byte 1 82
byte 1 101
byte 1 115
byte 1 116
byte 1 97
byte 1 114
byte 1 116
byte 1 10
byte 1 0
align 1
LABELV $215
byte 1 64
byte 1 0
align 1
LABELV $212
byte 1 58
byte 1 0
align 1
LABELV $209
byte 1 61
byte 1 0
align 1
LABELV $181
byte 1 103
byte 1 95
byte 1 98
byte 1 108
byte 1 117
byte 1 101
byte 1 84
byte 1 101
byte 1 97
byte 1 109
byte 1 0
align 1
LABELV $177
byte 1 103
byte 1 95
byte 1 114
byte 1 101
byte 1 100
byte 1 84
byte 1 101
byte 1 97
byte 1 109
byte 1 0
align 1
LABELV $175
byte 1 109
byte 1 97
byte 1 112
byte 1 115
byte 1 47
byte 1 37
byte 1 115
byte 1 46
byte 1 98
byte 1 115
byte 1 112
byte 1 0
align 1
LABELV $172
byte 1 109
byte 1 97
byte 1 112
byte 1 110
byte 1 97
byte 1 109
byte 1 101
byte 1 0
align 1
LABELV $171
byte 1 115
byte 1 118
byte 1 95
byte 1 109
byte 1 97
byte 1 120
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 115
byte 1 0
align 1
LABELV $169
byte 1 116
byte 1 105
byte 1 109
byte 1 101
byte 1 108
byte 1 105
byte 1 109
byte 1 105
byte 1 116
byte 1 0
align 1
LABELV $167
byte 1 99
byte 1 97
byte 1 112
byte 1 116
byte 1 117
byte 1 114
byte 1 101
byte 1 108
byte 1 105
byte 1 109
byte 1 105
byte 1 116
byte 1 0
align 1
LABELV $165
byte 1 102
byte 1 114
byte 1 97
byte 1 103
byte 1 108
byte 1 105
byte 1 109
byte 1 105
byte 1 116
byte 1 0
align 1
LABELV $163
byte 1 116
byte 1 101
byte 1 97
byte 1 109
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 115
byte 1 0
align 1
LABELV $161
byte 1 100
byte 1 109
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 115
byte 1 0
align 1
LABELV $158
byte 1 37
byte 1 105
byte 1 0
align 1
LABELV $157
byte 1 103
byte 1 95
byte 1 103
byte 1 97
byte 1 109
byte 1 101
byte 1 116
byte 1 121
byte 1 112
byte 1 101
byte 1 0
align 1
LABELV $79
byte 1 102
byte 1 111
byte 1 108
byte 1 108
byte 1 111
byte 1 119
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 99
byte 1 97
byte 1 114
byte 1 114
byte 1 105
byte 1 101
byte 1 114
byte 1 0
align 1
LABELV $78
byte 1 114
byte 1 101
byte 1 116
byte 1 117
byte 1 114
byte 1 110
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 0
align 1
LABELV $77
byte 1 102
byte 1 111
byte 1 108
byte 1 108
byte 1 111
byte 1 119
byte 1 109
byte 1 101
byte 1 0
align 1
LABELV $76
byte 1 99
byte 1 97
byte 1 109
byte 1 112
byte 1 0
align 1
LABELV $75
byte 1 112
byte 1 97
byte 1 116
byte 1 114
byte 1 111
byte 1 108
byte 1 0
align 1
LABELV $74
byte 1 100
byte 1 101
byte 1 102
byte 1 101
byte 1 110
byte 1 100
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 0
align 1
LABELV $73
byte 1 100
byte 1 101
byte 1 102
byte 1 101
byte 1 110
byte 1 100
byte 1 0
align 1
LABELV $72
byte 1 111
byte 1 102
byte 1 102
byte 1 101
byte 1 110
byte 1 115
byte 1 101
byte 1 0
align 1
LABELV $71
byte 1 103
byte 1 101
byte 1 116
byte 1 102
byte 1 108
byte 1 97
byte 1 103
byte 1 0
