data
export gDuelExit
align 4
LABELV gDuelExit
byte 4 0
export gDuelist1
align 4
LABELV gDuelist1
byte 4 -1
export gDuelist2
align 4
LABELV gDuelist2
byte 4 -1
align 4
LABELV gameCvarTable
address g_cheats
address $79
address $80
byte 4 0
byte 4 0
byte 4 0
skip 4
byte 4 0
address $81
address $82
byte 4 68
byte 4 0
byte 4 0
skip 4
byte 4 0
address $83
address $84
byte 4 64
byte 4 0
byte 4 0
skip 4
address g_restarted
address $85
address $86
byte 4 64
byte 4 0
byte 4 0
skip 4
byte 4 0
address $87
address $80
byte 4 68
byte 4 0
byte 4 0
skip 4
address g_gametype
address $88
address $86
byte 4 38
byte 4 0
byte 4 0
skip 4
address g_MaxHolocronCarry
address $89
address $90
byte 4 38
byte 4 0
byte 4 0
skip 4
address g_maxclients
address $91
address $92
byte 4 37
byte 4 0
byte 4 0
skip 4
address g_maxGameClients
address $93
address $86
byte 4 37
byte 4 0
byte 4 0
skip 4
address g_ff_objectives
address $94
address $86
byte 4 1024
byte 4 0
byte 4 1
skip 4
address g_autoMapCycle
address $95
address $86
byte 4 1025
byte 4 0
byte 4 1
skip 4
address g_dmflags
address $96
address $86
byte 4 5
byte 4 0
byte 4 1
skip 4
address g_maxForceRank
address $97
address $98
byte 4 39
byte 4 0
byte 4 0
skip 4
address g_forceBasedTeams
address $99
address $86
byte 4 39
byte 4 0
byte 4 0
skip 4
address g_privateDuel
address $100
address $101
byte 4 5
byte 4 0
byte 4 1
skip 4
address g_saberLocking
address $102
address $101
byte 4 5
byte 4 0
byte 4 1
skip 4
address g_forceRegenTime
address $103
address $104
byte 4 5
byte 4 0
byte 4 1
skip 4
address g_spawnInvulnerability
address $105
address $106
byte 4 1
byte 4 0
byte 4 1
skip 4
address g_forcePowerDisable
address $107
address $86
byte 4 37
byte 4 0
byte 4 1
skip 4
address g_weaponDisable
address $108
address $86
byte 4 37
byte 4 0
byte 4 1
skip 4
address g_duelWeaponDisable
address $109
address $101
byte 4 37
byte 4 0
byte 4 1
skip 4
address g_fraglimit
address $110
address $111
byte 4 1029
byte 4 0
byte 4 1
skip 4
address g_duel_fraglimit
address $112
address $113
byte 4 1029
byte 4 0
byte 4 1
skip 4
address g_timelimit
address $114
address $86
byte 4 1029
byte 4 0
byte 4 1
skip 4
address g_capturelimit
address $115
address $92
byte 4 1029
byte 4 0
byte 4 1
skip 4
address g_synchronousClients
address $116
address $86
byte 4 8
byte 4 0
byte 4 0
skip 4
address g_saberInterpolate
address $117
address $101
byte 4 1
byte 4 0
byte 4 1
skip 4
address g_friendlyFire
address $118
address $86
byte 4 1
byte 4 0
byte 4 1
skip 4
address g_friendlySaber
address $119
address $86
byte 4 1
byte 4 0
byte 4 1
skip 4
address g_teamAutoJoin
address $120
address $86
byte 4 1
skip 12
address g_teamForceBalance
address $121
address $86
byte 4 1
skip 12
address g_warmup
address $122
address $111
byte 4 1
byte 4 0
byte 4 1
skip 4
address g_doWarmup
address $123
address $86
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_log
address $124
address $125
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_logSync
address $126
address $86
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_statLog
address $127
address $86
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_statLogFile
address $128
address $129
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_password
address $130
address $80
byte 4 2
byte 4 0
byte 4 0
skip 4
address g_banIPs
address $131
address $80
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_filterBan
address $132
address $101
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_needpass
address $133
address $86
byte 4 68
byte 4 0
byte 4 0
skip 4
address g_dedicated
address $134
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_speed
address $135
address $136
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_gravity
address $137
address $138
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_knockback
address $139
address $140
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_quadfactor
address $141
address $90
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_weaponRespawn
address $142
address $143
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_weaponTeamRespawn
address $144
address $143
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_adaptRespawn
address $145
address $101
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_forcerespawn
address $146
address $147
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_inactivity
address $148
address $86
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_debugMove
address $149
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_debugDamage
address $150
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_debugAlloc
address $151
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_motd
address $152
address $80
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_blood
address $153
address $101
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_podiumDist
address $154
address $155
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_podiumDrop
address $156
address $157
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_allowVote
address $158
address $101
byte 4 1
byte 4 0
byte 4 0
skip 4
address g_listEntity
address $159
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_redteam
address $160
address $161
byte 4 7
byte 4 0
byte 4 1
byte 4 1
address g_blueteam
address $162
address $163
byte 4 7
byte 4 0
byte 4 1
byte 4 1
address g_singlePlayer
address $164
address $80
byte 4 0
byte 4 0
byte 4 0
byte 4 0
address g_enableDust
address $165
address $86
byte 4 0
byte 4 0
byte 4 1
byte 4 0
address g_enableBreath
address $166
address $86
byte 4 0
byte 4 0
byte 4 1
byte 4 0
address g_smoothClients
address $167
address $101
byte 4 0
byte 4 0
byte 4 0
skip 4
address pmove_fixed
address $168
address $86
byte 4 8
byte 4 0
byte 4 0
skip 4
address pmove_msec
address $169
address $92
byte 4 8
byte 4 0
byte 4 0
skip 4
address g_rankings
address $170
address $86
byte 4 0
byte 4 0
byte 4 0
skip 4
address g_dismember
address $171
address $86
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_forceDodge
address $172
address $101
byte 4 0
byte 4 0
byte 4 1
skip 4
address g_timeouttospec
address $173
address $157
byte 4 1
byte 4 0
byte 4 0
skip 4
align 4
LABELV gameCvarTableSize
byte 4 72
export vmMain
code
proc vmMain 16 12
file "../g_main.c"
line 231
;1:// Copyright (C) 1999-2000 Id Software, Inc.
;2://
;3:
;4:#include "g_local.h"
;5:
;6:level_locals_t	level;
;7:
;8:typedef struct {
;9:	vmCvar_t	*vmCvar;
;10:	char		*cvarName;
;11:	char		*defaultString;
;12:	int			cvarFlags;
;13:	int			modificationCount;  // for tracking changes
;14:	qboolean	trackChange;	    // track this variable, and announce if changed
;15:  qboolean teamShader;        // track and if changed, update shader state
;16:} cvarTable_t;
;17:
;18:gentity_t		g_entities[MAX_GENTITIES];
;19:gclient_t		g_clients[MAX_CLIENTS];
;20:
;21:qboolean gDuelExit = qfalse;
;22:
;23:vmCvar_t	g_gametype;
;24:vmCvar_t	g_MaxHolocronCarry;
;25:vmCvar_t	g_ff_objectives;
;26:vmCvar_t	g_autoMapCycle;
;27:vmCvar_t	g_dmflags;
;28:vmCvar_t	g_maxForceRank;
;29:vmCvar_t	g_forceBasedTeams;
;30:vmCvar_t	g_privateDuel;
;31:vmCvar_t	g_saberLocking;
;32:vmCvar_t	g_forceRegenTime;
;33:vmCvar_t	g_spawnInvulnerability;
;34:vmCvar_t	g_forcePowerDisable;
;35:vmCvar_t	g_weaponDisable;
;36:vmCvar_t	g_duelWeaponDisable;
;37:vmCvar_t	g_fraglimit;
;38:vmCvar_t	g_duel_fraglimit;
;39:vmCvar_t	g_timelimit;
;40:vmCvar_t	g_capturelimit;
;41:vmCvar_t	g_saberInterpolate;
;42:vmCvar_t	g_friendlyFire;
;43:vmCvar_t	g_friendlySaber;
;44:vmCvar_t	g_password;
;45:vmCvar_t	g_needpass;
;46:vmCvar_t	g_maxclients;
;47:vmCvar_t	g_maxGameClients;
;48:vmCvar_t	g_dedicated;
;49:vmCvar_t	g_speed;
;50:vmCvar_t	g_gravity;
;51:vmCvar_t	g_cheats;
;52:vmCvar_t	g_knockback;
;53:vmCvar_t	g_quadfactor;
;54:vmCvar_t	g_forcerespawn;
;55:vmCvar_t	g_inactivity;
;56:vmCvar_t	g_debugMove;
;57:vmCvar_t	g_debugDamage;
;58:vmCvar_t	g_debugAlloc;
;59:vmCvar_t	g_weaponRespawn;
;60:vmCvar_t	g_weaponTeamRespawn;
;61:vmCvar_t	g_adaptRespawn;
;62:vmCvar_t	g_motd;
;63:vmCvar_t	g_synchronousClients;
;64:vmCvar_t	g_warmup;
;65:vmCvar_t	g_doWarmup;
;66:vmCvar_t	g_restarted;
;67:vmCvar_t	g_log;
;68:vmCvar_t	g_logSync;
;69:vmCvar_t	g_statLog;
;70:vmCvar_t	g_statLogFile;
;71:vmCvar_t	g_blood;
;72:vmCvar_t	g_podiumDist;
;73:vmCvar_t	g_podiumDrop;
;74:vmCvar_t	g_allowVote;
;75:vmCvar_t	g_teamAutoJoin;
;76:vmCvar_t	g_teamForceBalance;
;77:vmCvar_t	g_banIPs;
;78:vmCvar_t	g_filterBan;
;79:vmCvar_t	g_debugForward;
;80:vmCvar_t	g_debugRight;
;81:vmCvar_t	g_debugUp;
;82:vmCvar_t	g_smoothClients;
;83:vmCvar_t	pmove_fixed;
;84:vmCvar_t	pmove_msec;
;85:vmCvar_t	g_rankings;
;86:vmCvar_t	g_listEntity;
;87:vmCvar_t	g_redteam;
;88:vmCvar_t	g_blueteam;
;89:vmCvar_t	g_singlePlayer;
;90:vmCvar_t	g_enableDust;
;91:vmCvar_t	g_enableBreath;
;92:vmCvar_t	g_dismember;
;93:vmCvar_t	g_forceDodge;
;94:vmCvar_t	g_timeouttospec;
;95:
;96:int gDuelist1 = -1;
;97:int gDuelist2 = -1;
;98:
;99:// bk001129 - made static to avoid aliasing
;100:static cvarTable_t		gameCvarTable[] = {
;101:	// don't override the cheat state set by the system
;102:	{ &g_cheats, "sv_cheats", "", 0, 0, qfalse },
;103:
;104:	// noset vars
;105:	{ NULL, "gamename", GAMEVERSION , CVAR_SERVERINFO | CVAR_ROM, 0, qfalse  },
;106:	{ NULL, "gamedate", __DATE__ , CVAR_ROM, 0, qfalse  },
;107:	{ &g_restarted, "g_restarted", "0", CVAR_ROM, 0, qfalse  },
;108:	{ NULL, "sv_mapname", "", CVAR_SERVERINFO | CVAR_ROM, 0, qfalse  },
;109:
;110:	// latched vars
;111:	{ &g_gametype, "g_gametype", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse  },
;112:	{ &g_MaxHolocronCarry, "g_MaxHolocronCarry", "3", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse  },
;113:
;114:	{ &g_maxclients, "sv_maxclients", "8", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qfalse  },
;115:	{ &g_maxGameClients, "g_maxGameClients", "0", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qfalse  },
;116:
;117:	// change anytime vars
;118:	{ &g_ff_objectives, "g_ff_objectives", "0", /*CVAR_SERVERINFO |*/  CVAR_NORESTART, 0, qtrue },
;119:
;120:	{ &g_autoMapCycle, "g_autoMapCycle", "0", CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
;121:	{ &g_dmflags, "dmflags", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue  },
;122:	
;123:	{ &g_maxForceRank, "g_maxForceRank", "6", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_USERINFO | CVAR_LATCH, 0, qfalse  },
;124:	{ &g_forceBasedTeams, "g_forceBasedTeams", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_USERINFO | CVAR_LATCH, 0, qfalse  },
;125:	{ &g_privateDuel, "g_privateDuel", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue  },
;126:	{ &g_saberLocking, "g_saberLocking", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue  },
;127:	{ &g_forceRegenTime, "g_forceRegenTime", "200", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue  },
;128:
;129:	{ &g_spawnInvulnerability, "g_spawnInvulnerability", "3000", CVAR_ARCHIVE, 0, qtrue  },
;130:
;131:	{ &g_forcePowerDisable, "g_forcePowerDisable", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_LATCH, 0, qtrue  },
;132:	{ &g_weaponDisable, "g_weaponDisable", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_LATCH, 0, qtrue  },
;133:	{ &g_duelWeaponDisable, "g_duelWeaponDisable", "1", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_LATCH, 0, qtrue  },
;134:
;135:	{ &g_fraglimit, "fraglimit", "20", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
;136:	{ &g_duel_fraglimit, "duel_fraglimit", "10", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
;137:	{ &g_timelimit, "timelimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
;138:	{ &g_capturelimit, "capturelimit", "8", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
;139:
;140:	{ &g_synchronousClients, "g_synchronousClients", "0", CVAR_SYSTEMINFO, 0, qfalse  },
;141:
;142:	{ &g_saberInterpolate, "g_saberInterpolate", "1", CVAR_ARCHIVE, 0, qtrue },
;143:
;144:	{ &g_friendlyFire, "g_friendlyFire", "0", CVAR_ARCHIVE, 0, qtrue  },
;145:	{ &g_friendlySaber, "g_friendlySaber", "0", CVAR_ARCHIVE, 0, qtrue  },
;146:
;147:	{ &g_teamAutoJoin, "g_teamAutoJoin", "0", CVAR_ARCHIVE  },
;148:	{ &g_teamForceBalance, "g_teamForceBalance", "0", CVAR_ARCHIVE  },
;149:
;150:	{ &g_warmup, "g_warmup", "20", CVAR_ARCHIVE, 0, qtrue  },
;151:	{ &g_doWarmup, "g_doWarmup", "0", 0, 0, qtrue  },
;152:	{ &g_log, "g_log", "games.log", CVAR_ARCHIVE, 0, qfalse  },
;153:	{ &g_logSync, "g_logSync", "0", CVAR_ARCHIVE, 0, qfalse  },
;154:
;155:	{ &g_statLog, "g_statLog", "0", CVAR_ARCHIVE, 0, qfalse },
;156:	{ &g_statLogFile, "g_statLogFile", "statlog.log", CVAR_ARCHIVE, 0, qfalse },
;157:
;158:	{ &g_password, "g_password", "", CVAR_USERINFO, 0, qfalse  },
;159:
;160:	{ &g_banIPs, "g_banIPs", "", CVAR_ARCHIVE, 0, qfalse  },
;161:	{ &g_filterBan, "g_filterBan", "1", CVAR_ARCHIVE, 0, qfalse  },
;162:
;163:	{ &g_needpass, "g_needpass", "0", CVAR_SERVERINFO | CVAR_ROM, 0, qfalse },
;164:
;165:	{ &g_dedicated, "dedicated", "0", 0, 0, qfalse  },
;166:
;167:	{ &g_speed, "g_speed", "250", 0, 0, qtrue  },
;168:	{ &g_gravity, "g_gravity", "800", 0, 0, qtrue  },
;169:	{ &g_knockback, "g_knockback", "1000", 0, 0, qtrue  },
;170:	{ &g_quadfactor, "g_quadfactor", "3", 0, 0, qtrue  },
;171:	{ &g_weaponRespawn, "g_weaponrespawn", "5", 0, 0, qtrue  },
;172:	{ &g_weaponTeamRespawn, "g_weaponTeamRespawn", "5", 0, 0, qtrue },
;173:	{ &g_adaptRespawn, "g_adaptrespawn", "1", 0, 0, qtrue  },		// Make weapons respawn faster with a lot of players.
;174:	{ &g_forcerespawn, "g_forcerespawn", "60", 0, 0, qtrue },		// One minute force respawn.  Give a player enough time to reallocate force.
;175:	{ &g_inactivity, "g_inactivity", "0", 0, 0, qtrue },
;176:	{ &g_debugMove, "g_debugMove", "0", 0, 0, qfalse },
;177:	{ &g_debugDamage, "g_debugDamage", "0", 0, 0, qfalse },
;178:	{ &g_debugAlloc, "g_debugAlloc", "0", 0, 0, qfalse },
;179:	{ &g_motd, "g_motd", "", 0, 0, qfalse },
;180:	{ &g_blood, "com_blood", "1", 0, 0, qfalse },
;181:
;182:	{ &g_podiumDist, "g_podiumDist", "80", 0, 0, qfalse },
;183:	{ &g_podiumDrop, "g_podiumDrop", "70", 0, 0, qfalse },
;184:
;185:	{ &g_allowVote, "g_allowVote", "1", CVAR_ARCHIVE, 0, qfalse },
;186:	{ &g_listEntity, "g_listEntity", "0", 0, 0, qfalse },
;187:
;188:#if 0
;189:	{ &g_debugForward, "g_debugForward", "0", 0, 0, qfalse },
;190:	{ &g_debugRight, "g_debugRight", "0", 0, 0, qfalse },
;191:	{ &g_debugUp, "g_debugUp", "0", 0, 0, qfalse },
;192:#endif
;193:
;194:	{ &g_redteam, "g_redteam", "Empire", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue },
;195:	{ &g_blueteam, "g_blueteam", "Rebellion", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue  },
;196:	{ &g_singlePlayer, "ui_singlePlayerActive", "", 0, 0, qfalse, qfalse  },
;197:
;198:	{ &g_enableDust, "g_enableDust", "0", 0, 0, qtrue, qfalse },
;199:	{ &g_enableBreath, "g_enableBreath", "0", 0, 0, qtrue, qfalse },
;200:	{ &g_smoothClients, "g_smoothClients", "1", 0, 0, qfalse},
;201:	{ &pmove_fixed, "pmove_fixed", "0", CVAR_SYSTEMINFO, 0, qfalse},
;202:	{ &pmove_msec, "pmove_msec", "8", CVAR_SYSTEMINFO, 0, qfalse},
;203:
;204:	{ &g_rankings, "g_rankings", "0", 0, 0, qfalse},
;205:
;206:	{ &g_dismember, "g_dismember", "0", 0, 0, qtrue  },
;207:	{ &g_forceDodge, "g_forceDodge", "1", 0, 0, qtrue  },
;208:
;209:	{ &g_timeouttospec, "g_timeouttospec", "70", CVAR_ARCHIVE, 0, qfalse },
;210:};
;211:
;212:// bk001129 - made static to avoid aliasing
;213:static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[0] );
;214:
;215:
;216:void G_InitGame					( int levelTime, int randomSeed, int restart );
;217:void G_RunFrame					( int levelTime );
;218:void G_ShutdownGame				( int restart );
;219:void CheckExitRules				( void );
;220:void G_ROFF_NotetrackCallback	( gentity_t *cent, const char *notetrack);
;221:
;222:
;223:/*
;224:================
;225:vmMain
;226:
;227:This is the only way control passes into the module.
;228:This must be the very first function compiled into the .q3vm file
;229:================
;230:*/
;231:int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
line 232
;232:	switch ( command ) {
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
LTI4 $175
ADDRLP4 0
INDIRI4
CNSTI4 11
GTI4 $175
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $189
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $189
address $177
address $178
address $179
address $183
address $181
address $182
address $184
address $180
address $185
address $186
address $187
address $188
code
LABELV $177
line 234
;233:	case GAME_INIT:
;234:		G_InitGame( arg0, arg1, arg2 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRFP4 8
INDIRI4
ARGI4
ADDRFP4 12
INDIRI4
ARGI4
ADDRGP4 G_InitGame
CALLV
pop
line 235
;235:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $178
line 237
;236:	case GAME_SHUTDOWN:
;237:		G_ShutdownGame( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 G_ShutdownGame
CALLV
pop
line 238
;238:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $179
line 240
;239:	case GAME_CLIENT_CONNECT:
;240:		return (int)ClientConnect( arg0, arg1, arg2 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRFP4 8
INDIRI4
ARGI4
ADDRFP4 12
INDIRI4
ARGI4
ADDRLP4 4
ADDRGP4 ClientConnect
CALLP4
ASGNP4
ADDRLP4 4
INDIRP4
CVPU4 4
CVUI4 4
RETI4
ADDRGP4 $174
JUMPV
LABELV $180
line 242
;241:	case GAME_CLIENT_THINK:
;242:		ClientThink( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 ClientThink
CALLV
pop
line 243
;243:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $181
line 245
;244:	case GAME_CLIENT_USERINFO_CHANGED:
;245:		ClientUserinfoChanged( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 ClientUserinfoChanged
CALLV
pop
line 246
;246:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $182
line 248
;247:	case GAME_CLIENT_DISCONNECT:
;248:		ClientDisconnect( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 ClientDisconnect
CALLV
pop
line 249
;249:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $183
line 251
;250:	case GAME_CLIENT_BEGIN:
;251:		ClientBegin( arg0, qtrue );
ADDRFP4 4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRGP4 ClientBegin
CALLV
pop
line 252
;252:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $184
line 254
;253:	case GAME_CLIENT_COMMAND:
;254:		ClientCommand( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 ClientCommand
CALLV
pop
line 255
;255:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $185
line 257
;256:	case GAME_RUN_FRAME:
;257:		G_RunFrame( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 G_RunFrame
CALLV
pop
line 258
;258:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $174
JUMPV
LABELV $186
line 260
;259:	case GAME_CONSOLE_COMMAND:
;260:		return ConsoleCommand();
ADDRLP4 8
ADDRGP4 ConsoleCommand
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
RETI4
ADDRGP4 $174
JUMPV
LABELV $187
line 262
;261:	case BOTAI_START_FRAME:
;262:		return BotAIStartFrame( arg0 );
ADDRFP4 4
INDIRI4
ARGI4
ADDRLP4 12
ADDRGP4 BotAIStartFrame
CALLI4
ASGNI4
ADDRLP4 12
INDIRI4
RETI4
ADDRGP4 $174
JUMPV
LABELV $188
line 264
;263:	case GAME_ROFF_NOTETRACK_CALLBACK:
;264:		G_ROFF_NotetrackCallback( &g_entities[arg0], (const char *)arg1 );
CNSTI4 828
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRFP4 8
INDIRI4
CVIU4 4
CVUP4 4
ARGP4
ADDRGP4 G_ROFF_NotetrackCallback
CALLV
pop
line 265
;265:	}
LABELV $175
line 267
;266:
;267:	return -1;
CNSTI4 -1
RETI4
LABELV $174
endproc vmMain 16 12
export G_Printf
proc G_Printf 1028 12
line 271
;268:}
;269:
;270:
;271:void QDECL G_Printf( const char *fmt, ... ) {
line 275
;272:	va_list		argptr;
;273:	char		text[1024];
;274:
;275:	va_start (argptr, fmt);
ADDRLP4 0
ADDRFP4 0+4
ASGNP4
line 276
;276:	vsprintf (text, fmt, argptr);
ADDRLP4 4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 vsprintf
CALLI4
pop
line 277
;277:	va_end (argptr);
ADDRLP4 0
CNSTP4 0
ASGNP4
line 279
;278:
;279:	trap_Printf( text );
ADDRLP4 4
ARGP4
ADDRGP4 trap_Printf
CALLV
pop
line 280
;280:}
LABELV $190
endproc G_Printf 1028 12
export G_Error
proc G_Error 1028 12
line 282
;281:
;282:void QDECL G_Error( const char *fmt, ... ) {
line 286
;283:	va_list		argptr;
;284:	char		text[1024];
;285:
;286:	va_start (argptr, fmt);
ADDRLP4 0
ADDRFP4 0+4
ASGNP4
line 287
;287:	vsprintf (text, fmt, argptr);
ADDRLP4 4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 vsprintf
CALLI4
pop
line 288
;288:	va_end (argptr);
ADDRLP4 0
CNSTP4 0
ASGNP4
line 290
;289:
;290:	trap_Error( text );
ADDRLP4 4
ARGP4
ADDRGP4 trap_Error
CALLV
pop
line 291
;291:}
LABELV $192
endproc G_Error 1028 12
export G_FindTeams
proc G_FindTeams 48 12
line 304
;292:
;293:/*
;294:================
;295:G_FindTeams
;296:
;297:Chain together all entities with a matching team field.
;298:Entity teams are used for item groups and multi-entity mover groups.
;299:
;300:All but the first will have the FL_TEAMSLAVE flag set and teammaster field set
;301:All but the last will have the teamchain field set to the next one
;302:================
;303:*/
;304:void G_FindTeams( void ) {
line 309
;305:	gentity_t	*e, *e2;
;306:	int		i, j;
;307:	int		c, c2;
;308:
;309:	c = 0;
ADDRLP4 20
CNSTI4 0
ASGNI4
line 310
;310:	c2 = 0;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 311
;311:	for ( i=1, e=g_entities+i ; i < level.num_entities ; i++,e++ ){
ADDRLP4 16
CNSTI4 1
ASGNI4
ADDRLP4 4
CNSTI4 828
ADDRLP4 16
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
ADDRGP4 $198
JUMPV
LABELV $195
line 312
;312:		if (!e->inuse)
ADDRLP4 4
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
NEI4 $200
line 313
;313:			continue;
ADDRGP4 $196
JUMPV
LABELV $200
line 314
;314:		if (!e->team)
ADDRLP4 4
INDIRP4
CNSTI4 592
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
NEU4 $202
line 315
;315:			continue;
ADDRGP4 $196
JUMPV
LABELV $202
line 316
;316:		if (e->flags & FL_TEAMSLAVE)
ADDRLP4 4
INDIRP4
CNSTI4 472
ADDP4
INDIRI4
CNSTI4 1024
BANDI4
CNSTI4 0
EQI4 $204
line 317
;317:			continue;
ADDRGP4 $196
JUMPV
LABELV $204
line 318
;318:		e->teammaster = e;
ADDRLP4 4
INDIRP4
CNSTI4 740
ADDP4
ADDRLP4 4
INDIRP4
ASGNP4
line 319
;319:		c++;
ADDRLP4 20
ADDRLP4 20
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 320
;320:		c2++;
ADDRLP4 12
ADDRLP4 12
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 321
;321:		for (j=i+1, e2=e+1 ; j < level.num_entities ; j++,e2++)
ADDRLP4 8
ADDRLP4 16
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 4
INDIRP4
CNSTI4 828
ADDP4
ASGNP4
ADDRGP4 $209
JUMPV
LABELV $206
line 322
;322:		{
line 323
;323:			if (!e2->inuse)
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
NEI4 $211
line 324
;324:				continue;
ADDRGP4 $207
JUMPV
LABELV $211
line 325
;325:			if (!e2->team)
ADDRLP4 0
INDIRP4
CNSTI4 592
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
NEU4 $213
line 326
;326:				continue;
ADDRGP4 $207
JUMPV
LABELV $213
line 327
;327:			if (e2->flags & FL_TEAMSLAVE)
ADDRLP4 0
INDIRP4
CNSTI4 472
ADDP4
INDIRI4
CNSTI4 1024
BANDI4
CNSTI4 0
EQI4 $215
line 328
;328:				continue;
ADDRGP4 $207
JUMPV
LABELV $215
line 329
;329:			if (!strcmp(e->team, e2->team))
ADDRLP4 28
CNSTI4 592
ASGNI4
ADDRLP4 4
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRP4
ARGP4
ADDRLP4 32
ADDRGP4 strcmp
CALLI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 0
NEI4 $217
line 330
;330:			{
line 331
;331:				c2++;
ADDRLP4 12
ADDRLP4 12
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 332
;332:				e2->teamchain = e->teamchain;
ADDRLP4 36
CNSTI4 736
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 36
INDIRI4
ADDP4
ADDRLP4 4
INDIRP4
ADDRLP4 36
INDIRI4
ADDP4
INDIRP4
ASGNP4
line 333
;333:				e->teamchain = e2;
ADDRLP4 4
INDIRP4
CNSTI4 736
ADDP4
ADDRLP4 0
INDIRP4
ASGNP4
line 334
;334:				e2->teammaster = e;
ADDRLP4 0
INDIRP4
CNSTI4 740
ADDP4
ADDRLP4 4
INDIRP4
ASGNP4
line 335
;335:				e2->flags |= FL_TEAMSLAVE;
ADDRLP4 40
ADDRLP4 0
INDIRP4
CNSTI4 472
ADDP4
ASGNP4
ADDRLP4 40
INDIRP4
ADDRLP4 40
INDIRP4
INDIRI4
CNSTI4 1024
BORI4
ASGNI4
line 338
;336:
;337:				// make sure that targets only point at the master
;338:				if ( e2->targetname ) {
ADDRLP4 0
INDIRP4
CNSTI4 588
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $219
line 339
;339:					e->targetname = e2->targetname;
ADDRLP4 44
CNSTI4 588
ASGNI4
ADDRLP4 4
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
ADDRLP4 0
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
INDIRP4
ASGNP4
line 340
;340:					e2->targetname = NULL;
ADDRLP4 0
INDIRP4
CNSTI4 588
ADDP4
CNSTP4 0
ASGNP4
line 341
;341:				}
LABELV $219
line 342
;342:			}
LABELV $217
line 343
;343:		}
LABELV $207
line 321
ADDRLP4 8
ADDRLP4 8
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 828
ADDP4
ASGNP4
LABELV $209
ADDRLP4 8
INDIRI4
ADDRGP4 level+12
INDIRI4
LTI4 $206
line 344
;344:	}
LABELV $196
line 311
ADDRLP4 16
ADDRLP4 16
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 4
ADDRLP4 4
INDIRP4
CNSTI4 828
ADDP4
ASGNP4
LABELV $198
ADDRLP4 16
INDIRI4
ADDRGP4 level+12
INDIRI4
LTI4 $195
line 346
;345:
;346:	G_Printf ("%i teams with %i entities\n", c, c2);
ADDRGP4 $221
ARGP4
ADDRLP4 20
INDIRI4
ARGI4
ADDRLP4 12
INDIRI4
ARGI4
ADDRGP4 G_Printf
CALLV
pop
line 347
;347:}
LABELV $194
endproc G_FindTeams 48 12
export G_RemapTeamShaders
proc G_RemapTeamShaders 0 0
line 349
;348:
;349:void G_RemapTeamShaders( void ) {
line 361
;350:#if 0
;351:	char string[1024];
;352:	float f = level.time * 0.001;
;353:	Com_sprintf( string, sizeof(string), "team_icon/%s_red", g_redteam.string );
;354:	AddRemap("textures/ctf2/redteam01", string, f); 
;355:	AddRemap("textures/ctf2/redteam02", string, f); 
;356:	Com_sprintf( string, sizeof(string), "team_icon/%s_blue", g_blueteam.string );
;357:	AddRemap("textures/ctf2/blueteam01", string, f); 
;358:	AddRemap("textures/ctf2/blueteam02", string, f); 
;359:	trap_SetConfigstring(CS_SHADERSTATE, BuildShaderStateConfig());
;360:#endif
;361:}
LABELV $222
endproc G_RemapTeamShaders 0 0
export G_RegisterCvars
proc G_RegisterCvars 20 16
line 369
;362:
;363:
;364:/*
;365:=================
;366:G_RegisterCvars
;367:=================
;368:*/
;369:void G_RegisterCvars( void ) {
line 372
;370:	int			i;
;371:	cvarTable_t	*cv;
;372:	qboolean remapped = qfalse;
ADDRLP4 8
CNSTI4 0
ASGNI4
line 374
;373:
;374:	for ( i = 0, cv = gameCvarTable ; i < gameCvarTableSize ; i++, cv++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRLP4 0
ADDRGP4 gameCvarTable
ASGNP4
ADDRGP4 $227
JUMPV
LABELV $224
line 375
;375:		trap_Cvar_Register( cv->vmCvar, cv->cvarName,
ADDRLP4 0
INDIRP4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
ARGI4
ADDRGP4 trap_Cvar_Register
CALLV
pop
line 377
;376:			cv->defaultString, cv->cvarFlags );
;377:		if ( cv->vmCvar )
ADDRLP4 0
INDIRP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $228
line 378
;378:			cv->modificationCount = cv->vmCvar->modificationCount;
ADDRLP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRLP4 0
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
LABELV $228
line 380
;379:
;380:		if (cv->teamShader) {
ADDRLP4 0
INDIRP4
CNSTI4 24
ADDP4
INDIRI4
CNSTI4 0
EQI4 $230
line 381
;381:			remapped = qtrue;
ADDRLP4 8
CNSTI4 1
ASGNI4
line 382
;382:		}
LABELV $230
line 383
;383:	}
LABELV $225
line 374
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 28
ADDP4
ASGNP4
LABELV $227
ADDRLP4 4
INDIRI4
ADDRGP4 gameCvarTableSize
INDIRI4
LTI4 $224
line 385
;384:
;385:	if (remapped) {
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $232
line 386
;386:		G_RemapTeamShaders();
ADDRGP4 G_RemapTeamShaders
CALLV
pop
line 387
;387:	}
LABELV $232
line 390
;388:
;389:	// check some things
;390:	if ( g_gametype.integer < 0 || g_gametype.integer >= GT_MAX_GAME_TYPE ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 0
LTI4 $238
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 9
LTI4 $234
LABELV $238
line 391
;391:		G_Printf( "g_gametype %i is out of range, defaulting to 0\n", g_gametype.integer );
ADDRGP4 $239
ARGP4
ADDRGP4 g_gametype+12
INDIRI4
ARGI4
ADDRGP4 G_Printf
CALLV
pop
line 392
;392:		trap_Cvar_Set( "g_gametype", "0" );
ADDRGP4 $88
ARGP4
ADDRGP4 $86
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 393
;393:	}
LABELV $234
line 395
;394:
;395:	level.warmupModificationCount = g_warmup.modificationCount;
ADDRGP4 level+224
ADDRGP4 g_warmup+4
INDIRI4
ASGNI4
line 396
;396:}
LABELV $223
endproc G_RegisterCvars 20 16
export G_UpdateCvars
proc G_UpdateCvars 28 12
line 403
;397:
;398:/*
;399:=================
;400:G_UpdateCvars
;401:=================
;402:*/
;403:void G_UpdateCvars( void ) {
line 406
;404:	int			i;
;405:	cvarTable_t	*cv;
;406:	qboolean remapped = qfalse;
ADDRLP4 8
CNSTI4 0
ASGNI4
line 408
;407:
;408:	for ( i = 0, cv = gameCvarTable ; i < gameCvarTableSize ; i++, cv++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRLP4 0
ADDRGP4 gameCvarTable
ASGNP4
ADDRGP4 $247
JUMPV
LABELV $244
line 409
;409:		if ( cv->vmCvar ) {
ADDRLP4 0
INDIRP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $248
line 410
;410:			trap_Cvar_Update( cv->vmCvar );
ADDRLP4 0
INDIRP4
INDIRP4
ARGP4
ADDRGP4 trap_Cvar_Update
CALLV
pop
line 412
;411:
;412:			if ( cv->modificationCount != cv->vmCvar->modificationCount ) {
ADDRLP4 0
INDIRP4
CNSTI4 16
ADDP4
INDIRI4
ADDRLP4 0
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
EQI4 $250
line 413
;413:				cv->modificationCount = cv->vmCvar->modificationCount;
ADDRLP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRLP4 0
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 415
;414:
;415:				if ( cv->trackChange ) {
ADDRLP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 0
EQI4 $252
line 416
;416:					trap_SendServerCommand( -1, va("print \"Server: %s changed to %s\n\"", 
ADDRGP4 $254
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
ARGP4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 418
;417:						cv->cvarName, cv->vmCvar->string ) );
;418:				}
LABELV $252
line 420
;419:
;420:				if (cv->teamShader) {
ADDRLP4 0
INDIRP4
CNSTI4 24
ADDP4
INDIRI4
CNSTI4 0
EQI4 $255
line 421
;421:					remapped = qtrue;
ADDRLP4 8
CNSTI4 1
ASGNI4
line 422
;422:				}
LABELV $255
line 423
;423:			}
LABELV $250
line 424
;424:		}
LABELV $248
line 425
;425:	}
LABELV $245
line 408
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 28
ADDP4
ASGNP4
LABELV $247
ADDRLP4 4
INDIRI4
ADDRGP4 gameCvarTableSize
INDIRI4
LTI4 $244
line 427
;426:
;427:	if (remapped) {
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $257
line 428
;428:		G_RemapTeamShaders();
ADDRGP4 G_RemapTeamShaders
CALLV
pop
line 429
;429:	}
LABELV $257
line 430
;430:}
LABELV $243
endproc G_UpdateCvars 28 12
export G_InitGame
proc G_InitGame 1032 20
line 438
;431:
;432:/*
;433:============
;434:G_InitGame
;435:
;436:============
;437:*/
;438:void G_InitGame( int levelTime, int randomSeed, int restart ) {
line 441
;439:	int					i;
;440:
;441:	B_InitAlloc(); //make sure everything is clean
ADDRGP4 B_InitAlloc
CALLV
pop
line 443
;442:
;443:	G_Printf ("------- Game Initialization -------\n");
ADDRGP4 $260
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 444
;444:	G_Printf ("gamename: %s\n", GAMEVERSION);
ADDRGP4 $261
ARGP4
ADDRGP4 $82
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 445
;445:	G_Printf ("gamedate: %s\n", __DATE__);
ADDRGP4 $262
ARGP4
ADDRGP4 $84
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 447
;446:
;447:	srand( randomSeed );
ADDRFP4 4
INDIRI4
CVIU4 4
ARGU4
ADDRGP4 srand
CALLV
pop
line 449
;448:
;449:	G_RegisterCvars();
ADDRGP4 G_RegisterCvars
CALLV
pop
line 451
;450:
;451:	G_ProcessIPBans();
ADDRGP4 G_ProcessIPBans
CALLV
pop
line 453
;452:
;453:	G_InitMemory();
ADDRGP4 G_InitMemory
CALLV
pop
line 456
;454:
;455:	// set some level globals
;456:	memset( &level, 0, sizeof( level ) );
ADDRGP4 level
ARGP4
CNSTI4 0
ARGI4
CNSTI4 9096
ARGI4
ADDRGP4 memset
CALLP4
pop
line 457
;457:	level.time = levelTime;
ADDRGP4 level+32
ADDRFP4 0
INDIRI4
ASGNI4
line 458
;458:	level.startTime = levelTime;
ADDRGP4 level+40
ADDRFP4 0
INDIRI4
ASGNI4
line 460
;459:
;460:	level.snd_fry = G_SoundIndex("sound/player/fry.wav");	// FIXME standing in lava / slime
ADDRGP4 $266
ARGP4
ADDRLP4 4
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 level+220
ADDRLP4 4
INDIRI4
ASGNI4
line 464
;461:
;462:	//trap_SP_RegisterServer("mp_svgame");
;463:
;464:	if ( g_gametype.integer != GT_SINGLE_PLAYER && g_log.string[0] ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 4
EQI4 $267
ADDRGP4 g_log+16
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $267
line 465
;465:		if ( g_logSync.integer ) {
ADDRGP4 g_logSync+12
INDIRI4
CNSTI4 0
EQI4 $271
line 466
;466:			trap_FS_FOpenFile( g_log.string, &level.logFile, FS_APPEND_SYNC );
ADDRGP4 g_log+16
ARGP4
ADDRGP4 level+20
ARGP4
CNSTI4 3
ARGI4
ADDRGP4 trap_FS_FOpenFile
CALLI4
pop
line 467
;467:		} else {
ADDRGP4 $272
JUMPV
LABELV $271
line 468
;468:			trap_FS_FOpenFile( g_log.string, &level.logFile, FS_APPEND );
ADDRGP4 g_log+16
ARGP4
ADDRGP4 level+20
ARGP4
CNSTI4 2
ARGI4
ADDRGP4 trap_FS_FOpenFile
CALLI4
pop
line 469
;469:		}
LABELV $272
line 470
;470:		if ( !level.logFile ) {
ADDRGP4 level+20
INDIRI4
CNSTI4 0
NEI4 $278
line 471
;471:			G_Printf( "WARNING: Couldn't open logfile: %s\n", g_log.string );
ADDRGP4 $281
ARGP4
ADDRGP4 g_log+16
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 472
;472:		} else {
ADDRGP4 $268
JUMPV
LABELV $278
line 475
;473:			char	serverinfo[MAX_INFO_STRING];
;474:
;475:			trap_GetServerinfo( serverinfo, sizeof( serverinfo ) );
ADDRLP4 8
ARGP4
CNSTI4 1024
ARGI4
ADDRGP4 trap_GetServerinfo
CALLV
pop
line 477
;476:
;477:			G_LogPrintf("------------------------------------------------------------\n" );
ADDRGP4 $283
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 478
;478:			G_LogPrintf("InitGame: %s\n", serverinfo );
ADDRGP4 $284
ARGP4
ADDRLP4 8
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 479
;479:		}
line 480
;480:	} else {
ADDRGP4 $268
JUMPV
LABELV $267
line 481
;481:		G_Printf( "Not logging to disk.\n" );
ADDRGP4 $285
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 482
;482:	}
LABELV $268
line 484
;483:
;484:	G_LogWeaponInit();
ADDRGP4 G_LogWeaponInit
CALLV
pop
line 486
;485:
;486:	G_InitWorldSession();
ADDRGP4 G_InitWorldSession
CALLV
pop
line 489
;487:
;488:	// initialize all entities for this game
;489:	memset( g_entities, 0, MAX_GENTITIES * sizeof(g_entities[0]) );
ADDRGP4 g_entities
ARGP4
CNSTI4 0
ARGI4
CNSTI4 847872
ARGI4
ADDRGP4 memset
CALLP4
pop
line 490
;490:	level.gentities = g_entities;
ADDRGP4 level+4
ADDRGP4 g_entities
ASGNP4
line 493
;491:
;492:	// initialize all clients for this game
;493:	level.maxclients = g_maxclients.integer;
ADDRGP4 level+24
ADDRGP4 g_maxclients+12
INDIRI4
ASGNI4
line 494
;494:	memset( g_clients, 0, MAX_CLIENTS * sizeof(g_clients[0]) );
ADDRGP4 g_clients
ARGP4
CNSTI4 0
ARGI4
CNSTI4 56192
ARGI4
ADDRGP4 memset
CALLP4
pop
line 495
;495:	level.clients = g_clients;
ADDRGP4 level
ADDRGP4 g_clients
ASGNP4
line 498
;496:
;497:	// set client fields on player ents
;498:	for ( i=0 ; i<level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $292
JUMPV
LABELV $289
line 499
;499:		g_entities[i].client = level.clients + i;
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 500
;500:	}
LABELV $290
line 498
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $292
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $289
line 505
;501:
;502:	// always leave room for the max number of clients,
;503:	// even if they aren't all used, so numbers inside that
;504:	// range are NEVER anything but clients
;505:	level.num_entities = MAX_CLIENTS;
ADDRGP4 level+12
CNSTI4 32
ASGNI4
line 508
;506:
;507:	// let the server system know where the entites are
;508:	trap_LocateGameData( level.gentities, level.num_entities, sizeof( gentity_t ), 
ADDRGP4 level+4
INDIRP4
ARGP4
ADDRGP4 level+12
INDIRI4
ARGI4
CNSTI4 828
ARGI4
ADDRGP4 level
INDIRP4
ARGP4
CNSTI4 1756
ARGI4
ADDRGP4 trap_LocateGameData
CALLV
pop
line 512
;509:		&level.clients[0].ps, sizeof( level.clients[0] ) );
;510:
;511:	// reserve some spots for dead player bodies
;512:	InitBodyQue();
ADDRGP4 InitBodyQue
CALLV
pop
line 514
;513:
;514:	ClearRegisteredItems();
ADDRGP4 ClearRegisteredItems
CALLV
pop
line 518
;515:
;516:	// initialize saga mode before spawning entities so we know
;517:	// if we should remove any saga-related entities on spawn
;518:	InitSagaMode();
ADDRGP4 InitSagaMode
CALLV
pop
line 521
;519:
;520:	// parse the key/value pairs and spawn gentities
;521:	G_SpawnEntitiesFromString();
ADDRGP4 G_SpawnEntitiesFromString
CALLV
pop
line 524
;522:
;523:	// general initialization
;524:	G_FindTeams();
ADDRGP4 G_FindTeams
CALLV
pop
line 527
;525:
;526:	// make sure we have flags for CTF, etc
;527:	if( g_gametype.integer >= GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LTI4 $298
line 528
;528:		G_CheckTeamItems();
ADDRGP4 G_CheckTeamItems
CALLV
pop
line 529
;529:	}
ADDRGP4 $299
JUMPV
LABELV $298
line 530
;530:	else if ( g_gametype.integer == GT_JEDIMASTER )
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 2
NEI4 $301
line 531
;531:	{
line 532
;532:		trap_SetConfigstring ( CS_CLIENT_JEDIMASTER, "-1" );
CNSTI4 28
ARGI4
ADDRGP4 $304
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 533
;533:	}
LABELV $301
LABELV $299
line 535
;534:
;535:	trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("-1|-1") );
ADDRGP4 $305
ARGP4
ADDRLP4 8
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 30
ARGI4
ADDRLP4 8
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 536
;536:	trap_SetConfigstring ( CS_CLIENT_DUELWINNER, va("-1") );
ADDRGP4 $304
ARGP4
ADDRLP4 12
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 29
ARGI4
ADDRLP4 12
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 537
;537:	gDuelist1 = -1;
ADDRGP4 gDuelist1
CNSTI4 -1
ASGNI4
line 538
;538:	gDuelist2 = -1;
ADDRGP4 gDuelist2
CNSTI4 -1
ASGNI4
line 540
;539:
;540:	SaveRegisteredItems();
ADDRGP4 SaveRegisteredItems
CALLV
pop
line 542
;541:
;542:	G_Printf ("-----------------------------------\n");
ADDRGP4 $306
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 544
;543:
;544:	if( g_gametype.integer == GT_SINGLE_PLAYER || trap_Cvar_VariableIntegerValue( "com_buildScript" ) ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 4
EQI4 $311
ADDRGP4 $310
ARGP4
ADDRLP4 16
ADDRGP4 trap_Cvar_VariableIntegerValue
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $307
LABELV $311
line 545
;545:		G_ModelIndex( SP_PODIUM_MODEL );
ADDRGP4 $312
ARGP4
ADDRGP4 G_ModelIndex
CALLI4
pop
line 546
;546:		G_SoundIndex( "sound/player/gurp1.wav" );
ADDRGP4 $313
ARGP4
ADDRGP4 G_SoundIndex
CALLI4
pop
line 547
;547:		G_SoundIndex( "sound/player/gurp2.wav" );
ADDRGP4 $314
ARGP4
ADDRGP4 G_SoundIndex
CALLI4
pop
line 548
;548:	}
LABELV $307
line 550
;549:
;550:	if ( trap_Cvar_VariableIntegerValue( "bot_enable" ) ) {
ADDRGP4 $317
ARGP4
ADDRLP4 20
ADDRGP4 trap_Cvar_VariableIntegerValue
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
EQI4 $315
line 551
;551:		BotAISetup( restart );
ADDRFP4 8
INDIRI4
ARGI4
ADDRGP4 BotAISetup
CALLI4
pop
line 552
;552:		BotAILoadMap( restart );
ADDRFP4 8
INDIRI4
ARGI4
ADDRGP4 BotAILoadMap
CALLI4
pop
line 553
;553:		G_InitBots( restart );
ADDRFP4 8
INDIRI4
ARGI4
ADDRGP4 G_InitBots
CALLV
pop
line 554
;554:	}
LABELV $315
line 556
;555:
;556:	G_RemapTeamShaders();
ADDRGP4 G_RemapTeamShaders
CALLV
pop
line 557
;557:}
LABELV $259
endproc G_InitGame 1032 20
export G_ShutdownGame
proc G_ShutdownGame 4 4
line 566
;558:
;559:
;560:
;561:/*
;562:=================
;563:G_ShutdownGame
;564:=================
;565:*/
;566:void G_ShutdownGame( int restart ) {
line 567
;567:	G_Printf ("==== ShutdownGame ====\n");
ADDRGP4 $319
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 569
;568:
;569:	G_LogWeaponOutput();
ADDRGP4 G_LogWeaponOutput
CALLV
pop
line 571
;570:
;571:	if ( level.logFile ) {
ADDRGP4 level+20
INDIRI4
CNSTI4 0
EQI4 $320
line 572
;572:		G_LogPrintf("ShutdownGame:\n" );
ADDRGP4 $323
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 573
;573:		G_LogPrintf("------------------------------------------------------------\n" );
ADDRGP4 $283
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 574
;574:		trap_FS_FCloseFile( level.logFile );
ADDRGP4 level+20
INDIRI4
ARGI4
ADDRGP4 trap_FS_FCloseFile
CALLV
pop
line 575
;575:	}
LABELV $320
line 578
;576:
;577:	// write all the client session data so we can get it back
;578:	G_WriteSessionData();
ADDRGP4 G_WriteSessionData
CALLV
pop
line 580
;579:
;580:	trap_ROFF_Clean();
ADDRGP4 trap_ROFF_Clean
CALLI4
pop
line 582
;581:
;582:	if ( trap_Cvar_VariableIntegerValue( "bot_enable" ) ) {
ADDRGP4 $317
ARGP4
ADDRLP4 0
ADDRGP4 trap_Cvar_VariableIntegerValue
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $325
line 583
;583:		BotAIShutdown( restart );
ADDRFP4 0
INDIRI4
ARGI4
ADDRGP4 BotAIShutdown
CALLI4
pop
line 584
;584:	}
LABELV $325
line 586
;585:
;586:	B_CleanupAlloc(); //clean up all allocations made with B_Alloc
ADDRGP4 B_CleanupAlloc
CALLV
pop
line 587
;587:}
LABELV $318
endproc G_ShutdownGame 4 4
export Com_Error
proc Com_Error 1028 12
line 596
;588:
;589:
;590:
;591://===================================================================
;592:
;593:#ifndef GAME_HARD_LINKED
;594:// this is only here so the functions in q_shared.c and bg_*.c can link
;595:
;596:void QDECL Com_Error ( int level, const char *error, ... ) {
line 600
;597:	va_list		argptr;
;598:	char		text[1024];
;599:
;600:	va_start (argptr, error);
ADDRLP4 0
ADDRFP4 4+4
ASGNP4
line 601
;601:	vsprintf (text, error, argptr);
ADDRLP4 4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 vsprintf
CALLI4
pop
line 602
;602:	va_end (argptr);
ADDRLP4 0
CNSTP4 0
ASGNP4
line 604
;603:
;604:	G_Error( "%s", text);
ADDRGP4 $329
ARGP4
ADDRLP4 4
ARGP4
ADDRGP4 G_Error
CALLV
pop
line 605
;605:}
LABELV $327
endproc Com_Error 1028 12
export Com_Printf
proc Com_Printf 1028 12
line 607
;606:
;607:void QDECL Com_Printf( const char *msg, ... ) {
line 611
;608:	va_list		argptr;
;609:	char		text[1024];
;610:
;611:	va_start (argptr, msg);
ADDRLP4 0
ADDRFP4 0+4
ASGNP4
line 612
;612:	vsprintf (text, msg, argptr);
ADDRLP4 4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 vsprintf
CALLI4
pop
line 613
;613:	va_end (argptr);
ADDRLP4 0
CNSTP4 0
ASGNP4
line 615
;614:
;615:	G_Printf ("%s", text);
ADDRGP4 $329
ARGP4
ADDRLP4 4
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 616
;616:}
LABELV $330
endproc Com_Printf 1028 12
export AddTournamentPlayer
proc AddTournamentPlayer 24 8
line 636
;617:
;618:#endif
;619:
;620:/*
;621:========================================================================
;622:
;623:PLAYER COUNTING / SCORE SORTING
;624:
;625:========================================================================
;626:*/
;627:
;628:/*
;629:=============
;630:AddTournamentPlayer
;631:
;632:If there are less than two tournament players, put a
;633:spectator in the game and restart
;634:=============
;635:*/
;636:void AddTournamentPlayer( void ) {
line 641
;637:	int			i;
;638:	gclient_t	*client;
;639:	gclient_t	*nextInLine;
;640:
;641:	if ( level.numPlayingClients >= 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
LTI4 $333
line 642
;642:		return;
ADDRGP4 $332
JUMPV
LABELV $333
line 650
;643:	}
;644:
;645:	// never change during intermission
;646://	if ( level.intermissiontime ) {
;647://		return;
;648://	}
;649:
;650:	nextInLine = NULL;
ADDRLP4 8
CNSTP4 0
ASGNP4
line 652
;651:
;652:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $339
JUMPV
LABELV $336
line 653
;653:		client = &level.clients[i];
ADDRLP4 0
CNSTI4 1756
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 654
;654:		if ( client->pers.connected != CON_CONNECTED ) {
ADDRLP4 0
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $341
line 655
;655:			continue;
ADDRGP4 $337
JUMPV
LABELV $341
line 657
;656:		}
;657:		if ( client->sess.sessionTeam != TEAM_SPECTATOR ) {
ADDRLP4 0
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
EQI4 $343
line 658
;658:			continue;
ADDRGP4 $337
JUMPV
LABELV $343
line 661
;659:		}
;660:		// never select the dedicated follow or scoreboard clients
;661:		if ( client->sess.spectatorState == SPECTATOR_SCOREBOARD || 
ADDRLP4 0
INDIRP4
CNSTI4 1528
ADDP4
INDIRI4
CNSTI4 3
EQI4 $347
ADDRLP4 0
INDIRP4
CNSTI4 1532
ADDP4
INDIRI4
CNSTI4 0
GEI4 $345
LABELV $347
line 662
;662:			client->sess.spectatorClient < 0  ) {
line 663
;663:			continue;
ADDRGP4 $337
JUMPV
LABELV $345
line 666
;664:		}
;665:
;666:		if ( !nextInLine || client->sess.spectatorTime < nextInLine->sess.spectatorTime ) {
ADDRLP4 8
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $350
ADDRLP4 20
CNSTI4 1524
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 20
INDIRI4
ADDP4
INDIRI4
ADDRLP4 8
INDIRP4
ADDRLP4 20
INDIRI4
ADDP4
INDIRI4
GEI4 $348
LABELV $350
line 667
;667:			nextInLine = client;
ADDRLP4 8
ADDRLP4 0
INDIRP4
ASGNP4
line 668
;668:		}
LABELV $348
line 669
;669:	}
LABELV $337
line 652
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $339
ADDRLP4 4
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $336
line 671
;670:
;671:	if ( !nextInLine ) {
ADDRLP4 8
INDIRP4
CVPU4 4
CNSTU4 0
NEU4 $351
line 672
;672:		return;
ADDRGP4 $332
JUMPV
LABELV $351
line 675
;673:	}
;674:
;675:	level.warmupTime = -1;
ADDRGP4 level+16
CNSTI4 -1
ASGNI4
line 678
;676:
;677:	// set them to free-for-all team
;678:	SetTeam( &g_entities[ nextInLine - level.clients ], "f" );
CNSTI4 828
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRGP4 level
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
CNSTI4 1756
DIVI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRGP4 $354
ARGP4
ADDRGP4 SetTeam
CALLV
pop
line 679
;679:}
LABELV $332
endproc AddTournamentPlayer 24 8
export RemoveTournamentLoser
proc RemoveTournamentLoser 4 8
line 688
;680:
;681:/*
;682:=======================
;683:RemoveTournamentLoser
;684:
;685:Make the loser a spectator at the back of the line
;686:=======================
;687:*/
;688:void RemoveTournamentLoser( void ) {
line 691
;689:	int			clientNum;
;690:
;691:	if ( level.numPlayingClients != 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
EQI4 $356
line 692
;692:		return;
ADDRGP4 $355
JUMPV
LABELV $356
line 695
;693:	}
;694:
;695:	clientNum = level.sortedClients[1];
ADDRLP4 0
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 697
;696:
;697:	if ( level.clients[ clientNum ].pers.connected != CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $361
line 698
;698:		return;
ADDRGP4 $355
JUMPV
LABELV $361
line 702
;699:	}
;700:
;701:	// make them a spectator
;702:	SetTeam( &g_entities[ clientNum ], "s" );
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRGP4 $363
ARGP4
ADDRGP4 SetTeam
CALLV
pop
line 703
;703:}
LABELV $355
endproc RemoveTournamentLoser 4 8
export RemoveTournamentWinner
proc RemoveTournamentWinner 4 8
line 710
;704:
;705:/*
;706:=======================
;707:RemoveTournamentWinner
;708:=======================
;709:*/
;710:void RemoveTournamentWinner( void ) {
line 713
;711:	int			clientNum;
;712:
;713:	if ( level.numPlayingClients != 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
EQI4 $365
line 714
;714:		return;
ADDRGP4 $364
JUMPV
LABELV $365
line 717
;715:	}
;716:
;717:	clientNum = level.sortedClients[0];
ADDRLP4 0
ADDRGP4 level+84
INDIRI4
ASGNI4
line 719
;718:
;719:	if ( level.clients[ clientNum ].pers.connected != CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $369
line 720
;720:		return;
ADDRGP4 $364
JUMPV
LABELV $369
line 724
;721:	}
;722:
;723:	// make them a spectator
;724:	SetTeam( &g_entities[ clientNum ], "s" );
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRGP4 $363
ARGP4
ADDRGP4 SetTeam
CALLV
pop
line 725
;725:}
LABELV $364
endproc RemoveTournamentWinner 4 8
export AdjustTournamentScores
proc AdjustTournamentScores 12 8
line 732
;726:
;727:/*
;728:=======================
;729:AdjustTournamentScores
;730:=======================
;731:*/
;732:void AdjustTournamentScores( void ) {
line 735
;733:	int			clientNum;
;734:
;735:	clientNum = level.sortedClients[0];
ADDRLP4 0
ADDRGP4 level+84
INDIRI4
ASGNI4
line 736
;736:	if ( level.clients[ clientNum ].pers.connected == CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
NEI4 $373
line 737
;737:		level.clients[ clientNum ].sess.wins++;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1536
ADDP4
ASGNP4
ADDRLP4 4
INDIRP4
ADDRLP4 4
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 738
;738:		ClientUserinfoChanged( clientNum );
ADDRLP4 0
INDIRI4
ARGI4
ADDRGP4 ClientUserinfoChanged
CALLV
pop
line 740
;739:
;740:		trap_SetConfigstring ( CS_CLIENT_DUELWINNER, va("%i", clientNum ) );
ADDRGP4 $375
ARGP4
ADDRLP4 0
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 29
ARGI4
ADDRLP4 8
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 741
;741:	}
LABELV $373
line 743
;742:
;743:	clientNum = level.sortedClients[1];
ADDRLP4 0
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 744
;744:	if ( level.clients[ clientNum ].pers.connected == CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
NEI4 $378
line 745
;745:		level.clients[ clientNum ].sess.losses++;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1540
ADDP4
ASGNP4
ADDRLP4 4
INDIRP4
ADDRLP4 4
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 746
;746:		ClientUserinfoChanged( clientNum );
ADDRLP4 0
INDIRI4
ARGI4
ADDRGP4 ClientUserinfoChanged
CALLV
pop
line 747
;747:	}
LABELV $378
line 749
;748:
;749:}
LABELV $371
endproc AdjustTournamentScores 12 8
export SortRanks
proc SortRanks 32 0
line 757
;750:
;751:/*
;752:=============
;753:SortRanks
;754:
;755:=============
;756:*/
;757:int QDECL SortRanks( const void *a, const void *b ) {
line 760
;758:	gclient_t	*ca, *cb;
;759:
;760:	ca = &level.clients[*(int *)a];
ADDRLP4 0
CNSTI4 1756
ADDRFP4 0
INDIRP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 761
;761:	cb = &level.clients[*(int *)b];
ADDRLP4 4
CNSTI4 1756
ADDRFP4 4
INDIRP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 764
;762:
;763:	// sort special clients last
;764:	if ( ca->sess.spectatorState == SPECTATOR_SCOREBOARD || ca->sess.spectatorClient < 0 ) {
ADDRLP4 0
INDIRP4
CNSTI4 1528
ADDP4
INDIRI4
CNSTI4 3
EQI4 $383
ADDRLP4 0
INDIRP4
CNSTI4 1532
ADDP4
INDIRI4
CNSTI4 0
GEI4 $381
LABELV $383
line 765
;765:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $380
JUMPV
LABELV $381
line 767
;766:	}
;767:	if ( cb->sess.spectatorState == SPECTATOR_SCOREBOARD || cb->sess.spectatorClient < 0  ) {
ADDRLP4 4
INDIRP4
CNSTI4 1528
ADDP4
INDIRI4
CNSTI4 3
EQI4 $386
ADDRLP4 4
INDIRP4
CNSTI4 1532
ADDP4
INDIRI4
CNSTI4 0
GEI4 $384
LABELV $386
line 768
;768:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $380
JUMPV
LABELV $384
line 772
;769:	}
;770:
;771:	// then connecting clients
;772:	if ( ca->pers.connected == CON_CONNECTING ) {
ADDRLP4 0
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 1
NEI4 $387
line 773
;773:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $380
JUMPV
LABELV $387
line 775
;774:	}
;775:	if ( cb->pers.connected == CON_CONNECTING ) {
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 1
NEI4 $389
line 776
;776:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $380
JUMPV
LABELV $389
line 781
;777:	}
;778:
;779:
;780:	// then spectators
;781:	if ( ca->sess.sessionTeam == TEAM_SPECTATOR && cb->sess.sessionTeam == TEAM_SPECTATOR ) {
ADDRLP4 16
CNSTI4 1520
ASGNI4
ADDRLP4 20
CNSTI4 3
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 16
INDIRI4
ADDP4
INDIRI4
ADDRLP4 20
INDIRI4
NEI4 $391
ADDRLP4 4
INDIRP4
ADDRLP4 16
INDIRI4
ADDP4
INDIRI4
ADDRLP4 20
INDIRI4
NEI4 $391
line 782
;782:		if ( ca->sess.spectatorTime < cb->sess.spectatorTime ) {
ADDRLP4 24
CNSTI4 1524
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRI4
ADDRLP4 4
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRI4
GEI4 $393
line 783
;783:			return -1;
CNSTI4 -1
RETI4
ADDRGP4 $380
JUMPV
LABELV $393
line 785
;784:		}
;785:		if ( ca->sess.spectatorTime > cb->sess.spectatorTime ) {
ADDRLP4 28
CNSTI4 1524
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRI4
ADDRLP4 4
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRI4
LEI4 $395
line 786
;786:			return 1;
CNSTI4 1
RETI4
ADDRGP4 $380
JUMPV
LABELV $395
line 788
;787:		}
;788:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $380
JUMPV
LABELV $391
line 790
;789:	}
;790:	if ( ca->sess.sessionTeam == TEAM_SPECTATOR ) {
ADDRLP4 0
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $397
line 791
;791:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $380
JUMPV
LABELV $397
line 793
;792:	}
;793:	if ( cb->sess.sessionTeam == TEAM_SPECTATOR ) {
ADDRLP4 4
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $399
line 794
;794:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $380
JUMPV
LABELV $399
line 798
;795:	}
;796:
;797:	// then sort by score
;798:	if ( ca->ps.persistant[PERS_SCORE]
ADDRLP4 24
CNSTI4 280
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRI4
ADDRLP4 4
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRI4
LEI4 $401
line 799
;799:		> cb->ps.persistant[PERS_SCORE] ) {
line 800
;800:		return -1;
CNSTI4 -1
RETI4
ADDRGP4 $380
JUMPV
LABELV $401
line 802
;801:	}
;802:	if ( ca->ps.persistant[PERS_SCORE]
ADDRLP4 28
CNSTI4 280
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRI4
ADDRLP4 4
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRI4
GEI4 $403
line 803
;803:		< cb->ps.persistant[PERS_SCORE] ) {
line 804
;804:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $380
JUMPV
LABELV $403
line 806
;805:	}
;806:	return 0;
CNSTI4 0
RETI4
LABELV $380
endproc SortRanks 32 0
export CalculateRanks
proc CalculateRanks 52 16
line 818
;807:}
;808:
;809:/*
;810:============
;811:CalculateRanks
;812:
;813:Recalculates the score ranks of all players
;814:This will be called on every client connect, begin, disconnect, death,
;815:and team change.
;816:============
;817:*/
;818:void CalculateRanks( void ) {
line 823
;819:	int		i;
;820:	int		rank;
;821:	int		score;
;822:	int		newScore;
;823:	int		preNumSpec = 0;
ADDRLP4 24
CNSTI4 0
ASGNI4
line 824
;824:	int		nonSpecIndex = -1;
ADDRLP4 20
CNSTI4 -1
ASGNI4
line 827
;825:	gclient_t	*cl;
;826:
;827:	preNumSpec = level.numNonSpectatorClients;
ADDRLP4 24
ADDRGP4 level+76
INDIRI4
ASGNI4
line 829
;828:
;829:	level.follow1 = -1;
ADDRGP4 level+212
CNSTI4 -1
ASGNI4
line 830
;830:	level.follow2 = -1;
ADDRGP4 level+216
CNSTI4 -1
ASGNI4
line 831
;831:	level.numConnectedClients = 0;
ADDRGP4 level+72
CNSTI4 0
ASGNI4
line 832
;832:	level.numNonSpectatorClients = 0;
ADDRGP4 level+76
CNSTI4 0
ASGNI4
line 833
;833:	level.numPlayingClients = 0;
ADDRGP4 level+80
CNSTI4 0
ASGNI4
line 834
;834:	level.numVotingClients = 0;		// don't count bots
ADDRGP4 level+2292
CNSTI4 0
ASGNI4
line 835
;835:	for ( i = 0; i < TEAM_NUM_TEAMS; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $413
line 836
;836:		level.numteamVotingClients[i] = 0;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+4376
ADDP4
CNSTI4 0
ASGNI4
line 837
;837:	}
LABELV $414
line 835
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 4
LTI4 $413
line 838
;838:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $421
JUMPV
LABELV $418
line 839
;839:		if ( level.clients[i].pers.connected != CON_DISCONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 0
EQI4 $423
line 840
;840:			level.sortedClients[level.numConnectedClients] = i;
ADDRGP4 level+72
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
ADDRLP4 0
INDIRI4
ASGNI4
line 841
;841:			level.numConnectedClients++;
ADDRLP4 28
ADDRGP4 level+72
ASGNP4
ADDRLP4 28
INDIRP4
ADDRLP4 28
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 843
;842:
;843:			if ( level.clients[i].sess.sessionTeam != TEAM_SPECTATOR ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
EQI4 $428
line 844
;844:				level.numNonSpectatorClients++;
ADDRLP4 32
ADDRGP4 level+76
ASGNP4
ADDRLP4 32
INDIRP4
ADDRLP4 32
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 845
;845:				nonSpecIndex = i;
ADDRLP4 20
ADDRLP4 0
INDIRI4
ASGNI4
line 848
;846:			
;847:				// decide if this should be auto-followed
;848:				if ( level.clients[i].pers.connected == CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
NEI4 $431
line 849
;849:					level.numPlayingClients++;
ADDRLP4 36
ADDRGP4 level+80
ASGNP4
ADDRLP4 36
INDIRP4
ADDRLP4 36
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 850
;850:					if ( !(g_entities[i].r.svFlags & SVF_BOT) ) {
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities+296+8
ADDP4
INDIRI4
CNSTI4 8
BANDI4
CNSTI4 0
NEI4 $434
line 851
;851:						level.numVotingClients++;
ADDRLP4 40
ADDRGP4 level+2292
ASGNP4
ADDRLP4 40
INDIRP4
ADDRLP4 40
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 852
;852:						if ( level.clients[i].sess.sessionTeam == TEAM_RED )
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 1
NEI4 $439
line 853
;853:							level.numteamVotingClients[0]++;
ADDRLP4 44
ADDRGP4 level+4376
ASGNP4
ADDRLP4 44
INDIRP4
ADDRLP4 44
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRGP4 $440
JUMPV
LABELV $439
line 854
;854:						else if ( level.clients[i].sess.sessionTeam == TEAM_BLUE )
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 2
NEI4 $442
line 855
;855:							level.numteamVotingClients[1]++;
ADDRLP4 48
ADDRGP4 level+4376+4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $442
LABELV $440
line 856
;856:					}
LABELV $434
line 857
;857:					if ( level.follow1 == -1 ) {
ADDRGP4 level+212
INDIRI4
CNSTI4 -1
NEI4 $446
line 858
;858:						level.follow1 = i;
ADDRGP4 level+212
ADDRLP4 0
INDIRI4
ASGNI4
line 859
;859:					} else if ( level.follow2 == -1 ) {
ADDRGP4 $447
JUMPV
LABELV $446
ADDRGP4 level+216
INDIRI4
CNSTI4 -1
NEI4 $450
line 860
;860:						level.follow2 = i;
ADDRGP4 level+216
ADDRLP4 0
INDIRI4
ASGNI4
line 861
;861:					}
LABELV $450
LABELV $447
line 862
;862:				}
LABELV $431
line 863
;863:			}
LABELV $428
line 864
;864:		}
LABELV $423
line 865
;865:	}
LABELV $419
line 838
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $421
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $418
line 867
;866:
;867:	if (!g_warmup.integer)
ADDRGP4 g_warmup+12
INDIRI4
CNSTI4 0
NEI4 $454
line 868
;868:	{
line 869
;869:		level.warmupTime = 0;
ADDRGP4 level+16
CNSTI4 0
ASGNI4
line 870
;870:	}
LABELV $454
line 886
;871:
;872:	/*
;873:	if (level.numNonSpectatorClients == 2 && preNumSpec < 2 && nonSpecIndex != -1 && g_gametype.integer == GT_TOURNAMENT && !level.warmupTime)
;874:	{
;875:		gentity_t *currentWinner = G_GetDuelWinner(&level.clients[nonSpecIndex]);
;876:
;877:		if (currentWinner && currentWinner->client)
;878:		{
;879:			trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s %s\n\"",
;880:			currentWinner->client->pers.netname, G_GetStripEdString("SVINGAME", "VERSUS"), level.clients[nonSpecIndex].pers.netname));
;881:		}
;882:	}
;883:	*/
;884:	//NOTE: for now not doing this either. May use later if appropriate.
;885:
;886:	qsort( level.sortedClients, level.numConnectedClients, 
ADDRGP4 level+84
ARGP4
ADDRGP4 level+72
INDIRI4
ARGI4
CNSTI4 4
ARGI4
ADDRGP4 SortRanks
ARGP4
ADDRGP4 qsort
CALLV
pop
line 890
;887:		sizeof(level.sortedClients[0]), SortRanks );
;888:
;889:	// set the rank value for all clients that are connected and not spectators
;890:	if ( g_gametype.integer >= GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LTI4 $461
line 892
;891:		// in team games, rank is just the order of the teams, 0=red, 1=blue, 2=tied
;892:		for ( i = 0;  i < level.numConnectedClients; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $467
JUMPV
LABELV $464
line 893
;893:			cl = &level.clients[ level.sortedClients[i] ];
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 894
;894:			if ( level.teamScores[TEAM_RED] == level.teamScores[TEAM_BLUE] ) {
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 level+44+8
INDIRI4
NEI4 $470
line 895
;895:				cl->ps.persistant[PERS_RANK] = 2;
ADDRLP4 4
INDIRP4
CNSTI4 288
ADDP4
CNSTI4 2
ASGNI4
line 896
;896:			} else if ( level.teamScores[TEAM_RED] > level.teamScores[TEAM_BLUE] ) {
ADDRGP4 $471
JUMPV
LABELV $470
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 level+44+8
INDIRI4
LEI4 $476
line 897
;897:				cl->ps.persistant[PERS_RANK] = 0;
ADDRLP4 4
INDIRP4
CNSTI4 288
ADDP4
CNSTI4 0
ASGNI4
line 898
;898:			} else {
ADDRGP4 $477
JUMPV
LABELV $476
line 899
;899:				cl->ps.persistant[PERS_RANK] = 1;
ADDRLP4 4
INDIRP4
CNSTI4 288
ADDP4
CNSTI4 1
ASGNI4
line 900
;900:			}
LABELV $477
LABELV $471
line 901
;901:		}
LABELV $465
line 892
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $467
ADDRLP4 0
INDIRI4
ADDRGP4 level+72
INDIRI4
LTI4 $464
line 902
;902:	} else {	
ADDRGP4 $462
JUMPV
LABELV $461
line 903
;903:		rank = -1;
ADDRLP4 12
CNSTI4 -1
ASGNI4
line 904
;904:		score = 0;
ADDRLP4 16
CNSTI4 0
ASGNI4
line 905
;905:		for ( i = 0;  i < level.numPlayingClients; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $485
JUMPV
LABELV $482
line 906
;906:			cl = &level.clients[ level.sortedClients[i] ];
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 907
;907:			newScore = cl->ps.persistant[PERS_SCORE];
ADDRLP4 8
ADDRLP4 4
INDIRP4
CNSTI4 280
ADDP4
INDIRI4
ASGNI4
line 908
;908:			if ( i == 0 || newScore != score ) {
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $490
ADDRLP4 8
INDIRI4
ADDRLP4 16
INDIRI4
EQI4 $488
LABELV $490
line 909
;909:				rank = i;
ADDRLP4 12
ADDRLP4 0
INDIRI4
ASGNI4
line 911
;910:				// assume we aren't tied until the next client is checked
;911:				level.clients[ level.sortedClients[i] ].ps.persistant[PERS_RANK] = rank;
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 288
ADDP4
ADDRLP4 12
INDIRI4
ASGNI4
line 912
;912:			} else {
ADDRGP4 $489
JUMPV
LABELV $488
line 914
;913:				// we are tied with the previous client
;914:				level.clients[ level.sortedClients[i-1] ].ps.persistant[PERS_RANK] = rank | RANK_TIED_FLAG;
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84-4
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 288
ADDP4
ADDRLP4 12
INDIRI4
CNSTI4 16384
BORI4
ASGNI4
line 915
;915:				level.clients[ level.sortedClients[i] ].ps.persistant[PERS_RANK] = rank | RANK_TIED_FLAG;
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 288
ADDP4
ADDRLP4 12
INDIRI4
CNSTI4 16384
BORI4
ASGNI4
line 916
;916:			}
LABELV $489
line 917
;917:			score = newScore;
ADDRLP4 16
ADDRLP4 8
INDIRI4
ASGNI4
line 918
;918:			if ( g_gametype.integer == GT_SINGLE_PLAYER && level.numPlayingClients == 1 ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 4
NEI4 $495
ADDRGP4 level+80
INDIRI4
CNSTI4 1
NEI4 $495
line 919
;919:				level.clients[ level.sortedClients[i] ].ps.persistant[PERS_RANK] = rank | RANK_TIED_FLAG;
CNSTI4 1756
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 288
ADDP4
ADDRLP4 12
INDIRI4
CNSTI4 16384
BORI4
ASGNI4
line 920
;920:			}
LABELV $495
line 921
;921:		}
LABELV $483
line 905
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $485
ADDRLP4 0
INDIRI4
ADDRGP4 level+80
INDIRI4
LTI4 $482
line 922
;922:	}
LABELV $462
line 925
;923:
;924:	// set the CS_SCORES1/2 configstrings, which will be visible to everyone
;925:	if ( g_gametype.integer >= GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LTI4 $500
line 926
;926:		trap_SetConfigstring( CS_SCORES1, va("%i", level.teamScores[TEAM_RED] ) );
ADDRGP4 $375
ARGP4
ADDRGP4 level+44+4
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 6
ARGI4
ADDRLP4 28
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 927
;927:		trap_SetConfigstring( CS_SCORES2, va("%i", level.teamScores[TEAM_BLUE] ) );
ADDRGP4 $375
ARGP4
ADDRGP4 level+44+8
INDIRI4
ARGI4
ADDRLP4 32
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 7
ARGI4
ADDRLP4 32
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 928
;928:	} else {
ADDRGP4 $501
JUMPV
LABELV $500
line 929
;929:		if ( level.numConnectedClients == 0 ) {
ADDRGP4 level+72
INDIRI4
CNSTI4 0
NEI4 $507
line 930
;930:			trap_SetConfigstring( CS_SCORES1, va("%i", SCORE_NOT_PRESENT) );
ADDRGP4 $375
ARGP4
CNSTI4 -9999
ARGI4
ADDRLP4 28
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 6
ARGI4
ADDRLP4 28
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 931
;931:			trap_SetConfigstring( CS_SCORES2, va("%i", SCORE_NOT_PRESENT) );
ADDRGP4 $375
ARGP4
CNSTI4 -9999
ARGI4
ADDRLP4 32
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 7
ARGI4
ADDRLP4 32
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 932
;932:		} else if ( level.numConnectedClients == 1 ) {
ADDRGP4 $508
JUMPV
LABELV $507
ADDRGP4 level+72
INDIRI4
CNSTI4 1
NEI4 $510
line 933
;933:			trap_SetConfigstring( CS_SCORES1, va("%i", level.clients[ level.sortedClients[0] ].ps.persistant[PERS_SCORE] ) );
ADDRGP4 $375
ARGP4
CNSTI4 1756
ADDRGP4 level+84
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 280
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 6
ARGI4
ADDRLP4 28
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 934
;934:			trap_SetConfigstring( CS_SCORES2, va("%i", SCORE_NOT_PRESENT) );
ADDRGP4 $375
ARGP4
CNSTI4 -9999
ARGI4
ADDRLP4 32
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 7
ARGI4
ADDRLP4 32
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 935
;935:		} else {
ADDRGP4 $511
JUMPV
LABELV $510
line 936
;936:			trap_SetConfigstring( CS_SCORES1, va("%i", level.clients[ level.sortedClients[0] ].ps.persistant[PERS_SCORE] ) );
ADDRGP4 $375
ARGP4
CNSTI4 1756
ADDRGP4 level+84
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 280
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 6
ARGI4
ADDRLP4 28
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 937
;937:			trap_SetConfigstring( CS_SCORES2, va("%i", level.clients[ level.sortedClients[1] ].ps.persistant[PERS_SCORE] ) );
ADDRGP4 $375
ARGP4
CNSTI4 1756
ADDRGP4 level+84+4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 280
ADDP4
INDIRI4
ARGI4
ADDRLP4 32
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 7
ARGI4
ADDRLP4 32
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 938
;938:		}
LABELV $511
LABELV $508
line 940
;939:
;940:		if (g_gametype.integer != GT_TOURNAMENT)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
EQI4 $517
line 941
;941:		{ //when not in duel, use this configstring to pass the index of the player currently in first place
line 942
;942:			if ( level.numConnectedClients >= 1 )
ADDRGP4 level+72
INDIRI4
CNSTI4 1
LTI4 $520
line 943
;943:			{
line 944
;944:				trap_SetConfigstring ( CS_CLIENT_DUELWINNER, va("%i", level.sortedClients[0] ) );
ADDRGP4 $375
ARGP4
ADDRGP4 level+84
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 29
ARGI4
ADDRLP4 28
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 945
;945:			}
ADDRGP4 $521
JUMPV
LABELV $520
line 947
;946:			else
;947:			{
line 948
;948:				trap_SetConfigstring ( CS_CLIENT_DUELWINNER, "-1" );
CNSTI4 29
ARGI4
ADDRGP4 $304
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 949
;949:			}
LABELV $521
line 950
;950:		}
LABELV $517
line 951
;951:	}
LABELV $501
line 954
;952:
;953:	// see if it is time to end the level
;954:	CheckExitRules();
ADDRGP4 CheckExitRules
CALLV
pop
line 957
;955:
;956:	// if we are at the intermission, send the new info to everyone
;957:	if ( level.intermissiontime ) {
ADDRGP4 level+9008
INDIRI4
CNSTI4 0
EQI4 $524
line 958
;958:		SendScoreboardMessageToAllClients();
ADDRGP4 SendScoreboardMessageToAllClients
CALLV
pop
line 959
;959:	}
LABELV $524
line 960
;960:}
LABELV $405
endproc CalculateRanks 52 16
export SendScoreboardMessageToAllClients
proc SendScoreboardMessageToAllClients 4 4
line 979
;961:
;962:
;963:/*
;964:========================================================================
;965:
;966:MAP CHANGING
;967:
;968:========================================================================
;969:*/
;970:
;971:/*
;972:========================
;973:SendScoreboardMessageToAllClients
;974:
;975:Do this at BeginIntermission time and whenever ranks are recalculated
;976:due to enters/exits/forced team changes
;977:========================
;978:*/
;979:void SendScoreboardMessageToAllClients( void ) {
line 982
;980:	int		i;
;981:
;982:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $531
JUMPV
LABELV $528
line 983
;983:		if ( level.clients[ i ].pers.connected == CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
NEI4 $533
line 984
;984:			DeathmatchScoreboardMessage( g_entities + i );
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRGP4 DeathmatchScoreboardMessage
CALLV
pop
line 985
;985:		}
LABELV $533
line 986
;986:	}
LABELV $529
line 982
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $531
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $528
line 987
;987:}
LABELV $527
endproc SendScoreboardMessageToAllClients 4 4
export MoveClientToIntermission
proc MoveClientToIntermission 0 12
line 997
;988:
;989:/*
;990:========================
;991:MoveClientToIntermission
;992:
;993:When the intermission starts, this will be called for all players.
;994:If a new client connects, this will be called after the spawn function.
;995:========================
;996:*/
;997:void MoveClientToIntermission( gentity_t *ent ) {
line 999
;998:	// take out of follow mode if needed
;999:	if ( ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) {
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1528
ADDP4
INDIRI4
CNSTI4 2
NEI4 $536
line 1000
;1000:		StopFollowing( ent );
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 StopFollowing
CALLV
pop
line 1001
;1001:	}
LABELV $536
line 1005
;1002:
;1003:
;1004:	// move to the spot
;1005:	VectorCopy( level.intermission_origin, ent->s.origin );
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
ADDRGP4 level+9024
INDIRB
ASGNB 12
line 1006
;1006:	VectorCopy( level.intermission_origin, ent->client->ps.origin );
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
ADDRGP4 level+9024
INDIRB
ASGNB 12
line 1007
;1007:	VectorCopy (level.intermission_angle, ent->client->ps.viewangles);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
ADDRGP4 level+9036
INDIRB
ASGNB 12
line 1008
;1008:	ent->client->ps.pm_type = PM_INTERMISSION;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 6
ASGNI4
line 1011
;1009:
;1010:	// clean up powerup info
;1011:	memset( ent->client->ps.powerups, 0, sizeof(ent->client->ps.powerups) );
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 344
ADDP4
ARGP4
CNSTI4 0
ARGI4
CNSTI4 64
ARGI4
ADDRGP4 memset
CALLP4
pop
line 1013
;1012:
;1013:	ent->client->ps.eFlags = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 108
ADDP4
CNSTI4 0
ASGNI4
line 1014
;1014:	ent->s.eFlags = 0;
ADDRFP4 0
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 0
ASGNI4
line 1015
;1015:	ent->s.eType = ET_GENERAL;
ADDRFP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 0
ASGNI4
line 1016
;1016:	ent->s.modelindex = 0;
ADDRFP4 0
INDIRP4
CNSTI4 212
ADDP4
CNSTI4 0
ASGNI4
line 1017
;1017:	ent->s.loopSound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 1018
;1018:	ent->s.event = 0;
ADDRFP4 0
INDIRP4
CNSTI4 252
ADDP4
CNSTI4 0
ASGNI4
line 1019
;1019:	ent->r.contents = 0;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 0
ASGNI4
line 1020
;1020:}
LABELV $535
endproc MoveClientToIntermission 0 12
export FindIntermissionPoint
proc FindIntermissionPoint 32 12
line 1029
;1021:
;1022:/*
;1023:==================
;1024:FindIntermissionPoint
;1025:
;1026:This is also used for spectator spawns
;1027:==================
;1028:*/
;1029:void FindIntermissionPoint( void ) {
line 1034
;1030:	gentity_t	*ent, *target;
;1031:	vec3_t		dir;
;1032:
;1033:	// find the intermission spot
;1034:	ent = G_Find (NULL, FOFS(classname), "info_player_intermission");
CNSTP4 0
ARGP4
CNSTI4 416
ARGI4
ADDRGP4 $542
ARGP4
ADDRLP4 20
ADDRGP4 G_Find
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 20
INDIRP4
ASGNP4
line 1035
;1035:	if ( !ent ) {	// the map creator forgot to put in an intermission point...
ADDRLP4 0
INDIRP4
CVPU4 4
CNSTU4 0
NEU4 $543
line 1036
;1036:		SelectSpawnPoint ( vec3_origin, level.intermission_origin, level.intermission_angle );
ADDRGP4 vec3_origin
ARGP4
ADDRGP4 level+9024
ARGP4
ADDRGP4 level+9036
ARGP4
ADDRGP4 SelectSpawnPoint
CALLP4
pop
line 1037
;1037:	} else {
ADDRGP4 $544
JUMPV
LABELV $543
line 1038
;1038:		VectorCopy (ent->s.origin, level.intermission_origin);
ADDRGP4 level+9024
ADDRLP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRB
ASGNB 12
line 1039
;1039:		VectorCopy (ent->s.angles, level.intermission_angle);
ADDRGP4 level+9036
ADDRLP4 0
INDIRP4
CNSTI4 116
ADDP4
INDIRB
ASGNB 12
line 1041
;1040:		// if it has a target, look towards it
;1041:		if ( ent->target ) {
ADDRLP4 0
INDIRP4
CNSTI4 584
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $549
line 1042
;1042:			target = G_PickTarget( ent->target );
ADDRLP4 0
INDIRP4
CNSTI4 584
ADDP4
INDIRP4
ARGP4
ADDRLP4 24
ADDRGP4 G_PickTarget
CALLP4
ASGNP4
ADDRLP4 4
ADDRLP4 24
INDIRP4
ASGNP4
line 1043
;1043:			if ( target ) {
ADDRLP4 4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $551
line 1044
;1044:				VectorSubtract( target->s.origin, level.intermission_origin, dir );
ADDRLP4 28
ADDRLP4 4
INDIRP4
ASGNP4
ADDRLP4 8
ADDRLP4 28
INDIRP4
CNSTI4 92
ADDP4
INDIRF4
ADDRGP4 level+9024
INDIRF4
SUBF4
ASGNF4
ADDRLP4 8+4
ADDRLP4 28
INDIRP4
CNSTI4 96
ADDP4
INDIRF4
ADDRGP4 level+9024+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 8+8
ADDRLP4 4
INDIRP4
CNSTI4 100
ADDP4
INDIRF4
ADDRGP4 level+9024+8
INDIRF4
SUBF4
ASGNF4
line 1045
;1045:				vectoangles( dir, level.intermission_angle );
ADDRLP4 8
ARGP4
ADDRGP4 level+9036
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 1046
;1046:			}
LABELV $551
line 1047
;1047:		}
LABELV $549
line 1048
;1048:	}
LABELV $544
line 1050
;1049:
;1050:}
LABELV $541
endproc FindIntermissionPoint 32 12
export BeginIntermission
proc BeginIntermission 12 8
line 1059
;1051:
;1052:qboolean DuelLimitHit(void);
;1053:
;1054:/*
;1055:==================
;1056:BeginIntermission
;1057:==================
;1058:*/
;1059:void BeginIntermission( void ) {
line 1063
;1060:	int			i;
;1061:	gentity_t	*client;
;1062:
;1063:	if ( level.intermissiontime ) {
ADDRGP4 level+9008
INDIRI4
CNSTI4 0
EQI4 $562
line 1064
;1064:		return;		// already active
ADDRGP4 $561
JUMPV
LABELV $562
line 1068
;1065:	}
;1066:
;1067:	// if in tournement mode, change the wins / losses
;1068:	if ( g_gametype.integer == GT_TOURNAMENT ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $565
line 1069
;1069:		trap_SetConfigstring ( CS_CLIENT_DUELWINNER, "-1" );
CNSTI4 29
ARGI4
ADDRGP4 $304
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1071
;1070:
;1071:		AdjustTournamentScores();
ADDRGP4 AdjustTournamentScores
CALLV
pop
line 1072
;1072:		if (DuelLimitHit())
ADDRLP4 8
ADDRGP4 DuelLimitHit
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $568
line 1073
;1073:		{
line 1074
;1074:			gDuelExit = qtrue;
ADDRGP4 gDuelExit
CNSTI4 1
ASGNI4
line 1075
;1075:		}
ADDRGP4 $569
JUMPV
LABELV $568
line 1077
;1076:		else
;1077:		{
line 1078
;1078:			gDuelExit = qfalse;
ADDRGP4 gDuelExit
CNSTI4 0
ASGNI4
line 1079
;1079:		}
LABELV $569
line 1080
;1080:	}
LABELV $565
line 1082
;1081:
;1082:	level.intermissiontime = level.time;
ADDRGP4 level+9008
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1083
;1083:	FindIntermissionPoint();
ADDRGP4 FindIntermissionPoint
CALLV
pop
line 1085
;1084:
;1085:	if (g_singlePlayer.integer) {
ADDRGP4 g_singlePlayer+12
INDIRI4
CNSTI4 0
EQI4 $572
line 1086
;1086:		trap_Cvar_Set("ui_singlePlayerActive", "0");
ADDRGP4 $164
ARGP4
ADDRGP4 $86
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 1087
;1087:		UpdateTournamentInfo();
ADDRGP4 UpdateTournamentInfo
CALLV
pop
line 1088
;1088:	}
LABELV $572
line 1091
;1089:
;1090:	// move all clients to the intermission point
;1091:	for (i=0 ; i< level.maxclients ; i++) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $578
JUMPV
LABELV $575
line 1092
;1092:		client = g_entities + i;
ADDRLP4 0
CNSTI4 828
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1093
;1093:		if (!client->inuse)
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
NEI4 $580
line 1094
;1094:			continue;
ADDRGP4 $576
JUMPV
LABELV $580
line 1096
;1095:		// respawn if dead
;1096:		if (client->health <= 0) {
ADDRLP4 0
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 0
GTI4 $582
line 1097
;1097:			respawn(client);
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 respawn
CALLV
pop
line 1098
;1098:		}
LABELV $582
line 1099
;1099:		MoveClientToIntermission( client );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 MoveClientToIntermission
CALLV
pop
line 1100
;1100:	}
LABELV $576
line 1091
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $578
ADDRLP4 4
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $575
line 1103
;1101:
;1102:	// send the current scoring to all clients
;1103:	SendScoreboardMessageToAllClients();
ADDRGP4 SendScoreboardMessageToAllClients
CALLV
pop
line 1105
;1104:
;1105:}
LABELV $561
endproc BeginIntermission 12 8
export DuelLimitHit
proc DuelLimitHit 8 0
line 1108
;1106:
;1107:qboolean DuelLimitHit(void)
;1108:{
line 1112
;1109:	int i;
;1110:	gclient_t *cl;
;1111:
;1112:	for ( i=0 ; i< g_maxclients.integer ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $588
JUMPV
LABELV $585
line 1113
;1113:		cl = level.clients + i;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1114
;1114:		if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $590
line 1115
;1115:			continue;
ADDRGP4 $586
JUMPV
LABELV $590
line 1118
;1116:		}
;1117:
;1118:		if ( g_duel_fraglimit.integer && cl->sess.wins >= g_duel_fraglimit.integer )
ADDRGP4 g_duel_fraglimit+12
INDIRI4
CNSTI4 0
EQI4 $592
ADDRLP4 4
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
ADDRGP4 g_duel_fraglimit+12
INDIRI4
LTI4 $592
line 1119
;1119:		{
line 1120
;1120:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $584
JUMPV
LABELV $592
line 1122
;1121:		}
;1122:	}
LABELV $586
line 1112
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $588
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $585
line 1124
;1123:
;1124:	return qfalse;
CNSTI4 0
RETI4
LABELV $584
endproc DuelLimitHit 8 0
export DuelResetWinsLosses
proc DuelResetWinsLosses 8 0
line 1128
;1125:}
;1126:
;1127:void DuelResetWinsLosses(void)
;1128:{
line 1132
;1129:	int i;
;1130:	gclient_t *cl;
;1131:
;1132:	for ( i=0 ; i< g_maxclients.integer ; i++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $600
JUMPV
LABELV $597
line 1133
;1133:		cl = level.clients + i;
ADDRLP4 0
CNSTI4 1756
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1134
;1134:		if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 0
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $602
line 1135
;1135:			continue;
ADDRGP4 $598
JUMPV
LABELV $602
line 1138
;1136:		}
;1137:
;1138:		cl->sess.wins = 0;
ADDRLP4 0
INDIRP4
CNSTI4 1536
ADDP4
CNSTI4 0
ASGNI4
line 1139
;1139:		cl->sess.losses = 0;
ADDRLP4 0
INDIRP4
CNSTI4 1540
ADDP4
CNSTI4 0
ASGNI4
line 1140
;1140:	}
LABELV $598
line 1132
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $600
ADDRLP4 4
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $597
line 1141
;1141:}
LABELV $596
endproc DuelResetWinsLosses 8 0
export ExitLevel
proc ExitLevel 12 8
line 1152
;1142:
;1143:/*
;1144:=============
;1145:ExitLevel
;1146:
;1147:When the intermission has been exited, the server is either killed
;1148:or moved to a new level based on the "nextmap" cvar 
;1149:
;1150:=============
;1151:*/
;1152:void ExitLevel (void) {
line 1158
;1153:	int		i;
;1154:	gclient_t *cl;
;1155:
;1156:	// if we are running a tournement map, kick the loser to spectator status,
;1157:	// which will automatically grab the next spectator and restart
;1158:	if ( g_gametype.integer == GT_TOURNAMENT  ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $605
line 1159
;1159:		if (!DuelLimitHit())
ADDRLP4 8
ADDRGP4 DuelLimitHit
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
NEI4 $608
line 1160
;1160:		{
line 1161
;1161:			if ( !level.restarted ) {
ADDRGP4 level+68
INDIRI4
CNSTI4 0
NEI4 $604
line 1162
;1162:				trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
CNSTI4 2
ARGI4
ADDRGP4 $613
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1163
;1163:				level.restarted = qtrue;
ADDRGP4 level+68
CNSTI4 1
ASGNI4
line 1164
;1164:				level.changemap = NULL;
ADDRGP4 level+9012
CNSTP4 0
ASGNP4
line 1165
;1165:				level.intermissiontime = 0;
ADDRGP4 level+9008
CNSTI4 0
ASGNI4
line 1166
;1166:			}
line 1167
;1167:			return;	
ADDRGP4 $604
JUMPV
LABELV $608
line 1170
;1168:		}
;1169:
;1170:		DuelResetWinsLosses();
ADDRGP4 DuelResetWinsLosses
CALLV
pop
line 1171
;1171:	}
LABELV $605
line 1174
;1172:
;1173:
;1174:	trap_SendConsoleCommand( EXEC_APPEND, "vstr nextmap\n" );
CNSTI4 2
ARGI4
ADDRGP4 $617
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1175
;1175:	level.changemap = NULL;
ADDRGP4 level+9012
CNSTP4 0
ASGNP4
line 1176
;1176:	level.intermissiontime = 0;
ADDRGP4 level+9008
CNSTI4 0
ASGNI4
line 1179
;1177:
;1178:	// reset all the scores so we don't enter the intermission again
;1179:	level.teamScores[TEAM_RED] = 0;
ADDRGP4 level+44+4
CNSTI4 0
ASGNI4
line 1180
;1180:	level.teamScores[TEAM_BLUE] = 0;
ADDRGP4 level+44+8
CNSTI4 0
ASGNI4
line 1181
;1181:	for ( i=0 ; i< g_maxclients.integer ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $627
JUMPV
LABELV $624
line 1182
;1182:		cl = level.clients + i;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1183
;1183:		if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $629
line 1184
;1184:			continue;
ADDRGP4 $625
JUMPV
LABELV $629
line 1186
;1185:		}
;1186:		cl->ps.persistant[PERS_SCORE] = 0;
ADDRLP4 4
INDIRP4
CNSTI4 280
ADDP4
CNSTI4 0
ASGNI4
line 1187
;1187:	}
LABELV $625
line 1181
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $627
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $624
line 1190
;1188:
;1189:	// we need to do this here before chaning to CON_CONNECTING
;1190:	G_WriteSessionData();
ADDRGP4 G_WriteSessionData
CALLV
pop
line 1194
;1191:
;1192:	// change all client states to connecting, so the early players into the
;1193:	// next level will know the others aren't done reconnecting
;1194:	for (i=0 ; i< g_maxclients.integer ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $634
JUMPV
LABELV $631
line 1195
;1195:		if ( level.clients[i].pers.connected == CON_CONNECTED ) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
NEI4 $636
line 1196
;1196:			level.clients[i].pers.connected = CON_CONNECTING;
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
CNSTI4 1
ASGNI4
line 1197
;1197:		}
LABELV $636
line 1198
;1198:	}
LABELV $632
line 1194
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $634
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $631
line 1200
;1199:
;1200:}
LABELV $604
endproc ExitLevel 12 8
export G_LogPrintf
proc G_LogPrintf 1044 24
line 1209
;1201:
;1202:/*
;1203:=================
;1204:G_LogPrintf
;1205:
;1206:Print to the logfile with a time stamp if it is open
;1207:=================
;1208:*/
;1209:void QDECL G_LogPrintf( const char *fmt, ... ) {
line 1214
;1210:	va_list		argptr;
;1211:	char		string[1024];
;1212:	int			min, tens, sec;
;1213:
;1214:	sec = level.time / 1000;
ADDRLP4 0
ADDRGP4 level+32
INDIRI4
CNSTI4 1000
DIVI4
ASGNI4
line 1216
;1215:
;1216:	min = sec / 60;
ADDRLP4 1032
ADDRLP4 0
INDIRI4
CNSTI4 60
DIVI4
ASGNI4
line 1217
;1217:	sec -= min * 60;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 60
ADDRLP4 1032
INDIRI4
MULI4
SUBI4
ASGNI4
line 1218
;1218:	tens = sec / 10;
ADDRLP4 1036
ADDRLP4 0
INDIRI4
CNSTI4 10
DIVI4
ASGNI4
line 1219
;1219:	sec -= tens * 10;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 10
ADDRLP4 1036
INDIRI4
MULI4
SUBI4
ASGNI4
line 1221
;1220:
;1221:	Com_sprintf( string, sizeof(string), "%3i:%i%i ", min, tens, sec );
ADDRLP4 4
ARGP4
CNSTI4 1024
ARGI4
ADDRGP4 $640
ARGP4
ADDRLP4 1032
INDIRI4
ARGI4
ADDRLP4 1036
INDIRI4
ARGI4
ADDRLP4 0
INDIRI4
ARGI4
ADDRGP4 Com_sprintf
CALLV
pop
line 1223
;1222:
;1223:	va_start( argptr, fmt );
ADDRLP4 1028
ADDRFP4 0+4
ASGNP4
line 1224
;1224:	vsprintf( string +7 , fmt,argptr );
ADDRLP4 4+7
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1028
INDIRP4
ARGP4
ADDRGP4 vsprintf
CALLI4
pop
line 1225
;1225:	va_end( argptr );
ADDRLP4 1028
CNSTP4 0
ASGNP4
line 1227
;1226:
;1227:	if ( g_dedicated.integer ) {
ADDRGP4 g_dedicated+12
INDIRI4
CNSTI4 0
EQI4 $643
line 1228
;1228:		G_Printf( "%s", string + 7 );
ADDRGP4 $329
ARGP4
ADDRLP4 4+7
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 1229
;1229:	}
LABELV $643
line 1231
;1230:
;1231:	if ( !level.logFile ) {
ADDRGP4 level+20
INDIRI4
CNSTI4 0
NEI4 $647
line 1232
;1232:		return;
ADDRGP4 $638
JUMPV
LABELV $647
line 1235
;1233:	}
;1234:
;1235:	trap_FS_Write( string, strlen( string ), level.logFile );
ADDRLP4 4
ARGP4
ADDRLP4 1040
ADDRGP4 strlen
CALLI4
ASGNI4
ADDRLP4 4
ARGP4
ADDRLP4 1040
INDIRI4
ARGI4
ADDRGP4 level+20
INDIRI4
ARGI4
ADDRGP4 trap_FS_Write
CALLV
pop
line 1236
;1236:}
LABELV $638
endproc G_LogPrintf 1044 24
export LogExit
proc LogExit 36 20
line 1245
;1237:
;1238:/*
;1239:================
;1240:LogExit
;1241:
;1242:Append information about this game to the log file
;1243:================
;1244:*/
;1245:void LogExit( const char *string ) {
line 1248
;1246:	int				i, numSorted;
;1247:	gclient_t		*cl;
;1248:	qboolean		won = qtrue;
ADDRLP4 12
CNSTI4 1
ASGNI4
line 1249
;1249:	G_LogPrintf( "Exit: %s\n", string );
ADDRGP4 $652
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 1251
;1250:
;1251:	level.intermissionQueued = level.time;
ADDRGP4 level+9004
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1255
;1252:
;1253:	// this will keep the clients from playing any voice sounds
;1254:	// that will get cut off when the queued intermission starts
;1255:	trap_SetConfigstring( CS_INTERMISSION, "1" );
CNSTI4 22
ARGI4
ADDRGP4 $101
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1258
;1256:
;1257:	// don't send more than 32 scores (FIXME?)
;1258:	numSorted = level.numConnectedClients;
ADDRLP4 8
ADDRGP4 level+72
INDIRI4
ASGNI4
line 1259
;1259:	if ( numSorted > 32 ) {
ADDRLP4 8
INDIRI4
CNSTI4 32
LEI4 $656
line 1260
;1260:		numSorted = 32;
ADDRLP4 8
CNSTI4 32
ASGNI4
line 1261
;1261:	}
LABELV $656
line 1263
;1262:
;1263:	if ( g_gametype.integer >= GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LTI4 $658
line 1264
;1264:		G_LogPrintf( "red:%i  blue:%i\n",
ADDRGP4 $661
ARGP4
ADDRGP4 level+44+4
INDIRI4
ARGI4
ADDRGP4 level+44+8
INDIRI4
ARGI4
ADDRGP4 G_LogPrintf
CALLV
pop
line 1266
;1265:			level.teamScores[TEAM_RED], level.teamScores[TEAM_BLUE] );
;1266:	}
LABELV $658
line 1268
;1267:
;1268:	for (i=0 ; i < numSorted ; i++) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $669
JUMPV
LABELV $666
line 1271
;1269:		int		ping;
;1270:
;1271:		cl = &level.clients[level.sortedClients[i]];
ADDRLP4 0
CNSTI4 1756
ADDRLP4 4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1273
;1272:
;1273:		if ( cl->sess.sessionTeam == TEAM_SPECTATOR ) {
ADDRLP4 0
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $671
line 1274
;1274:			continue;
ADDRGP4 $667
JUMPV
LABELV $671
line 1276
;1275:		}
;1276:		if ( cl->pers.connected == CON_CONNECTING ) {
ADDRLP4 0
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 1
NEI4 $673
line 1277
;1277:			continue;
ADDRGP4 $667
JUMPV
LABELV $673
line 1280
;1278:		}
;1279:
;1280:		ping = cl->ps.ping < 999 ? cl->ps.ping : 999;
ADDRLP4 0
INDIRP4
CNSTI4 484
ADDP4
INDIRI4
CNSTI4 999
GEI4 $676
ADDRLP4 20
ADDRLP4 0
INDIRP4
CNSTI4 484
ADDP4
INDIRI4
ASGNI4
ADDRGP4 $677
JUMPV
LABELV $676
ADDRLP4 20
CNSTI4 999
ASGNI4
LABELV $677
ADDRLP4 16
ADDRLP4 20
INDIRI4
ASGNI4
line 1282
;1281:
;1282:		G_LogPrintf( "score: %i  ping: %i  client: %i %s\n", cl->ps.persistant[PERS_SCORE], ping, level.sortedClients[i],	cl->pers.netname );
ADDRGP4 $678
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 280
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
INDIRI4
ARGI4
ADDRLP4 4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+84
ADDP4
INDIRI4
ARGI4
ADDRLP4 0
INDIRP4
CNSTI4 1416
ADDP4
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 1283
;1283:		if (g_singlePlayer.integer && g_gametype.integer == GT_TOURNAMENT) {
ADDRGP4 g_singlePlayer+12
INDIRI4
CNSTI4 0
EQI4 $680
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $680
line 1284
;1284:			if (g_entities[cl - level.clients].r.svFlags & SVF_BOT && cl->ps.persistant[PERS_RANK] == 0) {
ADDRLP4 32
CNSTI4 0
ASGNI4
CNSTI4 828
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRGP4 level
INDIRP4
CVPU4 4
SUBU4
CVUI4 4
CNSTI4 1756
DIVI4
MULI4
ADDRGP4 g_entities+296+8
ADDP4
INDIRI4
CNSTI4 8
BANDI4
ADDRLP4 32
INDIRI4
EQI4 $684
ADDRLP4 0
INDIRP4
CNSTI4 288
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
NEI4 $684
line 1285
;1285:				won = qfalse;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 1286
;1286:			}
LABELV $684
line 1287
;1287:		}
LABELV $680
line 1288
;1288:	}
LABELV $667
line 1268
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $669
ADDRLP4 4
INDIRI4
ADDRLP4 8
INDIRI4
LTI4 $666
line 1290
;1289:
;1290:	if (g_singlePlayer.integer) {
ADDRGP4 g_singlePlayer+12
INDIRI4
CNSTI4 0
EQI4 $688
line 1291
;1291:		if (g_gametype.integer >= GT_CTF) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 7
LTI4 $691
line 1292
;1292:			won = level.teamScores[TEAM_RED] > level.teamScores[TEAM_BLUE];
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 level+44+8
INDIRI4
LEI4 $699
ADDRLP4 16
CNSTI4 1
ASGNI4
ADDRGP4 $700
JUMPV
LABELV $699
ADDRLP4 16
CNSTI4 0
ASGNI4
LABELV $700
ADDRLP4 12
ADDRLP4 16
INDIRI4
ASGNI4
line 1293
;1293:		}
LABELV $691
line 1294
;1294:		trap_SendConsoleCommand( EXEC_APPEND, (won) ? "spWin\n" : "spLose\n" );
CNSTI4 2
ARGI4
ADDRLP4 12
INDIRI4
CNSTI4 0
EQI4 $704
ADDRLP4 16
ADDRGP4 $701
ASGNP4
ADDRGP4 $705
JUMPV
LABELV $704
ADDRLP4 16
ADDRGP4 $702
ASGNP4
LABELV $705
ADDRLP4 16
INDIRP4
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1295
;1295:	}
LABELV $688
line 1296
;1296:}
LABELV $651
endproc LogExit 36 20
data
export gDidDuelStuff
align 4
LABELV gDidDuelStuff
byte 4 0
export CheckIntermissionExit
code
proc CheckIntermissionExit 28 12
line 1310
;1297:
;1298:qboolean gDidDuelStuff = qfalse; //gets reset on game reinit
;1299:
;1300:/*
;1301:=================
;1302:CheckIntermissionExit
;1303:
;1304:The level will stay at the intermission for a minimum of 5 seconds
;1305:If all players wish to continue, the level will then exit.
;1306:If one or more players have not acknowledged the continue, the game will
;1307:wait 10 seconds before going on.
;1308:=================
;1309:*/
;1310:void CheckIntermissionExit( void ) {
line 1316
;1311:	int			ready, notReady;
;1312:	int			i;
;1313:	gclient_t	*cl;
;1314:	int			readyMask;
;1315:
;1316:	if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 4
NEI4 $707
line 1317
;1317:		return;
ADDRGP4 $706
JUMPV
LABELV $707
line 1321
;1318:	}
;1319:
;1320:	// see which players are ready
;1321:	ready = 0;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 1322
;1322:	notReady = 0;
ADDRLP4 16
CNSTI4 0
ASGNI4
line 1323
;1323:	readyMask = 0;
ADDRLP4 8
CNSTI4 0
ASGNI4
line 1324
;1324:	for (i=0 ; i< g_maxclients.integer ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $713
JUMPV
LABELV $710
line 1325
;1325:		cl = level.clients + i;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1326
;1326:		if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $715
line 1327
;1327:			continue;
ADDRGP4 $711
JUMPV
LABELV $715
line 1329
;1328:		}
;1329:		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
EQI4 $717
line 1330
;1330:			continue;
ADDRGP4 $711
JUMPV
LABELV $717
line 1333
;1331:		}
;1332:
;1333:		if ( cl->readyToExit ) {
ADDRLP4 4
INDIRP4
CNSTI4 1572
ADDP4
INDIRI4
CNSTI4 0
EQI4 $721
line 1334
;1334:			ready++;
ADDRLP4 12
ADDRLP4 12
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1335
;1335:			if ( i < 16 ) {
ADDRLP4 0
INDIRI4
CNSTI4 16
GEI4 $722
line 1336
;1336:				readyMask |= 1 << i;
ADDRLP4 8
ADDRLP4 8
INDIRI4
CNSTI4 1
ADDRLP4 0
INDIRI4
LSHI4
BORI4
ASGNI4
line 1337
;1337:			}
line 1338
;1338:		} else {
ADDRGP4 $722
JUMPV
LABELV $721
line 1339
;1339:			notReady++;
ADDRLP4 16
ADDRLP4 16
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1340
;1340:		}
LABELV $722
line 1341
;1341:	}
LABELV $711
line 1324
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $713
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $710
line 1343
;1342:
;1343:	if ( g_gametype.integer == GT_TOURNAMENT && !gDidDuelStuff &&
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $725
ADDRGP4 gDidDuelStuff
INDIRI4
CNSTI4 0
NEI4 $725
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+9008
INDIRI4
CNSTI4 2000
ADDI4
LEI4 $725
line 1345
;1344:		(level.time > level.intermissiontime + 2000) )
;1345:	{
line 1346
;1346:		gDidDuelStuff = qtrue;
ADDRGP4 gDidDuelStuff
CNSTI4 1
ASGNI4
line 1350
;1347:
;1348:		// if we are running a tournement map, kick the loser to spectator status,
;1349:		// which will automatically grab the next spectator and restart
;1350:		if (!DuelLimitHit())
ADDRLP4 20
ADDRGP4 DuelLimitHit
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
NEI4 $730
line 1351
;1351:		{
line 1352
;1352:			RemoveTournamentLoser();
ADDRGP4 RemoveTournamentLoser
CALLV
pop
line 1354
;1353:
;1354:			AddTournamentPlayer();
ADDRGP4 AddTournamentPlayer
CALLV
pop
line 1356
;1355:
;1356:			if (level.numPlayingClients >= 2)
ADDRGP4 level+80
INDIRI4
CNSTI4 2
LTI4 $706
line 1357
;1357:			{
line 1358
;1358:				trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
ADDRGP4 $735
ARGP4
ADDRGP4 level+84
INDIRI4
ARGI4
ADDRGP4 level+84+4
INDIRI4
ARGI4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 30
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1359
;1359:				trap_SetConfigstring ( CS_CLIENT_DUELWINNER, "-1" );
CNSTI4 29
ARGI4
ADDRGP4 $304
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1361
;1360:
;1361:				gDuelist1 = level.sortedClients[0];
ADDRGP4 gDuelist1
ADDRGP4 level+84
INDIRI4
ASGNI4
line 1362
;1362:				gDuelist2 = level.sortedClients[1];
ADDRGP4 gDuelist2
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 1363
;1363:			}
line 1365
;1364:
;1365:			return;	
ADDRGP4 $706
JUMPV
LABELV $730
line 1371
;1366:		}
;1367:
;1368:		//this means we hit the duel limit so reset the wins/losses
;1369:		//but still push the loser to the back of the line, and retain the order for
;1370:		//the map change
;1371:		RemoveTournamentLoser();
ADDRGP4 RemoveTournamentLoser
CALLV
pop
line 1372
;1372:		AddTournamentPlayer();
ADDRGP4 AddTournamentPlayer
CALLV
pop
line 1373
;1373:		if (level.numPlayingClients >= 2)
ADDRGP4 level+80
INDIRI4
CNSTI4 2
LTI4 $742
line 1374
;1374:		{
line 1375
;1375:			trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
ADDRGP4 $735
ARGP4
ADDRGP4 level+84
INDIRI4
ARGI4
ADDRGP4 level+84+4
INDIRI4
ARGI4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 30
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1376
;1376:			trap_SetConfigstring ( CS_CLIENT_DUELWINNER, "-1" );
CNSTI4 29
ARGI4
ADDRGP4 $304
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1378
;1377:
;1378:			gDuelist1 = level.sortedClients[0];
ADDRGP4 gDuelist1
ADDRGP4 level+84
INDIRI4
ASGNI4
line 1379
;1379:			gDuelist2 = level.sortedClients[1];
ADDRGP4 gDuelist2
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 1380
;1380:		}
LABELV $742
line 1381
;1381:	}
LABELV $725
line 1383
;1382:
;1383:	if (g_gametype.integer == GT_TOURNAMENT && !gDuelExit)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $751
ADDRGP4 gDuelExit
INDIRI4
CNSTI4 0
NEI4 $751
line 1384
;1384:	{ //in duel, we have different behaviour for between-round intermissions
line 1385
;1385:		if ( level.time > level.intermissiontime + 4000 )
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+9008
INDIRI4
CNSTI4 4000
ADDI4
LEI4 $754
line 1386
;1386:		{ //automatically go to next after 4 seconds
line 1387
;1387:			ExitLevel();
ADDRGP4 ExitLevel
CALLV
pop
line 1388
;1388:			return;
ADDRGP4 $706
JUMPV
LABELV $754
line 1391
;1389:		}
;1390:
;1391:		for (i=0 ; i< g_maxclients.integer ; i++)
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $761
JUMPV
LABELV $758
line 1392
;1392:		{ //being in a "ready" state is not necessary here, so clear it for everyone
line 1395
;1393:		  //yes, I also thinking holding this in a ps value uniquely for each player
;1394:		  //is bad and wrong, but it wasn't my idea.
;1395:			cl = level.clients + i;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1396
;1396:			if ( cl->pers.connected != CON_CONNECTED )
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $763
line 1397
;1397:			{
line 1398
;1398:				continue;
ADDRGP4 $759
JUMPV
LABELV $763
line 1400
;1399:			}
;1400:			cl->ps.stats[STAT_CLIENTS_READY] = 0;
ADDRLP4 4
INDIRP4
CNSTI4 244
ADDP4
CNSTI4 0
ASGNI4
line 1401
;1401:		}
LABELV $759
line 1391
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $761
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $758
line 1402
;1402:		return;
ADDRGP4 $706
JUMPV
LABELV $751
line 1407
;1403:	}
;1404:
;1405:	// copy the readyMask to each player's stats so
;1406:	// it can be displayed on the scoreboard
;1407:	for (i=0 ; i< g_maxclients.integer ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $768
JUMPV
LABELV $765
line 1408
;1408:		cl = level.clients + i;
ADDRLP4 4
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1409
;1409:		if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 4
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $770
line 1410
;1410:			continue;
ADDRGP4 $766
JUMPV
LABELV $770
line 1412
;1411:		}
;1412:		cl->ps.stats[STAT_CLIENTS_READY] = readyMask;
ADDRLP4 4
INDIRP4
CNSTI4 244
ADDP4
ADDRLP4 8
INDIRI4
ASGNI4
line 1413
;1413:	}
LABELV $766
line 1407
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $768
ADDRLP4 0
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $765
line 1416
;1414:
;1415:	// never exit in less than five seconds
;1416:	if ( level.time < level.intermissiontime + 5000 ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+9008
INDIRI4
CNSTI4 5000
ADDI4
GEI4 $772
line 1417
;1417:		return;
ADDRGP4 $706
JUMPV
LABELV $772
line 1421
;1418:	}
;1419:
;1420:	// if nobody wants to go, clear timer
;1421:	if ( !ready ) {
ADDRLP4 12
INDIRI4
CNSTI4 0
NEI4 $776
line 1422
;1422:		level.readyToExit = qfalse;
ADDRGP4 level+9016
CNSTI4 0
ASGNI4
line 1423
;1423:		return;
ADDRGP4 $706
JUMPV
LABELV $776
line 1427
;1424:	}
;1425:
;1426:	// if everyone wants to go, go now
;1427:	if ( !notReady ) {
ADDRLP4 16
INDIRI4
CNSTI4 0
NEI4 $779
line 1428
;1428:		ExitLevel();
ADDRGP4 ExitLevel
CALLV
pop
line 1429
;1429:		return;
ADDRGP4 $706
JUMPV
LABELV $779
line 1433
;1430:	}
;1431:
;1432:	// the first person to ready starts the ten second timeout
;1433:	if ( !level.readyToExit ) {
ADDRGP4 level+9016
INDIRI4
CNSTI4 0
NEI4 $781
line 1434
;1434:		level.readyToExit = qtrue;
ADDRGP4 level+9016
CNSTI4 1
ASGNI4
line 1435
;1435:		level.exitTime = level.time;
ADDRGP4 level+9020
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1436
;1436:	}
LABELV $781
line 1440
;1437:
;1438:	// if we have waited ten seconds since at least one player
;1439:	// wanted to exit, go ahead
;1440:	if ( level.time < level.exitTime + 10000 ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+9020
INDIRI4
CNSTI4 10000
ADDI4
GEI4 $787
line 1441
;1441:		return;
ADDRGP4 $706
JUMPV
LABELV $787
line 1444
;1442:	}
;1443:
;1444:	ExitLevel();
ADDRGP4 ExitLevel
CALLV
pop
line 1445
;1445:}
LABELV $706
endproc CheckIntermissionExit 28 12
export ScoreIsTied
proc ScoreIsTied 12 0
line 1452
;1446:
;1447:/*
;1448:=============
;1449:ScoreIsTied
;1450:=============
;1451:*/
;1452:qboolean ScoreIsTied( void ) {
line 1455
;1453:	int		a, b;
;1454:
;1455:	if ( level.numPlayingClients < 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
GEI4 $792
line 1456
;1456:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $791
JUMPV
LABELV $792
line 1459
;1457:	}
;1458:	
;1459:	if ( g_gametype.integer >= GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LTI4 $795
line 1460
;1460:		return level.teamScores[TEAM_RED] == level.teamScores[TEAM_BLUE];
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 level+44+8
INDIRI4
NEI4 $803
ADDRLP4 8
CNSTI4 1
ASGNI4
ADDRGP4 $804
JUMPV
LABELV $803
ADDRLP4 8
CNSTI4 0
ASGNI4
LABELV $804
ADDRLP4 8
INDIRI4
RETI4
ADDRGP4 $791
JUMPV
LABELV $795
line 1463
;1461:	}
;1462:
;1463:	a = level.clients[level.sortedClients[0]].ps.persistant[PERS_SCORE];
ADDRLP4 0
CNSTI4 1756
ADDRGP4 level+84
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 280
ADDP4
INDIRI4
ASGNI4
line 1464
;1464:	b = level.clients[level.sortedClients[1]].ps.persistant[PERS_SCORE];
ADDRLP4 4
CNSTI4 1756
ADDRGP4 level+84+4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 280
ADDP4
INDIRI4
ASGNI4
line 1466
;1465:
;1466:	return a == b;
ADDRLP4 0
INDIRI4
ADDRLP4 4
INDIRI4
NEI4 $809
ADDRLP4 8
CNSTI4 1
ASGNI4
ADDRGP4 $810
JUMPV
LABELV $809
ADDRLP4 8
CNSTI4 0
ASGNI4
LABELV $810
ADDRLP4 8
INDIRI4
RETI4
LABELV $791
endproc ScoreIsTied 12 0
export CheckExitRules
proc CheckExitRules 24 12
line 1478
;1467:}
;1468:
;1469:/*
;1470:=================
;1471:CheckExitRules
;1472:
;1473:There will be a delay between the time the exit is qualified for
;1474:and the time everyone is moved to the intermission spot, so you
;1475:can see the last frag.
;1476:=================
;1477:*/
;1478:void CheckExitRules( void ) {
line 1483
;1479: 	int			i;
;1480:	gclient_t	*cl;
;1481:	// if at the intermission, wait for all non-bots to
;1482:	// signal ready, then go to next level
;1483:	if ( level.intermissiontime ) {
ADDRGP4 level+9008
INDIRI4
CNSTI4 0
EQI4 $812
line 1484
;1484:		CheckIntermissionExit ();
ADDRGP4 CheckIntermissionExit
CALLV
pop
line 1485
;1485:		return;
ADDRGP4 $811
JUMPV
LABELV $812
line 1488
;1486:	}
;1487:
;1488:	if ( level.intermissionQueued ) {
ADDRGP4 level+9004
INDIRI4
CNSTI4 0
EQI4 $815
line 1489
;1489:		int time = (g_singlePlayer.integer) ? SP_INTERMISSION_DELAY_TIME : INTERMISSION_DELAY_TIME;
ADDRGP4 g_singlePlayer+12
INDIRI4
CNSTI4 0
EQI4 $820
ADDRLP4 12
CNSTI4 5000
ASGNI4
ADDRGP4 $821
JUMPV
LABELV $820
ADDRLP4 12
CNSTI4 1000
ASGNI4
LABELV $821
ADDRLP4 8
ADDRLP4 12
INDIRI4
ASGNI4
line 1490
;1490:		if ( level.time - level.intermissionQueued >= time ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+9004
INDIRI4
SUBI4
ADDRLP4 8
INDIRI4
LTI4 $811
line 1491
;1491:			level.intermissionQueued = 0;
ADDRGP4 level+9004
CNSTI4 0
ASGNI4
line 1492
;1492:			BeginIntermission();
ADDRGP4 BeginIntermission
CALLV
pop
line 1493
;1493:		}
line 1494
;1494:		return;
ADDRGP4 $811
JUMPV
LABELV $815
line 1498
;1495:	}
;1496:
;1497:	// check for sudden death
;1498:	if ( ScoreIsTied() ) {
ADDRLP4 8
ADDRGP4 ScoreIsTied
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $827
line 1500
;1499:		// always wait for sudden death
;1500:		return;
ADDRGP4 $811
JUMPV
LABELV $827
line 1503
;1501:	}
;1502:
;1503:	if ( g_timelimit.integer && !level.warmupTime ) {
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRGP4 g_timelimit+12
INDIRI4
ADDRLP4 12
INDIRI4
EQI4 $829
ADDRGP4 level+16
INDIRI4
ADDRLP4 12
INDIRI4
NEI4 $829
line 1504
;1504:		if ( level.time - level.startTime >= g_timelimit.integer*60000 ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+40
INDIRI4
SUBI4
CNSTI4 60000
ADDRGP4 g_timelimit+12
INDIRI4
MULI4
LTI4 $833
line 1505
;1505:			trap_SendServerCommand( -1, "print \"Timelimit hit.\n\"");
CNSTI4 -1
ARGI4
ADDRGP4 $838
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1506
;1506:			LogExit( "Timelimit hit." );
ADDRGP4 $839
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1507
;1507:			return;
ADDRGP4 $811
JUMPV
LABELV $833
line 1509
;1508:		}
;1509:	}
LABELV $829
line 1511
;1510:
;1511:	if ( level.numPlayingClients < 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
GEI4 $840
line 1512
;1512:		return;
ADDRGP4 $811
JUMPV
LABELV $840
line 1515
;1513:	}
;1514:
;1515:	if ( g_gametype.integer < GT_CTF && g_fraglimit.integer ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 7
GEI4 $843
ADDRGP4 g_fraglimit+12
INDIRI4
CNSTI4 0
EQI4 $843
line 1516
;1516:		if ( level.teamScores[TEAM_RED] >= g_fraglimit.integer ) {
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 g_fraglimit+12
INDIRI4
LTI4 $847
line 1517
;1517:			trap_SendServerCommand( -1, va("print \"Red %s\n\"", G_GetStripEdString("SVINGAME", "HIT_THE_KILL_LIMIT")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $854
ARGP4
ADDRLP4 16
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $852
ARGP4
ADDRLP4 16
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1518
;1518:			LogExit( "Kill limit hit." );
ADDRGP4 $855
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1519
;1519:			return;
ADDRGP4 $811
JUMPV
LABELV $847
line 1522
;1520:		}
;1521:
;1522:		if ( level.teamScores[TEAM_BLUE] >= g_fraglimit.integer ) {
ADDRGP4 level+44+8
INDIRI4
ADDRGP4 g_fraglimit+12
INDIRI4
LTI4 $856
line 1523
;1523:			trap_SendServerCommand( -1, va("print \"Blue %s\n\"", G_GetStripEdString("SVINGAME", "HIT_THE_KILL_LIMIT")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $854
ARGP4
ADDRLP4 16
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $861
ARGP4
ADDRLP4 16
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1524
;1524:			LogExit( "Kill limit hit." );
ADDRGP4 $855
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1525
;1525:			return;
ADDRGP4 $811
JUMPV
LABELV $856
line 1528
;1526:		}
;1527:
;1528:		for ( i=0 ; i< g_maxclients.integer ; i++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $865
JUMPV
LABELV $862
line 1529
;1529:			cl = level.clients + i;
ADDRLP4 0
CNSTI4 1756
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
ASGNP4
line 1530
;1530:			if ( cl->pers.connected != CON_CONNECTED ) {
ADDRLP4 0
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 2
EQI4 $867
line 1531
;1531:				continue;
ADDRGP4 $863
JUMPV
LABELV $867
line 1533
;1532:			}
;1533:			if ( cl->sess.sessionTeam != TEAM_FREE ) {
ADDRLP4 0
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 0
EQI4 $869
line 1534
;1534:				continue;
ADDRGP4 $863
JUMPV
LABELV $869
line 1537
;1535:			}
;1536:
;1537:			if ( g_gametype.integer == GT_TOURNAMENT && g_duel_fraglimit.integer && cl->sess.wins >= g_duel_fraglimit.integer )
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $871
ADDRGP4 g_duel_fraglimit+12
INDIRI4
CNSTI4 0
EQI4 $871
ADDRLP4 0
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
ADDRGP4 g_duel_fraglimit+12
INDIRI4
LTI4 $871
line 1538
;1538:			{
line 1539
;1539:				LogExit( "Duel limit hit." );
ADDRGP4 $876
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1540
;1540:				gDuelExit = qtrue;
ADDRGP4 gDuelExit
CNSTI4 1
ASGNI4
line 1541
;1541:				trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " hit the win limit.\n\"",
ADDRGP4 $877
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 1416
ADDP4
ARGP4
ADDRLP4 16
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 16
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1543
;1542:					cl->pers.netname ) );
;1543:				return;
ADDRGP4 $811
JUMPV
LABELV $871
line 1546
;1544:			}
;1545:
;1546:			if ( cl->ps.persistant[PERS_SCORE] >= g_fraglimit.integer ) {
ADDRLP4 0
INDIRP4
CNSTI4 280
ADDP4
INDIRI4
ADDRGP4 g_fraglimit+12
INDIRI4
LTI4 $878
line 1547
;1547:				LogExit( "Kill limit hit." );
ADDRGP4 $855
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1548
;1548:				gDuelExit = qfalse;
ADDRGP4 gDuelExit
CNSTI4 0
ASGNI4
line 1549
;1549:				trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s.\n\"",
ADDRGP4 $853
ARGP4
ADDRGP4 $854
ARGP4
ADDRLP4 16
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $881
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 1416
ADDP4
ARGP4
ADDRLP4 16
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1554
;1550:												cl->pers.netname,
;1551:												G_GetStripEdString("SVINGAME", "HIT_THE_KILL_LIMIT")
;1552:												) 
;1553:										);
;1554:				return;
ADDRGP4 $811
JUMPV
LABELV $878
line 1556
;1555:			}
;1556:		}
LABELV $863
line 1528
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $865
ADDRLP4 4
INDIRI4
ADDRGP4 g_maxclients+12
INDIRI4
LTI4 $862
line 1557
;1557:	}
LABELV $843
line 1559
;1558:
;1559:	if ( g_gametype.integer >= GT_CTF && g_capturelimit.integer ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 7
LTI4 $882
ADDRGP4 g_capturelimit+12
INDIRI4
CNSTI4 0
EQI4 $882
line 1561
;1560:
;1561:		if ( level.teamScores[TEAM_RED] >= g_capturelimit.integer ) {
ADDRGP4 level+44+4
INDIRI4
ADDRGP4 g_capturelimit+12
INDIRI4
LTI4 $886
line 1562
;1562:			trap_SendServerCommand( -1, "print \"Red hit the capturelimit.\n\"" );
CNSTI4 -1
ARGI4
ADDRGP4 $891
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1563
;1563:			LogExit( "Capturelimit hit." );
ADDRGP4 $892
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1564
;1564:			return;
ADDRGP4 $811
JUMPV
LABELV $886
line 1567
;1565:		}
;1566:
;1567:		if ( level.teamScores[TEAM_BLUE] >= g_capturelimit.integer ) {
ADDRGP4 level+44+8
INDIRI4
ADDRGP4 g_capturelimit+12
INDIRI4
LTI4 $893
line 1568
;1568:			trap_SendServerCommand( -1, "print \"Blue hit the capturelimit.\n\"" );
CNSTI4 -1
ARGI4
ADDRGP4 $898
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1569
;1569:			LogExit( "Capturelimit hit." );
ADDRGP4 $892
ARGP4
ADDRGP4 LogExit
CALLV
pop
line 1570
;1570:			return;
LABELV $893
line 1572
;1571:		}
;1572:	}
LABELV $882
line 1573
;1573:}
LABELV $811
endproc CheckExitRules 24 12
export CheckTournament
proc CheckTournament 32 12
line 1592
;1574:
;1575:
;1576:
;1577:/*
;1578:========================================================================
;1579:
;1580:FUNCTIONS CALLED EVERY FRAME
;1581:
;1582:========================================================================
;1583:*/
;1584:
;1585:/*
;1586:=============
;1587:CheckTournament
;1588:
;1589:Once a frame, check for changes in tournement player state
;1590:=============
;1591:*/
;1592:void CheckTournament( void ) {
line 1595
;1593:	// check because we run 3 game frames before calling Connect and/or ClientBegin
;1594:	// for clients on a map_restart
;1595:	if ( level.numPlayingClients == 0 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 0
NEI4 $900
line 1596
;1596:		return;
ADDRGP4 $899
JUMPV
LABELV $900
line 1599
;1597:	}
;1598:
;1599:	if ( g_gametype.integer == GT_TOURNAMENT ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $903
line 1602
;1600:
;1601:		// pull in a spectator if needed
;1602:		if ( level.numPlayingClients < 2 ) {
ADDRGP4 level+80
INDIRI4
CNSTI4 2
GEI4 $906
line 1603
;1603:			AddTournamentPlayer();
ADDRGP4 AddTournamentPlayer
CALLV
pop
line 1605
;1604:
;1605:			if (level.numPlayingClients >= 2)
ADDRGP4 level+80
INDIRI4
CNSTI4 2
LTI4 $909
line 1606
;1606:			{
line 1607
;1607:				trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
ADDRGP4 $735
ARGP4
ADDRGP4 level+84
INDIRI4
ARGI4
ADDRGP4 level+84+4
INDIRI4
ARGI4
ADDRLP4 0
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 30
ARGI4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1608
;1608:				gDuelist1 = level.sortedClients[0];
ADDRGP4 gDuelist1
ADDRGP4 level+84
INDIRI4
ASGNI4
line 1609
;1609:				gDuelist2 = level.sortedClients[1];
ADDRGP4 gDuelist2
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 1610
;1610:			}
LABELV $909
line 1611
;1611:		}
LABELV $906
line 1613
;1612:
;1613:		if (level.numPlayingClients >= 2)
ADDRGP4 level+80
INDIRI4
CNSTI4 2
LTI4 $918
line 1614
;1614:		{
line 1615
;1615:			if (gDuelist1 == -1 ||
ADDRLP4 0
CNSTI4 -1
ASGNI4
ADDRGP4 gDuelist1
INDIRI4
ADDRLP4 0
INDIRI4
EQI4 $923
ADDRGP4 gDuelist2
INDIRI4
ADDRLP4 0
INDIRI4
NEI4 $921
LABELV $923
line 1617
;1616:				gDuelist2 == -1)
;1617:			{
line 1618
;1618:				trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
ADDRGP4 $735
ARGP4
ADDRGP4 level+84
INDIRI4
ARGI4
ADDRGP4 level+84+4
INDIRI4
ARGI4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 30
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1619
;1619:				gDuelist1 = level.sortedClients[0];
ADDRGP4 gDuelist1
ADDRGP4 level+84
INDIRI4
ASGNI4
line 1620
;1620:				gDuelist2 = level.sortedClients[1];
ADDRGP4 gDuelist2
ADDRGP4 level+84+4
INDIRI4
ASGNI4
line 1621
;1621:			}
LABELV $921
line 1622
;1622:		}
LABELV $918
line 1626
;1623:
;1624:		//rww - It seems we have decided there will be no warmup in duel.
;1625:		//if (!g_warmup.integer)
;1626:		{ //don't care about any of this stuff then, just add people and leave me alone
line 1627
;1627:			level.warmupTime = 0;
ADDRGP4 level+16
CNSTI4 0
ASGNI4
line 1628
;1628:			return;
ADDRGP4 $899
JUMPV
LABELV $903
line 1675
;1629:		}
;1630:#if 0
;1631:		// if we don't have two players, go back to "waiting for players"
;1632:		if ( level.numPlayingClients != 2 ) {
;1633:			if ( level.warmupTime != -1 ) {
;1634:				level.warmupTime = -1;
;1635:				trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
;1636:				G_LogPrintf( "Warmup:\n" );
;1637:			}
;1638:			return;
;1639:		}
;1640:
;1641:		if ( level.warmupTime == 0 ) {
;1642:			return;
;1643:		}
;1644:
;1645:		// if the warmup is changed at the console, restart it
;1646:		if ( g_warmup.modificationCount != level.warmupModificationCount ) {
;1647:			level.warmupModificationCount = g_warmup.modificationCount;
;1648:			level.warmupTime = -1;
;1649:		}
;1650:
;1651:		// if all players have arrived, start the countdown
;1652:		if ( level.warmupTime < 0 ) {
;1653:			if ( level.numPlayingClients == 2 ) {
;1654:				// fudge by -1 to account for extra delays
;1655:				level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000;
;1656:
;1657:				if (level.warmupTime < (level.time + 3000))
;1658:				{ //rww - this is an unpleasent hack to keep the level from resetting completely on the client (this happens when two map_restarts are issued rapidly)
;1659:					level.warmupTime = level.time + 3000;
;1660:				}
;1661:				trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
;1662:			}
;1663:			return;
;1664:		}
;1665:
;1666:		// if the warmup time has counted down, restart
;1667:		if ( level.time > level.warmupTime ) {
;1668:			level.warmupTime += 10000;
;1669:			trap_Cvar_Set( "g_restarted", "1" );
;1670:			trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
;1671:			level.restarted = qtrue;
;1672:			return;
;1673:		}
;1674:#endif
;1675:	} else if ( g_gametype.integer != GT_SINGLE_PLAYER && level.warmupTime != 0 ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 4
EQI4 $931
ADDRGP4 level+16
INDIRI4
CNSTI4 0
EQI4 $931
line 1677
;1676:		int		counts[TEAM_NUM_TEAMS];
;1677:		qboolean	notEnough = qfalse;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 1679
;1678:
;1679:		if ( g_gametype.integer > GT_TEAM ) {
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 5
LEI4 $935
line 1680
;1680:			counts[TEAM_BLUE] = TeamCount( -1, TEAM_BLUE );
CNSTI4 -1
ARGI4
CNSTI4 2
ARGI4
ADDRLP4 20
ADDRGP4 TeamCount
CALLI4
ASGNI4
ADDRLP4 4+8
ADDRLP4 20
INDIRI4
ASGNI4
line 1681
;1681:			counts[TEAM_RED] = TeamCount( -1, TEAM_RED );
CNSTI4 -1
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 24
ADDRGP4 TeamCount
CALLI4
ASGNI4
ADDRLP4 4+4
ADDRLP4 24
INDIRI4
ASGNI4
line 1683
;1682:
;1683:			if (counts[TEAM_RED] < 1 || counts[TEAM_BLUE] < 1) {
ADDRLP4 28
CNSTI4 1
ASGNI4
ADDRLP4 4+4
INDIRI4
ADDRLP4 28
INDIRI4
LTI4 $944
ADDRLP4 4+8
INDIRI4
ADDRLP4 28
INDIRI4
GEI4 $936
LABELV $944
line 1684
;1684:				notEnough = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 1685
;1685:			}
line 1686
;1686:		} else if ( level.numPlayingClients < 2 ) {
ADDRGP4 $936
JUMPV
LABELV $935
ADDRGP4 level+80
INDIRI4
CNSTI4 2
GEI4 $945
line 1687
;1687:			notEnough = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 1688
;1688:		}
LABELV $945
LABELV $936
line 1690
;1689:
;1690:		if ( notEnough ) {
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $948
line 1691
;1691:			if ( level.warmupTime != -1 ) {
ADDRGP4 level+16
INDIRI4
CNSTI4 -1
EQI4 $899
line 1692
;1692:				level.warmupTime = -1;
ADDRGP4 level+16
CNSTI4 -1
ASGNI4
line 1693
;1693:				trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
ADDRGP4 $375
ARGP4
ADDRGP4 level+16
INDIRI4
ARGI4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 5
ARGI4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1694
;1694:				G_LogPrintf( "Warmup:\n" );
ADDRGP4 $955
ARGP4
ADDRGP4 G_LogPrintf
CALLV
pop
line 1695
;1695:			}
line 1696
;1696:			return; // still waiting for team members
ADDRGP4 $899
JUMPV
LABELV $948
line 1699
;1697:		}
;1698:
;1699:		if ( level.warmupTime == 0 ) {
ADDRGP4 level+16
INDIRI4
CNSTI4 0
NEI4 $956
line 1700
;1700:			return;
ADDRGP4 $899
JUMPV
LABELV $956
line 1704
;1701:		}
;1702:
;1703:		// if the warmup is changed at the console, restart it
;1704:		if ( g_warmup.modificationCount != level.warmupModificationCount ) {
ADDRGP4 g_warmup+4
INDIRI4
ADDRGP4 level+224
INDIRI4
EQI4 $959
line 1705
;1705:			level.warmupModificationCount = g_warmup.modificationCount;
ADDRGP4 level+224
ADDRGP4 g_warmup+4
INDIRI4
ASGNI4
line 1706
;1706:			level.warmupTime = -1;
ADDRGP4 level+16
CNSTI4 -1
ASGNI4
line 1707
;1707:		}
LABELV $959
line 1710
;1708:
;1709:		// if all players have arrived, start the countdown
;1710:		if ( level.warmupTime < 0 ) {
ADDRGP4 level+16
INDIRI4
CNSTI4 0
GEI4 $966
line 1712
;1711:			// fudge by -1 to account for extra delays
;1712:			level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000;
ADDRLP4 20
CNSTI4 1000
ASGNI4
ADDRGP4 level+16
ADDRGP4 level+32
INDIRI4
ADDRLP4 20
INDIRI4
ADDRGP4 g_warmup+12
INDIRI4
MULI4
ADDRLP4 20
INDIRI4
SUBI4
ADDI4
ASGNI4
line 1713
;1713:			trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
ADDRGP4 $375
ARGP4
ADDRGP4 level+16
INDIRI4
ARGI4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 5
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1714
;1714:			return;
ADDRGP4 $899
JUMPV
LABELV $966
line 1718
;1715:		}
;1716:
;1717:		// if the warmup time has counted down, restart
;1718:		if ( level.time > level.warmupTime ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+16
INDIRI4
LEI4 $973
line 1719
;1719:			level.warmupTime += 10000;
ADDRLP4 20
ADDRGP4 level+16
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 10000
ADDI4
ASGNI4
line 1720
;1720:			trap_Cvar_Set( "g_restarted", "1" );
ADDRGP4 $85
ARGP4
ADDRGP4 $101
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 1721
;1721:			trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
CNSTI4 2
ARGI4
ADDRGP4 $613
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1722
;1722:			level.restarted = qtrue;
ADDRGP4 level+68
CNSTI4 1
ASGNI4
line 1723
;1723:			return;
LABELV $973
line 1725
;1724:		}
;1725:	}
LABELV $931
line 1726
;1726:}
LABELV $899
endproc CheckTournament 32 12
export CheckVote
proc CheckVote 24 8
line 1734
;1727:
;1728:
;1729:/*
;1730:==================
;1731:CheckVote
;1732:==================
;1733:*/
;1734:void CheckVote( void ) {
line 1735
;1735:	if ( level.voteExecuteTime && level.voteExecuteTime < level.time ) {
ADDRGP4 level+2280
INDIRI4
CNSTI4 0
EQI4 $980
ADDRGP4 level+2280
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $980
line 1736
;1736:		level.voteExecuteTime = 0;
ADDRGP4 level+2280
CNSTI4 0
ASGNI4
line 1737
;1737:		trap_SendConsoleCommand( EXEC_APPEND, va("%s\n", level.voteString ) );
ADDRGP4 $986
ARGP4
ADDRGP4 level+228
ARGP4
ADDRLP4 0
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 2
ARGI4
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1739
;1738:
;1739:		if (level.votingGametype)
ADDRGP4 level+2296
INDIRI4
CNSTI4 0
EQI4 $988
line 1740
;1740:		{
line 1741
;1741:			if (trap_Cvar_VariableIntegerValue("g_gametype") != level.votingGametypeTo)
ADDRGP4 $88
ARGP4
ADDRLP4 4
ADDRGP4 trap_Cvar_VariableIntegerValue
CALLI4
ASGNI4
ADDRLP4 4
INDIRI4
ADDRGP4 level+2300
INDIRI4
EQI4 $991
line 1742
;1742:			{ //If we're voting to a different game type, be sure to refresh all the map stuff
line 1743
;1743:				const char *nextMap = G_RefreshNextMap(level.votingGametypeTo, qtrue);
ADDRGP4 level+2300
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 12
ADDRGP4 G_RefreshNextMap
CALLP4
ASGNP4
ADDRLP4 8
ADDRLP4 12
INDIRP4
ASGNP4
line 1745
;1744:
;1745:				if (nextMap && nextMap[0])
ADDRLP4 16
ADDRLP4 8
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $992
ADDRLP4 16
INDIRP4
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $992
line 1746
;1746:				{
line 1747
;1747:					trap_SendConsoleCommand( EXEC_APPEND, va("map %s\n", nextMap ) );
ADDRGP4 $997
ARGP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 2
ARGI4
ADDRLP4 20
INDIRP4
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1748
;1748:				}
line 1750
;1749:
;1750:			}
ADDRGP4 $992
JUMPV
LABELV $991
line 1752
;1751:			else
;1752:			{ //otherwise, just leave the map until a restart
line 1753
;1753:				G_RefreshNextMap(level.votingGametypeTo, qfalse);
ADDRGP4 level+2300
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 G_RefreshNextMap
CALLP4
pop
line 1754
;1754:			}
LABELV $992
line 1755
;1755:			level.votingGametype = qfalse;
ADDRGP4 level+2296
CNSTI4 0
ASGNI4
line 1756
;1756:			level.votingGametypeTo = 0;
ADDRGP4 level+2300
CNSTI4 0
ASGNI4
line 1757
;1757:		}
LABELV $988
line 1758
;1758:	}
LABELV $980
line 1759
;1759:	if ( !level.voteTime ) {
ADDRGP4 level+2276
INDIRI4
CNSTI4 0
NEI4 $1001
line 1760
;1760:		return;
ADDRGP4 $979
JUMPV
LABELV $1001
line 1762
;1761:	}
;1762:	if ( level.time - level.voteTime >= VOTE_TIME ) {
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+2276
INDIRI4
SUBI4
CNSTI4 30000
LTI4 $1004
line 1763
;1763:		trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "VOTEFAILED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1009
ARGP4
ADDRLP4 0
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1764
;1764:	} else {
ADDRGP4 $1005
JUMPV
LABELV $1004
line 1765
;1765:		if ( level.voteYes > level.numVotingClients/2 ) {
ADDRGP4 level+2284
INDIRI4
ADDRGP4 level+2292
INDIRI4
CNSTI4 2
DIVI4
LEI4 $1010
line 1767
;1766:			// execute the command, then remove the vote
;1767:			trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "VOTEPASSED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1014
ARGP4
ADDRLP4 0
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1768
;1768:			level.voteExecuteTime = level.time + 3000;
ADDRGP4 level+2280
ADDRGP4 level+32
INDIRI4
CNSTI4 3000
ADDI4
ASGNI4
line 1769
;1769:		} else if ( level.voteNo >= level.numVotingClients/2 ) {
ADDRGP4 $1011
JUMPV
LABELV $1010
ADDRGP4 level+2288
INDIRI4
ADDRGP4 level+2292
INDIRI4
CNSTI4 2
DIVI4
LTI4 $979
line 1771
;1770:			// same behavior as a timeout
;1771:			trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "VOTEFAILED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1009
ARGP4
ADDRLP4 0
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1772
;1772:		} else {
line 1774
;1773:			// still waiting for a majority
;1774:			return;
LABELV $1018
LABELV $1011
line 1776
;1775:		}
;1776:	}
LABELV $1005
line 1777
;1777:	level.voteTime = 0;
ADDRGP4 level+2276
CNSTI4 0
ASGNI4
line 1778
;1778:	trap_SetConfigstring( CS_VOTE_TIME, "" );
CNSTI4 8
ARGI4
ADDRGP4 $80
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1780
;1779:
;1780:}
LABELV $979
endproc CheckVote 24 8
export PrintTeam
proc PrintTeam 4 8
line 1787
;1781:
;1782:/*
;1783:==================
;1784:PrintTeam
;1785:==================
;1786:*/
;1787:void PrintTeam(int team, char *message) {
line 1790
;1788:	int i;
;1789:
;1790:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1026
JUMPV
LABELV $1023
line 1791
;1791:		if (level.clients[i].sess.sessionTeam != team)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1028
line 1792
;1792:			continue;
ADDRGP4 $1024
JUMPV
LABELV $1028
line 1793
;1793:		trap_SendServerCommand( i, message );
ADDRLP4 0
INDIRI4
ARGI4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1794
;1794:	}
LABELV $1024
line 1790
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $1026
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1023
line 1795
;1795:}
LABELV $1022
endproc PrintTeam 4 8
export SetLeader
proc SetLeader 12 12
line 1802
;1796:
;1797:/*
;1798:==================
;1799:SetLeader
;1800:==================
;1801:*/
;1802:void SetLeader(int team, int client) {
line 1805
;1803:	int i;
;1804:
;1805:	if ( level.clients[client].pers.connected == CON_DISCONNECTED ) {
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1368
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1031
line 1806
;1806:		PrintTeam(team, va("print \"%s is not connected\n\"", level.clients[client].pers.netname) );
ADDRGP4 $1033
ARGP4
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1416
ADDP4
ARGP4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
ADDRFP4 0
INDIRI4
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 PrintTeam
CALLV
pop
line 1807
;1807:		return;
ADDRGP4 $1030
JUMPV
LABELV $1031
line 1809
;1808:	}
;1809:	if (level.clients[client].sess.sessionTeam != team) {
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1034
line 1810
;1810:		PrintTeam(team, va("print \"%s is not on the team anymore\n\"", level.clients[client].pers.netname) );
ADDRGP4 $1036
ARGP4
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1416
ADDP4
ARGP4
ADDRLP4 4
ADDRGP4 va
CALLP4
ASGNP4
ADDRFP4 0
INDIRI4
ARGI4
ADDRLP4 4
INDIRP4
ARGP4
ADDRGP4 PrintTeam
CALLV
pop
line 1811
;1811:		return;
ADDRGP4 $1030
JUMPV
LABELV $1034
line 1813
;1812:	}
;1813:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1040
JUMPV
LABELV $1037
line 1814
;1814:		if (level.clients[i].sess.sessionTeam != team)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1042
line 1815
;1815:			continue;
ADDRGP4 $1038
JUMPV
LABELV $1042
line 1816
;1816:		if (level.clients[i].sess.teamLeader) {
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1044
line 1817
;1817:			level.clients[i].sess.teamLeader = qfalse;
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
CNSTI4 0
ASGNI4
line 1818
;1818:			ClientUserinfoChanged(i);
ADDRLP4 0
INDIRI4
ARGI4
ADDRGP4 ClientUserinfoChanged
CALLV
pop
line 1819
;1819:		}
LABELV $1044
line 1820
;1820:	}
LABELV $1038
line 1813
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $1040
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1037
line 1821
;1821:	level.clients[client].sess.teamLeader = qtrue;
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
CNSTI4 1
ASGNI4
line 1822
;1822:	ClientUserinfoChanged( client );
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 ClientUserinfoChanged
CALLV
pop
line 1823
;1823:	PrintTeam(team, va("print \"%s %s\n\"", level.clients[client].pers.netname, G_GetStripEdString("SVINGAME", "NEWTEAMLEADER")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1047
ARGP4
ADDRLP4 4
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1046
ARGP4
CNSTI4 1756
ADDRFP4 4
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1416
ADDP4
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 8
ADDRGP4 va
CALLP4
ASGNP4
ADDRFP4 0
INDIRI4
ARGI4
ADDRLP4 8
INDIRP4
ARGP4
ADDRGP4 PrintTeam
CALLV
pop
line 1824
;1824:}
LABELV $1030
endproc SetLeader 12 12
export CheckTeamLeader
proc CheckTeamLeader 4 0
line 1831
;1825:
;1826:/*
;1827:==================
;1828:CheckTeamLeader
;1829:==================
;1830:*/
;1831:void CheckTeamLeader( int team ) {
line 1834
;1832:	int i;
;1833:
;1834:	for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1052
JUMPV
LABELV $1049
line 1835
;1835:		if (level.clients[i].sess.sessionTeam != team)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1054
line 1836
;1836:			continue;
ADDRGP4 $1050
JUMPV
LABELV $1054
line 1837
;1837:		if (level.clients[i].sess.teamLeader)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1056
line 1838
;1838:			break;
ADDRGP4 $1051
JUMPV
LABELV $1056
line 1839
;1839:	}
LABELV $1050
line 1834
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $1052
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1049
LABELV $1051
line 1840
;1840:	if (i >= level.maxclients) {
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1058
line 1841
;1841:		for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1064
JUMPV
LABELV $1061
line 1842
;1842:			if (level.clients[i].sess.sessionTeam != team)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1066
line 1843
;1843:				continue;
ADDRGP4 $1062
JUMPV
LABELV $1066
line 1844
;1844:			if (!(g_entities[i].r.svFlags & SVF_BOT)) {
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities+296+8
ADDP4
INDIRI4
CNSTI4 8
BANDI4
CNSTI4 0
NEI4 $1068
line 1845
;1845:				level.clients[i].sess.teamLeader = qtrue;
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
CNSTI4 1
ASGNI4
line 1846
;1846:				break;
ADDRGP4 $1063
JUMPV
LABELV $1068
line 1848
;1847:			}
;1848:		}
LABELV $1062
line 1841
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $1064
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1061
LABELV $1063
line 1849
;1849:		for ( i = 0 ; i < level.maxclients ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1075
JUMPV
LABELV $1072
line 1850
;1850:			if (level.clients[i].sess.sessionTeam != team)
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1520
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
EQI4 $1077
line 1851
;1851:				continue;
ADDRGP4 $1073
JUMPV
LABELV $1077
line 1852
;1852:			level.clients[i].sess.teamLeader = qtrue;
CNSTI4 1756
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 level
INDIRP4
ADDP4
CNSTI4 1560
ADDP4
CNSTI4 1
ASGNI4
line 1853
;1853:			break;
ADDRGP4 $1074
JUMPV
LABELV $1073
line 1849
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $1075
ADDRLP4 0
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1072
LABELV $1074
line 1855
;1854:		}
;1855:	}
LABELV $1058
line 1856
;1856:}
LABELV $1048
endproc CheckTeamLeader 4 0
export CheckTeamVote
proc CheckTeamVote 28 12
line 1863
;1857:
;1858:/*
;1859:==================
;1860:CheckTeamVote
;1861:==================
;1862:*/
;1863:void CheckTeamVote( int team ) {
line 1866
;1864:	int cs_offset;
;1865:
;1866:	if ( team == TEAM_RED )
ADDRFP4 0
INDIRI4
CNSTI4 1
NEI4 $1080
line 1867
;1867:		cs_offset = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $1081
JUMPV
LABELV $1080
line 1868
;1868:	else if ( team == TEAM_BLUE )
ADDRFP4 0
INDIRI4
CNSTI4 2
NEI4 $1079
line 1869
;1869:		cs_offset = 1;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 1871
;1870:	else
;1871:		return;
LABELV $1083
LABELV $1081
line 1873
;1872:
;1873:	if ( !level.teamVoteTime[cs_offset] ) {
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+4352
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1084
line 1874
;1874:		return;
ADDRGP4 $1079
JUMPV
LABELV $1084
line 1876
;1875:	}
;1876:	if ( level.time - level.teamVoteTime[cs_offset] >= VOTE_TIME ) {
ADDRGP4 level+32
INDIRI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+4352
ADDP4
INDIRI4
SUBI4
CNSTI4 30000
LTI4 $1087
line 1877
;1877:		trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TEAMVOTEFAILED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1091
ARGP4
ADDRLP4 4
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 8
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 8
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1878
;1878:	} else {
ADDRGP4 $1088
JUMPV
LABELV $1087
line 1879
;1879:		if ( level.teamVoteYes[cs_offset] > level.numteamVotingClients[cs_offset]/2 ) {
ADDRLP4 4
CNSTI4 2
ASGNI4
ADDRLP4 8
ADDRLP4 0
INDIRI4
ADDRLP4 4
INDIRI4
LSHI4
ASGNI4
ADDRLP4 8
INDIRI4
ADDRGP4 level+4360
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
ADDRGP4 level+4376
ADDP4
INDIRI4
ADDRLP4 4
INDIRI4
DIVI4
LEI4 $1092
line 1881
;1880:			// execute the command, then remove the vote
;1881:			trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TEAMVOTEPASSED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1096
ARGP4
ADDRLP4 12
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 12
INDIRP4
ARGP4
ADDRLP4 16
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 16
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1883
;1882:			//
;1883:			if ( !Q_strncmp( "leader", level.teamVoteString[cs_offset], 6) ) {
ADDRGP4 $1099
ARGP4
ADDRLP4 0
INDIRI4
CNSTI4 10
LSHI4
ADDRGP4 level+2304
ADDP4
ARGP4
CNSTI4 6
ARGI4
ADDRLP4 20
ADDRGP4 Q_strncmp
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
NEI4 $1097
line 1885
;1884:				//set the team leader
;1885:				SetLeader(team, atoi(level.teamVoteString[cs_offset] + 7));
ADDRLP4 0
INDIRI4
CNSTI4 10
LSHI4
ADDRGP4 level+2304+7
ADDP4
ARGP4
ADDRLP4 24
ADDRGP4 atoi
CALLI4
ASGNI4
ADDRFP4 0
INDIRI4
ARGI4
ADDRLP4 24
INDIRI4
ARGI4
ADDRGP4 SetLeader
CALLV
pop
line 1886
;1886:			}
ADDRGP4 $1093
JUMPV
LABELV $1097
line 1887
;1887:			else {
line 1888
;1888:				trap_SendConsoleCommand( EXEC_APPEND, va("%s\n", level.teamVoteString[cs_offset] ) );
ADDRGP4 $986
ARGP4
ADDRLP4 0
INDIRI4
CNSTI4 10
LSHI4
ADDRGP4 level+2304
ADDP4
ARGP4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 2
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SendConsoleCommand
CALLV
pop
line 1889
;1889:			}
line 1890
;1890:		} else if ( level.teamVoteNo[cs_offset] >= level.numteamVotingClients[cs_offset]/2 ) {
ADDRGP4 $1093
JUMPV
LABELV $1092
ADDRLP4 12
CNSTI4 2
ASGNI4
ADDRLP4 16
ADDRLP4 0
INDIRI4
ADDRLP4 12
INDIRI4
LSHI4
ASGNI4
ADDRLP4 16
INDIRI4
ADDRGP4 level+4368
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
ADDRGP4 level+4376
ADDP4
INDIRI4
ADDRLP4 12
INDIRI4
DIVI4
LTI4 $1079
line 1892
;1891:			// same behavior as a timeout
;1892:			trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TEAMVOTEFAILED")) );
ADDRGP4 $853
ARGP4
ADDRGP4 $1091
ARGP4
ADDRLP4 20
ADDRGP4 G_GetStripEdString
CALLP4
ASGNP4
ADDRGP4 $1008
ARGP4
ADDRLP4 20
INDIRP4
ARGP4
ADDRLP4 24
ADDRGP4 va
CALLP4
ASGNP4
CNSTI4 -1
ARGI4
ADDRLP4 24
INDIRP4
ARGP4
ADDRGP4 trap_SendServerCommand
CALLV
pop
line 1893
;1893:		} else {
line 1895
;1894:			// still waiting for a majority
;1895:			return;
LABELV $1105
LABELV $1093
line 1897
;1896:		}
;1897:	}
LABELV $1088
line 1898
;1898:	level.teamVoteTime[cs_offset] = 0;
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 level+4352
ADDP4
CNSTI4 0
ASGNI4
line 1899
;1899:	trap_SetConfigstring( CS_TEAMVOTE_TIME + cs_offset, "" );
ADDRLP4 0
INDIRI4
CNSTI4 12
ADDI4
ARGI4
ADDRGP4 $80
ARGP4
ADDRGP4 trap_SetConfigstring
CALLV
pop
line 1901
;1900:
;1901:}
LABELV $1079
endproc CheckTeamVote 28 12
data
align 4
LABELV $1110
byte 4 -1
export CheckCvars
code
proc CheckCvars 4 8
line 1909
;1902:
;1903:
;1904:/*
;1905:==================
;1906:CheckCvars
;1907:==================
;1908:*/
;1909:void CheckCvars( void ) {
line 1912
;1910:	static int lastMod = -1;
;1911:
;1912:	if ( g_password.modificationCount != lastMod ) {
ADDRGP4 g_password+4
INDIRI4
ADDRGP4 $1110
INDIRI4
EQI4 $1111
line 1913
;1913:		lastMod = g_password.modificationCount;
ADDRGP4 $1110
ADDRGP4 g_password+4
INDIRI4
ASGNI4
line 1914
;1914:		if ( *g_password.string && Q_stricmp( g_password.string, "none" ) ) {
ADDRGP4 g_password+16
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $1115
ADDRGP4 g_password+16
ARGP4
ADDRGP4 $1119
ARGP4
ADDRLP4 0
ADDRGP4 Q_stricmp
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $1115
line 1915
;1915:			trap_Cvar_Set( "g_needpass", "1" );
ADDRGP4 $133
ARGP4
ADDRGP4 $101
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 1916
;1916:		} else {
ADDRGP4 $1116
JUMPV
LABELV $1115
line 1917
;1917:			trap_Cvar_Set( "g_needpass", "0" );
ADDRGP4 $133
ARGP4
ADDRGP4 $86
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 1918
;1918:		}
LABELV $1116
line 1919
;1919:	}
LABELV $1111
line 1920
;1920:}
LABELV $1109
endproc CheckCvars 4 8
export G_RunThink
proc G_RunThink 8 4
line 1929
;1921:
;1922:/*
;1923:=============
;1924:G_RunThink
;1925:
;1926:Runs thinking code for this frame if necessary
;1927:=============
;1928:*/
;1929:void G_RunThink (gentity_t *ent) {
line 1932
;1930:	float	thinktime;
;1931:
;1932:	thinktime = ent->nextthink;
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
INDIRI4
CVIF4 4
ASGNF4
line 1933
;1933:	if (thinktime <= 0) {
ADDRLP4 0
INDIRF4
CNSTF4 0
GTF4 $1121
line 1934
;1934:		return;
ADDRGP4 $1120
JUMPV
LABELV $1121
line 1936
;1935:	}
;1936:	if (thinktime > level.time) {
ADDRLP4 0
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
LEF4 $1123
line 1937
;1937:		return;
ADDRGP4 $1120
JUMPV
LABELV $1123
line 1940
;1938:	}
;1939:	
;1940:	ent->nextthink = 0;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
CNSTI4 0
ASGNI4
line 1941
;1941:	if (!ent->think) {
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
NEU4 $1126
line 1942
;1942:		G_Error ( "NULL ent->think");
ADDRGP4 $1128
ARGP4
ADDRGP4 G_Error
CALLV
pop
line 1943
;1943:	}
LABELV $1126
line 1944
;1944:	ent->think (ent);
ADDRLP4 4
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 4
INDIRP4
CNSTI4 636
ADDP4
INDIRP4
CALLV
pop
line 1945
;1945:}
LABELV $1120
endproc G_RunThink 8 4
data
export g_LastFrameTime
align 4
LABELV g_LastFrameTime
byte 4 0
export g_TimeSinceLastFrame
align 4
LABELV g_TimeSinceLastFrame
byte 4 0
export G_RunFrame
code
proc G_RunFrame 52 12
line 1958
;1946:
;1947:int g_LastFrameTime = 0;
;1948:int g_TimeSinceLastFrame = 0;
;1949:
;1950:/*
;1951:================
;1952:G_RunFrame
;1953:
;1954:Advances the non-player objects in the world
;1955:================
;1956:*/
;1957:
;1958:void G_RunFrame( int levelTime ) {
line 1965
;1959:	int			i;
;1960:	gentity_t	*ent;
;1961:	int			msec;
;1962:int start, end;
;1963:
;1964:	// if we are waiting for the level to restart, do nothing
;1965:	if ( level.restarted ) {
ADDRGP4 level+68
INDIRI4
CNSTI4 0
EQI4 $1130
line 1966
;1966:		return;
ADDRGP4 $1129
JUMPV
LABELV $1130
line 1969
;1967:	}
;1968:
;1969:	level.framenum++;
ADDRLP4 20
ADDRGP4 level+28
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1970
;1970:	level.previousTime = level.time;
ADDRGP4 level+36
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1971
;1971:	level.time = levelTime;
ADDRGP4 level+32
ADDRFP4 0
INDIRI4
ASGNI4
line 1972
;1972:	msec = level.time - level.previousTime;
ADDRLP4 16
ADDRGP4 level+32
INDIRI4
ADDRGP4 level+36
INDIRI4
SUBI4
ASGNI4
line 1974
;1973:
;1974:	g_TimeSinceLastFrame = (level.time - g_LastFrameTime);
ADDRGP4 g_TimeSinceLastFrame
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_LastFrameTime
INDIRI4
SUBI4
ASGNI4
line 1977
;1975:
;1976:	// get any cvar changes
;1977:	G_UpdateCvars();
ADDRGP4 G_UpdateCvars
CALLV
pop
line 1982
;1978:
;1979:	//
;1980:	// go through all allocated objects
;1981:	//
;1982:	start = trap_Milliseconds();
ADDRLP4 24
ADDRGP4 trap_Milliseconds
CALLI4
ASGNI4
ADDRLP4 8
ADDRLP4 24
INDIRI4
ASGNI4
line 1983
;1983:	ent = &g_entities[0];
ADDRLP4 0
ADDRGP4 g_entities
ASGNP4
line 1984
;1984:	for (i=0 ; i<level.num_entities ; i++, ent++) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $1143
JUMPV
LABELV $1140
line 1985
;1985:		if ( !ent->inuse ) {
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1145
line 1986
;1986:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1145
line 1990
;1987:		}
;1988:
;1989:		// clear events that are too old
;1990:		if ( level.time - ent->eventTime > EVENT_VALID_MSEC ) {
ADDRGP4 level+32
INDIRI4
ADDRLP4 0
INDIRP4
CNSTI4 488
ADDP4
INDIRI4
SUBI4
CNSTI4 300
LEI4 $1147
line 1991
;1991:			if ( ent->s.event ) {
ADDRLP4 0
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1150
line 1992
;1992:				ent->s.event = 0;	// &= EV_EVENT_BITS;
ADDRLP4 0
INDIRP4
CNSTI4 252
ADDP4
CNSTI4 0
ASGNI4
line 1993
;1993:				if ( ent->client ) {
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1152
line 1994
;1994:					ent->client->ps.externalEvent = 0;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 132
ADDP4
CNSTI4 0
ASGNI4
line 1998
;1995:					// predicted events should never be set to zero
;1996:					//ent->client->ps.events[0] = 0;
;1997:					//ent->client->ps.events[1] = 0;
;1998:				}
LABELV $1152
line 1999
;1999:			}
LABELV $1150
line 2000
;2000:			if ( ent->freeAfterEvent ) {
ADDRLP4 0
INDIRP4
CNSTI4 492
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1154
line 2002
;2001:				// tempEntities or dropped items completely go away after their event
;2002:				if (ent->s.eFlags & EF_SOUNDTRACKER)
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
INDIRI4
CNSTI4 8388608
BANDI4
CNSTI4 0
EQI4 $1156
line 2003
;2003:				{ //don't trigger the event again..
line 2004
;2004:					ent->s.event = 0;
ADDRLP4 0
INDIRP4
CNSTI4 252
ADDP4
CNSTI4 0
ASGNI4
line 2005
;2005:					ent->s.eventParm = 0;
ADDRLP4 0
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 0
ASGNI4
line 2006
;2006:					ent->s.eType = 0;
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 0
ASGNI4
line 2007
;2007:					ent->eventTime = 0;
ADDRLP4 0
INDIRP4
CNSTI4 488
ADDP4
CNSTI4 0
ASGNI4
line 2008
;2008:				}
ADDRGP4 $1155
JUMPV
LABELV $1156
line 2010
;2009:				else
;2010:				{
line 2011
;2011:					G_FreeEntity( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_FreeEntity
CALLV
pop
line 2012
;2012:					continue;
ADDRGP4 $1141
JUMPV
line 2014
;2013:				}
;2014:			} else if ( ent->unlinkAfterEvent ) {
LABELV $1154
ADDRLP4 0
INDIRP4
CNSTI4 496
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1158
line 2016
;2015:				// items that will respawn will hide themselves after their pickup event
;2016:				ent->unlinkAfterEvent = qfalse;
ADDRLP4 0
INDIRP4
CNSTI4 496
ADDP4
CNSTI4 0
ASGNI4
line 2017
;2017:				trap_UnlinkEntity( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 trap_UnlinkEntity
CALLV
pop
line 2018
;2018:			}
LABELV $1158
LABELV $1155
line 2019
;2019:		}
LABELV $1147
line 2022
;2020:
;2021:		// temporary entities don't think
;2022:		if ( ent->freeAfterEvent ) {
ADDRLP4 0
INDIRP4
CNSTI4 492
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1160
line 2023
;2023:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1160
line 2026
;2024:		}
;2025:
;2026:		if ( !ent->r.linked && ent->neverFree ) {
ADDRLP4 32
CNSTI4 0
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 296
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
NEI4 $1162
ADDRLP4 0
INDIRP4
CNSTI4 468
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
EQI4 $1162
line 2027
;2027:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1162
line 2030
;2028:		}
;2029:
;2030:		if ( ent->s.eType == ET_MISSILE ) {
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1164
line 2031
;2031:			G_RunMissile( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunMissile
CALLV
pop
line 2032
;2032:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1164
line 2035
;2033:		}
;2034:
;2035:		if ( ent->s.eType == ET_ITEM || ent->physicsObject ) {
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 2
EQI4 $1168
ADDRLP4 0
INDIRP4
CNSTI4 500
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1166
LABELV $1168
line 2036
;2036:			G_RunItem( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunItem
CALLV
pop
line 2037
;2037:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1166
line 2040
;2038:		}
;2039:
;2040:		if ( ent->s.eType == ET_MOVER ) {
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 6
NEI4 $1169
line 2041
;2041:			G_RunMover( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunMover
CALLV
pop
line 2042
;2042:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1169
line 2045
;2043:		}
;2044:
;2045:		if ( i < MAX_CLIENTS ) 
ADDRLP4 4
INDIRI4
CNSTI4 32
GEI4 $1171
line 2046
;2046:		{
line 2047
;2047:			G_CheckClientTimeouts ( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_CheckClientTimeouts
CALLV
pop
line 2049
;2048:			
;2049:			if((!level.intermissiontime)&&!(ent->client->ps.pm_flags&PMF_FOLLOW))
ADDRLP4 40
CNSTI4 0
ASGNI4
ADDRGP4 level+9008
INDIRI4
ADDRLP4 40
INDIRI4
NEI4 $1173
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4096
BANDI4
ADDRLP4 40
INDIRI4
NEI4 $1173
line 2050
;2050:			{
line 2051
;2051:				WP_ForcePowersUpdate(ent, &ent->client->pers.cmd );
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1372
ADDP4
ARGP4
ADDRGP4 WP_ForcePowersUpdate
CALLV
pop
line 2052
;2052:				WP_SaberPositionUpdate(ent, &ent->client->pers.cmd);
ADDRLP4 0
INDIRP4
ARGP4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1372
ADDP4
ARGP4
ADDRGP4 WP_SaberPositionUpdate
CALLV
pop
line 2053
;2053:			}
LABELV $1173
line 2054
;2054:			G_RunClient( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunClient
CALLV
pop
line 2055
;2055:			continue;
ADDRGP4 $1141
JUMPV
LABELV $1171
line 2058
;2056:		}
;2057:
;2058:		G_RunThink( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunThink
CALLV
pop
line 2059
;2059:	}
LABELV $1141
line 1984
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 828
ADDP4
ASGNP4
LABELV $1143
ADDRLP4 4
INDIRI4
ADDRGP4 level+12
INDIRI4
LTI4 $1140
line 2060
;2060:end = trap_Milliseconds();
ADDRLP4 28
ADDRGP4 trap_Milliseconds
CALLI4
ASGNI4
ADDRLP4 12
ADDRLP4 28
INDIRI4
ASGNI4
line 2062
;2061:
;2062:	trap_ROFF_UpdateEntities();
ADDRGP4 trap_ROFF_UpdateEntities
CALLV
pop
line 2064
;2063:
;2064:start = trap_Milliseconds();
ADDRLP4 32
ADDRGP4 trap_Milliseconds
CALLI4
ASGNI4
ADDRLP4 8
ADDRLP4 32
INDIRI4
ASGNI4
line 2066
;2065:	// perform final fixups on the players
;2066:	ent = &g_entities[0];
ADDRLP4 0
ADDRGP4 g_entities
ASGNP4
line 2067
;2067:	for (i=0 ; i < level.maxclients ; i++, ent++ ) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 $1179
JUMPV
LABELV $1176
line 2068
;2068:		if ( ent->inuse ) {
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1181
line 2069
;2069:			ClientEndFrame( ent );
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 ClientEndFrame
CALLV
pop
line 2070
;2070:		}
LABELV $1181
line 2071
;2071:	}
LABELV $1177
line 2067
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
ADDRLP4 0
INDIRP4
CNSTI4 828
ADDP4
ASGNP4
LABELV $1179
ADDRLP4 4
INDIRI4
ADDRGP4 level+24
INDIRI4
LTI4 $1176
line 2072
;2072:end = trap_Milliseconds();
ADDRLP4 36
ADDRGP4 trap_Milliseconds
CALLI4
ASGNI4
ADDRLP4 12
ADDRLP4 36
INDIRI4
ASGNI4
line 2075
;2073:
;2074:	// see if it is time to do a tournement restart
;2075:	CheckTournament();
ADDRGP4 CheckTournament
CALLV
pop
line 2078
;2076:
;2077:	// see if it is time to end the level
;2078:	CheckExitRules();
ADDRGP4 CheckExitRules
CALLV
pop
line 2081
;2079:
;2080:	// update to team status?
;2081:	CheckTeamStatus();
ADDRGP4 CheckTeamStatus
CALLV
pop
line 2084
;2082:
;2083:	// cancel vote if timed out
;2084:	CheckVote();
ADDRGP4 CheckVote
CALLV
pop
line 2087
;2085:
;2086:	// check team votes
;2087:	CheckTeamVote( TEAM_RED );
CNSTI4 1
ARGI4
ADDRGP4 CheckTeamVote
CALLV
pop
line 2088
;2088:	CheckTeamVote( TEAM_BLUE );
CNSTI4 2
ARGI4
ADDRGP4 CheckTeamVote
CALLV
pop
line 2091
;2089:
;2090:	// for tracking changes
;2091:	CheckCvars();
ADDRGP4 CheckCvars
CALLV
pop
line 2093
;2092:
;2093:	if (g_listEntity.integer) {
ADDRGP4 g_listEntity+12
INDIRI4
CNSTI4 0
EQI4 $1183
line 2094
;2094:		for (i = 0; i < MAX_GENTITIES; i++) {
ADDRLP4 4
CNSTI4 0
ASGNI4
LABELV $1186
line 2095
;2095:			G_Printf("%4i: %s\n", i, g_entities[i].classname);
ADDRGP4 $1190
ARGP4
ADDRLP4 4
INDIRI4
ARGI4
CNSTI4 828
ADDRLP4 4
INDIRI4
MULI4
ADDRGP4 g_entities+416
ADDP4
INDIRP4
ARGP4
ADDRGP4 G_Printf
CALLV
pop
line 2096
;2096:		}
LABELV $1187
line 2094
ADDRLP4 4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 1024
LTI4 $1186
line 2097
;2097:		trap_Cvar_Set("g_listEntity", "0");
ADDRGP4 $159
ARGP4
ADDRGP4 $86
ARGP4
ADDRGP4 trap_Cvar_Set
CALLV
pop
line 2098
;2098:	}
LABELV $1183
line 2101
;2099:
;2100:	//At the end of the frame, send out the ghoul2 kill queue, if there is one
;2101:	G_SendG2KillQueue();
ADDRGP4 G_SendG2KillQueue
CALLV
pop
line 2103
;2102:
;2103:	g_LastFrameTime = level.time;
ADDRGP4 g_LastFrameTime
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2104
;2104:}
LABELV $1129
endproc G_RunFrame 52 12
data
align 1
LABELV $1194
char 1 0
skip 1023
export G_GetStripEdString
code
proc G_GetStripEdString 0 16
line 2107
;2105:
;2106:const char *G_GetStripEdString(char *refSection, char *refName)
;2107:{
line 2120
;2108:	/*
;2109:	static char text[1024]={0};
;2110:	trap_SP_GetStringTextString(va("%s_%s", refSection, refName), text, sizeof(text));
;2111:	return text;
;2112:	*/
;2113:
;2114:	//Well, it would've been lovely doing it the above way, but it would mean mixing
;2115:	//languages for the client depending on what the server is. So we'll mark this as
;2116:	//a striped reference with @@@ and send the refname to the client, and when it goes
;2117:	//to print it will get scanned for the striped reference indication and dealt with
;2118:	//properly.
;2119:	static char text[1024]={0};
;2120:	Com_sprintf(text, sizeof(text), "@@@%s", refName);
ADDRGP4 $1194
ARGP4
CNSTI4 1024
ARGI4
ADDRGP4 $1195
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 Com_sprintf
CALLV
pop
line 2121
;2121:	return text;
ADDRGP4 $1194
RETP4
LABELV $1193
endproc G_GetStripEdString 0 16
import G_ROFF_NotetrackCallback
bss
export g_listEntity
align 4
LABELV g_listEntity
skip 272
export g_podiumDrop
align 4
LABELV g_podiumDrop
skip 272
export g_podiumDist
align 4
LABELV g_podiumDist
skip 272
export g_statLogFile
align 4
LABELV g_statLogFile
skip 272
export g_statLog
align 4
LABELV g_statLog
skip 272
export g_logSync
align 4
LABELV g_logSync
skip 272
export g_log
align 4
LABELV g_log
skip 272
export g_MaxHolocronCarry
align 4
LABELV g_MaxHolocronCarry
skip 272
export g_clients
align 4
LABELV g_clients
skip 56192
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_VariableValue
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
export g_timeouttospec
align 4
LABELV g_timeouttospec
skip 272
export g_forceDodge
align 4
LABELV g_forceDodge
skip 272
export g_dismember
align 4
LABELV g_dismember
skip 272
export g_singlePlayer
align 4
LABELV g_singlePlayer
skip 272
export g_enableBreath
align 4
LABELV g_enableBreath
skip 272
export g_enableDust
align 4
LABELV g_enableDust
skip 272
export g_rankings
align 4
LABELV g_rankings
skip 272
export pmove_msec
align 4
LABELV pmove_msec
skip 272
export pmove_fixed
align 4
LABELV pmove_fixed
skip 272
export g_smoothClients
align 4
LABELV g_smoothClients
skip 272
export g_blueteam
align 4
LABELV g_blueteam
skip 272
export g_redteam
align 4
LABELV g_redteam
skip 272
export g_debugUp
align 4
LABELV g_debugUp
skip 272
export g_debugRight
align 4
LABELV g_debugRight
skip 272
export g_debugForward
align 4
LABELV g_debugForward
skip 272
export g_filterBan
align 4
LABELV g_filterBan
skip 272
export g_banIPs
align 4
LABELV g_banIPs
skip 272
export g_teamForceBalance
align 4
LABELV g_teamForceBalance
skip 272
export g_teamAutoJoin
align 4
LABELV g_teamAutoJoin
skip 272
export g_allowVote
align 4
LABELV g_allowVote
skip 272
export g_blood
align 4
LABELV g_blood
skip 272
export g_doWarmup
align 4
LABELV g_doWarmup
skip 272
export g_warmup
align 4
LABELV g_warmup
skip 272
export g_motd
align 4
LABELV g_motd
skip 272
export g_synchronousClients
align 4
LABELV g_synchronousClients
skip 272
export g_adaptRespawn
align 4
LABELV g_adaptRespawn
skip 272
export g_weaponTeamRespawn
align 4
LABELV g_weaponTeamRespawn
skip 272
export g_weaponRespawn
align 4
LABELV g_weaponRespawn
skip 272
export g_debugDamage
align 4
LABELV g_debugDamage
skip 272
export g_debugAlloc
align 4
LABELV g_debugAlloc
skip 272
export g_debugMove
align 4
LABELV g_debugMove
skip 272
export g_inactivity
align 4
LABELV g_inactivity
skip 272
export g_forcerespawn
align 4
LABELV g_forcerespawn
skip 272
export g_quadfactor
align 4
LABELV g_quadfactor
skip 272
export g_knockback
align 4
LABELV g_knockback
skip 272
export g_speed
align 4
LABELV g_speed
skip 272
export g_gravity
align 4
LABELV g_gravity
skip 272
export g_needpass
align 4
LABELV g_needpass
skip 272
export g_password
align 4
LABELV g_password
skip 272
export g_friendlySaber
align 4
LABELV g_friendlySaber
skip 272
export g_friendlyFire
align 4
LABELV g_friendlyFire
skip 272
export g_saberInterpolate
align 4
LABELV g_saberInterpolate
skip 272
export g_capturelimit
align 4
LABELV g_capturelimit
skip 272
export g_timelimit
align 4
LABELV g_timelimit
skip 272
export g_duel_fraglimit
align 4
LABELV g_duel_fraglimit
skip 272
export g_fraglimit
align 4
LABELV g_fraglimit
skip 272
export g_duelWeaponDisable
align 4
LABELV g_duelWeaponDisable
skip 272
export g_weaponDisable
align 4
LABELV g_weaponDisable
skip 272
export g_forcePowerDisable
align 4
LABELV g_forcePowerDisable
skip 272
export g_spawnInvulnerability
align 4
LABELV g_spawnInvulnerability
skip 272
export g_forceRegenTime
align 4
LABELV g_forceRegenTime
skip 272
export g_saberLocking
align 4
LABELV g_saberLocking
skip 272
export g_privateDuel
align 4
LABELV g_privateDuel
skip 272
export g_forceBasedTeams
align 4
LABELV g_forceBasedTeams
skip 272
export g_maxForceRank
align 4
LABELV g_maxForceRank
skip 272
export g_dmflags
align 4
LABELV g_dmflags
skip 272
export g_autoMapCycle
align 4
LABELV g_autoMapCycle
skip 272
export g_restarted
align 4
LABELV g_restarted
skip 272
export g_maxGameClients
align 4
LABELV g_maxGameClients
skip 272
export g_maxclients
align 4
LABELV g_maxclients
skip 272
export g_cheats
align 4
LABELV g_cheats
skip 272
export g_dedicated
align 4
LABELV g_dedicated
skip 272
export g_gametype
align 4
LABELV g_gametype
skip 272
export g_entities
align 4
LABELV g_entities
skip 847872
export level
align 4
LABELV level
skip 9096
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 G_RefreshNextMap
import G_DoesMapSupportGametype
import BotInterbreedEndMatch
import Svcmd_BotList_f
import Svcmd_AddBot_f
import G_BotConnect
import G_RemoveQueuedBotBegin
import G_CheckBotSpawn
import G_GetBotInfoByName
import G_GetBotInfoByNumber
import G_InitBots
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
export g_ff_objectives
align 4
LABELV g_ff_objectives
skip 272
import DeathmatchScoreboardMessage
import G_SetStats
import BlowDetpacks
import FireWeapon
import G_FilterPacket
import G_ProcessIPBans
import ConsoleCommand
import gJMSaberEnt
import SpotWouldTelefrag
import AddScore
import player_die
import ClientSpawn
import InitBodyQue
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 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 $1195
char 1 64
char 1 64
char 1 64
char 1 37
char 1 115
char 1 0
align 1
LABELV $1190
char 1 37
char 1 52
char 1 105
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $1128
char 1 78
char 1 85
char 1 76
char 1 76
char 1 32
char 1 101
char 1 110
char 1 116
char 1 45
char 1 62
char 1 116
char 1 104
char 1 105
char 1 110
char 1 107
char 1 0
align 1
LABELV $1119
char 1 110
char 1 111
char 1 110
char 1 101
char 1 0
align 1
LABELV $1099
char 1 108
char 1 101
char 1 97
char 1 100
char 1 101
char 1 114
char 1 0
align 1
LABELV $1096
char 1 84
char 1 69
char 1 65
char 1 77
char 1 86
char 1 79
char 1 84
char 1 69
char 1 80
char 1 65
char 1 83
char 1 83
char 1 69
char 1 68
char 1 0
align 1
LABELV $1091
char 1 84
char 1 69
char 1 65
char 1 77
char 1 86
char 1 79
char 1 84
char 1 69
char 1 70
char 1 65
char 1 73
char 1 76
char 1 69
char 1 68
char 1 0
align 1
LABELV $1047
char 1 78
char 1 69
char 1 87
char 1 84
char 1 69
char 1 65
char 1 77
char 1 76
char 1 69
char 1 65
char 1 68
char 1 69
char 1 82
char 1 0
align 1
LABELV $1046
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 32
char 1 37
char 1 115
char 1 10
char 1 34
char 1 0
align 1
LABELV $1036
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 32
char 1 105
char 1 115
char 1 32
char 1 110
char 1 111
char 1 116
char 1 32
char 1 111
char 1 110
char 1 32
char 1 116
char 1 104
char 1 101
char 1 32
char 1 116
char 1 101
char 1 97
char 1 109
char 1 32
char 1 97
char 1 110
char 1 121
char 1 109
char 1 111
char 1 114
char 1 101
char 1 10
char 1 34
char 1 0
align 1
LABELV $1033
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 32
char 1 105
char 1 115
char 1 32
char 1 110
char 1 111
char 1 116
char 1 32
char 1 99
char 1 111
char 1 110
char 1 110
char 1 101
char 1 99
char 1 116
char 1 101
char 1 100
char 1 10
char 1 34
char 1 0
align 1
LABELV $1014
char 1 86
char 1 79
char 1 84
char 1 69
char 1 80
char 1 65
char 1 83
char 1 83
char 1 69
char 1 68
char 1 0
align 1
LABELV $1009
char 1 86
char 1 79
char 1 84
char 1 69
char 1 70
char 1 65
char 1 73
char 1 76
char 1 69
char 1 68
char 1 0
align 1
LABELV $1008
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 $997
char 1 109
char 1 97
char 1 112
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $986
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $955
char 1 87
char 1 97
char 1 114
char 1 109
char 1 117
char 1 112
char 1 58
char 1 10
char 1 0
align 1
LABELV $898
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 66
char 1 108
char 1 117
char 1 101
char 1 32
char 1 104
char 1 105
char 1 116
char 1 32
char 1 116
char 1 104
char 1 101
char 1 32
char 1 99
char 1 97
char 1 112
char 1 116
char 1 117
char 1 114
char 1 101
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 46
char 1 10
char 1 34
char 1 0
align 1
LABELV $892
char 1 67
char 1 97
char 1 112
char 1 116
char 1 117
char 1 114
char 1 101
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 32
char 1 104
char 1 105
char 1 116
char 1 46
char 1 0
align 1
LABELV $891
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 82
char 1 101
char 1 100
char 1 32
char 1 104
char 1 105
char 1 116
char 1 32
char 1 116
char 1 104
char 1 101
char 1 32
char 1 99
char 1 97
char 1 112
char 1 116
char 1 117
char 1 114
char 1 101
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 46
char 1 10
char 1 34
char 1 0
align 1
LABELV $881
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 94
char 1 55
char 1 32
char 1 37
char 1 115
char 1 46
char 1 10
char 1 34
char 1 0
align 1
LABELV $877
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 94
char 1 55
char 1 32
char 1 104
char 1 105
char 1 116
char 1 32
char 1 116
char 1 104
char 1 101
char 1 32
char 1 119
char 1 105
char 1 110
char 1 32
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 46
char 1 10
char 1 34
char 1 0
align 1
LABELV $876
char 1 68
char 1 117
char 1 101
char 1 108
char 1 32
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 32
char 1 104
char 1 105
char 1 116
char 1 46
char 1 0
align 1
LABELV $861
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 66
char 1 108
char 1 117
char 1 101
char 1 32
char 1 37
char 1 115
char 1 10
char 1 34
char 1 0
align 1
LABELV $855
char 1 75
char 1 105
char 1 108
char 1 108
char 1 32
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 32
char 1 104
char 1 105
char 1 116
char 1 46
char 1 0
align 1
LABELV $854
char 1 72
char 1 73
char 1 84
char 1 95
char 1 84
char 1 72
char 1 69
char 1 95
char 1 75
char 1 73
char 1 76
char 1 76
char 1 95
char 1 76
char 1 73
char 1 77
char 1 73
char 1 84
char 1 0
align 1
LABELV $853
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 $852
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 82
char 1 101
char 1 100
char 1 32
char 1 37
char 1 115
char 1 10
char 1 34
char 1 0
align 1
LABELV $839
char 1 84
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 32
char 1 104
char 1 105
char 1 116
char 1 46
char 1 0
align 1
LABELV $838
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 84
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 32
char 1 104
char 1 105
char 1 116
char 1 46
char 1 10
char 1 34
char 1 0
align 1
LABELV $735
char 1 37
char 1 105
char 1 124
char 1 37
char 1 105
char 1 0
align 1
LABELV $702
char 1 115
char 1 112
char 1 76
char 1 111
char 1 115
char 1 101
char 1 10
char 1 0
align 1
LABELV $701
char 1 115
char 1 112
char 1 87
char 1 105
char 1 110
char 1 10
char 1 0
align 1
LABELV $678
char 1 115
char 1 99
char 1 111
char 1 114
char 1 101
char 1 58
char 1 32
char 1 37
char 1 105
char 1 32
char 1 32
char 1 112
char 1 105
char 1 110
char 1 103
char 1 58
char 1 32
char 1 37
char 1 105
char 1 32
char 1 32
char 1 99
char 1 108
char 1 105
char 1 101
char 1 110
char 1 116
char 1 58
char 1 32
char 1 37
char 1 105
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $661
char 1 114
char 1 101
char 1 100
char 1 58
char 1 37
char 1 105
char 1 32
char 1 32
char 1 98
char 1 108
char 1 117
char 1 101
char 1 58
char 1 37
char 1 105
char 1 10
char 1 0
align 1
LABELV $652
char 1 69
char 1 120
char 1 105
char 1 116
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $640
char 1 37
char 1 51
char 1 105
char 1 58
char 1 37
char 1 105
char 1 37
char 1 105
char 1 32
char 1 0
align 1
LABELV $617
char 1 118
char 1 115
char 1 116
char 1 114
char 1 32
char 1 110
char 1 101
char 1 120
char 1 116
char 1 109
char 1 97
char 1 112
char 1 10
char 1 0
align 1
LABELV $613
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 10
char 1 0
align 1
LABELV $542
char 1 105
char 1 110
char 1 102
char 1 111
char 1 95
char 1 112
char 1 108
char 1 97
char 1 121
char 1 101
char 1 114
char 1 95
char 1 105
char 1 110
char 1 116
char 1 101
char 1 114
char 1 109
char 1 105
char 1 115
char 1 115
char 1 105
char 1 111
char 1 110
char 1 0
align 1
LABELV $375
char 1 37
char 1 105
char 1 0
align 1
LABELV $363
char 1 115
char 1 0
align 1
LABELV $354
char 1 102
char 1 0
align 1
LABELV $329
char 1 37
char 1 115
char 1 0
align 1
LABELV $323
char 1 83
char 1 104
char 1 117
char 1 116
char 1 100
char 1 111
char 1 119
char 1 110
char 1 71
char 1 97
char 1 109
char 1 101
char 1 58
char 1 10
char 1 0
align 1
LABELV $319
char 1 61
char 1 61
char 1 61
char 1 61
char 1 32
char 1 83
char 1 104
char 1 117
char 1 116
char 1 100
char 1 111
char 1 119
char 1 110
char 1 71
char 1 97
char 1 109
char 1 101
char 1 32
char 1 61
char 1 61
char 1 61
char 1 61
char 1 10
char 1 0
align 1
LABELV $317
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 $314
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 103
char 1 117
char 1 114
char 1 112
char 1 50
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $313
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 103
char 1 117
char 1 114
char 1 112
char 1 49
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $312
char 1 109
char 1 111
char 1 100
char 1 101
char 1 108
char 1 115
char 1 47
char 1 109
char 1 97
char 1 112
char 1 111
char 1 98
char 1 106
char 1 101
char 1 99
char 1 116
char 1 115
char 1 47
char 1 112
char 1 111
char 1 100
char 1 105
char 1 117
char 1 109
char 1 47
char 1 112
char 1 111
char 1 100
char 1 105
char 1 117
char 1 109
char 1 52
char 1 46
char 1 109
char 1 100
char 1 51
char 1 0
align 1
LABELV $310
char 1 99
char 1 111
char 1 109
char 1 95
char 1 98
char 1 117
char 1 105
char 1 108
char 1 100
char 1 83
char 1 99
char 1 114
char 1 105
char 1 112
char 1 116
char 1 0
align 1
LABELV $306
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 10
char 1 0
align 1
LABELV $305
char 1 45
char 1 49
char 1 124
char 1 45
char 1 49
char 1 0
align 1
LABELV $304
char 1 45
char 1 49
char 1 0
align 1
LABELV $285
char 1 78
char 1 111
char 1 116
char 1 32
char 1 108
char 1 111
char 1 103
char 1 103
char 1 105
char 1 110
char 1 103
char 1 32
char 1 116
char 1 111
char 1 32
char 1 100
char 1 105
char 1 115
char 1 107
char 1 46
char 1 10
char 1 0
align 1
LABELV $284
char 1 73
char 1 110
char 1 105
char 1 116
char 1 71
char 1 97
char 1 109
char 1 101
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $283
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 10
char 1 0
align 1
LABELV $281
char 1 87
char 1 65
char 1 82
char 1 78
char 1 73
char 1 78
char 1 71
char 1 58
char 1 32
char 1 67
char 1 111
char 1 117
char 1 108
char 1 100
char 1 110
char 1 39
char 1 116
char 1 32
char 1 111
char 1 112
char 1 101
char 1 110
char 1 32
char 1 108
char 1 111
char 1 103
char 1 102
char 1 105
char 1 108
char 1 101
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $266
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 102
char 1 114
char 1 121
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $262
char 1 103
char 1 97
char 1 109
char 1 101
char 1 100
char 1 97
char 1 116
char 1 101
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $261
char 1 103
char 1 97
char 1 109
char 1 101
char 1 110
char 1 97
char 1 109
char 1 101
char 1 58
char 1 32
char 1 37
char 1 115
char 1 10
char 1 0
align 1
LABELV $260
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 32
char 1 71
char 1 97
char 1 109
char 1 101
char 1 32
char 1 73
char 1 110
char 1 105
char 1 116
char 1 105
char 1 97
char 1 108
char 1 105
char 1 122
char 1 97
char 1 116
char 1 105
char 1 111
char 1 110
char 1 32
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 45
char 1 10
char 1 0
align 1
LABELV $254
char 1 112
char 1 114
char 1 105
char 1 110
char 1 116
char 1 32
char 1 34
char 1 83
char 1 101
char 1 114
char 1 118
char 1 101
char 1 114
char 1 58
char 1 32
char 1 37
char 1 115
char 1 32
char 1 99
char 1 104
char 1 97
char 1 110
char 1 103
char 1 101
char 1 100
char 1 32
char 1 116
char 1 111
char 1 32
char 1 37
char 1 115
char 1 10
char 1 34
char 1 0
align 1
LABELV $239
char 1 103
char 1 95
char 1 103
char 1 97
char 1 109
char 1 101
char 1 116
char 1 121
char 1 112
char 1 101
char 1 32
char 1 37
char 1 105
char 1 32
char 1 105
char 1 115
char 1 32
char 1 111
char 1 117
char 1 116
char 1 32
char 1 111
char 1 102
char 1 32
char 1 114
char 1 97
char 1 110
char 1 103
char 1 101
char 1 44
char 1 32
char 1 100
char 1 101
char 1 102
char 1 97
char 1 117
char 1 108
char 1 116
char 1 105
char 1 110
char 1 103
char 1 32
char 1 116
char 1 111
char 1 32
char 1 48
char 1 10
char 1 0
align 1
LABELV $221
char 1 37
char 1 105
char 1 32
char 1 116
char 1 101
char 1 97
char 1 109
char 1 115
char 1 32
char 1 119
char 1 105
char 1 116
char 1 104
char 1 32
char 1 37
char 1 105
char 1 32
char 1 101
char 1 110
char 1 116
char 1 105
char 1 116
char 1 105
char 1 101
char 1 115
char 1 10
char 1 0
align 1
LABELV $173
char 1 103
char 1 95
char 1 116
char 1 105
char 1 109
char 1 101
char 1 111
char 1 117
char 1 116
char 1 116
char 1 111
char 1 115
char 1 112
char 1 101
char 1 99
char 1 0
align 1
LABELV $172
char 1 103
char 1 95
char 1 102
char 1 111
char 1 114
char 1 99
char 1 101
char 1 68
char 1 111
char 1 100
char 1 103
char 1 101
char 1 0
align 1
LABELV $171
char 1 103
char 1 95
char 1 100
char 1 105
char 1 115
char 1 109
char 1 101
char 1 109
char 1 98
char 1 101
char 1 114
char 1 0
align 1
LABELV $170
char 1 103
char 1 95
char 1 114
char 1 97
char 1 110
char 1 107
char 1 105
char 1 110
char 1 103
char 1 115
char 1 0
align 1
LABELV $169
char 1 112
char 1 109
char 1 111
char 1 118
char 1 101
char 1 95
char 1 109
char 1 115
char 1 101
char 1 99
char 1 0
align 1
LABELV $168
char 1 112
char 1 109
char 1 111
char 1 118
char 1 101
char 1 95
char 1 102
char 1 105
char 1 120
char 1 101
char 1 100
char 1 0
align 1
LABELV $167
char 1 103
char 1 95
char 1 115
char 1 109
char 1 111
char 1 111
char 1 116
char 1 104
char 1 67
char 1 108
char 1 105
char 1 101
char 1 110
char 1 116
char 1 115
char 1 0
align 1
LABELV $166
char 1 103
char 1 95
char 1 101
char 1 110
char 1 97
char 1 98
char 1 108
char 1 101
char 1 66
char 1 114
char 1 101
char 1 97
char 1 116
char 1 104
char 1 0
align 1
LABELV $165
char 1 103
char 1 95
char 1 101
char 1 110
char 1 97
char 1 98
char 1 108
char 1 101
char 1 68
char 1 117
char 1 115
char 1 116
char 1 0
align 1
LABELV $164
char 1 117
char 1 105
char 1 95
char 1 115
char 1 105
char 1 110
char 1 103
char 1 108
char 1 101
char 1 80
char 1 108
char 1 97
char 1 121
char 1 101
char 1 114
char 1 65
char 1 99
char 1 116
char 1 105
char 1 118
char 1 101
char 1 0
align 1
LABELV $163
char 1 82
char 1 101
char 1 98
char 1 101
char 1 108
char 1 108
char 1 105
char 1 111
char 1 110
char 1 0
align 1
LABELV $162
char 1 103
char 1 95
char 1 98
char 1 108
char 1 117
char 1 101
char 1 116
char 1 101
char 1 97
char 1 109
char 1 0
align 1
LABELV $161
char 1 69
char 1 109
char 1 112
char 1 105
char 1 114
char 1 101
char 1 0
align 1
LABELV $160
char 1 103
char 1 95
char 1 114
char 1 101
char 1 100
char 1 116
char 1 101
char 1 97
char 1 109
char 1 0
align 1
LABELV $159
char 1 103
char 1 95
char 1 108
char 1 105
char 1 115
char 1 116
char 1 69
char 1 110
char 1 116
char 1 105
char 1 116
char 1 121
char 1 0
align 1
LABELV $158
char 1 103
char 1 95
char 1 97
char 1 108
char 1 108
char 1 111
char 1 119
char 1 86
char 1 111
char 1 116
char 1 101
char 1 0
align 1
LABELV $157
char 1 55
char 1 48
char 1 0
align 1
LABELV $156
char 1 103
char 1 95
char 1 112
char 1 111
char 1 100
char 1 105
char 1 117
char 1 109
char 1 68
char 1 114
char 1 111
char 1 112
char 1 0
align 1
LABELV $155
char 1 56
char 1 48
char 1 0
align 1
LABELV $154
char 1 103
char 1 95
char 1 112
char 1 111
char 1 100
char 1 105
char 1 117
char 1 109
char 1 68
char 1 105
char 1 115
char 1 116
char 1 0
align 1
LABELV $153
char 1 99
char 1 111
char 1 109
char 1 95
char 1 98
char 1 108
char 1 111
char 1 111
char 1 100
char 1 0
align 1
LABELV $152
char 1 103
char 1 95
char 1 109
char 1 111
char 1 116
char 1 100
char 1 0
align 1
LABELV $151
char 1 103
char 1 95
char 1 100
char 1 101
char 1 98
char 1 117
char 1 103
char 1 65
char 1 108
char 1 108
char 1 111
char 1 99
char 1 0
align 1
LABELV $150
char 1 103
char 1 95
char 1 100
char 1 101
char 1 98
char 1 117
char 1 103
char 1 68
char 1 97
char 1 109
char 1 97
char 1 103
char 1 101
char 1 0
align 1
LABELV $149
char 1 103
char 1 95
char 1 100
char 1 101
char 1 98
char 1 117
char 1 103
char 1 77
char 1 111
char 1 118
char 1 101
char 1 0
align 1
LABELV $148
char 1 103
char 1 95
char 1 105
char 1 110
char 1 97
char 1 99
char 1 116
char 1 105
char 1 118
char 1 105
char 1 116
char 1 121
char 1 0
align 1
LABELV $147
char 1 54
char 1 48
char 1 0
align 1
LABELV $146
char 1 103
char 1 95
char 1 102
char 1 111
char 1 114
char 1 99
char 1 101
char 1 114
char 1 101
char 1 115
char 1 112
char 1 97
char 1 119
char 1 110
char 1 0
align 1
LABELV $145
char 1 103
char 1 95
char 1 97
char 1 100
char 1 97
char 1 112
char 1 116
char 1 114
char 1 101
char 1 115
char 1 112
char 1 97
char 1 119
char 1 110
char 1 0
align 1
LABELV $144
char 1 103
char 1 95
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 84
char 1 101
char 1 97
char 1 109
char 1 82
char 1 101
char 1 115
char 1 112
char 1 97
char 1 119
char 1 110
char 1 0
align 1
LABELV $143
char 1 53
char 1 0
align 1
LABELV $142
char 1 103
char 1 95
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 114
char 1 101
char 1 115
char 1 112
char 1 97
char 1 119
char 1 110
char 1 0
align 1
LABELV $141
char 1 103
char 1 95
char 1 113
char 1 117
char 1 97
char 1 100
char 1 102
char 1 97
char 1 99
char 1 116
char 1 111
char 1 114
char 1 0
align 1
LABELV $140
char 1 49
char 1 48
char 1 48
char 1 48
char 1 0
align 1
LABELV $139
char 1 103
char 1 95
char 1 107
char 1 110
char 1 111
char 1 99
char 1 107
char 1 98
char 1 97
char 1 99
char 1 107
char 1 0
align 1
LABELV $138
char 1 56
char 1 48
char 1 48
char 1 0
align 1
LABELV $137
char 1 103
char 1 95
char 1 103
char 1 114
char 1 97
char 1 118
char 1 105
char 1 116
char 1 121
char 1 0
align 1
LABELV $136
char 1 50
char 1 53
char 1 48
char 1 0
align 1
LABELV $135
char 1 103
char 1 95
char 1 115
char 1 112
char 1 101
char 1 101
char 1 100
char 1 0
align 1
LABELV $134
char 1 100
char 1 101
char 1 100
char 1 105
char 1 99
char 1 97
char 1 116
char 1 101
char 1 100
char 1 0
align 1
LABELV $133
char 1 103
char 1 95
char 1 110
char 1 101
char 1 101
char 1 100
char 1 112
char 1 97
char 1 115
char 1 115
char 1 0
align 1
LABELV $132
char 1 103
char 1 95
char 1 102
char 1 105
char 1 108
char 1 116
char 1 101
char 1 114
char 1 66
char 1 97
char 1 110
char 1 0
align 1
LABELV $131
char 1 103
char 1 95
char 1 98
char 1 97
char 1 110
char 1 73
char 1 80
char 1 115
char 1 0
align 1
LABELV $130
char 1 103
char 1 95
char 1 112
char 1 97
char 1 115
char 1 115
char 1 119
char 1 111
char 1 114
char 1 100
char 1 0
align 1
LABELV $129
char 1 115
char 1 116
char 1 97
char 1 116
char 1 108
char 1 111
char 1 103
char 1 46
char 1 108
char 1 111
char 1 103
char 1 0
align 1
LABELV $128
char 1 103
char 1 95
char 1 115
char 1 116
char 1 97
char 1 116
char 1 76
char 1 111
char 1 103
char 1 70
char 1 105
char 1 108
char 1 101
char 1 0
align 1
LABELV $127
char 1 103
char 1 95
char 1 115
char 1 116
char 1 97
char 1 116
char 1 76
char 1 111
char 1 103
char 1 0
align 1
LABELV $126
char 1 103
char 1 95
char 1 108
char 1 111
char 1 103
char 1 83
char 1 121
char 1 110
char 1 99
char 1 0
align 1
LABELV $125
char 1 103
char 1 97
char 1 109
char 1 101
char 1 115
char 1 46
char 1 108
char 1 111
char 1 103
char 1 0
align 1
LABELV $124
char 1 103
char 1 95
char 1 108
char 1 111
char 1 103
char 1 0
align 1
LABELV $123
char 1 103
char 1 95
char 1 100
char 1 111
char 1 87
char 1 97
char 1 114
char 1 109
char 1 117
char 1 112
char 1 0
align 1
LABELV $122
char 1 103
char 1 95
char 1 119
char 1 97
char 1 114
char 1 109
char 1 117
char 1 112
char 1 0
align 1
LABELV $121
char 1 103
char 1 95
char 1 116
char 1 101
char 1 97
char 1 109
char 1 70
char 1 111
char 1 114
char 1 99
char 1 101
char 1 66
char 1 97
char 1 108
char 1 97
char 1 110
char 1 99
char 1 101
char 1 0
align 1
LABELV $120
char 1 103
char 1 95
char 1 116
char 1 101
char 1 97
char 1 109
char 1 65
char 1 117
char 1 116
char 1 111
char 1 74
char 1 111
char 1 105
char 1 110
char 1 0
align 1
LABELV $119
char 1 103
char 1 95
char 1 102
char 1 114
char 1 105
char 1 101
char 1 110
char 1 100
char 1 108
char 1 121
char 1 83
char 1 97
char 1 98
char 1 101
char 1 114
char 1 0
align 1
LABELV $118
char 1 103
char 1 95
char 1 102
char 1 114
char 1 105
char 1 101
char 1 110
char 1 100
char 1 108
char 1 121
char 1 70
char 1 105
char 1 114
char 1 101
char 1 0
align 1
LABELV $117
char 1 103
char 1 95
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 73
char 1 110
char 1 116
char 1 101
char 1 114
char 1 112
char 1 111
char 1 108
char 1 97
char 1 116
char 1 101
char 1 0
align 1
LABELV $116
char 1 103
char 1 95
char 1 115
char 1 121
char 1 110
char 1 99
char 1 104
char 1 114
char 1 111
char 1 110
char 1 111
char 1 117
char 1 115
char 1 67
char 1 108
char 1 105
char 1 101
char 1 110
char 1 116
char 1 115
char 1 0
align 1
LABELV $115
char 1 99
char 1 97
char 1 112
char 1 116
char 1 117
char 1 114
char 1 101
char 1 108
char 1 105
char 1 109
char 1 105
char 1 116
char 1 0
align 1
LABELV $114
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 $113
char 1 49
char 1 48
char 1 0
align 1
LABELV $112
char 1 100
char 1 117
char 1 101
char 1 108
char 1 95
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 $111
char 1 50
char 1 48
char 1 0
align 1
LABELV $110
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 $109
char 1 103
char 1 95
char 1 100
char 1 117
char 1 101
char 1 108
char 1 87
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 68
char 1 105
char 1 115
char 1 97
char 1 98
char 1 108
char 1 101
char 1 0
align 1
LABELV $108
char 1 103
char 1 95
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 68
char 1 105
char 1 115
char 1 97
char 1 98
char 1 108
char 1 101
char 1 0
align 1
LABELV $107
char 1 103
char 1 95
char 1 102
char 1 111
char 1 114
char 1 99
char 1 101
char 1 80
char 1 111
char 1 119
char 1 101
char 1 114
char 1 68
char 1 105
char 1 115
char 1 97
char 1 98
char 1 108
char 1 101
char 1 0
align 1
LABELV $106
char 1 51
char 1 48
char 1 48
char 1 48
char 1 0
align 1
LABELV $105
char 1 103
char 1 95
char 1 115
char 1 112
char 1 97
char 1 119
char 1 110
char 1 73
char 1 110
char 1 118
char 1 117
char 1 108
char 1 110
char 1 101
char 1 114
char 1 97
char 1 98
char 1 105
char 1 108
char 1 105
char 1 116
char 1 121
char 1 0
align 1
LABELV $104
char 1 50
char 1 48
char 1 48
char 1 0
align 1
LABELV $103
char 1 103
char 1 95
char 1 102
char 1 111
char 1 114
char 1 99
char 1 101
char 1 82
char 1 101
char 1 103
char 1 101
char 1 110
char 1 84
char 1 105
char 1 109
char 1 101
char 1 0
align 1
LABELV $102
char 1 103
char 1 95
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 76
char 1 111
char 1 99
char 1 107
char 1 105
char 1 110
char 1 103
char 1 0
align 1
LABELV $101
char 1 49
char 1 0
align 1
LABELV $100
char 1 103
char 1 95
char 1 112
char 1 114
char 1 105
char 1 118
char 1 97
char 1 116
char 1 101
char 1 68
char 1 117
char 1 101
char 1 108
char 1 0
align 1
LABELV $99
char 1 103
char 1 95
char 1 102
char 1 111
char 1 114
char 1 99
char 1 101
char 1 66
char 1 97
char 1 115
char 1 101
char 1 100
char 1 84
char 1 101
char 1 97
char 1 109
char 1 115
char 1 0
align 1
LABELV $98
char 1 54
char 1 0
align 1
LABELV $97
char 1 103
char 1 95
char 1 109
char 1 97
char 1 120
char 1 70
char 1 111
char 1 114
char 1 99
char 1 101
char 1 82
char 1 97
char 1 110
char 1 107
char 1 0
align 1
LABELV $96
char 1 100
char 1 109
char 1 102
char 1 108
char 1 97
char 1 103
char 1 115
char 1 0
align 1
LABELV $95
char 1 103
char 1 95
char 1 97
char 1 117
char 1 116
char 1 111
char 1 77
char 1 97
char 1 112
char 1 67
char 1 121
char 1 99
char 1 108
char 1 101
char 1 0
align 1
LABELV $94
char 1 103
char 1 95
char 1 102
char 1 102
char 1 95
char 1 111
char 1 98
char 1 106
char 1 101
char 1 99
char 1 116
char 1 105
char 1 118
char 1 101
char 1 115
char 1 0
align 1
LABELV $93
char 1 103
char 1 95
char 1 109
char 1 97
char 1 120
char 1 71
char 1 97
char 1 109
char 1 101
char 1 67
char 1 108
char 1 105
char 1 101
char 1 110
char 1 116
char 1 115
char 1 0
align 1
LABELV $92
char 1 56
char 1 0
align 1
LABELV $91
char 1 115
char 1 118
char 1 95
char 1 109
char 1 97
char 1 120
char 1 99
char 1 108
char 1 105
char 1 101
char 1 110
char 1 116
char 1 115
char 1 0
align 1
LABELV $90
char 1 51
char 1 0
align 1
LABELV $89
char 1 103
char 1 95
char 1 77
char 1 97
char 1 120
char 1 72
char 1 111
char 1 108
char 1 111
char 1 99
char 1 114
char 1 111
char 1 110
char 1 67
char 1 97
char 1 114
char 1 114
char 1 121
char 1 0
align 1
LABELV $88
char 1 103
char 1 95
char 1 103
char 1 97
char 1 109
char 1 101
char 1 116
char 1 121
char 1 112
char 1 101
char 1 0
align 1
LABELV $87
char 1 115
char 1 118
char 1 95
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 $86
char 1 48
char 1 0
align 1
LABELV $85
char 1 103
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 101
char 1 100
char 1 0
align 1
LABELV $84
char 1 77
char 1 97
char 1 114
char 1 32
char 1 48
char 1 49
char 1 32
char 1 50
char 1 48
char 1 48
char 1 50
char 1 0
align 1
LABELV $83
char 1 103
char 1 97
char 1 109
char 1 101
char 1 100
char 1 97
char 1 116
char 1 101
char 1 0
align 1
LABELV $82
char 1 98
char 1 97
char 1 115
char 1 101
char 1 106
char 1 107
char 1 0
align 1
LABELV $81
char 1 103
char 1 97
char 1 109
char 1 101
char 1 110
char 1 97
char 1 109
char 1 101
char 1 0
align 1
LABELV $80
char 1 0
align 1
LABELV $79
char 1 115
char 1 118
char 1 95
char 1 99
char 1 104
char 1 101
char 1 97
char 1 116
char 1 115
char 1 0
