export trap_Cvar_VariableValue code proc trap_Cvar_VariableValue 132 12 file "../g_bot.c" line 35 ;1:// Copyright (C) 1999-2000 Id Software, Inc. ;2:// ;3:// g_bot.c ;4: ;5:#include "g_local.h" ;6: ;7: ;8:static int g_numBots; ;9:static char *g_botInfos[MAX_BOTS]; ;10: ;11: ;12:int g_numArenas; ;13:static char *g_arenaInfos[MAX_ARENAS]; ;14: ;15: ;16:#define BOT_BEGIN_DELAY_BASE 2000 ;17:#define BOT_BEGIN_DELAY_INCREMENT 1500 ;18: ;19:#define BOT_SPAWN_QUEUE_DEPTH 16 ;20: ;21:typedef struct { ;22: int clientNum; ;23: int spawnTime; ;24:} botSpawnQueue_t; ;25: ;26://static int botBeginDelay = 0; // bk001206 - unused, init ;27:static botSpawnQueue_t botSpawnQueue[BOT_SPAWN_QUEUE_DEPTH]; ;28: ;29:vmCvar_t bot_minplayers; ;30: ;31:extern gentity_t *podium1; ;32:extern gentity_t *podium2; ;33:extern gentity_t *podium3; ;34: ;35:float trap_Cvar_VariableValue( const char *var_name ) { line 38 ;36: char buf[128]; ;37: ;38: trap_Cvar_VariableStringBuffer(var_name, buf, sizeof(buf)); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 ARGP4 CNSTI4 128 ARGI4 ADDRGP4 trap_Cvar_VariableStringBuffer CALLV pop line 39 ;39: return atof(buf); ADDRLP4 0 ARGP4 ADDRLP4 128 ADDRGP4 atof CALLF4 ASGNF4 ADDRLP4 128 INDIRF4 RETF4 LABELV $79 endproc trap_Cvar_VariableValue 132 12 export G_ParseInfos proc G_ParseInfos 2084 12 line 49 ;40:} ;41: ;42: ;43: ;44:/* ;45:=============== ;46:G_ParseInfos ;47:=============== ;48:*/ ;49:int G_ParseInfos( char *buf, int max, char *infos[] ) { line 55 ;50: char *token; ;51: int count; ;52: char key[MAX_TOKEN_CHARS]; ;53: char info[MAX_INFO_STRING]; ;54: ;55: count = 0; ADDRLP4 2052 CNSTI4 0 ASGNI4 ADDRGP4 $82 JUMPV LABELV $81 line 57 ;56: ;57: while ( 1 ) { line 58 ;58: token = COM_Parse( (const char **)(&buf) ); ADDRFP4 0 ARGP4 ADDRLP4 2056 ADDRGP4 COM_Parse CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 2056 INDIRP4 ASGNP4 line 59 ;59: if ( !token[0] ) { ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $84 line 60 ;60: break; ADDRGP4 $83 JUMPV LABELV $84 line 62 ;61: } ;62: if ( strcmp( token, "{" ) ) { ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 $88 ARGP4 ADDRLP4 2060 ADDRGP4 strcmp CALLI4 ASGNI4 ADDRLP4 2060 INDIRI4 CNSTI4 0 EQI4 $86 line 63 ;63: Com_Printf( "Missing { in info file\n" ); ADDRGP4 $89 ARGP4 ADDRGP4 Com_Printf CALLV pop line 64 ;64: break; ADDRGP4 $83 JUMPV LABELV $86 line 67 ;65: } ;66: ;67: if ( count == max ) { ADDRLP4 2052 INDIRI4 ADDRFP4 4 INDIRI4 NEI4 $90 line 68 ;68: Com_Printf( "Max infos exceeded\n" ); ADDRGP4 $92 ARGP4 ADDRGP4 Com_Printf CALLV pop line 69 ;69: break; ADDRGP4 $83 JUMPV LABELV $90 line 72 ;70: } ;71: ;72: info[0] = '\0'; ADDRLP4 1028 CNSTI1 0 ASGNI1 ADDRGP4 $94 JUMPV LABELV $93 line 73 ;73: while ( 1 ) { line 74 ;74: token = COM_ParseExt( (const char **)(&buf), qtrue ); ADDRFP4 0 ARGP4 CNSTI4 1 ARGI4 ADDRLP4 2064 ADDRGP4 COM_ParseExt CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 2064 INDIRP4 ASGNP4 line 75 ;75: if ( !token[0] ) { ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $96 line 76 ;76: Com_Printf( "Unexpected end of info file\n" ); ADDRGP4 $98 ARGP4 ADDRGP4 Com_Printf CALLV pop line 77 ;77: break; ADDRGP4 $95 JUMPV LABELV $96 line 79 ;78: } ;79: if ( !strcmp( token, "}" ) ) { ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 $101 ARGP4 ADDRLP4 2068 ADDRGP4 strcmp CALLI4 ASGNI4 ADDRLP4 2068 INDIRI4 CNSTI4 0 NEI4 $99 line 80 ;80: break; ADDRGP4 $95 JUMPV LABELV $99 line 82 ;81: } ;82: Q_strncpyz( key, token, sizeof( key ) ); ADDRLP4 4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 84 ;83: ;84: token = COM_ParseExt( (const char **)(&buf), qfalse ); ADDRFP4 0 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 2072 ADDRGP4 COM_ParseExt CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 2072 INDIRP4 ASGNP4 line 85 ;85: if ( !token[0] ) { ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $102 line 86 ;86: strcpy( token, "" ); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 $104 ARGP4 ADDRGP4 strcpy CALLP4 pop line 87 ;87: } LABELV $102 line 88 ;88: Info_SetValueForKey( info, key, token ); ADDRLP4 1028 ARGP4 ADDRLP4 4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 89 ;89: } LABELV $94 line 73 ADDRGP4 $93 JUMPV LABELV $95 line 91 ;90: //NOTE: extra space for arena number ;91: infos[count] = G_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); ADDRLP4 1028 ARGP4 ADDRLP4 2064 ADDRGP4 strlen CALLI4 ASGNI4 ADDRGP4 $105 ARGP4 ADDRLP4 2068 ADDRGP4 strlen CALLI4 ASGNI4 ADDRGP4 $106 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 2072 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 2072 INDIRP4 ARGP4 ADDRLP4 2076 ADDRGP4 strlen CALLI4 ASGNI4 ADDRLP4 2064 INDIRI4 ADDRLP4 2068 INDIRI4 ADDI4 ADDRLP4 2076 INDIRI4 ADDI4 CNSTI4 1 ADDI4 ARGI4 ADDRLP4 2080 ADDRGP4 G_Alloc CALLP4 ASGNP4 ADDRLP4 2052 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 8 INDIRP4 ADDP4 ADDRLP4 2080 INDIRP4 ASGNP4 line 92 ;92: if (infos[count]) { ADDRLP4 2052 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 8 INDIRP4 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $107 line 93 ;93: strcpy(infos[count], info); ADDRLP4 2052 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 8 INDIRP4 ADDP4 INDIRP4 ARGP4 ADDRLP4 1028 ARGP4 ADDRGP4 strcpy CALLP4 pop line 94 ;94: count++; ADDRLP4 2052 ADDRLP4 2052 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 95 ;95: } LABELV $107 line 96 ;96: } LABELV $82 line 57 ADDRGP4 $81 JUMPV LABELV $83 line 97 ;97: return count; ADDRLP4 2052 INDIRI4 RETI4 LABELV $80 endproc G_ParseInfos 2084 12 proc G_LoadArenasFromFile 8216 16 line 105 ;98:} ;99: ;100:/* ;101:=============== ;102:G_LoadArenasFromFile ;103:=============== ;104:*/ ;105:static void G_LoadArenasFromFile( char *filename ) { line 110 ;106: int len; ;107: fileHandle_t f; ;108: char buf[MAX_ARENAS_TEXT]; ;109: ;110: len = trap_FS_FOpenFile( filename, &f, FS_READ ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 4 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 8200 ADDRGP4 trap_FS_FOpenFile CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 8200 INDIRI4 ASGNI4 line 111 ;111: if ( !f ) { ADDRLP4 4 INDIRI4 CNSTI4 0 NEI4 $110 line 112 ;112: trap_Printf( va( S_COLOR_RED "file not found: %s\n", filename ) ); ADDRGP4 $112 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8204 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 8204 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 113 ;113: return; ADDRGP4 $109 JUMPV LABELV $110 line 115 ;114: } ;115: if ( len >= MAX_ARENAS_TEXT ) { ADDRLP4 0 INDIRI4 CNSTI4 8192 LTI4 $113 line 116 ;116: trap_Printf( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_ARENAS_TEXT ) ); ADDRGP4 $115 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 CNSTI4 8192 ARGI4 ADDRLP4 8204 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 8204 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 117 ;117: trap_FS_FCloseFile( f ); ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_FCloseFile CALLV pop line 118 ;118: return; ADDRGP4 $109 JUMPV LABELV $113 line 121 ;119: } ;120: ;121: trap_FS_Read( buf, len, f ); ADDRLP4 8 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_Read CALLV pop line 122 ;122: buf[len] = 0; ADDRLP4 0 INDIRI4 ADDRLP4 8 ADDP4 CNSTI1 0 ASGNI1 line 123 ;123: trap_FS_FCloseFile( f ); ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_FCloseFile CALLV pop line 125 ;124: ;125: g_numArenas += G_ParseInfos( buf, MAX_ARENAS - g_numArenas, &g_arenaInfos[g_numArenas] ); ADDRLP4 8 ARGP4 ADDRLP4 8204 ADDRGP4 g_numArenas ASGNP4 ADDRLP4 8208 ADDRLP4 8204 INDIRP4 INDIRI4 ASGNI4 CNSTI4 1024 ADDRLP4 8208 INDIRI4 SUBI4 ARGI4 ADDRLP4 8208 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 ARGP4 ADDRLP4 8212 ADDRGP4 G_ParseInfos CALLI4 ASGNI4 ADDRLP4 8204 INDIRP4 ADDRLP4 8208 INDIRI4 ADDRLP4 8212 INDIRI4 ADDI4 ASGNI4 line 126 ;126:} LABELV $109 endproc G_LoadArenasFromFile 8216 16 export G_GetMapTypeBits proc G_GetMapTypeBits 32 8 line 129 ;127: ;128:int G_GetMapTypeBits(char *type) ;129:{ line 130 ;130: int typeBits = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 132 ;131: ;132: if( *type ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $117 line 133 ;133: if( strstr( type, "ffa" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $121 ARGP4 ADDRLP4 4 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $119 line 134 ;134: typeBits |= (1 << GT_FFA); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 BORI4 ASGNI4 line 135 ;135: typeBits |= (1 << GT_TEAM); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 32 BORI4 ASGNI4 line 136 ;136: } LABELV $119 line 137 ;137: if( strstr( type, "holocron" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $124 ARGP4 ADDRLP4 8 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 8 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $122 line 138 ;138: typeBits |= (1 << GT_HOLOCRON); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 2 BORI4 ASGNI4 line 139 ;139: } LABELV $122 line 140 ;140: if( strstr( type, "jedimaster" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $127 ARGP4 ADDRLP4 12 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 12 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $125 line 141 ;141: typeBits |= (1 << GT_JEDIMASTER); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 4 BORI4 ASGNI4 line 142 ;142: } LABELV $125 line 143 ;143: if( strstr( type, "duel" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $130 ARGP4 ADDRLP4 16 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 16 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $128 line 144 ;144: typeBits |= (1 << GT_TOURNAMENT); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 145 ;145: } LABELV $128 line 146 ;146: if( strstr( type, "saga" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $133 ARGP4 ADDRLP4 20 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 20 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $131 line 147 ;147: typeBits |= (1 << GT_SAGA); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 64 BORI4 ASGNI4 line 148 ;148: } LABELV $131 line 149 ;149: if( strstr( type, "ctf" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $136 ARGP4 ADDRLP4 24 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 24 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $134 line 150 ;150: typeBits |= (1 << GT_CTF); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 128 BORI4 ASGNI4 line 151 ;151: } LABELV $134 line 152 ;152: if( strstr( type, "cty" ) ) { ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $139 ARGP4 ADDRLP4 28 ADDRGP4 strstr CALLP4 ASGNP4 ADDRLP4 28 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $118 line 153 ;153: typeBits |= (1 << GT_CTY); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 256 BORI4 ASGNI4 line 154 ;154: } line 155 ;155: } else { ADDRGP4 $118 JUMPV LABELV $117 line 156 ;156: typeBits |= (1 << GT_FFA); ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 BORI4 ASGNI4 line 157 ;157: } LABELV $118 line 159 ;158: ;159: return typeBits; ADDRLP4 0 INDIRI4 RETI4 LABELV $116 endproc G_GetMapTypeBits 32 8 export G_DoesMapSupportGametype proc G_DoesMapSupportGametype 28 8 line 163 ;160:} ;161: ;162:qboolean G_DoesMapSupportGametype(const char *mapname, int gametype) ;163:{ line 164 ;164: int typeBits = 0; ADDRLP4 12 CNSTI4 0 ASGNI4 line 165 ;165: int thisLevel = -1; ADDRLP4 8 CNSTI4 -1 ASGNI4 line 166 ;166: int n = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 167 ;167: char *type = NULL; ADDRLP4 4 CNSTP4 0 ASGNP4 line 169 ;168: ;169: if (!g_arenaInfos[0]) ADDRGP4 g_arenaInfos INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $141 line 170 ;170: { line 171 ;171: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $140 JUMPV LABELV $141 line 174 ;172: } ;173: ;174: if (!mapname || !mapname[0]) ADDRLP4 16 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 16 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $145 ADDRLP4 16 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $143 LABELV $145 line 175 ;175: { line 176 ;176: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $140 JUMPV LABELV $143 line 179 ;177: } ;178: ;179: for( n = 0; n < g_numArenas; n++ ) ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $149 JUMPV LABELV $146 line 180 ;180: { line 181 ;181: type = Info_ValueForKey( g_arenaInfos[n], "map" ); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $150 ARGP4 ADDRLP4 20 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 20 INDIRP4 ASGNP4 line 183 ;182: ;183: if (Q_stricmp(mapname, type) == 0) ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 24 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 24 INDIRI4 CNSTI4 0 NEI4 $151 line 184 ;184: { line 185 ;185: thisLevel = n; ADDRLP4 8 ADDRLP4 0 INDIRI4 ASGNI4 line 186 ;186: break; ADDRGP4 $148 JUMPV LABELV $151 line 188 ;187: } ;188: } LABELV $147 line 179 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $149 ADDRLP4 0 INDIRI4 ADDRGP4 g_numArenas INDIRI4 LTI4 $146 LABELV $148 line 190 ;189: ;190: if (thisLevel == -1) ADDRLP4 8 INDIRI4 CNSTI4 -1 NEI4 $153 line 191 ;191: { line 192 ;192: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $140 JUMPV LABELV $153 line 195 ;193: } ;194: ;195: type = Info_ValueForKey(g_arenaInfos[thisLevel], "type"); ADDRLP4 8 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $155 ARGP4 ADDRLP4 20 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 20 INDIRP4 ASGNP4 line 197 ;196: ;197: typeBits = G_GetMapTypeBits(type); ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 24 ADDRGP4 G_GetMapTypeBits CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 24 INDIRI4 ASGNI4 line 198 ;198: if (typeBits & (1 << gametype)) ADDRLP4 12 INDIRI4 CNSTI4 1 ADDRFP4 4 INDIRI4 LSHI4 BANDI4 CNSTI4 0 EQI4 $156 line 199 ;199: { //the map in question supports the gametype in question, so.. line 200 ;200: return qtrue; CNSTI4 1 RETI4 ADDRGP4 $140 JUMPV LABELV $156 line 203 ;201: } ;202: ;203: return qfalse; CNSTI4 0 RETI4 LABELV $140 endproc G_DoesMapSupportGametype 28 8 export G_RefreshNextMap proc G_RefreshNextMap 312 16 line 208 ;204:} ;205: ;206://rww - auto-obtain nextmap. I could've sworn Q3 had something like this, but I guess not. ;207:const char *G_RefreshNextMap(int gametype, qboolean forced) ;208:{ line 209 ;209: int typeBits = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 line 210 ;210: int thisLevel = 0; ADDRLP4 12 CNSTI4 0 ASGNI4 line 211 ;211: int desiredMap = 0; ADDRLP4 292 CNSTI4 0 ASGNI4 line 212 ;212: int n = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 213 ;213: char *type = NULL; ADDRLP4 4 CNSTP4 0 ASGNP4 line 214 ;214: qboolean loopingUp = qfalse; ADDRLP4 16 CNSTI4 0 ASGNI4 line 217 ;215: vmCvar_t mapname; ;216: ;217: if (!g_autoMapCycle.integer && !forced) ADDRLP4 296 CNSTI4 0 ASGNI4 ADDRGP4 g_autoMapCycle+12 INDIRI4 ADDRLP4 296 INDIRI4 NEI4 $159 ADDRFP4 4 INDIRI4 ADDRLP4 296 INDIRI4 NEI4 $159 line 218 ;218: { line 219 ;219: return NULL; CNSTP4 0 RETP4 ADDRGP4 $158 JUMPV LABELV $159 line 222 ;220: } ;221: ;222: if (!g_arenaInfos[0]) ADDRGP4 g_arenaInfos INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $162 line 223 ;223: { line 224 ;224: return NULL; CNSTP4 0 RETP4 ADDRGP4 $158 JUMPV LABELV $162 line 227 ;225: } ;226: ;227: trap_Cvar_Register( &mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM ); ADDRLP4 20 ARGP4 ADDRGP4 $164 ARGP4 ADDRGP4 $165 ARGP4 CNSTI4 68 ARGI4 ADDRGP4 trap_Cvar_Register CALLV pop line 228 ;228: for( n = 0; n < g_numArenas; n++ ) ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $169 JUMPV LABELV $166 line 229 ;229: { line 230 ;230: type = Info_ValueForKey( g_arenaInfos[n], "map" ); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $150 ARGP4 ADDRLP4 300 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 300 INDIRP4 ASGNP4 line 232 ;231: ;232: if (Q_stricmp(mapname.string, type) == 0) ADDRLP4 20+16 ARGP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 304 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 304 INDIRI4 CNSTI4 0 NEI4 $170 line 233 ;233: { line 234 ;234: thisLevel = n; ADDRLP4 12 ADDRLP4 0 INDIRI4 ASGNI4 line 235 ;235: break; ADDRGP4 $168 JUMPV LABELV $170 line 237 ;236: } ;237: } LABELV $167 line 228 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $169 ADDRLP4 0 INDIRI4 ADDRGP4 g_numArenas INDIRI4 LTI4 $166 LABELV $168 line 239 ;238: ;239: desiredMap = thisLevel; ADDRLP4 292 ADDRLP4 12 INDIRI4 ASGNI4 line 241 ;240: ;241: n = thisLevel+1; ADDRLP4 0 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRGP4 $174 JUMPV LABELV $173 line 243 ;242: while (n != thisLevel) ;243: { //now cycle through the arena list and find the next map that matches the gametype we're in line 244 ;244: if (!g_arenaInfos[n] || n >= g_numArenas) ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $178 ADDRLP4 0 INDIRI4 ADDRGP4 g_numArenas INDIRI4 LTI4 $176 LABELV $178 line 245 ;245: { line 246 ;246: if (loopingUp) ADDRLP4 16 INDIRI4 CNSTI4 0 EQI4 $179 line 247 ;247: { //this shouldn't happen, but if it does we have a null entry break in the arena file line 249 ;248: //if this is the case just break out of the loop instead of sticking in an infinite loop ;249: break; ADDRGP4 $175 JUMPV LABELV $179 line 251 ;250: } ;251: n = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 252 ;252: loopingUp = qtrue; ADDRLP4 16 CNSTI4 1 ASGNI4 line 253 ;253: } LABELV $176 line 255 ;254: ;255: type = Info_ValueForKey(g_arenaInfos[n], "type"); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $155 ARGP4 ADDRLP4 304 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 304 INDIRP4 ASGNP4 line 257 ;256: ;257: typeBits = G_GetMapTypeBits(type); ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 308 ADDRGP4 G_GetMapTypeBits CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 308 INDIRI4 ASGNI4 line 258 ;258: if (typeBits & (1 << gametype)) ADDRLP4 8 INDIRI4 CNSTI4 1 ADDRFP4 0 INDIRI4 LSHI4 BANDI4 CNSTI4 0 EQI4 $181 line 259 ;259: { line 260 ;260: desiredMap = n; ADDRLP4 292 ADDRLP4 0 INDIRI4 ASGNI4 line 261 ;261: break; ADDRGP4 $175 JUMPV LABELV $181 line 264 ;262: } ;263: ;264: n++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 265 ;265: } LABELV $174 line 242 ADDRLP4 0 INDIRI4 ADDRLP4 12 INDIRI4 NEI4 $173 LABELV $175 line 267 ;266: ;267: if (desiredMap == thisLevel) ADDRLP4 292 INDIRI4 ADDRLP4 12 INDIRI4 NEI4 $183 line 268 ;268: { //If this is the only level for this game mode or we just can't find a map for this game mode, then nextmap line 270 ;269: //will always restart. ;270: trap_Cvar_Set( "nextmap", "map_restart 0"); ADDRGP4 $185 ARGP4 ADDRGP4 $186 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 271 ;271: } ADDRGP4 $184 JUMPV LABELV $183 line 273 ;272: else ;273: { //otherwise we have a valid nextmap to cycle to, so use it. line 274 ;274: type = Info_ValueForKey( g_arenaInfos[desiredMap], "map" ); ADDRLP4 292 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $150 ARGP4 ADDRLP4 300 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 300 INDIRP4 ASGNP4 line 275 ;275: trap_Cvar_Set( "nextmap", va("map %s", type)); ADDRGP4 $187 ARGP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 304 ADDRGP4 va CALLP4 ASGNP4 ADDRGP4 $185 ARGP4 ADDRLP4 304 INDIRP4 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 276 ;276: } LABELV $184 line 278 ;277: ;278: return Info_ValueForKey( g_arenaInfos[desiredMap], "map" ); ADDRLP4 292 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $150 ARGP4 ADDRLP4 300 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 300 INDIRP4 RETP4 LABELV $158 endproc G_RefreshNextMap 312 16 proc G_LoadArenas 1460 16 line 286 ;279:} ;280: ;281:/* ;282:=============== ;283:G_LoadArenas ;284:=============== ;285:*/ ;286:static void G_LoadArenas( void ) { line 295 ;287: int numdirs; ;288: vmCvar_t arenasFile; ;289: char filename[128]; ;290: char dirlist[1024]; ;291: char* dirptr; ;292: int i, n; ;293: int dirlen; ;294: ;295: g_numArenas = 0; ADDRGP4 g_numArenas CNSTI4 0 ASGNI4 line 297 ;296: ;297: trap_Cvar_Register( &arenasFile, "g_arenasFile", "", CVAR_INIT|CVAR_ROM ); ADDRLP4 148 ARGP4 ADDRGP4 $189 ARGP4 ADDRGP4 $165 ARGP4 CNSTI4 80 ARGI4 ADDRGP4 trap_Cvar_Register CALLV pop line 298 ;298: if( *arenasFile.string ) { ADDRLP4 148+16 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $190 line 299 ;299: G_LoadArenasFromFile(arenasFile.string); ADDRLP4 148+16 ARGP4 ADDRGP4 G_LoadArenasFromFile CALLV pop line 300 ;300: } ADDRGP4 $191 JUMPV LABELV $190 line 301 ;301: else { line 302 ;302: G_LoadArenasFromFile("scripts/arenas.txt"); ADDRGP4 $194 ARGP4 ADDRGP4 G_LoadArenasFromFile CALLV pop line 303 ;303: } LABELV $191 line 306 ;304: ;305: // get all arenas from .arena files ;306: numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 1024 ); ADDRGP4 $195 ARGP4 ADDRGP4 $196 ARGP4 ADDRLP4 420 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 1444 ADDRGP4 trap_FS_GetFileList CALLI4 ASGNI4 ADDRLP4 144 ADDRLP4 1444 INDIRI4 ASGNI4 line 307 ;307: dirptr = dirlist; ADDRLP4 4 ADDRLP4 420 ASGNP4 line 308 ;308: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { ADDRLP4 136 CNSTI4 0 ASGNI4 ADDRGP4 $200 JUMPV LABELV $197 line 309 ;309: dirlen = strlen(dirptr); ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 1448 ADDRGP4 strlen CALLI4 ASGNI4 ADDRLP4 140 ADDRLP4 1448 INDIRI4 ASGNI4 line 310 ;310: strcpy(filename, "scripts/"); ADDRLP4 8 ARGP4 ADDRGP4 $201 ARGP4 ADDRGP4 strcpy CALLP4 pop line 311 ;311: strcat(filename, dirptr); ADDRLP4 8 ARGP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 strcat CALLP4 pop line 312 ;312: G_LoadArenasFromFile(filename); ADDRLP4 8 ARGP4 ADDRGP4 G_LoadArenasFromFile CALLV pop line 313 ;313: } LABELV $198 line 308 ADDRLP4 1448 CNSTI4 1 ASGNI4 ADDRLP4 136 ADDRLP4 136 INDIRI4 ADDRLP4 1448 INDIRI4 ADDI4 ASGNI4 ADDRLP4 4 ADDRLP4 140 INDIRI4 ADDRLP4 1448 INDIRI4 ADDI4 ADDRLP4 4 INDIRP4 ADDP4 ASGNP4 LABELV $200 ADDRLP4 136 INDIRI4 ADDRLP4 144 INDIRI4 LTI4 $197 line 314 ;314: trap_Printf( va( "%i arenas parsed\n", g_numArenas ) ); ADDRGP4 $202 ARGP4 ADDRGP4 g_numArenas INDIRI4 ARGI4 ADDRLP4 1452 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 1452 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 316 ;315: ;316: for( n = 0; n < g_numArenas; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $206 JUMPV LABELV $203 line 317 ;317: Info_SetValueForKey( g_arenaInfos[n], "num", va( "%i", n ) ); ADDRGP4 $208 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 ADDRLP4 1456 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $207 ARGP4 ADDRLP4 1456 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 318 ;318: } LABELV $204 line 316 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $206 ADDRLP4 0 INDIRI4 ADDRGP4 g_numArenas INDIRI4 LTI4 $203 line 320 ;319: ;320: G_RefreshNextMap(g_gametype.integer, qfalse); ADDRGP4 g_gametype+12 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_RefreshNextMap CALLP4 pop line 321 ;321:} LABELV $188 endproc G_LoadArenas 1460 16 export G_GetArenaInfoByMap proc G_GetArenaInfoByMap 12 8 line 329 ;322: ;323: ;324:/* ;325:=============== ;326:G_GetArenaInfoByNumber ;327:=============== ;328:*/ ;329:const char *G_GetArenaInfoByMap( const char *map ) { line 332 ;330: int n; ;331: ;332: for( n = 0; n < g_numArenas; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $214 JUMPV LABELV $211 line 333 ;333: if( Q_stricmp( Info_ValueForKey( g_arenaInfos[n], "map" ), map ) == 0 ) { ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $150 ARGP4 ADDRLP4 4 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 8 INDIRI4 CNSTI4 0 NEI4 $215 line 334 ;334: return g_arenaInfos[n]; ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_arenaInfos ADDP4 INDIRP4 RETP4 ADDRGP4 $210 JUMPV LABELV $215 line 336 ;335: } ;336: } LABELV $212 line 332 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $214 ADDRLP4 0 INDIRI4 ADDRGP4 g_numArenas INDIRI4 LTI4 $211 line 338 ;337: ;338: return NULL; CNSTP4 0 RETP4 LABELV $210 endproc G_GetArenaInfoByMap 12 8 proc PlayerIntroSound 80 12 line 347 ;339:} ;340: ;341: ;342:/* ;343:================= ;344:PlayerIntroSound ;345:================= ;346:*/ ;347:static void PlayerIntroSound( const char *modelAndSkin ) { line 351 ;348: char model[MAX_QPATH]; ;349: char *skin; ;350: ;351: Q_strncpyz( model, modelAndSkin, sizeof(model) ); ADDRLP4 4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 352 ;352: skin = Q_strrchr( model, '/' ); ADDRLP4 4 ARGP4 CNSTI4 47 ARGI4 ADDRLP4 68 ADDRGP4 Q_strrchr CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 68 INDIRP4 ASGNP4 line 353 ;353: if ( skin ) { ADDRLP4 0 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $218 line 354 ;354: *skin++ = '\0'; ADDRLP4 72 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 72 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 72 INDIRP4 CNSTI1 0 ASGNI1 line 355 ;355: } ADDRGP4 $219 JUMPV LABELV $218 line 356 ;356: else { line 357 ;357: skin = model; ADDRLP4 0 ADDRLP4 4 ASGNP4 line 358 ;358: } LABELV $219 line 360 ;359: ;360: if( Q_stricmp( skin, "default" ) == 0 ) { ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 $222 ARGP4 ADDRLP4 72 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 72 INDIRI4 CNSTI4 0 NEI4 $220 line 361 ;361: skin = model; ADDRLP4 0 ADDRLP4 4 ASGNP4 line 362 ;362: } LABELV $220 line 364 ;363: ;364: trap_SendConsoleCommand( EXEC_APPEND, va( "play sound/player/announce/%s.wav\n", skin ) ); ADDRGP4 $223 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 76 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 2 ARGI4 ADDRLP4 76 INDIRP4 ARGP4 ADDRGP4 trap_SendConsoleCommand CALLV pop line 365 ;365:} LABELV $217 endproc PlayerIntroSound 80 12 export G_AddRandomBot proc G_AddRandomBot 80 20 line 372 ;366: ;367:/* ;368:=============== ;369:G_AddRandomBot ;370:=============== ;371:*/ ;372:void G_AddRandomBot( int team ) { line 378 ;373: int i, n, num; ;374: float skill; ;375: char *value, netname[36], *teamstr; ;376: gclient_t *cl; ;377: ;378: num = 0; ADDRLP4 16 CNSTI4 0 ASGNI4 line 379 ;379: for ( n = 0; n < g_numBots ; n++ ) { ADDRLP4 12 CNSTI4 0 ASGNI4 ADDRGP4 $228 JUMPV LABELV $225 line 380 ;380: value = Info_ValueForKey( g_botInfos[n], "name" ); ADDRLP4 12 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 64 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 8 ADDRLP4 64 INDIRP4 ASGNP4 line 382 ;381: // ;382: for ( i=0 ; i< g_maxclients.integer ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 $233 JUMPV LABELV $230 line 383 ;383: cl = level.clients + i; ADDRLP4 0 CNSTI4 1756 ADDRLP4 4 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 384 ;384: if ( cl->pers.connected != CON_CONNECTED ) { ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $235 line 385 ;385: continue; ADDRGP4 $231 JUMPV LABELV $235 line 387 ;386: } ;387: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { CNSTI4 828 ADDRLP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 NEI4 $237 line 388 ;388: continue; ADDRGP4 $231 JUMPV LABELV $237 line 390 ;389: } ;390: if ( team >= 0 && cl->sess.sessionTeam != team ) { ADDRLP4 68 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 68 INDIRI4 CNSTI4 0 LTI4 $241 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 68 INDIRI4 EQI4 $241 line 391 ;391: continue; ADDRGP4 $231 JUMPV LABELV $241 line 393 ;392: } ;393: if ( !Q_stricmp( value, cl->pers.netname ) ) { ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 72 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 72 INDIRI4 CNSTI4 0 NEI4 $243 line 394 ;394: break; ADDRGP4 $232 JUMPV LABELV $243 line 396 ;395: } ;396: } LABELV $231 line 382 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $233 ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $230 LABELV $232 line 397 ;397: if (i >= g_maxclients.integer) { ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $245 line 398 ;398: num++; ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 399 ;399: } LABELV $245 line 400 ;400: } LABELV $226 line 379 ADDRLP4 12 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $228 ADDRLP4 12 INDIRI4 ADDRGP4 g_numBots INDIRI4 LTI4 $225 line 401 ;401: num = random() * num; ADDRLP4 64 ADDRGP4 rand CALLI4 ASGNI4 ADDRLP4 16 ADDRLP4 64 INDIRI4 CNSTI4 32767 BANDI4 CVIF4 4 CNSTF4 1191181824 DIVF4 ADDRLP4 16 INDIRI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 line 402 ;402: for ( n = 0; n < g_numBots ; n++ ) { ADDRLP4 12 CNSTI4 0 ASGNI4 ADDRGP4 $251 JUMPV LABELV $248 line 403 ;403: value = Info_ValueForKey( g_botInfos[n], "name" ); ADDRLP4 12 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 68 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 8 ADDRLP4 68 INDIRP4 ASGNP4 line 405 ;404: // ;405: for ( i=0 ; i< g_maxclients.integer ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 $255 JUMPV LABELV $252 line 406 ;406: cl = level.clients + i; ADDRLP4 0 CNSTI4 1756 ADDRLP4 4 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 407 ;407: if ( cl->pers.connected != CON_CONNECTED ) { ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $257 line 408 ;408: continue; ADDRGP4 $253 JUMPV LABELV $257 line 410 ;409: } ;410: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { CNSTI4 828 ADDRLP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 NEI4 $259 line 411 ;411: continue; ADDRGP4 $253 JUMPV LABELV $259 line 413 ;412: } ;413: if ( team >= 0 && cl->sess.sessionTeam != team ) { ADDRLP4 72 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 72 INDIRI4 CNSTI4 0 LTI4 $263 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 72 INDIRI4 EQI4 $263 line 414 ;414: continue; ADDRGP4 $253 JUMPV LABELV $263 line 416 ;415: } ;416: if ( !Q_stricmp( value, cl->pers.netname ) ) { ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 76 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 76 INDIRI4 CNSTI4 0 NEI4 $265 line 417 ;417: break; ADDRGP4 $254 JUMPV LABELV $265 line 419 ;418: } ;419: } LABELV $253 line 405 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $255 ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $252 LABELV $254 line 420 ;420: if (i >= g_maxclients.integer) { ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $267 line 421 ;421: num--; ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 422 ;422: if (num <= 0) { ADDRLP4 16 INDIRI4 CNSTI4 0 GTI4 $270 line 423 ;423: skill = trap_Cvar_VariableValue( "g_spSkill" ); ADDRGP4 $272 ARGP4 ADDRLP4 72 ADDRGP4 trap_Cvar_VariableValue CALLF4 ASGNF4 ADDRLP4 56 ADDRLP4 72 INDIRF4 ASGNF4 line 424 ;424: if (team == TEAM_RED) teamstr = "red"; ADDRFP4 0 INDIRI4 CNSTI4 1 NEI4 $273 ADDRLP4 60 ADDRGP4 $275 ASGNP4 ADDRGP4 $274 JUMPV LABELV $273 line 425 ;425: else if (team == TEAM_BLUE) teamstr = "blue"; ADDRFP4 0 INDIRI4 CNSTI4 2 NEI4 $276 ADDRLP4 60 ADDRGP4 $278 ASGNP4 ADDRGP4 $277 JUMPV LABELV $276 line 426 ;426: else teamstr = ""; ADDRLP4 60 ADDRGP4 $165 ASGNP4 LABELV $277 LABELV $274 line 427 ;427: strncpy(netname, value, sizeof(netname)-1); ADDRLP4 20 ARGP4 ADDRLP4 8 INDIRP4 ARGP4 CNSTI4 35 ARGI4 ADDRGP4 strncpy CALLP4 pop line 428 ;428: netname[sizeof(netname)-1] = '\0'; ADDRLP4 20+35 CNSTI1 0 ASGNI1 line 429 ;429: Q_CleanStr(netname); ADDRLP4 20 ARGP4 ADDRGP4 Q_CleanStr CALLP4 pop line 430 ;430: trap_SendConsoleCommand( EXEC_INSERT, va("addbot %s %f %s %i\n", netname, skill, teamstr, 0) ); ADDRGP4 $280 ARGP4 ADDRLP4 20 ARGP4 ADDRLP4 56 INDIRF4 ARGF4 ADDRLP4 60 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 76 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 1 ARGI4 ADDRLP4 76 INDIRP4 ARGP4 ADDRGP4 trap_SendConsoleCommand CALLV pop line 431 ;431: return; ADDRGP4 $224 JUMPV LABELV $270 line 433 ;432: } ;433: } LABELV $267 line 434 ;434: } LABELV $249 line 402 ADDRLP4 12 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $251 ADDRLP4 12 INDIRI4 ADDRGP4 g_numBots INDIRI4 LTI4 $248 line 435 ;435:} LABELV $224 endproc G_AddRandomBot 80 20 export G_RemoveRandomBot proc G_RemoveRandomBot 52 8 line 442 ;436: ;437:/* ;438:=============== ;439:G_RemoveRandomBot ;440:=============== ;441:*/ ;442:int G_RemoveRandomBot( int team ) { line 447 ;443: int i; ;444: char netname[36]; ;445: gclient_t *cl; ;446: ;447: for ( i=0 ; i< g_maxclients.integer ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 $285 JUMPV LABELV $282 line 448 ;448: cl = level.clients + i; ADDRLP4 0 CNSTI4 1756 ADDRLP4 4 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 449 ;449: if ( cl->pers.connected != CON_CONNECTED ) { ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $287 line 450 ;450: continue; ADDRGP4 $283 JUMPV LABELV $287 line 452 ;451: } ;452: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { CNSTI4 828 ADDRLP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 NEI4 $289 line 453 ;453: continue; ADDRGP4 $283 JUMPV LABELV $289 line 455 ;454: } ;455: if ( team >= 0 && cl->sess.sessionTeam != team ) { ADDRLP4 44 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 44 INDIRI4 CNSTI4 0 LTI4 $293 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 44 INDIRI4 EQI4 $293 line 456 ;456: continue; ADDRGP4 $283 JUMPV LABELV $293 line 458 ;457: } ;458: strcpy(netname, cl->pers.netname); ADDRLP4 8 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 459 ;459: Q_CleanStr(netname); ADDRLP4 8 ARGP4 ADDRGP4 Q_CleanStr CALLP4 pop line 460 ;460: trap_SendConsoleCommand( EXEC_INSERT, va("kick %s\n", netname) ); ADDRGP4 $295 ARGP4 ADDRLP4 8 ARGP4 ADDRLP4 48 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 1 ARGI4 ADDRLP4 48 INDIRP4 ARGP4 ADDRGP4 trap_SendConsoleCommand CALLV pop line 461 ;461: return qtrue; CNSTI4 1 RETI4 ADDRGP4 $281 JUMPV LABELV $283 line 447 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $285 ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $282 line 463 ;462: } ;463: return qfalse; CNSTI4 0 RETI4 LABELV $281 endproc G_RemoveRandomBot 52 8 export G_CountHumanPlayers proc G_CountHumanPlayers 16 0 line 471 ;464:} ;465: ;466:/* ;467:=============== ;468:G_CountHumanPlayers ;469:=============== ;470:*/ ;471:int G_CountHumanPlayers( int team ) { line 475 ;472: int i, num; ;473: gclient_t *cl; ;474: ;475: num = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 line 476 ;476: for ( i=0 ; i< g_maxclients.integer ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 $300 JUMPV LABELV $297 line 477 ;477: cl = level.clients + i; ADDRLP4 0 CNSTI4 1756 ADDRLP4 4 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 478 ;478: if ( cl->pers.connected != CON_CONNECTED ) { ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $302 line 479 ;479: continue; ADDRGP4 $298 JUMPV LABELV $302 line 481 ;480: } ;481: if ( g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT ) { CNSTI4 828 ADDRLP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $304 line 482 ;482: continue; ADDRGP4 $298 JUMPV LABELV $304 line 484 ;483: } ;484: if ( team >= 0 && cl->sess.sessionTeam != team ) { ADDRLP4 12 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 LTI4 $308 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 12 INDIRI4 EQI4 $308 line 485 ;485: continue; ADDRGP4 $298 JUMPV LABELV $308 line 487 ;486: } ;487: num++; ADDRLP4 8 ADDRLP4 8 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 488 ;488: } LABELV $298 line 476 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $300 ADDRLP4 4 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $297 line 489 ;489: return num; ADDRLP4 8 INDIRI4 RETI4 LABELV $296 endproc G_CountHumanPlayers 16 0 export G_CountBotPlayers proc G_CountBotPlayers 20 0 line 497 ;490:} ;491: ;492:/* ;493:=============== ;494:G_CountBotPlayers ;495:=============== ;496:*/ ;497:int G_CountBotPlayers( int team ) { line 501 ;498: int i, n, num; ;499: gclient_t *cl; ;500: ;501: num = 0; ADDRLP4 12 CNSTI4 0 ASGNI4 line 502 ;502: for ( i=0 ; i< g_maxclients.integer ; i++ ) { ADDRLP4 8 CNSTI4 0 ASGNI4 ADDRGP4 $314 JUMPV LABELV $311 line 503 ;503: cl = level.clients + i; ADDRLP4 4 CNSTI4 1756 ADDRLP4 8 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 504 ;504: if ( cl->pers.connected != CON_CONNECTED ) { ADDRLP4 4 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $316 line 505 ;505: continue; ADDRGP4 $312 JUMPV LABELV $316 line 507 ;506: } ;507: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { CNSTI4 828 ADDRLP4 4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 NEI4 $318 line 508 ;508: continue; ADDRGP4 $312 JUMPV LABELV $318 line 510 ;509: } ;510: if ( team >= 0 && cl->sess.sessionTeam != team ) { ADDRLP4 16 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 16 INDIRI4 CNSTI4 0 LTI4 $322 ADDRLP4 4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 16 INDIRI4 EQI4 $322 line 511 ;511: continue; ADDRGP4 $312 JUMPV LABELV $322 line 513 ;512: } ;513: num++; ADDRLP4 12 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 514 ;514: } LABELV $312 line 502 ADDRLP4 8 ADDRLP4 8 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $314 ADDRLP4 8 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $311 line 515 ;515: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $324 line 516 ;516: if( !botSpawnQueue[n].spawnTime ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 INDIRI4 CNSTI4 0 NEI4 $328 line 517 ;517: continue; ADDRGP4 $325 JUMPV LABELV $328 line 519 ;518: } ;519: if ( botSpawnQueue[n].spawnTime > level.time ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $331 line 520 ;520: continue; ADDRGP4 $325 JUMPV LABELV $331 line 522 ;521: } ;522: num++; ADDRLP4 12 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 523 ;523: } LABELV $325 line 515 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 16 LTI4 $324 line 524 ;524: return num; ADDRLP4 12 INDIRI4 RETI4 LABELV $310 endproc G_CountBotPlayers 20 0 bss align 4 LABELV $336 skip 4 export G_CheckMinimumPlayers code proc G_CheckMinimumPlayers 36 4 line 532 ;525:} ;526: ;527:/* ;528:=============== ;529:G_CheckMinimumPlayers ;530:=============== ;531:*/ ;532:void G_CheckMinimumPlayers( void ) { line 537 ;533: int minplayers; ;534: int humanplayers, botplayers; ;535: static int checkminimumplayers_time; ;536: ;537: if (level.intermissiontime) return; ADDRGP4 level+9008 INDIRI4 CNSTI4 0 EQI4 $337 ADDRGP4 $335 JUMPV LABELV $337 line 539 ;538: //only check once each 10 seconds ;539: if (checkminimumplayers_time > level.time - 10000) { ADDRGP4 $336 INDIRI4 ADDRGP4 level+32 INDIRI4 CNSTI4 10000 SUBI4 LEI4 $340 line 540 ;540: return; ADDRGP4 $335 JUMPV LABELV $340 line 542 ;541: } ;542: checkminimumplayers_time = level.time; ADDRGP4 $336 ADDRGP4 level+32 INDIRI4 ASGNI4 line 543 ;543: trap_Cvar_Update(&bot_minplayers); ADDRGP4 bot_minplayers ARGP4 ADDRGP4 trap_Cvar_Update CALLV pop line 544 ;544: minplayers = bot_minplayers.integer; ADDRLP4 0 ADDRGP4 bot_minplayers+12 INDIRI4 ASGNI4 line 545 ;545: if (minplayers <= 0) return; ADDRLP4 0 INDIRI4 CNSTI4 0 GTI4 $345 ADDRGP4 $335 JUMPV LABELV $345 line 547 ;546: ;547: if (g_gametype.integer >= GT_TEAM) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $347 line 548 ;548: if (minplayers >= g_maxclients.integer / 2) { ADDRLP4 0 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 CNSTI4 2 DIVI4 LTI4 $350 line 549 ;549: minplayers = (g_maxclients.integer / 2) -1; ADDRLP4 0 ADDRGP4 g_maxclients+12 INDIRI4 CNSTI4 2 DIVI4 CNSTI4 1 SUBI4 ASGNI4 line 550 ;550: } LABELV $350 line 552 ;551: ;552: humanplayers = G_CountHumanPlayers( TEAM_RED ); CNSTI4 1 ARGI4 ADDRLP4 12 ADDRGP4 G_CountHumanPlayers CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 line 553 ;553: botplayers = G_CountBotPlayers( TEAM_RED ); CNSTI4 1 ARGI4 ADDRLP4 16 ADDRGP4 G_CountBotPlayers CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 16 INDIRI4 ASGNI4 line 555 ;554: // ;555: if (humanplayers + botplayers < minplayers) { ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 GEI4 $354 line 556 ;556: G_AddRandomBot( TEAM_RED ); CNSTI4 1 ARGI4 ADDRGP4 G_AddRandomBot CALLV pop line 557 ;557: } else if (humanplayers + botplayers > minplayers && botplayers) { ADDRGP4 $355 JUMPV LABELV $354 ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 LEI4 $356 ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $356 line 558 ;558: G_RemoveRandomBot( TEAM_RED ); CNSTI4 1 ARGI4 ADDRGP4 G_RemoveRandomBot CALLI4 pop line 559 ;559: } LABELV $356 LABELV $355 line 561 ;560: // ;561: humanplayers = G_CountHumanPlayers( TEAM_BLUE ); CNSTI4 2 ARGI4 ADDRLP4 24 ADDRGP4 G_CountHumanPlayers CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 24 INDIRI4 ASGNI4 line 562 ;562: botplayers = G_CountBotPlayers( TEAM_BLUE ); CNSTI4 2 ARGI4 ADDRLP4 28 ADDRGP4 G_CountBotPlayers CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 28 INDIRI4 ASGNI4 line 564 ;563: // ;564: if (humanplayers + botplayers < minplayers) { ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 GEI4 $358 line 565 ;565: G_AddRandomBot( TEAM_BLUE ); CNSTI4 2 ARGI4 ADDRGP4 G_AddRandomBot CALLV pop line 566 ;566: } else if (humanplayers + botplayers > minplayers && botplayers) { ADDRGP4 $348 JUMPV LABELV $358 ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 LEI4 $348 ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $348 line 567 ;567: G_RemoveRandomBot( TEAM_BLUE ); CNSTI4 2 ARGI4 ADDRGP4 G_RemoveRandomBot CALLI4 pop line 568 ;568: } line 569 ;569: } ADDRGP4 $348 JUMPV LABELV $347 line 570 ;570: else if (g_gametype.integer == GT_TOURNAMENT ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 3 NEI4 $362 line 571 ;571: if (minplayers >= g_maxclients.integer) { ADDRLP4 0 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $365 line 572 ;572: minplayers = g_maxclients.integer-1; ADDRLP4 0 ADDRGP4 g_maxclients+12 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 573 ;573: } LABELV $365 line 574 ;574: humanplayers = G_CountHumanPlayers( -1 ); CNSTI4 -1 ARGI4 ADDRLP4 12 ADDRGP4 G_CountHumanPlayers CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 line 575 ;575: botplayers = G_CountBotPlayers( -1 ); CNSTI4 -1 ARGI4 ADDRLP4 16 ADDRGP4 G_CountBotPlayers CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 16 INDIRI4 ASGNI4 line 577 ;576: // ;577: if (humanplayers + botplayers < minplayers) { ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 GEI4 $369 line 578 ;578: G_AddRandomBot( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRGP4 G_AddRandomBot CALLV pop line 579 ;579: } else if (humanplayers + botplayers > minplayers && botplayers) { ADDRGP4 $363 JUMPV LABELV $369 ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 LEI4 $363 ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $363 line 581 ;580: // try to remove spectators first ;581: if (!G_RemoveRandomBot( TEAM_SPECTATOR )) { CNSTI4 3 ARGI4 ADDRLP4 24 ADDRGP4 G_RemoveRandomBot CALLI4 ASGNI4 ADDRLP4 24 INDIRI4 CNSTI4 0 NEI4 $363 line 583 ;582: // just remove the bot that is playing ;583: G_RemoveRandomBot( -1 ); CNSTI4 -1 ARGI4 ADDRGP4 G_RemoveRandomBot CALLI4 pop line 584 ;584: } line 585 ;585: } line 586 ;586: } ADDRGP4 $363 JUMPV LABELV $362 line 587 ;587: else if (g_gametype.integer == GT_FFA) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 0 NEI4 $375 line 588 ;588: if (minplayers >= g_maxclients.integer) { ADDRLP4 0 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $378 line 589 ;589: minplayers = g_maxclients.integer-1; ADDRLP4 0 ADDRGP4 g_maxclients+12 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 590 ;590: } LABELV $378 line 591 ;591: humanplayers = G_CountHumanPlayers( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRLP4 12 ADDRGP4 G_CountHumanPlayers CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 line 592 ;592: botplayers = G_CountBotPlayers( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRLP4 16 ADDRGP4 G_CountBotPlayers CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 16 INDIRI4 ASGNI4 line 594 ;593: // ;594: if (humanplayers + botplayers < minplayers) { ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 GEI4 $382 line 595 ;595: G_AddRandomBot( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRGP4 G_AddRandomBot CALLV pop line 596 ;596: } else if (humanplayers + botplayers > minplayers && botplayers) { ADDRGP4 $376 JUMPV LABELV $382 ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 LEI4 $376 ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $376 line 597 ;597: G_RemoveRandomBot( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRGP4 G_RemoveRandomBot CALLI4 pop line 598 ;598: } line 599 ;599: } ADDRGP4 $376 JUMPV LABELV $375 line 600 ;600: else if (g_gametype.integer == GT_HOLOCRON || g_gametype.integer == GT_JEDIMASTER) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 1 EQI4 $390 ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 2 NEI4 $386 LABELV $390 line 601 ;601: if (minplayers >= g_maxclients.integer) { ADDRLP4 0 INDIRI4 ADDRGP4 g_maxclients+12 INDIRI4 LTI4 $391 line 602 ;602: minplayers = g_maxclients.integer-1; ADDRLP4 0 ADDRGP4 g_maxclients+12 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 603 ;603: } LABELV $391 line 604 ;604: humanplayers = G_CountHumanPlayers( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRLP4 12 ADDRGP4 G_CountHumanPlayers CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 line 605 ;605: botplayers = G_CountBotPlayers( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRLP4 16 ADDRGP4 G_CountBotPlayers CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 16 INDIRI4 ASGNI4 line 607 ;606: // ;607: if (humanplayers + botplayers < minplayers) { ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 GEI4 $395 line 608 ;608: G_AddRandomBot( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRGP4 G_AddRandomBot CALLV pop line 609 ;609: } else if (humanplayers + botplayers > minplayers && botplayers) { ADDRGP4 $396 JUMPV LABELV $395 ADDRLP4 8 INDIRI4 ADDRLP4 4 INDIRI4 ADDI4 ADDRLP4 0 INDIRI4 LEI4 $397 ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $397 line 610 ;610: G_RemoveRandomBot( TEAM_FREE ); CNSTI4 0 ARGI4 ADDRGP4 G_RemoveRandomBot CALLI4 pop line 611 ;611: } LABELV $397 LABELV $396 line 612 ;612: } LABELV $386 LABELV $376 LABELV $363 LABELV $348 line 613 ;613:} LABELV $335 endproc G_CheckMinimumPlayers 36 4 export G_CheckBotSpawn proc G_CheckBotSpawn 1032 12 line 620 ;614: ;615:/* ;616:=============== ;617:G_CheckBotSpawn ;618:=============== ;619:*/ ;620:void G_CheckBotSpawn( void ) { line 624 ;621: int n; ;622: char userinfo[MAX_INFO_VALUE]; ;623: ;624: G_CheckMinimumPlayers(); ADDRGP4 G_CheckMinimumPlayers CALLV pop line 626 ;625: ;626: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $400 line 627 ;627: if( !botSpawnQueue[n].spawnTime ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 INDIRI4 CNSTI4 0 NEI4 $404 line 628 ;628: continue; ADDRGP4 $401 JUMPV LABELV $404 line 630 ;629: } ;630: if ( botSpawnQueue[n].spawnTime > level.time ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $407 line 631 ;631: continue; ADDRGP4 $401 JUMPV LABELV $407 line 633 ;632: } ;633: ClientBegin( botSpawnQueue[n].clientNum, qfalse ); ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue ADDP4 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 ClientBegin CALLV pop line 634 ;634: botSpawnQueue[n].spawnTime = 0; ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 CNSTI4 0 ASGNI4 line 636 ;635: ;636: if( g_gametype.integer == GT_SINGLE_PLAYER ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 4 NEI4 $412 line 637 ;637: trap_GetUserinfo( botSpawnQueue[n].clientNum, userinfo, sizeof(userinfo) ); ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue ADDP4 INDIRI4 ARGI4 ADDRLP4 4 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 638 ;638: PlayerIntroSound( Info_ValueForKey (userinfo, "model") ); ADDRLP4 4 ARGP4 ADDRGP4 $415 ARGP4 ADDRLP4 1028 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 PlayerIntroSound CALLV pop line 639 ;639: } LABELV $412 line 640 ;640: } LABELV $401 line 626 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 16 LTI4 $400 line 641 ;641:} LABELV $399 endproc G_CheckBotSpawn 1032 12 proc AddBotToSpawnQueue 4 8 line 649 ;642: ;643: ;644:/* ;645:=============== ;646:AddBotToSpawnQueue ;647:=============== ;648:*/ ;649:static void AddBotToSpawnQueue( int clientNum, int delay ) { line 652 ;650: int n; ;651: ;652: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $417 line 653 ;653: if( !botSpawnQueue[n].spawnTime ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 INDIRI4 CNSTI4 0 NEI4 $421 line 654 ;654: botSpawnQueue[n].spawnTime = level.time + delay; ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 ADDRGP4 level+32 INDIRI4 ADDRFP4 4 INDIRI4 ADDI4 ASGNI4 line 655 ;655: botSpawnQueue[n].clientNum = clientNum; ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue ADDP4 ADDRFP4 0 INDIRI4 ASGNI4 line 656 ;656: return; ADDRGP4 $416 JUMPV LABELV $421 line 658 ;657: } ;658: } LABELV $418 line 652 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 16 LTI4 $417 line 660 ;659: ;660: G_Printf( S_COLOR_YELLOW "Unable to delay spawn\n" ); ADDRGP4 $426 ARGP4 ADDRGP4 G_Printf CALLV pop line 661 ;661: ClientBegin( clientNum, qfalse ); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 ClientBegin CALLV pop line 662 ;662:} LABELV $416 endproc AddBotToSpawnQueue 4 8 export G_RemoveQueuedBotBegin proc G_RemoveQueuedBotBegin 4 0 line 673 ;663: ;664: ;665:/* ;666:=============== ;667:G_RemoveQueuedBotBegin ;668: ;669:Called on client disconnect to make sure the delayed spawn ;670:doesn't happen on a freed index ;671:=============== ;672:*/ ;673:void G_RemoveQueuedBotBegin( int clientNum ) { line 676 ;674: int n; ;675: ;676: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $428 line 677 ;677: if( botSpawnQueue[n].clientNum == clientNum ) { ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue ADDP4 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $432 line 678 ;678: botSpawnQueue[n].spawnTime = 0; ADDRLP4 0 INDIRI4 CNSTI4 3 LSHI4 ADDRGP4 botSpawnQueue+4 ADDP4 CNSTI4 0 ASGNI4 line 679 ;679: return; ADDRGP4 $427 JUMPV LABELV $432 line 681 ;680: } ;681: } LABELV $429 line 676 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 16 LTI4 $428 line 682 ;682:} LABELV $427 endproc G_RemoveQueuedBotBegin 4 0 export G_BotConnect proc G_BotConnect 1336 12 line 690 ;683: ;684: ;685:/* ;686:=============== ;687:G_BotConnect ;688:=============== ;689:*/ ;690:qboolean G_BotConnect( int clientNum, qboolean restart ) { line 694 ;691: bot_settings_t settings; ;692: char userinfo[MAX_INFO_STRING]; ;693: ;694: trap_GetUserinfo( clientNum, userinfo, sizeof(userinfo) ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 292 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 696 ;695: ;696: Q_strncpyz( settings.personalityfile, Info_ValueForKey( userinfo, "personality" ), sizeof(settings.personalityfile) ); ADDRLP4 292 ARGP4 ADDRGP4 $436 ARGP4 ADDRLP4 1316 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 0 ARGP4 ADDRLP4 1316 INDIRP4 ARGP4 CNSTI4 144 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 697 ;697: settings.skill = atof( Info_ValueForKey( userinfo, "skill" ) ); ADDRLP4 292 ARGP4 ADDRGP4 $438 ARGP4 ADDRLP4 1320 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1320 INDIRP4 ARGP4 ADDRLP4 1324 ADDRGP4 atof CALLF4 ASGNF4 ADDRLP4 0+144 ADDRLP4 1324 INDIRF4 ASGNF4 line 698 ;698: Q_strncpyz( settings.team, Info_ValueForKey( userinfo, "team" ), sizeof(settings.team) ); ADDRLP4 292 ARGP4 ADDRGP4 $440 ARGP4 ADDRLP4 1328 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 0+148 ARGP4 ADDRLP4 1328 INDIRP4 ARGP4 CNSTI4 144 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 700 ;699: ;700: if (!BotAISetupClient( clientNum, &settings, restart )) { ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 0 ARGP4 ADDRFP4 4 INDIRI4 ARGI4 ADDRLP4 1332 ADDRGP4 BotAISetupClient CALLI4 ASGNI4 ADDRLP4 1332 INDIRI4 CNSTI4 0 NEI4 $442 line 701 ;701: trap_DropClient( clientNum, "BotAISetupClient failed" ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 $444 ARGP4 ADDRGP4 trap_DropClient CALLV pop line 702 ;702: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $435 JUMPV LABELV $442 line 705 ;703: } ;704: ;705: return qtrue; CNSTI4 1 RETI4 LABELV $435 endproc G_BotConnect 1336 12 proc G_AddBot 1140 12 line 714 ;706:} ;707: ;708: ;709:/* ;710:=============== ;711:G_AddBot ;712:=============== ;713:*/ ;714:static void G_AddBot( const char *name, float skill, const char *team, int delay, char *altname) { line 724 ;715: int clientNum; ;716: char *botinfo; ;717: gentity_t *bot; ;718: char *key; ;719: char *s; ;720: char *botname; ;721: char *model; ;722:// char *headmodel; ;723: char userinfo[MAX_INFO_STRING]; ;724: int preTeam = 0; ADDRLP4 1052 CNSTI4 0 ASGNI4 line 727 ;725: ;726: // get the botinfo from bots.txt ;727: botinfo = G_GetBotInfoByName( name ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 1056 ADDRGP4 G_GetBotInfoByName CALLP4 ASGNP4 ADDRLP4 1032 ADDRLP4 1056 INDIRP4 ASGNP4 line 728 ;728: if ( !botinfo ) { ADDRLP4 1032 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $446 line 729 ;729: G_Printf( S_COLOR_RED "Error: Bot '%s' not defined\n", name ); ADDRGP4 $448 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_Printf CALLV pop line 730 ;730: return; ADDRGP4 $445 JUMPV LABELV $446 line 734 ;731: } ;732: ;733: // create the bot's userinfo ;734: userinfo[0] = '\0'; ADDRLP4 0 CNSTI1 0 ASGNI1 line 736 ;735: ;736: botname = Info_ValueForKey( botinfo, "funname" ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRGP4 $449 ARGP4 ADDRLP4 1060 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1048 ADDRLP4 1060 INDIRP4 ASGNP4 line 737 ;737: if( !botname[0] ) { ADDRLP4 1048 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $450 line 738 ;738: botname = Info_ValueForKey( botinfo, "name" ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 1064 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1048 ADDRLP4 1064 INDIRP4 ASGNP4 line 739 ;739: } LABELV $450 line 741 ;740: // check for an alternative name ;741: if (altname && altname[0]) { ADDRLP4 1064 ADDRFP4 16 INDIRP4 ASGNP4 ADDRLP4 1064 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $452 ADDRLP4 1064 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $452 line 742 ;742: botname = altname; ADDRLP4 1048 ADDRFP4 16 INDIRP4 ASGNP4 line 743 ;743: } LABELV $452 line 744 ;744: Info_SetValueForKey( userinfo, "name", botname ); ADDRLP4 0 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 1048 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 745 ;745: Info_SetValueForKey( userinfo, "rate", "25000" ); ADDRLP4 0 ARGP4 ADDRGP4 $454 ARGP4 ADDRGP4 $455 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 746 ;746: Info_SetValueForKey( userinfo, "snaps", "20" ); ADDRLP4 0 ARGP4 ADDRGP4 $456 ARGP4 ADDRGP4 $457 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 747 ;747: Info_SetValueForKey( userinfo, "skill", va("%1.2f", skill) ); ADDRGP4 $458 ARGP4 ADDRFP4 4 INDIRF4 ARGF4 ADDRLP4 1068 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 0 ARGP4 ADDRGP4 $438 ARGP4 ADDRLP4 1068 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 749 ;748: ;749: if ( skill >= 1 && skill < 2 ) { ADDRLP4 1072 ADDRFP4 4 INDIRF4 ASGNF4 ADDRLP4 1072 INDIRF4 CNSTF4 1065353216 LTF4 $459 ADDRLP4 1072 INDIRF4 CNSTF4 1073741824 GEF4 $459 line 750 ;750: Info_SetValueForKey( userinfo, "handicap", "50" ); ADDRLP4 0 ARGP4 ADDRGP4 $461 ARGP4 ADDRGP4 $462 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 751 ;751: } ADDRGP4 $460 JUMPV LABELV $459 line 752 ;752: else if ( skill >= 2 && skill < 3 ) { ADDRLP4 1076 ADDRFP4 4 INDIRF4 ASGNF4 ADDRLP4 1076 INDIRF4 CNSTF4 1073741824 LTF4 $463 ADDRLP4 1076 INDIRF4 CNSTF4 1077936128 GEF4 $463 line 753 ;753: Info_SetValueForKey( userinfo, "handicap", "70" ); ADDRLP4 0 ARGP4 ADDRGP4 $461 ARGP4 ADDRGP4 $465 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 754 ;754: } ADDRGP4 $464 JUMPV LABELV $463 line 755 ;755: else if ( skill >= 3 && skill < 4 ) { ADDRLP4 1080 ADDRFP4 4 INDIRF4 ASGNF4 ADDRLP4 1080 INDIRF4 CNSTF4 1077936128 LTF4 $466 ADDRLP4 1080 INDIRF4 CNSTF4 1082130432 GEF4 $466 line 756 ;756: Info_SetValueForKey( userinfo, "handicap", "90" ); ADDRLP4 0 ARGP4 ADDRGP4 $461 ARGP4 ADDRGP4 $468 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 757 ;757: } LABELV $466 LABELV $464 LABELV $460 line 759 ;758: ;759: key = "model"; ADDRLP4 1024 ADDRGP4 $415 ASGNP4 line 760 ;760: model = Info_ValueForKey( botinfo, key ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1084 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1044 ADDRLP4 1084 INDIRP4 ASGNP4 line 761 ;761: if ( !*model ) { ADDRLP4 1044 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $469 line 762 ;762: model = "visor/default"; ADDRLP4 1044 ADDRGP4 $471 ASGNP4 line 763 ;763: } LABELV $469 line 764 ;764: Info_SetValueForKey( userinfo, key, model ); ADDRLP4 0 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1044 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 765 ;765: key = "team_model"; ADDRLP4 1024 ADDRGP4 $472 ASGNP4 line 766 ;766: Info_SetValueForKey( userinfo, key, model ); ADDRLP4 0 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1044 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 777 ;767: ;768:/* key = "headmodel"; ;769: headmodel = Info_ValueForKey( botinfo, key ); ;770: if ( !*headmodel ) { ;771: headmodel = model; ;772: } ;773: Info_SetValueForKey( userinfo, key, headmodel ); ;774: key = "team_headmodel"; ;775: Info_SetValueForKey( userinfo, key, headmodel ); ;776:*/ ;777: key = "gender"; ADDRLP4 1024 ADDRGP4 $473 ASGNP4 line 778 ;778: s = Info_ValueForKey( botinfo, key ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1088 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 1088 INDIRP4 ASGNP4 line 779 ;779: if ( !*s ) { ADDRLP4 1028 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $474 line 780 ;780: s = "male"; ADDRLP4 1028 ADDRGP4 $476 ASGNP4 line 781 ;781: } LABELV $474 line 782 ;782: Info_SetValueForKey( userinfo, "sex", s ); ADDRLP4 0 ARGP4 ADDRGP4 $477 ARGP4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 784 ;783: ;784: key = "color1"; ADDRLP4 1024 ADDRGP4 $478 ASGNP4 line 785 ;785: s = Info_ValueForKey( botinfo, key ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1092 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 1092 INDIRP4 ASGNP4 line 786 ;786: if ( !*s ) { ADDRLP4 1028 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $479 line 787 ;787: s = "4"; ADDRLP4 1028 ADDRGP4 $481 ASGNP4 line 788 ;788: } LABELV $479 line 789 ;789: Info_SetValueForKey( userinfo, key, s ); ADDRLP4 0 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 791 ;790: ;791: key = "color2"; ADDRLP4 1024 ADDRGP4 $482 ASGNP4 line 792 ;792: s = Info_ValueForKey( botinfo, key ); ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1096 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 1096 INDIRP4 ASGNP4 line 793 ;793: if ( !*s ) { ADDRLP4 1028 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $483 line 794 ;794: s = "5"; ADDRLP4 1028 ADDRGP4 $485 ASGNP4 line 795 ;795: } LABELV $483 line 796 ;796: Info_SetValueForKey( userinfo, key, s ); ADDRLP4 0 ARGP4 ADDRLP4 1024 INDIRP4 ARGP4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 798 ;797: ;798: s = Info_ValueForKey(botinfo, "personality"); ADDRLP4 1032 INDIRP4 ARGP4 ADDRGP4 $436 ARGP4 ADDRLP4 1100 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 1100 INDIRP4 ASGNP4 line 799 ;799: if (!*s ) ADDRLP4 1028 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $486 line 800 ;800: { line 801 ;801: Info_SetValueForKey( userinfo, "personality", "botfiles/default.jkb" ); ADDRLP4 0 ARGP4 ADDRGP4 $436 ARGP4 ADDRGP4 $488 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 802 ;802: } ADDRGP4 $487 JUMPV LABELV $486 line 804 ;803: else ;804: { line 805 ;805: Info_SetValueForKey( userinfo, "personality", s ); ADDRLP4 0 ARGP4 ADDRGP4 $436 ARGP4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 806 ;806: } LABELV $487 line 809 ;807: ;808: // have the server allocate a client slot ;809: clientNum = trap_BotAllocateClient(); ADDRLP4 1104 ADDRGP4 trap_BotAllocateClient CALLI4 ASGNI4 ADDRLP4 1036 ADDRLP4 1104 INDIRI4 ASGNI4 line 810 ;810: if ( clientNum == -1 ) { ADDRLP4 1036 INDIRI4 CNSTI4 -1 NEI4 $489 line 813 ;811:// G_Printf( S_COLOR_RED "Unable to add bot. All player slots are in use.\n" ); ;812:// G_Printf( S_COLOR_RED "Start server with more 'open' slots.\n" ); ;813: trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "UNABLE_TO_ADD_BOT"))); ADDRGP4 $492 ARGP4 ADDRGP4 $493 ARGP4 ADDRLP4 1108 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $491 ARGP4 ADDRLP4 1108 INDIRP4 ARGP4 ADDRLP4 1112 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 1112 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 814 ;814: return; ADDRGP4 $445 JUMPV LABELV $489 line 818 ;815: } ;816: ;817: // initialize the bot settings ;818: if( !team || !*team ) { ADDRLP4 1108 ADDRFP4 8 INDIRP4 ASGNP4 ADDRLP4 1108 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $496 ADDRLP4 1108 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $494 LABELV $496 line 819 ;819: if( g_gametype.integer >= GT_TEAM ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $497 line 820 ;820: if( PickTeam(clientNum) == TEAM_RED) { ADDRLP4 1036 INDIRI4 ARGI4 ADDRLP4 1112 ADDRGP4 PickTeam CALLI4 ASGNI4 ADDRLP4 1112 INDIRI4 CNSTI4 1 NEI4 $500 line 821 ;821: team = "red"; ADDRFP4 8 ADDRGP4 $275 ASGNP4 line 822 ;822: } ADDRGP4 $498 JUMPV LABELV $500 line 823 ;823: else { line 824 ;824: team = "blue"; ADDRFP4 8 ADDRGP4 $278 ASGNP4 line 825 ;825: } line 826 ;826: } ADDRGP4 $498 JUMPV LABELV $497 line 827 ;827: else { line 828 ;828: team = "red"; ADDRFP4 8 ADDRGP4 $275 ASGNP4 line 829 ;829: } LABELV $498 line 830 ;830: } LABELV $494 line 832 ;831:// Info_SetValueForKey( userinfo, "characterfile", Info_ValueForKey( botinfo, "aifile" ) ); ;832: Info_SetValueForKey( userinfo, "skill", va( "%5.2f", skill ) ); ADDRGP4 $502 ARGP4 ADDRFP4 4 INDIRF4 ARGF4 ADDRLP4 1112 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 0 ARGP4 ADDRGP4 $438 ARGP4 ADDRLP4 1112 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 833 ;833: Info_SetValueForKey( userinfo, "team", team ); ADDRLP4 0 ARGP4 ADDRGP4 $440 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 835 ;834: ;835: bot = &g_entities[ clientNum ]; ADDRLP4 1040 CNSTI4 828 ADDRLP4 1036 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 836 ;836: bot->r.svFlags |= SVF_BOT; ADDRLP4 1116 ADDRLP4 1040 INDIRP4 CNSTI4 304 ADDP4 ASGNP4 ADDRLP4 1116 INDIRP4 ADDRLP4 1116 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 837 ;837: bot->inuse = qtrue; ADDRLP4 1040 INDIRP4 CNSTI4 412 ADDP4 CNSTI4 1 ASGNI4 line 840 ;838: ;839: // register the userinfo ;840: trap_SetUserinfo( clientNum, userinfo ); ADDRLP4 1036 INDIRI4 ARGI4 ADDRLP4 0 ARGP4 ADDRGP4 trap_SetUserinfo CALLV pop line 842 ;841: ;842: if (g_gametype.integer >= GT_TEAM) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $503 line 843 ;843: { line 844 ;844: if (team && Q_stricmp(team, "red") == 0) ADDRLP4 1120 ADDRFP4 8 INDIRP4 ASGNP4 ADDRLP4 1120 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $506 ADDRLP4 1120 INDIRP4 ARGP4 ADDRGP4 $275 ARGP4 ADDRLP4 1124 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 1124 INDIRI4 CNSTI4 0 NEI4 $506 line 845 ;845: { line 846 ;846: bot->client->sess.sessionTeam = TEAM_RED; ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 CNSTI4 1 ASGNI4 line 847 ;847: } ADDRGP4 $507 JUMPV LABELV $506 line 848 ;848: else if (team && Q_stricmp(team, "blue") == 0) ADDRLP4 1128 ADDRFP4 8 INDIRP4 ASGNP4 ADDRLP4 1128 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $508 ADDRLP4 1128 INDIRP4 ARGP4 ADDRGP4 $278 ARGP4 ADDRLP4 1132 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 1132 INDIRI4 CNSTI4 0 NEI4 $508 line 849 ;849: { line 850 ;850: bot->client->sess.sessionTeam = TEAM_BLUE; ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 CNSTI4 2 ASGNI4 line 851 ;851: } ADDRGP4 $509 JUMPV LABELV $508 line 853 ;852: else ;853: { line 854 ;854: bot->client->sess.sessionTeam = PickTeam( -1 ); CNSTI4 -1 ARGI4 ADDRLP4 1136 ADDRGP4 PickTeam CALLI4 ASGNI4 ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 ADDRLP4 1136 INDIRI4 ASGNI4 line 855 ;855: } LABELV $509 LABELV $507 line 856 ;856: } LABELV $503 line 858 ;857: ;858: preTeam = bot->client->sess.sessionTeam; ADDRLP4 1052 ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 861 ;859: ;860: // have it connect to the game as a normal client ;861: if ( ClientConnect( clientNum, qtrue, qtrue ) ) { ADDRLP4 1036 INDIRI4 ARGI4 ADDRLP4 1120 CNSTI4 1 ASGNI4 ADDRLP4 1120 INDIRI4 ARGI4 ADDRLP4 1120 INDIRI4 ARGI4 ADDRLP4 1124 ADDRGP4 ClientConnect CALLP4 ASGNP4 ADDRLP4 1124 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $510 line 862 ;862: return; ADDRGP4 $445 JUMPV LABELV $510 line 865 ;863: } ;864: ;865: if (bot->client->sess.sessionTeam != preTeam) ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRLP4 1052 INDIRI4 EQI4 $512 line 866 ;866: { line 867 ;867: trap_GetUserinfo(clientNum, userinfo, MAX_INFO_STRING); ADDRLP4 1036 INDIRI4 ARGI4 ADDRLP4 0 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 869 ;868: ;869: if (bot->client->sess.sessionTeam == TEAM_SPECTATOR) ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $514 line 870 ;870: { line 871 ;871: bot->client->sess.sessionTeam = preTeam; ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 ADDRLP4 1052 INDIRI4 ASGNI4 line 872 ;872: } LABELV $514 line 874 ;873: ;874: if (bot->client->sess.sessionTeam == TEAM_RED) ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 1 NEI4 $516 line 875 ;875: { line 876 ;876: team = "Red"; ADDRFP4 8 ADDRGP4 $518 ASGNP4 line 877 ;877: } ADDRGP4 $517 JUMPV LABELV $516 line 879 ;878: else ;879: { line 880 ;880: team = "Blue"; ADDRFP4 8 ADDRGP4 $519 ASGNP4 line 881 ;881: } LABELV $517 line 883 ;882: ;883: Info_SetValueForKey( userinfo, "team", team ); ADDRLP4 0 ARGP4 ADDRGP4 $440 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 885 ;884: ;885: trap_SetUserinfo( clientNum, userinfo ); ADDRLP4 1036 INDIRI4 ARGI4 ADDRLP4 0 ARGP4 ADDRGP4 trap_SetUserinfo CALLV pop line 887 ;886: ;887: bot->client->ps.persistant[ PERS_TEAM ] = bot->client->sess.sessionTeam; ADDRLP4 1128 ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 1128 INDIRP4 CNSTI4 292 ADDP4 ADDRLP4 1128 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 889 ;888: ;889: G_ReadSessionData( bot->client ); ADDRLP4 1040 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRGP4 G_ReadSessionData CALLV pop line 890 ;890: ClientUserinfoChanged( clientNum ); ADDRLP4 1036 INDIRI4 ARGI4 ADDRGP4 ClientUserinfoChanged CALLV pop line 891 ;891: } LABELV $512 line 893 ;892: ;893: if( delay == 0 ) { ADDRFP4 12 INDIRI4 CNSTI4 0 NEI4 $520 line 894 ;894: ClientBegin( clientNum, qfalse ); ADDRLP4 1036 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 ClientBegin CALLV pop line 895 ;895: return; ADDRGP4 $445 JUMPV LABELV $520 line 898 ;896: } ;897: ;898: AddBotToSpawnQueue( clientNum, delay ); ADDRLP4 1036 INDIRI4 ARGI4 ADDRFP4 12 INDIRI4 ARGI4 ADDRGP4 AddBotToSpawnQueue CALLV pop line 899 ;899:} LABELV $445 endproc G_AddBot 1140 12 export Svcmd_AddBot_f proc Svcmd_AddBot_f 4112 20 line 907 ;900: ;901: ;902:/* ;903:=============== ;904:Svcmd_AddBot_f ;905:=============== ;906:*/ ;907:void Svcmd_AddBot_f( void ) { line 916 ;908: float skill; ;909: int delay; ;910: char name[MAX_TOKEN_CHARS]; ;911: char altname[MAX_TOKEN_CHARS]; ;912: char string[MAX_TOKEN_CHARS]; ;913: char team[MAX_TOKEN_CHARS]; ;914: ;915: // are bots enabled? ;916: if ( !trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { ADDRGP4 $525 ARGP4 ADDRLP4 4104 ADDRGP4 trap_Cvar_VariableIntegerValue CALLI4 ASGNI4 ADDRLP4 4104 INDIRI4 CNSTI4 0 NEI4 $523 line 917 ;917: return; ADDRGP4 $522 JUMPV LABELV $523 line 921 ;918: } ;919: ;920: // name ;921: trap_Argv( 1, name, sizeof( name ) ); CNSTI4 1 ARGI4 ADDRLP4 1024 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_Argv CALLV pop line 922 ;922: if ( !name[0] ) { ADDRLP4 1024 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $526 line 923 ;923: trap_Printf( "Usage: Addbot [skill 1-5] [team] [msec delay] [altname]\n" ); ADDRGP4 $528 ARGP4 ADDRGP4 trap_Printf CALLV pop line 924 ;924: return; ADDRGP4 $522 JUMPV LABELV $526 line 928 ;925: } ;926: ;927: // skill ;928: trap_Argv( 2, string, sizeof( string ) ); CNSTI4 2 ARGI4 ADDRLP4 0 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_Argv CALLV pop line 929 ;929: if ( !string[0] ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $529 line 930 ;930: skill = 4; ADDRLP4 4096 CNSTF4 1082130432 ASGNF4 line 931 ;931: } ADDRGP4 $530 JUMPV LABELV $529 line 932 ;932: else { line 933 ;933: skill = atof( string ); ADDRLP4 0 ARGP4 ADDRLP4 4108 ADDRGP4 atof CALLF4 ASGNF4 ADDRLP4 4096 ADDRLP4 4108 INDIRF4 ASGNF4 line 934 ;934: } LABELV $530 line 937 ;935: ;936: // team ;937: trap_Argv( 3, team, sizeof( team ) ); CNSTI4 3 ARGI4 ADDRLP4 3072 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_Argv CALLV pop line 940 ;938: ;939: // delay ;940: trap_Argv( 4, string, sizeof( string ) ); CNSTI4 4 ARGI4 ADDRLP4 0 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_Argv CALLV pop line 941 ;941: if ( !string[0] ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $531 line 942 ;942: delay = 0; ADDRLP4 4100 CNSTI4 0 ASGNI4 line 943 ;943: } ADDRGP4 $532 JUMPV LABELV $531 line 944 ;944: else { line 945 ;945: delay = atoi( string ); ADDRLP4 0 ARGP4 ADDRLP4 4108 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 4100 ADDRLP4 4108 INDIRI4 ASGNI4 line 946 ;946: } LABELV $532 line 949 ;947: ;948: // alternative name ;949: trap_Argv( 5, altname, sizeof( altname ) ); CNSTI4 5 ARGI4 ADDRLP4 2048 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_Argv CALLV pop line 951 ;950: ;951: G_AddBot( name, skill, team, delay, altname ); ADDRLP4 1024 ARGP4 ADDRLP4 4096 INDIRF4 ARGF4 ADDRLP4 3072 ARGP4 ADDRLP4 4100 INDIRI4 ARGI4 ADDRLP4 2048 ARGP4 ADDRGP4 G_AddBot CALLV pop line 955 ;952: ;953: // if this was issued during gameplay and we are playing locally, ;954: // go ahead and load the bot's media immediately ;955: if ( level.time - level.startTime > 1000 && ADDRGP4 level+32 INDIRI4 ADDRGP4 level+40 INDIRI4 SUBI4 CNSTI4 1000 LEI4 $533 ADDRGP4 $537 ARGP4 ADDRLP4 4108 ADDRGP4 trap_Cvar_VariableIntegerValue CALLI4 ASGNI4 ADDRLP4 4108 INDIRI4 CNSTI4 0 EQI4 $533 line 956 ;956: trap_Cvar_VariableIntegerValue( "cl_running" ) ) { line 957 ;957: trap_SendServerCommand( -1, "loaddefered\n" ); // FIXME: spelled wrong, but not changing for demo CNSTI4 -1 ARGI4 ADDRGP4 $538 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 958 ;958: } LABELV $533 line 959 ;959:} LABELV $522 endproc Svcmd_AddBot_f 4112 20 export Svcmd_BotList_f proc Svcmd_BotList_f 4120 20 line 966 ;960: ;961:/* ;962:=============== ;963:Svcmd_BotList_f ;964:=============== ;965:*/ ;966:void Svcmd_BotList_f( void ) { line 973 ;967: int i; ;968: char name[MAX_TOKEN_CHARS]; ;969: char funname[MAX_TOKEN_CHARS]; ;970: char model[MAX_TOKEN_CHARS]; ;971: char personality[MAX_TOKEN_CHARS]; ;972: ;973: trap_Printf("^1name model personality funname\n"); ADDRGP4 $540 ARGP4 ADDRGP4 trap_Printf CALLV pop line 974 ;974: for (i = 0; i < g_numBots; i++) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $544 JUMPV LABELV $541 line 975 ;975: strcpy(name, Info_ValueForKey( g_botInfos[i], "name" )); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 4100 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ARGP4 ADDRLP4 4100 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 976 ;976: if ( !*name ) { ADDRLP4 4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $545 line 977 ;977: strcpy(name, "Padawan"); ADDRLP4 4 ARGP4 ADDRGP4 $547 ARGP4 ADDRGP4 strcpy CALLP4 pop line 978 ;978: } LABELV $545 line 979 ;979: strcpy(funname, Info_ValueForKey( g_botInfos[i], "funname" )); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $449 ARGP4 ADDRLP4 4104 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ARGP4 ADDRLP4 4104 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 980 ;980: if ( !*funname ) { ADDRLP4 1028 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $548 line 981 ;981: strcpy(funname, ""); ADDRLP4 1028 ARGP4 ADDRGP4 $165 ARGP4 ADDRGP4 strcpy CALLP4 pop line 982 ;982: } LABELV $548 line 983 ;983: strcpy(model, Info_ValueForKey( g_botInfos[i], "model" )); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $415 ARGP4 ADDRLP4 4108 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 2052 ARGP4 ADDRLP4 4108 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 984 ;984: if ( !*model ) { ADDRLP4 2052 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $550 line 985 ;985: strcpy(model, "visor/default"); ADDRLP4 2052 ARGP4 ADDRGP4 $471 ARGP4 ADDRGP4 strcpy CALLP4 pop line 986 ;986: } LABELV $550 line 987 ;987: strcpy(personality, Info_ValueForKey( g_botInfos[i], "personality")); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $436 ARGP4 ADDRLP4 4112 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 3076 ARGP4 ADDRLP4 4112 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 988 ;988: if (!*personality ) { ADDRLP4 3076 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $552 line 989 ;989: strcpy(personality, "botfiles/default.jkb"); ADDRLP4 3076 ARGP4 ADDRGP4 $488 ARGP4 ADDRGP4 strcpy CALLP4 pop line 990 ;990: } LABELV $552 line 991 ;991: trap_Printf(va("%-16s %-16s %-20s %-20s\n", name, model, personality, funname)); ADDRGP4 $554 ARGP4 ADDRLP4 4 ARGP4 ADDRLP4 2052 ARGP4 ADDRLP4 3076 ARGP4 ADDRLP4 1028 ARGP4 ADDRLP4 4116 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 4116 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 992 ;992: } LABELV $542 line 974 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $544 ADDRLP4 0 INDIRI4 ADDRGP4 g_numBots INDIRI4 LTI4 $541 line 993 ;993:} LABELV $539 endproc Svcmd_BotList_f 4120 20 proc G_SpawnBots 1056 16 line 1001 ;994: ;995: ;996:/* ;997:=============== ;998:G_SpawnBots ;999:=============== ;1000:*/ ;1001:static void G_SpawnBots( char *botList, int baseDelay ) { line 1008 ;1002: char *bot; ;1003: char *p; ;1004: float skill; ;1005: int delay; ;1006: char bots[MAX_INFO_VALUE]; ;1007: ;1008: podium1 = NULL; ADDRGP4 podium1 CNSTP4 0 ASGNP4 line 1009 ;1009: podium2 = NULL; ADDRGP4 podium2 CNSTP4 0 ASGNP4 line 1010 ;1010: podium3 = NULL; ADDRGP4 podium3 CNSTP4 0 ASGNP4 line 1012 ;1011: ;1012: skill = trap_Cvar_VariableValue( "g_spSkill" ); ADDRGP4 $272 ARGP4 ADDRLP4 1040 ADDRGP4 trap_Cvar_VariableValue CALLF4 ASGNF4 ADDRLP4 12 ADDRLP4 1040 INDIRF4 ASGNF4 line 1013 ;1013: if( skill < 1 ) { ADDRLP4 12 INDIRF4 CNSTF4 1065353216 GEF4 $556 line 1014 ;1014: trap_Cvar_Set( "g_spSkill", "1" ); ADDRGP4 $272 ARGP4 ADDRGP4 $558 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1015 ;1015: skill = 1; ADDRLP4 12 CNSTF4 1065353216 ASGNF4 line 1016 ;1016: } ADDRGP4 $557 JUMPV LABELV $556 line 1017 ;1017: else if ( skill > 5 ) { ADDRLP4 12 INDIRF4 CNSTF4 1084227584 LEF4 $559 line 1018 ;1018: trap_Cvar_Set( "g_spSkill", "5" ); ADDRGP4 $272 ARGP4 ADDRGP4 $485 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1019 ;1019: skill = 5; ADDRLP4 12 CNSTF4 1084227584 ASGNF4 line 1020 ;1020: } LABELV $559 LABELV $557 line 1022 ;1021: ;1022: Q_strncpyz( bots, botList, sizeof(bots) ); ADDRLP4 16 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1023 ;1023: p = &bots[0]; ADDRLP4 0 ADDRLP4 16 ASGNP4 line 1024 ;1024: delay = baseDelay; ADDRLP4 4 ADDRFP4 4 INDIRI4 ASGNI4 ADDRGP4 $562 JUMPV line 1025 ;1025: while( *p ) { LABELV $564 line 1027 ;1026: //skip spaces ;1027: while( *p && *p == ' ' ) { line 1028 ;1028: p++; ADDRLP4 0 ADDRLP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 1029 ;1029: } LABELV $565 line 1027 ADDRLP4 1044 ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 1044 INDIRI4 CNSTI4 0 EQI4 $567 ADDRLP4 1044 INDIRI4 CNSTI4 32 EQI4 $564 LABELV $567 line 1030 ;1030: if( !p ) { ADDRLP4 0 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $568 line 1031 ;1031: break; ADDRGP4 $563 JUMPV LABELV $568 line 1035 ;1032: } ;1033: ;1034: // mark start of bot name ;1035: bot = p; ADDRLP4 8 ADDRLP4 0 INDIRP4 ASGNP4 ADDRGP4 $571 JUMPV LABELV $570 line 1038 ;1036: ;1037: // skip until space of null ;1038: while( *p && *p != ' ' ) { line 1039 ;1039: p++; ADDRLP4 0 ADDRLP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 1040 ;1040: } LABELV $571 line 1038 ADDRLP4 1048 ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 1048 INDIRI4 CNSTI4 0 EQI4 $573 ADDRLP4 1048 INDIRI4 CNSTI4 32 NEI4 $570 LABELV $573 line 1041 ;1041: if( *p ) { ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $574 line 1042 ;1042: *p++ = 0; ADDRLP4 1052 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 1052 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 1052 INDIRP4 CNSTI1 0 ASGNI1 line 1043 ;1043: } LABELV $574 line 1047 ;1044: ;1045: // we must add the bot this way, calling G_AddBot directly at this stage ;1046: // does "Bad Things" ;1047: trap_SendConsoleCommand( EXEC_INSERT, va("addbot %s %f free %i\n", bot, skill, delay) ); ADDRGP4 $576 ARGP4 ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 12 INDIRF4 ARGF4 ADDRLP4 4 INDIRI4 ARGI4 ADDRLP4 1052 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 1 ARGI4 ADDRLP4 1052 INDIRP4 ARGP4 ADDRGP4 trap_SendConsoleCommand CALLV pop line 1049 ;1048: ;1049: delay += BOT_BEGIN_DELAY_INCREMENT; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1500 ADDI4 ASGNI4 line 1050 ;1050: } LABELV $562 line 1025 ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $565 LABELV $563 line 1051 ;1051:} LABELV $555 endproc G_SpawnBots 1056 16 proc G_LoadBotsFromFile 8216 16 line 1059 ;1052: ;1053: ;1054:/* ;1055:=============== ;1056:G_LoadBotsFromFile ;1057:=============== ;1058:*/ ;1059:static void G_LoadBotsFromFile( char *filename ) { line 1064 ;1060: int len; ;1061: fileHandle_t f; ;1062: char buf[MAX_BOTS_TEXT]; ;1063: ;1064: len = trap_FS_FOpenFile( filename, &f, FS_READ ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 4 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 8200 ADDRGP4 trap_FS_FOpenFile CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 8200 INDIRI4 ASGNI4 line 1065 ;1065: if ( !f ) { ADDRLP4 4 INDIRI4 CNSTI4 0 NEI4 $578 line 1066 ;1066: trap_Printf( va( S_COLOR_RED "file not found: %s\n", filename ) ); ADDRGP4 $112 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8204 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 8204 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 1067 ;1067: return; ADDRGP4 $577 JUMPV LABELV $578 line 1069 ;1068: } ;1069: if ( len >= MAX_BOTS_TEXT ) { ADDRLP4 0 INDIRI4 CNSTI4 8192 LTI4 $580 line 1070 ;1070: trap_Printf( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_BOTS_TEXT ) ); ADDRGP4 $115 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 CNSTI4 8192 ARGI4 ADDRLP4 8204 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 8204 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 1071 ;1071: trap_FS_FCloseFile( f ); ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_FCloseFile CALLV pop line 1072 ;1072: return; ADDRGP4 $577 JUMPV LABELV $580 line 1075 ;1073: } ;1074: ;1075: trap_FS_Read( buf, len, f ); ADDRLP4 8 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_Read CALLV pop line 1076 ;1076: buf[len] = 0; ADDRLP4 0 INDIRI4 ADDRLP4 8 ADDP4 CNSTI1 0 ASGNI1 line 1077 ;1077: trap_FS_FCloseFile( f ); ADDRLP4 4 INDIRI4 ARGI4 ADDRGP4 trap_FS_FCloseFile CALLV pop line 1079 ;1078: ;1079: g_numBots += G_ParseInfos( buf, MAX_BOTS - g_numBots, &g_botInfos[g_numBots] ); ADDRLP4 8 ARGP4 ADDRLP4 8204 ADDRGP4 g_numBots ASGNP4 ADDRLP4 8208 ADDRLP4 8204 INDIRP4 INDIRI4 ASGNI4 CNSTI4 1024 ADDRLP4 8208 INDIRI4 SUBI4 ARGI4 ADDRLP4 8208 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 ARGP4 ADDRLP4 8212 ADDRGP4 G_ParseInfos CALLI4 ASGNI4 ADDRLP4 8204 INDIRP4 ADDRLP4 8208 INDIRI4 ADDRLP4 8212 INDIRI4 ADDI4 ASGNI4 line 1080 ;1080:} LABELV $577 endproc G_LoadBotsFromFile 8216 16 proc G_LoadBots 1456 16 line 1087 ;1081: ;1082:/* ;1083:=============== ;1084:G_LoadBots ;1085:=============== ;1086:*/ ;1087:static void G_LoadBots( void ) { line 1096 ;1088: vmCvar_t botsFile; ;1089: int numdirs; ;1090: char filename[128]; ;1091: char dirlist[1024]; ;1092: char* dirptr; ;1093: int i; ;1094: int dirlen; ;1095: ;1096: if ( !trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { ADDRGP4 $525 ARGP4 ADDRLP4 1440 ADDRGP4 trap_Cvar_VariableIntegerValue CALLI4 ASGNI4 ADDRLP4 1440 INDIRI4 CNSTI4 0 NEI4 $583 line 1097 ;1097: return; ADDRGP4 $582 JUMPV LABELV $583 line 1100 ;1098: } ;1099: ;1100: g_numBots = 0; ADDRGP4 g_numBots CNSTI4 0 ASGNI4 line 1102 ;1101: ;1102: trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT|CVAR_ROM ); ADDRLP4 144 ARGP4 ADDRGP4 $585 ARGP4 ADDRGP4 $165 ARGP4 CNSTI4 80 ARGI4 ADDRGP4 trap_Cvar_Register CALLV pop line 1103 ;1103: if( *botsFile.string ) { ADDRLP4 144+16 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $586 line 1104 ;1104: G_LoadBotsFromFile(botsFile.string); ADDRLP4 144+16 ARGP4 ADDRGP4 G_LoadBotsFromFile CALLV pop line 1105 ;1105: } ADDRGP4 $587 JUMPV LABELV $586 line 1106 ;1106: else { line 1108 ;1107: //G_LoadBotsFromFile("scripts/bots.txt"); ;1108: G_LoadBotsFromFile("botfiles/bots.txt"); ADDRGP4 $590 ARGP4 ADDRGP4 G_LoadBotsFromFile CALLV pop line 1109 ;1109: } LABELV $587 line 1112 ;1110: ;1111: // get all bots from .bot files ;1112: numdirs = trap_FS_GetFileList("scripts", ".bot", dirlist, 1024 ); ADDRGP4 $195 ARGP4 ADDRGP4 $591 ARGP4 ADDRLP4 416 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 1444 ADDRGP4 trap_FS_GetFileList CALLI4 ASGNI4 ADDRLP4 140 ADDRLP4 1444 INDIRI4 ASGNI4 line 1113 ;1113: dirptr = dirlist; ADDRLP4 0 ADDRLP4 416 ASGNP4 line 1114 ;1114: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { ADDRLP4 132 CNSTI4 0 ASGNI4 ADDRGP4 $595 JUMPV LABELV $592 line 1115 ;1115: dirlen = strlen(dirptr); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 1448 ADDRGP4 strlen CALLI4 ASGNI4 ADDRLP4 136 ADDRLP4 1448 INDIRI4 ASGNI4 line 1116 ;1116: strcpy(filename, "scripts/"); ADDRLP4 4 ARGP4 ADDRGP4 $201 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1117 ;1117: strcat(filename, dirptr); ADDRLP4 4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 strcat CALLP4 pop line 1118 ;1118: G_LoadBotsFromFile(filename); ADDRLP4 4 ARGP4 ADDRGP4 G_LoadBotsFromFile CALLV pop line 1119 ;1119: } LABELV $593 line 1114 ADDRLP4 1448 CNSTI4 1 ASGNI4 ADDRLP4 132 ADDRLP4 132 INDIRI4 ADDRLP4 1448 INDIRI4 ADDI4 ASGNI4 ADDRLP4 0 ADDRLP4 136 INDIRI4 ADDRLP4 1448 INDIRI4 ADDI4 ADDRLP4 0 INDIRP4 ADDP4 ASGNP4 LABELV $595 ADDRLP4 132 INDIRI4 ADDRLP4 140 INDIRI4 LTI4 $592 line 1120 ;1120: trap_Printf( va( "%i bots parsed\n", g_numBots ) ); ADDRGP4 $596 ARGP4 ADDRGP4 g_numBots INDIRI4 ARGI4 ADDRLP4 1452 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 1452 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 1121 ;1121:} LABELV $582 endproc G_LoadBots 1456 16 export G_GetBotInfoByNumber proc G_GetBotInfoByNumber 8 8 line 1130 ;1122: ;1123: ;1124: ;1125:/* ;1126:=============== ;1127:G_GetBotInfoByNumber ;1128:=============== ;1129:*/ ;1130:char *G_GetBotInfoByNumber( int num ) { line 1131 ;1131: if( num < 0 || num >= g_numBots ) { ADDRLP4 0 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 0 LTI4 $600 ADDRLP4 0 INDIRI4 ADDRGP4 g_numBots INDIRI4 LTI4 $598 LABELV $600 line 1132 ;1132: trap_Printf( va( S_COLOR_RED "Invalid bot number: %i\n", num ) ); ADDRGP4 $601 ARGP4 ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 4 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 trap_Printf CALLV pop line 1133 ;1133: return NULL; CNSTP4 0 RETP4 ADDRGP4 $597 JUMPV LABELV $598 line 1135 ;1134: } ;1135: return g_botInfos[num]; ADDRFP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 RETP4 LABELV $597 endproc G_GetBotInfoByNumber 8 8 export G_GetBotInfoByName proc G_GetBotInfoByName 16 8 line 1144 ;1136:} ;1137: ;1138: ;1139:/* ;1140:=============== ;1141:G_GetBotInfoByName ;1142:=============== ;1143:*/ ;1144:char *G_GetBotInfoByName( const char *name ) { line 1148 ;1145: int n; ;1146: char *value; ;1147: ;1148: for ( n = 0; n < g_numBots ; n++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $606 JUMPV LABELV $603 line 1149 ;1149: value = Info_ValueForKey( g_botInfos[n], "name" ); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 ARGP4 ADDRGP4 $229 ARGP4 ADDRLP4 8 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 8 INDIRP4 ASGNP4 line 1150 ;1150: if ( !Q_stricmp( value, name ) ) { ADDRLP4 4 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 12 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 NEI4 $607 line 1151 ;1151: return g_botInfos[n]; ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 g_botInfos ADDP4 INDIRP4 RETP4 ADDRGP4 $602 JUMPV LABELV $607 line 1153 ;1152: } ;1153: } LABELV $604 line 1148 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $606 ADDRLP4 0 INDIRI4 ADDRGP4 g_numBots INDIRI4 LTI4 $603 line 1155 ;1154: ;1155: return NULL; CNSTP4 0 RETP4 LABELV $602 endproc G_GetBotInfoByName 16 8 export G_InitBots proc G_InitBots 1148 16 line 1167 ;1156:} ;1157: ;1158://rww - pd ;1159:void LoadPath_ThisLevel(void); ;1160://end rww ;1161: ;1162:/* ;1163:=============== ;1164:G_InitBots ;1165:=============== ;1166:*/ ;1167:void G_InitBots( qboolean restart ) { line 1176 ;1168: int fragLimit; ;1169: int timeLimit; ;1170: const char *arenainfo; ;1171: char *strValue; ;1172: int basedelay; ;1173: char map[MAX_QPATH]; ;1174: char serverinfo[MAX_INFO_STRING]; ;1175: ;1176: G_LoadBots(); ADDRGP4 G_LoadBots CALLV pop line 1177 ;1177: G_LoadArenas(); ADDRGP4 G_LoadArenas CALLV pop line 1179 ;1178: ;1179: trap_Cvar_Register( &bot_minplayers, "bot_minplayers", "0", CVAR_SERVERINFO ); ADDRGP4 bot_minplayers ARGP4 ADDRGP4 $610 ARGP4 ADDRGP4 $611 ARGP4 CNSTI4 4 ARGI4 ADDRGP4 trap_Cvar_Register CALLV pop line 1182 ;1180: ;1181: //rww - new bot route stuff ;1182: LoadPath_ThisLevel(); ADDRGP4 LoadPath_ThisLevel CALLV pop line 1185 ;1183: //end rww ;1184: ;1185: if( g_gametype.integer == GT_SINGLE_PLAYER ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 4 NEI4 $612 line 1186 ;1186: trap_GetServerinfo( serverinfo, sizeof(serverinfo) ); ADDRLP4 80 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetServerinfo CALLV pop line 1187 ;1187: Q_strncpyz( map, Info_ValueForKey( serverinfo, "mapname" ), sizeof(map) ); ADDRLP4 80 ARGP4 ADDRGP4 $164 ARGP4 ADDRLP4 1108 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 16 ARGP4 ADDRLP4 1108 INDIRP4 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1188 ;1188: arenainfo = G_GetArenaInfoByMap( map ); ADDRLP4 16 ARGP4 ADDRLP4 1112 ADDRGP4 G_GetArenaInfoByMap CALLP4 ASGNP4 ADDRLP4 4 ADDRLP4 1112 INDIRP4 ASGNP4 line 1189 ;1189: if ( !arenainfo ) { ADDRLP4 4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $615 line 1190 ;1190: return; ADDRGP4 $609 JUMPV LABELV $615 line 1193 ;1191: } ;1192: ;1193: strValue = Info_ValueForKey( arenainfo, "fraglimit" ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 $617 ARGP4 ADDRLP4 1116 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 1116 INDIRP4 ASGNP4 line 1194 ;1194: fragLimit = atoi( strValue ); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 1120 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 1120 INDIRI4 ASGNI4 line 1195 ;1195: if ( fragLimit ) { ADDRLP4 8 INDIRI4 CNSTI4 0 EQI4 $618 line 1196 ;1196: trap_Cvar_Set( "fraglimit", strValue ); ADDRGP4 $617 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1197 ;1197: } ADDRGP4 $619 JUMPV LABELV $618 line 1198 ;1198: else { line 1199 ;1199: trap_Cvar_Set( "fraglimit", "0" ); ADDRGP4 $617 ARGP4 ADDRGP4 $611 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1200 ;1200: } LABELV $619 line 1202 ;1201: ;1202: strValue = Info_ValueForKey( arenainfo, "timelimit" ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 $620 ARGP4 ADDRLP4 1124 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 1124 INDIRP4 ASGNP4 line 1203 ;1203: timeLimit = atoi( strValue ); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 1128 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 1128 INDIRI4 ASGNI4 line 1204 ;1204: if ( timeLimit ) { ADDRLP4 12 INDIRI4 CNSTI4 0 EQI4 $621 line 1205 ;1205: trap_Cvar_Set( "timelimit", strValue ); ADDRGP4 $620 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1206 ;1206: } ADDRGP4 $622 JUMPV LABELV $621 line 1207 ;1207: else { line 1208 ;1208: trap_Cvar_Set( "timelimit", "0" ); ADDRGP4 $620 ARGP4 ADDRGP4 $611 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1209 ;1209: } LABELV $622 line 1211 ;1210: ;1211: if ( !fragLimit && !timeLimit ) { ADDRLP4 1132 CNSTI4 0 ASGNI4 ADDRLP4 8 INDIRI4 ADDRLP4 1132 INDIRI4 NEI4 $623 ADDRLP4 12 INDIRI4 ADDRLP4 1132 INDIRI4 NEI4 $623 line 1212 ;1212: trap_Cvar_Set( "fraglimit", "10" ); ADDRGP4 $617 ARGP4 ADDRGP4 $625 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1213 ;1213: trap_Cvar_Set( "timelimit", "0" ); ADDRGP4 $620 ARGP4 ADDRGP4 $611 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1214 ;1214: } LABELV $623 line 1216 ;1215: ;1216: basedelay = BOT_BEGIN_DELAY_BASE; ADDRLP4 1104 CNSTI4 2000 ASGNI4 line 1217 ;1217: strValue = Info_ValueForKey( arenainfo, "special" ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 $626 ARGP4 ADDRLP4 1136 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 1136 INDIRP4 ASGNP4 line 1218 ;1218: if( Q_stricmp( strValue, "training" ) == 0 ) { ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 $629 ARGP4 ADDRLP4 1140 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 1140 INDIRI4 CNSTI4 0 NEI4 $627 line 1219 ;1219: basedelay += 10000; ADDRLP4 1104 ADDRLP4 1104 INDIRI4 CNSTI4 10000 ADDI4 ASGNI4 line 1220 ;1220: } LABELV $627 line 1222 ;1221: ;1222: if( !restart ) { ADDRFP4 0 INDIRI4 CNSTI4 0 NEI4 $630 line 1223 ;1223: G_SpawnBots( Info_ValueForKey( arenainfo, "bots" ), basedelay ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 $632 ARGP4 ADDRLP4 1144 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1144 INDIRP4 ARGP4 ADDRLP4 1104 INDIRI4 ARGI4 ADDRGP4 G_SpawnBots CALLV pop line 1224 ;1224: } LABELV $630 line 1225 ;1225: } LABELV $612 line 1226 ;1226:} LABELV $609 endproc G_InitBots 1148 16 import LoadPath_ThisLevel import podium3 import podium2 import podium1 bss export bot_minplayers align 4 LABELV bot_minplayers skip 272 align 4 LABELV botSpawnQueue skip 128 align 4 LABELV g_arenaInfos skip 4096 export g_numArenas align 4 LABELV g_numArenas skip 4 align 4 LABELV g_botInfos skip 4096 align 4 LABELV g_numBots skip 4 import trap_ROFF_Purge_Ent import trap_ROFF_Play import trap_ROFF_Cache import trap_ROFF_UpdateEntities import trap_ROFF_Clean import trap_SP_GetStringTextString import trap_SP_Register import trap_SP_RegisterServer import trap_SnapVector import trap_GeneticParentsAndChildSelection import trap_BotResetWeaponState import trap_BotFreeWeaponState import trap_BotAllocWeaponState import trap_BotLoadWeaponWeights import trap_BotGetWeaponInfo import trap_BotChooseBestFightWeapon import trap_BotAddAvoidSpot import trap_BotInitMoveState import trap_BotFreeMoveState import trap_BotAllocMoveState import trap_BotPredictVisiblePosition import trap_BotMovementViewTarget import trap_BotReachabilityArea import trap_BotResetLastAvoidReach import trap_BotResetAvoidReach import trap_BotMoveInDirection import trap_BotMoveToGoal import trap_BotResetMoveState import trap_BotFreeGoalState import trap_BotAllocGoalState import trap_BotMutateGoalFuzzyLogic import trap_BotSaveGoalFuzzyLogic import trap_BotInterbreedGoalFuzzyLogic import trap_BotFreeItemWeights import trap_BotLoadItemWeights import trap_BotUpdateEntityItems import trap_BotInitLevelItems import trap_BotSetAvoidGoalTime import trap_BotAvoidGoalTime import trap_BotGetLevelItemGoal import trap_BotGetMapLocationGoal import trap_BotGetNextCampSpotGoal import trap_BotItemGoalInVisButNotVisible import trap_BotTouchingGoal import trap_BotChooseNBGItem import trap_BotChooseLTGItem import trap_BotGetSecondGoal import trap_BotGetTopGoal import trap_BotGoalName import trap_BotDumpGoalStack import trap_BotDumpAvoidGoals import trap_BotEmptyGoalStack import trap_BotPopGoal import trap_BotPushGoal import trap_BotResetAvoidGoals import trap_BotRemoveFromAvoidGoals import trap_BotResetGoalState import trap_BotSetChatName import trap_BotSetChatGender import trap_BotLoadChatFile import trap_BotReplaceSynonyms import trap_UnifyWhiteSpaces import trap_BotMatchVariable import trap_BotFindMatch import trap_StringContains import trap_BotGetChatMessage import trap_BotEnterChat import trap_BotChatLength import trap_BotReplyChat import trap_BotNumInitialChats import trap_BotInitialChat import trap_BotNumConsoleMessages import trap_BotNextConsoleMessage import trap_BotRemoveConsoleMessage import trap_BotQueueConsoleMessage import trap_BotFreeChatState import trap_BotAllocChatState import trap_Characteristic_String import trap_Characteristic_BInteger import trap_Characteristic_Integer import trap_Characteristic_BFloat import trap_Characteristic_Float import trap_BotFreeCharacter import trap_BotLoadCharacter import trap_EA_ResetInput import trap_EA_GetInput import trap_EA_EndRegular import trap_EA_ForcePower import trap_EA_Alt_Attack import trap_EA_View import trap_EA_Move import trap_EA_DelayedJump import trap_EA_Jump import trap_EA_SelectWeapon import trap_EA_MoveRight import trap_EA_MoveLeft import trap_EA_MoveBack import trap_EA_MoveForward import trap_EA_MoveDown import trap_EA_MoveUp import trap_EA_Crouch import trap_EA_Respawn import trap_EA_Use import trap_EA_Attack import trap_EA_Talk import trap_EA_Gesture import trap_EA_Action import trap_EA_Command import trap_EA_SayTeam import trap_EA_Say import trap_AAS_PredictClientMovement import trap_AAS_Swimming import trap_AAS_AlternativeRouteGoals import trap_AAS_PredictRoute import trap_AAS_EnableRoutingArea import trap_AAS_AreaTravelTimeToGoalArea import trap_AAS_AreaReachability import trap_AAS_IntForBSPEpairKey import trap_AAS_FloatForBSPEpairKey import trap_AAS_VectorForBSPEpairKey import trap_AAS_ValueForBSPEpairKey import trap_AAS_NextBSPEntity import trap_AAS_PointContents import trap_AAS_TraceAreas import trap_AAS_PointReachabilityAreaIndex import trap_AAS_PointAreaNum import trap_AAS_Time import trap_AAS_PresenceTypeBoundingBox import trap_AAS_Initialized import trap_AAS_EntityInfo import trap_AAS_AreaInfo import trap_AAS_BBoxAreas import trap_BotUserCommand import trap_BotGetServerCommand import trap_BotGetSnapshotEntity import trap_BotLibTest import trap_BotLibUpdateEntity import trap_BotLibLoadMap import trap_BotLibStartFrame import trap_BotLibDefine import trap_BotLibVarGet import trap_BotLibVarSet import trap_BotLibShutdown import trap_BotLibSetup import trap_DebugPolygonDelete import trap_DebugPolygonCreate import trap_GetEntityToken import trap_GetUsercmd import trap_BotFreeClient import trap_BotAllocateClient import trap_EntityContact import trap_EntitiesInBox import trap_UnlinkEntity import trap_LinkEntity import trap_AreasConnected import trap_AdjustAreaPortalState import trap_InPVSIgnorePortals import trap_InPVS import trap_PointContents import trap_Trace import trap_SetBrushModel import trap_GetServerinfo import trap_SetUserinfo import trap_GetUserinfo import trap_GetConfigstring import trap_SetConfigstring import trap_SendServerCommand import trap_DropClient import trap_LocateGameData import trap_Cvar_VariableStringBuffer import trap_Cvar_VariableIntegerValue import trap_Cvar_Set import trap_Cvar_Update import trap_Cvar_Register import trap_SendConsoleCommand import trap_FS_GetFileList 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_Milliseconds import trap_Error import trap_Printf import g_timeouttospec import g_forceDodge import g_dismember import g_singlePlayer import g_enableBreath import g_enableDust import g_rankings import pmove_msec import pmove_fixed import g_smoothClients import g_blueteam import g_redteam import g_debugUp import g_debugRight import g_debugForward import g_filterBan import g_banIPs import g_teamForceBalance import g_teamAutoJoin import g_allowVote import g_blood import g_doWarmup import g_warmup import g_motd import g_synchronousClients import g_adaptRespawn import g_weaponTeamRespawn import g_weaponRespawn import g_debugDamage import g_debugAlloc import g_debugMove import g_inactivity import g_forcerespawn import g_quadfactor import g_knockback import g_speed import g_gravity import g_needpass import g_password import g_friendlySaber import g_friendlyFire import g_saberInterpolate import g_capturelimit import g_timelimit import g_duel_fraglimit import g_fraglimit import g_duelWeaponDisable import g_weaponDisable import g_forcePowerDisable import g_spawnInvulnerability import g_forceRegenTime import g_saberLocking import g_privateDuel import g_forceBasedTeams import g_maxForceRank import g_dmflags import g_autoMapCycle import g_restarted import g_maxGameClients import g_maxclients import g_cheats import g_dedicated import g_gametype import g_entities import level import Pickup_Team import CheckTeamStatus import TeamplayInfoMessage import Team_GetLocationMsg import Team_GetLocation import SelectSagaSpawnPoint import SelectCTFSpawnPoint import Team_FreeEntity import Team_ReturnFlag import Team_InitGame import Team_CheckHurtCarrier import Team_FragBonuses import Team_DroppedFlagThink import AddTeamScore import TeamColorString import OtherTeamName import TeamName import OtherTeam import BotAIStartFrame import BotAIShutdownClient import BotAISetupClient import BotAILoadMap import BotAIShutdown import BotAISetup import B_CleanupAlloc import B_InitAlloc import InFieldOfVision import BotOrder import OrgVisible import InitSagaMode import G_ClearClientLog import G_LogExit import G_LogWeaponOutput import G_LogWeaponInit import G_LogWeaponItem import G_LogWeaponPowerup import G_LogWeaponFrag import G_LogWeaponDeath import G_LogWeaponKill import G_LogWeaponDamage import G_LogWeaponFire import G_LogWeaponPickup import Jedi_DodgeEvasion import ForceTelepathy import ForceThrow import ForceSeeing import ForceTeamForceReplenish import ForceTeamHeal import ForceAbsorb import ForceProtect import ForceGrip import ForceRage import ForceSpeed import ForceHeal import ForcePowerUsableOn import WP_ForcePowersUpdate import WP_SpawnInitForcePowers import WP_InitForcePowers import WP_SaberInitBladeData import WP_SaberCanBlock import WP_SaberPositionUpdate import WP_ForcePowerStop import HasSetSaberOnly import G_PreDefSound import BotInterbreedEndMatch import UpdateTournamentInfo import G_WriteSessionData import G_InitWorldSession import G_InitSessionData import G_ReadSessionData import Svcmd_GameMem_f import G_InitMemory import G_Alloc import Team_CheckDroppedItem import OnSameTeam import G_RunClient import ClientEndFrame import ClientThink import G_CheckClientTimeouts import ClientCommand import ClientBegin import ClientDisconnect import ClientUserinfoChanged import ClientConnect import G_GetStripEdString import G_Error import G_Printf import SendScoreboardMessageToAllClients import G_LogPrintf import G_RunThink import CheckTeamLeader import SetLeader import FindIntermissionPoint import g_ff_objectives import DeathmatchScoreboardMessage import G_SetStats import MoveClientToIntermission import BlowDetpacks import FireWeapon import G_FilterPacket import G_ProcessIPBans import ConsoleCommand import gJMSaberEnt import SpotWouldTelefrag import CalculateRanks import AddScore import player_die import ClientSpawn import InitBodyQue import BeginIntermission import respawn import CopyToBodyQue import SelectSpawnPoint import SetClientViewAngle import PickTeam import TeamLeader import TeamCount import CheckGauntletAttack import SnapVectorTowards import CalcMuzzlePoint import LogAccuracyHit import WP_FireGenericBlasterMissile import WP_FireTurretMissile import G_PlayerBecomeATST import ATST_ManageDamageBoxes import TeleportPlayer import trigger_teleporter_touch import Touch_DoorTrigger import G_RunMover import WP_FireBlasterMissile import G_ExplodeMissile import G_BounceProjectile import CreateMissile import G_RunMissile import G_ReflectMissile import ExplodeDeath import TossClientCubes import TossClientItems import TossClientWeapon import body_die import G_RadiusDamage import G_Damage import CanDamage import trap_G2API_SetBoneAnim import trap_G2API_GetGLAName import trap_G2API_SetBoneAngles import trap_G2API_CleanGhoul2Models import trap_G2API_RemoveGhoul2Model import trap_G2API_HasGhoul2ModelOnIndex import trap_G2API_DuplicateGhoul2Instance import trap_G2API_CopySpecificGhoul2Model import trap_G2API_CopyGhoul2Instance import trap_G2API_SetBoltInfo import trap_G2API_AddBolt import trap_G2API_InitGhoul2Model import trap_G2API_GetBoltMatrix_NoReconstruct import trap_G2API_GetBoltMatrix import trap_G2_HaveWeGhoul2Models import trap_G2_SetGhoul2ModelIndexes import trap_G2_ListModelBones import trap_G2_ListModelSurfaces import G_SkinIndex import BuildShaderStateConfig import AddRemap import G_SetOrigin import G_AddEvent import G_AddPredictableEvent import vtos import tv import G_RunObject import G_TouchSolids import G_TouchTriggers import G_EntitiesFree import G_FreeEntity import G_KillG2Queue import G_SendG2KillQueue import TryUse import G_EntitySound import G_SoundAtLoc import G_Sound import G_MuteSound import G_ScreenShake import G_PlayEffect import G_TempEntity import G_Spawn import G_InitGentity import G_SetAngles import G_SetMovedir import G_UseTargets import G_PickTarget import G_RadiusList import G_Find import G_KillBox import G_TeamCommand import G_EffectIndex import G_SoundIndex import G_ModelIndex import SaveRegisteredItems import RegisterItem import ClearRegisteredItems import Touch_Item import Add_Ammo import ArmorIndex import Think_Weapon import FinishSpawningItem import G_SpawnItem import SetRespawn import LaunchItem import Drop_Item import PrecacheItem import UseHoldableItem import RespawnItem import G_RunItem import G_CheckTeamItems import ItemUse_MedPack import ItemUse_Seeker import ItemUse_Sentry import ItemUse_Shield import ItemUse_Binoculars import G_GetDuelWinner import Cmd_EngageDuel_f import Cmd_ToggleSaber_f import G_ItemUsable import Cmd_SaberAttackCycle_f import Cmd_FollowCycle_f import SetTeam import BroadcastTeamChange import StopFollowing import Cmd_Score_f import G_NewString import G_SpawnEntitiesFromString import G_SpawnVector import G_SpawnInt import G_SpawnFloat import G_SpawnString import g2SaberInstance import precachedKyle import forcePowerDarkLight import WeaponAttackAnim import WeaponReadyAnim import BG_OutOfMemory import BG_StringAlloc import BG_TempFree import BG_TempAlloc import BG_AllocUnaligned import BG_Alloc import BG_CanUseFPNow import BG_HasYsalamiri import BG_GetItemIndexByTag import BG_ParseAnimationFile import BG_PlayerTouchesItem import BG_G2PlayerAngles import BG_PlayerStateToEntityStateExtraPolate import BG_PlayerStateToEntityState import BG_TouchJumpPad import BG_AddPredictableEventToPlayerstate import BG_EvaluateTrajectoryDelta import BG_EvaluateTrajectory import BG_ForcePowerDrain import BG_SaberStartTransAnim import BG_InDeathAnim import BG_InRoll import BG_SaberInSpecialAttack import BG_SpinningSaberAnim import BG_FlippingAnim import BG_SaberInIdle import BG_SaberInSpecial import BG_SaberInAttack import BG_DirectFlippingAnim import BG_InSaberStandAnim import BG_InSpecialJump import BG_LegalizedForcePowers import saberMoveData import BG_CanItemBeGrabbed import BG_FindItemForHoldable import BG_FindItemForPowerup import BG_FindItemForWeapon import BG_FindItem import vectoyaw import bg_numItems import bg_itemlist import Pmove import PM_UpdateViewAngles import pm import bgForcePowerCost import forceMasteryPoints import forceMasteryLevels import bgGlobalAnimations import BGPAFtextLoaded import forcePowerSorted import WP_MuzzlePoint import ammoData import weaponData import GetStringForID import GetIDForString import Q_irand import irand import flrand import Rand_Init 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 SkipWhitespace 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 powf import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkBlue import colorLtBlue import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import colorTable import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import forceSpeedLevels 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 $632 char 1 98 char 1 111 char 1 116 char 1 115 char 1 0 align 1 LABELV $629 char 1 116 char 1 114 char 1 97 char 1 105 char 1 110 char 1 105 char 1 110 char 1 103 char 1 0 align 1 LABELV $626 char 1 115 char 1 112 char 1 101 char 1 99 char 1 105 char 1 97 char 1 108 char 1 0 align 1 LABELV $625 char 1 49 char 1 48 char 1 0 align 1 LABELV $620 char 1 116 char 1 105 char 1 109 char 1 101 char 1 108 char 1 105 char 1 109 char 1 105 char 1 116 char 1 0 align 1 LABELV $617 char 1 102 char 1 114 char 1 97 char 1 103 char 1 108 char 1 105 char 1 109 char 1 105 char 1 116 char 1 0 align 1 LABELV $611 char 1 48 char 1 0 align 1 LABELV $610 char 1 98 char 1 111 char 1 116 char 1 95 char 1 109 char 1 105 char 1 110 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 115 char 1 0 align 1 LABELV $601 char 1 94 char 1 49 char 1 73 char 1 110 char 1 118 char 1 97 char 1 108 char 1 105 char 1 100 char 1 32 char 1 98 char 1 111 char 1 116 char 1 32 char 1 110 char 1 117 char 1 109 char 1 98 char 1 101 char 1 114 char 1 58 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $596 char 1 37 char 1 105 char 1 32 char 1 98 char 1 111 char 1 116 char 1 115 char 1 32 char 1 112 char 1 97 char 1 114 char 1 115 char 1 101 char 1 100 char 1 10 char 1 0 align 1 LABELV $591 char 1 46 char 1 98 char 1 111 char 1 116 char 1 0 align 1 LABELV $590 char 1 98 char 1 111 char 1 116 char 1 102 char 1 105 char 1 108 char 1 101 char 1 115 char 1 47 char 1 98 char 1 111 char 1 116 char 1 115 char 1 46 char 1 116 char 1 120 char 1 116 char 1 0 align 1 LABELV $585 char 1 103 char 1 95 char 1 98 char 1 111 char 1 116 char 1 115 char 1 70 char 1 105 char 1 108 char 1 101 char 1 0 align 1 LABELV $576 char 1 97 char 1 100 char 1 100 char 1 98 char 1 111 char 1 116 char 1 32 char 1 37 char 1 115 char 1 32 char 1 37 char 1 102 char 1 32 char 1 102 char 1 114 char 1 101 char 1 101 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $558 char 1 49 char 1 0 align 1 LABELV $554 char 1 37 char 1 45 char 1 49 char 1 54 char 1 115 char 1 32 char 1 37 char 1 45 char 1 49 char 1 54 char 1 115 char 1 32 char 1 37 char 1 45 char 1 50 char 1 48 char 1 115 char 1 32 char 1 37 char 1 45 char 1 50 char 1 48 char 1 115 char 1 10 char 1 0 align 1 LABELV $547 char 1 80 char 1 97 char 1 100 char 1 97 char 1 119 char 1 97 char 1 110 char 1 0 align 1 LABELV $540 char 1 94 char 1 49 char 1 110 char 1 97 char 1 109 char 1 101 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 112 char 1 101 char 1 114 char 1 115 char 1 111 char 1 110 char 1 97 char 1 108 char 1 105 char 1 116 char 1 121 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 32 char 1 102 char 1 117 char 1 110 char 1 110 char 1 97 char 1 109 char 1 101 char 1 10 char 1 0 align 1 LABELV $538 char 1 108 char 1 111 char 1 97 char 1 100 char 1 100 char 1 101 char 1 102 char 1 101 char 1 114 char 1 101 char 1 100 char 1 10 char 1 0 align 1 LABELV $537 char 1 99 char 1 108 char 1 95 char 1 114 char 1 117 char 1 110 char 1 110 char 1 105 char 1 110 char 1 103 char 1 0 align 1 LABELV $528 char 1 85 char 1 115 char 1 97 char 1 103 char 1 101 char 1 58 char 1 32 char 1 65 char 1 100 char 1 100 char 1 98 char 1 111 char 1 116 char 1 32 char 1 60 char 1 98 char 1 111 char 1 116 char 1 110 char 1 97 char 1 109 char 1 101 char 1 62 char 1 32 char 1 91 char 1 115 char 1 107 char 1 105 char 1 108 char 1 108 char 1 32 char 1 49 char 1 45 char 1 53 char 1 93 char 1 32 char 1 91 char 1 116 char 1 101 char 1 97 char 1 109 char 1 93 char 1 32 char 1 91 char 1 109 char 1 115 char 1 101 char 1 99 char 1 32 char 1 100 char 1 101 char 1 108 char 1 97 char 1 121 char 1 93 char 1 32 char 1 91 char 1 97 char 1 108 char 1 116 char 1 110 char 1 97 char 1 109 char 1 101 char 1 93 char 1 10 char 1 0 align 1 LABELV $525 char 1 98 char 1 111 char 1 116 char 1 95 char 1 101 char 1 110 char 1 97 char 1 98 char 1 108 char 1 101 char 1 0 align 1 LABELV $519 char 1 66 char 1 108 char 1 117 char 1 101 char 1 0 align 1 LABELV $518 char 1 82 char 1 101 char 1 100 char 1 0 align 1 LABELV $502 char 1 37 char 1 53 char 1 46 char 1 50 char 1 102 char 1 0 align 1 LABELV $493 char 1 85 char 1 78 char 1 65 char 1 66 char 1 76 char 1 69 char 1 95 char 1 84 char 1 79 char 1 95 char 1 65 char 1 68 char 1 68 char 1 95 char 1 66 char 1 79 char 1 84 char 1 0 align 1 LABELV $492 char 1 83 char 1 86 char 1 73 char 1 78 char 1 71 char 1 65 char 1 77 char 1 69 char 1 0 align 1 LABELV $491 char 1 112 char 1 114 char 1 105 char 1 110 char 1 116 char 1 32 char 1 34 char 1 37 char 1 115 char 1 10 char 1 34 char 1 0 align 1 LABELV $488 char 1 98 char 1 111 char 1 116 char 1 102 char 1 105 char 1 108 char 1 101 char 1 115 char 1 47 char 1 100 char 1 101 char 1 102 char 1 97 char 1 117 char 1 108 char 1 116 char 1 46 char 1 106 char 1 107 char 1 98 char 1 0 align 1 LABELV $485 char 1 53 char 1 0 align 1 LABELV $482 char 1 99 char 1 111 char 1 108 char 1 111 char 1 114 char 1 50 char 1 0 align 1 LABELV $481 char 1 52 char 1 0 align 1 LABELV $478 char 1 99 char 1 111 char 1 108 char 1 111 char 1 114 char 1 49 char 1 0 align 1 LABELV $477 char 1 115 char 1 101 char 1 120 char 1 0 align 1 LABELV $476 char 1 109 char 1 97 char 1 108 char 1 101 char 1 0 align 1 LABELV $473 char 1 103 char 1 101 char 1 110 char 1 100 char 1 101 char 1 114 char 1 0 align 1 LABELV $472 char 1 116 char 1 101 char 1 97 char 1 109 char 1 95 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 0 align 1 LABELV $471 char 1 118 char 1 105 char 1 115 char 1 111 char 1 114 char 1 47 char 1 100 char 1 101 char 1 102 char 1 97 char 1 117 char 1 108 char 1 116 char 1 0 align 1 LABELV $468 char 1 57 char 1 48 char 1 0 align 1 LABELV $465 char 1 55 char 1 48 char 1 0 align 1 LABELV $462 char 1 53 char 1 48 char 1 0 align 1 LABELV $461 char 1 104 char 1 97 char 1 110 char 1 100 char 1 105 char 1 99 char 1 97 char 1 112 char 1 0 align 1 LABELV $458 char 1 37 char 1 49 char 1 46 char 1 50 char 1 102 char 1 0 align 1 LABELV $457 char 1 50 char 1 48 char 1 0 align 1 LABELV $456 char 1 115 char 1 110 char 1 97 char 1 112 char 1 115 char 1 0 align 1 LABELV $455 char 1 50 char 1 53 char 1 48 char 1 48 char 1 48 char 1 0 align 1 LABELV $454 char 1 114 char 1 97 char 1 116 char 1 101 char 1 0 align 1 LABELV $449 char 1 102 char 1 117 char 1 110 char 1 110 char 1 97 char 1 109 char 1 101 char 1 0 align 1 LABELV $448 char 1 94 char 1 49 char 1 69 char 1 114 char 1 114 char 1 111 char 1 114 char 1 58 char 1 32 char 1 66 char 1 111 char 1 116 char 1 32 char 1 39 char 1 37 char 1 115 char 1 39 char 1 32 char 1 110 char 1 111 char 1 116 char 1 32 char 1 100 char 1 101 char 1 102 char 1 105 char 1 110 char 1 101 char 1 100 char 1 10 char 1 0 align 1 LABELV $444 char 1 66 char 1 111 char 1 116 char 1 65 char 1 73 char 1 83 char 1 101 char 1 116 char 1 117 char 1 112 char 1 67 char 1 108 char 1 105 char 1 101 char 1 110 char 1 116 char 1 32 char 1 102 char 1 97 char 1 105 char 1 108 char 1 101 char 1 100 char 1 0 align 1 LABELV $440 char 1 116 char 1 101 char 1 97 char 1 109 char 1 0 align 1 LABELV $438 char 1 115 char 1 107 char 1 105 char 1 108 char 1 108 char 1 0 align 1 LABELV $436 char 1 112 char 1 101 char 1 114 char 1 115 char 1 111 char 1 110 char 1 97 char 1 108 char 1 105 char 1 116 char 1 121 char 1 0 align 1 LABELV $426 char 1 94 char 1 51 char 1 85 char 1 110 char 1 97 char 1 98 char 1 108 char 1 101 char 1 32 char 1 116 char 1 111 char 1 32 char 1 100 char 1 101 char 1 108 char 1 97 char 1 121 char 1 32 char 1 115 char 1 112 char 1 97 char 1 119 char 1 110 char 1 10 char 1 0 align 1 LABELV $415 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 0 align 1 LABELV $295 char 1 107 char 1 105 char 1 99 char 1 107 char 1 32 char 1 37 char 1 115 char 1 10 char 1 0 align 1 LABELV $280 char 1 97 char 1 100 char 1 100 char 1 98 char 1 111 char 1 116 char 1 32 char 1 37 char 1 115 char 1 32 char 1 37 char 1 102 char 1 32 char 1 37 char 1 115 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $278 char 1 98 char 1 108 char 1 117 char 1 101 char 1 0 align 1 LABELV $275 char 1 114 char 1 101 char 1 100 char 1 0 align 1 LABELV $272 char 1 103 char 1 95 char 1 115 char 1 112 char 1 83 char 1 107 char 1 105 char 1 108 char 1 108 char 1 0 align 1 LABELV $229 char 1 110 char 1 97 char 1 109 char 1 101 char 1 0 align 1 LABELV $223 char 1 112 char 1 108 char 1 97 char 1 121 char 1 32 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 char 1 47 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 47 char 1 97 char 1 110 char 1 110 char 1 111 char 1 117 char 1 110 char 1 99 char 1 101 char 1 47 char 1 37 char 1 115 char 1 46 char 1 119 char 1 97 char 1 118 char 1 10 char 1 0 align 1 LABELV $222 char 1 100 char 1 101 char 1 102 char 1 97 char 1 117 char 1 108 char 1 116 char 1 0 align 1 LABELV $208 char 1 37 char 1 105 char 1 0 align 1 LABELV $207 char 1 110 char 1 117 char 1 109 char 1 0 align 1 LABELV $202 char 1 37 char 1 105 char 1 32 char 1 97 char 1 114 char 1 101 char 1 110 char 1 97 char 1 115 char 1 32 char 1 112 char 1 97 char 1 114 char 1 115 char 1 101 char 1 100 char 1 10 char 1 0 align 1 LABELV $201 char 1 115 char 1 99 char 1 114 char 1 105 char 1 112 char 1 116 char 1 115 char 1 47 char 1 0 align 1 LABELV $196 char 1 46 char 1 97 char 1 114 char 1 101 char 1 110 char 1 97 char 1 0 align 1 LABELV $195 char 1 115 char 1 99 char 1 114 char 1 105 char 1 112 char 1 116 char 1 115 char 1 0 align 1 LABELV $194 char 1 115 char 1 99 char 1 114 char 1 105 char 1 112 char 1 116 char 1 115 char 1 47 char 1 97 char 1 114 char 1 101 char 1 110 char 1 97 char 1 115 char 1 46 char 1 116 char 1 120 char 1 116 char 1 0 align 1 LABELV $189 char 1 103 char 1 95 char 1 97 char 1 114 char 1 101 char 1 110 char 1 97 char 1 115 char 1 70 char 1 105 char 1 108 char 1 101 char 1 0 align 1 LABELV $187 char 1 109 char 1 97 char 1 112 char 1 32 char 1 37 char 1 115 char 1 0 align 1 LABELV $186 char 1 109 char 1 97 char 1 112 char 1 95 char 1 114 char 1 101 char 1 115 char 1 116 char 1 97 char 1 114 char 1 116 char 1 32 char 1 48 char 1 0 align 1 LABELV $185 char 1 110 char 1 101 char 1 120 char 1 116 char 1 109 char 1 97 char 1 112 char 1 0 align 1 LABELV $165 char 1 0 align 1 LABELV $164 char 1 109 char 1 97 char 1 112 char 1 110 char 1 97 char 1 109 char 1 101 char 1 0 align 1 LABELV $155 char 1 116 char 1 121 char 1 112 char 1 101 char 1 0 align 1 LABELV $150 char 1 109 char 1 97 char 1 112 char 1 0 align 1 LABELV $139 char 1 99 char 1 116 char 1 121 char 1 0 align 1 LABELV $136 char 1 99 char 1 116 char 1 102 char 1 0 align 1 LABELV $133 char 1 115 char 1 97 char 1 103 char 1 97 char 1 0 align 1 LABELV $130 char 1 100 char 1 117 char 1 101 char 1 108 char 1 0 align 1 LABELV $127 char 1 106 char 1 101 char 1 100 char 1 105 char 1 109 char 1 97 char 1 115 char 1 116 char 1 101 char 1 114 char 1 0 align 1 LABELV $124 char 1 104 char 1 111 char 1 108 char 1 111 char 1 99 char 1 114 char 1 111 char 1 110 char 1 0 align 1 LABELV $121 char 1 102 char 1 102 char 1 97 char 1 0 align 1 LABELV $115 char 1 94 char 1 49 char 1 102 char 1 105 char 1 108 char 1 101 char 1 32 char 1 116 char 1 111 char 1 111 char 1 32 char 1 108 char 1 97 char 1 114 char 1 103 char 1 101 char 1 58 char 1 32 char 1 37 char 1 115 char 1 32 char 1 105 char 1 115 char 1 32 char 1 37 char 1 105 char 1 44 char 1 32 char 1 109 char 1 97 char 1 120 char 1 32 char 1 97 char 1 108 char 1 108 char 1 111 char 1 119 char 1 101 char 1 100 char 1 32 char 1 105 char 1 115 char 1 32 char 1 37 char 1 105 char 1 0 align 1 LABELV $112 char 1 94 char 1 49 char 1 102 char 1 105 char 1 108 char 1 101 char 1 32 char 1 110 char 1 111 char 1 116 char 1 32 char 1 102 char 1 111 char 1 117 char 1 110 char 1 100 char 1 58 char 1 32 char 1 37 char 1 115 char 1 10 char 1 0 align 1 LABELV $106 char 1 37 char 1 100 char 1 0 align 1 LABELV $105 char 1 92 char 1 110 char 1 117 char 1 109 char 1 92 char 1 0 align 1 LABELV $104 char 1 60 char 1 78 char 1 85 char 1 76 char 1 76 char 1 62 char 1 0 align 1 LABELV $101 char 1 125 char 1 0 align 1 LABELV $98 char 1 85 char 1 110 char 1 101 char 1 120 char 1 112 char 1 101 char 1 99 char 1 116 char 1 101 char 1 100 char 1 32 char 1 101 char 1 110 char 1 100 char 1 32 char 1 111 char 1 102 char 1 32 char 1 105 char 1 110 char 1 102 char 1 111 char 1 32 char 1 102 char 1 105 char 1 108 char 1 101 char 1 10 char 1 0 align 1 LABELV $92 char 1 77 char 1 97 char 1 120 char 1 32 char 1 105 char 1 110 char 1 102 char 1 111 char 1 115 char 1 32 char 1 101 char 1 120 char 1 99 char 1 101 char 1 101 char 1 100 char 1 101 char 1 100 char 1 10 char 1 0 align 1 LABELV $89 char 1 77 char 1 105 char 1 115 char 1 115 char 1 105 char 1 110 char 1 103 char 1 32 char 1 123 char 1 32 char 1 105 char 1 110 char 1 32 char 1 105 char 1 110 char 1 102 char 1 111 char 1 32 char 1 102 char 1 105 char 1 108 char 1 101 char 1 10 char 1 0 align 1 LABELV $88 char 1 123 char 1 0