export P_SetTwitchInfo code proc P_SetTwitchInfo 4 0 file "../g_active.c" line 7 ;1:// Copyright (C) 1999-2000 Id Software, Inc. ;2:// ;3: ;4:#include "g_local.h" ;5: ;6:void P_SetTwitchInfo(gclient_t *client) ;7:{ line 8 ;8: client->ps.painTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 192 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 9 ;9: client->ps.painDirection ^= 1; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 196 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 CNSTI4 1 BXORI4 ASGNI4 line 10 ;10:} LABELV $78 endproc P_SetTwitchInfo 4 0 export P_DamageFeedback proc P_DamageFeedback 48 12 line 22 ;11: ;12:/* ;13:=============== ;14:G_DamageFeedback ;15: ;16:Called just before a snapshot is sent to the given player. ;17:Totals up all damage and generates both the player_state_t ;18:damage values to that client for pain blends and kicks, and ;19:global pain sound events for all clients. ;20:=============== ;21:*/ ;22:void P_DamageFeedback( gentity_t *player ) { line 27 ;23: gclient_t *client; ;24: float count; ;25: vec3_t angles; ;26: ;27: client = player->client; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 28 ;28: if ( client->ps.pm_type == PM_DEAD ) { ADDRLP4 20 CNSTI4 4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 20 INDIRI4 ADDP4 INDIRI4 ADDRLP4 20 INDIRI4 NEI4 $81 line 29 ;29: return; ADDRGP4 $80 JUMPV LABELV $81 line 33 ;30: } ;31: ;32: // total points of damage shot at the player this frame ;33: count = client->damage_blood + client->damage_armor; ADDRLP4 4 ADDRLP4 0 INDIRP4 CNSTI4 1612 ADDP4 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 1608 ADDP4 INDIRI4 ADDI4 CVIF4 4 ASGNF4 line 34 ;34: if ( count == 0 ) { ADDRLP4 4 INDIRF4 CNSTF4 0 NEF4 $83 line 35 ;35: return; // didn't take any damage ADDRGP4 $80 JUMPV LABELV $83 line 38 ;36: } ;37: ;38: if ( count > 255 ) { ADDRLP4 4 INDIRF4 CNSTF4 1132396544 LEF4 $85 line 39 ;39: count = 255; ADDRLP4 4 CNSTF4 1132396544 ASGNF4 line 40 ;40: } LABELV $85 line 46 ;41: ;42: // send the information to the client ;43: ;44: // world damage (falling, slime, etc) uses a special code ;45: // to make the blend blob centered instead of positional ;46: if ( client->damage_fromWorld ) { ADDRLP4 0 INDIRP4 CNSTI4 1632 ADDP4 INDIRI4 CNSTI4 0 EQI4 $87 line 47 ;47: client->ps.damagePitch = 255; ADDRLP4 0 INDIRP4 CNSTI4 180 ADDP4 CNSTI4 255 ASGNI4 line 48 ;48: client->ps.damageYaw = 255; ADDRLP4 0 INDIRP4 CNSTI4 176 ADDP4 CNSTI4 255 ASGNI4 line 50 ;49: ;50: client->damage_fromWorld = qfalse; ADDRLP4 0 INDIRP4 CNSTI4 1632 ADDP4 CNSTI4 0 ASGNI4 line 51 ;51: } else { ADDRGP4 $88 JUMPV LABELV $87 line 52 ;52: vectoangles( client->damage_from, angles ); ADDRLP4 0 INDIRP4 CNSTI4 1620 ADDP4 ARGP4 ADDRLP4 8 ARGP4 ADDRGP4 vectoangles CALLV pop line 53 ;53: client->ps.damagePitch = angles[PITCH]/360.0 * 256; ADDRLP4 0 INDIRP4 CNSTI4 180 ADDP4 CNSTF4 1132462080 ADDRLP4 8 INDIRF4 CNSTF4 1135869952 DIVF4 MULF4 CVFI4 4 ASGNI4 line 54 ;54: client->ps.damageYaw = angles[YAW]/360.0 * 256; ADDRLP4 0 INDIRP4 CNSTI4 176 ADDP4 CNSTF4 1132462080 ADDRLP4 8+4 INDIRF4 CNSTF4 1135869952 DIVF4 MULF4 CVFI4 4 ASGNI4 line 55 ;55: } LABELV $88 line 58 ;56: ;57: // play an apropriate pain sound ;58: if ( (level.time > player->pain_debounce_time) && !(player->flags & FL_GODMODE) ) { ADDRLP4 28 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 level+32 INDIRI4 ADDRLP4 28 INDIRP4 CNSTI4 664 ADDP4 INDIRI4 LEI4 $90 ADDRLP4 28 INDIRP4 CNSTI4 472 ADDP4 INDIRI4 CNSTI4 16 BANDI4 CNSTI4 0 NEI4 $90 line 61 ;59: ;60: // don't do more than two pain sounds a second ;61: if ( level.time - client->ps.painTime < 500 ) { ADDRGP4 level+32 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 192 ADDP4 INDIRI4 SUBI4 CNSTI4 500 GEI4 $93 line 62 ;62: return; ADDRGP4 $80 JUMPV LABELV $93 line 64 ;63: } ;64: P_SetTwitchInfo(client); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 P_SetTwitchInfo CALLV pop line 65 ;65: player->pain_debounce_time = level.time + 700; ADDRFP4 0 INDIRP4 CNSTI4 664 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 700 ADDI4 ASGNI4 line 66 ;66: G_AddEvent( player, EV_PAIN, player->health ); ADDRLP4 32 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 32 INDIRP4 ARGP4 CNSTI4 77 ARGI4 ADDRLP4 32 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 67 ;67: client->ps.damageEvent++; ADDRLP4 36 ADDRLP4 0 INDIRP4 CNSTI4 172 ADDP4 ASGNP4 ADDRLP4 36 INDIRP4 ADDRLP4 36 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 69 ;68: ;69: if (client->damage_armor && !client->damage_blood) ADDRLP4 44 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 1608 ADDP4 INDIRI4 ADDRLP4 44 INDIRI4 EQI4 $97 ADDRLP4 0 INDIRP4 CNSTI4 1612 ADDP4 INDIRI4 ADDRLP4 44 INDIRI4 NEI4 $97 line 70 ;70: { line 71 ;71: client->ps.damageType = 1; //pure shields ADDRLP4 0 INDIRP4 CNSTI4 188 ADDP4 CNSTI4 1 ASGNI4 line 72 ;72: } ADDRGP4 $98 JUMPV LABELV $97 line 73 ;73: else if (client->damage_armor) ADDRLP4 0 INDIRP4 CNSTI4 1608 ADDP4 INDIRI4 CNSTI4 0 EQI4 $99 line 74 ;74: { line 75 ;75: client->ps.damageType = 2; //shields and health ADDRLP4 0 INDIRP4 CNSTI4 188 ADDP4 CNSTI4 2 ASGNI4 line 76 ;76: } ADDRGP4 $100 JUMPV LABELV $99 line 78 ;77: else ;78: { line 79 ;79: client->ps.damageType = 0; //pure health ADDRLP4 0 INDIRP4 CNSTI4 188 ADDP4 CNSTI4 0 ASGNI4 line 80 ;80: } LABELV $100 LABELV $98 line 81 ;81: } LABELV $90 line 84 ;82: ;83: ;84: client->ps.damageCount = count; ADDRLP4 0 INDIRP4 CNSTI4 184 ADDP4 ADDRLP4 4 INDIRF4 CVFI4 4 ASGNI4 line 89 ;85: ;86: // ;87: // clear totals ;88: // ;89: client->damage_blood = 0; ADDRLP4 0 INDIRP4 CNSTI4 1612 ADDP4 CNSTI4 0 ASGNI4 line 90 ;90: client->damage_armor = 0; ADDRLP4 0 INDIRP4 CNSTI4 1608 ADDP4 CNSTI4 0 ASGNI4 line 91 ;91: client->damage_knockback = 0; ADDRLP4 0 INDIRP4 CNSTI4 1616 ADDP4 CNSTI4 0 ASGNI4 line 92 ;92:} LABELV $80 endproc P_DamageFeedback 48 12 export P_WorldEffects proc P_WorldEffects 40 32 line 103 ;93: ;94: ;95: ;96:/* ;97:============= ;98:P_WorldEffects ;99: ;100:Check for lava / slime contents and drowning ;101:============= ;102:*/ ;103:void P_WorldEffects( gentity_t *ent ) { line 107 ;104: qboolean envirosuit; ;105: int waterlevel; ;106: ;107: if ( ent->client->noclip ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1576 ADDP4 INDIRI4 CNSTI4 0 EQI4 $102 line 108 ;108: ent->client->airOutTime = level.time + 12000; // don't need air ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1688 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 12000 ADDI4 ASGNI4 line 109 ;109: return; ADDRGP4 $101 JUMPV LABELV $102 line 112 ;110: } ;111: ;112: waterlevel = ent->waterlevel; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 748 ADDP4 INDIRI4 ASGNI4 line 114 ;113: ;114: envirosuit = ent->client->ps.powerups[PW_BATTLESUIT] > level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 352 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $107 ADDRLP4 8 CNSTI4 1 ASGNI4 ADDRGP4 $108 JUMPV LABELV $107 ADDRLP4 8 CNSTI4 0 ASGNI4 LABELV $108 ADDRLP4 4 ADDRLP4 8 INDIRI4 ASGNI4 line 119 ;115: ;116: // ;117: // check for drowning ;118: // ;119: if ( waterlevel == 3 ) { ADDRLP4 0 INDIRI4 CNSTI4 3 NEI4 $109 line 121 ;120: // envirosuit give air ;121: if ( envirosuit ) { ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $111 line 122 ;122: ent->client->airOutTime = level.time + 10000; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1688 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 10000 ADDI4 ASGNI4 line 123 ;123: } LABELV $111 line 126 ;124: ;125: // if out of air, start drowning ;126: if ( ent->client->airOutTime < level.time) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1688 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GEI4 $110 line 128 ;127: // drown! ;128: ent->client->airOutTime += 1000; ADDRLP4 12 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1688 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 1000 ADDI4 ASGNI4 line 129 ;129: if ( ent->health > 0 ) { ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 CNSTI4 0 LEI4 $110 line 131 ;130: // take more damage the longer underwater ;131: ent->damage += 2; ADDRLP4 16 ADDRFP4 0 INDIRP4 CNSTI4 688 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 16 INDIRP4 INDIRI4 CNSTI4 2 ADDI4 ASGNI4 line 132 ;132: if (ent->damage > 15) ADDRFP4 0 INDIRP4 CNSTI4 688 ADDP4 INDIRI4 CNSTI4 15 LEI4 $119 line 133 ;133: ent->damage = 15; ADDRFP4 0 INDIRP4 CNSTI4 688 ADDP4 CNSTI4 15 ASGNI4 LABELV $119 line 136 ;134: ;135: // play a gurp sound instead of a normal pain sound ;136: if (ent->health <= ent->damage) { ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 20 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 20 INDIRP4 CNSTI4 688 ADDP4 INDIRI4 GTI4 $121 line 137 ;137: G_Sound(ent, CHAN_VOICE, G_SoundIndex(/*"*drown.wav"*/"sound/player/gurp1.wav")); ADDRGP4 $123 ARGP4 ADDRLP4 24 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 3 ARGI4 ADDRLP4 24 INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 138 ;138: } else if (rand()&1) { ADDRGP4 $122 JUMPV LABELV $121 ADDRLP4 24 ADDRGP4 rand CALLI4 ASGNI4 ADDRLP4 24 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $124 line 139 ;139: G_Sound(ent, CHAN_VOICE, G_SoundIndex("sound/player/gurp1.wav")); ADDRGP4 $123 ARGP4 ADDRLP4 28 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 3 ARGI4 ADDRLP4 28 INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 140 ;140: } else { ADDRGP4 $125 JUMPV LABELV $124 line 141 ;141: G_Sound(ent, CHAN_VOICE, G_SoundIndex("sound/player/gurp2.wav")); ADDRGP4 $126 ARGP4 ADDRLP4 28 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 3 ARGI4 ADDRLP4 28 INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 142 ;142: } LABELV $125 LABELV $122 line 145 ;143: ;144: // don't play a normal pain sound ;145: ent->pain_debounce_time = level.time + 200; ADDRFP4 0 INDIRP4 CNSTI4 664 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 200 ADDI4 ASGNI4 line 147 ;146: ;147: G_Damage (ent, NULL, NULL, NULL, NULL, ADDRLP4 28 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 28 INDIRP4 ARGP4 ADDRLP4 32 CNSTP4 0 ASGNP4 ADDRLP4 32 INDIRP4 ARGP4 ADDRLP4 32 INDIRP4 ARGP4 ADDRLP4 36 CNSTP4 0 ASGNP4 ADDRLP4 36 INDIRP4 ARGP4 ADDRLP4 36 INDIRP4 ARGP4 ADDRLP4 28 INDIRP4 CNSTI4 688 ADDP4 INDIRI4 ARGI4 CNSTI4 2 ARGI4 CNSTI4 29 ARGI4 ADDRGP4 G_Damage CALLV pop line 149 ;148: ent->damage, DAMAGE_NO_ARMOR, MOD_WATER); ;149: } line 150 ;150: } line 151 ;151: } else { ADDRGP4 $110 JUMPV LABELV $109 line 152 ;152: ent->client->airOutTime = level.time + 12000; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1688 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 12000 ADDI4 ASGNI4 line 153 ;153: ent->damage = 2; ADDRFP4 0 INDIRP4 CNSTI4 688 ADDP4 CNSTI4 2 ASGNI4 line 154 ;154: } LABELV $110 line 159 ;155: ;156: // ;157: // check for sizzle damage (move to pmove?) ;158: // ;159: if (waterlevel && ADDRLP4 12 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRI4 ADDRLP4 12 INDIRI4 EQI4 $129 ADDRFP4 0 INDIRP4 CNSTI4 744 ADDP4 INDIRI4 CNSTI4 131074 BANDI4 ADDRLP4 12 INDIRI4 EQI4 $129 line 160 ;160: (ent->watertype&(CONTENTS_LAVA|CONTENTS_SLIME)) ) { line 161 ;161: if (ent->health > 0 ADDRLP4 16 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 16 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 CNSTI4 0 LEI4 $131 ADDRLP4 16 INDIRP4 CNSTI4 664 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GTI4 $131 line 162 ;162: && ent->pain_debounce_time <= level.time ) { line 164 ;163: ;164: if ( envirosuit ) { ADDRLP4 4 INDIRI4 CNSTI4 0 EQI4 $134 line 165 ;165: G_AddEvent( ent, EV_POWERUP_BATTLESUIT, 0 ); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 83 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 166 ;166: } else { ADDRGP4 $135 JUMPV LABELV $134 line 167 ;167: if (ent->watertype & CONTENTS_LAVA) { ADDRFP4 0 INDIRP4 CNSTI4 744 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $136 line 168 ;168: G_Damage (ent, NULL, NULL, NULL, NULL, ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 20 CNSTP4 0 ASGNP4 ADDRLP4 20 INDIRP4 ARGP4 ADDRLP4 20 INDIRP4 ARGP4 ADDRLP4 24 CNSTP4 0 ASGNP4 ADDRLP4 24 INDIRP4 ARGP4 ADDRLP4 24 INDIRP4 ARGP4 CNSTI4 30 ADDRLP4 0 INDIRI4 MULI4 ARGI4 CNSTI4 0 ARGI4 CNSTI4 31 ARGI4 ADDRGP4 G_Damage CALLV pop line 170 ;169: 30*waterlevel, 0, MOD_LAVA); ;170: } LABELV $136 line 172 ;171: ;172: if (ent->watertype & CONTENTS_SLIME) { ADDRFP4 0 INDIRP4 CNSTI4 744 ADDP4 INDIRI4 CNSTI4 131072 BANDI4 CNSTI4 0 EQI4 $138 line 173 ;173: G_Damage (ent, NULL, NULL, NULL, NULL, ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 20 CNSTP4 0 ASGNP4 ADDRLP4 20 INDIRP4 ARGP4 ADDRLP4 20 INDIRP4 ARGP4 ADDRLP4 24 CNSTP4 0 ASGNP4 ADDRLP4 24 INDIRP4 ARGP4 ADDRLP4 24 INDIRP4 ARGP4 CNSTI4 10 ADDRLP4 0 INDIRI4 MULI4 ARGI4 CNSTI4 0 ARGI4 CNSTI4 30 ARGI4 ADDRGP4 G_Damage CALLV pop line 175 ;174: 10*waterlevel, 0, MOD_SLIME); ;175: } LABELV $138 line 176 ;176: } LABELV $135 line 177 ;177: } LABELV $131 line 178 ;178: } LABELV $129 line 179 ;179:} LABELV $101 endproc P_WorldEffects 40 32 export DoImpact proc DoImpact 96 32 line 188 ;180: ;181: ;182: ;183: ;184: ;185://============================================================== ;186:extern void G_ApplyKnockback( gentity_t *targ, vec3_t newDir, float knockback ); ;187:void DoImpact( gentity_t *self, gentity_t *other, qboolean damageSelf ) ;188:{ line 193 ;189: float magnitude, my_mass; ;190: vec3_t velocity; ;191: int cont; ;192: ;193: if( self->client ) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $141 line 194 ;194: { line 195 ;195: VectorCopy( self->client->ps.velocity, velocity ); ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 32 ADDP4 INDIRB ASGNB 12 line 196 ;196: my_mass = self->mass; ADDRLP4 16 ADDRFP4 0 INDIRP4 CNSTI4 624 ADDP4 INDIRF4 ASGNF4 line 197 ;197: } ADDRGP4 $142 JUMPV LABELV $141 line 199 ;198: else ;199: { line 200 ;200: VectorCopy( self->s.pos.trDelta, velocity ); ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 INDIRB ASGNB 12 line 201 ;201: if ( self->s.pos.trType == TR_GRAVITY ) ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 5 NEI4 $143 line 202 ;202: { line 203 ;203: velocity[2] -= 0.25f * g_gravity.value; ADDRLP4 4+8 ADDRLP4 4+8 INDIRF4 CNSTF4 1048576000 ADDRGP4 g_gravity+8 INDIRF4 MULF4 SUBF4 ASGNF4 line 204 ;204: } LABELV $143 line 205 ;205: if( !self->mass ) ADDRFP4 0 INDIRP4 CNSTI4 624 ADDP4 INDIRF4 CNSTF4 0 NEF4 $147 line 206 ;206: { line 207 ;207: my_mass = 1; ADDRLP4 16 CNSTF4 1065353216 ASGNF4 line 208 ;208: } ADDRGP4 $148 JUMPV LABELV $147 line 209 ;209: else if ( self->mass <= 10 ) ADDRFP4 0 INDIRP4 CNSTI4 624 ADDP4 INDIRF4 CNSTF4 1092616192 GTF4 $149 line 210 ;210: { line 211 ;211: my_mass = 10; ADDRLP4 16 CNSTF4 1092616192 ASGNF4 line 212 ;212: } ADDRGP4 $150 JUMPV LABELV $149 line 214 ;213: else ;214: { line 215 ;215: my_mass = self->mass;///10; ADDRLP4 16 ADDRFP4 0 INDIRP4 CNSTI4 624 ADDP4 INDIRF4 ASGNF4 line 216 ;216: } LABELV $150 LABELV $148 line 217 ;217: } LABELV $142 line 219 ;218: ;219: magnitude = VectorLength( velocity ) * my_mass / 10; ADDRLP4 4 ARGP4 ADDRLP4 24 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 0 ADDRLP4 24 INDIRF4 ADDRLP4 16 INDIRF4 MULF4 CNSTF4 1092616192 DIVF4 ASGNF4 line 232 ;220: ;221: /* ;222: if(pointcontents(self.absmax)==CONTENT_WATER)//FIXME: or other watertypes ;223: magnitude/=3; //water absorbs 2/3 velocity ;224: ;225: if(self.classname=="barrel"&&self.aflag)//rolling barrels are made for impacts! ;226: magnitude*=3; ;227: ;228: if(self.frozen>0&&magnitude<300&&self.flags&FL_ONGROUND&&loser==world&&self.velocity_z<-20&&self.last_onground+0.3client || self->client->ps.lastOnGround+300client->ps.lastOnGround+100 < level.time && other->material >= MAT_GLASS ) ) ADDRLP4 28 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 28 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $156 ADDRLP4 32 ADDRLP4 28 INDIRP4 CNSTI4 500 ADDP4 INDIRI4 ASGNI4 ADDRLP4 32 INDIRI4 CNSTI4 300 ADDI4 ADDRGP4 level+32 INDIRI4 LTI4 $156 ADDRLP4 32 INDIRI4 CNSTI4 100 ADDI4 ADDRGP4 level+32 INDIRI4 GEI4 $151 ADDRFP4 4 INDIRP4 CNSTI4 684 ADDP4 INDIRI4 CNSTI4 1 LTI4 $151 LABELV $156 line 233 ;233: { line 235 ;234: vec3_t dir1, dir2; ;235: float force = 0, dot; ADDRLP4 36 CNSTF4 0 ASGNF4 line 237 ;236: ;237: if ( other->material >= MAT_GLASS ) ADDRFP4 4 INDIRP4 CNSTI4 684 ADDP4 INDIRI4 CNSTI4 1 LTI4 $157 line 238 ;238: magnitude *= 2; ADDRLP4 0 CNSTF4 1073741824 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 LABELV $157 line 241 ;239: ;240: //damage them ;241: if ( magnitude >= 100 && other->s.number < ENTITYNUM_WORLD ) ADDRLP4 0 INDIRF4 CNSTF4 1120403456 LTF4 $159 ADDRFP4 4 INDIRP4 INDIRI4 CNSTI4 1022 GEI4 $159 line 242 ;242: { line 243 ;243: VectorCopy( velocity, dir1 ); ADDRLP4 52 ADDRLP4 4 INDIRB ASGNB 12 line 244 ;244: VectorNormalize( dir1 ); ADDRLP4 52 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 245 ;245: if( VectorCompare( other->r.currentOrigin, vec3_origin ) ) ADDRFP4 4 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRGP4 vec3_origin ARGP4 ADDRLP4 68 ADDRGP4 VectorCompare CALLI4 ASGNI4 ADDRLP4 68 INDIRI4 CNSTI4 0 EQI4 $161 line 246 ;246: {//a brush with no origin line 247 ;247: VectorCopy ( dir1, dir2 ); ADDRLP4 40 ADDRLP4 52 INDIRB ASGNB 12 line 248 ;248: } ADDRGP4 $162 JUMPV LABELV $161 line 250 ;249: else ;250: { line 251 ;251: VectorSubtract( other->r.currentOrigin, self->r.currentOrigin, dir2 ); ADDRLP4 72 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 76 CNSTI4 368 ASGNI4 ADDRLP4 80 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 72 INDIRP4 ADDRLP4 76 INDIRI4 ADDP4 INDIRF4 ADDRLP4 80 INDIRP4 ADDRLP4 76 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 84 CNSTI4 372 ASGNI4 ADDRLP4 40+4 ADDRLP4 72 INDIRP4 ADDRLP4 84 INDIRI4 ADDP4 INDIRF4 ADDRLP4 80 INDIRP4 ADDRLP4 84 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 88 CNSTI4 376 ASGNI4 ADDRLP4 40+8 ADDRFP4 4 INDIRP4 ADDRLP4 88 INDIRI4 ADDP4 INDIRF4 ADDRFP4 0 INDIRP4 ADDRLP4 88 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 line 252 ;252: VectorNormalize( dir2 ); ADDRLP4 40 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 253 ;253: } LABELV $162 line 255 ;254: ;255: dot = DotProduct( dir1, dir2 ); ADDRLP4 64 ADDRLP4 52 INDIRF4 ADDRLP4 40 INDIRF4 MULF4 ADDRLP4 52+4 INDIRF4 ADDRLP4 40+4 INDIRF4 MULF4 ADDF4 ADDRLP4 52+8 INDIRF4 ADDRLP4 40+8 INDIRF4 MULF4 ADDF4 ASGNF4 line 257 ;256: ;257: if ( dot >= 0.2 ) ADDRLP4 64 INDIRF4 CNSTF4 1045220557 LTF4 $169 line 258 ;258: { line 259 ;259: force = dot; ADDRLP4 36 ADDRLP4 64 INDIRF4 ASGNF4 line 260 ;260: } ADDRGP4 $170 JUMPV LABELV $169 line 262 ;261: else ;262: { line 263 ;263: force = 0; ADDRLP4 36 CNSTF4 0 ASGNF4 line 264 ;264: } LABELV $170 line 266 ;265: ;266: force *= (magnitude/50); ADDRLP4 36 ADDRLP4 36 INDIRF4 ADDRLP4 0 INDIRF4 CNSTF4 1112014848 DIVF4 MULF4 ASGNF4 line 268 ;267: ;268: cont = trap_PointContents( other->r.absmax, other->s.number ); ADDRLP4 72 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 72 INDIRP4 CNSTI4 356 ADDP4 ARGP4 ADDRLP4 72 INDIRP4 INDIRI4 ARGI4 ADDRLP4 76 ADDRGP4 trap_PointContents CALLI4 ASGNI4 ADDRLP4 20 ADDRLP4 76 INDIRI4 ASGNI4 line 269 ;269: if( (cont&CONTENTS_WATER) )//|| (self.classname=="barrel"&&self.aflag))//FIXME: or other watertypes ADDRLP4 20 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $171 line 270 ;270: { line 271 ;271: force /= 3; //water absorbs 2/3 velocity ADDRLP4 36 ADDRLP4 36 INDIRF4 CNSTF4 1077936128 DIVF4 ASGNF4 line 272 ;272: } LABELV $171 line 279 ;273: ;274: /* ;275: if(self.frozen>0&&force>10) ;276: force=10; ;277: */ ;278: ;279: if( ( force >= 1 && other->s.number != 0 ) || force >= 10) ADDRLP4 36 INDIRF4 CNSTF4 1065353216 LTF4 $176 ADDRFP4 4 INDIRP4 INDIRI4 CNSTI4 0 NEI4 $175 LABELV $176 ADDRLP4 36 INDIRF4 CNSTF4 1092616192 LTF4 $173 LABELV $175 line 280 ;280: { line 288 ;281: /* ;282: dprint("Damage other ("); ;283: dprint(loser.classname); ;284: dprint("): "); ;285: dprint(ftos(force)); ;286: dprint("\n"); ;287: */ ;288: if ( other->r.svFlags & SVF_GLASS_BRUSH ) ADDRFP4 4 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 134217728 BANDI4 CNSTI4 0 EQI4 $177 line 289 ;289: { line 290 ;290: other->splashRadius = (float)(self->r.maxs[0] - self->r.mins[0])/4.0f; ADDRLP4 80 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 4 INDIRP4 CNSTI4 700 ADDP4 ADDRLP4 80 INDIRP4 CNSTI4 328 ADDP4 INDIRF4 ADDRLP4 80 INDIRP4 CNSTI4 316 ADDP4 INDIRF4 SUBF4 CNSTF4 1082130432 DIVF4 CVFI4 4 ASGNI4 line 291 ;291: } LABELV $177 line 292 ;292: if ( other->takedamage ) ADDRFP4 4 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 CNSTI4 0 EQI4 $179 line 293 ;293: { line 294 ;294: G_Damage( other, self, self, velocity, self->r.currentOrigin, force, DAMAGE_NO_ARMOR, MOD_CRUSH);//FIXME: MOD_IMPACT ADDRFP4 4 INDIRP4 ARGP4 ADDRLP4 80 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 80 INDIRP4 ARGP4 ADDRLP4 80 INDIRP4 ARGP4 ADDRLP4 4 ARGP4 ADDRLP4 80 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 36 INDIRF4 CVFI4 4 ARGI4 CNSTI4 2 ARGI4 CNSTI4 32 ARGI4 ADDRGP4 G_Damage CALLV pop line 295 ;295: } ADDRGP4 $180 JUMPV LABELV $179 line 297 ;296: else ;297: { line 298 ;298: G_ApplyKnockback( other, dir2, force ); ADDRFP4 4 INDIRP4 ARGP4 ADDRLP4 40 ARGP4 ADDRLP4 36 INDIRF4 ARGF4 ADDRGP4 G_ApplyKnockback CALLV pop line 299 ;299: } LABELV $180 line 300 ;300: } LABELV $173 line 301 ;301: } LABELV $159 line 303 ;302: ;303: if ( damageSelf && self->takedamage ) ADDRLP4 68 CNSTI4 0 ASGNI4 ADDRFP4 8 INDIRI4 ADDRLP4 68 INDIRI4 EQI4 $181 ADDRFP4 0 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 ADDRLP4 68 INDIRI4 EQI4 $181 line 304 ;304: { line 307 ;305: //Now damage me ;306: //FIXME: more lenient falling damage, especially for when driving a vehicle ;307: if ( self->client && self->client->ps.fd.forceJumpZStart ) ADDRLP4 72 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 72 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $183 ADDRLP4 72 INDIRP4 CNSTI4 1080 ADDP4 INDIRF4 CNSTF4 0 EQF4 $183 line 308 ;308: {//we were force-jumping line 309 ;309: if ( self->r.currentOrigin[2] >= self->client->ps.fd.forceJumpZStart ) ADDRLP4 76 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 76 INDIRP4 CNSTI4 376 ADDP4 INDIRF4 ADDRLP4 76 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1080 ADDP4 INDIRF4 LTF4 $185 line 310 ;310: {//we landed at same height or higher than we landed line 311 ;311: magnitude = 0; ADDRLP4 0 CNSTF4 0 ASGNF4 line 312 ;312: } ADDRGP4 $186 JUMPV LABELV $185 line 314 ;313: else ;314: {//FIXME: take off some of it, at least? line 315 ;315: magnitude = (self->client->ps.fd.forceJumpZStart-self->r.currentOrigin[2])/3; ADDRLP4 80 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 80 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1080 ADDP4 INDIRF4 ADDRLP4 80 INDIRP4 CNSTI4 376 ADDP4 INDIRF4 SUBF4 CNSTF4 1077936128 DIVF4 ASGNF4 line 316 ;316: } LABELV $186 line 317 ;317: } LABELV $183 line 319 ;318: //if(self.classname!="monster_mezzoman"&&self.netname!="spider")//Cats always land on their feet ;319: if( ( magnitude >= 100 + self->health && self->s.number != 0 && self->s.weapon != WP_SABER ) || ( magnitude >= 700 ) )//&& self.safe_time < level.time ))//health here is used to simulate structural integrity ADDRLP4 76 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 0 INDIRF4 ADDRLP4 76 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 CNSTI4 100 ADDI4 CVIF4 4 LTF4 $191 ADDRLP4 76 INDIRP4 INDIRI4 CNSTI4 0 EQI4 $191 ADDRLP4 76 INDIRP4 CNSTI4 276 ADDP4 INDIRI4 CNSTI4 2 NEI4 $189 LABELV $191 ADDRLP4 0 INDIRF4 CNSTF4 1143930880 LTF4 $187 LABELV $189 line 320 ;320: { line 321 ;321: if ( (self->s.weapon == WP_SABER || self->s.number == 0) && self->client && self->client->ps.groundEntityNum < ENTITYNUM_NONE && magnitude < 1000 ) ADDRLP4 80 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 80 INDIRP4 CNSTI4 276 ADDP4 INDIRI4 CNSTI4 2 EQI4 $194 ADDRLP4 80 INDIRP4 INDIRI4 CNSTI4 0 NEI4 $192 LABELV $194 ADDRLP4 84 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 84 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $192 ADDRLP4 84 INDIRP4 CNSTI4 84 ADDP4 INDIRI4 CNSTI4 1023 GEI4 $192 ADDRLP4 0 INDIRF4 CNSTF4 1148846080 GEF4 $192 line 322 ;322: {//players and jedi take less impact damage line 324 ;323: //allow for some lenience on high falls ;324: magnitude /= 2; ADDRLP4 0 ADDRLP4 0 INDIRF4 CNSTF4 1073741824 DIVF4 ASGNF4 line 331 ;325: /* ;326: if ( self.absorb_time >= time )//crouching on impact absorbs 1/2 the damage ;327: { ;328: magnitude/=2; ;329: } ;330: */ ;331: } LABELV $192 line 332 ;332: magnitude /= 40; ADDRLP4 0 ADDRLP4 0 INDIRF4 CNSTF4 1109393408 DIVF4 ASGNF4 line 333 ;333: magnitude = magnitude - force/2;//If damage other, subtract half of that damage off of own injury ADDRLP4 0 ADDRLP4 0 INDIRF4 ADDRLP4 36 INDIRF4 CNSTF4 1073741824 DIVF4 SUBF4 ASGNF4 line 334 ;334: if ( magnitude >= 1 ) ADDRLP4 0 INDIRF4 CNSTF4 1065353216 LTF4 $195 line 335 ;335: { line 348 ;336: //FIXME: Put in a thingtype impact sound function ;337: /* ;338: dprint("Damage self ("); ;339: dprint(self.classname); ;340: dprint("): "); ;341: dprint(ftos(magnitude)); ;342: dprint("\n"); ;343: */ ;344: /* ;345: if ( self.classname=="player_sheep "&& self.flags&FL_ONGROUND && self.velocity_z > -50 ) ;346: return; ;347: */ ;348: G_Damage( self, NULL, NULL, NULL, self->r.currentOrigin, magnitude/2, DAMAGE_NO_ARMOR, MOD_FALLING );//FIXME: MOD_IMPACT ADDRLP4 88 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 88 INDIRP4 ARGP4 ADDRLP4 92 CNSTP4 0 ASGNP4 ADDRLP4 92 INDIRP4 ARGP4 ADDRLP4 92 INDIRP4 ARGP4 CNSTP4 0 ARGP4 ADDRLP4 88 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 0 INDIRF4 CNSTF4 1073741824 DIVF4 CVFI4 4 ARGI4 CNSTI4 2 ARGI4 CNSTI4 34 ARGI4 ADDRGP4 G_Damage CALLV pop line 349 ;349: } LABELV $195 line 350 ;350: } LABELV $187 line 351 ;351: } LABELV $181 line 362 ;352: ;353: //FIXME: slow my velocity some? ;354: ;355: // NOTENOTE We don't use lastimpact as of yet ;356:// self->lastImpact = level.time; ;357: ;358: /* ;359: if(self.flags&FL_ONGROUND) ;360: self.last_onground=time; ;361: */ ;362: } LABELV $151 line 363 ;363:} LABELV $140 endproc DoImpact 96 32 export G_SetClientSound proc G_SetClientSound 8 0 line 370 ;364: ;365:/* ;366:=============== ;367:G_SetClientSound ;368:=============== ;369:*/ ;370:void G_SetClientSound( gentity_t *ent ) { line 371 ;371: if (ent->waterlevel && (ent->watertype&(CONTENTS_LAVA|CONTENTS_SLIME)) ) { ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 748 ADDP4 INDIRI4 ADDRLP4 4 INDIRI4 EQI4 $198 ADDRLP4 0 INDIRP4 CNSTI4 744 ADDP4 INDIRI4 CNSTI4 131074 BANDI4 ADDRLP4 4 INDIRI4 EQI4 $198 line 372 ;372: ent->client->ps.loopSound = level.snd_fry; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 476 ADDP4 ADDRGP4 level+220 INDIRI4 ASGNI4 line 373 ;373: } else { ADDRGP4 $199 JUMPV LABELV $198 line 374 ;374: ent->client->ps.loopSound = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 476 ADDP4 CNSTI4 0 ASGNI4 line 375 ;375: } LABELV $199 line 376 ;376:} LABELV $197 endproc G_SetClientSound 8 0 export ClientImpacts proc ClientImpacts 1100 12 line 387 ;377: ;378: ;379: ;380://============================================================== ;381: ;382:/* ;383:============== ;384:ClientImpacts ;385:============== ;386:*/ ;387:void ClientImpacts( gentity_t *ent, pmove_t *pm ) { line 392 ;388: int i, j; ;389: trace_t trace; ;390: gentity_t *other; ;391: ;392: memset( &trace, 0, sizeof( trace ) ); ADDRLP4 12 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1080 ARGI4 ADDRGP4 memset CALLP4 pop line 393 ;393: for (i=0 ; inumtouch ; i++) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 $205 JUMPV LABELV $202 line 394 ;394: for (j=0 ; jtouchents[j] == pm->touchents[i] ) { ADDRLP4 1092 CNSTI4 2 ASGNI4 ADDRLP4 1096 ADDRFP4 4 INDIRP4 CNSTI4 56 ADDP4 ASGNP4 ADDRLP4 0 INDIRI4 ADDRLP4 1092 INDIRI4 LSHI4 ADDRLP4 1096 INDIRP4 ADDP4 INDIRI4 ADDRLP4 4 INDIRI4 ADDRLP4 1092 INDIRI4 LSHI4 ADDRLP4 1096 INDIRP4 ADDP4 INDIRI4 NEI4 $210 line 396 ;396: break; ADDRGP4 $208 JUMPV LABELV $210 line 398 ;397: } ;398: } LABELV $207 line 394 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $209 ADDRLP4 0 INDIRI4 ADDRLP4 4 INDIRI4 LTI4 $206 LABELV $208 line 399 ;399: if (j != i) { ADDRLP4 0 INDIRI4 ADDRLP4 4 INDIRI4 EQI4 $212 line 400 ;400: continue; // duplicated ADDRGP4 $203 JUMPV LABELV $212 line 402 ;401: } ;402: other = &g_entities[ pm->touchents[i] ]; ADDRLP4 8 CNSTI4 828 ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 4 INDIRP4 CNSTI4 56 ADDP4 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 404 ;403: ;404: if ( ( ent->r.svFlags & SVF_BOT ) && ( ent->touch ) ) { ADDRLP4 1092 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1092 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $214 ADDRLP4 1092 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $214 line 405 ;405: ent->touch( ent, other, &trace ); ADDRLP4 1096 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1096 INDIRP4 ARGP4 ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 12 ARGP4 ADDRLP4 1096 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 406 ;406: } LABELV $214 line 408 ;407: ;408: if ( !other->touch ) { ADDRLP4 8 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $216 line 409 ;409: continue; ADDRGP4 $203 JUMPV LABELV $216 line 412 ;410: } ;411: ;412: other->touch( other, ent, &trace ); ADDRLP4 8 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 12 ARGP4 ADDRLP4 8 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 413 ;413: } LABELV $203 line 393 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $205 ADDRLP4 4 INDIRI4 ADDRFP4 4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 LTI4 $202 line 415 ;414: ;415:} LABELV $201 endproc ClientImpacts 1100 12 data align 4 LABELV $219 byte 4 1109393408 byte 4 1109393408 byte 4 1112539136 export G_TouchTriggers code proc G_TouchTriggers 5264 16 line 425 ;416: ;417:/* ;418:============ ;419:G_TouchTriggers ;420: ;421:Find all trigger entities that ent's current position touches. ;422:Spectators will only interact with teleporters. ;423:============ ;424:*/ ;425:void G_TouchTriggers( gentity_t *ent ) { line 433 ;426: int i, num; ;427: int touch[MAX_GENTITIES]; ;428: gentity_t *hit; ;429: trace_t trace; ;430: vec3_t mins, maxs; ;431: static vec3_t range = { 40, 40, 52 }; ;432: ;433: if ( !ent->client ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $220 line 434 ;434: return; ADDRGP4 $218 JUMPV LABELV $220 line 438 ;435: } ;436: ;437: // dead clients don't activate triggers! ;438: if ( ent->client->ps.stats[STAT_HEALTH] <= 0 ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 CNSTI4 0 GTI4 $222 line 439 ;439: return; ADDRGP4 $218 JUMPV LABELV $222 line 442 ;440: } ;441: ;442: VectorSubtract( ent->client->ps.origin, range, mins ); ADDRLP4 5212 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 ASGNP4 ADDRLP4 1088 ADDRLP4 5212 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRGP4 $219 INDIRF4 SUBF4 ASGNF4 ADDRLP4 1088+4 ADDRLP4 5212 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ADDRGP4 $219+4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 1088+8 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRGP4 $219+8 INDIRF4 SUBF4 ASGNF4 line 443 ;443: VectorAdd( ent->client->ps.origin, range, maxs ); ADDRLP4 5216 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 ASGNP4 ADDRLP4 1100 ADDRLP4 5216 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRGP4 $219 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+4 ADDRLP4 5216 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ADDRGP4 $219+4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+8 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRGP4 $219+8 INDIRF4 ADDF4 ASGNF4 line 445 ;444: ;445: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); ADDRLP4 1088 ARGP4 ADDRLP4 1100 ARGP4 ADDRLP4 1116 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 5220 ADDRGP4 trap_EntitiesInBox CALLI4 ASGNI4 ADDRLP4 1112 ADDRLP4 5220 INDIRI4 ASGNI4 line 448 ;446: ;447: // can't use ent->r.absmin, because that has a one unit pad ;448: VectorAdd( ent->client->ps.origin, ent->r.mins, mins ); ADDRLP4 5224 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5228 ADDRLP4 5224 INDIRP4 CNSTI4 408 ADDP4 ASGNP4 ADDRLP4 1088 ADDRLP4 5228 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRLP4 5224 INDIRP4 CNSTI4 316 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1088+4 ADDRLP4 5228 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ADDRLP4 5224 INDIRP4 CNSTI4 320 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 5232 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1088+8 ADDRLP4 5232 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRLP4 5232 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 ADDF4 ASGNF4 line 449 ;449: VectorAdd( ent->client->ps.origin, ent->r.maxs, maxs ); ADDRLP4 5236 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5240 ADDRLP4 5236 INDIRP4 CNSTI4 408 ADDP4 ASGNP4 ADDRLP4 1100 ADDRLP4 5240 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRLP4 5236 INDIRP4 CNSTI4 328 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+4 ADDRLP4 5240 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ADDRLP4 5236 INDIRP4 CNSTI4 332 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 5244 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1100+8 ADDRLP4 5244 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRLP4 5244 INDIRP4 CNSTI4 336 ADDP4 INDIRF4 ADDF4 ASGNF4 line 451 ;450: ;451: for ( i=0 ; itouch && !ent->touch ) { ADDRLP4 5248 CNSTI4 648 ASGNI4 ADDRLP4 5252 CNSTU4 0 ASGNU4 ADDRLP4 0 INDIRP4 ADDRLP4 5248 INDIRI4 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 5252 INDIRU4 NEU4 $240 ADDRFP4 0 INDIRP4 ADDRLP4 5248 INDIRI4 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 5252 INDIRU4 NEU4 $240 line 455 ;455: continue; ADDRGP4 $237 JUMPV LABELV $240 line 457 ;456: } ;457: if ( !( hit->r.contents & CONTENTS_TRIGGER ) ) { ADDRLP4 0 INDIRP4 CNSTI4 340 ADDP4 INDIRI4 CNSTI4 1024 BANDI4 CNSTI4 0 NEI4 $242 line 458 ;458: continue; ADDRGP4 $237 JUMPV LABELV $242 line 462 ;459: } ;460: ;461: // ignore most entities if a spectator ;462: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $244 line 463 ;463: if ( hit->s.eType != ET_TELEPORT_TRIGGER && ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 11 EQI4 $246 ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 ADDRGP4 Touch_DoorTrigger CVPU4 4 EQU4 $246 line 466 ;464: // this is ugly but adding a new ET_? type will ;465: // most likely cause network incompatibilities ;466: hit->touch != Touch_DoorTrigger) { line 467 ;467: continue; ADDRGP4 $237 JUMPV LABELV $246 line 469 ;468: } ;469: } LABELV $244 line 473 ;470: ;471: // use seperate code for determining if an item is picked up ;472: // so you don't have to actually contact its bounding box ;473: if ( hit->s.eType == ET_ITEM ) { ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 2 NEI4 $248 line 474 ;474: if ( !BG_PlayerTouchesItem( &ent->client->ps, &hit->s, level.time ) ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 level+32 INDIRI4 ARGI4 ADDRLP4 5256 ADDRGP4 BG_PlayerTouchesItem CALLI4 ASGNI4 ADDRLP4 5256 INDIRI4 CNSTI4 0 NEI4 $249 line 475 ;475: continue; ADDRGP4 $237 JUMPV line 477 ;476: } ;477: } else { LABELV $248 line 478 ;478: if ( !trap_EntityContact( mins, maxs, hit ) ) { ADDRLP4 1088 ARGP4 ADDRLP4 1100 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 5256 ADDRGP4 trap_EntityContact CALLI4 ASGNI4 ADDRLP4 5256 INDIRI4 CNSTI4 0 NEI4 $253 line 479 ;479: continue; ADDRGP4 $237 JUMPV LABELV $253 line 481 ;480: } ;481: } LABELV $249 line 483 ;482: ;483: memset( &trace, 0, sizeof(trace) ); ADDRLP4 8 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1080 ARGI4 ADDRGP4 memset CALLP4 pop line 485 ;484: ;485: if ( hit->touch ) { ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $255 line 486 ;486: hit->touch (hit, ent, &trace); ADDRLP4 0 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 487 ;487: } LABELV $255 line 489 ;488: ;489: if ( ( ent->r.svFlags & SVF_BOT ) && ( ent->touch ) ) { ADDRLP4 5256 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5256 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $257 ADDRLP4 5256 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $257 line 490 ;490: ent->touch( ent, hit, &trace ); ADDRLP4 5260 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5260 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 8 ARGP4 ADDRLP4 5260 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 491 ;491: } LABELV $257 line 492 ;492: } LABELV $237 line 451 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $239 ADDRLP4 4 INDIRI4 ADDRLP4 1112 INDIRI4 LTI4 $236 line 495 ;493: ;494: // if we didn't touch a jump pad this pmove frame ;495: if ( ent->client->ps.jumppad_frame != ent->client->ps.pmove_framecount ) { ADDRLP4 5248 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 5248 INDIRP4 CNSTI4 492 ADDP4 INDIRI4 ADDRLP4 5248 INDIRP4 CNSTI4 488 ADDP4 INDIRI4 EQI4 $259 line 496 ;496: ent->client->ps.jumppad_frame = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 492 ADDP4 CNSTI4 0 ASGNI4 line 497 ;497: ent->client->ps.jumppad_ent = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 480 ADDP4 CNSTI4 0 ASGNI4 line 498 ;498: } LABELV $259 line 499 ;499:} LABELV $218 endproc G_TouchTriggers 5264 16 lit align 4 LABELV $262 byte 4 1109393408 byte 4 1109393408 byte 4 1112539136 export G_MoverTouchPushTriggers code proc G_MoverTouchPushTriggers 5328 16 line 511 ;500: ;501: ;502:/* ;503:============ ;504:G_MoverTouchTriggers ;505: ;506:Find all trigger entities that ent's current position touches. ;507:Spectators will only interact with teleporters. ;508:============ ;509:*/ ;510:void G_MoverTouchPushTriggers( gentity_t *ent, vec3_t oldOrg ) ;511:{ line 518 ;512: int i, num; ;513: float step, stepSize, dist; ;514: int touch[MAX_GENTITIES]; ;515: gentity_t *hit; ;516: trace_t trace; ;517: vec3_t mins, maxs, dir, size, checkSpot; ;518: const vec3_t range = { 40, 40, 52 }; ADDRLP4 5224 ADDRGP4 $262 INDIRB ASGNB 12 line 521 ;519: ;520: // non-moving movers don't hit triggers! ;521: if ( !VectorLengthSquared( ent->s.pos.trDelta ) ) ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 ARGP4 ADDRLP4 5272 ADDRGP4 VectorLengthSquared CALLF4 ASGNF4 ADDRLP4 5272 INDIRF4 CNSTF4 0 NEF4 $263 line 522 ;522: { line 523 ;523: return; ADDRGP4 $261 JUMPV LABELV $263 line 526 ;524: } ;525: ;526: VectorSubtract( ent->r.mins, ent->r.maxs, size ); ADDRLP4 5276 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5260 ADDRLP4 5276 INDIRP4 CNSTI4 316 ADDP4 INDIRF4 ADDRLP4 5276 INDIRP4 CNSTI4 328 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 5260+4 ADDRLP4 5276 INDIRP4 CNSTI4 320 ADDP4 INDIRF4 ADDRLP4 5276 INDIRP4 CNSTI4 332 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 5280 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5260+8 ADDRLP4 5280 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 ADDRLP4 5280 INDIRP4 CNSTI4 336 ADDP4 INDIRF4 SUBF4 ASGNF4 line 527 ;527: stepSize = VectorLength( size ); ADDRLP4 5260 ARGP4 ADDRLP4 5284 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 5252 ADDRLP4 5284 INDIRF4 ASGNF4 line 528 ;528: if ( stepSize < 1 ) ADDRLP4 5252 INDIRF4 CNSTF4 1065353216 GEF4 $267 line 529 ;529: { line 530 ;530: stepSize = 1; ADDRLP4 5252 CNSTF4 1065353216 ASGNF4 line 531 ;531: } LABELV $267 line 533 ;532: ;533: VectorSubtract( ent->r.currentOrigin, oldOrg, dir ); ADDRLP4 5288 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 5292 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 5240 ADDRLP4 5288 INDIRP4 CNSTI4 368 ADDP4 INDIRF4 ADDRLP4 5292 INDIRP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 5240+4 ADDRLP4 5288 INDIRP4 CNSTI4 372 ADDP4 INDIRF4 ADDRLP4 5292 INDIRP4 CNSTI4 4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 5240+8 ADDRFP4 0 INDIRP4 CNSTI4 376 ADDP4 INDIRF4 ADDRFP4 4 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 SUBF4 ASGNF4 line 534 ;534: dist = VectorNormalize( dir ); ADDRLP4 5240 ARGP4 ADDRLP4 5296 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 5256 ADDRLP4 5296 INDIRF4 ASGNF4 line 535 ;535: for ( step = 0; step <= dist; step += stepSize ) ADDRLP4 5236 CNSTF4 0 ASGNF4 ADDRGP4 $274 JUMPV LABELV $271 line 536 ;536: { line 537 ;537: VectorMA( ent->r.currentOrigin, step, dir, checkSpot ); ADDRLP4 5300 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1112 ADDRLP4 5300 INDIRP4 CNSTI4 368 ADDP4 INDIRF4 ADDRLP4 5240 INDIRF4 ADDRLP4 5236 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 1112+4 ADDRLP4 5300 INDIRP4 CNSTI4 372 ADDP4 INDIRF4 ADDRLP4 5240+4 INDIRF4 ADDRLP4 5236 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 1112+8 ADDRFP4 0 INDIRP4 CNSTI4 376 ADDP4 INDIRF4 ADDRLP4 5240+8 INDIRF4 ADDRLP4 5236 INDIRF4 MULF4 ADDF4 ASGNF4 line 538 ;538: VectorSubtract( checkSpot, range, mins ); ADDRLP4 1088 ADDRLP4 1112 INDIRF4 ADDRLP4 5224 INDIRF4 SUBF4 ASGNF4 ADDRLP4 1088+4 ADDRLP4 1112+4 INDIRF4 ADDRLP4 5224+4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 1088+8 ADDRLP4 1112+8 INDIRF4 ADDRLP4 5224+8 INDIRF4 SUBF4 ASGNF4 line 539 ;539: VectorAdd( checkSpot, range, maxs ); ADDRLP4 1100 ADDRLP4 1112 INDIRF4 ADDRLP4 5224 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+4 ADDRLP4 1112+4 INDIRF4 ADDRLP4 5224+4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+8 ADDRLP4 1112+8 INDIRF4 ADDRLP4 5224+8 INDIRF4 ADDF4 ASGNF4 line 541 ;540: ;541: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); ADDRLP4 1088 ARGP4 ADDRLP4 1100 ARGP4 ADDRLP4 1128 ARGP4 CNSTI4 1024 ARGI4 ADDRLP4 5308 ADDRGP4 trap_EntitiesInBox CALLI4 ASGNI4 ADDRLP4 1124 ADDRLP4 5308 INDIRI4 ASGNI4 line 544 ;542: ;543: // can't use ent->r.absmin, because that has a one unit pad ;544: VectorAdd( checkSpot, ent->r.mins, mins ); ADDRLP4 5312 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1088 ADDRLP4 1112 INDIRF4 ADDRLP4 5312 INDIRP4 CNSTI4 316 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1088+4 ADDRLP4 1112+4 INDIRF4 ADDRLP4 5312 INDIRP4 CNSTI4 320 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1088+8 ADDRLP4 1112+8 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 ADDF4 ASGNF4 line 545 ;545: VectorAdd( checkSpot, ent->r.maxs, maxs ); ADDRLP4 5316 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1100 ADDRLP4 1112 INDIRF4 ADDRLP4 5316 INDIRP4 CNSTI4 328 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+4 ADDRLP4 1112+4 INDIRF4 ADDRLP4 5316 INDIRP4 CNSTI4 332 ADDP4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 1100+8 ADDRLP4 1112+8 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 336 ADDP4 INDIRF4 ADDF4 ASGNF4 line 547 ;546: ;547: for ( i=0 ; is.eType != ET_PUSH_TRIGGER ) ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 10 EQI4 $303 line 552 ;552: { line 553 ;553: continue; ADDRGP4 $300 JUMPV LABELV $303 line 556 ;554: } ;555: ;556: if ( hit->touch == NULL ) ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $305 line 557 ;557: { line 558 ;558: continue; ADDRGP4 $300 JUMPV LABELV $305 line 561 ;559: } ;560: ;561: if ( !( hit->r.contents & CONTENTS_TRIGGER ) ) ADDRLP4 0 INDIRP4 CNSTI4 340 ADDP4 INDIRI4 CNSTI4 1024 BANDI4 CNSTI4 0 NEI4 $307 line 562 ;562: { line 563 ;563: continue; ADDRGP4 $300 JUMPV LABELV $307 line 567 ;564: } ;565: ;566: ;567: if ( !trap_EntityContact( mins, maxs, hit ) ) ADDRLP4 1088 ARGP4 ADDRLP4 1100 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 5320 ADDRGP4 trap_EntityContact CALLI4 ASGNI4 ADDRLP4 5320 INDIRI4 CNSTI4 0 NEI4 $309 line 568 ;568: { line 569 ;569: continue; ADDRGP4 $300 JUMPV LABELV $309 line 572 ;570: } ;571: ;572: memset( &trace, 0, sizeof(trace) ); ADDRLP4 8 ARGP4 CNSTI4 0 ARGI4 CNSTI4 1080 ARGI4 ADDRGP4 memset CALLP4 pop line 574 ;573: ;574: if ( hit->touch != NULL ) ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $311 line 575 ;575: { line 576 ;576: hit->touch(hit, ent, &trace); ADDRLP4 0 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8 ARGP4 ADDRLP4 0 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 577 ;577: } LABELV $311 line 578 ;578: } LABELV $300 line 547 ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $302 ADDRLP4 4 INDIRI4 ADDRLP4 1124 INDIRI4 LTI4 $299 line 579 ;579: } LABELV $272 line 535 ADDRLP4 5236 ADDRLP4 5236 INDIRF4 ADDRLP4 5252 INDIRF4 ADDF4 ASGNF4 LABELV $274 ADDRLP4 5236 INDIRF4 ADDRLP4 5256 INDIRF4 LEF4 $271 line 580 ;580:} LABELV $261 endproc G_MoverTouchPushTriggers 5328 16 export SpectatorThink proc SpectatorThink 396 12 line 587 ;581: ;582:/* ;583:================= ;584:SpectatorThink ;585:================= ;586:*/ ;587:void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) { line 591 ;588: pmove_t pm; ;589: gclient_t *client; ;590: ;591: client = ent->client; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 593 ;592: ;593: if ( client->sess.spectatorState != SPECTATOR_FOLLOW ) { ADDRLP4 0 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 2 EQI4 $314 line 594 ;594: client->ps.pm_type = PM_SPECTATOR; ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 3 ASGNI4 line 595 ;595: client->ps.speed = 400; // faster than normal ADDRLP4 0 INDIRP4 CNSTI4 60 ADDP4 CNSTI4 400 ASGNI4 line 596 ;596: client->ps.basespeed = 400; ADDRLP4 0 INDIRP4 CNSTI4 64 ADDP4 CNSTI4 400 ASGNI4 line 599 ;597: ;598: // set up for pmove ;599: memset (&pm, 0, sizeof(pm)); ADDRLP4 4 ARGP4 CNSTI4 0 ARGI4 CNSTI4 376 ARGI4 ADDRGP4 memset CALLP4 pop line 600 ;600: pm.ps = &client->ps; ADDRLP4 4 ADDRLP4 0 INDIRP4 ASGNP4 line 601 ;601: pm.cmd = *ucmd; ADDRLP4 4+4 ADDRFP4 4 INDIRP4 INDIRB ASGNB 28 line 602 ;602: pm.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY; // spectators can fly through bodies ADDRLP4 4+32 CNSTI4 17 ASGNI4 line 603 ;603: pm.trace = trap_Trace; ADDRLP4 4+240 ADDRGP4 trap_Trace ASGNP4 line 604 ;604: pm.pointcontents = trap_PointContents; ADDRLP4 4+244 ADDRGP4 trap_PointContents ASGNP4 line 606 ;605: ;606: pm.animations = NULL; ADDRLP4 4+224 CNSTP4 0 ASGNP4 line 609 ;607: ;608: // perform a pmove ;609: Pmove (&pm); ADDRLP4 4 ARGP4 ADDRGP4 Pmove CALLV pop line 611 ;610: // save results of pmove ;611: VectorCopy( client->ps.origin, ent->s.origin ); ADDRFP4 0 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 613 ;612: ;613: G_TouchTriggers( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_TouchTriggers CALLV pop line 614 ;614: trap_UnlinkEntity( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_UnlinkEntity CALLV pop line 615 ;615: } LABELV $314 line 617 ;616: ;617: client->oldbuttons = client->buttons; ADDRLP4 0 INDIRP4 CNSTI4 1588 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ASGNI4 line 618 ;618: client->buttons = ucmd->buttons; ADDRLP4 0 INDIRP4 CNSTI4 1584 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 ASGNI4 line 621 ;619: ;620: // attack button cycles through spectators ;621: if ( ( client->buttons & BUTTON_ATTACK ) && ! ( client->oldbuttons & BUTTON_ATTACK ) ) { ADDRLP4 388 CNSTI4 1 ASGNI4 ADDRLP4 392 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ADDRLP4 388 INDIRI4 BANDI4 ADDRLP4 392 INDIRI4 EQI4 $321 ADDRLP4 0 INDIRP4 CNSTI4 1588 ADDP4 INDIRI4 ADDRLP4 388 INDIRI4 BANDI4 ADDRLP4 392 INDIRI4 NEI4 $321 line 622 ;622: Cmd_FollowCycle_f( ent, 1 ); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 Cmd_FollowCycle_f CALLV pop line 623 ;623: } LABELV $321 line 625 ;624: ;625: if (client->sess.spectatorState == SPECTATOR_FOLLOW && (ucmd->upmove > 0)) ADDRLP4 0 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 2 NEI4 $323 ADDRFP4 4 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 LEI4 $323 line 626 ;626: { //jump now removes you from follow mode line 627 ;627: StopFollowing(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 StopFollowing CALLV pop line 628 ;628: } LABELV $323 line 629 ;629:} LABELV $313 endproc SpectatorThink 396 12 export ClientInactivityTimer proc ClientInactivityTimer 12 8 line 640 ;630: ;631: ;632: ;633:/* ;634:================= ;635:ClientInactivityTimer ;636: ;637:Returns qfalse if the client is dropped ;638:================= ;639:*/ ;640:qboolean ClientInactivityTimer( gclient_t *client ) { line 641 ;641: if ( ! g_inactivity.integer ) { ADDRGP4 g_inactivity+12 INDIRI4 CNSTI4 0 NEI4 $326 line 644 ;642: // give everyone some time, so if the operator sets g_inactivity during ;643: // gameplay, everyone isn't kicked ;644: client->inactivityTime = level.time + 60 * 1000; ADDRFP4 0 INDIRP4 CNSTI4 1676 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 60000 ADDI4 ASGNI4 line 645 ;645: client->inactivityWarning = qfalse; ADDRFP4 0 INDIRP4 CNSTI4 1680 ADDP4 CNSTI4 0 ASGNI4 line 646 ;646: } else if ( client->pers.cmd.forwardmove || ADDRGP4 $327 JUMPV LABELV $326 ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 1396 ADDP4 INDIRI1 CVII4 1 ADDRLP4 4 INDIRI4 NEI4 $334 ADDRLP4 0 INDIRP4 CNSTI4 1397 ADDP4 INDIRI1 CVII4 1 ADDRLP4 4 INDIRI4 NEI4 $334 ADDRLP4 0 INDIRP4 CNSTI4 1398 ADDP4 INDIRI1 CVII4 1 ADDRLP4 4 INDIRI4 NEI4 $334 ADDRLP4 0 INDIRP4 CNSTI4 1388 ADDP4 INDIRI4 CNSTI4 129 BANDI4 ADDRLP4 4 INDIRI4 EQI4 $330 LABELV $334 line 649 ;647: client->pers.cmd.rightmove || ;648: client->pers.cmd.upmove || ;649: (client->pers.cmd.buttons & (BUTTON_ATTACK|BUTTON_ALT_ATTACK)) ) { line 650 ;650: client->inactivityTime = level.time + g_inactivity.integer * 1000; ADDRFP4 0 INDIRP4 CNSTI4 1676 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 1000 ADDRGP4 g_inactivity+12 INDIRI4 MULI4 ADDI4 ASGNI4 line 651 ;651: client->inactivityWarning = qfalse; ADDRFP4 0 INDIRP4 CNSTI4 1680 ADDP4 CNSTI4 0 ASGNI4 line 652 ;652: } else if ( !client->pers.localClient ) { ADDRGP4 $331 JUMPV LABELV $330 ADDRFP4 0 INDIRP4 CNSTI4 1400 ADDP4 INDIRI4 CNSTI4 0 NEI4 $337 line 653 ;653: if ( level.time > client->inactivityTime ) { ADDRGP4 level+32 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 1676 ADDP4 INDIRI4 LEI4 $339 line 654 ;654: trap_DropClient( client - level.clients, "Dropped due to inactivity" ); ADDRFP4 0 INDIRP4 CVPU4 4 ADDRGP4 level INDIRP4 CVPU4 4 SUBU4 CVUI4 4 CNSTI4 1756 DIVI4 ARGI4 ADDRGP4 $342 ARGP4 ADDRGP4 trap_DropClient CALLV pop line 655 ;655: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $325 JUMPV LABELV $339 line 657 ;656: } ;657: if ( level.time > client->inactivityTime - 10000 && !client->inactivityWarning ) { ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 level+32 INDIRI4 ADDRLP4 8 INDIRP4 CNSTI4 1676 ADDP4 INDIRI4 CNSTI4 10000 SUBI4 LEI4 $343 ADDRLP4 8 INDIRP4 CNSTI4 1680 ADDP4 INDIRI4 CNSTI4 0 NEI4 $343 line 658 ;658: client->inactivityWarning = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 1680 ADDP4 CNSTI4 1 ASGNI4 line 659 ;659: trap_SendServerCommand( client - level.clients, "cp \"Ten seconds until inactivity drop!\n\"" ); ADDRFP4 0 INDIRP4 CVPU4 4 ADDRGP4 level INDIRP4 CVPU4 4 SUBU4 CVUI4 4 CNSTI4 1756 DIVI4 ARGI4 ADDRGP4 $346 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 660 ;660: } LABELV $343 line 661 ;661: } LABELV $337 LABELV $331 LABELV $327 line 662 ;662: return qtrue; CNSTI4 1 RETI4 LABELV $325 endproc ClientInactivityTimer 12 8 export ClientTimerActions proc ClientTimerActions 20 0 line 672 ;663:} ;664: ;665:/* ;666:================== ;667:ClientTimerActions ;668: ;669:Actions that happen once a second ;670:================== ;671:*/ ;672:void ClientTimerActions( gentity_t *ent, int msec ) { line 675 ;673: gclient_t *client; ;674: ;675: client = ent->client; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 676 ;676: client->timeResidual += msec; ADDRLP4 4 ADDRLP4 0 INDIRP4 CNSTI4 1708 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 ADDRFP4 4 INDIRI4 ADDI4 ASGNI4 ADDRGP4 $349 JUMPV LABELV $348 line 679 ;677: ;678: while ( client->timeResidual >= 1000 ) ;679: { line 680 ;680: client->timeResidual -= 1000; ADDRLP4 8 ADDRLP4 0 INDIRP4 CNSTI4 1708 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 1000 SUBI4 ASGNI4 line 683 ;681: ;682: // count down health when over max ;683: if ( ent->health > client->ps.stats[STAT_MAX_HEALTH] ) { ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 LEI4 $351 line 684 ;684: ent->health--; ADDRLP4 12 ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 685 ;685: } LABELV $351 line 688 ;686: ;687: // count down armor when over max ;688: if ( client->ps.stats[STAT_ARMOR] > client->ps.stats[STAT_MAX_HEALTH] ) { ADDRLP4 0 INDIRP4 CNSTI4 236 ADDP4 INDIRI4 ADDRLP4 0 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 LEI4 $353 line 689 ;689: client->ps.stats[STAT_ARMOR]--; ADDRLP4 16 ADDRLP4 0 INDIRP4 CNSTI4 236 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 16 INDIRP4 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 690 ;690: } LABELV $353 line 691 ;691: } LABELV $349 line 678 ADDRLP4 0 INDIRP4 CNSTI4 1708 ADDP4 INDIRI4 CNSTI4 1000 GEI4 $348 line 692 ;692:} LABELV $347 endproc ClientTimerActions 20 0 export ClientIntermissionThink proc ClientIntermissionThink 24 0 line 699 ;693: ;694:/* ;695:==================== ;696:ClientIntermissionThink ;697:==================== ;698:*/ ;699:void ClientIntermissionThink( gclient_t *client ) { line 700 ;700: client->ps.eFlags &= ~EF_TALK; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 CNSTI4 -4097 BANDI4 ASGNI4 line 701 ;701: client->ps.eFlags &= ~EF_FIRING; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 -257 BANDI4 ASGNI4 line 706 ;702: ;703: // the level will exit when everyone wants to or after timeouts ;704: ;705: // swap and latch button actions ;706: client->oldbuttons = client->buttons; ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 8 INDIRP4 CNSTI4 1588 ADDP4 ADDRLP4 8 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ASGNI4 line 707 ;707: client->buttons = client->pers.cmd.buttons; ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 1584 ADDP4 ADDRLP4 12 INDIRP4 CNSTI4 1388 ADDP4 INDIRI4 ASGNI4 line 708 ;708: if ( client->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) & ( client->oldbuttons ^ client->buttons ) ) { ADDRLP4 16 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 20 ADDRLP4 16 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ASGNI4 ADDRLP4 20 INDIRI4 CNSTI4 5 BANDI4 ADDRLP4 16 INDIRP4 CNSTI4 1588 ADDP4 INDIRI4 ADDRLP4 20 INDIRI4 BXORI4 BANDI4 CNSTI4 0 EQI4 $356 line 710 ;709: // this used to be an ^1 but once a player says ready, it should stick ;710: client->readyToExit = 1; ADDRFP4 0 INDIRP4 CNSTI4 1572 ADDP4 CNSTI4 1 ASGNI4 line 711 ;711: } LABELV $356 line 712 ;712:} LABELV $355 endproc ClientIntermissionThink 24 0 export ClientEvents proc ClientEvents 68 32 line 723 ;713: ;714: ;715:/* ;716:================ ;717:ClientEvents ;718: ;719:Events will be passed on to the clients for presentation, ;720:but any server game effects are handled here ;721:================ ;722:*/ ;723:void ClientEvents( gentity_t *ent, int oldEventSequence ) { line 734 ;724: int i;//, j; ;725: int event; ;726: gclient_t *client; ;727: int damage; ;728: vec3_t dir; ;729:// vec3_t origin, angles; ;730:// qboolean fired; ;731:// gitem_t *item; ;732:// gentity_t *drop; ;733: ;734: client = ent->client; ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 736 ;735: ;736: if ( oldEventSequence < client->ps.eventSequence - MAX_PS_EVENTS ) { ADDRFP4 4 INDIRI4 ADDRLP4 8 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 CNSTI4 2 SUBI4 GEI4 $359 line 737 ;737: oldEventSequence = client->ps.eventSequence - MAX_PS_EVENTS; ADDRFP4 4 ADDRLP4 8 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 CNSTI4 2 SUBI4 ASGNI4 line 738 ;738: } LABELV $359 line 739 ;739: for ( i = oldEventSequence ; i < client->ps.eventSequence ; i++ ) { ADDRLP4 0 ADDRFP4 4 INDIRI4 ASGNI4 ADDRGP4 $364 JUMPV LABELV $361 line 740 ;740: event = client->ps.events[ i & (MAX_PS_EVENTS-1) ]; ADDRLP4 4 ADDRLP4 0 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 2 LSHI4 ADDRLP4 8 INDIRP4 CNSTI4 116 ADDP4 ADDP4 INDIRI4 ASGNI4 line 742 ;741: ;742: switch ( event ) { ADDRLP4 32 CNSTI4 15 ASGNI4 ADDRLP4 4 INDIRI4 ADDRLP4 32 INDIRI4 EQI4 $367 ADDRLP4 4 INDIRI4 ADDRLP4 32 INDIRI4 GTI4 $393 LABELV $392 ADDRLP4 4 INDIRI4 CNSTI4 11 EQI4 $367 ADDRGP4 $366 JUMPV LABELV $393 ADDRLP4 40 CNSTI4 24 ASGNI4 ADDRLP4 4 INDIRI4 ADDRLP4 40 INDIRI4 EQI4 $380 ADDRLP4 4 INDIRI4 CNSTI4 25 EQI4 $382 ADDRLP4 4 INDIRI4 CNSTI4 26 EQI4 $384 ADDRLP4 4 INDIRI4 ADDRLP4 40 INDIRI4 LTI4 $366 LABELV $394 ADDRLP4 4 INDIRI4 CNSTI4 41 LTI4 $366 ADDRLP4 4 INDIRI4 CNSTI4 46 GTI4 $366 ADDRLP4 4 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 $395-164 ADDP4 INDIRP4 JUMPV lit align 4 LABELV $395 address $386 address $387 address $388 address $366 address $390 address $391 code LABELV $367 line 745 ;743: case EV_FALL: ;744: case EV_ROLL: ;745: { line 746 ;746: int delta = client->ps.eventParms[ i & (MAX_PS_EVENTS-1) ]; ADDRLP4 48 ADDRLP4 0 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 2 LSHI4 ADDRLP4 8 INDIRP4 CNSTI4 124 ADDP4 ADDP4 INDIRI4 ASGNI4 line 748 ;747: ;748: if (ent->client && ent->client->ps.fallingToDeath) ADDRLP4 52 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 52 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $368 ADDRLP4 52 INDIRP4 CNSTI4 1340 ADDP4 INDIRI4 CNSTI4 0 EQI4 $368 line 749 ;749: { line 750 ;750: break; ADDRGP4 $366 JUMPV LABELV $368 line 753 ;751: } ;752: ;753: if ( ent->s.eType != ET_PLAYER ) ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 1 EQI4 $370 line 754 ;754: { line 755 ;755: break; // not in the player model ADDRGP4 $366 JUMPV LABELV $370 line 758 ;756: } ;757: ;758: if ( g_dmflags.integer & DF_NO_FALLING ) ADDRGP4 g_dmflags+12 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $372 line 759 ;759: { line 760 ;760: break; ADDRGP4 $366 JUMPV LABELV $372 line 763 ;761: } ;762: ;763: if (delta <= 44) ADDRLP4 48 INDIRI4 CNSTI4 44 GTI4 $375 line 764 ;764: { line 765 ;765: break; ADDRGP4 $366 JUMPV LABELV $375 line 768 ;766: } ;767: ;768: damage = delta*0.16; //good enough for now, I guess ADDRLP4 24 CNSTF4 1042536202 ADDRLP4 48 INDIRI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 line 770 ;769: ;770: VectorSet (dir, 0, 0, 1); ADDRLP4 56 CNSTF4 0 ASGNF4 ADDRLP4 12 ADDRLP4 56 INDIRF4 ASGNF4 ADDRLP4 12+4 ADDRLP4 56 INDIRF4 ASGNF4 ADDRLP4 12+8 CNSTF4 1065353216 ASGNF4 line 771 ;771: ent->pain_debounce_time = level.time + 200; // no normal pain sound ADDRFP4 0 INDIRP4 CNSTI4 664 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 200 ADDI4 ASGNI4 line 772 ;772: G_Damage (ent, NULL, NULL, NULL, NULL, damage, DAMAGE_NO_ARMOR, MOD_FALLING); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 60 CNSTP4 0 ASGNP4 ADDRLP4 60 INDIRP4 ARGP4 ADDRLP4 60 INDIRP4 ARGP4 ADDRLP4 64 CNSTP4 0 ASGNP4 ADDRLP4 64 INDIRP4 ARGP4 ADDRLP4 64 INDIRP4 ARGP4 ADDRLP4 24 INDIRI4 ARGI4 CNSTI4 2 ARGI4 CNSTI4 34 ARGI4 ADDRGP4 G_Damage CALLV pop line 773 ;773: } line 774 ;774: break; ADDRGP4 $366 JUMPV LABELV $380 line 776 ;775: case EV_FIRE_WEAPON: ;776: FireWeapon( ent, qfalse ); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 FireWeapon CALLV pop line 777 ;777: ent->client->dangerTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1748 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 778 ;778: ent->client->ps.eFlags &= ~EF_INVULNERABLE; ADDRLP4 48 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 48 INDIRP4 ADDRLP4 48 INDIRP4 INDIRI4 CNSTI4 -67108865 BANDI4 ASGNI4 line 779 ;779: ent->client->invulnerableTimer = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 CNSTI4 0 ASGNI4 line 780 ;780: break; ADDRGP4 $366 JUMPV LABELV $382 line 783 ;781: ;782: case EV_ALT_FIRE: ;783: FireWeapon( ent, qtrue ); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 FireWeapon CALLV pop line 784 ;784: ent->client->dangerTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1748 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 785 ;785: ent->client->ps.eFlags &= ~EF_INVULNERABLE; ADDRLP4 52 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 52 INDIRP4 ADDRLP4 52 INDIRP4 INDIRI4 CNSTI4 -67108865 BANDI4 ASGNI4 line 786 ;786: ent->client->invulnerableTimer = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 CNSTI4 0 ASGNI4 line 787 ;787: break; ADDRGP4 $366 JUMPV LABELV $384 line 790 ;788: ;789: case EV_SABER_ATTACK: ;790: ent->client->dangerTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1748 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 791 ;791: ent->client->ps.eFlags &= ~EF_INVULNERABLE; ADDRLP4 56 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 56 INDIRP4 ADDRLP4 56 INDIRP4 INDIRI4 CNSTI4 -67108865 BANDI4 ASGNI4 line 792 ;792: ent->client->invulnerableTimer = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 CNSTI4 0 ASGNI4 line 793 ;793: break; ADDRGP4 $366 JUMPV LABELV $386 line 797 ;794: ;795: //rww - Note that these must be in the same order (ITEM#-wise) as they are in holdable_t ;796: case EV_USE_ITEM1: //seeker droid ;797: ItemUse_Seeker(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Seeker CALLV pop line 798 ;798: break; ADDRGP4 $366 JUMPV LABELV $387 line 800 ;799: case EV_USE_ITEM2: //shield ;800: ItemUse_Shield(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Shield CALLV pop line 801 ;801: break; ADDRGP4 $366 JUMPV LABELV $388 line 803 ;802: case EV_USE_ITEM3: //medpack ;803: ItemUse_MedPack(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_MedPack CALLV pop line 804 ;804: break; ADDRGP4 $366 JUMPV line 807 ;805: case EV_USE_ITEM4: //datapad ;806: //G_Printf("Used Datapad\n"); ;807: break; LABELV $390 line 809 ;808: case EV_USE_ITEM5: //binoculars ;809: ItemUse_Binoculars(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Binoculars CALLV pop line 810 ;810: break; ADDRGP4 $366 JUMPV LABELV $391 line 812 ;811: case EV_USE_ITEM6: //sentry gun ;812: ItemUse_Sentry(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Sentry CALLV pop line 813 ;813: break; line 816 ;814: ;815: default: ;816: break; LABELV $366 line 818 ;817: } ;818: } LABELV $362 line 739 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $364 ADDRLP4 0 INDIRI4 ADDRLP4 8 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 LTI4 $361 line 820 ;819: ;820:} LABELV $358 endproc ClientEvents 68 32 export SendPendingPredictableEvents proc SendPendingPredictableEvents 40 12 line 827 ;821: ;822:/* ;823:============== ;824:SendPendingPredictableEvents ;825:============== ;826:*/ ;827:void SendPendingPredictableEvents( playerState_t *ps ) { line 833 ;828: gentity_t *t; ;829: int event, seq; ;830: int extEvent, number; ;831: ;832: // if there are still events pending ;833: if ( ps->entityEventSequence < ps->eventSequence ) { ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 20 INDIRP4 CNSTI4 496 ADDP4 INDIRI4 ADDRLP4 20 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 GEI4 $398 line 836 ;834: // create a temporary entity for this event which is sent to everyone ;835: // except the client who generated the event ;836: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 496 ADDP4 INDIRI4 CNSTI4 1 BANDI4 ASGNI4 line 837 ;837: event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); ADDRLP4 24 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 8 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 24 INDIRP4 CNSTI4 116 ADDP4 ADDP4 INDIRI4 ADDRLP4 24 INDIRP4 CNSTI4 496 ADDP4 INDIRI4 CNSTI4 3 BANDI4 CNSTI4 8 LSHI4 BORI4 ASGNI4 line 839 ;838: // set external event to zero before calling BG_PlayerStateToEntityState ;839: extEvent = ps->externalEvent; ADDRLP4 12 ADDRFP4 0 INDIRP4 CNSTI4 132 ADDP4 INDIRI4 ASGNI4 line 840 ;840: ps->externalEvent = 0; ADDRFP4 0 INDIRP4 CNSTI4 132 ADDP4 CNSTI4 0 ASGNI4 line 842 ;841: // create temporary entity for event ;842: t = G_TempEntity( ps->origin, event ); ADDRFP4 0 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 4 INDIRI4 ARGI4 ADDRLP4 28 ADDRGP4 G_TempEntity CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 28 INDIRP4 ASGNP4 line 843 ;843: number = t->s.number; ADDRLP4 16 ADDRLP4 0 INDIRP4 INDIRI4 ASGNI4 line 844 ;844: BG_PlayerStateToEntityState( ps, &t->s, qtrue ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityState CALLV pop line 845 ;845: t->s.number = number; ADDRLP4 0 INDIRP4 ADDRLP4 16 INDIRI4 ASGNI4 line 846 ;846: t->s.eType = ET_EVENTS + event; ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 ADDRLP4 4 INDIRI4 CNSTI4 16 ADDI4 ASGNI4 line 847 ;847: t->s.eFlags |= EF_PLAYER_EVENT; ADDRLP4 32 ADDRLP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 32 INDIRP4 ADDRLP4 32 INDIRP4 INDIRI4 CNSTI4 16 BORI4 ASGNI4 line 848 ;848: t->s.otherEntityNum = ps->clientNum; ADDRLP4 0 INDIRP4 CNSTI4 184 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 ASGNI4 line 850 ;849: // send to everyone except the client who generated the event ;850: t->r.svFlags |= SVF_NOTSINGLECLIENT; ADDRLP4 36 ADDRLP4 0 INDIRP4 CNSTI4 304 ADDP4 ASGNP4 ADDRLP4 36 INDIRP4 ADDRLP4 36 INDIRP4 INDIRI4 CNSTI4 2048 BORI4 ASGNI4 line 851 ;851: t->r.singleClient = ps->clientNum; ADDRLP4 0 INDIRP4 CNSTI4 308 ADDP4 ADDRFP4 0 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 ASGNI4 line 853 ;852: // set back external event ;853: ps->externalEvent = extEvent; ADDRFP4 0 INDIRP4 CNSTI4 132 ADDP4 ADDRLP4 12 INDIRI4 ASGNI4 line 854 ;854: } LABELV $398 line 855 ;855:} LABELV $397 endproc SendPendingPredictableEvents 40 12 proc G_UpdateForceSightBroadcasts 72 12 line 875 ;856: ;857:extern int saberOffSound; ;858:extern int saberOnSound; ;859: ;860:/* ;861:================== ;862:G_UpdateClientBroadcasts ;863: ;864:Determines whether this client should be broadcast to any other clients. ;865:A client is broadcast when another client is using force sight or is ;866:================== ;867:*/ ;868:#define MAX_JEDIMASTER_DISTANCE 2500 ;869:#define MAX_JEDIMASTER_FOV 100 ;870: ;871:#define MAX_SIGHT_DISTANCE 1500 ;872:#define MAX_SIGHT_FOV 100 ;873: ;874:static void G_UpdateForceSightBroadcasts ( gentity_t *self ) ;875:{ line 879 ;876: int i; ;877: ;878: // Any clients with force sight on should see this client ;879: for ( i = 0; i < level.numConnectedClients; i ++ ) ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $404 JUMPV LABELV $401 line 880 ;880: { line 881 ;881: gentity_t *ent = &g_entities[level.sortedClients[i]]; ADDRLP4 4 CNSTI4 828 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 level+84 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 885 ;882: float dist; ;883: vec3_t angles; ;884: ;885: if ( ent == self ) ADDRLP4 4 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 NEU4 $407 line 886 ;886: { line 887 ;887: continue; ADDRGP4 $402 JUMPV LABELV $407 line 891 ;888: } ;889: ;890: // Not using force sight so we shouldnt broadcast to this one ;891: if ( !(ent->client->ps.fd.forcePowersActive & (1<client->ps.origin, ent->client->ps.origin, angles ); ADDRLP4 24 CNSTI4 408 ASGNI4 ADDRLP4 28 ADDRFP4 0 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 ASGNP4 ADDRLP4 32 CNSTI4 20 ASGNI4 ADDRLP4 36 ADDRLP4 4 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 ASGNP4 ADDRLP4 8 ADDRLP4 28 INDIRP4 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 40 CNSTI4 24 ASGNI4 ADDRLP4 8+4 ADDRLP4 28 INDIRP4 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 44 CNSTI4 408 ASGNI4 ADDRLP4 48 CNSTI4 28 ASGNI4 ADDRLP4 8+8 ADDRFP4 0 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRF4 ADDRLP4 4 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 line 897 ;897: dist = VectorLengthSquared ( angles ); ADDRLP4 8 ARGP4 ADDRLP4 52 ADDRGP4 VectorLengthSquared CALLF4 ASGNF4 ADDRLP4 20 ADDRLP4 52 INDIRF4 ASGNF4 line 898 ;898: vectoangles ( angles, angles ); ADDRLP4 8 ARGP4 ADDRLP4 8 ARGP4 ADDRGP4 vectoangles CALLV pop line 901 ;899: ;900: // Too far away then just forget it ;901: if ( dist > MAX_SIGHT_DISTANCE * MAX_SIGHT_DISTANCE ) ADDRLP4 20 INDIRF4 CNSTF4 1242125376 LEF4 $413 line 902 ;902: { line 903 ;903: continue; ADDRGP4 $402 JUMPV LABELV $413 line 907 ;904: } ;905: ;906: // If not within the field of view then forget it ;907: if ( !InFieldOfVision ( ent->client->ps.viewangles, MAX_SIGHT_FOV, angles ) ) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 156 ADDP4 ARGP4 CNSTF4 1120403456 ARGF4 ADDRLP4 8 ARGP4 ADDRLP4 56 ADDRGP4 InFieldOfVision CALLI4 ASGNI4 ADDRLP4 56 INDIRI4 CNSTI4 0 NEI4 $415 line 908 ;908: { line 909 ;909: break; ADDRGP4 $403 JUMPV LABELV $415 line 914 ;910: } ;911: ;912: // Turn on the broadcast bit for the master and since there is only one ;913: // master we are done ;914: self->r.broadcastClients[ent->s.clientNum/32] |= (1 << (ent->s.clientNum%32)); ADDRLP4 60 ADDRLP4 4 INDIRP4 CNSTI4 220 ADDP4 INDIRI4 ASGNI4 ADDRLP4 64 CNSTI4 32 ASGNI4 ADDRLP4 68 ADDRLP4 60 INDIRI4 ADDRLP4 64 INDIRI4 DIVI4 CNSTI4 2 LSHI4 ADDRFP4 0 INDIRP4 CNSTI4 400 ADDP4 ADDP4 ASGNP4 ADDRLP4 68 INDIRP4 ADDRLP4 68 INDIRP4 INDIRI4 CNSTI4 1 ADDRLP4 60 INDIRI4 ADDRLP4 64 INDIRI4 MODI4 LSHI4 BORI4 ASGNI4 line 916 ;915: ;916: break; ADDRGP4 $403 JUMPV LABELV $402 line 879 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $404 ADDRLP4 0 INDIRI4 ADDRGP4 level+72 INDIRI4 LTI4 $401 LABELV $403 line 918 ;917: } ;918:} LABELV $400 endproc G_UpdateForceSightBroadcasts 72 12 proc G_UpdateJediMasterBroadcasts 72 12 line 921 ;919: ;920:static void G_UpdateJediMasterBroadcasts ( gentity_t *self ) ;921:{ line 925 ;922: int i; ;923: ;924: // Not jedi master mode then nothing to do ;925: if ( g_gametype.integer != GT_JEDIMASTER ) ADDRGP4 g_gametype+12 INDIRI4 CNSTI4 2 EQI4 $418 line 926 ;926: { line 927 ;927: return; ADDRGP4 $417 JUMPV LABELV $418 line 931 ;928: } ;929: ;930: // This client isnt the jedi master so it shouldnt broadcast ;931: if ( !self->client->ps.isJediMaster ) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 604 ADDP4 INDIRI4 CNSTI4 0 NEI4 $421 line 932 ;932: { line 933 ;933: return; ADDRGP4 $417 JUMPV LABELV $421 line 937 ;934: } ;935: ;936: // Broadcast ourself to all clients within range ;937: for ( i = 0; i < level.numConnectedClients; i ++ ) ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $426 JUMPV LABELV $423 line 938 ;938: { line 939 ;939: gentity_t *ent = &g_entities[level.sortedClients[i]]; ADDRLP4 4 CNSTI4 828 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 level+84 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 943 ;940: float dist; ;941: vec3_t angles; ;942: ;943: if ( ent == self ) ADDRLP4 4 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 NEU4 $429 line 944 ;944: { line 945 ;945: continue; ADDRGP4 $424 JUMPV LABELV $429 line 948 ;946: } ;947: ;948: VectorSubtract( self->client->ps.origin, ent->client->ps.origin, angles ); ADDRLP4 24 CNSTI4 408 ASGNI4 ADDRLP4 28 ADDRFP4 0 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 ASGNP4 ADDRLP4 32 CNSTI4 20 ASGNI4 ADDRLP4 36 ADDRLP4 4 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 ASGNP4 ADDRLP4 8 ADDRLP4 28 INDIRP4 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 ADDRLP4 32 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 40 CNSTI4 24 ASGNI4 ADDRLP4 8+4 ADDRLP4 28 INDIRP4 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 ADDRLP4 40 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 44 CNSTI4 408 ASGNI4 ADDRLP4 48 CNSTI4 28 ASGNI4 ADDRLP4 8+8 ADDRFP4 0 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRF4 ADDRLP4 4 INDIRP4 ADDRLP4 44 INDIRI4 ADDP4 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 line 949 ;949: dist = VectorLengthSquared ( angles ); ADDRLP4 8 ARGP4 ADDRLP4 52 ADDRGP4 VectorLengthSquared CALLF4 ASGNF4 ADDRLP4 20 ADDRLP4 52 INDIRF4 ASGNF4 line 950 ;950: vectoangles ( angles, angles ); ADDRLP4 8 ARGP4 ADDRLP4 8 ARGP4 ADDRGP4 vectoangles CALLV pop line 953 ;951: ;952: // Too far away then just forget it ;953: if ( dist > MAX_JEDIMASTER_DISTANCE * MAX_JEDIMASTER_DISTANCE ) ADDRLP4 20 INDIRF4 CNSTF4 1254013984 LEF4 $433 line 954 ;954: { line 955 ;955: continue; ADDRGP4 $424 JUMPV LABELV $433 line 959 ;956: } ;957: ;958: // If not within the field of view then forget it ;959: if ( !InFieldOfVision ( ent->client->ps.viewangles, MAX_JEDIMASTER_FOV, angles ) ) ADDRLP4 4 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 156 ADDP4 ARGP4 CNSTF4 1120403456 ARGF4 ADDRLP4 8 ARGP4 ADDRLP4 56 ADDRGP4 InFieldOfVision CALLI4 ASGNI4 ADDRLP4 56 INDIRI4 CNSTI4 0 NEI4 $435 line 960 ;960: { line 961 ;961: continue; ADDRGP4 $424 JUMPV LABELV $435 line 966 ;962: } ;963: ;964: // Turn on the broadcast bit for the master and since there is only one ;965: // master we are done ;966: self->r.broadcastClients[ent->s.clientNum/32] |= (1 << (ent->s.clientNum%32)); ADDRLP4 60 ADDRLP4 4 INDIRP4 CNSTI4 220 ADDP4 INDIRI4 ASGNI4 ADDRLP4 64 CNSTI4 32 ASGNI4 ADDRLP4 68 ADDRLP4 60 INDIRI4 ADDRLP4 64 INDIRI4 DIVI4 CNSTI4 2 LSHI4 ADDRFP4 0 INDIRP4 CNSTI4 400 ADDP4 ADDP4 ASGNP4 ADDRLP4 68 INDIRP4 ADDRLP4 68 INDIRP4 INDIRI4 CNSTI4 1 ADDRLP4 60 INDIRI4 ADDRLP4 64 INDIRI4 MODI4 LSHI4 BORI4 ASGNI4 line 967 ;967: } LABELV $424 line 937 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $426 ADDRLP4 0 INDIRI4 ADDRGP4 level+72 INDIRI4 LTI4 $423 line 968 ;968:} LABELV $417 endproc G_UpdateJediMasterBroadcasts 72 12 export G_UpdateClientBroadcasts proc G_UpdateClientBroadcasts 0 12 line 971 ;969: ;970:void G_UpdateClientBroadcasts ( gentity_t *self ) ;971:{ line 973 ;972: // Clear all the broadcast bits for this client ;973: memset ( self->r.broadcastClients, 0, sizeof ( self->r.broadcastClients ) ); ADDRFP4 0 INDIRP4 CNSTI4 400 ADDP4 ARGP4 CNSTI4 0 ARGI4 CNSTI4 8 ARGI4 ADDRGP4 memset CALLP4 pop line 976 ;974: ;975: // The jedi master is broadcast to everyone in range ;976: G_UpdateJediMasterBroadcasts ( self ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_UpdateJediMasterBroadcasts CALLV pop line 979 ;977: ;978: // Anyone with force sight on should see this client ;979: G_UpdateForceSightBroadcasts ( self ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_UpdateForceSightBroadcasts CALLV pop line 980 ;980:} LABELV $437 endproc G_UpdateClientBroadcasts 0 12 export ClientThink_real proc ClientThink_real 580 32 line 993 ;981: ;982:/* ;983:============== ;984:ClientThink ;985: ;986:This will be called once for each client frame, which will ;987:usually be a couple times for each server frame on fast clients. ;988: ;989:If "g_synchronousClients 1" is set, this will be called exactly ;990:once for each server frame, which makes for smooth demo recording. ;991:============== ;992:*/ ;993:void ClientThink_real( gentity_t *ent ) { line 1001 ;994: gclient_t *client; ;995: pmove_t pm; ;996: int oldEventSequence; ;997: int msec; ;998: int i; ;999: usercmd_t *ucmd; ;1000: ;1001: client = ent->client; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 line 1004 ;1002: ;1003: // don't think if the client is not yet connected (and thus not yet spawned in) ;1004: if (client->pers.connected != CON_CONNECTED) { ADDRLP4 4 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 EQI4 $439 line 1005 ;1005: return; ADDRGP4 $438 JUMPV LABELV $439 line 1008 ;1006: } ;1007: // mark the time, so the connection sprite can be removed ;1008: ucmd = &ent->client->pers.cmd; ADDRLP4 384 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 ASGNP4 line 1011 ;1009: ;1010: // sanity check the command time to prevent speedup cheating ;1011: if ( ucmd->serverTime > level.time + 200 ) { ADDRLP4 384 INDIRP4 INDIRI4 ADDRGP4 level+32 INDIRI4 CNSTI4 200 ADDI4 LEI4 $441 line 1012 ;1012: ucmd->serverTime = level.time + 200; ADDRLP4 384 INDIRP4 ADDRGP4 level+32 INDIRI4 CNSTI4 200 ADDI4 ASGNI4 line 1014 ;1013:// G_Printf("serverTime <<<<<\n" ); ;1014: } LABELV $441 line 1015 ;1015: if ( ucmd->serverTime < level.time - 1000 ) { ADDRLP4 384 INDIRP4 INDIRI4 ADDRGP4 level+32 INDIRI4 CNSTI4 1000 SUBI4 GEI4 $445 line 1016 ;1016: ucmd->serverTime = level.time - 1000; ADDRLP4 384 INDIRP4 ADDRGP4 level+32 INDIRI4 CNSTI4 1000 SUBI4 ASGNI4 line 1018 ;1017:// G_Printf("serverTime >>>>>\n" ); ;1018: } LABELV $445 line 1020 ;1019: ;1020: msec = ucmd->serverTime - client->ps.commandTime; ADDRLP4 388 ADDRLP4 384 INDIRP4 INDIRI4 ADDRLP4 4 INDIRP4 INDIRI4 SUBI4 ASGNI4 line 1023 ;1021: // following others may result in bad times, but we still want ;1022: // to check for follow toggles ;1023: if ( msec < 1 && client->sess.spectatorState != SPECTATOR_FOLLOW ) { ADDRLP4 388 INDIRI4 CNSTI4 1 GEI4 $449 ADDRLP4 4 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 2 EQI4 $449 line 1024 ;1024: return; ADDRGP4 $438 JUMPV LABELV $449 line 1026 ;1025: } ;1026: if ( msec > 200 ) { ADDRLP4 388 INDIRI4 CNSTI4 200 LEI4 $451 line 1027 ;1027: msec = 200; ADDRLP4 388 CNSTI4 200 ASGNI4 line 1028 ;1028: } LABELV $451 line 1030 ;1029: ;1030: if ( pmove_msec.integer < 8 ) { ADDRGP4 pmove_msec+12 INDIRI4 CNSTI4 8 GEI4 $453 line 1031 ;1031: trap_Cvar_Set("pmove_msec", "8"); ADDRGP4 $456 ARGP4 ADDRGP4 $457 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1032 ;1032: } ADDRGP4 $454 JUMPV LABELV $453 line 1033 ;1033: else if (pmove_msec.integer > 33) { ADDRGP4 pmove_msec+12 INDIRI4 CNSTI4 33 LEI4 $458 line 1034 ;1034: trap_Cvar_Set("pmove_msec", "33"); ADDRGP4 $456 ARGP4 ADDRGP4 $461 ARGP4 ADDRGP4 trap_Cvar_Set CALLV pop line 1035 ;1035: } LABELV $458 LABELV $454 line 1037 ;1036: ;1037: if ( pmove_fixed.integer || client->pers.pmoveFixed ) { ADDRLP4 396 CNSTI4 0 ASGNI4 ADDRGP4 pmove_fixed+12 INDIRI4 ADDRLP4 396 INDIRI4 NEI4 $465 ADDRLP4 4 INDIRP4 CNSTI4 1412 ADDP4 INDIRI4 ADDRLP4 396 INDIRI4 EQI4 $462 LABELV $465 line 1038 ;1038: ucmd->serverTime = ((ucmd->serverTime + pmove_msec.integer-1) / pmove_msec.integer) * pmove_msec.integer; ADDRLP4 384 INDIRP4 ADDRLP4 384 INDIRP4 INDIRI4 ADDRGP4 pmove_msec+12 INDIRI4 ADDI4 CNSTI4 1 SUBI4 ADDRGP4 pmove_msec+12 INDIRI4 DIVI4 ADDRGP4 pmove_msec+12 INDIRI4 MULI4 ASGNI4 line 1041 ;1039: //if (ucmd->serverTime - client->ps.commandTime <= 0) ;1040: // return; ;1041: } LABELV $462 line 1046 ;1042: ;1043: // ;1044: // check for exiting intermission ;1045: // ;1046: if ( level.intermissiontime ) { ADDRGP4 level+9008 INDIRI4 CNSTI4 0 EQI4 $469 line 1047 ;1047: ClientIntermissionThink( client ); ADDRLP4 4 INDIRP4 ARGP4 ADDRGP4 ClientIntermissionThink CALLV pop line 1048 ;1048: return; ADDRGP4 $438 JUMPV LABELV $469 line 1052 ;1049: } ;1050: ;1051: // spectators don't do much ;1052: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRLP4 4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $472 line 1053 ;1053: if ( client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { ADDRLP4 4 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 3 NEI4 $474 line 1054 ;1054: return; ADDRGP4 $438 JUMPV LABELV $474 line 1056 ;1055: } ;1056: SpectatorThink( ent, ucmd ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 384 INDIRP4 ARGP4 ADDRGP4 SpectatorThink CALLV pop line 1057 ;1057: return; ADDRGP4 $438 JUMPV LABELV $472 line 1060 ;1058: } ;1059: ;1060: if (ent && ent->client && (ent->client->ps.eFlags & EF_INVULNERABLE)) ADDRLP4 400 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 404 CNSTU4 0 ASGNU4 ADDRLP4 400 INDIRP4 CVPU4 4 ADDRLP4 404 INDIRU4 EQU4 $476 ADDRLP4 408 ADDRLP4 400 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 408 INDIRP4 CVPU4 4 ADDRLP4 404 INDIRU4 EQU4 $476 ADDRLP4 408 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 67108864 BANDI4 CNSTI4 0 EQI4 $476 line 1061 ;1061: { line 1062 ;1062: if (ent->client->invulnerableTimer <= level.time) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1564 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GTI4 $478 line 1063 ;1063: { line 1064 ;1064: ent->client->ps.eFlags &= ~EF_INVULNERABLE; ADDRLP4 412 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 412 INDIRP4 ADDRLP4 412 INDIRP4 INDIRI4 CNSTI4 -67108865 BANDI4 ASGNI4 line 1065 ;1065: } LABELV $478 line 1066 ;1066: } LABELV $476 line 1069 ;1067: ;1068: // check for inactivity timer, but never drop the local client of a non-dedicated server ;1069: if ( !ClientInactivityTimer( client ) ) { ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 412 ADDRGP4 ClientInactivityTimer CALLI4 ASGNI4 ADDRLP4 412 INDIRI4 CNSTI4 0 NEI4 $481 line 1070 ;1070: return; ADDRGP4 $438 JUMPV LABELV $481 line 1074 ;1071: } ;1072: ;1073: // clear the rewards if time ;1074: if ( level.time > client->rewardTime ) { ADDRGP4 level+32 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1684 ADDP4 INDIRI4 LEI4 $483 line 1075 ;1075: client->ps.eFlags &= ~(EF_AWARD_IMPRESSIVE | EF_AWARD_EXCELLENT | EF_AWARD_GAUNTLET | EF_AWARD_ASSIST | EF_AWARD_DEFEND | EF_AWARD_CAP ); ADDRLP4 416 ADDRLP4 4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 416 INDIRP4 ADDRLP4 416 INDIRP4 INDIRI4 CNSTI4 -231497 BANDI4 ASGNI4 line 1076 ;1076: } LABELV $483 line 1078 ;1077: ;1078: if ( client->noclip ) { ADDRLP4 4 INDIRP4 CNSTI4 1576 ADDP4 INDIRI4 CNSTI4 0 EQI4 $486 line 1079 ;1079: client->ps.pm_type = PM_NOCLIP; ADDRLP4 4 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 2 ASGNI4 line 1080 ;1080: } else if ( client->ps.eFlags & EF_DISINTEGRATION ) { ADDRGP4 $487 JUMPV LABELV $486 ADDRLP4 4 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 33554432 BANDI4 CNSTI4 0 EQI4 $488 line 1081 ;1081: client->ps.pm_type = PM_NOCLIP; ADDRLP4 4 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 2 ASGNI4 line 1082 ;1082: } else if ( client->ps.stats[STAT_HEALTH] <= 0 ) { ADDRGP4 $489 JUMPV LABELV $488 ADDRLP4 4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 CNSTI4 0 GTI4 $490 line 1083 ;1083: client->ps.pm_type = PM_DEAD; ADDRLP4 416 CNSTI4 4 ASGNI4 ADDRLP4 4 INDIRP4 ADDRLP4 416 INDIRI4 ADDP4 ADDRLP4 416 INDIRI4 ASGNI4 line 1084 ;1084: } else { ADDRGP4 $491 JUMPV LABELV $490 line 1085 ;1085: if (client->ps.forceGripChangeMovetype) ADDRLP4 4 INDIRP4 CNSTI4 1276 ADDP4 INDIRI4 CNSTI4 0 EQI4 $492 line 1086 ;1086: { line 1087 ;1087: client->ps.pm_type = client->ps.forceGripChangeMovetype; ADDRLP4 4 INDIRP4 CNSTI4 4 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 1276 ADDP4 INDIRI4 ASGNI4 line 1088 ;1088: } ADDRGP4 $493 JUMPV LABELV $492 line 1090 ;1089: else ;1090: { line 1091 ;1091: client->ps.pm_type = PM_NORMAL; ADDRLP4 4 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 0 ASGNI4 line 1092 ;1092: } LABELV $493 line 1093 ;1093: } LABELV $491 LABELV $489 LABELV $487 line 1095 ;1094: ;1095: client->ps.gravity = g_gravity.value; ADDRLP4 4 INDIRP4 CNSTI4 56 ADDP4 ADDRGP4 g_gravity+8 INDIRF4 CVFI4 4 ASGNI4 line 1098 ;1096: ;1097: // set speed ;1098: client->ps.speed = g_speed.value; ADDRLP4 4 INDIRP4 CNSTI4 60 ADDP4 ADDRGP4 g_speed+8 INDIRF4 CVFI4 4 ASGNI4 line 1099 ;1099: client->ps.basespeed = g_speed.value; ADDRLP4 4 INDIRP4 CNSTI4 64 ADDP4 ADDRGP4 g_speed+8 INDIRF4 CVFI4 4 ASGNI4 line 1101 ;1100: ;1101: if (ent->client->ps.duelInProgress) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 INDIRI4 CNSTI4 0 EQI4 $497 line 1102 ;1102: { line 1103 ;1103: gentity_t *duelAgainst = &g_entities[ent->client->ps.duelIndex]; ADDRLP4 416 CNSTI4 828 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1284 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1108 ;1104: ;1105: //Keep the time updated, so once this duel ends this player can't engage in a duel for another ;1106: //10 seconds. This will give other people a chance to engage in duels in case this player wants ;1107: //to engage again right after he's done fighting and someone else is waiting. ;1108: ent->client->ps.fd.privateDuelTime = level.time + 10000; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1228 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 10000 ADDI4 ASGNI4 line 1110 ;1109: ;1110: if (ent->client->ps.duelTime < level.time) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1288 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GEI4 $500 line 1111 ;1111: { line 1113 ;1112: //Bring out the sabers ;1113: if (ent->client->ps.weapon == WP_SABER && ent->client->ps.saberHolstered && ADDRLP4 420 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 420 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 NEI4 $503 ADDRLP4 424 CNSTI4 0 ASGNI4 ADDRLP4 420 INDIRP4 CNSTI4 1300 ADDP4 INDIRI4 ADDRLP4 424 INDIRI4 EQI4 $503 ADDRLP4 420 INDIRP4 CNSTI4 1288 ADDP4 INDIRI4 ADDRLP4 424 INDIRI4 EQI4 $503 line 1115 ;1114: ent->client->ps.duelTime) ;1115: { line 1116 ;1116: if (!saberOffSound || !saberOnSound) ADDRLP4 428 CNSTI4 0 ASGNI4 ADDRGP4 saberOffSound INDIRI4 ADDRLP4 428 INDIRI4 EQI4 $507 ADDRGP4 saberOnSound INDIRI4 ADDRLP4 428 INDIRI4 NEI4 $505 LABELV $507 line 1117 ;1117: { line 1118 ;1118: saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav"); ADDRGP4 $508 ARGP4 ADDRLP4 432 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRGP4 saberOffSound ADDRLP4 432 INDIRI4 ASGNI4 line 1119 ;1119: saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav"); ADDRGP4 $509 ARGP4 ADDRLP4 436 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRGP4 saberOnSound ADDRLP4 436 INDIRI4 ASGNI4 line 1120 ;1120: } LABELV $505 line 1122 ;1121: ;1122: ent->client->ps.saberHolstered = qfalse; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1300 ADDP4 CNSTI4 0 ASGNI4 line 1123 ;1123: G_Sound(ent, CHAN_AUTO, saberOnSound); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 saberOnSound INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 1125 ;1124: ;1125: G_AddEvent(ent, EV_PRIVATE_DUEL, 2); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 2 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1127 ;1126: ;1127: ent->client->ps.duelTime = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1288 ADDP4 CNSTI4 0 ASGNI4 line 1128 ;1128: } LABELV $503 line 1130 ;1129: ;1130: if (duelAgainst && duelAgainst->client && duelAgainst->inuse && ADDRLP4 432 CNSTU4 0 ASGNU4 ADDRLP4 416 INDIRP4 CVPU4 4 ADDRLP4 432 INDIRU4 EQU4 $501 ADDRLP4 436 ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 436 INDIRP4 CVPU4 4 ADDRLP4 432 INDIRU4 EQU4 $501 ADDRLP4 440 CNSTI4 0 ASGNI4 ADDRLP4 416 INDIRP4 CNSTI4 412 ADDP4 INDIRI4 ADDRLP4 440 INDIRI4 EQI4 $501 ADDRLP4 436 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 NEI4 $501 ADDRLP4 436 INDIRP4 CNSTI4 1300 ADDP4 INDIRI4 ADDRLP4 440 INDIRI4 EQI4 $501 ADDRLP4 436 INDIRP4 CNSTI4 1288 ADDP4 INDIRI4 ADDRLP4 440 INDIRI4 EQI4 $501 line 1133 ;1131: duelAgainst->client->ps.weapon == WP_SABER && duelAgainst->client->ps.saberHolstered && ;1132: duelAgainst->client->ps.duelTime) ;1133: { line 1134 ;1134: if (!saberOffSound || !saberOnSound) ADDRLP4 444 CNSTI4 0 ASGNI4 ADDRGP4 saberOffSound INDIRI4 ADDRLP4 444 INDIRI4 EQI4 $514 ADDRGP4 saberOnSound INDIRI4 ADDRLP4 444 INDIRI4 NEI4 $512 LABELV $514 line 1135 ;1135: { line 1136 ;1136: saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav"); ADDRGP4 $508 ARGP4 ADDRLP4 448 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRGP4 saberOffSound ADDRLP4 448 INDIRI4 ASGNI4 line 1137 ;1137: saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav"); ADDRGP4 $509 ARGP4 ADDRLP4 452 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRGP4 saberOnSound ADDRLP4 452 INDIRI4 ASGNI4 line 1138 ;1138: } LABELV $512 line 1140 ;1139: ;1140: duelAgainst->client->ps.saberHolstered = qfalse; ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1300 ADDP4 CNSTI4 0 ASGNI4 line 1141 ;1141: G_Sound(duelAgainst, CHAN_AUTO, saberOnSound); ADDRLP4 416 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 saberOnSound INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 1143 ;1142: ;1143: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 2); ADDRLP4 416 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 2 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1145 ;1144: ;1145: duelAgainst->client->ps.duelTime = 0; ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1288 ADDP4 CNSTI4 0 ASGNI4 line 1146 ;1146: } line 1147 ;1147: } ADDRGP4 $501 JUMPV LABELV $500 line 1149 ;1148: else ;1149: { line 1150 ;1150: client->ps.speed = 0; ADDRLP4 4 INDIRP4 CNSTI4 60 ADDP4 CNSTI4 0 ASGNI4 line 1151 ;1151: client->ps.basespeed = 0; ADDRLP4 4 INDIRP4 CNSTI4 64 ADDP4 CNSTI4 0 ASGNI4 line 1152 ;1152: ucmd->forwardmove = 0; ADDRLP4 384 INDIRP4 CNSTI4 24 ADDP4 CNSTI1 0 ASGNI1 line 1153 ;1153: ucmd->rightmove = 0; ADDRLP4 384 INDIRP4 CNSTI4 25 ADDP4 CNSTI1 0 ASGNI1 line 1154 ;1154: ucmd->upmove = 0; ADDRLP4 384 INDIRP4 CNSTI4 26 ADDP4 CNSTI1 0 ASGNI1 line 1155 ;1155: } LABELV $501 line 1157 ;1156: ;1157: if (!duelAgainst || !duelAgainst->client || !duelAgainst->inuse || ADDRLP4 424 CNSTU4 0 ASGNU4 ADDRLP4 416 INDIRP4 CVPU4 4 ADDRLP4 424 INDIRU4 EQU4 $519 ADDRLP4 428 ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 428 INDIRP4 CVPU4 4 ADDRLP4 424 INDIRU4 EQU4 $519 ADDRLP4 416 INDIRP4 CNSTI4 412 ADDP4 INDIRI4 CNSTI4 0 EQI4 $519 ADDRLP4 428 INDIRP4 CNSTI4 1284 ADDP4 INDIRI4 ADDRFP4 0 INDIRP4 INDIRI4 EQI4 $515 LABELV $519 line 1159 ;1158: duelAgainst->client->ps.duelIndex != ent->s.number) ;1159: { line 1160 ;1160: ent->client->ps.duelInProgress = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 CNSTI4 0 ASGNI4 line 1161 ;1161: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1162 ;1162: } ADDRGP4 $516 JUMPV LABELV $515 line 1163 ;1163: else if (duelAgainst->health < 1 || duelAgainst->client->ps.stats[STAT_HEALTH] < 1) ADDRLP4 436 CNSTI4 1 ASGNI4 ADDRLP4 416 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 436 INDIRI4 LTI4 $522 ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 ADDRLP4 436 INDIRI4 GEI4 $520 LABELV $522 line 1164 ;1164: { line 1165 ;1165: ent->client->ps.duelInProgress = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 CNSTI4 0 ASGNI4 line 1166 ;1166: duelAgainst->client->ps.duelInProgress = 0; ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 CNSTI4 0 ASGNI4 line 1168 ;1167: ;1168: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1169 ;1169: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 0); ADDRLP4 416 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1172 ;1170: ;1171: //Winner gets full health.. providing he's still alive ;1172: if (ent->health > 0 && ent->client->ps.stats[STAT_HEALTH] > 0) ADDRLP4 440 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 444 CNSTI4 0 ASGNI4 ADDRLP4 440 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 444 INDIRI4 LEI4 $523 ADDRLP4 440 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 ADDRLP4 444 INDIRI4 LEI4 $523 line 1173 ;1173: { line 1174 ;1174: if (ent->health < ent->client->ps.stats[STAT_MAX_HEALTH]) ADDRLP4 448 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 448 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 448 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 GEI4 $525 line 1175 ;1175: { line 1176 ;1176: ent->client->ps.stats[STAT_HEALTH] = ent->health = ent->client->ps.stats[STAT_MAX_HEALTH]; ADDRLP4 452 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 456 ADDRLP4 452 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 460 ADDRLP4 456 INDIRP4 CNSTI4 248 ADDP4 INDIRI4 ASGNI4 ADDRLP4 452 INDIRP4 CNSTI4 676 ADDP4 ADDRLP4 460 INDIRI4 ASGNI4 ADDRLP4 456 INDIRP4 CNSTI4 216 ADDP4 ADDRLP4 460 INDIRI4 ASGNI4 line 1177 ;1177: } LABELV $525 line 1179 ;1178: ;1179: if (g_spawnInvulnerability.integer) ADDRGP4 g_spawnInvulnerability+12 INDIRI4 CNSTI4 0 EQI4 $527 line 1180 ;1180: { line 1181 ;1181: ent->client->ps.eFlags |= EF_INVULNERABLE; ADDRLP4 452 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ASGNP4 ADDRLP4 452 INDIRP4 ADDRLP4 452 INDIRP4 INDIRI4 CNSTI4 67108864 BORI4 ASGNI4 line 1182 ;1182: 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 1183 ;1183: } LABELV $527 line 1184 ;1184: } LABELV $523 line 1191 ;1185: ;1186: /* ;1187: trap_SendServerCommand( ent-g_entities, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER")) ); ;1188: trap_SendServerCommand( duelAgainst-g_entities, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER")) ); ;1189: */ ;1190: //Private duel announcements are now made globally because we only want one duel at a time. ;1191: if (ent->health > 0 && ent->client->ps.stats[STAT_HEALTH] > 0) ADDRLP4 448 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 452 CNSTI4 0 ASGNI4 ADDRLP4 448 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 452 INDIRI4 LEI4 $532 ADDRLP4 448 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 ADDRLP4 452 INDIRI4 LEI4 $532 line 1192 ;1192: { line 1193 ;1193: trap_SendServerCommand( -1, va("cp \"%s %s %s!\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER"), duelAgainst->client->pers.netname) ); ADDRGP4 $535 ARGP4 ADDRGP4 $536 ARGP4 ADDRLP4 456 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $534 ARGP4 ADDRLP4 460 CNSTI4 408 ASGNI4 ADDRLP4 464 CNSTI4 1416 ASGNI4 ADDRFP4 0 INDIRP4 ADDRLP4 460 INDIRI4 ADDP4 INDIRP4 ADDRLP4 464 INDIRI4 ADDP4 ARGP4 ADDRLP4 456 INDIRP4 ARGP4 ADDRLP4 416 INDIRP4 ADDRLP4 460 INDIRI4 ADDP4 INDIRP4 ADDRLP4 464 INDIRI4 ADDP4 ARGP4 ADDRLP4 468 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 468 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1194 ;1194: } ADDRGP4 $521 JUMPV LABELV $532 line 1196 ;1195: else ;1196: { //it was a draw, because we both managed to die in the same frame line 1197 ;1197: trap_SendServerCommand( -1, va("cp \"%s\n\"", G_GetStripEdString("SVINGAME", "PLDUELTIE")) ); ADDRGP4 $535 ARGP4 ADDRGP4 $538 ARGP4 ADDRLP4 456 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $537 ARGP4 ADDRLP4 456 INDIRP4 ARGP4 ADDRLP4 460 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 460 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1198 ;1198: } line 1199 ;1199: } ADDRGP4 $521 JUMPV LABELV $520 line 1201 ;1200: else ;1201: { line 1203 ;1202: vec3_t vSub; ;1203: float subLen = 0; ADDRLP4 440 CNSTF4 0 ASGNF4 line 1205 ;1204: ;1205: VectorSubtract(ent->client->ps.origin, duelAgainst->client->ps.origin, vSub); ADDRLP4 456 CNSTI4 408 ASGNI4 ADDRLP4 460 ADDRFP4 0 INDIRP4 ADDRLP4 456 INDIRI4 ADDP4 ASGNP4 ADDRLP4 464 CNSTI4 20 ASGNI4 ADDRLP4 468 ADDRLP4 416 INDIRP4 ADDRLP4 456 INDIRI4 ADDP4 ASGNP4 ADDRLP4 444 ADDRLP4 460 INDIRP4 INDIRP4 ADDRLP4 464 INDIRI4 ADDP4 INDIRF4 ADDRLP4 468 INDIRP4 INDIRP4 ADDRLP4 464 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 472 CNSTI4 24 ASGNI4 ADDRLP4 444+4 ADDRLP4 460 INDIRP4 INDIRP4 ADDRLP4 472 INDIRI4 ADDP4 INDIRF4 ADDRLP4 468 INDIRP4 INDIRP4 ADDRLP4 472 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 476 CNSTI4 408 ASGNI4 ADDRLP4 480 CNSTI4 28 ASGNI4 ADDRLP4 444+8 ADDRFP4 0 INDIRP4 ADDRLP4 476 INDIRI4 ADDP4 INDIRP4 ADDRLP4 480 INDIRI4 ADDP4 INDIRF4 ADDRLP4 416 INDIRP4 ADDRLP4 476 INDIRI4 ADDP4 INDIRP4 ADDRLP4 480 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 line 1206 ;1206: subLen = VectorLength(vSub); ADDRLP4 444 ARGP4 ADDRLP4 484 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 440 ADDRLP4 484 INDIRF4 ASGNF4 line 1208 ;1207: ;1208: if (subLen >= 1024) ADDRLP4 440 INDIRF4 CNSTF4 1149239296 LTF4 $541 line 1209 ;1209: { line 1210 ;1210: ent->client->ps.duelInProgress = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 CNSTI4 0 ASGNI4 line 1211 ;1211: duelAgainst->client->ps.duelInProgress = 0; ADDRLP4 416 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1292 ADDP4 CNSTI4 0 ASGNI4 line 1213 ;1212: ;1213: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1214 ;1214: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 0); ADDRLP4 416 INDIRP4 ARGP4 CNSTI4 13 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1216 ;1215: ;1216: trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "PLDUELSTOP")) ); ADDRGP4 $535 ARGP4 ADDRGP4 $544 ARGP4 ADDRLP4 488 ADDRGP4 G_GetStripEdString CALLP4 ASGNP4 ADDRGP4 $543 ARGP4 ADDRLP4 488 INDIRP4 ARGP4 ADDRLP4 492 ADDRGP4 va CALLP4 ASGNP4 CNSTI4 -1 ARGI4 ADDRLP4 492 INDIRP4 ARGP4 ADDRGP4 trap_SendServerCommand CALLV pop line 1217 ;1217: } LABELV $541 line 1218 ;1218: } LABELV $521 LABELV $516 line 1219 ;1219: } LABELV $497 line 1227 ;1220: ;1221: /* ;1222: if ( client->ps.powerups[PW_HASTE] ) { ;1223: client->ps.speed *= 1.3; ;1224: } ;1225: */ ;1226: ;1227: if (client->ps.usingATST && ent->health > 0) ADDRLP4 416 CNSTI4 0 ASGNI4 ADDRLP4 4 INDIRP4 CNSTI4 1304 ADDP4 INDIRI4 ADDRLP4 416 INDIRI4 EQI4 $545 ADDRFP4 0 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 416 INDIRI4 LEI4 $545 line 1228 ;1228: { //we have special shot clip boxes as an ATST line 1229 ;1229: ent->r.contents |= CONTENTS_NOSHOT; ADDRLP4 420 ADDRFP4 0 INDIRP4 CNSTI4 340 ADDP4 ASGNP4 ADDRLP4 420 INDIRP4 ADDRLP4 420 INDIRP4 INDIRI4 CNSTI4 2097152 BORI4 ASGNI4 line 1230 ;1230: ATST_ManageDamageBoxes(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ATST_ManageDamageBoxes CALLV pop line 1231 ;1231: } ADDRGP4 $546 JUMPV LABELV $545 line 1233 ;1232: else ;1233: { line 1234 ;1234: ent->r.contents &= ~CONTENTS_NOSHOT; ADDRLP4 420 ADDRFP4 0 INDIRP4 CNSTI4 340 ADDP4 ASGNP4 ADDRLP4 420 INDIRP4 ADDRLP4 420 INDIRP4 INDIRI4 CNSTI4 -2097153 BANDI4 ASGNI4 line 1235 ;1235: client->damageBoxHandle_Head = 0; ADDRLP4 4 INDIRP4 CNSTI4 1636 ADDP4 CNSTI4 0 ASGNI4 line 1236 ;1236: client->damageBoxHandle_RLeg = 0; ADDRLP4 4 INDIRP4 CNSTI4 1640 ADDP4 CNSTI4 0 ASGNI4 line 1237 ;1237: client->damageBoxHandle_LLeg = 0; ADDRLP4 4 INDIRP4 CNSTI4 1644 ADDP4 CNSTI4 0 ASGNI4 line 1238 ;1238: } LABELV $546 line 1244 ;1239: ;1240: //rww - moved this stuff into the pmove code so that it's predicted properly ;1241: //BG_AdjustClientSpeed(&client->ps, &client->pers.cmd, level.time); ;1242: ;1243: // set up for pmove ;1244: oldEventSequence = client->ps.eventSequence; ADDRLP4 392 ADDRLP4 4 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 ASGNI4 line 1246 ;1245: ;1246: memset (&pm, 0, sizeof(pm)); ADDRLP4 8 ARGP4 CNSTI4 0 ARGI4 CNSTI4 376 ARGI4 ADDRGP4 memset CALLP4 pop line 1248 ;1247: ;1248: if ( ent->flags & FL_FORCE_GESTURE ) { ADDRFP4 0 INDIRP4 CNSTI4 472 ADDP4 INDIRI4 CNSTI4 32768 BANDI4 CNSTI4 0 EQI4 $547 line 1249 ;1249: ent->flags &= ~FL_FORCE_GESTURE; ADDRLP4 420 ADDRFP4 0 INDIRP4 CNSTI4 472 ADDP4 ASGNP4 ADDRLP4 420 INDIRP4 ADDRLP4 420 INDIRP4 INDIRI4 CNSTI4 -32769 BANDI4 ASGNI4 line 1250 ;1250: ent->client->pers.cmd.buttons |= BUTTON_GESTURE; ADDRLP4 424 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1388 ADDP4 ASGNP4 ADDRLP4 424 INDIRP4 ADDRLP4 424 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1251 ;1251: } LABELV $547 line 1253 ;1252: ;1253: if (ent->client && ent->client->ps.fallingToDeath && ADDRLP4 420 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 420 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $549 ADDRLP4 424 ADDRLP4 420 INDIRP4 CNSTI4 1340 ADDP4 INDIRI4 ASGNI4 ADDRLP4 424 INDIRI4 CNSTI4 0 EQI4 $549 ADDRGP4 level+32 INDIRI4 CNSTI4 3000 SUBI4 ADDRLP4 424 INDIRI4 LEI4 $549 line 1255 ;1254: (level.time - FALL_FADE_TIME) > ent->client->ps.fallingToDeath) ;1255: { //die! line 1256 ;1256: player_die(ent, ent, ent, 100000, MOD_FALLING); ADDRLP4 428 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 428 INDIRP4 ARGP4 ADDRLP4 428 INDIRP4 ARGP4 ADDRLP4 428 INDIRP4 ARGP4 CNSTI4 100000 ARGI4 CNSTI4 34 ARGI4 ADDRGP4 player_die CALLV pop line 1257 ;1257: respawn(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 respawn CALLV pop line 1258 ;1258: ent->client->ps.fallingToDeath = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1340 ADDP4 CNSTI4 0 ASGNI4 line 1260 ;1259: ;1260: G_MuteSound(ent->s.number, CHAN_VOICE); //stop screaming, because you are dead! ADDRFP4 0 INDIRP4 INDIRI4 ARGI4 CNSTI4 3 ARGI4 ADDRGP4 G_MuteSound CALLV pop line 1261 ;1261: } LABELV $549 line 1263 ;1262: ;1263: if (ent->client->ps.otherKillerTime > level.time && ADDRLP4 428 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 428 INDIRP4 CNSTI4 752 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $552 ADDRLP4 428 INDIRP4 CNSTI4 84 ADDP4 INDIRI4 CNSTI4 1023 EQI4 $552 ADDRLP4 428 INDIRP4 CNSTI4 756 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GEI4 $552 line 1266 ;1264: ent->client->ps.groundEntityNum != ENTITYNUM_NONE && ;1265: ent->client->ps.otherKillerDebounceTime < level.time) ;1266: { line 1267 ;1267: ent->client->ps.otherKillerTime = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 752 ADDP4 CNSTI4 0 ASGNI4 line 1268 ;1268: ent->client->ps.otherKiller = ENTITYNUM_NONE; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 748 ADDP4 CNSTI4 1023 ASGNI4 line 1269 ;1269: } ADDRGP4 $553 JUMPV LABELV $552 line 1270 ;1270: else if (ent->client->ps.otherKillerTime > level.time && ADDRLP4 432 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 432 INDIRP4 CNSTI4 752 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $556 ADDRLP4 432 INDIRP4 CNSTI4 84 ADDP4 INDIRI4 CNSTI4 1023 NEI4 $556 line 1272 ;1271: ent->client->ps.groundEntityNum == ENTITYNUM_NONE) ;1272: { line 1273 ;1273: if (ent->client->ps.otherKillerDebounceTime < (level.time + 100)) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 756 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 GEI4 $559 line 1274 ;1274: { line 1275 ;1275: ent->client->ps.otherKillerDebounceTime = level.time + 100; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 756 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 1276 ;1276: } LABELV $559 line 1277 ;1277: } LABELV $556 LABELV $553 line 1282 ;1278: ;1279:// WP_ForcePowersUpdate( ent, msec, ucmd); //update any active force powers ;1280:// WP_SaberPositionUpdate(ent, ucmd); //check the server-side saber point, do apprioriate server-side actions (effects are cs-only) ;1281: ;1282: if ((ent->client->pers.cmd.buttons & BUTTON_USE) && ent->client->ps.useDelay < level.time) ADDRLP4 436 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 436 INDIRP4 CNSTI4 1388 ADDP4 INDIRI4 CNSTI4 32 BANDI4 CNSTI4 0 EQI4 $563 ADDRLP4 436 INDIRP4 CNSTI4 1344 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GEI4 $563 line 1283 ;1283: { line 1284 ;1284: TryUse(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 TryUse CALLV pop line 1285 ;1285: ent->client->ps.useDelay = level.time + 100; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1344 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 1286 ;1286: } LABELV $563 line 1288 ;1287: ;1288: pm.ps = &client->ps; ADDRLP4 8 ADDRLP4 4 INDIRP4 ASGNP4 line 1289 ;1289: pm.cmd = *ucmd; ADDRLP4 8+4 ADDRLP4 384 INDIRP4 INDIRB ASGNB 28 line 1290 ;1290: if ( pm.ps->pm_type == PM_DEAD ) { ADDRLP4 440 CNSTI4 4 ASGNI4 ADDRLP4 8 INDIRP4 ADDRLP4 440 INDIRI4 ADDP4 INDIRI4 ADDRLP4 440 INDIRI4 NEI4 $568 line 1291 ;1291: pm.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY; ADDRLP4 8+32 CNSTI4 17 ASGNI4 line 1292 ;1292: } ADDRGP4 $569 JUMPV LABELV $568 line 1293 ;1293: else if ( ent->r.svFlags & SVF_BOT ) { ADDRFP4 0 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $571 line 1294 ;1294: pm.tracemask = MASK_PLAYERSOLID | CONTENTS_BOTCLIP; ADDRLP4 8+32 CNSTI4 337 ASGNI4 line 1295 ;1295: } ADDRGP4 $572 JUMPV LABELV $571 line 1296 ;1296: else { line 1297 ;1297: pm.tracemask = MASK_PLAYERSOLID; ADDRLP4 8+32 CNSTI4 273 ASGNI4 line 1298 ;1298: } LABELV $572 LABELV $569 line 1299 ;1299: pm.trace = trap_Trace; ADDRLP4 8+240 ADDRGP4 trap_Trace ASGNP4 line 1300 ;1300: pm.pointcontents = trap_PointContents; ADDRLP4 8+244 ADDRGP4 trap_PointContents ASGNP4 line 1301 ;1301: pm.debugLevel = g_debugMove.integer; ADDRLP4 8+36 ADDRGP4 g_debugMove+12 INDIRI4 ASGNI4 line 1302 ;1302: pm.noFootsteps = ( g_dmflags.integer & DF_NO_FOOTSTEPS ) > 0; ADDRGP4 g_dmflags+12 INDIRI4 CNSTI4 32 BANDI4 CNSTI4 0 LEI4 $582 ADDRLP4 444 CNSTI4 1 ASGNI4 ADDRGP4 $583 JUMPV LABELV $582 ADDRLP4 444 CNSTI4 0 ASGNI4 LABELV $583 ADDRLP4 8+40 ADDRLP4 444 INDIRI4 ASGNI4 line 1304 ;1303: ;1304: pm.pmove_fixed = pmove_fixed.integer | client->pers.pmoveFixed; ADDRLP4 8+232 ADDRGP4 pmove_fixed+12 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1412 ADDP4 INDIRI4 BORI4 ASGNI4 line 1305 ;1305: pm.pmove_msec = pmove_msec.integer; ADDRLP4 8+236 ADDRGP4 pmove_msec+12 INDIRI4 ASGNI4 line 1307 ;1306: ;1307: pm.animations = bgGlobalAnimations;//NULL; ADDRLP4 8+224 ADDRGP4 bgGlobalAnimations ASGNP4 line 1309 ;1308: ;1309: pm.gametype = g_gametype.integer; ADDRLP4 8+220 ADDRGP4 g_gametype+12 INDIRI4 ASGNI4 line 1311 ;1310: ;1311: VectorCopy( client->ps.origin, client->oldOrigin ); ADDRLP4 4 INDIRP4 CNSTI4 1596 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1313 ;1312: ;1313: if (level.intermissionQueued != 0 && g_singlePlayer.integer) { ADDRLP4 452 CNSTI4 0 ASGNI4 ADDRGP4 level+9004 INDIRI4 ADDRLP4 452 INDIRI4 EQI4 $591 ADDRGP4 g_singlePlayer+12 INDIRI4 ADDRLP4 452 INDIRI4 EQI4 $591 line 1314 ;1314: if ( level.time - level.intermissionQueued >= 1000 ) { ADDRGP4 level+32 INDIRI4 ADDRGP4 level+9004 INDIRI4 SUBI4 CNSTI4 1000 LTI4 $595 line 1315 ;1315: pm.cmd.buttons = 0; ADDRLP4 8+4+16 CNSTI4 0 ASGNI4 line 1316 ;1316: pm.cmd.forwardmove = 0; ADDRLP4 8+4+24 CNSTI1 0 ASGNI1 line 1317 ;1317: pm.cmd.rightmove = 0; ADDRLP4 8+4+25 CNSTI1 0 ASGNI1 line 1318 ;1318: pm.cmd.upmove = 0; ADDRLP4 8+4+26 CNSTI1 0 ASGNI1 line 1319 ;1319: if ( level.time - level.intermissionQueued >= 2000 && level.time - level.intermissionQueued <= 2500 ) { ADDRGP4 level+32 INDIRI4 ADDRGP4 level+9004 INDIRI4 SUBI4 CNSTI4 2000 LTI4 $607 ADDRGP4 level+32 INDIRI4 ADDRGP4 level+9004 INDIRI4 SUBI4 CNSTI4 2500 GTI4 $607 line 1320 ;1320: trap_SendConsoleCommand( EXEC_APPEND, "centerview\n"); CNSTI4 2 ARGI4 ADDRGP4 $613 ARGP4 ADDRGP4 trap_SendConsoleCommand CALLV pop line 1321 ;1321: } LABELV $607 line 1322 ;1322: ent->client->ps.pm_type = PM_SPINTERMISSION; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 4 ADDP4 CNSTI4 7 ASGNI4 line 1323 ;1323: } LABELV $595 line 1324 ;1324: } LABELV $591 line 1326 ;1325: ;1326: for ( i = 0 ; i < MAX_CLIENTS ; i++ ) ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $614 line 1327 ;1327: { line 1328 ;1328: if (g_entities[i].inuse && g_entities[i].client) ADDRLP4 456 CNSTI4 828 ADDRLP4 0 INDIRI4 MULI4 ASGNI4 ADDRLP4 456 INDIRI4 ADDRGP4 g_entities+412 ADDP4 INDIRI4 CNSTI4 0 EQI4 $618 ADDRLP4 456 INDIRI4 ADDRGP4 g_entities+408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $618 line 1329 ;1329: { line 1330 ;1330: pm.bgClients[i] = &g_entities[i].client->ps; ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 8+248 ADDP4 CNSTI4 828 ADDRLP4 0 INDIRI4 MULI4 ADDRGP4 g_entities+408 ADDP4 INDIRP4 ASGNP4 line 1331 ;1331: } LABELV $618 line 1332 ;1332: } LABELV $615 line 1326 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 32 LTI4 $614 line 1334 ;1333: ;1334: if (ent->client->ps.saberLockTime > level.time) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 524 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 LEI4 $624 line 1335 ;1335: { line 1336 ;1336: gentity_t *blockOpp = &g_entities[ent->client->ps.saberLockEnemy]; ADDRLP4 456 CNSTI4 828 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 528 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1338 ;1337: ;1338: if (blockOpp && blockOpp->inuse && blockOpp->client) ADDRLP4 464 CNSTU4 0 ASGNU4 ADDRLP4 456 INDIRP4 CVPU4 4 ADDRLP4 464 INDIRU4 EQU4 $627 ADDRLP4 456 INDIRP4 CNSTI4 412 ADDP4 INDIRI4 CNSTI4 0 EQI4 $627 ADDRLP4 456 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 464 INDIRU4 EQU4 $627 line 1339 ;1339: { line 1343 ;1340: vec3_t lockDir, lockAng; ;1341: ;1342: //VectorClear( ent->client->ps.velocity ); ;1343: VectorSubtract( blockOpp->r.currentOrigin, ent->r.currentOrigin, lockDir ); ADDRLP4 496 CNSTI4 368 ASGNI4 ADDRLP4 500 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 468 ADDRLP4 456 INDIRP4 ADDRLP4 496 INDIRI4 ADDP4 INDIRF4 ADDRLP4 500 INDIRP4 ADDRLP4 496 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 504 CNSTI4 372 ASGNI4 ADDRLP4 468+4 ADDRLP4 456 INDIRP4 ADDRLP4 504 INDIRI4 ADDP4 INDIRF4 ADDRLP4 500 INDIRP4 ADDRLP4 504 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 508 CNSTI4 376 ASGNI4 ADDRLP4 468+8 ADDRLP4 456 INDIRP4 ADDRLP4 508 INDIRI4 ADDP4 INDIRF4 ADDRFP4 0 INDIRP4 ADDRLP4 508 INDIRI4 ADDP4 INDIRF4 SUBF4 ASGNF4 line 1345 ;1344: //lockAng[YAW] = vectoyaw( defDir ); ;1345: vectoangles(lockDir, lockAng); ADDRLP4 468 ARGP4 ADDRLP4 480 ARGP4 ADDRGP4 vectoangles CALLV pop line 1346 ;1346: SetClientViewAngle( ent, lockAng ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 480 ARGP4 ADDRGP4 SetClientViewAngle CALLV pop line 1347 ;1347: } LABELV $627 line 1349 ;1348: ;1349: if ( ( ent->client->buttons & BUTTON_ATTACK ) && ! ( ent->client->oldbuttons & BUTTON_ATTACK ) ) ADDRLP4 468 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 472 CNSTI4 1 ASGNI4 ADDRLP4 476 CNSTI4 0 ASGNI4 ADDRLP4 468 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ADDRLP4 472 INDIRI4 BANDI4 ADDRLP4 476 INDIRI4 EQI4 $631 ADDRLP4 468 INDIRP4 CNSTI4 1588 ADDP4 INDIRI4 ADDRLP4 472 INDIRI4 BANDI4 ADDRLP4 476 INDIRI4 NEI4 $631 line 1350 ;1350: { line 1351 ;1351: ent->client->ps.saberLockHits++; ADDRLP4 480 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 536 ADDP4 ASGNP4 ADDRLP4 480 INDIRP4 ADDRLP4 480 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1352 ;1352: } LABELV $631 line 1353 ;1353: if (ent->client->ps.saberLockHits > 2) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 536 ADDP4 INDIRI4 CNSTI4 2 LEI4 $625 line 1354 ;1354: { line 1355 ;1355: if (!ent->client->ps.saberLockAdvance) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 540 ADDP4 INDIRI4 CNSTI4 0 NEI4 $635 line 1356 ;1356: { line 1357 ;1357: ent->client->ps.saberLockHits -= 3; ADDRLP4 480 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 536 ADDP4 ASGNP4 ADDRLP4 480 INDIRP4 ADDRLP4 480 INDIRP4 INDIRI4 CNSTI4 3 SUBI4 ASGNI4 line 1358 ;1358: } LABELV $635 line 1359 ;1359: ent->client->ps.saberLockAdvance = qtrue; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 540 ADDP4 CNSTI4 1 ASGNI4 line 1360 ;1360: } line 1361 ;1361: } ADDRGP4 $625 JUMPV LABELV $624 line 1363 ;1362: else ;1363: { line 1364 ;1364: ent->client->ps.saberLockFrame = 0; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 532 ADDP4 CNSTI4 0 ASGNI4 line 1365 ;1365: } LABELV $625 line 1367 ;1366: ;1367: Pmove (&pm); ADDRLP4 8 ARGP4 ADDRGP4 Pmove CALLV pop line 1369 ;1368: ;1369: switch(pm.cmd.generic_cmd) ADDRLP4 456 ADDRLP4 8+4+23 INDIRU1 CVUI4 1 ASGNI4 ADDRLP4 456 INDIRI4 CNSTI4 0 LTI4 $638 ADDRLP4 456 INDIRI4 CNSTI4 20 GTI4 $638 ADDRLP4 456 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 $679 ADDP4 INDIRP4 JUMPV lit align 4 LABELV $679 address $638 address $643 address $644 address $645 address $646 address $647 address $648 address $649 address $650 address $651 address $652 address $653 address $654 address $655 address $656 address $659 address $662 address $665 address $670 address $675 address $678 code line 1370 ;1370: { line 1372 ;1371: case 0: ;1372: break; LABELV $643 line 1374 ;1373: case GENCMD_SABERSWITCH: ;1374: Cmd_ToggleSaber_f(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 Cmd_ToggleSaber_f CALLV pop line 1375 ;1375: break; ADDRGP4 $638 JUMPV LABELV $644 line 1377 ;1376: case GENCMD_ENGAGE_DUEL: ;1377: Cmd_EngageDuel_f(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 Cmd_EngageDuel_f CALLV pop line 1378 ;1378: break; ADDRGP4 $638 JUMPV LABELV $645 line 1380 ;1379: case GENCMD_FORCE_HEAL: ;1380: ForceHeal(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceHeal CALLV pop line 1381 ;1381: break; ADDRGP4 $638 JUMPV LABELV $646 line 1383 ;1382: case GENCMD_FORCE_SPEED: ;1383: ForceSpeed(ent, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 ForceSpeed CALLV pop line 1384 ;1384: break; ADDRGP4 $638 JUMPV LABELV $647 line 1386 ;1385: case GENCMD_FORCE_THROW: ;1386: ForceThrow(ent, qfalse); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRGP4 ForceThrow CALLV pop line 1387 ;1387: break; ADDRGP4 $638 JUMPV LABELV $648 line 1389 ;1388: case GENCMD_FORCE_PULL: ;1389: ForceThrow(ent, qtrue); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 ForceThrow CALLV pop line 1390 ;1390: break; ADDRGP4 $638 JUMPV LABELV $649 line 1392 ;1391: case GENCMD_FORCE_DISTRACT: ;1392: ForceTelepathy(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceTelepathy CALLV pop line 1393 ;1393: break; ADDRGP4 $638 JUMPV LABELV $650 line 1395 ;1394: case GENCMD_FORCE_RAGE: ;1395: ForceRage(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceRage CALLV pop line 1396 ;1396: break; ADDRGP4 $638 JUMPV LABELV $651 line 1398 ;1397: case GENCMD_FORCE_PROTECT: ;1398: ForceProtect(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceProtect CALLV pop line 1399 ;1399: break; ADDRGP4 $638 JUMPV LABELV $652 line 1401 ;1400: case GENCMD_FORCE_ABSORB: ;1401: ForceAbsorb(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceAbsorb CALLV pop line 1402 ;1402: break; ADDRGP4 $638 JUMPV LABELV $653 line 1404 ;1403: case GENCMD_FORCE_HEALOTHER: ;1404: ForceTeamHeal(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceTeamHeal CALLV pop line 1405 ;1405: break; ADDRGP4 $638 JUMPV LABELV $654 line 1407 ;1406: case GENCMD_FORCE_FORCEPOWEROTHER: ;1407: ForceTeamForceReplenish(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceTeamForceReplenish CALLV pop line 1408 ;1408: break; ADDRGP4 $638 JUMPV LABELV $655 line 1410 ;1409: case GENCMD_FORCE_SEEING: ;1410: ForceSeeing(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ForceSeeing CALLV pop line 1411 ;1411: break; ADDRGP4 $638 JUMPV LABELV $656 line 1413 ;1412: case GENCMD_USE_SEEKER: ;1413: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SEEKER)) && ADDRLP4 464 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 464 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 464 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRLP4 468 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 468 INDIRI4 CNSTI4 0 EQI4 $638 line 1415 ;1414: G_ItemUsable(&ent->client->ps, HI_SEEKER) ) ;1415: { line 1416 ;1416: ItemUse_Seeker(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Seeker CALLV pop line 1417 ;1417: G_AddEvent(ent, EV_USE_ITEM0+HI_SEEKER, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 41 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1418 ;1418: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SEEKER); ADDRLP4 472 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 224 ADDP4 ASGNP4 ADDRLP4 472 INDIRP4 ADDRLP4 472 INDIRP4 INDIRI4 CNSTI4 -3 BANDI4 ASGNI4 line 1419 ;1419: } line 1420 ;1420: break; ADDRGP4 $638 JUMPV LABELV $659 line 1422 ;1421: case GENCMD_USE_FIELD: ;1422: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SHIELD)) && ADDRLP4 472 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 472 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 472 INDIRP4 ARGP4 CNSTI4 2 ARGI4 ADDRLP4 476 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 476 INDIRI4 CNSTI4 0 EQI4 $638 line 1424 ;1423: G_ItemUsable(&ent->client->ps, HI_SHIELD) ) ;1424: { line 1425 ;1425: ItemUse_Shield(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Shield CALLV pop line 1426 ;1426: G_AddEvent(ent, EV_USE_ITEM0+HI_SHIELD, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 42 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1427 ;1427: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SHIELD); ADDRLP4 480 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 224 ADDP4 ASGNP4 ADDRLP4 480 INDIRP4 ADDRLP4 480 INDIRP4 INDIRI4 CNSTI4 -5 BANDI4 ASGNI4 line 1428 ;1428: } line 1429 ;1429: break; ADDRGP4 $638 JUMPV LABELV $662 line 1431 ;1430: case GENCMD_USE_BACTA: ;1431: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_MEDPAC)) && ADDRLP4 480 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 480 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 480 INDIRP4 ARGP4 CNSTI4 3 ARGI4 ADDRLP4 484 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 484 INDIRI4 CNSTI4 0 EQI4 $638 line 1433 ;1432: G_ItemUsable(&ent->client->ps, HI_MEDPAC) ) ;1433: { line 1434 ;1434: ItemUse_MedPack(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_MedPack CALLV pop line 1435 ;1435: G_AddEvent(ent, EV_USE_ITEM0+HI_MEDPAC, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 43 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1436 ;1436: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_MEDPAC); ADDRLP4 488 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 224 ADDP4 ASGNP4 ADDRLP4 488 INDIRP4 ADDRLP4 488 INDIRP4 INDIRI4 CNSTI4 -9 BANDI4 ASGNI4 line 1437 ;1437: } line 1438 ;1438: break; ADDRGP4 $638 JUMPV LABELV $665 line 1440 ;1439: case GENCMD_USE_ELECTROBINOCULARS: ;1440: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_BINOCULARS)) && ADDRLP4 488 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 488 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 32 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 488 INDIRP4 ARGP4 CNSTI4 5 ARGI4 ADDRLP4 492 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 492 INDIRI4 CNSTI4 0 EQI4 $638 line 1442 ;1441: G_ItemUsable(&ent->client->ps, HI_BINOCULARS) ) ;1442: { line 1443 ;1443: ItemUse_Binoculars(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Binoculars CALLV pop line 1444 ;1444: if (ent->client->ps.zoomMode == 0) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1320 ADDP4 INDIRI4 CNSTI4 0 NEI4 $668 line 1445 ;1445: { line 1446 ;1446: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 1); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 45 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1447 ;1447: } ADDRGP4 $638 JUMPV LABELV $668 line 1449 ;1448: else ;1449: { line 1450 ;1450: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 2); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 45 ARGI4 CNSTI4 2 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1451 ;1451: } line 1452 ;1452: } line 1453 ;1453: break; ADDRGP4 $638 JUMPV LABELV $670 line 1455 ;1454: case GENCMD_ZOOM: ;1455: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_BINOCULARS)) && ADDRLP4 496 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 496 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 32 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 496 INDIRP4 ARGP4 CNSTI4 5 ARGI4 ADDRLP4 500 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 500 INDIRI4 CNSTI4 0 EQI4 $638 line 1457 ;1456: G_ItemUsable(&ent->client->ps, HI_BINOCULARS) ) ;1457: { line 1458 ;1458: ItemUse_Binoculars(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Binoculars CALLV pop line 1459 ;1459: if (ent->client->ps.zoomMode == 0) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1320 ADDP4 INDIRI4 CNSTI4 0 NEI4 $673 line 1460 ;1460: { line 1461 ;1461: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 1); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 45 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1462 ;1462: } ADDRGP4 $638 JUMPV LABELV $673 line 1464 ;1463: else ;1464: { line 1465 ;1465: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 2); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 45 ARGI4 CNSTI4 2 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1466 ;1466: } line 1467 ;1467: } line 1468 ;1468: break; ADDRGP4 $638 JUMPV LABELV $675 line 1470 ;1469: case GENCMD_USE_SENTRY: ;1470: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SENTRY_GUN)) && ADDRLP4 504 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 504 INDIRP4 CNSTI4 224 ADDP4 INDIRI4 CNSTI4 64 BANDI4 CNSTI4 0 EQI4 $638 ADDRLP4 504 INDIRP4 ARGP4 CNSTI4 6 ARGI4 ADDRLP4 508 ADDRGP4 G_ItemUsable CALLI4 ASGNI4 ADDRLP4 508 INDIRI4 CNSTI4 0 EQI4 $638 line 1472 ;1471: G_ItemUsable(&ent->client->ps, HI_SENTRY_GUN) ) ;1472: { line 1473 ;1473: ItemUse_Sentry(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ItemUse_Sentry CALLV pop line 1474 ;1474: G_AddEvent(ent, EV_USE_ITEM0+HI_SENTRY_GUN, 0); ADDRFP4 0 INDIRP4 ARGP4 CNSTI4 46 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 G_AddEvent CALLV pop line 1475 ;1475: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SENTRY_GUN); ADDRLP4 512 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 224 ADDP4 ASGNP4 ADDRLP4 512 INDIRP4 ADDRLP4 512 INDIRP4 INDIRI4 CNSTI4 -65 BANDI4 ASGNI4 line 1476 ;1476: } line 1477 ;1477: break; ADDRGP4 $638 JUMPV LABELV $678 line 1479 ;1478: case GENCMD_SABERATTACKCYCLE: ;1479: Cmd_SaberAttackCycle_f(ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 Cmd_SaberAttackCycle_f CALLV pop line 1480 ;1480: break; line 1482 ;1481: default: ;1482: break; LABELV $638 line 1486 ;1483: } ;1484: ;1485: // save results of pmove ;1486: if ( ent->client->ps.eventSequence != oldEventSequence ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 ADDRLP4 392 INDIRI4 EQI4 $680 line 1487 ;1487: ent->eventTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 488 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1488 ;1488: } LABELV $680 line 1489 ;1489: if (g_smoothClients.integer) { ADDRGP4 g_smoothClients+12 INDIRI4 CNSTI4 0 EQI4 $683 line 1490 ;1490: BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue ); ADDRLP4 464 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 468 ADDRLP4 464 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 468 INDIRP4 ARGP4 ADDRLP4 464 INDIRP4 ARGP4 ADDRLP4 468 INDIRP4 INDIRI4 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityStateExtraPolate CALLV pop line 1491 ;1491: } ADDRGP4 $684 JUMPV LABELV $683 line 1492 ;1492: else { line 1493 ;1493: BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue ); ADDRLP4 464 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 464 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRLP4 464 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityState CALLV pop line 1494 ;1494: } LABELV $684 line 1495 ;1495: SendPendingPredictableEvents( &ent->client->ps ); ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRGP4 SendPendingPredictableEvents CALLV pop line 1497 ;1496: ;1497: if ( !( ent->client->ps.eFlags & EF_FIRING ) ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 INDIRI4 CNSTI4 256 BANDI4 CNSTI4 0 NEI4 $686 line 1498 ;1498: client->fireHeld = qfalse; // for grapple ADDRLP4 4 INDIRP4 CNSTI4 1696 ADDP4 CNSTI4 0 ASGNI4 line 1499 ;1499: } LABELV $686 line 1502 ;1500: ;1501: // use the snapped origin for linking so it matches client predicted versions ;1502: VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin ); ADDRLP4 464 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 464 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 464 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 1504 ;1503: ;1504: VectorCopy (pm.mins, ent->r.mins); ADDRFP4 0 INDIRP4 CNSTI4 316 ADDP4 ADDRLP4 8+188 INDIRB ASGNB 12 line 1505 ;1505: VectorCopy (pm.maxs, ent->r.maxs); ADDRFP4 0 INDIRP4 CNSTI4 328 ADDP4 ADDRLP4 8+200 INDIRB ASGNB 12 line 1507 ;1506: ;1507: ent->waterlevel = pm.waterlevel; ADDRFP4 0 INDIRP4 CNSTI4 748 ADDP4 ADDRLP4 8+216 INDIRI4 ASGNI4 line 1508 ;1508: ent->watertype = pm.watertype; ADDRFP4 0 INDIRP4 CNSTI4 744 ADDP4 ADDRLP4 8+212 INDIRI4 ASGNI4 line 1511 ;1509: ;1510: // execute client events ;1511: ClientEvents( ent, oldEventSequence ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 392 INDIRI4 ARGI4 ADDRGP4 ClientEvents CALLV pop line 1513 ;1512: ;1513: if ( pm.useEvent ) ADDRLP4 8+184 INDIRI4 CNSTI4 0 EQI4 $692 line 1514 ;1514: { line 1517 ;1515: //TODO: Use ;1516:// TryUse( ent ); ;1517: } LABELV $692 line 1520 ;1518: ;1519: // link entity now, after any personal teleporters have been used ;1520: trap_LinkEntity (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 1521 ;1521: if ( !ent->client->noclip ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1576 ADDP4 INDIRI4 CNSTI4 0 NEI4 $695 line 1522 ;1522: G_TouchTriggers( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_TouchTriggers CALLV pop line 1523 ;1523: } LABELV $695 line 1526 ;1524: ;1525: // NOTE: now copy the exact origin over otherwise clients can be snapped into solid ;1526: VectorCopy( ent->client->ps.origin, ent->r.currentOrigin ); ADDRLP4 468 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 468 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 468 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1532 ;1527: ;1528: //test for solid areas in the AAS file ;1529:// BotTestAAS(ent->r.currentOrigin); ;1530: ;1531: // touch other objects ;1532: ClientImpacts( ent, &pm ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 8 ARGP4 ADDRGP4 ClientImpacts CALLV pop line 1535 ;1533: ;1534: // save results of triggers and client events ;1535: if (ent->client->ps.eventSequence != oldEventSequence) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 112 ADDP4 INDIRI4 ADDRLP4 392 INDIRI4 EQI4 $697 line 1536 ;1536: ent->eventTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 488 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1537 ;1537: } LABELV $697 line 1540 ;1538: ;1539: // swap and latch button actions ;1540: client->oldbuttons = client->buttons; ADDRLP4 4 INDIRP4 CNSTI4 1588 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ASGNI4 line 1541 ;1541: client->buttons = ucmd->buttons; ADDRLP4 4 INDIRP4 CNSTI4 1584 ADDP4 ADDRLP4 384 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 ASGNI4 line 1542 ;1542: client->latched_buttons |= client->buttons & ~client->oldbuttons; ADDRLP4 480 ADDRLP4 4 INDIRP4 CNSTI4 1592 ADDP4 ASGNP4 ADDRLP4 480 INDIRP4 ADDRLP4 480 INDIRP4 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1584 ADDP4 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1588 ADDP4 INDIRI4 BCOMI4 BANDI4 BORI4 ASGNI4 line 1545 ;1543: ;1544: // Did we kick someone in our pmove sequence? ;1545: if (client->ps.forceKickFlip) ADDRLP4 4 INDIRP4 CNSTI4 1280 ADDP4 INDIRI4 CNSTI4 0 EQI4 $700 line 1546 ;1546: { line 1547 ;1547: gentity_t *faceKicked = &g_entities[client->ps.forceKickFlip-1]; ADDRLP4 484 CNSTI4 828 ADDRLP4 4 INDIRP4 CNSTI4 1280 ADDP4 INDIRI4 MULI4 ADDRGP4 g_entities-828 ADDP4 ASGNP4 line 1549 ;1548: ;1549: if (faceKicked && faceKicked->client && (!OnSameTeam(ent, faceKicked) || g_friendlyFire.integer) && ADDRLP4 492 CNSTU4 0 ASGNU4 ADDRLP4 484 INDIRP4 CVPU4 4 ADDRLP4 492 INDIRU4 EQU4 $703 ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 492 INDIRU4 EQU4 $703 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 484 INDIRP4 ARGP4 ADDRLP4 496 ADDRGP4 OnSameTeam CALLI4 ASGNI4 ADDRLP4 500 CNSTI4 0 ASGNI4 ADDRLP4 496 INDIRI4 ADDRLP4 500 INDIRI4 EQI4 $706 ADDRGP4 g_friendlyFire+12 INDIRI4 ADDRLP4 500 INDIRI4 EQI4 $703 LABELV $706 ADDRLP4 504 ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 504 INDIRP4 CNSTI4 1292 ADDP4 INDIRI4 CNSTI4 0 EQI4 $707 ADDRLP4 504 INDIRP4 CNSTI4 1284 ADDP4 INDIRI4 ADDRFP4 0 INDIRP4 INDIRI4 NEI4 $703 LABELV $707 ADDRLP4 508 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 508 INDIRP4 CNSTI4 1292 ADDP4 INDIRI4 CNSTI4 0 EQI4 $708 ADDRLP4 508 INDIRP4 CNSTI4 1284 ADDP4 INDIRI4 ADDRLP4 484 INDIRP4 INDIRI4 NEI4 $703 LABELV $708 line 1552 ;1550: (!faceKicked->client->ps.duelInProgress || faceKicked->client->ps.duelIndex == ent->s.number) && ;1551: (!ent->client->ps.duelInProgress || ent->client->ps.duelIndex == faceKicked->s.number)) ;1552: { line 1553 ;1553: if ( faceKicked && faceKicked->client && faceKicked->health && faceKicked->takedamage ) ADDRLP4 516 CNSTU4 0 ASGNU4 ADDRLP4 484 INDIRP4 CVPU4 4 ADDRLP4 516 INDIRU4 EQU4 $709 ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRLP4 516 INDIRU4 EQU4 $709 ADDRLP4 520 CNSTI4 0 ASGNI4 ADDRLP4 484 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 520 INDIRI4 EQI4 $709 ADDRLP4 484 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 ADDRLP4 520 INDIRI4 EQI4 $709 line 1554 ;1554: {//push them away and do pain line 1556 ;1555: vec3_t oppDir; ;1556: int strength = (int)VectorNormalize2( client->ps.velocity, oppDir ); ADDRLP4 4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRLP4 528 ARGP4 ADDRLP4 540 ADDRGP4 VectorNormalize2 CALLF4 ASGNF4 ADDRLP4 524 ADDRLP4 540 INDIRF4 CVFI4 4 ASGNI4 line 1558 ;1557: ;1558: strength *= 0.05; ADDRLP4 524 CNSTF4 1028443341 ADDRLP4 524 INDIRI4 CVIF4 4 MULF4 CVFI4 4 ASGNI4 line 1560 ;1559: ;1560: VectorScale( oppDir, -1, oppDir ); ADDRLP4 544 CNSTF4 3212836864 ASGNF4 ADDRLP4 528 ADDRLP4 544 INDIRF4 ADDRLP4 528 INDIRF4 MULF4 ASGNF4 ADDRLP4 528+4 ADDRLP4 544 INDIRF4 ADDRLP4 528+4 INDIRF4 MULF4 ASGNF4 ADDRLP4 528+8 CNSTF4 3212836864 ADDRLP4 528+8 INDIRF4 MULF4 ASGNF4 line 1562 ;1561: ;1562: G_Damage( faceKicked, ent, ent, oppDir, client->ps.origin, strength, DAMAGE_NO_ARMOR, MOD_MELEE ); ADDRLP4 484 INDIRP4 ARGP4 ADDRLP4 548 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 548 INDIRP4 ARGP4 ADDRLP4 548 INDIRP4 ARGP4 ADDRLP4 528 ARGP4 ADDRLP4 4 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 524 INDIRI4 ARGI4 ADDRLP4 552 CNSTI4 2 ASGNI4 ADDRLP4 552 INDIRI4 ARGI4 ADDRLP4 552 INDIRI4 ARGI4 ADDRGP4 G_Damage CALLV pop line 1564 ;1563: ;1564: if (faceKicked->health > 0 && ADDRLP4 560 CNSTI4 0 ASGNI4 ADDRLP4 484 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 560 INDIRI4 LEI4 $715 ADDRLP4 564 ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 564 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 ADDRLP4 560 INDIRI4 LEI4 $715 ADDRLP4 564 INDIRP4 CNSTI4 1236 ADDP4 INDIRI4 CNSTI4 8 EQI4 $715 line 1567 ;1565: faceKicked->client->ps.stats[STAT_HEALTH] > 0 && ;1566: faceKicked->client->ps.forceHandExtend != HANDEXTEND_KNOCKDOWN) ;1567: { line 1568 ;1568: if (Q_irand(1, 10) <= 3) CNSTI4 1 ARGI4 CNSTI4 10 ARGI4 ADDRLP4 568 ADDRGP4 Q_irand CALLI4 ASGNI4 ADDRLP4 568 INDIRI4 CNSTI4 3 GTI4 $717 line 1569 ;1569: { //only actually knock over sometimes, but always do velocity hit line 1570 ;1570: faceKicked->client->ps.forceHandExtend = HANDEXTEND_KNOCKDOWN; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1236 ADDP4 CNSTI4 8 ASGNI4 line 1571 ;1571: faceKicked->client->ps.forceHandExtendTime = level.time + 1100; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1240 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 1100 ADDI4 ASGNI4 line 1572 ;1572: faceKicked->client->ps.forceDodgeAnim = 0; //this toggles between 1 and 0, when it's 1 we should play the get up anim ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1248 ADDP4 CNSTI4 0 ASGNI4 line 1573 ;1573: } LABELV $717 line 1575 ;1574: ;1575: faceKicked->client->ps.otherKiller = ent->s.number; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 748 ADDP4 ADDRFP4 0 INDIRP4 INDIRI4 ASGNI4 line 1576 ;1576: faceKicked->client->ps.otherKillerTime = level.time + 5000; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 752 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 5000 ADDI4 ASGNI4 line 1577 ;1577: faceKicked->client->ps.otherKillerDebounceTime = level.time + 100; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 756 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 1579 ;1578: ;1579: faceKicked->client->ps.velocity[0] = oppDir[0]*(strength*40); ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 32 ADDP4 ADDRLP4 528 INDIRF4 CNSTI4 40 ADDRLP4 524 INDIRI4 MULI4 CVIF4 4 MULF4 ASGNF4 line 1580 ;1580: faceKicked->client->ps.velocity[1] = oppDir[1]*(strength*40); ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 36 ADDP4 ADDRLP4 528+4 INDIRF4 CNSTI4 40 ADDRLP4 524 INDIRI4 MULI4 CVIF4 4 MULF4 ASGNF4 line 1581 ;1581: faceKicked->client->ps.velocity[2] = 200; ADDRLP4 484 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 40 ADDP4 CNSTF4 1128792064 ASGNF4 line 1582 ;1582: } LABELV $715 line 1584 ;1583: ;1584: G_Sound( faceKicked, CHAN_AUTO, G_SoundIndex( va("sound/weapons/melee/punch%d", Q_irand(1, 4)) ) ); CNSTI4 1 ARGI4 CNSTI4 4 ARGI4 ADDRLP4 568 ADDRGP4 Q_irand CALLI4 ASGNI4 ADDRGP4 $723 ARGP4 ADDRLP4 568 INDIRI4 ARGI4 ADDRLP4 572 ADDRGP4 va CALLP4 ASGNP4 ADDRLP4 572 INDIRP4 ARGP4 ADDRLP4 576 ADDRGP4 G_SoundIndex CALLI4 ASGNI4 ADDRLP4 484 INDIRP4 ARGP4 CNSTI4 0 ARGI4 ADDRLP4 576 INDIRI4 ARGI4 ADDRGP4 G_Sound CALLV pop line 1585 ;1585: } LABELV $709 line 1586 ;1586: } LABELV $703 line 1588 ;1587: ;1588: client->ps.forceKickFlip = 0; ADDRLP4 4 INDIRP4 CNSTI4 1280 ADDP4 CNSTI4 0 ASGNI4 line 1589 ;1589: } LABELV $700 line 1592 ;1590: ;1591: // check for respawning ;1592: if ( client->ps.stats[STAT_HEALTH] <= 0 ) { ADDRLP4 4 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 CNSTI4 0 GTI4 $724 line 1594 ;1593: // wait for the attack button to be pressed ;1594: if ( level.time > client->respawnTime ) { ADDRGP4 level+32 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1672 ADDP4 INDIRI4 LEI4 $438 line 1596 ;1595: // forcerespawn is to prevent users from waiting out powerups ;1596: if ( g_forcerespawn.integer > 0 && ADDRGP4 g_forcerespawn+12 INDIRI4 CNSTI4 0 LEI4 $729 ADDRGP4 level+32 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 1672 ADDP4 INDIRI4 SUBI4 CNSTI4 1000 ADDRGP4 g_forcerespawn+12 INDIRI4 MULI4 LEI4 $729 line 1597 ;1597: ( level.time - client->respawnTime ) > g_forcerespawn.integer * 1000 ) { line 1598 ;1598: respawn( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 respawn CALLV pop line 1599 ;1599: return; ADDRGP4 $438 JUMPV LABELV $729 line 1603 ;1600: } ;1601: ;1602: // pressing attack or use is the normal respawn method ;1603: if ( ucmd->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) ) { ADDRLP4 384 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 CNSTI4 5 BANDI4 CNSTI4 0 EQI4 $438 line 1604 ;1604: respawn( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 respawn CALLV pop line 1605 ;1605: } line 1606 ;1606: } line 1607 ;1607: return; ADDRGP4 $438 JUMPV LABELV $724 line 1611 ;1608: } ;1609: ;1610: // perform once-a-second actions ;1611: ClientTimerActions( ent, msec ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 388 INDIRI4 ARGI4 ADDRGP4 ClientTimerActions CALLV pop line 1613 ;1612: ;1613: G_UpdateClientBroadcasts ( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_UpdateClientBroadcasts CALLV pop line 1614 ;1614:} LABELV $438 endproc ClientThink_real 580 32 export G_CheckClientTimeouts proc G_CheckClientTimeouts 0 8 line 1624 ;1615: ;1616:/* ;1617:================== ;1618:G_CheckClientTimeouts ;1619: ;1620:Checks whether a client has exceded any timeouts and act accordingly ;1621:================== ;1622:*/ ;1623:void G_CheckClientTimeouts ( gentity_t *ent ) ;1624:{ line 1626 ;1625: // Only timeout supported right now is the timeout to spectator mode ;1626: if ( !g_timeouttospec.integer ) ADDRGP4 g_timeouttospec+12 INDIRI4 CNSTI4 0 NEI4 $737 line 1627 ;1627: { line 1628 ;1628: return; ADDRGP4 $736 JUMPV LABELV $737 line 1632 ;1629: } ;1630: ;1631: // Already a spectator, no need to boot them to spectator ;1632: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $740 line 1633 ;1633: { line 1634 ;1634: return; ADDRGP4 $736 JUMPV LABELV $740 line 1639 ;1635: } ;1636: ;1637: // See how long its been since a command was received by the client and if its ;1638: // longer than the timeout to spectator then force this client into spectator mode ;1639: if ( level.time - ent->client->pers.cmd.serverTime > g_timeouttospec.integer * 1000 ) ADDRGP4 level+32 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 INDIRI4 SUBI4 CNSTI4 1000 ADDRGP4 g_timeouttospec+12 INDIRI4 MULI4 LEI4 $742 line 1640 ;1640: { line 1641 ;1641: SetTeam ( ent, "spectator" ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 $746 ARGP4 ADDRGP4 SetTeam CALLV pop line 1642 ;1642: } LABELV $742 line 1643 ;1643:} LABELV $736 endproc G_CheckClientTimeouts 0 8 export ClientThink proc ClientThink 8 8 line 1652 ;1644: ;1645:/* ;1646:================== ;1647:ClientThink ;1648: ;1649:A new command has arrived from the client ;1650:================== ;1651:*/ ;1652:void ClientThink( int clientNum ) { line 1655 ;1653: gentity_t *ent; ;1654: ;1655: ent = g_entities + clientNum; ADDRLP4 0 CNSTI4 828 ADDRFP4 0 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 1656 ;1656: trap_GetUsercmd( clientNum, &ent->client->pers.cmd ); ADDRFP4 0 INDIRI4 ARGI4 ADDRLP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 ARGP4 ADDRGP4 trap_GetUsercmd CALLV pop line 1660 ;1657: ;1658: // mark the time we got info, so we can display the ;1659: // phone jack if they don't get any for a while ;1660: ent->client->lastCmdTime = level.time; ADDRLP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1580 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1662 ;1661: ;1662: if ( !(ent->r.svFlags & SVF_BOT) && !g_synchronousClients.integer ) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 4 INDIRI4 NEI4 $749 ADDRGP4 g_synchronousClients+12 INDIRI4 ADDRLP4 4 INDIRI4 NEI4 $749 line 1663 ;1663: ClientThink_real( ent ); ADDRLP4 0 INDIRP4 ARGP4 ADDRGP4 ClientThink_real CALLV pop line 1664 ;1664: } LABELV $749 line 1665 ;1665:} LABELV $747 endproc ClientThink 8 8 export G_RunClient proc G_RunClient 4 4 line 1668 ;1666: ;1667: ;1668:void G_RunClient( gentity_t *ent ) { line 1669 ;1669: if ( !(ent->r.svFlags & SVF_BOT) && !g_synchronousClients.integer ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRFP4 0 INDIRP4 CNSTI4 304 ADDP4 INDIRI4 CNSTI4 8 BANDI4 ADDRLP4 0 INDIRI4 NEI4 $753 ADDRGP4 g_synchronousClients+12 INDIRI4 ADDRLP4 0 INDIRI4 NEI4 $753 line 1670 ;1670: return; ADDRGP4 $752 JUMPV LABELV $753 line 1672 ;1671: } ;1672: ent->client->pers.cmd.serverTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1372 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 1673 ;1673: ClientThink_real( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 ClientThink_real CALLV pop line 1674 ;1674:} LABELV $752 endproc G_RunClient 4 4 export SpectatorClientEndFrame proc SpectatorClientEndFrame 24 8 line 1683 ;1675: ;1676: ;1677:/* ;1678:================== ;1679:SpectatorClientEndFrame ;1680: ;1681:================== ;1682:*/ ;1683:void SpectatorClientEndFrame( gentity_t *ent ) { line 1687 ;1684: gclient_t *cl; ;1685: ;1686: // if we are doing a chase cam or a remote view, grab the latest info ;1687: if ( ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 2 NEI4 $758 line 1690 ;1688: int clientNum, flags; ;1689: ;1690: clientNum = ent->client->sess.spectatorClient; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1532 ADDP4 INDIRI4 ASGNI4 line 1693 ;1691: ;1692: // team follow1 and team follow2 go to whatever clients are playing ;1693: if ( clientNum == -1 ) { ADDRLP4 4 INDIRI4 CNSTI4 -1 NEI4 $760 line 1694 ;1694: clientNum = level.follow1; ADDRLP4 4 ADDRGP4 level+212 INDIRI4 ASGNI4 line 1695 ;1695: } else if ( clientNum == -2 ) { ADDRGP4 $761 JUMPV LABELV $760 ADDRLP4 4 INDIRI4 CNSTI4 -2 NEI4 $763 line 1696 ;1696: clientNum = level.follow2; ADDRLP4 4 ADDRGP4 level+216 INDIRI4 ASGNI4 line 1697 ;1697: } LABELV $763 LABELV $761 line 1698 ;1698: if ( clientNum >= 0 ) { ADDRLP4 4 INDIRI4 CNSTI4 0 LTI4 $766 line 1699 ;1699: cl = &level.clients[ clientNum ]; ADDRLP4 0 CNSTI4 1756 ADDRLP4 4 INDIRI4 MULI4 ADDRGP4 level INDIRP4 ADDP4 ASGNP4 line 1700 ;1700: if ( cl->pers.connected == CON_CONNECTED && cl->sess.sessionTeam != TEAM_SPECTATOR ) { ADDRLP4 12 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 1368 ADDP4 INDIRI4 CNSTI4 2 NEI4 $768 ADDRLP4 12 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 EQI4 $768 line 1701 ;1701: flags = (cl->ps.eFlags & ~(EF_VOTED | EF_TEAMVOTED)) | (ent->client->ps.eFlags & (EF_VOTED | EF_TEAMVOTED)); ADDRLP4 16 CNSTI4 108 ASGNI4 ADDRLP4 8 ADDRLP4 0 INDIRP4 ADDRLP4 16 INDIRI4 ADDP4 INDIRI4 CNSTI4 -540673 BANDI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ADDRLP4 16 INDIRI4 ADDP4 INDIRI4 CNSTI4 540672 BANDI4 BORI4 ASGNI4 line 1702 ;1702: ent->client->ps = cl->ps; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ADDRLP4 0 INDIRP4 INDIRB ASGNB 1368 line 1703 ;1703: ent->client->ps.pm_flags |= PMF_FOLLOW; ADDRLP4 20 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 20 INDIRP4 ADDRLP4 20 INDIRP4 INDIRI4 CNSTI4 4096 BORI4 ASGNI4 line 1704 ;1704: ent->client->ps.eFlags = flags; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 108 ADDP4 ADDRLP4 8 INDIRI4 ASGNI4 line 1705 ;1705: return; ADDRGP4 $757 JUMPV LABELV $768 line 1706 ;1706: } else { line 1708 ;1707: // drop them to free spectators unless they are dedicated camera followers ;1708: if ( ent->client->sess.spectatorClient >= 0 ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1532 ADDP4 INDIRI4 CNSTI4 0 LTI4 $770 line 1709 ;1709: ent->client->sess.spectatorState = SPECTATOR_FREE; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1528 ADDP4 CNSTI4 1 ASGNI4 line 1710 ;1710: ClientBegin( ent->client - level.clients, qtrue ); ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 ADDRGP4 level INDIRP4 CVPU4 4 SUBU4 CVUI4 4 CNSTI4 1756 DIVI4 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 ClientBegin CALLV pop line 1711 ;1711: } LABELV $770 line 1712 ;1712: } line 1713 ;1713: } LABELV $766 line 1714 ;1714: } LABELV $758 line 1716 ;1715: ;1716: if ( ent->client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1528 ADDP4 INDIRI4 CNSTI4 3 NEI4 $772 line 1717 ;1717: ent->client->ps.pm_flags |= PMF_SCOREBOARD; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 8192 BORI4 ASGNI4 line 1718 ;1718: } else { ADDRGP4 $773 JUMPV LABELV $772 line 1719 ;1719: ent->client->ps.pm_flags &= ~PMF_SCOREBOARD; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 -8193 BANDI4 ASGNI4 line 1720 ;1720: } LABELV $773 line 1721 ;1721:} LABELV $757 endproc SpectatorClientEndFrame 24 8 export ClientEndFrame proc ClientEndFrame 20 16 line 1732 ;1722: ;1723:/* ;1724:============== ;1725:ClientEndFrame ;1726: ;1727:Called at the end of each server frame for each connected client ;1728:A fast client will have multiple ClientThink for each ClientEdFrame, ;1729:while a slow client may have multiple ClientEndFrame between ClientThink. ;1730:============== ;1731:*/ ;1732:void ClientEndFrame( gentity_t *ent ) { line 1736 ;1733: int i; ;1734: clientPersistant_t *pers; ;1735: ;1736: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1520 ADDP4 INDIRI4 CNSTI4 3 NEI4 $775 line 1737 ;1737: SpectatorClientEndFrame( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 SpectatorClientEndFrame CALLV pop line 1738 ;1738: return; ADDRGP4 $774 JUMPV LABELV $775 line 1741 ;1739: } ;1740: ;1741: pers = &ent->client->pers; ADDRLP4 4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1368 ADDP4 ASGNP4 line 1744 ;1742: ;1743: // turn off any expired powerups ;1744: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $777 line 1745 ;1745: if ( ent->client->ps.powerups[ i ] < level.time ) { ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 344 ADDP4 ADDP4 INDIRI4 ADDRGP4 level+32 INDIRI4 GEI4 $781 line 1746 ;1746: ent->client->ps.powerups[ i ] = 0; ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 344 ADDP4 ADDP4 CNSTI4 0 ASGNI4 line 1747 ;1747: } LABELV $781 line 1748 ;1748: } LABELV $778 line 1744 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 16 LTI4 $777 line 1762 ;1749: ;1750: // save network bandwidth ;1751:#if 0 ;1752: if ( !g_synchronousClients->integer && (ent->client->ps.pm_type == PM_NORMAL || ent->client->ps.pm_type == PM_FLOAT) ) { ;1753: // FIXME: this must change eventually for non-sync demo recording ;1754: VectorClear( ent->client->ps.viewangles ); ;1755: } ;1756:#endif ;1757: ;1758: // ;1759: // If the end of unit layout is displayed, don't give ;1760: // the player any normal movement attributes ;1761: // ;1762: if ( level.intermissiontime ) { ADDRGP4 level+9008 INDIRI4 CNSTI4 0 EQI4 $784 line 1763 ;1763: return; ADDRGP4 $774 JUMPV LABELV $784 line 1767 ;1764: } ;1765: ;1766: // burn from lava, etc ;1767: P_WorldEffects (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 P_WorldEffects CALLV pop line 1770 ;1768: ;1769: // apply all the damage taken this frame ;1770: P_DamageFeedback (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 P_DamageFeedback CALLV pop line 1773 ;1771: ;1772: // add the EF_CONNECTION flag if we haven't gotten commands recently ;1773: if ( level.time - ent->client->lastCmdTime > 1000 ) { ADDRGP4 level+32 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 1580 ADDP4 INDIRI4 SUBI4 CNSTI4 1000 LEI4 $787 line 1774 ;1774: ent->s.eFlags |= EF_CONNECTION; ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 8192 BORI4 ASGNI4 line 1775 ;1775: } else { ADDRGP4 $788 JUMPV LABELV $787 line 1776 ;1776: ent->s.eFlags &= ~EF_CONNECTION; ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 -8193 BANDI4 ASGNI4 line 1777 ;1777: } LABELV $788 line 1779 ;1778: ;1779: ent->client->ps.stats[STAT_HEALTH] = ent->health; // FIXME: get rid of ent->health... ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 8 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 216 ADDP4 ADDRLP4 8 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ASGNI4 line 1781 ;1780: ;1781: G_SetClientSound (ent); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_SetClientSound CALLV pop line 1784 ;1782: ;1783: // set the latest infor ;1784: if (g_smoothClients.integer) { ADDRGP4 g_smoothClients+12 INDIRI4 CNSTI4 0 EQI4 $790 line 1785 ;1785: BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue ); ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 16 ADDRLP4 12 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ASGNP4 ADDRLP4 16 INDIRP4 ARGP4 ADDRLP4 12 INDIRP4 ARGP4 ADDRLP4 16 INDIRP4 INDIRI4 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityStateExtraPolate CALLV pop line 1786 ;1786: } ADDRGP4 $791 JUMPV LABELV $790 line 1787 ;1787: else { line 1788 ;1788: BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue ); ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRLP4 12 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 BG_PlayerStateToEntityState CALLV pop line 1789 ;1789: } LABELV $791 line 1790 ;1790: SendPendingPredictableEvents( &ent->client->ps ); ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 ARGP4 ADDRGP4 SendPendingPredictableEvents CALLV pop line 1795 ;1791: ;1792: // set the bit for the reachability area the client is currently in ;1793:// i = trap_AAS_PointReachabilityAreaIndex( ent->client->ps.origin ); ;1794:// ent->client->areabits[i >> 3] |= 1 << (i & 7); ;1795:} LABELV $774 endproc ClientEndFrame 20 16 import saberOnSound import saberOffSound import G_ApplyKnockback 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 ClientCommand import ClientBegin import ClientDisconnect import ClientUserinfoChanged import ClientConnect import G_GetStripEdString import G_Error import G_Printf import SendScoreboardMessageToAllClients import G_LogPrintf import G_RunThink import CheckTeamLeader import SetLeader import FindIntermissionPoint import g_ff_objectives import DeathmatchScoreboardMessage import G_SetStats import MoveClientToIntermission import BlowDetpacks import FireWeapon import G_FilterPacket import G_ProcessIPBans import ConsoleCommand import gJMSaberEnt import SpotWouldTelefrag import CalculateRanks import AddScore import player_die import ClientSpawn import InitBodyQue import BeginIntermission import respawn import CopyToBodyQue import SelectSpawnPoint import SetClientViewAngle import PickTeam import TeamLeader import TeamCount import CheckGauntletAttack import SnapVectorTowards import CalcMuzzlePoint import LogAccuracyHit import WP_FireGenericBlasterMissile import WP_FireTurretMissile import G_PlayerBecomeATST import ATST_ManageDamageBoxes import TeleportPlayer import trigger_teleporter_touch import Touch_DoorTrigger import G_RunMover import WP_FireBlasterMissile import G_ExplodeMissile import G_BounceProjectile import CreateMissile import G_RunMissile import G_ReflectMissile import ExplodeDeath import TossClientCubes import TossClientItems import TossClientWeapon import body_die import G_RadiusDamage import G_Damage import CanDamage import trap_G2API_SetBoneAnim import trap_G2API_GetGLAName import trap_G2API_SetBoneAngles import trap_G2API_CleanGhoul2Models import trap_G2API_RemoveGhoul2Model import trap_G2API_HasGhoul2ModelOnIndex import trap_G2API_DuplicateGhoul2Instance import trap_G2API_CopySpecificGhoul2Model import trap_G2API_CopyGhoul2Instance import trap_G2API_SetBoltInfo import trap_G2API_AddBolt import trap_G2API_InitGhoul2Model import trap_G2API_GetBoltMatrix_NoReconstruct import trap_G2API_GetBoltMatrix import trap_G2_HaveWeGhoul2Models import trap_G2_SetGhoul2ModelIndexes import trap_G2_ListModelBones import trap_G2_ListModelSurfaces import G_SkinIndex import BuildShaderStateConfig import AddRemap import G_SetOrigin import G_AddEvent import G_AddPredictableEvent import vtos import tv import G_RunObject import G_TouchSolids import G_EntitiesFree import G_FreeEntity import G_KillG2Queue import G_SendG2KillQueue import TryUse import G_EntitySound import G_SoundAtLoc import G_Sound import G_MuteSound import G_ScreenShake import G_PlayEffect import G_TempEntity import G_Spawn import G_InitGentity import G_SetAngles import G_SetMovedir import G_UseTargets import G_PickTarget import G_RadiusList import G_Find import G_KillBox import G_TeamCommand import G_EffectIndex import G_SoundIndex import G_ModelIndex import SaveRegisteredItems import RegisterItem import ClearRegisteredItems import Touch_Item import Add_Ammo import ArmorIndex import Think_Weapon import FinishSpawningItem import G_SpawnItem import SetRespawn import LaunchItem import Drop_Item import PrecacheItem import UseHoldableItem import RespawnItem import G_RunItem import G_CheckTeamItems import ItemUse_MedPack import ItemUse_Seeker import ItemUse_Sentry import ItemUse_Shield import ItemUse_Binoculars import G_GetDuelWinner import Cmd_EngageDuel_f import Cmd_ToggleSaber_f import G_ItemUsable import Cmd_SaberAttackCycle_f import Cmd_FollowCycle_f import SetTeam import BroadcastTeamChange import StopFollowing import Cmd_Score_f import G_NewString import G_SpawnEntitiesFromString import G_SpawnVector import G_SpawnInt import G_SpawnFloat import G_SpawnString import g2SaberInstance import precachedKyle import forcePowerDarkLight import WeaponAttackAnim import WeaponReadyAnim import BG_OutOfMemory import BG_StringAlloc import BG_TempFree import BG_TempAlloc import BG_AllocUnaligned import BG_Alloc import BG_CanUseFPNow import BG_HasYsalamiri import BG_GetItemIndexByTag import BG_ParseAnimationFile import BG_PlayerTouchesItem import BG_G2PlayerAngles import BG_PlayerStateToEntityStateExtraPolate import BG_PlayerStateToEntityState import BG_TouchJumpPad import BG_AddPredictableEventToPlayerstate import BG_EvaluateTrajectoryDelta import BG_EvaluateTrajectory import BG_ForcePowerDrain import BG_SaberStartTransAnim import BG_InDeathAnim import BG_InRoll import BG_SaberInSpecialAttack import BG_SpinningSaberAnim import BG_FlippingAnim import BG_SaberInIdle import BG_SaberInSpecial import BG_SaberInAttack import BG_DirectFlippingAnim import BG_InSaberStandAnim import BG_InSpecialJump import BG_LegalizedForcePowers import saberMoveData import BG_CanItemBeGrabbed import BG_FindItemForHoldable import BG_FindItemForPowerup import BG_FindItemForWeapon import BG_FindItem import vectoyaw import bg_numItems import bg_itemlist import Pmove import PM_UpdateViewAngles import pm import bgForcePowerCost import forceMasteryPoints import forceMasteryLevels import bgGlobalAnimations import BGPAFtextLoaded import forcePowerSorted import WP_MuzzlePoint import ammoData import weaponData import GetStringForID import GetIDForString import Q_irand import irand import flrand import Rand_Init import Com_Printf import Com_Error import Info_NextPair import Info_Validate import Info_SetValueForKey_Big import Info_SetValueForKey import Info_RemoveKey_big import Info_RemoveKey import Info_ValueForKey import va import Q_CleanStr import Q_PrintStrlen import Q_strcat import Q_strncpyz import Q_strrchr import Q_strupr import Q_strlwr import Q_stricmpn import Q_strncmp import Q_stricmp import Q_isalpha import Q_isupper import Q_islower import Q_isprint import Com_sprintf import Parse3DMatrix import Parse2DMatrix import Parse1DMatrix import SkipRestOfLine import SkipBracedSection import COM_MatchToken import COM_ParseWarning import COM_ParseError import COM_Compress import COM_ParseExt import COM_Parse import SkipWhitespace import COM_GetCurrentParseLine import COM_BeginParseSession import COM_DefaultExtension import COM_StripExtension import COM_SkipPath import Com_Clamp import PerpendicularVector import AngleVectors import MatrixMultiply import MakeNormalVectors import RotateAroundDirection import RotatePointAroundVector import ProjectPointOnPlane import PlaneFromPoints import AngleDelta import AngleNormalize180 import AngleNormalize360 import AnglesSubtract import AngleSubtract import LerpAngle import AngleMod import BoxOnPlaneSide import SetPlaneSignbits import AxisCopy import AxisClear import AnglesToAxis import vectoangles import Q_crandom import Q_random import Q_rand import Q_acos import Q_log2 import VectorRotate import Vector4Scale import VectorNormalize2 import VectorNormalize import CrossProduct import VectorInverse import VectorNormalizeFast import DistanceSquared import Distance import VectorLengthSquared import VectorLength import VectorCompare import AddPointToBounds import ClearBounds import RadiusFromBounds import NormalizeColor import ColorBytes4 import ColorBytes3 import _VectorMA import _VectorScale import _VectorCopy import _VectorAdd import _VectorSubtract import _DotProduct import ByteToDir import DirToByte import powf import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkBlue import colorLtBlue import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import colorTable import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import forceSpeedLevels import FloatSwap import LongSwap import ShortSwap import acos import fabs import abs import tan import atan2 import cos import sin import sqrt import floor import ceil import memcpy import memset import memmove import sscanf import vsprintf import _atoi import atoi import _atof import atof import toupper import tolower import strncpy import strstr import strchr import strcmp import strcpy import strcat import strlen import rand import srand import qsort lit align 1 LABELV $746 char 1 115 char 1 112 char 1 101 char 1 99 char 1 116 char 1 97 char 1 116 char 1 111 char 1 114 char 1 0 align 1 LABELV $723 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 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 47 char 1 109 char 1 101 char 1 108 char 1 101 char 1 101 char 1 47 char 1 112 char 1 117 char 1 110 char 1 99 char 1 104 char 1 37 char 1 100 char 1 0 align 1 LABELV $613 char 1 99 char 1 101 char 1 110 char 1 116 char 1 101 char 1 114 char 1 118 char 1 105 char 1 101 char 1 119 char 1 10 char 1 0 align 1 LABELV $544 char 1 80 char 1 76 char 1 68 char 1 85 char 1 69 char 1 76 char 1 83 char 1 84 char 1 79 char 1 80 char 1 0 align 1 LABELV $543 char 1 112 char 1 114 char 1 105 char 1 110 char 1 116 char 1 32 char 1 34 char 1 37 char 1 115 char 1 10 char 1 34 char 1 0 align 1 LABELV $538 char 1 80 char 1 76 char 1 68 char 1 85 char 1 69 char 1 76 char 1 84 char 1 73 char 1 69 char 1 0 align 1 LABELV $537 char 1 99 char 1 112 char 1 32 char 1 34 char 1 37 char 1 115 char 1 10 char 1 34 char 1 0 align 1 LABELV $536 char 1 80 char 1 76 char 1 68 char 1 85 char 1 69 char 1 76 char 1 87 char 1 73 char 1 78 char 1 78 char 1 69 char 1 82 char 1 0 align 1 LABELV $535 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 $534 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 32 char 1 37 char 1 115 char 1 33 char 1 10 char 1 34 char 1 0 align 1 LABELV $509 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 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 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 111 char 1 110 char 1 46 char 1 119 char 1 97 char 1 118 char 1 0 align 1 LABELV $508 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 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 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 111 char 1 102 char 1 102 char 1 113 char 1 117 char 1 105 char 1 99 char 1 107 char 1 46 char 1 119 char 1 97 char 1 118 char 1 0 align 1 LABELV $461 char 1 51 char 1 51 char 1 0 align 1 LABELV $457 char 1 56 char 1 0 align 1 LABELV $456 char 1 112 char 1 109 char 1 111 char 1 118 char 1 101 char 1 95 char 1 109 char 1 115 char 1 101 char 1 99 char 1 0 align 1 LABELV $346 char 1 99 char 1 112 char 1 32 char 1 34 char 1 84 char 1 101 char 1 110 char 1 32 char 1 115 char 1 101 char 1 99 char 1 111 char 1 110 char 1 100 char 1 115 char 1 32 char 1 117 char 1 110 char 1 116 char 1 105 char 1 108 char 1 32 char 1 105 char 1 110 char 1 97 char 1 99 char 1 116 char 1 105 char 1 118 char 1 105 char 1 116 char 1 121 char 1 32 char 1 100 char 1 114 char 1 111 char 1 112 char 1 33 char 1 10 char 1 34 char 1 0 align 1 LABELV $342 char 1 68 char 1 114 char 1 111 char 1 112 char 1 112 char 1 101 char 1 100 char 1 32 char 1 100 char 1 117 char 1 101 char 1 32 char 1 116 char 1 111 char 1 32 char 1 105 char 1 110 char 1 97 char 1 99 char 1 116 char 1 105 char 1 118 char 1 105 char 1 116 char 1 121 char 1 0 align 1 LABELV $126 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 char 1 47 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 47 char 1 103 char 1 117 char 1 114 char 1 112 char 1 50 char 1 46 char 1 119 char 1 97 char 1 118 char 1 0 align 1 LABELV $123 char 1 115 char 1 111 char 1 117 char 1 110 char 1 100 char 1 47 char 1 112 char 1 108 char 1 97 char 1 121 char 1 101 char 1 114 char 1 47 char 1 103 char 1 117 char 1 114 char 1 112 char 1 49 char 1 46 char 1 119 char 1 97 char 1 118 char 1 0