data align 4 LABELV playerMins byte 4 3245342720 byte 4 3245342720 byte 4 3250585600 align 4 LABELV playerMaxs byte 4 1097859072 byte 4 1097859072 byte 4 1109393408 export SP_info_player_deathmatch code proc SP_info_player_deathmatch 8 12 file "../g_client.c" line 20 ;1:// Copyright (C) 1999-2000 Id Software, Inc. ;2:// ;3:#include "g_local.h" ;4:#include "..\ghoul2\g2.h" ;5: ;6:// g_client.c -- client functions that don't happen every frame ;7: ;8:static vec3_t playerMins = {-15, -15, DEFAULT_MINS_2}; ;9:static vec3_t playerMaxs = {15, 15, DEFAULT_MAXS_2}; ;10: ;11:forcedata_t Client_Force[MAX_CLIENTS]; ;12: ;13:/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) initial ;14:potential spawning position for deathmatch games. ;15:The first time a player enters the game, they will be at an 'initial' spot. ;16:Targets will be fired when someone spawns in on them. ;17:"nobots" will prevent bots from using this spot. ;18:"nohumans" will prevent non-bots from using this spot. ;19:*/ ;20:void SP_info_player_deathmatch( gentity_t *ent ) { line 23 ;21: int i; ;22: ;23: G_SpawnInt( "nobots", "0", &i); ADDRGP4 $79 ARGP4 ADDRGP4 $80 ARGP4 ADDRLP4 0 ARGP4 ADDRGP4 G_SpawnInt CALLI4 pop line 24 ;24: if ( i ) { ADDRLP4 0 INDIRI4 CNSTI4 0 EQI4 $81 line 25 ;25: ent->flags |= FL_NO_BOTS; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 472 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 8192 BORI4 ASGNI4 line 26 ;26: } LABELV $81 line 27 ;27: G_SpawnInt( "nohumans", "0", &i ); ADDRGP4 $83 ARGP4 ADDRGP4 $80 ARGP4 ADDRLP4 0 ARGP4 ADDRGP4 G_SpawnInt CALLI4 pop line 28 ;28: if ( i ) { ADDRLP4 0 INDIRI4 CNSTI4 0 EQI4 $84 line 29 ;29: ent->flags |= FL_NO_HUMANS; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 472 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 16384 BORI4 ASGNI4 line 30 ;30: } LABELV $84 line 31 ;31:} LABELV $78 endproc SP_info_player_deathmatch 8 12 export SP_info_player_start proc SP_info_player_start 0 4 line 36 ;32: ;33:/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32) ;34:equivelant to info_player_deathmatch ;35:*/ ;36:void SP_info_player_start(gentity_t *ent) { line 37 ;37: ent->classname = "info_player_deathmatch"; ADDRFP4 0 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $87 ASGNP4 line 38 ;38: SP_info_player_deathmatch( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 SP_info_player_deathmatch CALLV pop line 39 ;39:} LABELV $86 endproc SP_info_player_start 0 4 export SP_info_player_imperial proc SP_info_player_imperial 0 4 line 44 ;40: ;41:/*QUAKED info_player_imperial (1 0 0) (-16 -16 -24) (16 16 32) ;42:saga start point - imperial ;43:*/ ;44:void SP_info_player_imperial(gentity_t *ent) { line 45 ;45: if (g_gametype.integer != GT_SAGA) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 6 EQI4 $89 line 46 ;46: { //turn into a DM spawn if not in saga game mode line 47 ;47: ent->classname = "info_player_deathmatch"; ADDRFP4 0 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $87 ASGNP4 line 48 ;48: SP_info_player_deathmatch( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 SP_info_player_deathmatch CALLV pop line 49 ;49: } LABELV $89 line 50 ;50:} LABELV $88 endproc SP_info_player_imperial 0 4 export SP_info_player_rebel proc SP_info_player_rebel 0 4 line 55 ;51: ;52:/*QUAKED info_player_rebel (1 0 0) (-16 -16 -24) (16 16 32) ;53:saga start point - rebel ;54:*/ ;55:void SP_info_player_rebel(gentity_t *ent) { line 56 ;56: if (g_gametype.integer != GT_SAGA) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 6 EQI4 $93 line 57 ;57: { //turn into a DM spawn if not in saga game mode line 58 ;58: ent->classname = "info_player_deathmatch"; ADDRFP4 0 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $87 ASGNP4 line 59 ;59: SP_info_player_deathmatch( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 SP_info_player_deathmatch CALLV pop line 60 ;60: } LABELV $93 line 61 ;61:} LABELV $92 endproc SP_info_player_rebel 0 4 export SP_info_player_intermission proc SP_info_player_intermission 0 0 line 66 ;62: ;63:/*QUAKED info_player_intermission (1 0 1) (-16 -16 -24) (16 16 32) ;64:The intermission will be viewed from this point. Target an info_notnull for the view direction. ;65:*/ ;66:void SP_info_player_intermission( gentity_t *ent ) { line 68 ;67: ;68:} LABELV $96 endproc SP_info_player_intermission 0 0 export ThrowSaberToAttacker proc ThrowSaberToAttacker 68 8 line 73 ;69: ;70:#define JMSABER_RESPAWN_TIME 20000 //in case it gets stuck somewhere no one can reach ;71: ;72:void ThrowSaberToAttacker(gentity_t *self, gentity_t *attacker) ;73:{ line 74 ;74: gentity_t *ent = &g_entities[self->client->ps.saberIndex]; ADDRLP4 0 CNSTI4 828 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 608 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 76 ;75: vec3_t a; ;76: int altVelocity = 0; ADDRLP4 16 CNSTI4 0 ASGNI4 line 78 ;77: ;78: if (!ent || ent->enemy != self) ADDRLP4 0 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $100 ADDRLP4 0 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 EQU4 $98 LABELV $100 line 79 ;79: { //something has gone very wrong (this should never happen) line 84 ;80: //but in case it does.. find the saber manually ;81:#ifdef _DEBUG ;82: Com_Printf("Lost the saber! Attempting to use global pointer..\n"); ;83:#endif ;84: ent = gJMSaberEnt; ADDRLP4 0 ADDRGP4 gJMSaberEnt INDIRP4 ASGNP4 line 86 ;85: ;86: if (!ent) ADDRLP4 0 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $101 line 87 ;87: { line 91 ;88:#ifdef _DEBUG ;89: Com_Printf("The global pointer was NULL. This is a bad thing.\n"); ;90:#endif ;91: return; ADDRGP4 $97 JUMPV LABELV $101 line 98 ;92: } ;93: ;94:#ifdef _DEBUG ;95: Com_Printf("Got it (%i). Setting enemy to client %i.\n", ent->s.number, self->s.number); ;96:#endif ;97: ;98: ent->enemy = self; ADDRLP4 0 INDIRP4 CNSTI4 728 ADDP4 ADDRFP4 0 INDIRP4 ASGNP4 line 99 ;99: self->client->ps.saberIndex = ent->s.number; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 608 ADDP4 ADDRLP4 0 INDIRP4 INDIRI4 ASGNI4 line 100 ;100: } LABELV $98 line 102 ;101: ;102: trap_SetConfigstring ( CS_CLIENT_JEDIMASTER, "-1" ); CNSTI4 28 ARGI4 ADDRGP4 $103 ARGP4 ADDRGP4 trap_SetConfigstring CALLV pop line 104 ;103: ;104: if (attacker && attacker->client && self->client->ps.saberInFlight) ADDRLP4 24 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 28 CNSTU4 0 ASGNU4 ADDRLP4 24 INDIRP4 CVPU4 4 ADDRLP4 28 INDIRU4 EQU4 $104 ADDRLP4 32 CNSTI4 408 ASGNI4 ADDRLP4 24 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 28 INDIRU4 EQU4 $104 ADDRFP4 0 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRP4 CNSTI4 504 ADDP4 INDIRI4 CNSTI4 0 EQI4 $104 line 105 ;105: { //someone killed us and we had the saber thrown, so actually move this saber to the saber location line 108 ;106: //if we killed ourselves with saber thrown, however, same suicide rules of respawning at spawn spot still ;107: //apply. ;108: gentity_t *flyingsaber = &g_entities[self->client->ps.saberEntityNum]; ADDRLP4 36 CNSTI4 828 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 544 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 110 ;109: ;110: if (flyingsaber && flyingsaber->inuse) ADDRLP4 36 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $106 ADDRLP4 36 INDIRP4 CNSTI4 412 ADDP4 INDIRI4 CNSTI4 0 EQI4 $106 line 111 ;111: { line 112 ;112: VectorCopy(flyingsaber->s.pos.trBase, ent->s.pos.trBase); ADDRLP4 44 CNSTI4 24 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRB ASGNB 12 line 113 ;113: VectorCopy(flyingsaber->s.pos.trDelta, ent->s.pos.trDelta); ADDRLP4 48 CNSTI4 36 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRB ASGNB 12 line 114 ;114: VectorCopy(flyingsaber->s.apos.trBase, ent->s.apos.trBase); ADDRLP4 52 CNSTI4 60 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 52 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 52 INDIRI4 ADDP4 INDIRB ASGNB 12 line 115 ;115: VectorCopy(flyingsaber->s.apos.trDelta, ent->s.apos.trDelta); ADDRLP4 56 CNSTI4 72 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 56 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 56 INDIRI4 ADDP4 INDIRB ASGNB 12 line 117 ;116: ;117: VectorCopy(flyingsaber->r.currentOrigin, ent->r.currentOrigin); ADDRLP4 60 CNSTI4 368 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 60 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 60 INDIRI4 ADDP4 INDIRB ASGNB 12 line 118 ;118: VectorCopy(flyingsaber->r.currentAngles, ent->r.currentAngles); ADDRLP4 64 CNSTI4 380 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 64 INDIRI4 ADDP4 ADDRLP4 36 INDIRP4 ADDRLP4 64 INDIRI4 ADDP4 INDIRB ASGNB 12 line 119 ;119: altVelocity = 1; ADDRLP4 16 CNSTI4 1 ASGNI4 line 120 ;120: } LABELV $106 line 121 ;121: } LABELV $104 line 123 ;122: ;123: self->client->ps.saberInFlight = qtrue; //say he threw it anyway in order to properly remove from dead body ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 504 ADDP4 CNSTI4 1 ASGNI4 line 125 ;124: ;125: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); ADDRGP4 $108 ARGP4 ADDRLP4 36 ADDRGP4 G_ModelIndex CALLI4 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 212 ADDP4 ADDRLP4 36 INDIRI4 ASGNI4 line 126 ;126: ent->s.eFlags &= ~(EF_NODRAW); ADDRLP4 40 ADDRLP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 40 INDIRP4 ADDRLP4 40 INDIRP4 INDIRI4 CNSTI4 -129 BANDI4 ASGNI4 line 127 ;127: ent->s.modelGhoul2 = 1; ADDRLP4 0 INDIRP4 CNSTI4 204 ADDP4 CNSTI4 1 ASGNI4 line 128 ;128: ent->s.eType = ET_MISSILE; ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 3 ASGNI4 line 129 ;129: ent->enemy = NULL; ADDRLP4 0 INDIRP4 CNSTI4 728 ADDP4 CNSTP4 0 ASGNP4 line 131 ;130: ;131: if (!attacker || !attacker->client) ADDRLP4 44 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 48 CNSTU4 0 ASGNU4 ADDRLP4 44 INDIRP4 CVPU4 4 ADDRLP4 48 INDIRU4 EQU4 $111 ADDRLP4 44 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 48 INDIRU4 NEU4 $109 LABELV $111 line 132 ;132: { line 133 ;133: VectorCopy(ent->s.origin2, ent->s.pos.trBase); ADDRLP4 0 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 134 ;134: VectorCopy(ent->s.origin2, ent->s.origin); ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 135 ;135: VectorCopy(ent->s.origin2, ent->r.currentOrigin); ADDRLP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 136 ;136: ent->pos2[0] = 0; ADDRLP4 0 INDIRP4 CNSTI4 560 ADDP4 CNSTF4 0 ASGNF4 line 137 ;137: trap_LinkEntity(ent); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 138 ;138: return; ADDRGP4 $97 JUMPV LABELV $109 line 141 ;139: } ;140: ;141: if (!altVelocity) ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $112 line 142 ;142: { line 143 ;143: VectorCopy(self->s.pos.trBase, ent->s.pos.trBase); ADDRLP4 52 CNSTI4 24 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 52 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 52 INDIRI4 ADDP4 INDIRB ASGNB 12 line 144 ;144: VectorCopy(self->s.pos.trBase, ent->s.origin); ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 145 ;145: VectorCopy(self->s.pos.trBase, ent->r.currentOrigin); ADDRLP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 147 ;146: ;147: VectorSubtract(attacker->client->ps.origin, ent->s.pos.trBase, a); ADDRLP4 56 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 ASGNP4 ADDRLP4 64 CNSTI4 24 ASGNI4 ADDRLP4 4 ADDRLP4 56 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRLP4 0 INDIRP4 ADDRLP4 64 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 4+4 ADDRLP4 56 INDIRP4 INDIRP4 ADDRLP4 64 INDIRI4 ADDP4 INDIRF4 ADDRLP4 0 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 4+8 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRLP4 0 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 SUBF4 ASGNF4 line 149 ;148: ;149: VectorNormalize(a); ADDRLP4 4 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 151 ;150: ;151: ent->s.pos.trDelta[0] = a[0]*256; ADDRLP4 0 INDIRP4 CNSTI4 36 ADDP4 CNSTF4 1132462080 ADDRLP4 4 INDIRF4 MULF4 ASGNF4 line 152 ;152: ent->s.pos.trDelta[1] = a[1]*256; ADDRLP4 0 INDIRP4 CNSTI4 40 ADDP4 CNSTF4 1132462080 ADDRLP4 4+4 INDIRF4 MULF4 ASGNF4 line 153 ;153: ent->s.pos.trDelta[2] = 256; ADDRLP4 0 INDIRP4 CNSTI4 44 ADDP4 CNSTF4 1132462080 ASGNF4 line 154 ;154: } LABELV $112 line 156 ;155: ;156: trap_LinkEntity(ent); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 157 ;157:} LABELV $97 endproc ThrowSaberToAttacker 68 8 export JMSaberThink proc JMSaberThink 28 4 line 160 ;158: ;159:void JMSaberThink(gentity_t *ent) ;160:{ line 161 ;161: gJMSaberEnt = ent; ADDRGP4 gJMSaberEnt ADDRFP4 0 INDIRP4 ASGNP4 line 163 ;162: ;163: if (ent->enemy) ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $118 line 164 ;164: { line 165 ;165: if (!ent->enemy->client || !ent->enemy->inuse) ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 ASGNP4 ADDRLP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $122 ADDRLP4 0 INDIRP4 CNSTI4 412 ADDP4 INDIRI4 CNSTI4 0 NEI4 $120 LABELV $122 line 166 ;166: { //disconnected? line 167 ;167: VectorCopy(ent->enemy->s.pos.trBase, ent->s.pos.trBase); ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 8 CNSTI4 24 ASGNI4 ADDRLP4 4 INDIRP4 ADDRLP4 8 INDIRI4 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 ADDRLP4 8 INDIRI4 ADDP4 INDIRB ASGNB 12 line 168 ;168: VectorCopy(ent->enemy->s.pos.trBase, ent->s.origin); ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 12 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 169 ;169: VectorCopy(ent->enemy->s.pos.trBase, ent->r.currentOrigin); ADDRLP4 16 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 16 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 16 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 170 ;170: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); ADDRGP4 $108 ARGP4 ADDRLP4 20 ADDRGP4 G_ModelIndex CALLI4 ASGNI4 ADDRFP4 0 INDIRP4 CNSTI4 212 ADDP4 ADDRLP4 20 INDIRI4 ASGNI4 line 171 ;171: ent->s.eFlags &= ~(EF_NODRAW); ADDRLP4 24 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 CNSTI4 -129 BANDI4 ASGNI4 line 172 ;172: ent->s.modelGhoul2 = 1; ADDRFP4 0 INDIRP4 CNSTI4 204 ADDP4 CNSTI4 1 ASGNI4 line 173 ;173: ent->s.eType = ET_MISSILE; ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 3 ASGNI4 line 174 ;174: ent->enemy = NULL; ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 CNSTP4 0 ASGNP4 line 176 ;175: ;176: ent->pos2[0] = 1; ADDRFP4 0 INDIRP4 CNSTI4 560 ADDP4 CNSTF4 1065353216 ASGNF4 line 177 ;177: ent->pos2[1] = 0; //respawn next think ADDRFP4 0 INDIRP4 CNSTI4 564 ADDP4 CNSTF4 0 ASGNF4 line 178 ;178: trap_LinkEntity(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 179 ;179: } ADDRGP4 $119 JUMPV LABELV $120 line 181 ;180: else ;181: { line 182 ;182: ent->pos2[1] = level.time + JMSABER_RESPAWN_TIME; ADDRFP4 0 INDIRP4 CNSTI4 564 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 20000 ADDI4 CVIF4 4 ASGNF4 line 183 ;183: } line 184 ;184: } ADDRGP4 $119 JUMPV LABELV $118 line 185 ;185: else if (ent->pos2[0] && ent->pos2[1] < level.time) ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 0 INDIRP4 CNSTI4 560 ADDP4 INDIRF4 CNSTF4 0 EQF4 $124 ADDRLP4 0 INDIRP4 CNSTI4 564 ADDP4 INDIRF4 ADDRGP4 level+32 INDIRI4 CVIF4 4 GEF4 $124 line 186 ;186: { line 187 ;187: VectorCopy(ent->s.origin2, ent->s.pos.trBase); ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 188 ;188: VectorCopy(ent->s.origin2, ent->s.origin); ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 8 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 8 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 189 ;189: VectorCopy(ent->s.origin2, ent->r.currentOrigin); ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 12 INDIRP4 CNSTI4 104 ADDP4 INDIRB ASGNB 12 line 190 ;190: ent->pos2[0] = 0; ADDRFP4 0 INDIRP4 CNSTI4 560 ADDP4 CNSTF4 0 ASGNF4 line 191 ;191: trap_LinkEntity(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 192 ;192: } LABELV $124 LABELV $119 line 194 ;193: ;194: ent->nextthink = level.time + 50; ADDRFP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 50 ADDI4 ASGNI4 line 195 ;195: G_RunObject(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_RunObject CALLV pop line 196 ;196:} LABELV $117 endproc JMSaberThink 28 4 export JMSaberTouch proc JMSaberTouch 36 12 line 199 ;197: ;198:void JMSaberTouch(gentity_t *self, gentity_t *other, trace_t *trace) ;199:{ line 200 ;200: int i = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 203 ;201:// gentity_t *te; ;202: ;203: if (!other || !other->client || other->health < 1) ADDRLP4 4 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 8 CNSTU4 0 ASGNU4 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRU4 EQU4 $132 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRU4 EQU4 $132 ADDRLP4 4 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 CNSTI4 1 GEI4 $129 LABELV $132 line 204 ;204: { line 205 ;205: return; ADDRGP4 $128 JUMPV LABELV $129 line 208 ;206: } ;207: ;208: if (self->enemy) ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $133 line 209 ;209: { line 210 ;210: return; ADDRGP4 $128 JUMPV LABELV $133 line 213 ;211: } ;212: ;213: if (!self->s.modelindex) ADDRFP4 0 INDIRP4 CNSTI4 212 ADDP4 INDIRI4 CNSTI4 0 NEI4 $135 line 214 ;214: { line 215 ;215: return; ADDRGP4 $128 JUMPV LABELV $135 line 218 ;216: } ;217: ;218: if (other->client->ps.stats[STAT_WEAPONS] & (1 << WP_SABER)) ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 232 ADDP4 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $137 line 219 ;219: { line 220 ;220: return; ADDRGP4 $128 JUMPV LABELV $137 line 223 ;221: } ;222: ;223: if (other->client->ps.isJediMaster) ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 604 ADDP4 INDIRI4 CNSTI4 0 EQI4 $139 line 224 ;224: { line 225 ;225: return; ADDRGP4 $128 JUMPV LABELV $139 line 228 ;226: } ;227: ;228: self->enemy = other; ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 ADDRFP4 4 INDIRP4 ASGNP4 line 229 ;229: other->client->ps.stats[STAT_WEAPONS] = (1 << WP_SABER); ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 232 ADDP4 CNSTI4 4 ASGNI4 line 230 ;230: other->client->ps.weapon = WP_SABER; ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 2 ASGNI4 line 231 ;231: other->s.weapon = WP_SABER; ADDRFP4 4 INDIRP4 CNSTI4 276 ADDP4 CNSTI4 2 ASGNI4 line 232 ;232: G_AddEvent(other, EV_BECOME_JEDIMASTER, 0); ADDRFP4 4 INDIRP4 ARGP4 CNSTI4 30 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 235 ;233: ;234: // Track the jedi master ;235: trap_SetConfigstring ( CS_CLIENT_JEDIMASTER, va("%i", other->s.number ) ); ADDRGP4 $141 ARGP4 ADDRFP4 4 INDIRP4 INDIRI4 ARGI4 ADDRLP4 12 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 28 ARGI4 ADDRLP4 12 INDIRP4 ARGP4 ADDRGP4 trap_SetConfigstring CALLV pop line 237 ;236: ;237: if (g_spawnInvulnerability.integer) ADDRGP4 g_spawnInvulnerability+12 INDIRI4 CNSTI4 0 EQI4 $142 line 238 ;238: { line 239 ;239: other->client->ps.eFlags |= EF_INVULNERABLE; ADDRLP4 16 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 16 INDIRP4 INDIRI4 CNSTI4 67108864 BORI4 ASGNI4 line 240 ;240: other->client->invulnerableTimer = level.time + g_spawnInvulnerability.integer; ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 ADDRGP4 level+32 INDIRI4 ADDRGP4 g_spawnInvulnerability+12 INDIRI4 ADDI4 ASGNI4 line 241 ;241: } LABELV $142 line 243 ;242: ;243: trap_SendServerCommand( -1, va("cp \"%s %s\n\"", other->client->pers.netname, G_GetStripEdString("SVINGAME", "BECOMEJM")) ); ADDRGP4 $148 ARGP4 ADDRGP4 $149 ARGP4 ADDRLP4 16 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $147 ARGP4 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 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 245 ;244: ;245: other->client->ps.isJediMaster = qtrue; ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 604 ADDP4 CNSTI4 1 ASGNI4 line 246 ;246: other->client->ps.saberIndex = self->s.number; ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 608 ADDP4 ADDRFP4 0 INDIRP4 INDIRI4 ASGNI4 line 248 ;247: ;248: if (other->health < 200 && other->health > 0) ADDRLP4 24 ADDRFP4 4 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ASGNI4 ADDRLP4 24 INDIRI4 CNSTI4 200 GEI4 $150 ADDRLP4 24 INDIRI4 CNSTI4 0 LEI4 $150 line 249 ;249: { //full health when you become the Jedi Master line 250 ;250: other->client->ps.stats[STAT_HEALTH] = other->health = 200; ADDRLP4 28 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 32 CNSTI4 200 ASGNI4 ADDRLP4 28 INDIRP4 CNSTI4 676 ADDP4 ADDRLP4 32 INDIRI4 ASGNI4 ADDRLP4 28 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 ADDRLP4 32 INDIRI4 ASGNI4 line 251 ;251: } LABELV $150 line 253 ;252: ;253: if (other->client->ps.fd.forcePower < 100) ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 920 ADDP4 INDIRI4 CNSTI4 100 GEI4 $155 line 254 ;254: { line 255 ;255: other->client->ps.fd.forcePower = 100; ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 920 ADDP4 CNSTI4 100 ASGNI4 line 256 ;256: } ADDRGP4 $155 JUMPV LABELV $154 line 259 ;257: ;258: while (i < NUM_FORCE_POWERS) ;259: { line 260 ;260: other->client->ps.fd.forcePowersKnown |= (1 << i); ADDRLP4 28 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 832 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 ADDRLP4 28 INDIRP4 INDIRI4 CNSTI4 1 ADDRLP4 0 INDIRI4 LSHI4 BORI4 ASGNI4 line 261 ;261: other->client->ps.fd.forcePowerLevel[i] = FORCE_LEVEL_3; ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 932 ADDP4 ADDP4 CNSTI4 3 ASGNI4 line 263 ;262: ;263: i++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 264 ;264: } LABELV $155 line 258 ADDRLP4 0 INDIRI4 CNSTI4 18 LTI4 $154 line 266 ;265: ;266: self->pos2[0] = 1; ADDRFP4 0 INDIRP4 CNSTI4 560 ADDP4 CNSTF4 1065353216 ASGNF4 line 267 ;267: self->pos2[1] = level.time + JMSABER_RESPAWN_TIME; ADDRFP4 0 INDIRP4 CNSTI4 564 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 20000 ADDI4 CVIF4 4 ASGNF4 line 269 ;268: ;269: self->s.modelindex = 0; ADDRFP4 0 INDIRP4 CNSTI4 212 ADDP4 CNSTI4 0 ASGNI4 line 270 ;270: self->s.eFlags |= EF_NODRAW; ADDRLP4 28 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 ADDRLP4 28 INDIRP4 INDIRI4 CNSTI4 128 BORI4 ASGNI4 line 271 ;271: self->s.modelGhoul2 = 0; ADDRFP4 0 INDIRP4 CNSTI4 204 ADDP4 CNSTI4 0 ASGNI4 line 272 ;272: self->s.eType = ET_GENERAL; ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 0 ASGNI4 line 279 ;273: ;274: /* ;275: te = G_TempEntity( vec3_origin, EV_DESTROY_GHOUL2_INSTANCE ); ;276: te->r.svFlags |= SVF_BROADCAST; ;277: te->s.eventParm = self->s.number; ;278: */ ;279: G_KillG2Queue(self->s.number); ADDRFP4 0 INDIRP4 INDIRI4 ARGI4 ADDRGP4 G_KillG2Queue CALLV pop line 281 ;280: ;281: return; LABELV $128 endproc JMSaberTouch 36 12 data export gJMSaberEnt align 4 LABELV gJMSaberEnt byte 4 0 export SP_info_jedimaster_start code proc SP_info_jedimaster_start 8 4 line 290 ;282:} ;283: ;284:gentity_t *gJMSaberEnt = NULL; ;285: ;286:/*QUAKED info_jedimaster_start (1 0 0) (-16 -16 -24) (16 16 32) ;287:"jedi master" saber spawn point ;288:*/ ;289:void SP_info_jedimaster_start(gentity_t *ent) ;290:{ line 291 ;291: if (g_gametype.integer != GT_JEDIMASTER) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 2 EQI4 $159 line 292 ;292: { line 293 ;293: gJMSaberEnt = NULL; ADDRGP4 gJMSaberEnt CNSTP4 0 ASGNP4 line 294 ;294: G_FreeEntity(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_FreeEntity CALLV pop line 295 ;295: return; ADDRGP4 $158 JUMPV LABELV $159 line 298 ;296: } ;297: ;298: ent->enemy = NULL; ADDRFP4 0 INDIRP4 CNSTI4 728 ADDP4 CNSTP4 0 ASGNP4 line 300 ;299: ;300: ent->s.eFlags = EF_BOUNCE_HALF; ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 CNSTI4 32 ASGNI4 line 302 ;301: ;302: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); ADDRGP4 $108 ARGP4 ADDRLP4 0 ADDRGP4 G_ModelIndex CALLI4 ASGNI4 ADDRFP4 0 INDIRP4 CNSTI4 212 ADDP4 ADDRLP4 0 INDIRI4 ASGNI4 line 303 ;303: ent->s.modelGhoul2 = 1; ADDRFP4 0 INDIRP4 CNSTI4 204 ADDP4 CNSTI4 1 ASGNI4 line 304 ;304: ent->s.g2radius = 20; ADDRFP4 0 INDIRP4 CNSTI4 208 ADDP4 CNSTI4 20 ASGNI4 line 306 ;305: //ent->s.eType = ET_GENERAL; ;306: ent->s.eType = ET_MISSILE; ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 3 ASGNI4 line 307 ;307: ent->s.weapon = WP_SABER; ADDRFP4 0 INDIRP4 CNSTI4 276 ADDP4 CNSTI4 2 ASGNI4 line 308 ;308: ent->s.pos.trType = TR_GRAVITY; ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 CNSTI4 5 ASGNI4 line 309 ;309: ent->s.pos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 310 ;310: VectorSet( ent->r.maxs, 3, 3, 3 ); ADDRFP4 0 INDIRP4 CNSTI4 328 ADDP4 CNSTF4 1077936128 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 332 ADDP4 CNSTF4 1077936128 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 336 ADDP4 CNSTF4 1077936128 ASGNF4 line 311 ;311: VectorSet( ent->r.mins, -3, -3, -3 ); ADDRFP4 0 INDIRP4 CNSTI4 316 ADDP4 CNSTF4 3225419776 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 320 ADDP4 CNSTF4 3225419776 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 324 ADDP4 CNSTF4 3225419776 ASGNF4 line 312 ;312: ent->r.contents = CONTENTS_TRIGGER; ADDRFP4 0 INDIRP4 CNSTI4 340 ADDP4 CNSTI4 1024 ASGNI4 line 313 ;313: ent->clipmask = MASK_SOLID; ADDRFP4 0 INDIRP4 CNSTI4 508 ADDP4 CNSTI4 1 ASGNI4 line 315 ;314: ;315: ent->isSaberEntity = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 812 ADDP4 CNSTI4 1 ASGNI4 line 317 ;316: ;317: ent->bounceCount = -5; ADDRFP4 0 INDIRP4 CNSTI4 716 ADDP4 CNSTI4 -5 ASGNI4 line 319 ;318: ;319: ent->physicsObject = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 500 ADDP4 CNSTI4 1 ASGNI4 line 321 ;320: ;321: VectorCopy(ent->s.pos.trBase, ent->s.origin2); //remember the spawn spot ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 104 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 323 ;322: ;323: ent->touch = JMSaberTouch; ADDRFP4 0 INDIRP4 CNSTI4 648 ADDP4 ADDRGP4 JMSaberTouch ASGNP4 line 325 ;324: ;325: trap_LinkEntity(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 327 ;326: ;327: ent->think = JMSaberThink; ADDRFP4 0 INDIRP4 CNSTI4 636 ADDP4 ADDRGP4 JMSaberThink ASGNP4 line 328 ;328: ent->nextthink = level.time + 50; ADDRFP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 50 ADDI4 ASGNI4 line 329 ;329:} LABELV $158 endproc SP_info_jedimaster_start 8 4 export SpotWouldTelefrag proc SpotWouldTelefrag 4144 16 line 345 ;330: ;331:/* ;332:======================================================================= ;333: ;334: SelectSpawnPoint ;335: ;336:======================================================================= ;337:*/ ;338: ;339:/* ;340:================ ;341:SpotWouldTelefrag ;342: ;343:================ ;344:*/ ;345:qboolean SpotWouldTelefrag( gentity_t *spot ) { line 351 ;346: int i, num; ;347: int touch[MAX_GENTITIES]; ;348: gentity_t *hit; ;349: vec3_t mins, maxs; ;350: ;351: VectorAdd( spot->s.origin, playerMins, mins ); ADDRLP4 4132 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4108 ADDRLP4 4132 INDIRP4 CNSTI4 92 ADDP4 INDIRF4 ADDRGP4 playerMins INDIRF4 ADDF4 ASGNF4 ADDRLP4 4108+4 ADDRLP4 4132 INDIRP4 CNSTI4 96 ADDP4 INDIRF4 ADDRGP4 playerMins+4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 4108+8 ADDRFP4 0 INDIRP4 CNSTI4 100 ADDP4 INDIRF4 ADDRGP4 playerMins+8 INDIRF4 ADDF4 ASGNF4 line 352 ;352: VectorAdd( spot->s.origin, playerMaxs, maxs ); ADDRLP4 4136 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4120 ADDRLP4 4136 INDIRP4 CNSTI4 92 ADDP4 INDIRF4 ADDRGP4 playerMaxs INDIRF4 ADDF4 ASGNF4 ADDRLP4 4120+4 ADDRLP4 4136 INDIRP4 CNSTI4 96 ADDP4 INDIRF4 ADDRGP4 playerMaxs+4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 4120+8 ADDRFP4 0 INDIRP4 CNSTI4 100 ADDP4 INDIRF4 ADDRGP4 playerMaxs+8 INDIRF4 ADDF4 ASGNF4 line 353 ;353: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); ADDRLP4 4108 ARGP4 ADDRLP4 4120 ARGP4 ADDRLP4 12 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 4140 ADDRGP4 trap_EntitiesInBox CALLI4 ASGNI4 ADDRLP4 8 ADDRLP4 4140 INDIRI4 ASGNI4 line 355 ;354: ;355: for (i=0 ; iclient && hit->client->ps.stats[STAT_HEALTH] > 0 ) { ;358: if ( hit->client) { ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $177 line 359 ;359: return qtrue; CNSTI4 1 RETI4 ADDRGP4 $164 JUMPV LABELV $177 line 362 ;360: } ;361: ;362: } LABELV $174 line 355 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $176 ADDRLP4 0 INDIRI4 ADDRLP4 8 INDIRI4 LTI4 $173 line 364 ;363: ;364: return qfalse; CNSTI4 0 RETI4 LABELV $164 endproc SpotWouldTelefrag 4144 16 export SelectNearestDeathmatchSpawnPoint proc SelectNearestDeathmatchSpawnPoint 40 12 line 375 ;365:} ;366: ;367:/* ;368:================ ;369:SelectNearestDeathmatchSpawnPoint ;370: ;371:Find the spot that we DON'T want to use ;372:================ ;373:*/ ;374:#define MAX_SPAWN_POINTS 128 ;375:gentity_t *SelectNearestDeathmatchSpawnPoint( vec3_t from ) { line 381 ;376: gentity_t *spot; ;377: vec3_t delta; ;378: float dist, nearestDist; ;379: gentity_t *nearestSpot; ;380: ;381: nearestDist = 999999; ADDRLP4 20 CNSTF4 1232348144 ASGNF4 line 382 ;382: nearestSpot = NULL; ADDRLP4 24 CNSTP4 0 ASGNP4 line 383 ;383: spot = NULL; ADDRLP4 0 CNSTP4 0 ASGNP4 ADDRGP4 $181 JUMPV LABELV $180 line 385 ;384: ;385: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { line 387 ;386: ;387: VectorSubtract( spot->s.origin, from, delta ); ADDRLP4 32 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 INDIRF4 ADDRLP4 32 INDIRP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 4+4 ADDRLP4 0 INDIRP4 CNSTI4 96 ADDP4 INDIRF4 ADDRLP4 32 INDIRP4 CNSTI4 4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 4+8 ADDRLP4 0 INDIRP4 CNSTI4 100 ADDP4 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 SUBF4 ASGNF4 line 388 ;388: dist = VectorLength( delta ); ADDRLP4 4 ARGP4 ADDRLP4 36 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 16 ADDRLP4 36 INDIRF4 ASGNF4 line 389 ;389: if ( dist < nearestDist ) { ADDRLP4 16 INDIRF4 ADDRLP4 20 INDIRF4 GEF4 $185 line 390 ;390: nearestDist = dist; ADDRLP4 20 ADDRLP4 16 INDIRF4 ASGNF4 line 391 ;391: nearestSpot = spot; ADDRLP4 24 ADDRLP4 0 INDIRP4 ASGNP4 line 392 ;392: } LABELV $185 line 393 ;393: } LABELV $181 line 385 ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 28 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 28 INDIRP4 ASGNP4 ADDRLP4 28 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $180 line 395 ;394: ;395: return nearestSpot; ADDRLP4 24 INDIRP4 RETP4 LABELV $179 endproc SelectNearestDeathmatchSpawnPoint 40 12 export SelectRandomDeathmatchSpawnPoint proc SelectRandomDeathmatchSpawnPoint 532 12 line 407 ;396:} ;397: ;398: ;399:/* ;400:================ ;401:SelectRandomDeathmatchSpawnPoint ;402: ;403:go to a random point that doesn't telefrag ;404:================ ;405:*/ ;406:#define MAX_SPAWN_POINTS 128 ;407:gentity_t *SelectRandomDeathmatchSpawnPoint( void ) { line 413 ;408: gentity_t *spot; ;409: int count; ;410: int selection; ;411: gentity_t *spots[MAX_SPAWN_POINTS]; ;412: ;413: count = 0; ADDRLP4 4 CNSTI4 0 ASGNI4 line 414 ;414: spot = NULL; ADDRLP4 0 CNSTP4 0 ASGNP4 ADDRGP4 $189 JUMPV LABELV $188 line 416 ;415: ;416: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { line 417 ;417: if ( SpotWouldTelefrag( spot ) ) { ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 524 ADDRGP4 SpotWouldTelefrag CALLI4 ASGNI4 ADDRLP4 524 INDIRI4 CNSTI4 0 EQI4 $191 line 418 ;418: continue; ADDRGP4 $189 JUMPV LABELV $191 line 420 ;419: } ;420: spots[ count ] = spot; ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 8 ADDP4 ADDRLP4 0 INDIRP4 ASGNP4 line 421 ;421: count++; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 422 ;422: } LABELV $189 line 416 ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 524 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 524 INDIRP4 ASGNP4 ADDRLP4 524 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $188 line 424 ;423: ;424: if ( !count ) { // no spots that won't telefrag ADDRLP4 4 INDIRI4 CNSTI4 0 NEI4 $193 line 425 ;425: return G_Find( NULL, FOFS(classname), "info_player_deathmatch"); CNSTP4 0 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 528 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 528 INDIRP4 RETP4 ADDRGP4 $187 JUMPV LABELV $193 line 428 ;426: } ;427: ;428: selection = rand() % count; ADDRLP4 528 ADDRGP4 rand CALLI4 ASGNI4 ADDRLP4 520 ADDRLP4 528 INDIRI4 ADDRLP4 4 INDIRI4 MODI4 ASGNI4 line 429 ;429: return spots[ selection ]; ADDRLP4 520 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 8 ADDP4 INDIRP4 RETP4 LABELV $187 endproc SelectRandomDeathmatchSpawnPoint 532 12 export SelectRandomFurthestSpawnPoint proc SelectRandomFurthestSpawnPoint 572 12 line 439 ;430:} ;431: ;432:/* ;433:=========== ;434:SelectRandomFurthestSpawnPoint ;435: ;436:Chooses a player start, deathmatch start, etc ;437:============ ;438:*/ ;439:gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { line 447 ;440: gentity_t *spot; ;441: vec3_t delta; ;442: float dist; ;443: float list_dist[64]; ;444: gentity_t *list_spot[64]; ;445: int numSpots, rnd, i, j; ;446: ;447: numSpots = 0; ADDRLP4 520 CNSTI4 0 ASGNI4 line 448 ;448: spot = NULL; ADDRLP4 528 CNSTP4 0 ASGNP4 ADDRGP4 $197 JUMPV LABELV $196 line 450 ;449: ;450: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { line 451 ;451: if ( SpotWouldTelefrag( spot ) ) { ADDRLP4 528 INDIRP4 ARGP4 ADDRLP4 548 ADDRGP4 SpotWouldTelefrag CALLI4 ASGNI4 ADDRLP4 548 INDIRI4 CNSTI4 0 EQI4 $199 line 452 ;452: continue; ADDRGP4 $197 JUMPV LABELV $199 line 454 ;453: } ;454: VectorSubtract( spot->s.origin, avoidPoint, delta ); ADDRLP4 556 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 532 ADDRLP4 528 INDIRP4 CNSTI4 92 ADDP4 INDIRF4 ADDRLP4 556 INDIRP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 532+4 ADDRLP4 528 INDIRP4 CNSTI4 96 ADDP4 INDIRF4 ADDRLP4 556 INDIRP4 CNSTI4 4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 532+8 ADDRLP4 528 INDIRP4 CNSTI4 100 ADDP4 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 SUBF4 ASGNF4 line 455 ;455: dist = VectorLength( delta ); ADDRLP4 532 ARGP4 ADDRLP4 560 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 524 ADDRLP4 560 INDIRF4 ASGNF4 line 456 ;456: for (i = 0; i < numSpots; i++) { ADDRLP4 516 CNSTI4 0 ASGNI4 ADDRGP4 $206 JUMPV LABELV $203 line 457 ;457: if ( dist > list_dist[i] ) { ADDRLP4 524 INDIRF4 ADDRLP4 516 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 4 ADDP4 INDIRF4 LEF4 $207 line 458 ;458: if ( numSpots >= 64 ) ADDRLP4 520 INDIRI4 CNSTI4 64 LTI4 $209 line 459 ;459: numSpots = 64-1; ADDRLP4 520 CNSTI4 63 ASGNI4 LABELV $209 line 460 ;460: for (j = numSpots; j > i; j--) { ADDRLP4 0 ADDRLP4 520 INDIRI4 ASGNI4 ADDRGP4 $214 JUMPV LABELV $211 line 461 ;461: list_dist[j] = list_dist[j-1]; ADDRLP4 564 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 564 INDIRI4 ADDRLP4 4 ADDP4 ADDRLP4 564 INDIRI4 ADDRLP4 4-4 ADDP4 INDIRF4 ASGNF4 line 462 ;462: list_spot[j] = list_spot[j-1]; ADDRLP4 568 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 568 INDIRI4 ADDRLP4 260 ADDP4 ADDRLP4 568 INDIRI4 ADDRLP4 260-4 ADDP4 INDIRP4 ASGNP4 line 463 ;463: } LABELV $212 line 460 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 LABELV $214 ADDRLP4 0 INDIRI4 ADDRLP4 516 INDIRI4 GTI4 $211 line 464 ;464: list_dist[i] = dist; ADDRLP4 516 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 4 ADDP4 ADDRLP4 524 INDIRF4 ASGNF4 line 465 ;465: list_spot[i] = spot; ADDRLP4 516 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 260 ADDP4 ADDRLP4 528 INDIRP4 ASGNP4 line 466 ;466: numSpots++; ADDRLP4 520 ADDRLP4 520 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 467 ;467: if (numSpots > 64) ADDRLP4 520 INDIRI4 CNSTI4 64 LEI4 $205 line 468 ;468: numSpots = 64; ADDRLP4 520 CNSTI4 64 ASGNI4 line 469 ;469: break; ADDRGP4 $205 JUMPV LABELV $207 line 471 ;470: } ;471: } LABELV $204 line 456 ADDRLP4 516 ADDRLP4 516 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $206 ADDRLP4 516 INDIRI4 ADDRLP4 520 INDIRI4 LTI4 $203 LABELV $205 line 472 ;472: if (i >= numSpots && numSpots < 64) { ADDRLP4 516 INDIRI4 ADDRLP4 520 INDIRI4 LTI4 $219 ADDRLP4 520 INDIRI4 CNSTI4 64 GEI4 $219 line 473 ;473: list_dist[numSpots] = dist; ADDRLP4 520 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 4 ADDP4 ADDRLP4 524 INDIRF4 ASGNF4 line 474 ;474: list_spot[numSpots] = spot; ADDRLP4 520 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 260 ADDP4 ADDRLP4 528 INDIRP4 ASGNP4 line 475 ;475: numSpots++; ADDRLP4 520 ADDRLP4 520 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 476 ;476: } LABELV $219 line 477 ;477: } LABELV $197 line 450 ADDRLP4 528 INDIRP4 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 548 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 528 ADDRLP4 548 INDIRP4 ASGNP4 ADDRLP4 548 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $196 line 478 ;478: if (!numSpots) { ADDRLP4 520 INDIRI4 CNSTI4 0 NEI4 $221 line 479 ;479: spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch"); CNSTP4 0 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 552 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 528 ADDRLP4 552 INDIRP4 ASGNP4 line 480 ;480: if (!spot) ADDRLP4 528 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $223 line 481 ;481: G_Error( "Couldn't find a spawn point" ); ADDRGP4 $225 ARGP4 ADDRGP4 G_Error CALLV pop LABELV $223 line 482 ;482: VectorCopy (spot->s.origin, origin); ADDRFP4 4 INDIRP4 ADDRLP4 528 INDIRP4 CNSTI4 92 ADDP4 INDIRB ASGNB 12 line 483 ;483: origin[2] += 9; ADDRLP4 556 ADDRFP4 4 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 556 INDIRP4 ADDRLP4 556 INDIRP4 INDIRF4 CNSTF4 1091567616 ADDF4 ASGNF4 line 484 ;484: VectorCopy (spot->s.angles, angles); ADDRFP4 8 INDIRP4 ADDRLP4 528 INDIRP4 CNSTI4 116 ADDP4 INDIRB ASGNB 12 line 485 ;485: return spot; ADDRLP4 528 INDIRP4 RETP4 ADDRGP4 $195 JUMPV LABELV $221 line 489 ;486: } ;487: ;488: // select a random spot from the spawn points furthest away ;489: rnd = random() * (numSpots / 2); ADDRLP4 552 ADDRGP4 rand CALLI4 ASGNI4 ADDRLP4 544 ADDRLP4 552 INDIRI4 CNSTI4 32767 BANDI4 CVIF4 4 CNSTF4 1191181824 DIVF4 ADDRLP4 520 INDIRI4 CNSTI4 2 DIVI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 line 491 ;490: ;491: VectorCopy (list_spot[rnd]->s.origin, origin); ADDRFP4 4 INDIRP4 ADDRLP4 544 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 260 ADDP4 INDIRP4 CNSTI4 92 ADDP4 INDIRB ASGNB 12 line 492 ;492: origin[2] += 9; ADDRLP4 556 ADDRFP4 4 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 556 INDIRP4 ADDRLP4 556 INDIRP4 INDIRF4 CNSTF4 1091567616 ADDF4 ASGNF4 line 493 ;493: VectorCopy (list_spot[rnd]->s.angles, angles); ADDRFP4 8 INDIRP4 ADDRLP4 544 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 260 ADDP4 INDIRP4 CNSTI4 116 ADDP4 INDIRB ASGNB 12 line 495 ;494: ;495: return list_spot[rnd]; ADDRLP4 544 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 260 ADDP4 INDIRP4 RETP4 LABELV $195 endproc SelectRandomFurthestSpawnPoint 572 12 export SelectSpawnPoint proc SelectSpawnPoint 4 12 line 505 ;496:} ;497: ;498:/* ;499:=========== ;500:SelectSpawnPoint ;501: ;502:Chooses a player start, deathmatch start, etc ;503:============ ;504:*/ ;505:gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { line 506 ;506: return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles ); ADDRFP4 0 INDIRP4 ARGP4 ADDRFP4 4 INDIRP4 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRLP4 0 ADDRGP4 SelectRandomFurthestSpawnPoint CALLP4 ASGNP4 ADDRLP4 0 INDIRP4 RETP4 LABELV $226 endproc SelectSpawnPoint 4 12 export SelectInitialSpawnPoint proc SelectInitialSpawnPoint 20 12 line 545 ;507: ;508: /* ;509: gentity_t *spot; ;510: gentity_t *nearestSpot; ;511: ;512: nearestSpot = SelectNearestDeathmatchSpawnPoint( avoidPoint ); ;513: ;514: spot = SelectRandomDeathmatchSpawnPoint ( ); ;515: if ( spot == nearestSpot ) { ;516: // roll again if it would be real close to point of death ;517: spot = SelectRandomDeathmatchSpawnPoint ( ); ;518: if ( spot == nearestSpot ) { ;519: // last try ;520: spot = SelectRandomDeathmatchSpawnPoint ( ); ;521: } ;522: } ;523: ;524: // find a single player start spot ;525: if (!spot) { ;526: G_Error( "Couldn't find a spawn point" ); ;527: } ;528: ;529: VectorCopy (spot->s.origin, origin); ;530: origin[2] += 9; ;531: VectorCopy (spot->s.angles, angles); ;532: ;533: return spot; ;534: */ ;535:} ;536: ;537:/* ;538:=========== ;539:SelectInitialSpawnPoint ;540: ;541:Try to find a spawn point marked 'initial', otherwise ;542:use normal spawn selection. ;543:============ ;544:*/ ;545:gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) { line 548 ;546: gentity_t *spot; ;547: ;548: spot = NULL; ADDRLP4 0 CNSTP4 0 ASGNP4 ADDRGP4 $229 JUMPV LABELV $228 line 549 ;549: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { line 550 ;550: if ( spot->spawnflags & 1 ) { ADDRLP4 0 INDIRP4 CNSTI4 420 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $231 line 551 ;551: break; ADDRGP4 $230 JUMPV LABELV $231 line 553 ;552: } ;553: } LABELV $229 line 549 ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 416 ARGI4 ADDRGP4 $87 ARGP4 ADDRLP4 4 ADDRGP4 G_Find CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $228 LABELV $230 line 555 ;554: ;555: if ( !spot || SpotWouldTelefrag( spot ) ) { ADDRLP4 0 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $235 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 12 ADDRGP4 SpotWouldTelefrag CALLI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 EQI4 $233 LABELV $235 line 556 ;556: return SelectSpawnPoint( vec3_origin, origin, angles ); ADDRGP4 vec3_origin ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRFP4 4 INDIRP4 ARGP4 ADDRLP4 16 ADDRGP4 SelectSpawnPoint CALLP4 ASGNP4 ADDRLP4 16 INDIRP4 RETP4 ADDRGP4 $227 JUMPV LABELV $233 line 559 ;557: } ;558: ;559: VectorCopy (spot->s.origin, origin); ADDRFP4 0 INDIRP4 ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 INDIRB ASGNB 12 line 560 ;560: origin[2] += 9; ADDRLP4 16 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 16 INDIRP4 INDIRF4 CNSTF4 1091567616 ADDF4 ASGNF4 line 561 ;561: VectorCopy (spot->s.angles, angles); ADDRFP4 4 INDIRP4 ADDRLP4 0 INDIRP4 CNSTI4 116 ADDP4 INDIRB ASGNB 12 line 563 ;562: ;563: return spot; ADDRLP4 0 INDIRP4 RETP4 LABELV $227 endproc SelectInitialSpawnPoint 20 12 export SelectSpectatorSpawnPoint proc SelectSpectatorSpawnPoint 0 0 line 572 ;564:} ;565: ;566:/* ;567:=========== ;568:SelectSpectatorSpawnPoint ;569: ;570:============ ;571:*/ ;572:gentity_t *SelectSpectatorSpawnPoint( vec3_t origin, vec3_t angles ) { line 573 ;573: FindIntermissionPoint(); ADDRGP4 FindIntermissionPoint CALLV pop line 575 ;574: ;575: VectorCopy( level.intermission_origin, origin ); ADDRFP4 0 INDIRP4 ADDRGP4 level+9024 INDIRB ASGNB 12 line 576 ;576: VectorCopy( level.intermission_angle, angles ); ADDRFP4 4 INDIRP4 ADDRGP4 level+9036 INDIRB ASGNB 12 line 578 ;577: ;578: return NULL; CNSTP4 0 RETP4 LABELV $236 endproc SelectSpectatorSpawnPoint 0 0 export InitBodyQue proc InitBodyQue 12 0 line 604 ;579:} ;580: ;581:/* ;582:======================================================================= ;583: ;584:BODYQUE ;585: ;586:======================================================================= ;587:*/ ;588: ;589:/* ;590:======================================================================= ;591: ;592:BODYQUE ;593: ;594:======================================================================= ;595:*/ ;596: ;597:#define BODY_SINK_TIME 45000 ;598: ;599:/* ;600:=============== ;601:InitBodyQue ;602:=============== ;603:*/ ;604:void InitBodyQue (void) { line 608 ;605: int i; ;606: gentity_t *ent; ;607: ;608: level.bodyQueIndex = 0; ADDRGP4 level+9056 CNSTI4 0 ASGNI4 line 609 ;609: for (i=0; iclassname = "bodyque"; ADDRLP4 0 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $245 ASGNP4 line 612 ;612: ent->neverFree = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 468 ADDP4 CNSTI4 1 ASGNI4 line 613 ;613: level.bodyQue[i] = ent; ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 level+9060 ADDP4 ADDRLP4 0 INDIRP4 ASGNP4 line 614 ;614: } LABELV $242 line 609 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 4 INDIRI4 CNSTI4 8 LTI4 $241 line 615 ;615:} LABELV $239 endproc InitBodyQue 12 0 export BodySink proc BodySink 4 4 line 624 ;616: ;617:/* ;618:============= ;619:BodySink ;620: ;621:After sitting around for five seconds, fall into the ground and dissapear ;622:============= ;623:*/ ;624:void BodySink( gentity_t *ent ) { line 625 ;625: if ( level.time - ent->timestamp > BODY_SINK_TIME + 1500 ) { ADDRGP4 level+32 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 576 ADDP4 INDIRI4 SUBI4 CNSTI4 46500 LEI4 $248 line 627 ;626: // the body ques are never actually freed, they are just unlinked ;627: trap_UnlinkEntity( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 628 ;628: ent->physicsObject = qfalse; ADDRFP4 0 INDIRP4 CNSTI4 500 ADDP4 CNSTI4 0 ASGNI4 line 629 ;629: return; ADDRGP4 $247 JUMPV LABELV $248 line 631 ;630: } ;631: ent->nextthink = level.time + 100; ADDRFP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 632 ;632: ent->s.pos.trBase[2] -= 1; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRF4 CNSTF4 1065353216 SUBF4 ASGNF4 line 633 ;633:} LABELV $247 endproc BodySink 4 4 export CopyToBodyQue proc CopyToBodyQue 64 12 line 643 ;634: ;635:/* ;636:============= ;637:CopyToBodyQue ;638: ;639:A player is respawning, so make an entity that looks ;640:just like the existing corpse to leave behind. ;641:============= ;642:*/ ;643:void CopyToBodyQue( gentity_t *ent ) { line 647 ;644: gentity_t *body; ;645: int contents; ;646: ;647: if (level.intermissiontime) ADDRGP4 level+9008 INDIRI4 CNSTI4 0 EQI4 $253 line 648 ;648: { line 649 ;649: return; ADDRGP4 $252 JUMPV LABELV $253 line 652 ;650: } ;651: ;652: trap_UnlinkEntity (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 655 ;653: ;654: // if client is in a nodrop area, don't leave the body ;655: contents = trap_PointContents( ent->s.origin, -1 ); ADDRFP4 0 INDIRP4 CNSTI4 92 ADDP4 ARGP4 CNSTI4 -1 ARGI4 ADDRLP4 8 ADDRGP4 trap_PointContents CALLI4 ASGNI4 ADDRLP4 4 ADDRLP4 8 INDIRI4 ASGNI4 line 656 ;656: if ( contents & CONTENTS_NODROP ) { ADDRLP4 4 INDIRI4 CNSTI4 2048 BANDI4 CNSTI4 0 EQI4 $256 line 657 ;657: return; ADDRGP4 $252 JUMPV LABELV $256 line 660 ;658: } ;659: ;660: if (ent->client && (ent->client->ps.eFlags & EF_DISINTEGRATION)) ADDRLP4 12 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $258 ADDRLP4 12 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 33554432 BANDI4 CNSTI4 0 EQI4 $258 line 661 ;661: { //for now, just don't spawn a body if you got disint'd line 662 ;662: return; ADDRGP4 $252 JUMPV LABELV $258 line 666 ;663: } ;664: ;665: // grab a body que and cycle to the next one ;666: body = level.bodyQue[ level.bodyQueIndex ]; ADDRLP4 0 ADDRGP4 level+9056 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 level+9060 ADDP4 INDIRP4 ASGNP4 line 667 ;667: level.bodyQueIndex = (level.bodyQueIndex + 1) % BODY_QUEUE_SIZE; ADDRGP4 level+9056 ADDRGP4 level+9056 INDIRI4 CNSTI4 1 ADDI4 CNSTI4 8 MODI4 ASGNI4 line 669 ;668: ;669: trap_UnlinkEntity (body); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 670 ;670: body->s = ent->s; ADDRLP4 0 INDIRP4 ADDRFP4 0 INDIRP4 INDIRB ASGNB 296 line 673 ;671: ;672: //avoid oddly angled corpses floating around ;673: body->s.angles[PITCH] = body->s.angles[ROLL] = body->s.apos.trBase[PITCH] = body->s.apos.trBase[ROLL] = 0; ADDRLP4 20 CNSTF4 0 ASGNF4 ADDRLP4 0 INDIRP4 CNSTI4 68 ADDP4 ADDRLP4 20 INDIRF4 ASGNF4 ADDRLP4 0 INDIRP4 CNSTI4 60 ADDP4 ADDRLP4 20 INDIRF4 ASGNF4 ADDRLP4 0 INDIRP4 CNSTI4 124 ADDP4 ADDRLP4 20 INDIRF4 ASGNF4 ADDRLP4 0 INDIRP4 CNSTI4 116 ADDP4 ADDRLP4 20 INDIRF4 ASGNF4 line 675 ;674: ;675: body->s.g2radius = 100; ADDRLP4 0 INDIRP4 CNSTI4 208 ADDP4 CNSTI4 100 ASGNI4 line 677 ;676: ;677: body->s.eType = ET_BODY; ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 15 ASGNI4 line 678 ;678: body->s.eFlags = EF_DEAD; // clear EF_TALK, etc ADDRLP4 0 INDIRP4 CNSTI4 8 ADDP4 CNSTI4 1 ASGNI4 line 680 ;679: ;680: if (ent->client && (ent->client->ps.eFlags & EF_DISINTEGRATION)) ADDRLP4 24 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 24 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $264 ADDRLP4 24 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 33554432 BANDI4 CNSTI4 0 EQI4 $264 line 681 ;681: { line 682 ;682: body->s.eFlags |= EF_DISINTEGRATION; ADDRLP4 28 ADDRLP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 ADDRLP4 28 INDIRP4 INDIRI4 CNSTI4 33554432 BORI4 ASGNI4 line 683 ;683: } LABELV $264 line 685 ;684: ;685: VectorCopy(ent->client->ps.lastHitLoc, body->s.origin2); ADDRLP4 0 INDIRP4 CNSTI4 104 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1356 ADDP4 INDIRB ASGNB 12 line 687 ;686: ;687: body->s.powerups = 0; // clear powerups ADDRLP4 0 INDIRP4 CNSTI4 272 ADDP4 CNSTI4 0 ASGNI4 line 688 ;688: body->s.loopSound = 0; // clear lava burning ADDRLP4 0 INDIRP4 CNSTI4 200 ADDP4 CNSTI4 0 ASGNI4 line 689 ;689: body->s.number = body - g_entities; ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 CVPU4 4 ADDRGP4 g_entities CVPU4 4 SUBU4 CVUI4 4 CNSTI4 828 DIVI4 ASGNI4 line 690 ;690: body->timestamp = level.time; ADDRLP4 0 INDIRP4 CNSTI4 576 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 691 ;691: body->physicsObject = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 500 ADDP4 CNSTI4 1 ASGNI4 line 692 ;692: body->physicsBounce = 0; // don't bounce ADDRLP4 0 INDIRP4 CNSTI4 504 ADDP4 CNSTF4 0 ASGNF4 line 693 ;693: if ( body->s.groundEntityNum == ENTITYNUM_NONE ) { ADDRLP4 0 INDIRP4 CNSTI4 192 ADDP4 INDIRI4 CNSTI4 1023 NEI4 $267 line 694 ;694: body->s.pos.trType = TR_GRAVITY; ADDRLP4 0 INDIRP4 CNSTI4 12 ADDP4 CNSTI4 5 ASGNI4 line 695 ;695: body->s.pos.trTime = level.time; ADDRLP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 696 ;696: VectorCopy( ent->client->ps.velocity, body->s.pos.trDelta ); ADDRLP4 0 INDIRP4 CNSTI4 36 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 32 ADDP4 INDIRB ASGNB 12 line 697 ;697: } else { ADDRGP4 $268 JUMPV LABELV $267 line 698 ;698: body->s.pos.trType = TR_STATIONARY; ADDRLP4 0 INDIRP4 CNSTI4 12 ADDP4 CNSTI4 0 ASGNI4 line 699 ;699: } LABELV $268 line 700 ;700: body->s.event = 0; ADDRLP4 0 INDIRP4 CNSTI4 252 ADDP4 CNSTI4 0 ASGNI4 line 702 ;701: ;702: body->s.weapon = ent->s.bolt2; ADDRLP4 0 INDIRP4 CNSTI4 276 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 ASGNI4 line 704 ;703: ;704: if (body->s.weapon == WP_SABER && ent->client->ps.saberInFlight) ADDRLP4 0 INDIRP4 CNSTI4 276 ADDP4 INDIRI4 CNSTI4 2 NEI4 $270 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 504 ADDP4 INDIRI4 CNSTI4 0 EQI4 $270 line 705 ;705: { line 706 ;706: body->s.weapon = WP_BLASTER; //lie to keep from putting a saber on the corpse, because it was thrown at death ADDRLP4 0 INDIRP4 CNSTI4 276 ADDP4 CNSTI4 4 ASGNI4 line 707 ;707: } LABELV $270 line 709 ;708: ;709: G_AddEvent(body, EV_BODY_QUEUE_COPY, ent->s.clientNum); ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 109 ARGI4 ADDRFP4 0 INDIRP4 CNSTI4 220 ADDP4 INDIRI4 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 711 ;710: ;711: body->r.svFlags = ent->r.svFlags | SVF_BROADCAST; ADDRLP4 32 CNSTI4 304 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRI4 CNSTI4 32 BORI4 ASGNI4 line 712 ;712: VectorCopy (ent->r.mins, body->r.mins); ADDRLP4 36 CNSTI4 316 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 36 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 36 INDIRI4 ADDP4 INDIRB ASGNB 12 line 713 ;713: VectorCopy (ent->r.maxs, body->r.maxs); ADDRLP4 40 CNSTI4 328 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 INDIRB ASGNB 12 line 714 ;714: VectorCopy (ent->r.absmin, body->r.absmin); ADDRLP4 44 CNSTI4 344 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRB ASGNB 12 line 715 ;715: VectorCopy (ent->r.absmax, body->r.absmax); ADDRLP4 48 CNSTI4 356 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRB ASGNB 12 line 717 ;716: ;717: body->s.torsoAnim = body->s.legsAnim = ent->client->ps.legsAnim & ~ANIM_TOGGLEBIT; ADDRLP4 56 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 92 ADDP4 INDIRI4 CNSTI4 -2049 BANDI4 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 280 ADDP4 ADDRLP4 56 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 284 ADDP4 ADDRLP4 56 INDIRI4 ASGNI4 line 719 ;718: ;719: body->clipmask = CONTENTS_SOLID | CONTENTS_PLAYERCLIP; ADDRLP4 0 INDIRP4 CNSTI4 508 ADDP4 CNSTI4 17 ASGNI4 line 720 ;720: body->r.contents = CONTENTS_CORPSE; ADDRLP4 0 INDIRP4 CNSTI4 340 ADDP4 CNSTI4 512 ASGNI4 line 721 ;721: body->r.ownerNum = ent->s.number; ADDRLP4 0 INDIRP4 CNSTI4 396 ADDP4 ADDRFP4 0 INDIRP4 INDIRI4 ASGNI4 line 723 ;722: ;723: body->nextthink = level.time + BODY_SINK_TIME; ADDRLP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 45000 ADDI4 ASGNI4 line 724 ;724: body->think = BodySink; ADDRLP4 0 INDIRP4 CNSTI4 636 ADDP4 ADDRGP4 BodySink ASGNP4 line 726 ;725: ;726: body->die = body_die; ADDRLP4 0 INDIRP4 CNSTI4 660 ADDP4 ADDRGP4 body_die ASGNP4 line 729 ;727: ;728: // don't take more damage if already gibbed ;729: if ( ent->health <= GIB_HEALTH ) { ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 CNSTI4 -40 GTI4 $273 line 730 ;730: body->takedamage = qfalse; ADDRLP4 0 INDIRP4 CNSTI4 680 ADDP4 CNSTI4 0 ASGNI4 line 731 ;731: } else { ADDRGP4 $274 JUMPV LABELV $273 line 732 ;732: body->takedamage = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 680 ADDP4 CNSTI4 1 ASGNI4 line 733 ;733: } LABELV $274 line 735 ;734: ;735: VectorCopy ( body->s.pos.trBase, body->r.currentOrigin ); ADDRLP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 736 ;736: trap_LinkEntity (body); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 737 ;737:} LABELV $252 endproc CopyToBodyQue 64 12 export SetClientViewAngle proc SetClientViewAngle 16 0 line 748 ;738: ;739://====================================================================== ;740: ;741: ;742:/* ;743:================== ;744:SetClientViewAngle ;745: ;746:================== ;747:*/ ;748:void SetClientViewAngle( gentity_t *ent, vec3_t angle ) { line 752 ;749: int i; ;750: ;751: // set the delta angle ;752: for (i=0 ; i<3 ; i++) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $276 line 755 ;753: int cmdAngle; ;754: ;755: cmdAngle = ANGLE2SHORT(angle[i]); ADDRLP4 4 CNSTF4 1199570944 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRF4 MULF4 CNSTF4 1135869952 DIVF4 CVFI4 4 CNSTI4 65535 BANDI4 ASGNI4 line 756 ;756: ent->client->ps.delta_angles[i] = cmdAngle - ent->client->pers.cmd.angles[i]; ADDRLP4 8 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 12 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 8 INDIRI4 ADDRLP4 12 INDIRP4 CNSTI4 68 ADDP4 ADDP4 ADDRLP4 4 INDIRI4 ADDRLP4 8 INDIRI4 ADDRLP4 12 INDIRP4 CNSTI4 1376 ADDP4 ADDP4 INDIRI4 SUBI4 ASGNI4 line 757 ;757: } LABELV $277 line 752 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $276 line 758 ;758: VectorCopy( angle, ent->s.angles ); ADDRFP4 0 INDIRP4 CNSTI4 116 ADDP4 ADDRFP4 4 INDIRP4 INDIRB ASGNB 12 line 759 ;759: VectorCopy (ent->s.angles, ent->client->ps.viewangles); ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 156 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 116 ADDP4 INDIRB ASGNB 12 line 760 ;760:} LABELV $275 endproc SetClientViewAngle 16 0 export respawn proc respawn 12 8 line 767 ;761: ;762:/* ;763:================ ;764:respawn ;765:================ ;766:*/ ;767:void respawn( gentity_t *ent ) { line 770 ;768: gentity_t *tent; ;769: ;770: CopyToBodyQue (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 CopyToBodyQue CALLV pop line 772 ;771: ;772: trap_UnlinkEntity (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 773 ;773: ClientSpawn(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ClientSpawn CALLV pop line 776 ;774: ;775: // add a teleportation effect ;776: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_IN ); ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 20 ADDP4 ARGP4 CNSTI4 59 ARGI4 ADDRLP4 4 ADDRGP4 G_TempEntity CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 4 INDIRP4 ASGNP4 line 777 ;777: tent->s.clientNum = ent->s.clientNum; ADDRLP4 8 CNSTI4 220 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 8 INDIRI4 ADDP4 ADDRFP4 0 INDIRP4 ADDRLP4 8 INDIRI4 ADDP4 INDIRI4 ASGNI4 line 778 ;778:} LABELV $280 endproc respawn 12 8 export TeamCount proc TeamCount 8 0 line 787 ;779: ;780:/* ;781:================ ;782:TeamCount ;783: ;784:Returns number of players on a team ;785:================ ;786:*/ ;787:team_t TeamCount( int ignoreClientNum, int team ) { line 789 ;788: int i; ;789: int count = 0; ADDRLP4 4 CNSTI4 0 ASGNI4 line 791 ;790: ;791: for ( i = 0 ; i < level.maxclients ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $285 JUMPV LABELV $282 line 792 ;792: if ( i == ignoreClientNum ) { ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $287 line 793 ;793: continue; ADDRGP4 $283 JUMPV LABELV $287 line 795 ;794: } ;795: if ( level.clients[i].pers.connected == CON_DISCONNECTED ) { CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 0 NEI4 $289 line 796 ;796: continue; ADDRGP4 $283 JUMPV LABELV $289 line 798 ;797: } ;798: if ( level.clients[i].sess.sessionTeam == team ) { CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRFP4 4 INDIRI4 NEI4 $291 line 799 ;799: count++; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 800 ;800: } LABELV $291 line 801 ;801: } LABELV $283 line 791 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $285 ADDRLP4 0 INDIRI4 ADDRGP4 level+24 INDIRI4 LTI4 $282 line 803 ;802: ;803: return count; ADDRLP4 4 INDIRI4 RETI4 LABELV $281 endproc TeamCount 8 0 export TeamLeader proc TeamLeader 4 0 line 813 ;804:} ;805: ;806:/* ;807:================ ;808:TeamLeader ;809: ;810:Returns the client number of the team leader ;811:================ ;812:*/ ;813:int TeamLeader( int team ) { line 816 ;814: int i; ;815: ;816: for ( i = 0 ; i < level.maxclients ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $297 JUMPV LABELV $294 line 817 ;817: if ( level.clients[i].pers.connected == CON_DISCONNECTED ) { CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 0 NEI4 $299 line 818 ;818: continue; ADDRGP4 $295 JUMPV LABELV $299 line 820 ;819: } ;820: if ( level.clients[i].sess.sessionTeam == team ) { CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1520 ADDP4 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $301 line 821 ;821: if ( level.clients[i].sess.teamLeader ) CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1560 ADDP4 INDIRI4 CNSTI4 0 EQI4 $303 line 822 ;822: return i; ADDRLP4 0 INDIRI4 RETI4 ADDRGP4 $293 JUMPV LABELV $303 line 823 ;823: } LABELV $301 line 824 ;824: } LABELV $295 line 816 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $297 ADDRLP4 0 INDIRI4 ADDRGP4 level+24 INDIRI4 LTI4 $294 line 826 ;825: ;826: return -1; CNSTI4 -1 RETI4 LABELV $293 endproc TeamLeader 4 0 export PickTeam proc PickTeam 24 8 line 836 ;827:} ;828: ;829: ;830:/* ;831:================ ;832:PickTeam ;833: ;834:================ ;835:*/ ;836:team_t PickTeam( int ignoreClientNum ) { line 839 ;837: int counts[TEAM_NUM_TEAMS]; ;838: ;839: counts[TEAM_BLUE] = TeamCount( ignoreClientNum, TEAM_BLUE ); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 2 ARGI4 ADDRLP4 16 ADDRGP4 TeamCount CALLI4 ASGNI4 ADDRLP4 0+8 ADDRLP4 16 INDIRI4 ASGNI4 line 840 ;840: counts[TEAM_RED] = TeamCount( ignoreClientNum, TEAM_RED ); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 1 ARGI4 ADDRLP4 20 ADDRGP4 TeamCount CALLI4 ASGNI4 ADDRLP4 0+4 ADDRLP4 20 INDIRI4 ASGNI4 line 842 ;841: ;842: if ( counts[TEAM_BLUE] > counts[TEAM_RED] ) { ADDRLP4 0+8 INDIRI4 ADDRLP4 0+4 INDIRI4 LEI4 $308 line 843 ;843: return TEAM_RED; CNSTI4 1 RETI4 ADDRGP4 $305 JUMPV LABELV $308 line 845 ;844: } ;845: if ( counts[TEAM_RED] > counts[TEAM_BLUE] ) { ADDRLP4 0+4 INDIRI4 ADDRLP4 0+8 INDIRI4 LEI4 $312 line 846 ;846: return TEAM_BLUE; CNSTI4 2 RETI4 ADDRGP4 $305 JUMPV LABELV $312 line 849 ;847: } ;848: // equal team count, so join the team with the lowest score ;849: if ( level.teamScores[TEAM_BLUE] > level.teamScores[TEAM_RED] ) { ADDRGP4 level+44+8 INDIRI4 ADDRGP4 level+44+4 INDIRI4 LEI4 $316 line 850 ;850: return TEAM_RED; CNSTI4 1 RETI4 ADDRGP4 $305 JUMPV LABELV $316 line 852 ;851: } ;852: return TEAM_BLUE; CNSTI4 2 RETI4 LABELV $305 endproc PickTeam 24 8 proc ClientCleanName 40 12 line 880 ;853:} ;854: ;855:/* ;856:=========== ;857:ForceClientSkin ;858: ;859:Forces a client's skin (for teamplay) ;860:=========== ;861:*/ ;862:/* ;863:static void ForceClientSkin( gclient_t *client, char *model, const char *skin ) { ;864: char *p; ;865: ;866: if ((p = Q_strrchr(model, '/')) != 0) { ;867: *p = 0; ;868: } ;869: ;870: Q_strcat(model, MAX_QPATH, "/"); ;871: Q_strcat(model, MAX_QPATH, skin); ;872:} ;873:*/ ;874: ;875:/* ;876:=========== ;877:ClientCheckName ;878:============ ;879:*/ ;880:static void ClientCleanName( const char *in, char *out, int outSize ) { line 887 ;881: int len, colorlessLen; ;882: char ch; ;883: char *p; ;884: int spaces; ;885: ;886: //save room for trailing null byte ;887: outSize--; ADDRFP4 8 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 889 ;888: ;889: len = 0; ADDRLP4 4 CNSTI4 0 ASGNI4 line 890 ;890: colorlessLen = 0; ADDRLP4 16 CNSTI4 0 ASGNI4 line 891 ;891: p = out; ADDRLP4 12 ADDRFP4 4 INDIRP4 ASGNP4 line 892 ;892: *p = 0; ADDRLP4 12 INDIRP4 CNSTI1 0 ASGNI1 line 893 ;893: spaces = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 ADDRGP4 $324 JUMPV LABELV $323 line 895 ;894: ;895: while( 1 ) { line 896 ;896: ch = *in++; ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 0 ADDRLP4 20 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 20 INDIRP4 INDIRI1 ASGNI1 line 897 ;897: if( !ch ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $326 line 898 ;898: break; ADDRGP4 $325 JUMPV LABELV $326 line 902 ;899: } ;900: ;901: // don't allow leading spaces ;902: if( !*p && ch == ' ' ) { ADDRLP4 12 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $328 ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 32 NEI4 $328 line 903 ;903: continue; ADDRGP4 $324 JUMPV LABELV $328 line 907 ;904: } ;905: ;906: // check colors ;907: if( ch == Q_COLOR_ESCAPE ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 94 NEI4 $330 line 909 ;908: // solo trailing carat is not a color prefix ;909: if( !*in ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $332 line 910 ;910: break; ADDRGP4 $325 JUMPV LABELV $332 line 914 ;911: } ;912: ;913: // don't allow black in a name, period ;914: if( ColorIndex(*in) == 0 ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 48 SUBI4 CNSTI4 7 BANDI4 CNSTI4 0 NEI4 $334 line 915 ;915: in++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 916 ;916: continue; ADDRGP4 $324 JUMPV LABELV $334 line 920 ;917: } ;918: ;919: // make sure room in dest for both chars ;920: if( len > outSize - 2 ) { ADDRLP4 4 INDIRI4 ADDRFP4 8 INDIRI4 CNSTI4 2 SUBI4 LEI4 $336 line 921 ;921: break; ADDRGP4 $325 JUMPV LABELV $336 line 924 ;922: } ;923: ;924: *out++ = ch; ADDRLP4 24 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 24 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 0 INDIRI1 ASGNI1 line 925 ;925: *out++ = *in++; ADDRLP4 28 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 36 CNSTI4 1 ASGNI4 ADDRFP4 4 ADDRLP4 28 INDIRP4 ADDRLP4 36 INDIRI4 ADDP4 ASGNP4 ADDRLP4 32 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 0 ADDRLP4 32 INDIRP4 ADDRLP4 36 INDIRI4 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 ADDRLP4 32 INDIRP4 INDIRI1 ASGNI1 line 926 ;926: len += 2; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 2 ADDI4 ASGNI4 line 927 ;927: continue; ADDRGP4 $324 JUMPV LABELV $330 line 931 ;928: } ;929: ;930: // don't allow too many consecutive spaces ;931: if( ch == ' ' ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 32 NEI4 $338 line 932 ;932: spaces++; ADDRLP4 8 ADDRLP4 8 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 933 ;933: if( spaces > 3 ) { ADDRLP4 8 INDIRI4 CNSTI4 3 LEI4 $339 line 934 ;934: continue; ADDRGP4 $324 JUMPV line 936 ;935: } ;936: } LABELV $338 line 937 ;937: else { line 938 ;938: spaces = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 line 939 ;939: } LABELV $339 line 941 ;940: ;941: if( len > outSize - 1 ) { ADDRLP4 4 INDIRI4 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 LEI4 $342 line 942 ;942: break; ADDRGP4 $325 JUMPV LABELV $342 line 945 ;943: } ;944: ;945: *out++ = ch; ADDRLP4 24 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 24 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 0 INDIRI1 ASGNI1 line 946 ;946: colorlessLen++; ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 947 ;947: len++; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 948 ;948: } LABELV $324 line 895 ADDRGP4 $323 JUMPV LABELV $325 line 949 ;949: *out = 0; ADDRFP4 4 INDIRP4 CNSTI1 0 ASGNI1 line 952 ;950: ;951: // don't allow empty names ;952: if( *p == 0 || colorlessLen == 0 ) { ADDRLP4 20 CNSTI4 0 ASGNI4 ADDRLP4 12 INDIRP4 INDIRI1 CVII4 1 ADDRLP4 20 INDIRI4 EQI4 $346 ADDRLP4 16 INDIRI4 ADDRLP4 20 INDIRI4 NEI4 $344 LABELV $346 line 953 ;953: Q_strncpyz( p, "Padawan", outSize ); ADDRLP4 12 INDIRP4 ARGP4 ADDRGP4 $347 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 954 ;954: } LABELV $344 line 955 ;955:} LABELV $322 endproc ClientCleanName 40 12 data export g2SaberInstance align 4 LABELV g2SaberInstance byte 4 0 lit align 4 LABELV $349 byte 4 0 byte 4 0 byte 4 0 export SetupGameGhoul2Model code proc SetupGameGhoul2Model 188 44 line 980 ;956: ;957:#ifdef _DEBUG ;958:void G_DebugWrite(const char *path, const char *text) ;959:{ ;960: fileHandle_t f; ;961: ;962: trap_FS_FOpenFile( path, &f, FS_APPEND ); ;963: trap_FS_Write(text, strlen(text), f); ;964: trap_FS_FCloseFile(f); ;965:} ;966:#endif ;967: ;968:/* ;969:=========== ;970:SetupGameGhoul2Model ;971: ;972:There are two ghoul2 model instances per player (actually three). One is on the clientinfo (the base for the client side ;973:player, and copied for player spawns and for corpses). One is attached to the centity itself, which is the model acutally ;974:animated and rendered by the system. The final is the game ghoul2 model. This is animated by pmove on the server, and ;975:is used for determining where the lightsaber should be, and for per-poly collision tests. ;976:=========== ;977:*/ ;978:void *g2SaberInstance = NULL; ;979:void SetupGameGhoul2Model(gclient_t *client, char *modelname) ;980:{ line 985 ;981: int handle; ;982: char afilename[MAX_QPATH]; ;983: char /**GLAName,*/ *slash; ;984: char GLAName[MAX_QPATH]; ;985: vec3_t tempVec = {0,0,0}; ADDRLP4 64 ADDRGP4 $349 INDIRB ASGNB 12 line 988 ;986: ;987: // First things first. If this is a ghoul2 model, then let's make sure we demolish this first. ;988: if (client->ghoul2 && trap_G2_HaveWeGhoul2Models(client->ghoul2)) ADDRLP4 148 ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ASGNP4 ADDRLP4 148 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $350 ADDRLP4 148 INDIRP4 ARGP4 ADDRLP4 152 ADDRGP4 trap_G2_HaveWeGhoul2Models CALLI4 ASGNI4 ADDRLP4 152 INDIRI4 CNSTI4 0 EQI4 $350 line 989 ;989: { line 990 ;990: trap_G2API_CleanGhoul2Models(&(client->ghoul2)); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 ARGP4 ADDRGP4 trap_G2API_CleanGhoul2Models CALLV pop line 991 ;991: } LABELV $350 line 1009 ;992: ;993: /* ;994: Com_sprintf( afilename, sizeof( afilename ), "models/players/%s/model.glm", modelname ); ;995: handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0); ;996: if (handle<0) ;997: { ;998: Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" ); ;999: handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0); ;1000: ;1001: if (handle<0) ;1002: { ;1003: return; ;1004: } ;1005: } ;1006: */ ;1007: ;1008: //rww - just load the "standard" model for the server" ;1009: if (!precachedKyle) ADDRGP4 precachedKyle INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $352 line 1010 ;1010: { line 1011 ;1011: Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" ); ADDRLP4 0 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 $354 ARGP4 ADDRGP4 Com_sprintf CALLV pop line 1012 ;1012: handle = trap_G2API_InitGhoul2Model(&precachedKyle, afilename, 0, 0, -20, 0, 0); ADDRGP4 precachedKyle ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 156 CNSTI4 0 ASGNI4 ADDRLP4 156 INDIRI4 ARGI4 ADDRLP4 156 INDIRI4 ARGI4 CNSTI4 -20 ARGI4 ADDRLP4 156 INDIRI4 ARGI4 ADDRLP4 156 INDIRI4 ARGI4 ADDRLP4 160 ADDRGP4 trap_G2API_InitGhoul2Model CALLI4 ASGNI4 ADDRLP4 144 ADDRLP4 160 INDIRI4 ASGNI4 line 1014 ;1013: ;1014: if (handle<0) ADDRLP4 144 INDIRI4 CNSTI4 0 GEI4 $355 line 1015 ;1015: { line 1016 ;1016: return; ADDRGP4 $348 JUMPV LABELV $355 line 1018 ;1017: } ;1018: } LABELV $352 line 1020 ;1019: ;1020: if (precachedKyle && trap_G2_HaveWeGhoul2Models(precachedKyle)) ADDRLP4 156 ADDRGP4 precachedKyle INDIRP4 ASGNP4 ADDRLP4 156 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $348 ADDRLP4 156 INDIRP4 ARGP4 ADDRLP4 160 ADDRGP4 trap_G2_HaveWeGhoul2Models CALLI4 ASGNI4 ADDRLP4 160 INDIRI4 CNSTI4 0 EQI4 $348 line 1021 ;1021: { line 1022 ;1022: trap_G2API_DuplicateGhoul2Instance(precachedKyle, &client->ghoul2); ADDRGP4 precachedKyle INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 ARGP4 ADDRGP4 trap_G2API_DuplicateGhoul2Instance CALLV pop line 1023 ;1023: } line 1025 ;1024: else ;1025: { line 1026 ;1026: return; LABELV $358 line 1031 ;1027: } ;1028: ;1029: // The model is now loaded. ;1030: ;1031: GLAName[0] = 0; ADDRLP4 76 CNSTI1 0 ASGNI1 line 1033 ;1032: ;1033: if (!BGPAFtextLoaded) ADDRGP4 BGPAFtextLoaded INDIRI4 CNSTI4 0 NEI4 $359 line 1034 ;1034: { line 1037 ;1035: //get the location of the animation.cfg ;1036: //GLAName = trap_G2API_GetGLAName( client->ghoul2, 0); ;1037: trap_G2API_GetGLAName( client->ghoul2, 0, GLAName); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 76 ARGP4 ADDRGP4 trap_G2API_GetGLAName CALLV pop line 1039 ;1038: ;1039: if (!GLAName[0]) ADDRLP4 76 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $361 line 1040 ;1040: { line 1041 ;1041: if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg")) ADDRGP4 $365 ARGP4 ADDRLP4 164 ADDRGP4 BG_ParseAnimationFile CALLI4 ASGNI4 ADDRLP4 164 INDIRI4 CNSTI4 0 NEI4 $348 line 1042 ;1042: { line 1043 ;1043: Com_Printf( "Failed to load animation file %s\n", afilename ); ADDRGP4 $366 ARGP4 ADDRLP4 0 ARGP4 ADDRGP4 Com_Printf CALLV pop line 1044 ;1044: return; ADDRGP4 $348 JUMPV line 1046 ;1045: } ;1046: return; LABELV $361 line 1048 ;1047: } ;1048: Q_strncpyz( afilename, GLAName, sizeof( afilename )); ADDRLP4 0 ARGP4 ADDRLP4 76 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1049 ;1049: slash = Q_strrchr( afilename, '/' ); ADDRLP4 0 ARGP4 CNSTI4 47 ARGI4 ADDRLP4 164 ADDRGP4 Q_strrchr CALLP4 ASGNP4 ADDRLP4 140 ADDRLP4 164 INDIRP4 ASGNP4 line 1050 ;1050: if ( slash ) ADDRLP4 140 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $348 line 1051 ;1051: { line 1052 ;1052: strcpy(slash, "/animation.cfg"); ADDRLP4 140 INDIRP4 ARGP4 ADDRGP4 $369 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1053 ;1053: } // Now afilename holds just the path to the animation.cfg line 1055 ;1054: else ;1055: { // Didn't find any slashes, this is a raw filename right in base (whish isn't a good thing) line 1056 ;1056: return; LABELV $368 line 1060 ;1057: } ;1058: ;1059: // Try to load the animation.cfg for this model then. ;1060: if ( !BG_ParseAnimationFile( afilename ) ) ADDRLP4 0 ARGP4 ADDRLP4 168 ADDRGP4 BG_ParseAnimationFile CALLI4 ASGNI4 ADDRLP4 168 INDIRI4 CNSTI4 0 NEI4 $370 line 1061 ;1061: { // The GLA's animations failed line 1062 ;1062: if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg")) ADDRGP4 $365 ARGP4 ADDRLP4 172 ADDRGP4 BG_ParseAnimationFile CALLI4 ASGNI4 ADDRLP4 172 INDIRI4 CNSTI4 0 NEI4 $372 line 1063 ;1063: { line 1064 ;1064: Com_Printf( "Failed to load animation file %s\n", afilename ); ADDRGP4 $366 ARGP4 ADDRLP4 0 ARGP4 ADDRGP4 Com_Printf CALLV pop line 1065 ;1065: return; ADDRGP4 $348 JUMPV LABELV $372 line 1067 ;1066: } ;1067: } LABELV $370 line 1068 ;1068: } LABELV $359 line 1070 ;1069: ;1070: trap_G2API_AddBolt(client->ghoul2, 0, "*r_hand"); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $374 ARGP4 ADDRGP4 trap_G2API_AddBolt CALLI4 pop line 1071 ;1071: trap_G2API_AddBolt(client->ghoul2, 0, "*l_hand"); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $375 ARGP4 ADDRGP4 trap_G2API_AddBolt CALLI4 pop line 1074 ;1072: ;1073: // NOTE - ensure this sequence of bolt and bone accessing are always the same because the client expects them in a certain order ;1074: trap_G2API_SetBoneAnim(client->ghoul2, 0, "model_root", 0, 12, BONE_ANIM_OVERRIDE_LOOP, 1.0f, level.time, -1, -1); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 ADDRLP4 164 CNSTI4 0 ASGNI4 ADDRLP4 164 INDIRI4 ARGI4 ADDRGP4 $376 ARGP4 ADDRLP4 164 INDIRI4 ARGI4 CNSTI4 12 ARGI4 CNSTI4 16 ARGI4 CNSTF4 1065353216 ARGF4 ADDRGP4 level+32 INDIRI4 ARGI4 CNSTF4 3212836864 ARGF4 CNSTI4 -1 ARGI4 ADDRGP4 trap_G2API_SetBoneAnim CALLI4 pop line 1075 ;1075: trap_G2API_SetBoneAngles(client->ghoul2, 0, "upper_lumbar", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 ADDRLP4 168 CNSTI4 0 ASGNI4 ADDRLP4 168 INDIRI4 ARGI4 ADDRGP4 $378 ARGP4 ADDRLP4 64 ARGP4 CNSTI4 2 ARGI4 CNSTI4 1 ARGI4 CNSTI4 6 ARGI4 CNSTI4 5 ARGI4 CNSTP4 0 ARGP4 ADDRLP4 168 INDIRI4 ARGI4 ADDRGP4 level+32 INDIRI4 ARGI4 ADDRGP4 trap_G2API_SetBoneAngles CALLI4 pop line 1076 ;1076: trap_G2API_SetBoneAngles(client->ghoul2, 0, "cranium", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, NULL, 0, level.time); ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 ADDRLP4 172 CNSTI4 0 ASGNI4 ADDRLP4 172 INDIRI4 ARGI4 ADDRGP4 $380 ARGP4 ADDRLP4 64 ARGP4 ADDRLP4 176 CNSTI4 2 ASGNI4 ADDRLP4 176 INDIRI4 ARGI4 ADDRLP4 176 INDIRI4 ARGI4 CNSTI4 6 ARGI4 CNSTI4 1 ARGI4 CNSTP4 0 ARGP4 ADDRLP4 172 INDIRI4 ARGI4 ADDRGP4 level+32 INDIRI4 ARGI4 ADDRGP4 trap_G2API_SetBoneAngles CALLI4 pop line 1078 ;1077: ;1078: if (!g2SaberInstance) ADDRGP4 g2SaberInstance INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $382 line 1079 ;1079: { line 1080 ;1080: trap_G2API_InitGhoul2Model(&g2SaberInstance, "models/weapons2/saber/saber_w.glm", 0, 0, -20, 0, 0); ADDRGP4 g2SaberInstance ARGP4 ADDRGP4 $108 ARGP4 ADDRLP4 180 CNSTI4 0 ASGNI4 ADDRLP4 180 INDIRI4 ARGI4 ADDRLP4 180 INDIRI4 ARGI4 CNSTI4 -20 ARGI4 ADDRLP4 180 INDIRI4 ARGI4 ADDRLP4 180 INDIRI4 ARGI4 ADDRGP4 trap_G2API_InitGhoul2Model CALLI4 pop line 1082 ;1081: ;1082: if (g2SaberInstance) ADDRGP4 g2SaberInstance INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $384 line 1083 ;1083: { line 1085 ;1084: // indicate we will be bolted to model 0 (ie the player) on bolt 0 (always the right hand) when we get copied ;1085: trap_G2API_SetBoltInfo(g2SaberInstance, 0, 0); ADDRGP4 g2SaberInstance INDIRP4 ARGP4 ADDRLP4 184 CNSTI4 0 ASGNI4 ADDRLP4 184 INDIRI4 ARGI4 ADDRLP4 184 INDIRI4 ARGI4 ADDRGP4 trap_G2API_SetBoltInfo CALLV pop line 1087 ;1086: // now set up the gun bolt on it ;1087: trap_G2API_AddBolt(g2SaberInstance, 0, "*flash"); ADDRGP4 g2SaberInstance INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $386 ARGP4 ADDRGP4 trap_G2API_AddBolt CALLI4 pop line 1088 ;1088: } LABELV $384 line 1089 ;1089: } LABELV $382 line 1091 ;1090: ;1091: if (g2SaberInstance) ADDRGP4 g2SaberInstance INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $387 line 1092 ;1092: { line 1093 ;1093: trap_G2API_CopySpecificGhoul2Model(g2SaberInstance, 0, client->ghoul2, 1); ADDRGP4 g2SaberInstance INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRFP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 trap_G2API_CopySpecificGhoul2Model CALLV pop line 1094 ;1094: } LABELV $387 line 1095 ;1095:} LABELV $348 endproc SetupGameGhoul2Model 188 44 export ClientUserinfoChanged proc ClientUserinfoChanged 6372 52 line 1111 ;1096: ;1097: ;1098: ;1099: ;1100:/* ;1101:=========== ;1102:ClientUserInfoChanged ;1103: ;1104:Called from ClientConnect when the player first connects and ;1105:directly by the server system when the player updates a userinfo variable. ;1106: ;1107:The game can override any of the settings and call trap_SetUserinfo ;1108:if desired. ;1109:============ ;1110:*/ ;1111:void ClientUserinfoChanged( int clientNum ) { line 1126 ;1112: gentity_t *ent; ;1113: int teamTask, teamLeader, team, health; ;1114: char *s; ;1115: char model[MAX_QPATH]; ;1116: //char headModel[MAX_QPATH]; ;1117: char forcePowers[MAX_QPATH]; ;1118: char oldname[MAX_STRING_CHARS]; ;1119: gclient_t *client; ;1120: char c1[MAX_INFO_STRING]; ;1121: char c2[MAX_INFO_STRING]; ;1122: char redTeam[MAX_INFO_STRING]; ;1123: char blueTeam[MAX_INFO_STRING]; ;1124: char userinfo[MAX_INFO_STRING]; ;1125: ;1126: ent = g_entities + clientNum; ADDRLP4 1032 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1127 ;1127: client = ent->client; ADDRLP4 0 ADDRLP4 1032 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 1129 ;1128: ;1129: trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 4 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 1132 ;1130: ;1131: // check for malformed or illegal info strings ;1132: if ( !Info_Validate(userinfo) ) { ADDRLP4 4 ARGP4 ADDRLP4 6300 ADDRGP4 Info_Validate CALLI4 ASGNI4 ADDRLP4 6300 INDIRI4 CNSTI4 0 NEI4 $390 line 1133 ;1133: strcpy (userinfo, "\\name\\badinfo"); ADDRLP4 4 ARGP4 ADDRGP4 $392 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1134 ;1134: } LABELV $390 line 1137 ;1135: ;1136: // check for local client ;1137: s = Info_ValueForKey( userinfo, "ip" ); ADDRLP4 4 ARGP4 ADDRGP4 $393 ARGP4 ADDRLP4 6304 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6304 INDIRP4 ASGNP4 line 1138 ;1138: if ( !strcmp( s, "localhost" ) ) { ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 $396 ARGP4 ADDRLP4 6308 ADDRGP4 strcmp CALLI4 ASGNI4 ADDRLP4 6308 INDIRI4 CNSTI4 0 NEI4 $394 line 1139 ;1139: client->pers.localClient = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 1400 ADDP4 CNSTI4 1 ASGNI4 line 1140 ;1140: } LABELV $394 line 1143 ;1141: ;1142: // check the item prediction ;1143: s = Info_ValueForKey( userinfo, "cg_predictItems" ); ADDRLP4 4 ARGP4 ADDRGP4 $397 ARGP4 ADDRLP4 6312 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6312 INDIRP4 ASGNP4 line 1144 ;1144: if ( !atoi( s ) ) { ADDRLP4 1028 INDIRP4 ARGP4 ADDRLP4 6316 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 6316 INDIRI4 CNSTI4 0 NEI4 $398 line 1145 ;1145: client->pers.predictItemPickup = qfalse; ADDRLP4 0 INDIRP4 CNSTI4 1408 ADDP4 CNSTI4 0 ASGNI4 line 1146 ;1146: } else { ADDRGP4 $399 JUMPV LABELV $398 line 1147 ;1147: client->pers.predictItemPickup = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 1408 ADDP4 CNSTI4 1 ASGNI4 line 1148 ;1148: } LABELV $399 line 1151 ;1149: ;1150: // set name ;1151: Q_strncpyz ( oldname, client->pers.netname, sizeof( oldname ) ); ADDRLP4 1100 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1152 ;1152: s = Info_ValueForKey (userinfo, "name"); ADDRLP4 4 ARGP4 ADDRGP4 $400 ARGP4 ADDRLP4 6320 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6320 INDIRP4 ASGNP4 line 1153 ;1153: ClientCleanName( s, client->pers.netname, sizeof(client->pers.netname) ); ADDRLP4 1028 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 CNSTI4 36 ARGI4 ADDRGP4 ClientCleanName CALLV pop line 1155 ;1154: ;1155: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $401 line 1156 ;1156: if ( client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { ADDRLP4 0 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 3 NEI4 $403 line 1157 ;1157: Q_strncpyz( client->pers.netname, "scoreboard", sizeof(client->pers.netname) ); ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRGP4 $405 ARGP4 CNSTI4 36 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1158 ;1158: } LABELV $403 line 1159 ;1159: } LABELV $401 line 1161 ;1160: ;1161: if ( client->pers.connected == CON_CONNECTED ) { ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 NEI4 $406 line 1162 ;1162: if ( strcmp( oldname, client->pers.netname ) ) { ADDRLP4 1100 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 6324 ADDRGP4 strcmp CALLI4 ASGNI4 ADDRLP4 6324 INDIRI4 CNSTI4 0 EQI4 $408 line 1163 ;1163: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s %s\n\"", oldname, G_GetStripEdString("SVINGAME", "PLRENAME"), ADDRGP4 $148 ARGP4 ADDRGP4 $411 ARGP4 ADDRLP4 6328 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $410 ARGP4 ADDRLP4 1100 ARGP4 ADDRLP4 6328 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 6332 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 6332 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1165 ;1164: client->pers.netname) ); ;1165: } LABELV $408 line 1166 ;1166: } LABELV $406 line 1169 ;1167: ;1168: // set max health ;1169: health = 100; //atoi( Info_ValueForKey( userinfo, "handicap" ) ); ADDRLP4 2132 CNSTI4 100 ASGNI4 line 1170 ;1170: client->pers.maxHealth = health; ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 ADDRLP4 2132 INDIRI4 ASGNI4 line 1171 ;1171: if ( client->pers.maxHealth < 1 || client->pers.maxHealth > 100 ) { ADDRLP4 6324 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ASGNI4 ADDRLP4 6324 INDIRI4 CNSTI4 1 LTI4 $414 ADDRLP4 6324 INDIRI4 CNSTI4 100 LEI4 $412 LABELV $414 line 1172 ;1172: client->pers.maxHealth = 100; ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 CNSTI4 100 ASGNI4 line 1173 ;1173: } LABELV $412 line 1174 ;1174: client->ps.stats[STAT_MAX_HEALTH] = client->pers.maxHealth; ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ASGNI4 line 1177 ;1175: ;1176: // set model ;1177: if( g_gametype.integer >= GT_TEAM ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $415 line 1178 ;1178: Q_strncpyz( model, Info_ValueForKey (userinfo, "team_model"), sizeof( model ) ); ADDRLP4 4 ARGP4 ADDRGP4 $418 ARGP4 ADDRLP4 6332 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1036 ARGP4 ADDRLP4 6332 INDIRP4 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1180 ;1179: //Q_strncpyz( headModel, Info_ValueForKey (userinfo, "team_headmodel"), sizeof( headModel ) ); ;1180: } else { ADDRGP4 $416 JUMPV LABELV $415 line 1181 ;1181: Q_strncpyz( model, Info_ValueForKey (userinfo, "model"), sizeof( model ) ); ADDRLP4 4 ARGP4 ADDRGP4 $419 ARGP4 ADDRLP4 6332 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1036 ARGP4 ADDRLP4 6332 INDIRP4 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1183 ;1182: //Q_strncpyz( headModel, Info_ValueForKey (userinfo, "headmodel"), sizeof( headModel ) ); ;1183: } LABELV $416 line 1185 ;1184: ;1185: Q_strncpyz( forcePowers, Info_ValueForKey (userinfo, "forcepowers"), sizeof( forcePowers ) ); ADDRLP4 4 ARGP4 ADDRGP4 $420 ARGP4 ADDRLP4 6332 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 2136 ARGP4 ADDRLP4 6332 INDIRP4 ARGP4 CNSTI4 64 ARGI4 ADDRGP4 Q_strncpyz CALLV pop line 1188 ;1186: ;1187: // bots set their team a few frames later ;1188: if (g_gametype.integer >= GT_TEAM && g_entities[clientNum].r.svFlags & SVF_BOT) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $421 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities+296+8 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $421 line 1189 ;1189: s = Info_ValueForKey( userinfo, "team" ); ADDRLP4 4 ARGP4 ADDRGP4 $426 ARGP4 ADDRLP4 6336 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6336 INDIRP4 ASGNP4 line 1190 ;1190: if ( !Q_stricmp( s, "red" ) || !Q_stricmp( s, "r" ) ) { ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 $429 ARGP4 ADDRLP4 6340 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 6340 INDIRI4 CNSTI4 0 EQI4 $431 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 $430 ARGP4 ADDRLP4 6344 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 6344 INDIRI4 CNSTI4 0 NEI4 $427 LABELV $431 line 1191 ;1191: team = TEAM_RED; ADDRLP4 4248 CNSTI4 1 ASGNI4 line 1192 ;1192: } else if ( !Q_stricmp( s, "blue" ) || !Q_stricmp( s, "b" ) ) { ADDRGP4 $422 JUMPV LABELV $427 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 $434 ARGP4 ADDRLP4 6348 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 6348 INDIRI4 CNSTI4 0 EQI4 $436 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 $435 ARGP4 ADDRLP4 6352 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 6352 INDIRI4 CNSTI4 0 NEI4 $432 LABELV $436 line 1193 ;1193: team = TEAM_BLUE; ADDRLP4 4248 CNSTI4 2 ASGNI4 line 1194 ;1194: } else { ADDRGP4 $422 JUMPV LABELV $432 line 1196 ;1195: // pick the team with the least number of players ;1196: team = PickTeam( clientNum ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 6356 ADDRGP4 PickTeam CALLI4 ASGNI4 ADDRLP4 4248 ADDRLP4 6356 INDIRI4 ASGNI4 line 1197 ;1197: } line 1198 ;1198: } ADDRGP4 $422 JUMPV LABELV $421 line 1199 ;1199: else { line 1200 ;1200: team = client->sess.sessionTeam; ADDRLP4 4248 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 1201 ;1201: } LABELV $422 line 1224 ;1202: ;1203:/* NOTE: all client side now ;1204: ;1205: // team ;1206: switch( team ) { ;1207: case TEAM_RED: ;1208: ForceClientSkin(client, model, "red"); ;1209:// ForceClientSkin(client, headModel, "red"); ;1210: break; ;1211: case TEAM_BLUE: ;1212: ForceClientSkin(client, model, "blue"); ;1213:// ForceClientSkin(client, headModel, "blue"); ;1214: break; ;1215: } ;1216: // don't ever use a default skin in teamplay, it would just waste memory ;1217: // however bots will always join a team but they spawn in as spectator ;1218: if ( g_gametype.integer >= GT_TEAM && team == TEAM_SPECTATOR) { ;1219: ForceClientSkin(client, model, "red"); ;1220:// ForceClientSkin(client, headModel, "red"); ;1221: } ;1222:*/ ;1223: ;1224: if (g_gametype.integer >= GT_TEAM) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $437 line 1225 ;1225: client->pers.teamInfo = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 1516 ADDP4 CNSTI4 1 ASGNI4 line 1226 ;1226: } else { ADDRGP4 $438 JUMPV LABELV $437 line 1227 ;1227: s = Info_ValueForKey( userinfo, "teamoverlay" ); ADDRLP4 4 ARGP4 ADDRGP4 $440 ARGP4 ADDRLP4 6336 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6336 INDIRP4 ASGNP4 line 1228 ;1228: if ( ! *s || atoi( s ) != 0 ) { ADDRLP4 1028 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $443 ADDRLP4 1028 INDIRP4 ARGP4 ADDRLP4 6344 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 6344 INDIRI4 CNSTI4 0 EQI4 $441 LABELV $443 line 1229 ;1229: client->pers.teamInfo = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 1516 ADDP4 CNSTI4 1 ASGNI4 line 1230 ;1230: } else { ADDRGP4 $442 JUMPV LABELV $441 line 1231 ;1231: client->pers.teamInfo = qfalse; ADDRLP4 0 INDIRP4 CNSTI4 1516 ADDP4 CNSTI4 0 ASGNI4 line 1232 ;1232: } LABELV $442 line 1233 ;1233: } LABELV $438 line 1245 ;1234: /* ;1235: s = Info_ValueForKey( userinfo, "cg_pmove_fixed" ); ;1236: if ( !*s || atoi( s ) == 0 ) { ;1237: client->pers.pmoveFixed = qfalse; ;1238: } ;1239: else { ;1240: client->pers.pmoveFixed = qtrue; ;1241: } ;1242: */ ;1243: ;1244: // team task (0 = none, 1 = offence, 2 = defence) ;1245: teamTask = atoi(Info_ValueForKey(userinfo, "teamtask")); ADDRLP4 4 ARGP4 ADDRGP4 $444 ARGP4 ADDRLP4 6336 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 6336 INDIRP4 ARGP4 ADDRLP4 6340 ADDRGP4 atoi CALLI4 ASGNI4 ADDRLP4 2124 ADDRLP4 6340 INDIRI4 ASGNI4 line 1247 ;1246: // team Leader (1 = leader, 0 is normal player) ;1247: teamLeader = client->sess.teamLeader; ADDRLP4 2128 ADDRLP4 0 INDIRP4 CNSTI4 1560 ADDP4 INDIRI4 ASGNI4 line 1250 ;1248: ;1249: // colors ;1250: strcpy(c1, Info_ValueForKey( userinfo, "color1" )); ADDRLP4 4 ARGP4 ADDRGP4 $445 ARGP4 ADDRLP4 6344 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 2200 ARGP4 ADDRLP4 6344 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1251 ;1251: strcpy(c2, Info_ValueForKey( userinfo, "color2" )); ADDRLP4 4 ARGP4 ADDRGP4 $446 ARGP4 ADDRLP4 6348 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 3224 ARGP4 ADDRLP4 6348 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1253 ;1252: ;1253: strcpy(redTeam, Info_ValueForKey( userinfo, "g_redteam" )); ADDRLP4 4 ARGP4 ADDRGP4 $447 ARGP4 ADDRLP4 6352 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 4252 ARGP4 ADDRLP4 6352 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1254 ;1254: strcpy(blueTeam, Info_ValueForKey( userinfo, "g_blueteam" )); ADDRLP4 4 ARGP4 ADDRGP4 $448 ARGP4 ADDRLP4 6356 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 5276 ARGP4 ADDRLP4 6356 INDIRP4 ARGP4 ADDRGP4 strcpy CALLP4 pop line 1258 ;1255: ;1256: // send over a subset of the userinfo keys so other clients can ;1257: // print scoreboards, display models, and play custom sounds ;1258: if ( ent->r.svFlags & SVF_BOT ) { ADDRLP4 1032 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $449 line 1259 ;1259: s = va("n\\%s\\t\\%i\\model\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\skill\\%s\\tt\\%d\\tl\\%d", ADDRLP4 4 ARGP4 ADDRGP4 $452 ARGP4 ADDRLP4 6360 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRGP4 $451 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 4248 INDIRI4 ARGI4 ADDRLP4 1036 ARGP4 ADDRLP4 2200 ARGP4 ADDRLP4 3224 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1536 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1540 ADDP4 INDIRI4 ARGI4 ADDRLP4 6360 INDIRP4 ARGP4 ADDRLP4 2124 INDIRI4 ARGI4 ADDRLP4 2128 INDIRI4 ARGI4 ADDRLP4 6368 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6368 INDIRP4 ASGNP4 line 1263 ;1260: client->pers.netname, team, model, c1, c2, ;1261: client->pers.maxHealth, client->sess.wins, client->sess.losses, ;1262: Info_ValueForKey( userinfo, "skill" ), teamTask, teamLeader ); ;1263: } else { ADDRGP4 $450 JUMPV LABELV $449 line 1264 ;1264: s = va("n\\%s\\t\\%i\\model\\%s\\g_redteam\\%s\\g_blueteam\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d", ADDRGP4 $453 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ARGI4 ADDRLP4 1036 ARGP4 ADDRLP4 4252 ARGP4 ADDRLP4 5276 ARGP4 ADDRLP4 2200 ARGP4 ADDRLP4 3224 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1536 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1540 ADDP4 INDIRI4 ARGI4 ADDRLP4 2124 INDIRI4 ARGI4 ADDRLP4 2128 INDIRI4 ARGI4 ADDRLP4 6364 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 1028 ADDRLP4 6364 INDIRP4 ASGNP4 line 1267 ;1265: client->pers.netname, client->sess.sessionTeam, model, redTeam, blueTeam, c1, c2, ;1266: client->pers.maxHealth, client->sess.wins, client->sess.losses, teamTask, teamLeader); ;1267: } LABELV $450 line 1269 ;1268: ;1269: trap_SetConfigstring( CS_PLAYERS+clientNum, s ); ADDRFP4 0 INDIRI4 CNSTI4 544 ADDI4 ARGI4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 trap_SetConfigstring CALLV pop line 1271 ;1270: ;1271: G_LogPrintf( "ClientUserinfoChanged: %i %s\n", clientNum, s ); ADDRGP4 $454 ARGP4 ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 1028 INDIRP4 ARGP4 ADDRGP4 G_LogPrintf CALLV pop line 1272 ;1272:} LABELV $389 endproc ClientUserinfoChanged 6372 52 export ClientConnect proc ClientConnect 1068 12 line 1295 ;1273: ;1274: ;1275:/* ;1276:=========== ;1277:ClientConnect ;1278: ;1279:Called when a player begins connecting to the server. ;1280:Called again for every map change or tournement restart. ;1281: ;1282:The session information will be valid after exit. ;1283: ;1284:Return NULL if the client should be allowed, otherwise return ;1285:a string with the reason for denial. ;1286: ;1287:Otherwise, the client will be sent the current gamestate ;1288:and will eventually get to ClientBegin. ;1289: ;1290:firstTime will be qtrue the very first time a client connects ;1291:to the server machine, but qfalse on map changes and tournement ;1292:restarts. ;1293:============ ;1294:*/ ;1295:char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { line 1303 ;1296: char *value; ;1297:// char *areabits; ;1298: gclient_t *client; ;1299: char userinfo[MAX_INFO_STRING]; ;1300: gentity_t *ent; ;1301: gentity_t *te; ;1302: ;1303: ent = &g_entities[ clientNum ]; ADDRLP4 4 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1305 ;1304: ;1305: trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 8 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 1308 ;1306: ;1307: // check to see if they are on the banned IP list ;1308: value = Info_ValueForKey (userinfo, "ip"); ADDRLP4 8 ARGP4 ADDRGP4 $393 ARGP4 ADDRLP4 1040 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1032 ADDRLP4 1040 INDIRP4 ASGNP4 line 1309 ;1309: if ( G_FilterPacket( value ) ) { ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1044 ADDRGP4 G_FilterPacket CALLI4 ASGNI4 ADDRLP4 1044 INDIRI4 CNSTI4 0 EQI4 $456 line 1310 ;1310: return "Banned."; ADDRGP4 $458 RETP4 ADDRGP4 $455 JUMPV LABELV $456 line 1313 ;1311: } ;1312: ;1313: if ( !( ent->r.svFlags & SVF_BOT ) && !isBot && g_needpass.integer ) { ADDRLP4 1048 CNSTI4 0 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 1048 INDIRI4 NEI4 $459 ADDRFP4 8 INDIRI4 ADDRLP4 1048 INDIRI4 NEI4 $459 ADDRGP4 g_needpass+12 INDIRI4 ADDRLP4 1048 INDIRI4 EQI4 $459 line 1315 ;1314: // check for a password ;1315: value = Info_ValueForKey (userinfo, "password"); ADDRLP4 8 ARGP4 ADDRGP4 $462 ARGP4 ADDRLP4 1052 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1032 ADDRLP4 1052 INDIRP4 ASGNP4 line 1316 ;1316: if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) && ADDRGP4 g_password+16 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $463 ADDRGP4 g_password+16 ARGP4 ADDRGP4 $467 ARGP4 ADDRLP4 1056 ADDRGP4 Q_stricmp CALLI4 ASGNI4 ADDRLP4 1056 INDIRI4 CNSTI4 0 EQI4 $463 ADDRGP4 g_password+16 ARGP4 ADDRLP4 1032 INDIRP4 ARGP4 ADDRLP4 1060 ADDRGP4 strcmp CALLI4 ASGNI4 ADDRLP4 1060 INDIRI4 CNSTI4 0 EQI4 $463 line 1317 ;1317: strcmp( g_password.string, value) != 0) { line 1318 ;1318: return "Invalid password"; ADDRGP4 $469 RETP4 ADDRGP4 $455 JUMPV LABELV $463 line 1320 ;1319: } ;1320: } LABELV $459 line 1323 ;1321: ;1322: // they can connect ;1323: ent->client = level.clients + clientNum; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 CNSTI4 1756 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 1324 ;1324: client = ent->client; ADDRLP4 0 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 1328 ;1325: ;1326:// areabits = client->areabits; ;1327: ;1328: memset( client, 0, sizeof(*client) ); ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1756 ARGI4 ADDRGP4 memset CALLP4 pop line 1330 ;1329: ;1330: client->pers.connected = CON_CONNECTING; ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 CNSTI4 1 ASGNI4 line 1333 ;1331: ;1332: // read or initialize the session data ;1333: if ( firstTime || level.newSession ) { ADDRLP4 1052 CNSTI4 0 ASGNI4 ADDRFP4 4 INDIRI4 ADDRLP4 1052 INDIRI4 NEI4 $473 ADDRGP4 level+64 INDIRI4 ADDRLP4 1052 INDIRI4 EQI4 $470 LABELV $473 line 1334 ;1334: G_InitSessionData( client, userinfo, isBot ); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 8 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRGP4 G_InitSessionData CALLV pop line 1335 ;1335: } LABELV $470 line 1336 ;1336: G_ReadSessionData( client ); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 G_ReadSessionData CALLV pop line 1338 ;1337: ;1338: if( isBot ) { ADDRFP4 8 INDIRI4 CNSTI4 0 EQI4 $474 line 1339 ;1339: ent->r.svFlags |= SVF_BOT; ADDRLP4 1056 ADDRLP4 4 INDIRP4 CNSTI4 304 ADDP4 ASGNP4 ADDRLP4 1056 INDIRP4 ADDRLP4 1056 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1340 ;1340: ent->inuse = qtrue; ADDRLP4 4 INDIRP4 CNSTI4 412 ADDP4 CNSTI4 1 ASGNI4 line 1341 ;1341: if( !G_BotConnect( clientNum, !firstTime ) ) { ADDRFP4 0 INDIRI4 ARGI4 ADDRFP4 4 INDIRI4 CNSTI4 0 NEI4 $479 ADDRLP4 1060 CNSTI4 1 ASGNI4 ADDRGP4 $480 JUMPV LABELV $479 ADDRLP4 1060 CNSTI4 0 ASGNI4 LABELV $480 ADDRLP4 1060 INDIRI4 ARGI4 ADDRLP4 1064 ADDRGP4 G_BotConnect CALLI4 ASGNI4 ADDRLP4 1064 INDIRI4 CNSTI4 0 NEI4 $476 line 1342 ;1342: return "BotConnectfailed"; ADDRGP4 $481 RETP4 ADDRGP4 $455 JUMPV LABELV $476 line 1344 ;1343: } ;1344: } LABELV $474 line 1347 ;1345: ;1346: // get and distribute relevent paramters ;1347: G_LogPrintf( "ClientConnect: %i\n", clientNum ); ADDRGP4 $482 ARGP4 ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_LogPrintf CALLV pop line 1348 ;1348: ClientUserinfoChanged( clientNum ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 ClientUserinfoChanged CALLV pop line 1351 ;1349: ;1350: // don't do the "xxx connected" messages if they were caried over from previous level ;1351: if ( firstTime ) { ADDRFP4 4 INDIRI4 CNSTI4 0 EQI4 $483 line 1352 ;1352: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s\n\"", client->pers.netname, G_GetStripEdString("SVINGAME", "PLCONNECT")) ); ADDRGP4 $148 ARGP4 ADDRGP4 $486 ARGP4 ADDRLP4 1056 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $485 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 1056 INDIRP4 ARGP4 ADDRLP4 1060 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 1060 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1353 ;1353: } LABELV $483 line 1355 ;1354: ;1355: if ( g_gametype.integer >= GT_TEAM && ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $487 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 EQI4 $487 line 1356 ;1356: client->sess.sessionTeam != TEAM_SPECTATOR ) { line 1357 ;1357: BroadcastTeamChange( client, -1 ); ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 -1 ARGI4 ADDRGP4 BroadcastTeamChange CALLV pop line 1358 ;1358: } LABELV $487 line 1361 ;1359: ;1360: // count current clients and rank for scoreboard ;1361: CalculateRanks(); ADDRGP4 CalculateRanks CALLV pop line 1363 ;1362: ;1363: te = G_TempEntity( vec3_origin, EV_CLIENTJOIN ); ADDRGP4 vec3_origin ARGP4 CNSTI4 1 ARGI4 ADDRLP4 1056 ADDRGP4 G_TempEntity CALLP4 ASGNP4 ADDRLP4 1036 ADDRLP4 1056 INDIRP4 ASGNP4 line 1364 ;1364: te->r.svFlags |= SVF_BROADCAST; ADDRLP4 1060 ADDRLP4 1036 INDIRP4 CNSTI4 304 ADDP4 ASGNP4 ADDRLP4 1060 INDIRP4 ADDRLP4 1060 INDIRP4 INDIRI4 CNSTI4 32 BORI4 ASGNI4 line 1365 ;1365: te->s.eventParm = clientNum; ADDRLP4 1036 INDIRP4 CNSTI4 256 ADDP4 ADDRFP4 0 INDIRI4 ASGNI4 line 1372 ;1366: ;1367: // for statistics ;1368:// client->areabits = areabits; ;1369:// if ( !client->areabits ) ;1370:// client->areabits = G_Alloc( (trap_AAS_PointReachabilityAreaIndex( NULL ) + 7) / 8 ); ;1371: ;1372: return NULL; CNSTP4 0 RETP4 LABELV $455 endproc ClientConnect 1068 12 export ClientBegin proc ClientBegin 1108 12 line 1386 ;1373:} ;1374: ;1375:void G_WriteClientSessionData( gclient_t *client ); ;1376: ;1377:/* ;1378:=========== ;1379:ClientBegin ;1380: ;1381:called when a client has finished connecting, and is ready ;1382:to be placed into the level. This will happen every level load, ;1383:and on transition between teams, but doesn't happen on respawns ;1384:============ ;1385:*/ ;1386:void ClientBegin( int clientNum, qboolean allowTeamReset ) { line 1393 ;1387: gentity_t *ent; ;1388: gclient_t *client; ;1389: gentity_t *tent; ;1390: int flags, i; ;1391: char userinfo[MAX_INFO_VALUE], *modelname; ;1392: ;1393: ent = g_entities + clientNum; ADDRLP4 4 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1395 ;1394: ;1395: if ((ent->r.svFlags & SVF_BOT) && g_gametype.integer >= GT_TEAM) ADDRLP4 4 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $491 ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 5 LTI4 $491 line 1396 ;1396: { line 1397 ;1397: if (allowTeamReset) ADDRFP4 4 INDIRI4 CNSTI4 0 EQI4 $494 line 1398 ;1398: { line 1399 ;1399: const char *team = "Red"; ADDRLP4 1048 ADDRGP4 $496 ASGNP4 line 1403 ;1400: int preSess; ;1401: ;1402: //SetTeam(ent, ""); ;1403: ent->client->sess.sessionTeam = PickTeam(-1); CNSTI4 -1 ARGI4 ADDRLP4 1056 ADDRGP4 PickTeam CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 ADDRLP4 1056 INDIRI4 ASGNI4 line 1404 ;1404: trap_GetUserinfo(clientNum, userinfo, MAX_INFO_STRING); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 12 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 1406 ;1405: ;1406: if (ent->client->sess.sessionTeam == TEAM_SPECTATOR) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $497 line 1407 ;1407: { line 1408 ;1408: ent->client->sess.sessionTeam = TEAM_RED; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 CNSTI4 1 ASGNI4 line 1409 ;1409: } LABELV $497 line 1411 ;1410: ;1411: if (ent->client->sess.sessionTeam == TEAM_RED) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 1 NEI4 $499 line 1412 ;1412: { line 1413 ;1413: team = "Red"; ADDRLP4 1048 ADDRGP4 $496 ASGNP4 line 1414 ;1414: } ADDRGP4 $500 JUMPV LABELV $499 line 1416 ;1415: else ;1416: { line 1417 ;1417: team = "Blue"; ADDRLP4 1048 ADDRGP4 $501 ASGNP4 line 1418 ;1418: } LABELV $500 line 1420 ;1419: ;1420: Info_SetValueForKey( userinfo, "team", team ); ADDRLP4 12 ARGP4 ADDRGP4 $426 ARGP4 ADDRLP4 1048 INDIRP4 ARGP4 ADDRGP4 Info_SetValueForKey CALLV pop line 1422 ;1421: ;1422: trap_SetUserinfo( clientNum, userinfo ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 12 ARGP4 ADDRGP4 trap_SetUserinfo CALLV pop line 1424 ;1423: ;1424: ent->client->ps.persistant[ PERS_TEAM ] = ent->client->sess.sessionTeam; ADDRLP4 1060 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 1060 INDIRP4 CNSTI4 292 ADDP4 ADDRLP4 1060 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 1426 ;1425: ;1426: preSess = ent->client->sess.sessionTeam; ADDRLP4 1052 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 1427 ;1427: G_ReadSessionData( ent->client ); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRGP4 G_ReadSessionData CALLV pop line 1428 ;1428: ent->client->sess.sessionTeam = preSess; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 ADDRLP4 1052 INDIRI4 ASGNI4 line 1429 ;1429: G_WriteClientSessionData(ent->client); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRGP4 G_WriteClientSessionData CALLV pop line 1430 ;1430: ClientUserinfoChanged( clientNum ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 ClientUserinfoChanged CALLV pop line 1431 ;1431: ClientBegin(clientNum, qfalse); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 ClientBegin CALLV pop line 1432 ;1432: return; ADDRGP4 $490 JUMPV LABELV $494 line 1434 ;1433: } ;1434: } LABELV $491 line 1436 ;1435: ;1436: client = level.clients + clientNum; ADDRLP4 8 CNSTI4 1756 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 1438 ;1437: ;1438: if ( ent->r.linked ) { ADDRLP4 4 INDIRP4 CNSTI4 296 ADDP4 INDIRI4 CNSTI4 0 EQI4 $502 line 1439 ;1439: trap_UnlinkEntity( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 1440 ;1440: } LABELV $502 line 1441 ;1441: G_InitGentity( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 G_InitGentity CALLV pop line 1442 ;1442: ent->touch = 0; ADDRLP4 4 INDIRP4 CNSTI4 648 ADDP4 CNSTP4 0 ASGNP4 line 1443 ;1443: ent->pain = 0; ADDRLP4 4 INDIRP4 CNSTI4 656 ADDP4 CNSTP4 0 ASGNP4 line 1444 ;1444: ent->client = client; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 ADDRLP4 8 INDIRP4 ASGNP4 line 1446 ;1445: ;1446: client->pers.connected = CON_CONNECTED; ADDRLP4 8 INDIRP4 CNSTI4 1368 ADDP4 CNSTI4 2 ASGNI4 line 1447 ;1447: client->pers.enterTime = level.time; ADDRLP4 8 INDIRP4 CNSTI4 1456 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1448 ;1448: client->pers.teamState.state = TEAM_BEGIN; ADDRLP4 8 INDIRP4 CNSTI4 1460 ADDP4 CNSTI4 0 ASGNI4 line 1455 ;1449: ;1450: // save eflags around this, because changing teams will ;1451: // cause this to happen with a valid entity, and we ;1452: // want to make sure the teleport bit is set right ;1453: // so the viewpoint doesn't interpolate through the ;1454: // world to the new position ;1455: flags = client->ps.eFlags; ADDRLP4 1036 ADDRLP4 8 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 ASGNI4 line 1457 ;1456: ;1457: i = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $506 JUMPV LABELV $505 line 1460 ;1458: ;1459: while (i < NUM_FORCE_POWERS) ;1460: { line 1461 ;1461: if (ent->client->ps.fd.forcePowersActive & (1 << i)) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 836 ADDP4 INDIRI4 CNSTI4 1 ADDRLP4 0 INDIRI4 LSHI4 BANDI4 CNSTI4 0 EQI4 $508 line 1462 ;1462: { line 1463 ;1463: WP_ForcePowerStop(ent, i); ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 ADDRGP4 WP_ForcePowerStop CALLV pop line 1464 ;1464: } LABELV $508 line 1465 ;1465: i++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1466 ;1466: } LABELV $506 line 1459 ADDRLP4 0 INDIRI4 CNSTI4 18 LTI4 $505 line 1468 ;1467: ;1468: i = TRACK_CHANNEL_1; ADDRLP4 0 CNSTI4 51 ASGNI4 ADDRGP4 $511 JUMPV LABELV $510 line 1471 ;1469: ;1470: while (i < NUM_TRACK_CHANNELS) ;1471: { line 1472 ;1472: if (ent->client->ps.fd.killSoundEntIndex[i-50] && ent->client->ps.fd.killSoundEntIndex[i-50] < MAX_GENTITIES && ent->client->ps.fd.killSoundEntIndex[i-50] > 0) ADDRLP4 1048 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 CNSTI4 200 SUBI4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1188 ADDP4 ADDP4 INDIRI4 ASGNI4 ADDRLP4 1052 CNSTI4 0 ASGNI4 ADDRLP4 1048 INDIRI4 ADDRLP4 1052 INDIRI4 EQI4 $513 ADDRLP4 1048 INDIRI4 CNSTI4 1024 GEI4 $513 ADDRLP4 1048 INDIRI4 ADDRLP4 1052 INDIRI4 LEI4 $513 line 1473 ;1473: { line 1474 ;1474: G_MuteSound(ent->client->ps.fd.killSoundEntIndex[i-50], CHAN_VOICE); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 CNSTI4 200 SUBI4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1188 ADDP4 ADDP4 INDIRI4 ARGI4 CNSTI4 3 ARGI4 ADDRGP4 G_MuteSound CALLV pop line 1475 ;1475: } LABELV $513 line 1476 ;1476: i++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1477 ;1477: } LABELV $511 line 1470 ADDRLP4 0 INDIRI4 CNSTI4 56 LTI4 $510 line 1478 ;1478: i = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1480 ;1479: ;1480: memset( &client->ps, 0, sizeof( client->ps ) ); ADDRLP4 8 INDIRP4 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1368 ARGI4 ADDRGP4 memset CALLP4 pop line 1481 ;1481: client->ps.eFlags = flags; ADDRLP4 8 INDIRP4 CNSTI4 108 ADDP4 ADDRLP4 1036 INDIRI4 ASGNI4 line 1483 ;1482: ;1483: client->ps.hasDetPackPlanted = qfalse; ADDRLP4 8 INDIRP4 CNSTI4 628 ADDP4 CNSTI4 0 ASGNI4 line 1486 ;1484: ;1485: //first-time force power initialization ;1486: WP_InitForcePowers( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 WP_InitForcePowers CALLV pop line 1489 ;1487: ;1488: //init saber ent ;1489: WP_SaberInitBladeData( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 WP_SaberInitBladeData CALLV pop line 1492 ;1490: ;1491: // First time model setup for that player. ;1492: trap_GetUserinfo( clientNum, userinfo, sizeof(userinfo) ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 12 ARGP4 CNSTI4 1024 ARGI4 ADDRGP4 trap_GetUserinfo CALLV pop line 1493 ;1493: modelname = Info_ValueForKey (userinfo, "model"); ADDRLP4 12 ARGP4 ADDRGP4 $419 ARGP4 ADDRLP4 1048 ADDRGP4 Info_ValueForKey CALLP4 ASGNP4 ADDRLP4 1040 ADDRLP4 1048 INDIRP4 ASGNP4 line 1494 ;1494: SetupGameGhoul2Model(client, modelname); ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 1040 INDIRP4 ARGP4 ADDRGP4 SetupGameGhoul2Model CALLV pop line 1496 ;1495: ;1496: if (ent->client->ghoul2) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $515 line 1497 ;1497: { line 1498 ;1498: ent->bolt_Head = trap_G2API_AddBolt(ent->client->ghoul2, 0, "cranium"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $380 ARGP4 ADDRLP4 1056 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 784 ADDP4 ADDRLP4 1056 INDIRI4 ASGNI4 line 1499 ;1499: ent->bolt_Waist = trap_G2API_AddBolt(ent->client->ghoul2, 0, "thoracic"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $517 ARGP4 ADDRLP4 1064 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 804 ADDP4 ADDRLP4 1064 INDIRI4 ASGNI4 line 1500 ;1500: ent->bolt_LArm = trap_G2API_AddBolt(ent->client->ghoul2, 0, "lradius"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $518 ARGP4 ADDRLP4 1072 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 788 ADDP4 ADDRLP4 1072 INDIRI4 ASGNI4 line 1501 ;1501: ent->bolt_RArm = trap_G2API_AddBolt(ent->client->ghoul2, 0, "rradius"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $519 ARGP4 ADDRLP4 1080 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 792 ADDP4 ADDRLP4 1080 INDIRI4 ASGNI4 line 1502 ;1502: ent->bolt_LLeg = trap_G2API_AddBolt(ent->client->ghoul2, 0, "ltibia"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $520 ARGP4 ADDRLP4 1088 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 796 ADDP4 ADDRLP4 1088 INDIRI4 ASGNI4 line 1503 ;1503: ent->bolt_RLeg = trap_G2API_AddBolt(ent->client->ghoul2, 0, "rtibia"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $521 ARGP4 ADDRLP4 1096 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 800 ADDP4 ADDRLP4 1096 INDIRI4 ASGNI4 line 1504 ;1504: ent->bolt_Motion = trap_G2API_AddBolt(ent->client->ghoul2, 0, "Motion"); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 $522 ARGP4 ADDRLP4 1104 ADDRGP4 trap_G2API_AddBolt CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 808 ADDP4 ADDRLP4 1104 INDIRI4 ASGNI4 line 1505 ;1505: } LABELV $515 line 1508 ;1506: ;1507: // locate ent at a spawn point ;1508: ClientSpawn( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 ClientSpawn CALLV pop line 1510 ;1509: ;1510: if ( client->sess.sessionTeam != TEAM_SPECTATOR ) { ADDRLP4 8 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 EQI4 $523 line 1512 ;1511: // send event ;1512: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_IN ); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 20 ADDP4 ARGP4 CNSTI4 59 ARGI4 ADDRLP4 1052 ADDRGP4 G_TempEntity CALLP4 ASGNP4 ADDRLP4 1044 ADDRLP4 1052 INDIRP4 ASGNP4 line 1513 ;1513: tent->s.clientNum = ent->s.clientNum; ADDRLP4 1056 CNSTI4 220 ASGNI4 ADDRLP4 1044 INDIRP4 ADDRLP4 1056 INDIRI4 ADDP4 ADDRLP4 4 INDIRP4 ADDRLP4 1056 INDIRI4 ADDP4 INDIRI4 ASGNI4 line 1515 ;1514: ;1515: if ( g_gametype.integer != GT_TOURNAMENT ) { ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 3 EQI4 $525 line 1516 ;1516: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s\n\"", client->pers.netname, G_GetStripEdString("SVINGAME", "PLENTER")) ); ADDRGP4 $148 ARGP4 ADDRGP4 $528 ARGP4 ADDRLP4 1060 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $485 ARGP4 ADDRLP4 8 INDIRP4 CNSTI4 1416 ADDP4 ARGP4 ADDRLP4 1060 INDIRP4 ARGP4 ADDRLP4 1064 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 1064 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1517 ;1517: } LABELV $525 line 1518 ;1518: } LABELV $523 line 1519 ;1519: G_LogPrintf( "ClientBegin: %i\n", clientNum ); ADDRGP4 $529 ARGP4 ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_LogPrintf CALLV pop line 1522 ;1520: ;1521: // count current clients and rank for scoreboard ;1522: CalculateRanks(); ADDRGP4 CalculateRanks CALLV pop line 1524 ;1523: ;1524: G_ClearClientLog(clientNum); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_ClearClientLog CALLV pop line 1525 ;1525:} LABELV $490 endproc ClientBegin 1108 12 export ClientSpawn proc ClientSpawn 860 16 line 1536 ;1526: ;1527:/* ;1528:=========== ;1529:ClientSpawn ;1530: ;1531:Called every time a client is placed fresh in the world: ;1532:after the first ClientBegin, and after each respawn ;1533:Initializes all non-persistant parts of playerState ;1534:============ ;1535:*/ ;1536:void ClientSpawn(gentity_t *ent) { line 1553 ;1537: int index; ;1538: vec3_t spawn_origin, spawn_angles; ;1539: gclient_t *client; ;1540: int i; ;1541: clientPersistant_t saved; ;1542: clientSession_t savedSess; ;1543: int persistant[MAX_PERSISTANT]; ;1544: gentity_t *spawnPoint; ;1545: int flags; ;1546: int savedPing; ;1547:// char *savedAreaBits; ;1548: int accuracy_hits, accuracy_shots; ;1549: int eventSequence; ;1550:// char userinfo[MAX_INFO_STRING]; ;1551: forcedata_t savedForce; ;1552: void *ghoul2save; ;1553: int saveSaberNum = ENTITYNUM_NONE; ADDRLP4 112 CNSTI4 1023 ASGNI4 line 1554 ;1554: int wDisable = 0; ADDRLP4 88 CNSTI4 0 ASGNI4 line 1556 ;1555: ;1556: index = ent - g_entities; ADDRLP4 104 ADDRFP4 0 INDIRP4 CVPU4 4 ADDRGP4 g_entities CVPU4 4 SUBU4 CVUI4 4 CNSTI4 828 DIVI4 ASGNI4 line 1557 ;1557: client = ent->client; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 1559 ;1558: ;1559: if (client->ps.fd.forceDoInit) ADDRLP4 0 INDIRP4 CNSTI4 1172 ADDP4 INDIRI4 CNSTI4 0 EQI4 $531 line 1560 ;1560: { //force a reread of force powers line 1561 ;1561: WP_InitForcePowers( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 WP_InitForcePowers CALLV pop line 1562 ;1562: client->ps.fd.forceDoInit = 0; ADDRLP4 0 INDIRP4 CNSTI4 1172 ADDP4 CNSTI4 0 ASGNI4 line 1563 ;1563: } LABELV $531 line 1567 ;1564: // find a spawn point ;1565: // do it before setting health back up, so farthest ;1566: // ranging doesn't count this client ;1567: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $533 line 1568 ;1568: spawnPoint = SelectSpectatorSpawnPoint ( ADDRLP4 76 ARGP4 ADDRLP4 92 ARGP4 ADDRLP4 804 ADDRGP4 SelectSpectatorSpawnPoint CALLP4 ASGNP4 ADDRLP4 72 ADDRLP4 804 INDIRP4 ASGNP4 line 1570 ;1569: spawn_origin, spawn_angles); ;1570: } else if (g_gametype.integer == GT_CTF || g_gametype.integer == GT_CTY) { ADDRGP4 $534 JUMPV LABELV $533 ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 7 EQI4 $539 ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 8 NEI4 $535 LABELV $539 line 1572 ;1571: // all base oriented team games use the CTF spawn points ;1572: spawnPoint = SelectCTFSpawnPoint ( ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1460 ADDP4 INDIRI4 ARGI4 ADDRLP4 76 ARGP4 ADDRLP4 92 ARGP4 ADDRLP4 808 ADDRGP4 SelectCTFSpawnPoint CALLP4 ASGNP4 ADDRLP4 72 ADDRLP4 808 INDIRP4 ASGNP4 line 1576 ;1573: client->sess.sessionTeam, ;1574: client->pers.teamState.state, ;1575: spawn_origin, spawn_angles); ;1576: } ADDRGP4 $536 JUMPV LABELV $535 line 1577 ;1577: else if (g_gametype.integer == GT_SAGA) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 6 NEI4 $540 line 1578 ;1578: { line 1579 ;1579: spawnPoint = SelectSagaSpawnPoint ( ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 1460 ADDP4 INDIRI4 ARGI4 ADDRLP4 76 ARGP4 ADDRLP4 92 ARGP4 ADDRLP4 808 ADDRGP4 SelectSagaSpawnPoint CALLP4 ASGNP4 ADDRLP4 72 ADDRLP4 808 INDIRP4 ASGNP4 line 1583 ;1580: client->sess.sessionTeam, ;1581: client->pers.teamState.state, ;1582: spawn_origin, spawn_angles); ;1583: } ADDRGP4 $541 JUMPV LABELV $540 line 1584 ;1584: else { LABELV $543 line 1585 ;1585: do { line 1587 ;1586: // the first spawn should be at a good looking spot ;1587: if ( !client->pers.initialSpawn && client->pers.localClient ) { ADDRLP4 808 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 1404 ADDP4 INDIRI4 ADDRLP4 808 INDIRI4 NEI4 $546 ADDRLP4 0 INDIRP4 CNSTI4 1400 ADDP4 INDIRI4 ADDRLP4 808 INDIRI4 EQI4 $546 line 1588 ;1588: client->pers.initialSpawn = qtrue; ADDRLP4 0 INDIRP4 CNSTI4 1404 ADDP4 CNSTI4 1 ASGNI4 line 1589 ;1589: spawnPoint = SelectInitialSpawnPoint( spawn_origin, spawn_angles ); ADDRLP4 76 ARGP4 ADDRLP4 92 ARGP4 ADDRLP4 812 ADDRGP4 SelectInitialSpawnPoint CALLP4 ASGNP4 ADDRLP4 72 ADDRLP4 812 INDIRP4 ASGNP4 line 1590 ;1590: } else { ADDRGP4 $547 JUMPV LABELV $546 line 1592 ;1591: // don't spawn near existing origin if possible ;1592: spawnPoint = SelectSpawnPoint ( ADDRLP4 0 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 76 ARGP4 ADDRLP4 92 ARGP4 ADDRLP4 812 ADDRGP4 SelectSpawnPoint CALLP4 ASGNP4 ADDRLP4 72 ADDRLP4 812 INDIRP4 ASGNP4 line 1595 ;1593: client->ps.origin, ;1594: spawn_origin, spawn_angles); ;1595: } LABELV $547 line 1599 ;1596: ;1597: // Tim needs to prevent bots from spawning at the initial point ;1598: // on q3dm0... ;1599: if ( ( spawnPoint->flags & FL_NO_BOTS ) && ( ent->r.svFlags & SVF_BOT ) ) { ADDRLP4 812 CNSTI4 0 ASGNI4 ADDRLP4 72 INDIRP4 CNSTI4 472 ADDP4 INDIRI4 CNSTI4 8192 BANDI4 ADDRLP4 812 INDIRI4 EQI4 $548 ADDRFP4 0 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 812 INDIRI4 EQI4 $548 line 1600 ;1600: continue; // try again ADDRGP4 $544 JUMPV LABELV $548 line 1603 ;1601: } ;1602: // just to be symetric, we have a nohumans option... ;1603: if ( ( spawnPoint->flags & FL_NO_HUMANS ) && !( ent->r.svFlags & SVF_BOT ) ) { ADDRLP4 816 CNSTI4 0 ASGNI4 ADDRLP4 72 INDIRP4 CNSTI4 472 ADDP4 INDIRI4 CNSTI4 16384 BANDI4 ADDRLP4 816 INDIRI4 EQI4 $545 ADDRFP4 0 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 816 INDIRI4 NEI4 $545 line 1604 ;1604: continue; // try again line 1607 ;1605: } ;1606: ;1607: break; LABELV $544 line 1609 ;1608: ;1609: } while ( 1 ); ADDRGP4 $543 JUMPV LABELV $545 line 1610 ;1610: } LABELV $541 LABELV $536 LABELV $534 line 1611 ;1611: client->pers.teamState.state = TEAM_ACTIVE; ADDRLP4 0 INDIRP4 CNSTI4 1460 ADDP4 CNSTI4 1 ASGNI4 line 1615 ;1612: ;1613: // toggle the teleport bit so the client knows to not lerp ;1614: // and never clear the voted flag ;1615: flags = ent->client->ps.eFlags & (EF_TELEPORT_BIT | EF_VOTED | EF_TEAMVOTED); ADDRLP4 108 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 540676 BANDI4 ASGNI4 line 1616 ;1616: flags ^= EF_TELEPORT_BIT; ADDRLP4 108 ADDRLP4 108 INDIRI4 CNSTI4 4 BXORI4 ASGNI4 line 1620 ;1617: ;1618: // clear everything but the persistant data ;1619: ;1620: saved = client->pers; ADDRLP4 116 ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 INDIRB ASGNB 152 line 1621 ;1621: savedSess = client->sess; ADDRLP4 268 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRB ASGNB 44 line 1622 ;1622: savedPing = client->ps.ping; ADDRLP4 312 ADDRLP4 0 INDIRP4 CNSTI4 484 ADDP4 INDIRI4 ASGNI4 line 1624 ;1623:// savedAreaBits = client->areabits; ;1624: accuracy_hits = client->accuracy_hits; ADDRLP4 316 ADDRLP4 0 INDIRP4 CNSTI4 1656 ADDP4 INDIRI4 ASGNI4 line 1625 ;1625: accuracy_shots = client->accuracy_shots; ADDRLP4 320 ADDRLP4 0 INDIRP4 CNSTI4 1652 ADDP4 INDIRI4 ASGNI4 line 1626 ;1626: for ( i = 0 ; i < MAX_PERSISTANT ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 LABELV $552 line 1627 ;1627: persistant[i] = client->ps.persistant[i]; ADDRLP4 804 ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 804 INDIRI4 ADDRLP4 8 ADDP4 ADDRLP4 804 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 280 ADDP4 ADDP4 INDIRI4 ASGNI4 line 1628 ;1628: } LABELV $553 line 1626 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 4 INDIRI4 CNSTI4 16 LTI4 $552 line 1629 ;1629: eventSequence = client->ps.eventSequence; ADDRLP4 324 ADDRLP4 0 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 ASGNI4 line 1631 ;1630: ;1631: savedForce = client->ps.fd; ADDRLP4 328 ADDRLP4 0 INDIRP4 CNSTI4 760 ADDP4 INDIRB ASGNB 472 line 1633 ;1632: ;1633: ghoul2save = client->ghoul2; ADDRLP4 800 ADDRLP4 0 INDIRP4 CNSTI4 1716 ADDP4 INDIRP4 ASGNP4 line 1635 ;1634: ;1635: saveSaberNum = client->ps.saberEntityNum; ADDRLP4 112 ADDRLP4 0 INDIRP4 CNSTI4 544 ADDP4 INDIRI4 ASGNI4 line 1637 ;1636: ;1637: memset (client, 0, sizeof(*client)); // bk FIXME: Com_Memset? ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1756 ARGI4 ADDRGP4 memset CALLP4 pop line 1640 ;1638: ;1639: //rww - Don't wipe the ghoul2 instance or the animation data ;1640: client->ghoul2 = ghoul2save; ADDRLP4 0 INDIRP4 CNSTI4 1716 ADDP4 ADDRLP4 800 INDIRP4 ASGNP4 line 1643 ;1641: ;1642: //or the saber ent num ;1643: client->ps.saberEntityNum = saveSaberNum; ADDRLP4 0 INDIRP4 CNSTI4 544 ADDP4 ADDRLP4 112 INDIRI4 ASGNI4 line 1645 ;1644: ;1645: client->ps.fd = savedForce; ADDRLP4 0 INDIRP4 CNSTI4 760 ADDP4 ADDRLP4 328 INDIRB ASGNB 472 line 1647 ;1646: ;1647: client->ps.duelIndex = ENTITYNUM_NONE; ADDRLP4 0 INDIRP4 CNSTI4 1284 ADDP4 CNSTI4 1023 ASGNI4 line 1649 ;1648: ;1649: client->pers = saved; ADDRLP4 0 INDIRP4 CNSTI4 1368 ADDP4 ADDRLP4 116 INDIRB ASGNB 152 line 1650 ;1650: client->sess = savedSess; ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 ADDRLP4 268 INDIRB ASGNB 44 line 1651 ;1651: client->ps.ping = savedPing; ADDRLP4 0 INDIRP4 CNSTI4 484 ADDP4 ADDRLP4 312 INDIRI4 ASGNI4 line 1653 ;1652:// client->areabits = savedAreaBits; ;1653: client->accuracy_hits = accuracy_hits; ADDRLP4 0 INDIRP4 CNSTI4 1656 ADDP4 ADDRLP4 316 INDIRI4 ASGNI4 line 1654 ;1654: client->accuracy_shots = accuracy_shots; ADDRLP4 0 INDIRP4 CNSTI4 1652 ADDP4 ADDRLP4 320 INDIRI4 ASGNI4 line 1655 ;1655: client->lastkilled_client = -1; ADDRLP4 0 INDIRP4 CNSTI4 1660 ADDP4 CNSTI4 -1 ASGNI4 line 1657 ;1656: ;1657: for ( i = 0 ; i < MAX_PERSISTANT ; i++ ) { ADDRLP4 4 CNSTI4 0 ASGNI4 LABELV $556 line 1658 ;1658: client->ps.persistant[i] = persistant[i]; ADDRLP4 804 ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 804 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 280 ADDP4 ADDP4 ADDRLP4 804 INDIRI4 ADDRLP4 8 ADDP4 INDIRI4 ASGNI4 line 1659 ;1659: } LABELV $557 line 1657 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 4 INDIRI4 CNSTI4 16 LTI4 $556 line 1660 ;1660: client->ps.eventSequence = eventSequence; ADDRLP4 0 INDIRP4 CNSTI4 112 ADDP4 ADDRLP4 324 INDIRI4 ASGNI4 line 1662 ;1661: // increment the spawncount so the client will detect the respawn ;1662: client->ps.persistant[PERS_SPAWN_COUNT]++; ADDRLP4 804 ADDRLP4 0 INDIRP4 CNSTI4 296 ADDP4 ASGNP4 ADDRLP4 804 INDIRP4 ADDRLP4 804 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1663 ;1663: client->ps.persistant[PERS_TEAM] = client->sess.sessionTeam; ADDRLP4 0 INDIRP4 CNSTI4 292 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 ASGNI4 line 1665 ;1664: ;1665: client->airOutTime = level.time + 12000; ADDRLP4 0 INDIRP4 CNSTI4 1688 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 12000 ADDI4 ASGNI4 line 1669 ;1666: ;1667:// trap_GetUserinfo( index, userinfo, sizeof(userinfo) ); ;1668: // set max health ;1669: client->pers.maxHealth = 100;//atoi( Info_ValueForKey( userinfo, "handicap" ) ); ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 CNSTI4 100 ASGNI4 line 1670 ;1670: if ( client->pers.maxHealth < 1 || client->pers.maxHealth > 100 ) { ADDRLP4 812 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ASGNI4 ADDRLP4 812 INDIRI4 CNSTI4 1 LTI4 $563 ADDRLP4 812 INDIRI4 CNSTI4 100 LEI4 $561 LABELV $563 line 1671 ;1671: client->pers.maxHealth = 100; ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 CNSTI4 100 ASGNI4 line 1672 ;1672: } LABELV $561 line 1674 ;1673: // clear entity values ;1674: client->ps.stats[STAT_MAX_HEALTH] = client->pers.maxHealth; ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 1452 ADDP4 INDIRI4 ASGNI4 line 1675 ;1675: client->ps.eFlags = flags; ADDRLP4 0 INDIRP4 CNSTI4 108 ADDP4 ADDRLP4 108 INDIRI4 ASGNI4 line 1677 ;1676: ;1677: ent->s.groundEntityNum = ENTITYNUM_NONE; ADDRFP4 0 INDIRP4 CNSTI4 192 ADDP4 CNSTI4 1023 ASGNI4 line 1678 ;1678: ent->client = &level.clients[index]; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 CNSTI4 1756 ADDRLP4 104 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 1679 ;1679: ent->takedamage = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 680 ADDP4 CNSTI4 1 ASGNI4 line 1680 ;1680: ent->inuse = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 412 ADDP4 CNSTI4 1 ASGNI4 line 1681 ;1681: ent->classname = "player"; ADDRFP4 0 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $564 ASGNP4 line 1682 ;1682: ent->r.contents = CONTENTS_BODY; ADDRFP4 0 INDIRP4 CNSTI4 340 ADDP4 CNSTI4 256 ASGNI4 line 1683 ;1683: ent->clipmask = MASK_PLAYERSOLID; ADDRFP4 0 INDIRP4 CNSTI4 508 ADDP4 CNSTI4 273 ASGNI4 line 1684 ;1684: ent->die = player_die; ADDRFP4 0 INDIRP4 CNSTI4 660 ADDP4 ADDRGP4 player_die ASGNP4 line 1685 ;1685: ent->waterlevel = 0; ADDRFP4 0 INDIRP4 CNSTI4 748 ADDP4 CNSTI4 0 ASGNI4 line 1686 ;1686: ent->watertype = 0; ADDRFP4 0 INDIRP4 CNSTI4 744 ADDP4 CNSTI4 0 ASGNI4 line 1687 ;1687: ent->flags = 0; ADDRFP4 0 INDIRP4 CNSTI4 472 ADDP4 CNSTI4 0 ASGNI4 line 1689 ;1688: ;1689: VectorCopy (playerMins, ent->r.mins); ADDRFP4 0 INDIRP4 CNSTI4 316 ADDP4 ADDRGP4 playerMins INDIRB ASGNB 12 line 1690 ;1690: VectorCopy (playerMaxs, ent->r.maxs); ADDRFP4 0 INDIRP4 CNSTI4 328 ADDP4 ADDRGP4 playerMaxs INDIRB ASGNB 12 line 1692 ;1691: ;1692: client->ps.clientNum = index; ADDRLP4 0 INDIRP4 CNSTI4 144 ADDP4 ADDRLP4 104 INDIRI4 ASGNI4 line 1694 ;1693: //give default weapons ;1694: client->ps.stats[STAT_WEAPONS] = ( 1 << WP_NONE ); ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 CNSTI4 1 ASGNI4 line 1696 ;1695: ;1696: if (g_gametype.integer == GT_HOLOCRON) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 1 NEI4 $565 line 1697 ;1697: { line 1699 ;1698: //always get free saber level 1 in holocron ;1699: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_SABER ); //these are precached in g_items, ClearRegisteredItems() ADDRLP4 820 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 820 INDIRP4 ADDRLP4 820 INDIRP4 INDIRI4 CNSTI4 4 BORI4 ASGNI4 line 1700 ;1700: } ADDRGP4 $566 JUMPV LABELV $565 line 1702 ;1701: else ;1702: { line 1703 ;1703: if (client->ps.fd.forcePowerLevel[FP_SABERATTACK]) ADDRLP4 0 INDIRP4 CNSTI4 992 ADDP4 INDIRI4 CNSTI4 0 EQI4 $568 line 1704 ;1704: { line 1705 ;1705: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_SABER ); //these are precached in g_items, ClearRegisteredItems() ADDRLP4 820 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 820 INDIRP4 ADDRLP4 820 INDIRP4 INDIRI4 CNSTI4 4 BORI4 ASGNI4 line 1706 ;1706: } ADDRGP4 $569 JUMPV LABELV $568 line 1708 ;1707: else ;1708: { //if you don't have saber attack rank then you don't get a saber line 1709 ;1709: client->ps.stats[STAT_WEAPONS] |= (1 << WP_STUN_BATON); ADDRLP4 820 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 820 INDIRP4 ADDRLP4 820 INDIRP4 INDIRI4 CNSTI4 2 BORI4 ASGNI4 line 1710 ;1710: } LABELV $569 line 1711 ;1711: } LABELV $566 line 1713 ;1712: ;1713: if (g_gametype.integer == GT_TOURNAMENT) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 3 NEI4 $570 line 1714 ;1714: { line 1715 ;1715: wDisable = g_duelWeaponDisable.integer; ADDRLP4 88 ADDRGP4 g_duelWeaponDisable+12 INDIRI4 ASGNI4 line 1716 ;1716: } ADDRGP4 $571 JUMPV LABELV $570 line 1718 ;1717: else ;1718: { line 1719 ;1719: wDisable = g_weaponDisable.integer; ADDRLP4 88 ADDRGP4 g_weaponDisable+12 INDIRI4 ASGNI4 line 1720 ;1720: } LABELV $571 line 1722 ;1721: ;1722: if (!wDisable || !(wDisable & (1 << WP_BRYAR_PISTOL))) ADDRLP4 824 CNSTI4 0 ASGNI4 ADDRLP4 88 INDIRI4 ADDRLP4 824 INDIRI4 EQI4 $577 ADDRLP4 88 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 824 INDIRI4 NEI4 $575 LABELV $577 line 1723 ;1723: { line 1724 ;1724: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL ); ADDRLP4 828 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 828 INDIRP4 ADDRLP4 828 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1725 ;1725: } ADDRGP4 $576 JUMPV LABELV $575 line 1726 ;1726: else if (g_gametype.integer == GT_JEDIMASTER) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 2 NEI4 $578 line 1727 ;1727: { line 1728 ;1728: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL ); ADDRLP4 828 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 828 INDIRP4 ADDRLP4 828 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1729 ;1729: } LABELV $578 LABELV $576 line 1731 ;1730: ;1731: if (g_gametype.integer == GT_JEDIMASTER) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 2 NEI4 $581 line 1732 ;1732: { line 1733 ;1733: client->ps.stats[STAT_WEAPONS] &= ~(1 << WP_SABER); ADDRLP4 828 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 828 INDIRP4 ADDRLP4 828 INDIRP4 INDIRI4 CNSTI4 -5 BANDI4 ASGNI4 line 1734 ;1734: client->ps.stats[STAT_WEAPONS] |= (1 << WP_STUN_BATON); ADDRLP4 832 ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 ASGNP4 ADDRLP4 832 INDIRP4 ADDRLP4 832 INDIRP4 INDIRI4 CNSTI4 2 BORI4 ASGNI4 line 1735 ;1735: } LABELV $581 line 1737 ;1736: ;1737: if (client->ps.stats[STAT_WEAPONS] & (1 << WP_BRYAR_PISTOL)) ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $584 line 1738 ;1738: { line 1739 ;1739: client->ps.weapon = WP_BRYAR_PISTOL; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 3 ASGNI4 line 1740 ;1740: } ADDRGP4 $585 JUMPV LABELV $584 line 1741 ;1741: else if (client->ps.stats[STAT_WEAPONS] & (1 << WP_SABER)) ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $586 line 1742 ;1742: { line 1743 ;1743: client->ps.weapon = WP_SABER; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 2 ASGNI4 line 1744 ;1744: } ADDRGP4 $587 JUMPV LABELV $586 line 1746 ;1745: else ;1746: { line 1747 ;1747: client->ps.weapon = WP_STUN_BATON; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 1 ASGNI4 line 1748 ;1748: } LABELV $587 LABELV $585 line 1755 ;1749: ;1750: /* ;1751: client->ps.stats[STAT_HOLDABLE_ITEMS] |= ( 1 << HI_BINOCULARS ); ;1752: client->ps.stats[STAT_HOLDABLE_ITEM] = BG_GetItemIndexByTag(HI_BINOCULARS, IT_HOLDABLE); ;1753: */ ;1754: ;1755: client->ps.stats[STAT_HOLDABLE_ITEMS] = 0; ADDRLP4 0 INDIRP4 CNSTI4 224 ADDP4 CNSTI4 0 ASGNI4 line 1756 ;1756: client->ps.stats[STAT_HOLDABLE_ITEM] = 0; ADDRLP4 0 INDIRP4 CNSTI4 220 ADDP4 CNSTI4 0 ASGNI4 line 1758 ;1757: ;1758: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) ADDRLP4 0 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $588 line 1759 ;1759: { line 1760 ;1760: client->ps.stats[STAT_WEAPONS] = 0; ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 CNSTI4 0 ASGNI4 line 1761 ;1761: client->ps.stats[STAT_HOLDABLE_ITEMS] = 0; ADDRLP4 0 INDIRP4 CNSTI4 224 ADDP4 CNSTI4 0 ASGNI4 line 1762 ;1762: client->ps.stats[STAT_HOLDABLE_ITEM] = 0; ADDRLP4 0 INDIRP4 CNSTI4 220 ADDP4 CNSTI4 0 ASGNI4 line 1763 ;1763: } LABELV $588 line 1765 ;1764: ;1765: client->ps.ammo[AMMO_BLASTER] = 100; //ammoData[AMMO_BLASTER].max; //100 seems fair. ADDRLP4 0 INDIRP4 CNSTI4 416 ADDP4 CNSTI4 100 ASGNI4 line 1778 ;1766:// client->ps.ammo[AMMO_POWERCELL] = ammoData[AMMO_POWERCELL].max; ;1767:// client->ps.ammo[AMMO_FORCE] = ammoData[AMMO_FORCE].max; ;1768:// client->ps.ammo[AMMO_METAL_BOLTS] = ammoData[AMMO_METAL_BOLTS].max; ;1769:// client->ps.ammo[AMMO_ROCKETS] = ammoData[AMMO_ROCKETS].max; ;1770:/* ;1771: client->ps.stats[STAT_WEAPONS] = ( 1 << WP_BRYAR_PISTOL); ;1772: if ( g_gametype.integer == GT_TEAM ) { ;1773: client->ps.ammo[WP_BRYAR_PISTOL] = 50; ;1774: } else { ;1775: client->ps.ammo[WP_BRYAR_PISTOL] = 100; ;1776: } ;1777:*/ ;1778: client->ps.rocketLockIndex = MAX_CLIENTS; ADDRLP4 0 INDIRP4 CNSTI4 580 ADDP4 CNSTI4 32 ASGNI4 line 1779 ;1779: client->ps.rocketLockTime = 0; ADDRLP4 0 INDIRP4 CNSTI4 588 ADDP4 CNSTF4 0 ASGNF4 line 1790 ;1780: ;1781: //rww - Set here to initialize the circling seeker drone to off. ;1782: //A quick note about this so I don't forget how it works again: ;1783: //ps.genericEnemyIndex is kept in sync between the server and client. ;1784: //When it gets set then an entitystate value of the same name gets ;1785: //set along with an entitystate flag in the shared bg code. Which ;1786: //is why a value needs to be both on the player state and entity state. ;1787: //(it doesn't seem to just carry over the entitystate value automatically ;1788: //because entity state value is derived from player state data or some ;1789: //such) ;1790: client->ps.genericEnemyIndex = -1; ADDRLP4 0 INDIRP4 CNSTI4 612 ADDP4 CNSTI4 -1 ASGNI4 line 1792 ;1791: ;1792: client->ps.isJediMaster = qfalse; ADDRLP4 0 INDIRP4 CNSTI4 604 ADDP4 CNSTI4 0 ASGNI4 line 1794 ;1793: ;1794: client->ps.fallingToDeath = 0; ADDRLP4 0 INDIRP4 CNSTI4 1340 ADDP4 CNSTI4 0 ASGNI4 line 1797 ;1795: ;1796: //Do per-spawn force power initialization ;1797: WP_SpawnInitForcePowers( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 WP_SpawnInitForcePowers CALLV pop line 1800 ;1798: ;1799: // health will count down towards max_health ;1800: ent->health = client->ps.stats[STAT_HEALTH] = client->ps.stats[STAT_MAX_HEALTH] * 1.25; ADDRLP4 832 CNSTF4 1067450368 ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 216 ADDP4 ADDRLP4 832 INDIRI4 ASGNI4 ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 ADDRLP4 832 INDIRI4 ASGNI4 line 1803 ;1801: ;1802: // Start with a small amount of armor as well. ;1803: client->ps.stats[STAT_ARMOR] = client->ps.stats[STAT_MAX_HEALTH] * 0.25; ADDRLP4 0 INDIRP4 CNSTI4 236 ADDP4 CNSTF4 1048576000 ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 line 1805 ;1804: ;1805: G_SetOrigin( ent, spawn_origin ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 76 ARGP4 ADDRGP4 G_SetOrigin CALLV pop line 1806 ;1806: VectorCopy( spawn_origin, client->ps.origin ); ADDRLP4 0 INDIRP4 CNSTI4 20 ADDP4 ADDRLP4 76 INDIRB ASGNB 12 line 1809 ;1807: ;1808: // the respawned flag will be cleared after the attack and jump keys come up ;1809: client->ps.pm_flags |= PMF_RESPAWNED; ADDRLP4 840 ADDRLP4 0 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 840 INDIRP4 ADDRLP4 840 INDIRP4 INDIRI4 CNSTI4 512 BORI4 ASGNI4 line 1811 ;1810: ;1811: trap_GetUsercmd( client - level.clients, &ent->client->pers.cmd ); ADDRLP4 0 INDIRP4 CVPU4 4 ADDRGP4 level INDIRP4 CVPU4 4 SUBU4 CVUI4 4 CNSTI4 1756 DIVI4 ARGI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 ARGP4 ADDRGP4 trap_GetUsercmd CALLV pop line 1812 ;1812: SetClientViewAngle( ent, spawn_angles ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 92 ARGP4 ADDRGP4 SetClientViewAngle CALLV pop line 1814 ;1813: ;1814: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $590 line 1816 ;1815: ;1816: } else { ADDRGP4 $591 JUMPV LABELV $590 line 1817 ;1817: G_KillBox( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_KillBox CALLV pop line 1818 ;1818: trap_LinkEntity (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 1821 ;1819: ;1820: // force the base weapon up ;1821: client->ps.weapon = WP_BRYAR_PISTOL; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 3 ASGNI4 line 1822 ;1822: client->ps.weaponstate = FIRST_WEAPON; ADDRLP4 0 INDIRP4 CNSTI4 152 ADDP4 CNSTI4 3 ASGNI4 line 1824 ;1823: ;1824: } LABELV $591 line 1827 ;1825: ;1826: // don't allow full run speed for a bit ;1827: client->ps.pm_flags |= PMF_TIME_KNOCKBACK; ADDRLP4 844 ADDRLP4 0 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 844 INDIRP4 ADDRLP4 844 INDIRP4 INDIRI4 CNSTI4 64 BORI4 ASGNI4 line 1828 ;1828: client->ps.pm_time = 100; ADDRLP4 0 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 100 ASGNI4 line 1830 ;1829: ;1830: client->respawnTime = level.time; ADDRLP4 0 INDIRP4 CNSTI4 1672 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1831 ;1831: client->inactivityTime = level.time + g_inactivity.integer * 1000; ADDRLP4 0 INDIRP4 CNSTI4 1676 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 1000 ADDRGP4 g_inactivity+12 INDIRI4 MULI4 ADDI4 ASGNI4 line 1832 ;1832: client->latched_buttons = 0; ADDRLP4 0 INDIRP4 CNSTI4 1592 ADDP4 CNSTI4 0 ASGNI4 line 1835 ;1833: ;1834: // set default animations ;1835: client->ps.torsoAnim = WeaponReadyAnim[client->ps.weapon]; ADDRLP4 0 INDIRP4 CNSTI4 100 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 WeaponReadyAnim ADDP4 INDIRI4 ASGNI4 line 1836 ;1836: client->ps.legsAnim = WeaponReadyAnim[client->ps.weapon]; ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 WeaponReadyAnim ADDP4 INDIRI4 ASGNI4 line 1838 ;1837: ;1838: if ( level.intermissiontime ) { ADDRGP4 level+9008 INDIRI4 CNSTI4 0 EQI4 $595 line 1839 ;1839: MoveClientToIntermission( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 MoveClientToIntermission CALLV pop line 1840 ;1840: } else { ADDRGP4 $596 JUMPV LABELV $595 line 1842 ;1841: // fire the targets of the spawn point ;1842: G_UseTargets( spawnPoint, ent ); ADDRLP4 72 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_UseTargets CALLV pop line 1846 ;1843: ;1844: // select the highest weapon number available, after any ;1845: // spawn given items have fired ;1846: client->ps.weapon = 1; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 1 ASGNI4 line 1847 ;1847: for ( i = WP_NUM_WEAPONS - 1 ; i > 0 ; i-- ) { ADDRLP4 4 CNSTI4 15 ASGNI4 LABELV $598 line 1848 ;1848: if ( client->ps.stats[STAT_WEAPONS] & ( 1 << i ) ) { ADDRLP4 0 INDIRP4 CNSTI4 232 ADDP4 INDIRI4 CNSTI4 1 ADDRLP4 4 INDIRI4 LSHI4 BANDI4 CNSTI4 0 EQI4 $602 line 1849 ;1849: client->ps.weapon = i; ADDRLP4 0 INDIRP4 CNSTI4 148 ADDP4 ADDRLP4 4 INDIRI4 ASGNI4 line 1850 ;1850: break; ADDRGP4 $600 JUMPV LABELV $602 line 1852 ;1851: } ;1852: } LABELV $599 line 1847 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 4 INDIRI4 CNSTI4 0 GTI4 $598 LABELV $600 line 1853 ;1853: } LABELV $596 line 1857 ;1854: ;1855: // run a client frame to drop exactly to the floor, ;1856: // initialize animations and other things ;1857: client->ps.commandTime = level.time - 100; ADDRLP4 0 INDIRP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 SUBI4 ASGNI4 line 1858 ;1858: ent->client->pers.cmd.serverTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1859 ;1859: ClientThink( ent-g_entities ); ADDRFP4 0 INDIRP4 CVPU4 4 ADDRGP4 g_entities CVPU4 4 SUBU4 CVUI4 4 CNSTI4 828 DIVI4 ARGI4 ADDRGP4 ClientThink CALLV pop line 1862 ;1860: ;1861: // positively link the client, even if the command times are weird ;1862: if ( ent->client->sess.sessionTeam != TEAM_SPECTATOR ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 EQI4 $606 line 1863 ;1863: BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue ); ADDRLP4 0 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityState CALLV pop line 1864 ;1864: VectorCopy( ent->client->ps.origin, ent->r.currentOrigin ); ADDRLP4 856 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 856 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 856 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1865 ;1865: trap_LinkEntity( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 1866 ;1866: } LABELV $606 line 1868 ;1867: ;1868: if (g_spawnInvulnerability.integer) ADDRGP4 g_spawnInvulnerability+12 INDIRI4 CNSTI4 0 EQI4 $608 line 1869 ;1869: { line 1870 ;1870: ent->client->ps.eFlags |= EF_INVULNERABLE; ADDRLP4 856 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 856 INDIRP4 ADDRLP4 856 INDIRP4 INDIRI4 CNSTI4 67108864 BORI4 ASGNI4 line 1871 ;1871: ent->client->invulnerableTimer = level.time + g_spawnInvulnerability.integer; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 ADDRGP4 level+32 INDIRI4 ADDRGP4 g_spawnInvulnerability+12 INDIRI4 ADDI4 ASGNI4 line 1872 ;1872: } LABELV $608 line 1875 ;1873: ;1874: // run the presend to set anything else ;1875: ClientEndFrame( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ClientEndFrame CALLV pop line 1878 ;1876: ;1877: // clear entity state values ;1878: BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue ); ADDRLP4 0 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityState CALLV pop line 1879 ;1879:} LABELV $530 endproc ClientSpawn 860 16 export ClientDisconnect proc ClientDisconnect 24 8 line 1894 ;1880: ;1881: ;1882:/* ;1883:=========== ;1884:ClientDisconnect ;1885: ;1886:Called when a player drops from the server. ;1887:Will not be called between levels. ;1888: ;1889:This should NOT be called directly by any game logic, ;1890:call trap_DropClient(), which will call this and do ;1891:server system housekeeping. ;1892:============ ;1893:*/ ;1894:void ClientDisconnect( int clientNum ) { line 1901 ;1895: gentity_t *ent; ;1896: gentity_t *tent; ;1897: int i; ;1898: ;1899: // cleanup if we are kicking a bot that ;1900: // hasn't spawned yet ;1901: G_RemoveQueuedBotBegin( clientNum ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_RemoveQueuedBotBegin CALLV pop line 1903 ;1902: ;1903: ent = g_entities + clientNum; ADDRLP4 4 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1904 ;1904: if ( !ent->client ) { ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $614 line 1905 ;1905: return; ADDRGP4 $613 JUMPV LABELV $614 line 1908 ;1906: } ;1907: ;1908: i = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $617 JUMPV LABELV $616 line 1911 ;1909: ;1910: while (i < NUM_FORCE_POWERS) ;1911: { line 1912 ;1912: if (ent->client->ps.fd.forcePowersActive & (1 << i)) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 836 ADDP4 INDIRI4 CNSTI4 1 ADDRLP4 0 INDIRI4 LSHI4 BANDI4 CNSTI4 0 EQI4 $619 line 1913 ;1913: { line 1914 ;1914: WP_ForcePowerStop(ent, i); ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 0 INDIRI4 ARGI4 ADDRGP4 WP_ForcePowerStop CALLV pop line 1915 ;1915: } LABELV $619 line 1916 ;1916: i++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1917 ;1917: } LABELV $617 line 1910 ADDRLP4 0 INDIRI4 CNSTI4 18 LTI4 $616 line 1919 ;1918: ;1919: i = TRACK_CHANNEL_1; ADDRLP4 0 CNSTI4 51 ASGNI4 ADDRGP4 $622 JUMPV LABELV $621 line 1922 ;1920: ;1921: while (i < NUM_TRACK_CHANNELS) ;1922: { line 1923 ;1923: if (ent->client->ps.fd.killSoundEntIndex[i-50] && ent->client->ps.fd.killSoundEntIndex[i-50] < MAX_GENTITIES && ent->client->ps.fd.killSoundEntIndex[i-50] > 0) ADDRLP4 12 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 CNSTI4 200 SUBI4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1188 ADDP4 ADDP4 INDIRI4 ASGNI4 ADDRLP4 16 CNSTI4 0 ASGNI4 ADDRLP4 12 INDIRI4 ADDRLP4 16 INDIRI4 EQI4 $624 ADDRLP4 12 INDIRI4 CNSTI4 1024 GEI4 $624 ADDRLP4 12 INDIRI4 ADDRLP4 16 INDIRI4 LEI4 $624 line 1924 ;1924: { line 1925 ;1925: G_MuteSound(ent->client->ps.fd.killSoundEntIndex[i-50], CHAN_VOICE); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 CNSTI4 200 SUBI4 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1188 ADDP4 ADDP4 INDIRI4 ARGI4 CNSTI4 3 ARGI4 ADDRGP4 G_MuteSound CALLV pop line 1926 ;1926: } LABELV $624 line 1927 ;1927: i++; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1928 ;1928: } LABELV $622 line 1921 ADDRLP4 0 INDIRI4 CNSTI4 56 LTI4 $621 line 1929 ;1929: i = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1932 ;1930: ;1931: // stop any following clients ;1932: for ( i = 0 ; i < level.maxclients ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $629 JUMPV LABELV $626 line 1933 ;1933: if ( level.clients[i].sess.sessionTeam == TEAM_SPECTATOR ADDRLP4 12 CNSTI4 1756 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $631 ADDRLP4 12 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 2 NEI4 $631 ADDRLP4 12 INDIRP4 CNSTI4 1532 ADDP4 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $631 line 1935 ;1934: && level.clients[i].sess.spectatorState == SPECTATOR_FOLLOW ;1935: && level.clients[i].sess.spectatorClient == clientNum ) { line 1936 ;1936: StopFollowing( &g_entities[i] ); CNSTI4 828 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ARGP4 ADDRGP4 StopFollowing CALLV pop line 1937 ;1937: } LABELV $631 line 1938 ;1938: } LABELV $627 line 1932 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $629 ADDRLP4 0 INDIRI4 ADDRGP4 level+24 INDIRI4 LTI4 $626 line 1941 ;1939: ;1940: // send effect if they were completely connected ;1941: if ( ent->client->pers.connected == CON_CONNECTED ADDRLP4 12 ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 NEI4 $633 ADDRLP4 12 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 EQI4 $633 line 1942 ;1942: && ent->client->sess.sessionTeam != TEAM_SPECTATOR ) { line 1943 ;1943: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_OUT ); ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 20 ADDP4 ARGP4 CNSTI4 60 ARGI4 ADDRLP4 16 ADDRGP4 G_TempEntity CALLP4 ASGNP4 ADDRLP4 8 ADDRLP4 16 INDIRP4 ASGNP4 line 1944 ;1944: tent->s.clientNum = ent->s.clientNum; ADDRLP4 20 CNSTI4 220 ASGNI4 ADDRLP4 8 INDIRP4 ADDRLP4 20 INDIRI4 ADDP4 ADDRLP4 4 INDIRP4 ADDRLP4 20 INDIRI4 ADDP4 INDIRI4 ASGNI4 line 1948 ;1945: ;1946: // They don't get to take powerups with them! ;1947: // Especially important for stuff like CTF flags ;1948: TossClientItems( ent ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 TossClientItems CALLV pop line 1949 ;1949: } LABELV $633 line 1951 ;1950: ;1951: G_LogPrintf( "ClientDisconnect: %i\n", clientNum ); ADDRGP4 $635 ARGP4 ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_LogPrintf CALLV pop line 1954 ;1952: ;1953: // if we are playing in tourney mode and losing, give a win to the other player ;1954: if ( (g_gametype.integer == GT_TOURNAMENT ) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 3 NEI4 $636 ADDRLP4 16 CNSTI4 0 ASGNI4 ADDRGP4 level+9008 INDIRI4 ADDRLP4 16 INDIRI4 NEI4 $636 ADDRGP4 level+16 INDIRI4 ADDRLP4 16 INDIRI4 NEI4 $636 ADDRGP4 level+84+4 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $636 line 1956 ;1955: && !level.intermissiontime ;1956: && !level.warmupTime && level.sortedClients[1] == clientNum ) { line 1957 ;1957: level.clients[ level.sortedClients[0] ].sess.wins++; ADDRLP4 20 CNSTI4 1756 ADDRGP4 level+84 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 CNSTI4 1536 ADDP4 ASGNP4 ADDRLP4 20 INDIRP4 ADDRLP4 20 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1958 ;1958: ClientUserinfoChanged( level.sortedClients[0] ); ADDRGP4 level+84 INDIRI4 ARGI4 ADDRGP4 ClientUserinfoChanged CALLV pop line 1959 ;1959: } LABELV $636 line 1961 ;1960: ;1961: trap_UnlinkEntity (ent); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 1962 ;1962: ent->s.modelindex = 0; ADDRLP4 4 INDIRP4 CNSTI4 212 ADDP4 CNSTI4 0 ASGNI4 line 1963 ;1963: ent->inuse = qfalse; ADDRLP4 4 INDIRP4 CNSTI4 412 ADDP4 CNSTI4 0 ASGNI4 line 1964 ;1964: ent->classname = "disconnected"; ADDRLP4 4 INDIRP4 CNSTI4 416 ADDP4 ADDRGP4 $645 ASGNP4 line 1965 ;1965: ent->client->pers.connected = CON_DISCONNECTED; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1368 ADDP4 CNSTI4 0 ASGNI4 line 1966 ;1966: ent->client->ps.persistant[PERS_TEAM] = TEAM_FREE; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 292 ADDP4 CNSTI4 0 ASGNI4 line 1967 ;1967: ent->client->sess.sessionTeam = TEAM_FREE; ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 CNSTI4 0 ASGNI4 line 1969 ;1968: ;1969: trap_SetConfigstring( CS_PLAYERS + clientNum, ""); ADDRFP4 0 INDIRI4 CNSTI4 544 ADDI4 ARGI4 ADDRGP4 $646 ARGP4 ADDRGP4 trap_SetConfigstring CALLV pop line 1971 ;1970: ;1971: CalculateRanks(); ADDRGP4 CalculateRanks CALLV pop line 1973 ;1972: ;1973: if ( ent->r.svFlags & SVF_BOT ) { ADDRLP4 4 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $647 line 1974 ;1974: BotAIShutdownClient( clientNum, qfalse ); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 BotAIShutdownClient CALLI4 pop line 1975 ;1975: } LABELV $647 line 1977 ;1976: ;1977: G_ClearClientLog(clientNum); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 G_ClearClientLog CALLV pop line 1978 ;1978:} LABELV $613 endproc ClientDisconnect 24 8 import G_WriteClientSessionData bss export Client_Force align 4 LABELV Client_Force skip 15104 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 import g_timeouttospec import g_forceDodge import g_dismember import g_singlePlayer import g_enableBreath import g_enableDust import g_rankings import pmove_msec import pmove_fixed import g_smoothClients import g_blueteam import g_redteam import g_debugUp import g_debugRight import g_debugForward import g_filterBan import g_banIPs import g_teamForceBalance import g_teamAutoJoin import g_allowVote import g_blood import g_doWarmup import g_warmup import g_motd import g_synchronousClients import g_adaptRespawn import g_weaponTeamRespawn import g_weaponRespawn import g_debugDamage import g_debugAlloc import g_debugMove import g_inactivity import g_forcerespawn import g_quadfactor import g_knockback import g_speed import g_gravity import g_needpass import g_password import g_friendlySaber import g_friendlyFire import g_saberInterpolate import g_capturelimit import g_timelimit import g_duel_fraglimit import g_fraglimit import g_duelWeaponDisable import g_weaponDisable import g_forcePowerDisable import g_spawnInvulnerability import g_forceRegenTime import g_saberLocking import g_privateDuel import g_forceBasedTeams import g_maxForceRank import g_dmflags import g_autoMapCycle import g_restarted import g_maxGameClients import g_maxclients import g_cheats import g_dedicated import g_gametype import g_entities import level import Pickup_Team import CheckTeamStatus import TeamplayInfoMessage import Team_GetLocationMsg import Team_GetLocation import SelectSagaSpawnPoint import SelectCTFSpawnPoint import Team_FreeEntity import Team_ReturnFlag import Team_InitGame import Team_CheckHurtCarrier import Team_FragBonuses import Team_DroppedFlagThink import AddTeamScore import TeamColorString import OtherTeamName import TeamName import OtherTeam import BotAIStartFrame import BotAIShutdownClient import BotAISetupClient import BotAILoadMap import BotAIShutdown import BotAISetup import B_CleanupAlloc import B_InitAlloc import InFieldOfVision import BotOrder import OrgVisible import InitSagaMode import G_ClearClientLog import G_LogExit import G_LogWeaponOutput import G_LogWeaponInit import G_LogWeaponItem import G_LogWeaponPowerup import G_LogWeaponFrag import G_LogWeaponDeath import G_LogWeaponKill import G_LogWeaponDamage import G_LogWeaponFire import G_LogWeaponPickup import Jedi_DodgeEvasion import ForceTelepathy import ForceThrow import ForceSeeing import ForceTeamForceReplenish import ForceTeamHeal import ForceAbsorb import ForceProtect import ForceGrip import ForceRage import ForceSpeed import ForceHeal import ForcePowerUsableOn import WP_ForcePowersUpdate import WP_SpawnInitForcePowers import WP_InitForcePowers import WP_SaberInitBladeData import WP_SaberCanBlock import WP_SaberPositionUpdate import WP_ForcePowerStop import HasSetSaberOnly import G_PreDefSound import 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 G_GetStripEdString import G_Error import G_Printf import SendScoreboardMessageToAllClients import G_LogPrintf import G_RunThink import CheckTeamLeader import SetLeader import FindIntermissionPoint import g_ff_objectives import DeathmatchScoreboardMessage import G_SetStats import MoveClientToIntermission import BlowDetpacks import FireWeapon import G_FilterPacket import G_ProcessIPBans import ConsoleCommand import CalculateRanks import AddScore import player_die import BeginIntermission 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 precachedKyle import forcePowerDarkLight import WeaponAttackAnim import WeaponReadyAnim import BG_OutOfMemory import BG_StringAlloc import BG_TempFree import BG_TempAlloc import BG_AllocUnaligned import BG_Alloc import BG_CanUseFPNow import BG_HasYsalamiri import BG_GetItemIndexByTag import BG_ParseAnimationFile import BG_PlayerTouchesItem import BG_G2PlayerAngles import BG_PlayerStateToEntityStateExtraPolate import BG_PlayerStateToEntityState import BG_TouchJumpPad import BG_AddPredictableEventToPlayerstate import BG_EvaluateTrajectoryDelta import BG_EvaluateTrajectory import BG_ForcePowerDrain import BG_SaberStartTransAnim import BG_InDeathAnim import BG_InRoll import BG_SaberInSpecialAttack import BG_SpinningSaberAnim import BG_FlippingAnim import BG_SaberInIdle import BG_SaberInSpecial import BG_SaberInAttack import BG_DirectFlippingAnim import BG_InSaberStandAnim import BG_InSpecialJump import BG_LegalizedForcePowers import saberMoveData import BG_CanItemBeGrabbed import BG_FindItemForHoldable import BG_FindItemForPowerup import BG_FindItemForWeapon import BG_FindItem import vectoyaw import bg_numItems import bg_itemlist import Pmove import PM_UpdateViewAngles import pm import bgForcePowerCost import forceMasteryPoints import forceMasteryLevels import bgGlobalAnimations import BGPAFtextLoaded import forcePowerSorted import WP_MuzzlePoint import ammoData import weaponData import GetStringForID import GetIDForString import Q_irand import irand import flrand import Rand_Init import Com_Printf import Com_Error import Info_NextPair import Info_Validate import Info_SetValueForKey_Big import Info_SetValueForKey import Info_RemoveKey_big import Info_RemoveKey import Info_ValueForKey import va import Q_CleanStr import Q_PrintStrlen import Q_strcat import Q_strncpyz import Q_strrchr import Q_strupr import Q_strlwr import Q_stricmpn import Q_strncmp import Q_stricmp import Q_isalpha import Q_isupper import Q_islower import Q_isprint import Com_sprintf import Parse3DMatrix import Parse2DMatrix import Parse1DMatrix import SkipRestOfLine import SkipBracedSection import COM_MatchToken import COM_ParseWarning import COM_ParseError import COM_Compress import COM_ParseExt import COM_Parse import SkipWhitespace import COM_GetCurrentParseLine import COM_BeginParseSession import COM_DefaultExtension import COM_StripExtension import COM_SkipPath import Com_Clamp import PerpendicularVector import AngleVectors import MatrixMultiply import MakeNormalVectors import RotateAroundDirection import RotatePointAroundVector import ProjectPointOnPlane import PlaneFromPoints import AngleDelta import AngleNormalize180 import AngleNormalize360 import AnglesSubtract import AngleSubtract import LerpAngle import AngleMod import BoxOnPlaneSide import SetPlaneSignbits import AxisCopy import AxisClear import AnglesToAxis import vectoangles import Q_crandom import Q_random import Q_rand import Q_acos import Q_log2 import VectorRotate import Vector4Scale import VectorNormalize2 import VectorNormalize import CrossProduct import VectorInverse import VectorNormalizeFast import DistanceSquared import Distance import VectorLengthSquared import VectorLength import VectorCompare import AddPointToBounds import ClearBounds import RadiusFromBounds import NormalizeColor import ColorBytes4 import ColorBytes3 import _VectorMA import _VectorScale import _VectorCopy import _VectorAdd import _VectorSubtract import _DotProduct import ByteToDir import DirToByte import powf import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkBlue import colorLtBlue import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import colorTable import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import forceSpeedLevels import FloatSwap import LongSwap import ShortSwap import acos import fabs import abs import tan import atan2 import cos import sin import sqrt import floor import ceil import memcpy import memset import memmove import sscanf import vsprintf import _atoi import atoi import _atof import atof import toupper import tolower import strncpy import strstr import strchr import strcmp import strcpy import strcat import strlen import rand import srand import qsort lit align 1 LABELV $646 char 1 0 align 1 LABELV $645 char 1 100 char 1 105 char 1 115 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 0 align 1 LABELV $635 char 1 67 char 1 108 char 1 105 char 1 101 char 1 110 char 1 116 char 1 68 char 1 105 char 1 115 char 1 99 char 1 111 char 1 110 char 1 110 char 1 101 char 1 99 char 1 116 char 1 58 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $564 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 0 align 1 LABELV $529 char 1 67 char 1 108 char 1 105 char 1 101 char 1 110 char 1 116 char 1 66 char 1 101 char 1 103 char 1 105 char 1 110 char 1 58 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $528 char 1 80 char 1 76 char 1 69 char 1 78 char 1 84 char 1 69 char 1 82 char 1 0 align 1 LABELV $522 char 1 77 char 1 111 char 1 116 char 1 105 char 1 111 char 1 110 char 1 0 align 1 LABELV $521 char 1 114 char 1 116 char 1 105 char 1 98 char 1 105 char 1 97 char 1 0 align 1 LABELV $520 char 1 108 char 1 116 char 1 105 char 1 98 char 1 105 char 1 97 char 1 0 align 1 LABELV $519 char 1 114 char 1 114 char 1 97 char 1 100 char 1 105 char 1 117 char 1 115 char 1 0 align 1 LABELV $518 char 1 108 char 1 114 char 1 97 char 1 100 char 1 105 char 1 117 char 1 115 char 1 0 align 1 LABELV $517 char 1 116 char 1 104 char 1 111 char 1 114 char 1 97 char 1 99 char 1 105 char 1 99 char 1 0 align 1 LABELV $501 char 1 66 char 1 108 char 1 117 char 1 101 char 1 0 align 1 LABELV $496 char 1 82 char 1 101 char 1 100 char 1 0 align 1 LABELV $486 char 1 80 char 1 76 char 1 67 char 1 79 char 1 78 char 1 78 char 1 69 char 1 67 char 1 84 char 1 0 align 1 LABELV $485 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 10 char 1 34 char 1 0 align 1 LABELV $482 char 1 67 char 1 108 char 1 105 char 1 101 char 1 110 char 1 116 char 1 67 char 1 111 char 1 110 char 1 110 char 1 101 char 1 99 char 1 116 char 1 58 char 1 32 char 1 37 char 1 105 char 1 10 char 1 0 align 1 LABELV $481 char 1 66 char 1 111 char 1 116 char 1 67 char 1 111 char 1 110 char 1 110 char 1 101 char 1 99 char 1 116 char 1 102 char 1 97 char 1 105 char 1 108 char 1 101 char 1 100 char 1 0 align 1 LABELV $469 char 1 73 char 1 110 char 1 118 char 1 97 char 1 108 char 1 105 char 1 100 char 1 32 char 1 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 $467 char 1 110 char 1 111 char 1 110 char 1 101 char 1 0 align 1 LABELV $462 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 $458 char 1 66 char 1 97 char 1 110 char 1 110 char 1 101 char 1 100 char 1 46 char 1 0 align 1 LABELV $454 char 1 67 char 1 108 char 1 105 char 1 101 char 1 110 char 1 116 char 1 85 char 1 115 char 1 101 char 1 114 char 1 105 char 1 110 char 1 102 char 1 111 char 1 67 char 1 104 char 1 97 char 1 110 char 1 103 char 1 101 char 1 100 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 $453 char 1 110 char 1 92 char 1 37 char 1 115 char 1 92 char 1 116 char 1 92 char 1 37 char 1 105 char 1 92 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 92 char 1 37 char 1 115 char 1 92 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 92 char 1 37 char 1 115 char 1 92 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 92 char 1 37 char 1 115 char 1 92 char 1 99 char 1 49 char 1 92 char 1 37 char 1 115 char 1 92 char 1 99 char 1 50 char 1 92 char 1 37 char 1 115 char 1 92 char 1 104 char 1 99 char 1 92 char 1 37 char 1 105 char 1 92 char 1 119 char 1 92 char 1 37 char 1 105 char 1 92 char 1 108 char 1 92 char 1 37 char 1 105 char 1 92 char 1 116 char 1 116 char 1 92 char 1 37 char 1 100 char 1 92 char 1 116 char 1 108 char 1 92 char 1 37 char 1 100 char 1 0 align 1 LABELV $452 char 1 115 char 1 107 char 1 105 char 1 108 char 1 108 char 1 0 align 1 LABELV $451 char 1 110 char 1 92 char 1 37 char 1 115 char 1 92 char 1 116 char 1 92 char 1 37 char 1 105 char 1 92 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 92 char 1 37 char 1 115 char 1 92 char 1 99 char 1 49 char 1 92 char 1 37 char 1 115 char 1 92 char 1 99 char 1 50 char 1 92 char 1 37 char 1 115 char 1 92 char 1 104 char 1 99 char 1 92 char 1 37 char 1 105 char 1 92 char 1 119 char 1 92 char 1 37 char 1 105 char 1 92 char 1 108 char 1 92 char 1 37 char 1 105 char 1 92 char 1 115 char 1 107 char 1 105 char 1 108 char 1 108 char 1 92 char 1 37 char 1 115 char 1 92 char 1 116 char 1 116 char 1 92 char 1 37 char 1 100 char 1 92 char 1 116 char 1 108 char 1 92 char 1 37 char 1 100 char 1 0 align 1 LABELV $448 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 $447 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 $446 char 1 99 char 1 111 char 1 108 char 1 111 char 1 114 char 1 50 char 1 0 align 1 LABELV $445 char 1 99 char 1 111 char 1 108 char 1 111 char 1 114 char 1 49 char 1 0 align 1 LABELV $444 char 1 116 char 1 101 char 1 97 char 1 109 char 1 116 char 1 97 char 1 115 char 1 107 char 1 0 align 1 LABELV $440 char 1 116 char 1 101 char 1 97 char 1 109 char 1 111 char 1 118 char 1 101 char 1 114 char 1 108 char 1 97 char 1 121 char 1 0 align 1 LABELV $435 char 1 98 char 1 0 align 1 LABELV $434 char 1 98 char 1 108 char 1 117 char 1 101 char 1 0 align 1 LABELV $430 char 1 114 char 1 0 align 1 LABELV $429 char 1 114 char 1 101 char 1 100 char 1 0 align 1 LABELV $426 char 1 116 char 1 101 char 1 97 char 1 109 char 1 0 align 1 LABELV $420 char 1 102 char 1 111 char 1 114 char 1 99 char 1 101 char 1 112 char 1 111 char 1 119 char 1 101 char 1 114 char 1 115 char 1 0 align 1 LABELV $419 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 0 align 1 LABELV $418 char 1 116 char 1 101 char 1 97 char 1 109 char 1 95 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 0 align 1 LABELV $411 char 1 80 char 1 76 char 1 82 char 1 69 char 1 78 char 1 65 char 1 77 char 1 69 char 1 0 align 1 LABELV $410 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 32 char 1 37 char 1 115 char 1 10 char 1 34 char 1 0 align 1 LABELV $405 char 1 115 char 1 99 char 1 111 char 1 114 char 1 101 char 1 98 char 1 111 char 1 97 char 1 114 char 1 100 char 1 0 align 1 LABELV $400 char 1 110 char 1 97 char 1 109 char 1 101 char 1 0 align 1 LABELV $397 char 1 99 char 1 103 char 1 95 char 1 112 char 1 114 char 1 101 char 1 100 char 1 105 char 1 99 char 1 116 char 1 73 char 1 116 char 1 101 char 1 109 char 1 115 char 1 0 align 1 LABELV $396 char 1 108 char 1 111 char 1 99 char 1 97 char 1 108 char 1 104 char 1 111 char 1 115 char 1 116 char 1 0 align 1 LABELV $393 char 1 105 char 1 112 char 1 0 align 1 LABELV $392 char 1 92 char 1 110 char 1 97 char 1 109 char 1 101 char 1 92 char 1 98 char 1 97 char 1 100 char 1 105 char 1 110 char 1 102 char 1 111 char 1 0 align 1 LABELV $386 char 1 42 char 1 102 char 1 108 char 1 97 char 1 115 char 1 104 char 1 0 align 1 LABELV $380 char 1 99 char 1 114 char 1 97 char 1 110 char 1 105 char 1 117 char 1 109 char 1 0 align 1 LABELV $378 char 1 117 char 1 112 char 1 112 char 1 101 char 1 114 char 1 95 char 1 108 char 1 117 char 1 109 char 1 98 char 1 97 char 1 114 char 1 0 align 1 LABELV $376 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 95 char 1 114 char 1 111 char 1 111 char 1 116 char 1 0 align 1 LABELV $375 char 1 42 char 1 108 char 1 95 char 1 104 char 1 97 char 1 110 char 1 100 char 1 0 align 1 LABELV $374 char 1 42 char 1 114 char 1 95 char 1 104 char 1 97 char 1 110 char 1 100 char 1 0 align 1 LABELV $369 char 1 47 char 1 97 char 1 110 char 1 105 char 1 109 char 1 97 char 1 116 char 1 105 char 1 111 char 1 110 char 1 46 char 1 99 char 1 102 char 1 103 char 1 0 align 1 LABELV $366 char 1 70 char 1 97 char 1 105 char 1 108 char 1 101 char 1 100 char 1 32 char 1 116 char 1 111 char 1 32 char 1 108 char 1 111 char 1 97 char 1 100 char 1 32 char 1 97 char 1 110 char 1 105 char 1 109 char 1 97 char 1 116 char 1 105 char 1 111 char 1 110 char 1 32 char 1 102 char 1 105 char 1 108 char 1 101 char 1 32 char 1 37 char 1 115 char 1 10 char 1 0 align 1 LABELV $365 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 115 char 1 47 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 115 char 1 47 char 1 95 char 1 104 char 1 117 char 1 109 char 1 97 char 1 110 char 1 111 char 1 105 char 1 100 char 1 47 char 1 97 char 1 110 char 1 105 char 1 109 char 1 97 char 1 116 char 1 105 char 1 111 char 1 110 char 1 46 char 1 99 char 1 102 char 1 103 char 1 0 align 1 LABELV $354 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 115 char 1 47 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 115 char 1 47 char 1 107 char 1 121 char 1 108 char 1 101 char 1 47 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 46 char 1 103 char 1 108 char 1 109 char 1 0 align 1 LABELV $347 char 1 80 char 1 97 char 1 100 char 1 97 char 1 119 char 1 97 char 1 110 char 1 0 align 1 LABELV $245 char 1 98 char 1 111 char 1 100 char 1 121 char 1 113 char 1 117 char 1 101 char 1 0 align 1 LABELV $225 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 102 char 1 105 char 1 110 char 1 100 char 1 32 char 1 97 char 1 32 char 1 115 char 1 112 char 1 97 char 1 119 char 1 110 char 1 32 char 1 112 char 1 111 char 1 105 char 1 110 char 1 116 char 1 0 align 1 LABELV $149 char 1 66 char 1 69 char 1 67 char 1 79 char 1 77 char 1 69 char 1 74 char 1 77 char 1 0 align 1 LABELV $148 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 $147 char 1 99 char 1 112 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 $141 char 1 37 char 1 105 char 1 0 align 1 LABELV $108 char 1 109 char 1 111 char 1 100 char 1 101 char 1 108 char 1 115 char 1 47 char 1 119 char 1 101 char 1 97 char 1 112 char 1 111 char 1 110 char 1 115 char 1 50 char 1 47 char 1 115 char 1 97 char 1 98 char 1 101 char 1 114 char 1 47 char 1 115 char 1 97 char 1 98 char 1 101 char 1 114 char 1 95 char 1 119 char 1 46 char 1 103 char 1 108 char 1 109 char 1 0 align 1 LABELV $103 char 1 45 char 1 49 char 1 0 align 1 LABELV $87 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 100 char 1 101 char 1 97 char 1 116 char 1 104 char 1 109 char 1 97 char 1 116 char 1 99 char 1 104 char 1 0 align 1 LABELV $83 char 1 110 char 1 111 char 1 104 char 1 117 char 1 109 char 1 97 char 1 110 char 1 115 char 1 0 align 1 LABELV $80 char 1 48 char 1 0 align 1 LABELV $79 char 1 110 char 1 111 char 1 98 char 1 111 char 1 116 char 1 115 char 1 0