data export pm_stopspeed align 4 LABELV pm_stopspeed byte 4 1120403456 export pm_duckScale align 4 LABELV pm_duckScale byte 4 1048576000 export pm_swimScale align 4 LABELV pm_swimScale byte 4 1056964608 export pm_wadeScale align 4 LABELV pm_wadeScale byte 4 1060320051 export pm_accelerate align 4 LABELV pm_accelerate byte 4 1092616192 export pm_airaccelerate align 4 LABELV pm_airaccelerate byte 4 1065353216 export pm_wateraccelerate align 4 LABELV pm_wateraccelerate byte 4 1082130432 export pm_flyaccelerate align 4 LABELV pm_flyaccelerate byte 4 1090519040 export pm_friction align 4 LABELV pm_friction byte 4 1086324736 export pm_waterfriction align 4 LABELV pm_waterfriction byte 4 1065353216 export pm_flightfriction align 4 LABELV pm_flightfriction byte 4 1077936128 export pm_spectatorfriction align 4 LABELV pm_spectatorfriction byte 4 1084227584 export c_pmove align 4 LABELV c_pmove byte 4 0 export PM_AddEvent code proc PM_AddEvent 0 12 file "debug-x86-Linux-2.3/Q3/cgame/game/bg_pmove.c" line 38 ;1:// Copyright (C) 1999-2000 Id Software, Inc. ;2:// ;3:// bg_pmove.c -- both games player movement code ;4:// takes a playerstate and a usercmd as input and returns a modifed playerstate ;5: ;6:#include "q_shared.h" ;7:#include "bg_public.h" ;8:#include "bg_local.h" ;9: ;10:pmove_t *pm; ;11:pml_t pml; ;12: ;13:// movement parameters ;14:float pm_stopspeed = 100.0f; ;15:float pm_duckScale = 0.25f; ;16:float pm_swimScale = 0.50f; ;17:float pm_wadeScale = 0.70f; ;18: ;19:float pm_accelerate = 10.0f; ;20:float pm_airaccelerate = 1.0f; ;21:float pm_wateraccelerate = 4.0f; ;22:float pm_flyaccelerate = 8.0f; ;23: ;24:float pm_friction = 6.0f; ;25:float pm_waterfriction = 1.0f; ;26:float pm_flightfriction = 3.0f; ;27:float pm_spectatorfriction = 5.0f; ;28: ;29:int c_pmove = 0; ;30: ;31: ;32:/* ;33:=============== ;34:PM_AddEvent ;35: ;36:=============== ;37:*/ ;38:void PM_AddEvent( int newEvent ) { line 39 ;39: BG_AddPredictableEventToPlayerstate( newEvent, 0, pm->ps ); ADDRFP4 0 INDIRI4 ARGI4 CNSTI4 0 ARGI4 ADDRGP4 pm INDIRP4 INDIRP4 ARGP4 ADDRGP4 BG_AddPredictableEventToPlayerstate CALLV pop line 40 ;40:} LABELV $41 endproc PM_AddEvent 0 12 export PM_AddTouchEnt proc PM_AddTouchEnt 12 0 line 47 ;41: ;42:/* ;43:=============== ;44:PM_AddTouchEnt ;45:=============== ;46:*/ ;47:void PM_AddTouchEnt( int entityNum ) { line 50 ;48: int i; ;49: ;50: if ( entityNum == ENTITYNUM_WORLD ) { ADDRFP4 0 INDIRI4 CNSTI4 1022 NEI4 $43 line 51 ;51: return; ADDRGP4 $42 JUMPV LABELV $43 line 53 ;52: } ;53: if ( pm->numtouch == MAXTOUCH ) { ADDRGP4 pm INDIRP4 CNSTI4 48 ADDP4 INDIRI4 CNSTI4 32 NEI4 $45 line 54 ;54: return; ADDRGP4 $42 JUMPV LABELV $45 line 58 ;55: } ;56: ;57: // see if it is already added ;58: for ( i = 0 ; i < pm->numtouch ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $50 JUMPV LABELV $47 line 59 ;59: if ( pm->touchents[ i ] == entityNum ) { ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 pm INDIRP4 CNSTI4 52 ADDP4 ADDP4 INDIRI4 ADDRFP4 0 INDIRI4 NEI4 $51 line 60 ;60: return; ADDRGP4 $42 JUMPV LABELV $51 line 62 ;61: } ;62: } LABELV $48 line 58 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $50 ADDRLP4 0 INDIRI4 ADDRGP4 pm INDIRP4 CNSTI4 48 ADDP4 INDIRI4 LTI4 $47 line 65 ;63: ;64: // add it ;65: pm->touchents[pm->numtouch] = entityNum; ADDRLP4 4 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 48 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 4 INDIRP4 CNSTI4 52 ADDP4 ADDP4 ADDRFP4 0 INDIRI4 ASGNI4 line 66 ;66: pm->numtouch++; ADDRLP4 8 ADDRGP4 pm INDIRP4 CNSTI4 48 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 67 ;67:} LABELV $42 endproc PM_AddTouchEnt 12 0 proc PM_StartTorsoAnim 8 0 line 74 ;68: ;69:/* ;70:=================== ;71:PM_StartTorsoAnim ;72:=================== ;73:*/ ;74:static void PM_StartTorsoAnim( int anim ) { line 75 ;75: if ( pm->ps->pm_type >= PM_DEAD ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 3 LTI4 $54 line 76 ;76: return; ADDRGP4 $53 JUMPV LABELV $54 line 78 ;77: } ;78: pm->ps->torsoAnim = ( ( pm->ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT ) ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 84 ADDP4 ASGNP4 ADDRLP4 4 CNSTI4 128 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 ADDRLP4 4 INDIRI4 BANDI4 ADDRLP4 4 INDIRI4 BXORI4 ADDRFP4 0 INDIRI4 BORI4 ASGNI4 line 80 ;79: | anim; ;80:} LABELV $53 endproc PM_StartTorsoAnim 8 0 proc PM_StartLegsAnim 8 0 line 81 ;81:static void PM_StartLegsAnim( int anim ) { line 82 ;82: if ( pm->ps->pm_type >= PM_DEAD ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 3 LTI4 $57 line 83 ;83: return; ADDRGP4 $56 JUMPV LABELV $57 line 85 ;84: } ;85: if ( pm->ps->legsTimer > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 INDIRI4 CNSTI4 0 LEI4 $59 line 86 ;86: return; // a high priority animation is running ADDRGP4 $56 JUMPV LABELV $59 line 88 ;87: } ;88: pm->ps->legsAnim = ( ( pm->ps->legsAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT ) ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 76 ADDP4 ASGNP4 ADDRLP4 4 CNSTI4 128 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 ADDRLP4 4 INDIRI4 BANDI4 ADDRLP4 4 INDIRI4 BXORI4 ADDRFP4 0 INDIRI4 BORI4 ASGNI4 line 90 ;89: | anim; ;90:} LABELV $56 endproc PM_StartLegsAnim 8 0 proc PM_ContinueLegsAnim 0 4 line 92 ;91: ;92:static void PM_ContinueLegsAnim( int anim ) { line 93 ;93: if ( ( pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) == anim ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 76 ADDP4 INDIRI4 CNSTI4 -129 BANDI4 ADDRFP4 0 INDIRI4 NEI4 $62 line 94 ;94: return; ADDRGP4 $61 JUMPV LABELV $62 line 96 ;95: } ;96: if ( pm->ps->legsTimer > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 INDIRI4 CNSTI4 0 LEI4 $64 line 97 ;97: return; // a high priority animation is running ADDRGP4 $61 JUMPV LABELV $64 line 99 ;98: } ;99: PM_StartLegsAnim( anim ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 PM_StartLegsAnim CALLV pop line 100 ;100:} LABELV $61 endproc PM_ContinueLegsAnim 0 4 proc PM_ContinueTorsoAnim 0 4 line 102 ;101: ;102:static void PM_ContinueTorsoAnim( int anim ) { line 103 ;103: if ( ( pm->ps->torsoAnim & ~ANIM_TOGGLEBIT ) == anim ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 84 ADDP4 INDIRI4 CNSTI4 -129 BANDI4 ADDRFP4 0 INDIRI4 NEI4 $67 line 104 ;104: return; ADDRGP4 $66 JUMPV LABELV $67 line 106 ;105: } ;106: if ( pm->ps->torsoTimer > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 INDIRI4 CNSTI4 0 LEI4 $69 line 107 ;107: return; // a high priority animation is running ADDRGP4 $66 JUMPV LABELV $69 line 109 ;108: } ;109: PM_StartTorsoAnim( anim ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 110 ;110:} LABELV $66 endproc PM_ContinueTorsoAnim 0 4 proc PM_ForceLegsAnim 0 4 line 112 ;111: ;112:static void PM_ForceLegsAnim( int anim ) { line 113 ;113: pm->ps->legsTimer = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 CNSTI4 0 ASGNI4 line 114 ;114: PM_StartLegsAnim( anim ); ADDRFP4 0 INDIRI4 ARGI4 ADDRGP4 PM_StartLegsAnim CALLV pop line 115 ;115:} LABELV $71 endproc PM_ForceLegsAnim 0 4 export PM_ClipVelocity proc PM_ClipVelocity 32 0 line 125 ;116: ;117: ;118:/* ;119:================== ;120:PM_ClipVelocity ;121: ;122:Slide off of the impacting surface ;123:================== ;124:*/ ;125:void PM_ClipVelocity( vec3_t in, vec3_t normal, vec3_t out, float overbounce ) { line 130 ;126: float backoff; ;127: float change; ;128: int i; ;129: ;130: backoff = DotProduct (in, normal); ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 16 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 20 CNSTI4 4 ASGNI4 ADDRLP4 24 CNSTI4 8 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRP4 INDIRF4 ADDRLP4 16 INDIRP4 INDIRF4 MULF4 ADDRLP4 12 INDIRP4 ADDRLP4 20 INDIRI4 ADDP4 INDIRF4 ADDRLP4 16 INDIRP4 ADDRLP4 20 INDIRI4 ADDP4 INDIRF4 MULF4 ADDF4 ADDRLP4 12 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 INDIRF4 ADDRLP4 16 INDIRP4 ADDRLP4 24 INDIRI4 ADDP4 INDIRF4 MULF4 ADDF4 ASGNF4 line 132 ;131: ;132: if ( backoff < 0 ) { ADDRLP4 8 INDIRF4 CNSTF4 0 GEF4 $73 line 133 ;133: backoff *= overbounce; ADDRLP4 8 ADDRLP4 8 INDIRF4 ADDRFP4 12 INDIRF4 MULF4 ASGNF4 line 134 ;134: } else { ADDRGP4 $74 JUMPV LABELV $73 line 135 ;135: backoff /= overbounce; ADDRLP4 8 ADDRLP4 8 INDIRF4 ADDRFP4 12 INDIRF4 DIVF4 ASGNF4 line 136 ;136: } LABELV $74 line 138 ;137: ;138: for ( i=0 ; i<3 ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $75 line 139 ;139: change = normal[i]*backoff; ADDRLP4 4 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRF4 ADDRLP4 8 INDIRF4 MULF4 ASGNF4 line 140 ;140: out[i] = in[i] - change; ADDRLP4 28 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 28 INDIRI4 ADDRFP4 8 INDIRP4 ADDP4 ADDRLP4 28 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 INDIRF4 ADDRLP4 4 INDIRF4 SUBF4 ASGNF4 line 141 ;141: } LABELV $76 line 138 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $75 line 142 ;142:} LABELV $72 endproc PM_ClipVelocity 32 0 proc PM_Friction 48 4 line 152 ;143: ;144: ;145:/* ;146:================== ;147:PM_Friction ;148: ;149:Handles both ground friction and water friction ;150:================== ;151:*/ ;152:static void PM_Friction( void ) { line 158 ;153: vec3_t vec; ;154: float *vel; ;155: float speed, newspeed, control; ;156: float drop; ;157: ;158: vel = pm->ps->velocity; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 line 160 ;159: ;160: VectorCopy( vel, vec ); ADDRLP4 16 ADDRLP4 0 INDIRP4 INDIRB ASGNB 12 line 161 ;161: if ( pml.walking ) { ADDRGP4 pml+44 INDIRI4 CNSTI4 0 EQI4 $80 line 162 ;162: vec[2] = 0; // ignore slope movement ADDRLP4 16+8 CNSTF4 0 ASGNF4 line 163 ;163: } LABELV $80 line 165 ;164: ;165: speed = VectorLength(vec); ADDRLP4 16 ARGP4 ADDRLP4 32 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 8 ADDRLP4 32 INDIRF4 ASGNF4 line 166 ;166: if (speed < 1) { ADDRLP4 8 INDIRF4 CNSTF4 1065353216 GEF4 $84 line 167 ;167: vel[0] = 0; ADDRLP4 0 INDIRP4 CNSTF4 0 ASGNF4 line 168 ;168: vel[1] = 0; // allow sinking underwater ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 CNSTF4 0 ASGNF4 line 170 ;169: // FIXME: still have z friction underwater? ;170: return; ADDRGP4 $79 JUMPV LABELV $84 line 173 ;171: } ;172: ;173: drop = 0; ADDRLP4 12 CNSTF4 0 ASGNF4 line 176 ;174: ;175: // apply ground friction ;176: if ( pm->waterlevel <= 1 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 GTI4 $86 line 177 ;177: if ( pml.walking && !(pml.groundTrace.surfaceFlags & SURF_SLICK) ) { ADDRLP4 36 CNSTI4 0 ASGNI4 ADDRGP4 pml+44 INDIRI4 ADDRLP4 36 INDIRI4 EQI4 $88 ADDRGP4 pml+52+44 INDIRI4 CNSTI4 2 BANDI4 ADDRLP4 36 INDIRI4 NEI4 $88 line 179 ;178: // if getting knocked back, no friction ;179: if ( ! (pm->ps->pm_flags & PMF_TIME_KNOCKBACK) ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 64 BANDI4 CNSTI4 0 NEI4 $93 line 180 ;180: control = speed < pm_stopspeed ? pm_stopspeed : speed; ADDRLP4 8 INDIRF4 ADDRGP4 pm_stopspeed INDIRF4 GEF4 $96 ADDRLP4 40 ADDRGP4 pm_stopspeed INDIRF4 ASGNF4 ADDRGP4 $97 JUMPV LABELV $96 ADDRLP4 40 ADDRLP4 8 INDIRF4 ASGNF4 LABELV $97 ADDRLP4 28 ADDRLP4 40 INDIRF4 ASGNF4 line 181 ;181: drop += control*pm_friction*pml.frametime; ADDRLP4 12 ADDRLP4 12 INDIRF4 ADDRLP4 28 INDIRF4 ADDRGP4 pm_friction INDIRF4 MULF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 182 ;182: } LABELV $93 line 183 ;183: } LABELV $88 line 184 ;184: } LABELV $86 line 187 ;185: ;186: // apply water friction even if just wading ;187: if ( pm->waterlevel ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 0 EQI4 $99 line 188 ;188: drop += speed*pm_waterfriction*pm->waterlevel*pml.frametime; ADDRLP4 12 ADDRLP4 12 INDIRF4 ADDRLP4 8 INDIRF4 ADDRGP4 pm_waterfriction INDIRF4 MULF4 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CVIF4 4 MULF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 189 ;189: } LABELV $99 line 192 ;190: ;191: // apply flying friction ;192: if ( pm->ps->powerups[PW_FLIGHT]) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 336 ADDP4 INDIRI4 CNSTI4 0 EQI4 $102 line 193 ;193: drop += speed*pm_flightfriction*pml.frametime; ADDRLP4 12 ADDRLP4 12 INDIRF4 ADDRLP4 8 INDIRF4 ADDRGP4 pm_flightfriction INDIRF4 MULF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 194 ;194: } LABELV $102 line 196 ;195: ;196: if ( pm->ps->pm_type == PM_SPECTATOR) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 2 NEI4 $105 line 197 ;197: drop += speed*pm_spectatorfriction*pml.frametime; ADDRLP4 12 ADDRLP4 12 INDIRF4 ADDRLP4 8 INDIRF4 ADDRGP4 pm_spectatorfriction INDIRF4 MULF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 198 ;198: } LABELV $105 line 201 ;199: ;200: // scale the velocity ;201: newspeed = speed - drop; ADDRLP4 4 ADDRLP4 8 INDIRF4 ADDRLP4 12 INDIRF4 SUBF4 ASGNF4 line 202 ;202: if (newspeed < 0) { ADDRLP4 4 INDIRF4 CNSTF4 0 GEF4 $108 line 203 ;203: newspeed = 0; ADDRLP4 4 CNSTF4 0 ASGNF4 line 204 ;204: } LABELV $108 line 205 ;205: newspeed /= speed; ADDRLP4 4 ADDRLP4 4 INDIRF4 ADDRLP4 8 INDIRF4 DIVF4 ASGNF4 line 207 ;206: ;207: vel[0] = vel[0] * newspeed; ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRF4 ADDRLP4 4 INDIRF4 MULF4 ASGNF4 line 208 ;208: vel[1] = vel[1] * newspeed; ADDRLP4 40 ADDRLP4 0 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 ADDRLP4 40 INDIRP4 ADDRLP4 40 INDIRP4 INDIRF4 ADDRLP4 4 INDIRF4 MULF4 ASGNF4 line 209 ;209: vel[2] = vel[2] * newspeed; ADDRLP4 44 ADDRLP4 0 INDIRP4 CNSTI4 8 ADDP4 ASGNP4 ADDRLP4 44 INDIRP4 ADDRLP4 44 INDIRP4 INDIRF4 ADDRLP4 4 INDIRF4 MULF4 ASGNF4 line 210 ;210:} LABELV $79 endproc PM_Friction 48 4 proc PM_Accelerate 32 0 line 220 ;211: ;212: ;213:/* ;214:============== ;215:PM_Accelerate ;216: ;217:Handles user intended acceleration ;218:============== ;219:*/ ;220:static void PM_Accelerate( vec3_t wishdir, float wishspeed, float accel ) { line 226 ;221:#if 1 ;222: // q2 style ;223: int i; ;224: float addspeed, accelspeed, currentspeed; ;225: ;226: currentspeed = DotProduct (pm->ps->velocity, wishdir); ADDRLP4 16 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 ADDRLP4 16 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ADDRLP4 20 INDIRP4 INDIRF4 MULF4 ADDRLP4 16 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ADDRLP4 20 INDIRP4 CNSTI4 4 ADDP4 INDIRF4 MULF4 ADDF4 ADDRLP4 16 INDIRP4 CNSTI4 40 ADDP4 INDIRF4 ADDRLP4 20 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 MULF4 ADDF4 ASGNF4 line 227 ;227: addspeed = wishspeed - currentspeed; ADDRLP4 8 ADDRFP4 4 INDIRF4 ADDRLP4 12 INDIRF4 SUBF4 ASGNF4 line 228 ;228: if (addspeed <= 0) { ADDRLP4 8 INDIRF4 CNSTF4 0 GTF4 $111 line 229 ;229: return; ADDRGP4 $110 JUMPV LABELV $111 line 231 ;230: } ;231: accelspeed = accel*pml.frametime*wishspeed; ADDRLP4 4 ADDRFP4 8 INDIRF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDRFP4 4 INDIRF4 MULF4 ASGNF4 line 232 ;232: if (accelspeed > addspeed) { ADDRLP4 4 INDIRF4 ADDRLP4 8 INDIRF4 LEF4 $114 line 233 ;233: accelspeed = addspeed; ADDRLP4 4 ADDRLP4 8 INDIRF4 ASGNF4 line 234 ;234: } LABELV $114 line 236 ;235: ;236: for (i=0 ; i<3 ; i++) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $116 line 237 ;237: pm->ps->velocity[i] += accelspeed*wishdir[i]; ADDRLP4 24 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 28 ADDRLP4 24 INDIRI4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 ADDRLP4 28 INDIRP4 INDIRF4 ADDRLP4 4 INDIRF4 ADDRLP4 24 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 INDIRF4 MULF4 ADDF4 ASGNF4 line 238 ;238: } LABELV $117 line 236 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $116 line 257 ;239:#else ;240: // proper way (avoids strafe jump maxspeed bug), but feels bad ;241: vec3_t wishVelocity; ;242: vec3_t pushDir; ;243: float pushLen; ;244: float canPush; ;245: ;246: VectorScale( wishdir, wishspeed, wishVelocity ); ;247: VectorSubtract( wishVelocity, pm->ps->velocity, pushDir ); ;248: pushLen = VectorNormalize( pushDir ); ;249: ;250: canPush = accel*pml.frametime*wishspeed; ;251: if (canPush > pushLen) { ;252: canPush = pushLen; ;253: } ;254: ;255: VectorMA( pm->ps->velocity, canPush, pushDir, pm->ps->velocity ); ;256:#endif ;257:} LABELV $110 endproc PM_Accelerate 32 0 proc PM_CmdScale 44 4 line 270 ;258: ;259: ;260: ;261:/* ;262:============ ;263:PM_CmdScale ;264: ;265:Returns the scale factor to apply to cmd movements ;266:This allows the clients to use axial -127 to 127 values for all directions ;267:without getting a sqrt(2) distortion in speed. ;268:============ ;269:*/ ;270:static float PM_CmdScale( usercmd_t *cmd ) { line 275 ;271: int max; ;272: float total; ;273: float scale; ;274: ;275: max = abs( cmd->forwardmove ); ADDRFP4 0 INDIRP4 CNSTI4 21 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 12 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 12 INDIRI4 ASGNI4 line 276 ;276: if ( abs( cmd->rightmove ) > max ) { ADDRFP4 0 INDIRP4 CNSTI4 22 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 16 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 16 INDIRI4 ADDRLP4 0 INDIRI4 LEI4 $121 line 277 ;277: max = abs( cmd->rightmove ); ADDRFP4 0 INDIRP4 CNSTI4 22 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 20 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 20 INDIRI4 ASGNI4 line 278 ;278: } LABELV $121 line 279 ;279: if ( abs( cmd->upmove ) > max ) { ADDRFP4 0 INDIRP4 CNSTI4 23 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 20 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 20 INDIRI4 ADDRLP4 0 INDIRI4 LEI4 $123 line 280 ;280: max = abs( cmd->upmove ); ADDRFP4 0 INDIRP4 CNSTI4 23 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 24 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 24 INDIRI4 ASGNI4 line 281 ;281: } LABELV $123 line 282 ;282: if ( !max ) { ADDRLP4 0 INDIRI4 CNSTI4 0 NEI4 $125 line 283 ;283: return 0; CNSTF4 0 RETF4 ADDRGP4 $120 JUMPV LABELV $125 line 286 ;284: } ;285: ;286: total = sqrt( cmd->forwardmove * cmd->forwardmove ADDRLP4 24 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 28 ADDRLP4 24 INDIRP4 CNSTI4 21 ADDP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 32 ADDRLP4 24 INDIRP4 CNSTI4 22 ADDP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 36 ADDRLP4 24 INDIRP4 CNSTI4 23 ADDP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 28 INDIRI4 ADDRLP4 28 INDIRI4 MULI4 ADDRLP4 32 INDIRI4 ADDRLP4 32 INDIRI4 MULI4 ADDI4 ADDRLP4 36 INDIRI4 ADDRLP4 36 INDIRI4 MULI4 ADDI4 CVIF4 4 ARGF4 ADDRLP4 40 ADDRGP4 sqrt CALLF4 ASGNF4 ADDRLP4 4 ADDRLP4 40 INDIRF4 ASGNF4 line 288 ;287: + cmd->rightmove * cmd->rightmove + cmd->upmove * cmd->upmove ); ;288: scale = (float)pm->ps->speed * max / ( 127.0 * total ); ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRLP4 0 INDIRI4 CVIF4 4 MULF4 CNSTF4 1123942400 ADDRLP4 4 INDIRF4 MULF4 DIVF4 ASGNF4 line 290 ;289: ;290: return scale; ADDRLP4 8 INDIRF4 RETF4 LABELV $120 endproc PM_CmdScale 44 4 proc PM_SetMovementDir 72 0 line 302 ;291:} ;292: ;293: ;294:/* ;295:================ ;296:PM_SetMovementDir ;297: ;298:Determine the rotation of the legs reletive ;299:to the facing dir ;300:================ ;301:*/ ;302:static void PM_SetMovementDir( void ) { line 303 ;303: if ( pm->cmd.forwardmove || pm->cmd.rightmove ) { ADDRLP4 0 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 4 INDIRI4 NEI4 $130 ADDRLP4 0 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 4 INDIRI4 EQI4 $128 LABELV $130 line 304 ;304: if ( pm->cmd.rightmove == 0 && pm->cmd.forwardmove > 0 ) { ADDRLP4 8 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 12 CNSTI4 0 ASGNI4 ADDRLP4 8 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 12 INDIRI4 NEI4 $131 ADDRLP4 8 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 12 INDIRI4 LEI4 $131 line 305 ;305: pm->ps->movementDir = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 0 ASGNI4 line 306 ;306: } else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove > 0 ) { ADDRGP4 $129 JUMPV LABELV $131 ADDRLP4 16 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 20 CNSTI4 0 ASGNI4 ADDRLP4 16 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 20 INDIRI4 GEI4 $133 ADDRLP4 16 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 20 INDIRI4 LEI4 $133 line 307 ;307: pm->ps->movementDir = 1; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 1 ASGNI4 line 308 ;308: } else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove == 0 ) { ADDRGP4 $129 JUMPV LABELV $133 ADDRLP4 24 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 28 CNSTI4 0 ASGNI4 ADDRLP4 24 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 28 INDIRI4 GEI4 $135 ADDRLP4 24 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 28 INDIRI4 NEI4 $135 line 309 ;309: pm->ps->movementDir = 2; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 2 ASGNI4 line 310 ;310: } else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove < 0 ) { ADDRGP4 $129 JUMPV LABELV $135 ADDRLP4 32 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 36 CNSTI4 0 ASGNI4 ADDRLP4 32 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 36 INDIRI4 GEI4 $137 ADDRLP4 32 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 36 INDIRI4 GEI4 $137 line 311 ;311: pm->ps->movementDir = 3; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 3 ASGNI4 line 312 ;312: } else if ( pm->cmd.rightmove == 0 && pm->cmd.forwardmove < 0 ) { ADDRGP4 $129 JUMPV LABELV $137 ADDRLP4 40 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 44 CNSTI4 0 ASGNI4 ADDRLP4 40 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 44 INDIRI4 NEI4 $139 ADDRLP4 40 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 44 INDIRI4 GEI4 $139 line 313 ;313: pm->ps->movementDir = 4; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 4 ASGNI4 line 314 ;314: } else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove < 0 ) { ADDRGP4 $129 JUMPV LABELV $139 ADDRLP4 48 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 52 CNSTI4 0 ASGNI4 ADDRLP4 48 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 52 INDIRI4 LEI4 $141 ADDRLP4 48 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 52 INDIRI4 GEI4 $141 line 315 ;315: pm->ps->movementDir = 5; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 5 ASGNI4 line 316 ;316: } else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove == 0 ) { ADDRGP4 $129 JUMPV LABELV $141 ADDRLP4 56 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 60 CNSTI4 0 ASGNI4 ADDRLP4 56 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 60 INDIRI4 LEI4 $143 ADDRLP4 56 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 60 INDIRI4 NEI4 $143 line 317 ;317: pm->ps->movementDir = 6; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 6 ASGNI4 line 318 ;318: } else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove > 0 ) { ADDRGP4 $129 JUMPV LABELV $143 ADDRLP4 64 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 68 CNSTI4 0 ASGNI4 ADDRLP4 64 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 68 INDIRI4 LEI4 $129 ADDRLP4 64 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 68 INDIRI4 LEI4 $129 line 319 ;319: pm->ps->movementDir = 7; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 7 ASGNI4 line 320 ;320: } line 321 ;321: } else { ADDRGP4 $129 JUMPV LABELV $128 line 325 ;322: // if they aren't actively going directly sideways, ;323: // change the animation to the diagonal so they ;324: // don't stop too crooked ;325: if ( pm->ps->movementDir == 2 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 INDIRI4 CNSTI4 2 NEI4 $147 line 326 ;326: pm->ps->movementDir = 1; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 1 ASGNI4 line 327 ;327: } else if ( pm->ps->movementDir == 6 ) { ADDRGP4 $148 JUMPV LABELV $147 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 INDIRI4 CNSTI4 6 NEI4 $149 line 328 ;328: pm->ps->movementDir = 7; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 88 ADDP4 CNSTI4 7 ASGNI4 line 329 ;329: } LABELV $149 LABELV $148 line 330 ;330: } LABELV $129 line 331 ;331:} LABELV $127 endproc PM_SetMovementDir 72 0 proc PM_CheckJump 8 4 line 339 ;332: ;333: ;334:/* ;335:============= ;336:PM_CheckJump ;337:============= ;338:*/ ;339:static qboolean PM_CheckJump( void ) { line 340 ;340: if ( pm->ps->pm_flags & PMF_RESPAWNED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 512 BANDI4 CNSTI4 0 EQI4 $152 line 341 ;341: return qfalse; // don't allow jump until all buttons are up CNSTI4 0 RETI4 ADDRGP4 $151 JUMPV LABELV $152 line 344 ;342: } ;343: ;344: if ( pm->cmd.upmove < 10 ) { ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CNSTI4 10 GEI4 $154 line 346 ;345: // not holding jump ;346: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $151 JUMPV LABELV $154 line 350 ;347: } ;348: ;349: // must wait for jump to be released ;350: if ( pm->ps->pm_flags & PMF_JUMP_HELD ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $156 line 352 ;351: // clear upmove so cmdscale doesn't lower running speed ;352: pm->cmd.upmove = 0; ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 CNSTI1 0 ASGNI1 line 353 ;353: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $151 JUMPV LABELV $156 line 356 ;354: } ;355: ;356: pml.groundPlane = qfalse; // jumping away ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 357 ;357: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 358 ;358: pm->ps->pm_flags |= PMF_JUMP_HELD; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 CNSTI4 2 BORI4 ASGNI4 line 360 ;359: ;360: pm->ps->groundEntityNum = ENTITYNUM_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 CNSTI4 1023 ASGNI4 line 361 ;361: pm->ps->velocity[2] = JUMP_VELOCITY; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 CNSTF4 1132920832 ASGNF4 line 362 ;362: PM_AddEvent( EV_JUMP ); CNSTI4 14 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 364 ;363: ;364: if ( pm->cmd.forwardmove >= 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 LTI4 $160 line 365 ;365: PM_ForceLegsAnim( LEGS_JUMP ); CNSTI4 18 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 366 ;366: pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP; ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 -9 BANDI4 ASGNI4 line 367 ;367: } else { ADDRGP4 $161 JUMPV LABELV $160 line 368 ;368: PM_ForceLegsAnim( LEGS_JUMPB ); CNSTI4 20 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 369 ;369: pm->ps->pm_flags |= PMF_BACKWARDS_JUMP; ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 370 ;370: } LABELV $161 line 372 ;371: ;372: return qtrue; CNSTI4 1 RETI4 LABELV $151 endproc PM_CheckJump 8 4 proc PM_CheckWaterJump 56 8 line 380 ;373:} ;374: ;375:/* ;376:============= ;377:PM_CheckWaterJump ;378:============= ;379:*/ ;380:static qboolean PM_CheckWaterJump( void ) { line 385 ;381: vec3_t spot; ;382: int cont; ;383: vec3_t flatforward; ;384: ;385: if (pm->ps->pm_time) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 CNSTI4 0 EQI4 $163 line 386 ;386: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $162 JUMPV LABELV $163 line 390 ;387: } ;388: ;389: // check for water jump ;390: if ( pm->waterlevel != 2 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 2 EQI4 $165 line 391 ;391: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $162 JUMPV LABELV $165 line 394 ;392: } ;393: ;394: flatforward[0] = pml.forward[0]; ADDRLP4 12 ADDRGP4 pml INDIRF4 ASGNF4 line 395 ;395: flatforward[1] = pml.forward[1]; ADDRLP4 12+4 ADDRGP4 pml+4 INDIRF4 ASGNF4 line 396 ;396: flatforward[2] = 0; ADDRLP4 12+8 CNSTF4 0 ASGNF4 line 397 ;397: VectorNormalize (flatforward); ADDRLP4 12 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 399 ;398: ;399: VectorMA (pm->ps->origin, 30, flatforward, spot); ADDRLP4 28 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 32 CNSTF4 1106247680 ASGNF4 ADDRLP4 0 ADDRLP4 28 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ADDRLP4 32 INDIRF4 ADDRLP4 12 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 0+4 ADDRLP4 28 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ADDRLP4 32 INDIRF4 ADDRLP4 12+4 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 0+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 1106247680 ADDRLP4 12+8 INDIRF4 MULF4 ADDF4 ASGNF4 line 400 ;400: spot[2] += 4; ADDRLP4 0+8 ADDRLP4 0+8 INDIRF4 CNSTF4 1082130432 ADDF4 ASGNF4 line 401 ;401: cont = pm->pointcontents (spot, pm->ps->clientNum ); ADDRLP4 0 ARGP4 ADDRLP4 36 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 36 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 40 ADDRLP4 36 INDIRP4 CNSTI4 228 ADDP4 INDIRP4 CALLI4 ASGNI4 ADDRLP4 24 ADDRLP4 40 INDIRI4 ASGNI4 line 402 ;402: if ( !(cont & CONTENTS_SOLID) ) { ADDRLP4 24 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 NEI4 $175 line 403 ;403: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $162 JUMPV LABELV $175 line 406 ;404: } ;405: ;406: spot[2] += 16; ADDRLP4 0+8 ADDRLP4 0+8 INDIRF4 CNSTF4 1098907648 ADDF4 ASGNF4 line 407 ;407: cont = pm->pointcontents (spot, pm->ps->clientNum ); ADDRLP4 0 ARGP4 ADDRLP4 44 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 44 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 48 ADDRLP4 44 INDIRP4 CNSTI4 228 ADDP4 INDIRP4 CALLI4 ASGNI4 ADDRLP4 24 ADDRLP4 48 INDIRI4 ASGNI4 line 408 ;408: if ( cont ) { ADDRLP4 24 INDIRI4 CNSTI4 0 EQI4 $178 line 409 ;409: return qfalse; CNSTI4 0 RETI4 ADDRGP4 $162 JUMPV LABELV $178 line 413 ;410: } ;411: ;412: // jump out of water ;413: VectorScale (pml.forward, 200, pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 CNSTF4 1128792064 ADDRGP4 pml INDIRF4 MULF4 ASGNF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 36 ADDP4 CNSTF4 1128792064 ADDRGP4 pml+4 INDIRF4 MULF4 ASGNF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 CNSTF4 1128792064 ADDRGP4 pml+8 INDIRF4 MULF4 ASGNF4 line 414 ;414: pm->ps->velocity[2] = 350; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 CNSTF4 1135542272 ASGNF4 line 416 ;415: ;416: pm->ps->pm_flags |= PMF_TIME_WATERJUMP; ADDRLP4 52 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 52 INDIRP4 ADDRLP4 52 INDIRP4 INDIRI4 CNSTI4 256 BORI4 ASGNI4 line 417 ;417: pm->ps->pm_time = 2000; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 2000 ASGNI4 line 419 ;418: ;419: return qtrue; CNSTI4 1 RETI4 LABELV $162 endproc PM_CheckWaterJump 56 8 proc PM_WaterJumpMove 12 4 line 432 ;420:} ;421: ;422://============================================================================ ;423: ;424: ;425:/* ;426:=================== ;427:PM_WaterJumpMove ;428: ;429:Flying out of the water ;430:=================== ;431:*/ ;432:static void PM_WaterJumpMove( void ) { line 435 ;433: // waterjump has no control, but falls ;434: ;435: PM_StepSlideMove( qtrue ); CNSTI4 1 ARGI4 ADDRGP4 PM_StepSlideMove CALLV pop line 437 ;436: ;437: pm->ps->velocity[2] -= pm->ps->gravity * pml.frametime; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 0 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRF4 ADDRLP4 0 INDIRP4 CNSTI4 48 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pml+36 INDIRF4 MULF4 SUBF4 ASGNF4 line 438 ;438: if (pm->ps->velocity[2] < 0) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 INDIRF4 CNSTF4 0 GEF4 $184 line 440 ;439: // cancel as soon as we are falling down again ;440: pm->ps->pm_flags &= ~PMF_ALL_TIMES; ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 -353 BANDI4 ASGNI4 line 441 ;441: pm->ps->pm_time = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 0 ASGNI4 line 442 ;442: } LABELV $184 line 443 ;443:} LABELV $182 endproc PM_WaterJumpMove 12 4 proc PM_WaterMove 76 16 line 451 ;444: ;445:/* ;446:=================== ;447:PM_WaterMove ;448: ;449:=================== ;450:*/ ;451:static void PM_WaterMove( void ) { line 459 ;452: int i; ;453: vec3_t wishvel; ;454: float wishspeed; ;455: vec3_t wishdir; ;456: float scale; ;457: float vel; ;458: ;459: if ( PM_CheckWaterJump() ) { ADDRLP4 40 ADDRGP4 PM_CheckWaterJump CALLI4 ASGNI4 ADDRLP4 40 INDIRI4 CNSTI4 0 EQI4 $187 line 460 ;460: PM_WaterJumpMove(); ADDRGP4 PM_WaterJumpMove CALLV pop line 461 ;461: return; ADDRGP4 $186 JUMPV LABELV $187 line 477 ;462: } ;463:#if 0 ;464: // jump = head for surface ;465: if ( pm->cmd.upmove >= 10 ) { ;466: if (pm->ps->velocity[2] > -300) { ;467: if ( pm->watertype == CONTENTS_WATER ) { ;468: pm->ps->velocity[2] = 100; ;469: } else if (pm->watertype == CONTENTS_SLIME) { ;470: pm->ps->velocity[2] = 80; ;471: } else { ;472: pm->ps->velocity[2] = 50; ;473: } ;474: } ;475: } ;476:#endif ;477: PM_Friction (); ADDRGP4 PM_Friction CALLV pop line 479 ;478: ;479: scale = PM_CmdScale( &pm->cmd ); ADDRGP4 pm INDIRP4 CNSTI4 4 ADDP4 ARGP4 ADDRLP4 44 ADDRGP4 PM_CmdScale CALLF4 ASGNF4 ADDRLP4 4 ADDRLP4 44 INDIRF4 ASGNF4 line 483 ;480: // ;481: // user intentions ;482: // ;483: if ( !scale ) { ADDRLP4 4 INDIRF4 CNSTF4 0 NEF4 $189 line 484 ;484: wishvel[0] = 0; ADDRLP4 8 CNSTF4 0 ASGNF4 line 485 ;485: wishvel[1] = 0; ADDRLP4 8+4 CNSTF4 0 ASGNF4 line 486 ;486: wishvel[2] = -60; // sink towards bottom ADDRLP4 8+8 CNSTF4 3262119936 ASGNF4 line 487 ;487: } else { ADDRGP4 $190 JUMPV LABELV $189 line 488 ;488: for (i=0 ; i<3 ; i++) ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $193 line 489 ;489: wishvel[i] = scale * pml.forward[i]*pm->cmd.forwardmove + scale * pml.right[i]*pm->cmd.rightmove; ADDRLP4 48 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 56 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 48 INDIRI4 ADDRLP4 8 ADDP4 ADDRLP4 4 INDIRF4 ADDRLP4 48 INDIRI4 ADDRGP4 pml ADDP4 INDIRF4 MULF4 ADDRLP4 56 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDRLP4 4 INDIRF4 ADDRLP4 48 INDIRI4 ADDRGP4 pml+12 ADDP4 INDIRF4 MULF4 ADDRLP4 56 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDF4 ASGNF4 LABELV $194 line 488 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $193 line 491 ;490: ;491: wishvel[2] += scale * pm->cmd.upmove; ADDRLP4 8+8 ADDRLP4 8+8 INDIRF4 ADDRLP4 4 INDIRF4 ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDF4 ASGNF4 line 492 ;492: } LABELV $190 line 494 ;493: ;494: VectorCopy (wishvel, wishdir); ADDRLP4 24 ADDRLP4 8 INDIRB ASGNB 12 line 495 ;495: wishspeed = VectorNormalize(wishdir); ADDRLP4 24 ARGP4 ADDRLP4 48 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 20 ADDRLP4 48 INDIRF4 ASGNF4 line 497 ;496: ;497: if ( wishspeed > pm->ps->speed * pm_swimScale ) { ADDRLP4 20 INDIRF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pm_swimScale INDIRF4 MULF4 LEF4 $199 line 498 ;498: wishspeed = pm->ps->speed * pm_swimScale; ADDRLP4 20 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pm_swimScale INDIRF4 MULF4 ASGNF4 line 499 ;499: } LABELV $199 line 501 ;500: ;501: PM_Accelerate (wishdir, wishspeed, pm_wateraccelerate); ADDRLP4 24 ARGP4 ADDRLP4 20 INDIRF4 ARGF4 ADDRGP4 pm_wateraccelerate INDIRF4 ARGF4 ADDRGP4 PM_Accelerate CALLV pop line 504 ;502: ;503: // make sure we can go up slopes easily under water ;504: if ( pml.groundPlane && DotProduct( pm->ps->velocity, pml.groundTrace.plane.normal ) < 0 ) { ADDRGP4 pml+48 INDIRI4 CNSTI4 0 EQI4 $201 ADDRLP4 52 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 52 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ADDRGP4 pml+52+24 INDIRF4 MULF4 ADDRLP4 52 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ADDRGP4 pml+52+24+4 INDIRF4 MULF4 ADDF4 ADDRLP4 52 INDIRP4 CNSTI4 40 ADDP4 INDIRF4 ADDRGP4 pml+52+24+8 INDIRF4 MULF4 ADDF4 CNSTF4 0 GEF4 $201 line 505 ;505: vel = VectorLength(pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRLP4 56 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 36 ADDRLP4 56 INDIRF4 ASGNF4 line 507 ;506: // slide along the ground plane ;507: PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, ADDRLP4 60 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 60 INDIRP4 ARGP4 ADDRGP4 pml+52+24 ARGP4 ADDRLP4 60 INDIRP4 ARGP4 CNSTF4 1065361605 ARGF4 ADDRGP4 PM_ClipVelocity CALLV pop line 510 ;508: pm->ps->velocity, OVERCLIP ); ;509: ;510: VectorNormalize(pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 511 ;511: VectorScale(pm->ps->velocity, vel, pm->ps->velocity); ADDRLP4 64 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 64 INDIRP4 ADDRLP4 64 INDIRP4 INDIRF4 ADDRLP4 36 INDIRF4 MULF4 ASGNF4 ADDRLP4 68 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 68 INDIRP4 ADDRLP4 68 INDIRP4 INDIRF4 ADDRLP4 36 INDIRF4 MULF4 ASGNF4 ADDRLP4 72 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 72 INDIRP4 ADDRLP4 72 INDIRP4 INDIRF4 ADDRLP4 36 INDIRF4 MULF4 ASGNF4 line 512 ;512: } LABELV $201 line 514 ;513: ;514: PM_SlideMove( qfalse ); CNSTI4 0 ARGI4 ADDRGP4 PM_SlideMove CALLI4 pop line 515 ;515:} LABELV $186 endproc PM_WaterMove 76 16 proc PM_FlyMove 52 12 line 540 ;516: ;517:#ifdef MISSIONPACK ;518:/* ;519:=================== ;520:PM_InvulnerabilityMove ;521: ;522:Only with the invulnerability powerup ;523:=================== ;524:*/ ;525:static void PM_InvulnerabilityMove( void ) { ;526: pm->cmd.forwardmove = 0; ;527: pm->cmd.rightmove = 0; ;528: pm->cmd.upmove = 0; ;529: VectorClear(pm->ps->velocity); ;530:} ;531:#endif ;532: ;533:/* ;534:=================== ;535:PM_FlyMove ;536: ;537:Only with the flight powerup ;538:=================== ;539:*/ ;540:static void PM_FlyMove( void ) { line 548 ;541: int i; ;542: vec3_t wishvel; ;543: float wishspeed; ;544: vec3_t wishdir; ;545: float scale; ;546: ;547: // normal slowdown ;548: PM_Friction (); ADDRGP4 PM_Friction CALLV pop line 550 ;549: ;550: scale = PM_CmdScale( &pm->cmd ); ADDRGP4 pm INDIRP4 CNSTI4 4 ADDP4 ARGP4 ADDRLP4 36 ADDRGP4 PM_CmdScale CALLF4 ASGNF4 ADDRLP4 4 ADDRLP4 36 INDIRF4 ASGNF4 line 554 ;551: // ;552: // user intentions ;553: // ;554: if ( !scale ) { ADDRLP4 4 INDIRF4 CNSTF4 0 NEF4 $215 line 555 ;555: wishvel[0] = 0; ADDRLP4 8 CNSTF4 0 ASGNF4 line 556 ;556: wishvel[1] = 0; ADDRLP4 8+4 CNSTF4 0 ASGNF4 line 557 ;557: wishvel[2] = 0; ADDRLP4 8+8 CNSTF4 0 ASGNF4 line 558 ;558: } else { ADDRGP4 $216 JUMPV LABELV $215 line 559 ;559: for (i=0 ; i<3 ; i++) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $219 line 560 ;560: wishvel[i] = scale * pml.forward[i]*pm->cmd.forwardmove + scale * pml.right[i]*pm->cmd.rightmove; ADDRLP4 40 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 48 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 40 INDIRI4 ADDRLP4 8 ADDP4 ADDRLP4 4 INDIRF4 ADDRLP4 40 INDIRI4 ADDRGP4 pml ADDP4 INDIRF4 MULF4 ADDRLP4 48 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDRLP4 4 INDIRF4 ADDRLP4 40 INDIRI4 ADDRGP4 pml+12 ADDP4 INDIRF4 MULF4 ADDRLP4 48 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDF4 ASGNF4 line 561 ;561: } LABELV $220 line 559 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $219 line 563 ;562: ;563: wishvel[2] += scale * pm->cmd.upmove; ADDRLP4 8+8 ADDRLP4 8+8 INDIRF4 ADDRLP4 4 INDIRF4 ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CVIF4 4 MULF4 ADDF4 ASGNF4 line 564 ;564: } LABELV $216 line 566 ;565: ;566: VectorCopy (wishvel, wishdir); ADDRLP4 20 ADDRLP4 8 INDIRB ASGNB 12 line 567 ;567: wishspeed = VectorNormalize(wishdir); ADDRLP4 20 ARGP4 ADDRLP4 40 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 32 ADDRLP4 40 INDIRF4 ASGNF4 line 569 ;568: ;569: PM_Accelerate (wishdir, wishspeed, pm_flyaccelerate); ADDRLP4 20 ARGP4 ADDRLP4 32 INDIRF4 ARGF4 ADDRGP4 pm_flyaccelerate INDIRF4 ARGF4 ADDRGP4 PM_Accelerate CALLV pop line 571 ;570: ;571: PM_StepSlideMove( qfalse ); CNSTI4 0 ARGI4 ADDRGP4 PM_StepSlideMove CALLV pop line 572 ;572:} LABELV $214 endproc PM_FlyMove 52 12 proc PM_AirMove 80 16 line 581 ;573: ;574: ;575:/* ;576:=================== ;577:PM_AirMove ;578: ;579:=================== ;580:*/ ;581:static void PM_AirMove( void ) { line 590 ;582: int i; ;583: vec3_t wishvel; ;584: float fmove, smove; ;585: vec3_t wishdir; ;586: float wishspeed; ;587: float scale; ;588: usercmd_t cmd; ;589: ;590: PM_Friction(); ADDRGP4 PM_Friction CALLV pop line 592 ;591: ;592: fmove = pm->cmd.forwardmove; ADDRLP4 16 ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 593 ;593: smove = pm->cmd.rightmove; ADDRLP4 20 ADDRGP4 pm INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 595 ;594: ;595: cmd = pm->cmd; ADDRLP4 44 ADDRGP4 pm INDIRP4 CNSTI4 4 ADDP4 INDIRB ASGNB 24 line 596 ;596: scale = PM_CmdScale( &cmd ); ADDRLP4 44 ARGP4 ADDRLP4 68 ADDRGP4 PM_CmdScale CALLF4 ASGNF4 ADDRLP4 40 ADDRLP4 68 INDIRF4 ASGNF4 line 599 ;597: ;598: // set the movementDir so clients can rotate the legs for strafing ;599: PM_SetMovementDir(); ADDRGP4 PM_SetMovementDir CALLV pop line 602 ;600: ;601: // project moves down to flat plane ;602: pml.forward[2] = 0; ADDRGP4 pml+8 CNSTF4 0 ASGNF4 line 603 ;603: pml.right[2] = 0; ADDRGP4 pml+12+8 CNSTF4 0 ASGNF4 line 604 ;604: VectorNormalize (pml.forward); ADDRGP4 pml ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 605 ;605: VectorNormalize (pml.right); ADDRGP4 pml+12 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 607 ;606: ;607: for ( i = 0 ; i < 2 ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $230 line 608 ;608: wishvel[i] = pml.forward[i]*fmove + pml.right[i]*smove; ADDRLP4 72 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 72 INDIRI4 ADDRLP4 4 ADDP4 ADDRLP4 72 INDIRI4 ADDRGP4 pml ADDP4 INDIRF4 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 72 INDIRI4 ADDRGP4 pml+12 ADDP4 INDIRF4 ADDRLP4 20 INDIRF4 MULF4 ADDF4 ASGNF4 line 609 ;609: } LABELV $231 line 607 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 2 LTI4 $230 line 610 ;610: wishvel[2] = 0; ADDRLP4 4+8 CNSTF4 0 ASGNF4 line 612 ;611: ;612: VectorCopy (wishvel, wishdir); ADDRLP4 24 ADDRLP4 4 INDIRB ASGNB 12 line 613 ;613: wishspeed = VectorNormalize(wishdir); ADDRLP4 24 ARGP4 ADDRLP4 72 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 36 ADDRLP4 72 INDIRF4 ASGNF4 line 614 ;614: wishspeed *= scale; ADDRLP4 36 ADDRLP4 36 INDIRF4 ADDRLP4 40 INDIRF4 MULF4 ASGNF4 line 617 ;615: ;616: // not on ground, so little effect on velocity ;617: PM_Accelerate (wishdir, wishspeed, pm_airaccelerate); ADDRLP4 24 ARGP4 ADDRLP4 36 INDIRF4 ARGF4 ADDRGP4 pm_airaccelerate INDIRF4 ARGF4 ADDRGP4 PM_Accelerate CALLV pop line 622 ;618: ;619: // we may have a ground plane that is very steep, even ;620: // though we don't have a groundentity ;621: // slide along the steep plane ;622: if ( pml.groundPlane ) { ADDRGP4 pml+48 INDIRI4 CNSTI4 0 EQI4 $236 line 623 ;623: PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, ADDRLP4 76 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 76 INDIRP4 ARGP4 ADDRGP4 pml+52+24 ARGP4 ADDRLP4 76 INDIRP4 ARGP4 CNSTF4 1065361605 ARGF4 ADDRGP4 PM_ClipVelocity CALLV pop line 625 ;624: pm->ps->velocity, OVERCLIP ); ;625: } LABELV $236 line 637 ;626: ;627:#if 0 ;628: //ZOID: If we are on the grapple, try stair-stepping ;629: //this allows a player to use the grapple to pull himself ;630: //over a ledge ;631: if (pm->ps->pm_flags & PMF_GRAPPLE_PULL) ;632: PM_StepSlideMove ( qtrue ); ;633: else ;634: PM_SlideMove ( qtrue ); ;635:#endif ;636: ;637: PM_StepSlideMove ( qtrue ); CNSTI4 1 ARGI4 ADDRGP4 PM_StepSlideMove CALLV pop line 638 ;638:} LABELV $225 endproc PM_AirMove 80 16 proc PM_GrappleMove 52 4 line 646 ;639: ;640:/* ;641:=================== ;642:PM_GrappleMove ;643: ;644:=================== ;645:*/ ;646:static void PM_GrappleMove( void ) { line 650 ;647: vec3_t vel, v; ;648: float vlen; ;649: ;650: VectorScale(pml.forward, -16, v); ADDRLP4 28 CNSTF4 3246391296 ASGNF4 ADDRLP4 12 ADDRLP4 28 INDIRF4 ADDRGP4 pml INDIRF4 MULF4 ASGNF4 ADDRLP4 12+4 ADDRLP4 28 INDIRF4 ADDRGP4 pml+4 INDIRF4 MULF4 ASGNF4 ADDRLP4 12+8 CNSTF4 3246391296 ADDRGP4 pml+8 INDIRF4 MULF4 ASGNF4 line 651 ;651: VectorAdd(pm->ps->grapplePoint, v, v); ADDRLP4 32 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 12 ADDRLP4 32 INDIRP4 INDIRP4 CNSTI4 92 ADDP4 INDIRF4 ADDRLP4 12 INDIRF4 ADDF4 ASGNF4 ADDRLP4 12+4 ADDRLP4 32 INDIRP4 INDIRP4 CNSTI4 96 ADDP4 INDIRF4 ADDRLP4 12+4 INDIRF4 ADDF4 ASGNF4 ADDRLP4 12+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 100 ADDP4 INDIRF4 ADDRLP4 12+8 INDIRF4 ADDF4 ASGNF4 line 652 ;652: VectorSubtract(v, pm->ps->origin, vel); ADDRLP4 36 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 12 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 0+4 ADDRLP4 12+4 INDIRF4 ADDRLP4 36 INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 SUBF4 ASGNF4 ADDRLP4 0+8 ADDRLP4 12+8 INDIRF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 SUBF4 ASGNF4 line 653 ;653: vlen = VectorLength(vel); ADDRLP4 0 ARGP4 ADDRLP4 40 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 24 ADDRLP4 40 INDIRF4 ASGNF4 line 654 ;654: VectorNormalize( vel ); ADDRLP4 0 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 656 ;655: ;656: if (vlen <= 100) ADDRLP4 24 INDIRF4 CNSTF4 1120403456 GTF4 $254 line 657 ;657: VectorScale(vel, 10 * vlen, vel); ADDRLP4 44 CNSTF4 1092616192 ADDRLP4 24 INDIRF4 MULF4 ASGNF4 ADDRLP4 0 ADDRLP4 0 INDIRF4 ADDRLP4 44 INDIRF4 MULF4 ASGNF4 ADDRLP4 0+4 ADDRLP4 0+4 INDIRF4 ADDRLP4 44 INDIRF4 MULF4 ASGNF4 ADDRLP4 0+8 ADDRLP4 0+8 INDIRF4 CNSTF4 1092616192 ADDRLP4 24 INDIRF4 MULF4 MULF4 ASGNF4 ADDRGP4 $255 JUMPV LABELV $254 line 659 ;658: else ;659: VectorScale(vel, 800, vel); ADDRLP4 48 CNSTF4 1145569280 ASGNF4 ADDRLP4 0 ADDRLP4 48 INDIRF4 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 ADDRLP4 0+4 ADDRLP4 48 INDIRF4 ADDRLP4 0+4 INDIRF4 MULF4 ASGNF4 ADDRLP4 0+8 CNSTF4 1145569280 ADDRLP4 0+8 INDIRF4 MULF4 ASGNF4 LABELV $255 line 661 ;660: ;661: VectorCopy(vel, pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ADDRLP4 0 INDIRB ASGNB 12 line 663 ;662: ;663: pml.groundPlane = qfalse; ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 664 ;664:} LABELV $241 endproc PM_GrappleMove 52 4 proc PM_WalkMove 128 16 line 672 ;665: ;666:/* ;667:=================== ;668:PM_WalkMove ;669: ;670:=================== ;671:*/ ;672:static void PM_WalkMove( void ) { line 683 ;673: int i; ;674: vec3_t wishvel; ;675: float fmove, smove; ;676: vec3_t wishdir; ;677: float wishspeed; ;678: float scale; ;679: usercmd_t cmd; ;680: float accelerate; ;681: float vel; ;682: ;683: if ( pm->waterlevel > 2 && DotProduct( pml.forward, pml.groundTrace.plane.normal ) > 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 2 LEI4 $266 ADDRGP4 pml INDIRF4 ADDRGP4 pml+52+24 INDIRF4 MULF4 ADDRGP4 pml+4 INDIRF4 ADDRGP4 pml+52+24+4 INDIRF4 MULF4 ADDF4 ADDRGP4 pml+8 INDIRF4 ADDRGP4 pml+52+24+8 INDIRF4 MULF4 ADDF4 CNSTF4 0 LEF4 $266 line 685 ;684: // begin swimming ;685: PM_WaterMove(); ADDRGP4 PM_WaterMove CALLV pop line 686 ;686: return; ADDRGP4 $265 JUMPV LABELV $266 line 690 ;687: } ;688: ;689: ;690: if ( PM_CheckJump () ) { ADDRLP4 76 ADDRGP4 PM_CheckJump CALLI4 ASGNI4 ADDRLP4 76 INDIRI4 CNSTI4 0 EQI4 $278 line 692 ;691: // jumped away ;692: if ( pm->waterlevel > 1 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 LEI4 $280 line 693 ;693: PM_WaterMove(); ADDRGP4 PM_WaterMove CALLV pop line 694 ;694: } else { ADDRGP4 $265 JUMPV LABELV $280 line 695 ;695: PM_AirMove(); ADDRGP4 PM_AirMove CALLV pop line 696 ;696: } line 697 ;697: return; ADDRGP4 $265 JUMPV LABELV $278 line 700 ;698: } ;699: ;700: PM_Friction (); ADDRGP4 PM_Friction CALLV pop line 702 ;701: ;702: fmove = pm->cmd.forwardmove; ADDRLP4 16 ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 703 ;703: smove = pm->cmd.rightmove; ADDRLP4 20 ADDRGP4 pm INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 705 ;704: ;705: cmd = pm->cmd; ADDRLP4 48 ADDRGP4 pm INDIRP4 CNSTI4 4 ADDP4 INDIRB ASGNB 24 line 706 ;706: scale = PM_CmdScale( &cmd ); ADDRLP4 48 ARGP4 ADDRLP4 80 ADDRGP4 PM_CmdScale CALLF4 ASGNF4 ADDRLP4 44 ADDRLP4 80 INDIRF4 ASGNF4 line 709 ;707: ;708: // set the movementDir so clients can rotate the legs for strafing ;709: PM_SetMovementDir(); ADDRGP4 PM_SetMovementDir CALLV pop line 712 ;710: ;711: // project moves down to flat plane ;712: pml.forward[2] = 0; ADDRGP4 pml+8 CNSTF4 0 ASGNF4 line 713 ;713: pml.right[2] = 0; ADDRGP4 pml+12+8 CNSTF4 0 ASGNF4 line 716 ;714: ;715: // project the forward and right directions onto the ground plane ;716: PM_ClipVelocity (pml.forward, pml.groundTrace.plane.normal, pml.forward, OVERCLIP ); ADDRLP4 84 ADDRGP4 pml ASGNP4 ADDRLP4 84 INDIRP4 ARGP4 ADDRGP4 pml+52+24 ARGP4 ADDRLP4 84 INDIRP4 ARGP4 CNSTF4 1065361605 ARGF4 ADDRGP4 PM_ClipVelocity CALLV pop line 717 ;717: PM_ClipVelocity (pml.right, pml.groundTrace.plane.normal, pml.right, OVERCLIP ); ADDRGP4 pml+12 ARGP4 ADDRGP4 pml+52+24 ARGP4 ADDRGP4 pml+12 ARGP4 CNSTF4 1065361605 ARGF4 ADDRGP4 PM_ClipVelocity CALLV pop line 719 ;718: // ;719: VectorNormalize (pml.forward); ADDRGP4 pml ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 720 ;720: VectorNormalize (pml.right); ADDRGP4 pml+12 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 722 ;721: ;722: for ( i = 0 ; i < 3 ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $292 line 723 ;723: wishvel[i] = pml.forward[i]*fmove + pml.right[i]*smove; ADDRLP4 88 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 88 INDIRI4 ADDRLP4 4 ADDP4 ADDRLP4 88 INDIRI4 ADDRGP4 pml ADDP4 INDIRF4 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 88 INDIRI4 ADDRGP4 pml+12 ADDP4 INDIRF4 ADDRLP4 20 INDIRF4 MULF4 ADDF4 ASGNF4 line 724 ;724: } LABELV $293 line 722 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $292 line 728 ;725: // when going up or down slopes the wish velocity should Not be zero ;726:// wishvel[2] = 0; ;727: ;728: VectorCopy (wishvel, wishdir); ADDRLP4 32 ADDRLP4 4 INDIRB ASGNB 12 line 729 ;729: wishspeed = VectorNormalize(wishdir); ADDRLP4 32 ARGP4 ADDRLP4 88 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 24 ADDRLP4 88 INDIRF4 ASGNF4 line 730 ;730: wishspeed *= scale; ADDRLP4 24 ADDRLP4 24 INDIRF4 ADDRLP4 44 INDIRF4 MULF4 ASGNF4 line 733 ;731: ;732: // clamp the speed lower if ducking ;733: if ( pm->ps->pm_flags & PMF_DUCKED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $297 line 734 ;734: if ( wishspeed > pm->ps->speed * pm_duckScale ) { ADDRLP4 24 INDIRF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pm_duckScale INDIRF4 MULF4 LEF4 $299 line 735 ;735: wishspeed = pm->ps->speed * pm_duckScale; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pm_duckScale INDIRF4 MULF4 ASGNF4 line 736 ;736: } LABELV $299 line 737 ;737: } LABELV $297 line 740 ;738: ;739: // clamp the speed lower if wading or walking on the bottom ;740: if ( pm->waterlevel ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 0 EQI4 $301 line 743 ;741: float waterScale; ;742: ;743: waterScale = pm->waterlevel / 3.0; ADDRLP4 92 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CVIF4 4 CNSTF4 1077936128 DIVF4 ASGNF4 line 744 ;744: waterScale = 1.0 - ( 1.0 - pm_swimScale ) * waterScale; ADDRLP4 96 CNSTF4 1065353216 ASGNF4 ADDRLP4 92 ADDRLP4 96 INDIRF4 ADDRLP4 96 INDIRF4 ADDRGP4 pm_swimScale INDIRF4 SUBF4 ADDRLP4 92 INDIRF4 MULF4 SUBF4 ASGNF4 line 745 ;745: if ( wishspeed > pm->ps->speed * waterScale ) { ADDRLP4 24 INDIRF4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRLP4 92 INDIRF4 MULF4 LEF4 $303 line 746 ;746: wishspeed = pm->ps->speed * waterScale; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 52 ADDP4 INDIRI4 CVIF4 4 ADDRLP4 92 INDIRF4 MULF4 ASGNF4 line 747 ;747: } LABELV $303 line 748 ;748: } LABELV $301 line 752 ;749: ;750: // when a player gets hit, they temporarily lose ;751: // full control, which allows them to be moved a bit ;752: if ( ( pml.groundTrace.surfaceFlags & SURF_SLICK ) || pm->ps->pm_flags & PMF_TIME_KNOCKBACK ) { ADDRLP4 92 CNSTI4 0 ASGNI4 ADDRGP4 pml+52+44 INDIRI4 CNSTI4 2 BANDI4 ADDRLP4 92 INDIRI4 NEI4 $309 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 64 BANDI4 ADDRLP4 92 INDIRI4 EQI4 $305 LABELV $309 line 753 ;753: accelerate = pm_airaccelerate; ADDRLP4 72 ADDRGP4 pm_airaccelerate INDIRF4 ASGNF4 line 754 ;754: } else { ADDRGP4 $306 JUMPV LABELV $305 line 755 ;755: accelerate = pm_accelerate; ADDRLP4 72 ADDRGP4 pm_accelerate INDIRF4 ASGNF4 line 756 ;756: } LABELV $306 line 758 ;757: ;758: PM_Accelerate (wishdir, wishspeed, accelerate); ADDRLP4 32 ARGP4 ADDRLP4 24 INDIRF4 ARGF4 ADDRLP4 72 INDIRF4 ARGF4 ADDRGP4 PM_Accelerate CALLV pop line 763 ;759: ;760: //Com_Printf("velocity = %1.1f %1.1f %1.1f\n", pm->ps->velocity[0], pm->ps->velocity[1], pm->ps->velocity[2]); ;761: //Com_Printf("velocity1 = %1.1f\n", VectorLength(pm->ps->velocity)); ;762: ;763: if ( ( pml.groundTrace.surfaceFlags & SURF_SLICK ) || pm->ps->pm_flags & PMF_TIME_KNOCKBACK ) { ADDRLP4 96 CNSTI4 0 ASGNI4 ADDRGP4 pml+52+44 INDIRI4 CNSTI4 2 BANDI4 ADDRLP4 96 INDIRI4 NEI4 $314 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 64 BANDI4 ADDRLP4 96 INDIRI4 EQI4 $310 LABELV $314 line 764 ;764: pm->ps->velocity[2] -= pm->ps->gravity * pml.frametime; ADDRLP4 100 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 104 ADDRLP4 100 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 104 INDIRP4 ADDRLP4 104 INDIRP4 INDIRF4 ADDRLP4 100 INDIRP4 CNSTI4 48 ADDP4 INDIRI4 CVIF4 4 ADDRGP4 pml+36 INDIRF4 MULF4 SUBF4 ASGNF4 line 765 ;765: } else { LABELV $310 line 768 ;766: // don't reset the z velocity for slopes ;767:// pm->ps->velocity[2] = 0; ;768: } LABELV $311 line 770 ;769: ;770: vel = VectorLength(pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRLP4 100 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 28 ADDRLP4 100 INDIRF4 ASGNF4 line 773 ;771: ;772: // slide along the ground plane ;773: PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, ADDRLP4 104 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 104 INDIRP4 ARGP4 ADDRGP4 pml+52+24 ARGP4 ADDRLP4 104 INDIRP4 ARGP4 CNSTF4 1065361605 ARGF4 ADDRGP4 PM_ClipVelocity CALLV pop line 777 ;774: pm->ps->velocity, OVERCLIP ); ;775: ;776: // don't decrease velocity when going up or down a slope ;777: VectorNormalize(pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 778 ;778: VectorScale(pm->ps->velocity, vel, pm->ps->velocity); ADDRLP4 108 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 108 INDIRP4 ADDRLP4 108 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 ADDRLP4 112 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 112 INDIRP4 ADDRLP4 112 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 ADDRLP4 116 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 116 INDIRP4 ADDRLP4 116 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 line 781 ;779: ;780: // don't do anything if standing still ;781: if (!pm->ps->velocity[0] && !pm->ps->velocity[1]) { ADDRLP4 120 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 124 CNSTF4 0 ASGNF4 ADDRLP4 120 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ADDRLP4 124 INDIRF4 NEF4 $318 ADDRLP4 120 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ADDRLP4 124 INDIRF4 NEF4 $318 line 782 ;782: return; ADDRGP4 $265 JUMPV LABELV $318 line 785 ;783: } ;784: ;785: PM_StepSlideMove( qfalse ); CNSTI4 0 ARGI4 ADDRGP4 PM_StepSlideMove CALLV pop line 789 ;786: ;787: //Com_Printf("velocity2 = %1.1f\n", VectorLength(pm->ps->velocity)); ;788: ;789:} LABELV $265 endproc PM_WalkMove 128 16 proc PM_DeadMove 20 4 line 797 ;790: ;791: ;792:/* ;793:============== ;794:PM_DeadMove ;795:============== ;796:*/ ;797:static void PM_DeadMove( void ) { line 800 ;798: float forward; ;799: ;800: if ( !pml.walking ) { ADDRGP4 pml+44 INDIRI4 CNSTI4 0 NEI4 $321 line 801 ;801: return; ADDRGP4 $320 JUMPV LABELV $321 line 806 ;802: } ;803: ;804: // extra friction ;805: ;806: forward = VectorLength (pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRLP4 4 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 0 ADDRLP4 4 INDIRF4 ASGNF4 line 807 ;807: forward -= 20; ADDRLP4 0 ADDRLP4 0 INDIRF4 CNSTF4 1101004800 SUBF4 ASGNF4 line 808 ;808: if ( forward <= 0 ) { ADDRLP4 0 INDIRF4 CNSTF4 0 GTF4 $324 line 809 ;809: VectorClear (pm->ps->velocity); ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 12 CNSTF4 0 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 40 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 36 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 32 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 line 810 ;810: } else { ADDRGP4 $325 JUMPV LABELV $324 line 811 ;811: VectorNormalize (pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 812 ;812: VectorScale (pm->ps->velocity, forward, pm->ps->velocity); ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRF4 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRF4 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 ADDRLP4 16 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 16 INDIRP4 INDIRF4 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 line 813 ;813: } LABELV $325 line 814 ;814:} LABELV $320 endproc PM_DeadMove 20 4 proc PM_NoclipMove 104 12 line 822 ;815: ;816: ;817:/* ;818:=============== ;819:PM_NoclipMove ;820:=============== ;821:*/ ;822:static void PM_NoclipMove( void ) { line 831 ;823: float speed, drop, friction, control, newspeed; ;824: int i; ;825: vec3_t wishvel; ;826: float fmove, smove; ;827: vec3_t wishdir; ;828: float wishspeed; ;829: float scale; ;830: ;831: pm->ps->viewheight = DEFAULT_VIEWHEIGHT; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 CNSTI4 26 ASGNI4 line 835 ;832: ;833: // friction ;834: ;835: speed = VectorLength (pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRLP4 64 ADDRGP4 VectorLength CALLF4 ASGNF4 ADDRLP4 24 ADDRLP4 64 INDIRF4 ASGNF4 line 836 ;836: if (speed < 1) ADDRLP4 24 INDIRF4 CNSTF4 1065353216 GEF4 $327 line 837 ;837: { line 838 ;838: VectorCopy (vec3_origin, pm->ps->velocity); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ADDRGP4 vec3_origin INDIRB ASGNB 12 line 839 ;839: } ADDRGP4 $328 JUMPV LABELV $327 line 841 ;840: else ;841: { line 842 ;842: drop = 0; ADDRLP4 52 CNSTF4 0 ASGNF4 line 844 ;843: ;844: friction = pm_friction*1.5; // extra friction ADDRLP4 56 CNSTF4 1069547520 ADDRGP4 pm_friction INDIRF4 MULF4 ASGNF4 line 845 ;845: control = speed < pm_stopspeed ? pm_stopspeed : speed; ADDRLP4 24 INDIRF4 ADDRGP4 pm_stopspeed INDIRF4 GEF4 $330 ADDRLP4 68 ADDRGP4 pm_stopspeed INDIRF4 ASGNF4 ADDRGP4 $331 JUMPV LABELV $330 ADDRLP4 68 ADDRLP4 24 INDIRF4 ASGNF4 LABELV $331 ADDRLP4 60 ADDRLP4 68 INDIRF4 ASGNF4 line 846 ;846: drop += control*friction*pml.frametime; ADDRLP4 52 ADDRLP4 52 INDIRF4 ADDRLP4 60 INDIRF4 ADDRLP4 56 INDIRF4 MULF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 849 ;847: ;848: // scale the velocity ;849: newspeed = speed - drop; ADDRLP4 28 ADDRLP4 24 INDIRF4 ADDRLP4 52 INDIRF4 SUBF4 ASGNF4 line 850 ;850: if (newspeed < 0) ADDRLP4 28 INDIRF4 CNSTF4 0 GEF4 $333 line 851 ;851: newspeed = 0; ADDRLP4 28 CNSTF4 0 ASGNF4 LABELV $333 line 852 ;852: newspeed /= speed; ADDRLP4 28 ADDRLP4 28 INDIRF4 ADDRLP4 24 INDIRF4 DIVF4 ASGNF4 line 854 ;853: ;854: VectorScale (pm->ps->velocity, newspeed, pm->ps->velocity); ADDRLP4 72 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ASGNP4 ADDRLP4 72 INDIRP4 ADDRLP4 72 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 ADDRLP4 76 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 76 INDIRP4 ADDRLP4 76 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 ADDRLP4 80 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 80 INDIRP4 ADDRLP4 80 INDIRP4 INDIRF4 ADDRLP4 28 INDIRF4 MULF4 ASGNF4 line 855 ;855: } LABELV $328 line 858 ;856: ;857: // accelerate ;858: scale = PM_CmdScale( &pm->cmd ); ADDRGP4 pm INDIRP4 CNSTI4 4 ADDP4 ARGP4 ADDRLP4 68 ADDRGP4 PM_CmdScale CALLF4 ASGNF4 ADDRLP4 48 ADDRLP4 68 INDIRF4 ASGNF4 line 860 ;859: ;860: fmove = pm->cmd.forwardmove; ADDRLP4 16 ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 861 ;861: smove = pm->cmd.rightmove; ADDRLP4 20 ADDRGP4 pm INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ASGNF4 line 863 ;862: ;863: for (i=0 ; i<3 ; i++) ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $335 line 864 ;864: wishvel[i] = pml.forward[i]*fmove + pml.right[i]*smove; ADDRLP4 72 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 72 INDIRI4 ADDRLP4 4 ADDP4 ADDRLP4 72 INDIRI4 ADDRGP4 pml ADDP4 INDIRF4 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 72 INDIRI4 ADDRGP4 pml+12 ADDP4 INDIRF4 ADDRLP4 20 INDIRF4 MULF4 ADDF4 ASGNF4 LABELV $336 line 863 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $335 line 865 ;865: wishvel[2] += pm->cmd.upmove; ADDRLP4 4+8 ADDRLP4 4+8 INDIRF4 ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CVIF4 4 ADDF4 ASGNF4 line 867 ;866: ;867: VectorCopy (wishvel, wishdir); ADDRLP4 32 ADDRLP4 4 INDIRB ASGNB 12 line 868 ;868: wishspeed = VectorNormalize(wishdir); ADDRLP4 32 ARGP4 ADDRLP4 76 ADDRGP4 VectorNormalize CALLF4 ASGNF4 ADDRLP4 44 ADDRLP4 76 INDIRF4 ASGNF4 line 869 ;869: wishspeed *= scale; ADDRLP4 44 ADDRLP4 44 INDIRF4 ADDRLP4 48 INDIRF4 MULF4 ASGNF4 line 871 ;870: ;871: PM_Accelerate( wishdir, wishspeed, pm_accelerate ); ADDRLP4 32 ARGP4 ADDRLP4 44 INDIRF4 ARGF4 ADDRGP4 pm_accelerate INDIRF4 ARGF4 ADDRGP4 PM_Accelerate CALLV pop line 874 ;872: ;873: // move ;874: VectorMA (pm->ps->origin, pml.frametime, pm->ps->velocity, pm->ps->origin); ADDRLP4 80 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 84 ADDRLP4 80 INDIRP4 CNSTI4 20 ADDP4 ASGNP4 ADDRLP4 84 INDIRP4 ADDRLP4 84 INDIRP4 INDIRF4 ADDRLP4 80 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 88 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 92 ADDRLP4 88 INDIRP4 CNSTI4 24 ADDP4 ASGNP4 ADDRLP4 92 INDIRP4 ADDRLP4 92 INDIRP4 INDIRF4 ADDRLP4 88 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 ADDRLP4 96 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 100 ADDRLP4 96 INDIRP4 CNSTI4 28 ADDP4 ASGNP4 ADDRLP4 100 INDIRP4 ADDRLP4 100 INDIRP4 INDIRF4 ADDRLP4 96 INDIRP4 CNSTI4 40 ADDP4 INDIRF4 ADDRGP4 pml+36 INDIRF4 MULF4 ADDF4 ASGNF4 line 875 ;875:} LABELV $326 endproc PM_NoclipMove 104 12 proc PM_FootstepForSurface 0 0 line 886 ;876: ;877://============================================================================ ;878: ;879:/* ;880:================ ;881:PM_FootstepForSurface ;882: ;883:Returns an event number apropriate for the groundsurface ;884:================ ;885:*/ ;886:static int PM_FootstepForSurface( void ) { line 887 ;887: if ( pml.groundTrace.surfaceFlags & SURF_NOSTEPS ) { ADDRGP4 pml+52+44 INDIRI4 CNSTI4 8192 BANDI4 CNSTI4 0 EQI4 $345 line 888 ;888: return 0; CNSTI4 0 RETI4 ADDRGP4 $344 JUMPV LABELV $345 line 890 ;889: } ;890: if ( pml.groundTrace.surfaceFlags & SURF_METALSTEPS ) { ADDRGP4 pml+52+44 INDIRI4 CNSTI4 4096 BANDI4 CNSTI4 0 EQI4 $349 line 891 ;891: return EV_FOOTSTEP_METAL; CNSTI4 2 RETI4 ADDRGP4 $344 JUMPV LABELV $349 line 893 ;892: } ;893: return EV_FOOTSTEP; CNSTI4 1 RETI4 LABELV $344 endproc PM_FootstepForSurface 0 0 proc PM_CrashLand 52 4 line 904 ;894:} ;895: ;896: ;897:/* ;898:================= ;899:PM_CrashLand ;900: ;901:Check for hard landings that generate sound events ;902:================= ;903:*/ ;904:static void PM_CrashLand( void ) { line 912 ;905: float delta; ;906: float dist; ;907: float vel, acc; ;908: float t; ;909: float a, b, c, den; ;910: ;911: // decide which landing animation to use ;912: if ( pm->ps->pm_flags & PMF_BACKWARDS_JUMP ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $354 line 913 ;913: PM_ForceLegsAnim( LEGS_LANDB ); CNSTI4 21 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 914 ;914: } else { ADDRGP4 $355 JUMPV LABELV $354 line 915 ;915: PM_ForceLegsAnim( LEGS_LAND ); CNSTI4 19 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 916 ;916: } LABELV $355 line 918 ;917: ;918: pm->ps->legsTimer = TIMER_LAND; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 CNSTI4 130 ASGNI4 line 921 ;919: ;920: // calculate the exact velocity on landing ;921: dist = pm->ps->origin[2] - pml.previous_origin[2]; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ADDRGP4 pml+112+8 INDIRF4 SUBF4 ASGNF4 line 922 ;922: vel = pml.previous_velocity[2]; ADDRLP4 8 ADDRGP4 pml+124+8 INDIRF4 ASGNF4 line 923 ;923: acc = -pm->ps->gravity; ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 48 ADDP4 INDIRI4 NEGI4 CVIF4 4 ASGNF4 line 925 ;924: ;925: a = acc / 2; ADDRLP4 16 ADDRLP4 12 INDIRF4 CNSTF4 1073741824 DIVF4 ASGNF4 line 926 ;926: b = vel; ADDRLP4 4 ADDRLP4 8 INDIRF4 ASGNF4 line 927 ;927: c = -dist; ADDRLP4 32 ADDRLP4 24 INDIRF4 NEGF4 ASGNF4 line 929 ;928: ;929: den = b * b - 4 * a * c; ADDRLP4 20 ADDRLP4 4 INDIRF4 ADDRLP4 4 INDIRF4 MULF4 CNSTF4 1082130432 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 32 INDIRF4 MULF4 SUBF4 ASGNF4 line 930 ;930: if ( den < 0 ) { ADDRLP4 20 INDIRF4 CNSTF4 0 GEF4 $360 line 931 ;931: return; ADDRGP4 $353 JUMPV LABELV $360 line 933 ;932: } ;933: t = (-b - sqrt( den ) ) / ( 2 * a ); ADDRLP4 20 INDIRF4 ARGF4 ADDRLP4 40 ADDRGP4 sqrt CALLF4 ASGNF4 ADDRLP4 28 ADDRLP4 4 INDIRF4 NEGF4 ADDRLP4 40 INDIRF4 SUBF4 CNSTF4 1073741824 ADDRLP4 16 INDIRF4 MULF4 DIVF4 ASGNF4 line 935 ;934: ;935: delta = vel + t * acc; ADDRLP4 0 ADDRLP4 8 INDIRF4 ADDRLP4 28 INDIRF4 ADDRLP4 12 INDIRF4 MULF4 ADDF4 ASGNF4 line 936 ;936: delta = delta*delta * 0.0001; ADDRLP4 0 CNSTF4 953267991 ADDRLP4 0 INDIRF4 ADDRLP4 0 INDIRF4 MULF4 MULF4 ASGNF4 line 939 ;937: ;938: // ducking while falling doubles damage ;939: if ( pm->ps->pm_flags & PMF_DUCKED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $362 line 940 ;940: delta *= 2; ADDRLP4 0 CNSTF4 1073741824 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 line 941 ;941: } LABELV $362 line 944 ;942: ;943: // never take falling damage if completely underwater ;944: if ( pm->waterlevel == 3 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 3 NEI4 $364 line 945 ;945: return; ADDRGP4 $353 JUMPV LABELV $364 line 949 ;946: } ;947: ;948: // reduce falling damage if there is standing water ;949: if ( pm->waterlevel == 2 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 2 NEI4 $366 line 950 ;950: delta *= 0.25; ADDRLP4 0 CNSTF4 1048576000 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 line 951 ;951: } LABELV $366 line 952 ;952: if ( pm->waterlevel == 1 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 NEI4 $368 line 953 ;953: delta *= 0.5; ADDRLP4 0 CNSTF4 1056964608 ADDRLP4 0 INDIRF4 MULF4 ASGNF4 line 954 ;954: } LABELV $368 line 956 ;955: ;956: if ( delta < 1 ) { ADDRLP4 0 INDIRF4 CNSTF4 1065353216 GEF4 $370 line 957 ;957: return; ADDRGP4 $353 JUMPV LABELV $370 line 964 ;958: } ;959: ;960: // create a local entity event to play the sound ;961: ;962: // SURF_NODAMAGE is used for bounce pads where you don't ever ;963: // want to take damage or play a crunch sound ;964: if ( !(pml.groundTrace.surfaceFlags & SURF_NODAMAGE) ) { ADDRGP4 pml+52+44 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 NEI4 $372 line 965 ;965: if ( delta > 60 ) { ADDRLP4 0 INDIRF4 CNSTF4 1114636288 LEF4 $376 line 966 ;966: PM_AddEvent( EV_FALL_FAR ); CNSTI4 12 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 967 ;967: } else if ( delta > 40 ) { ADDRGP4 $377 JUMPV LABELV $376 ADDRLP4 0 INDIRF4 CNSTF4 1109393408 LEF4 $378 line 969 ;968: // this is a pain grunt, so don't play it if dead ;969: if ( pm->ps->stats[STAT_HEALTH] > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 CNSTI4 0 LEI4 $379 line 970 ;970: PM_AddEvent( EV_FALL_MEDIUM ); CNSTI4 11 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 971 ;971: } line 972 ;972: } else if ( delta > 7 ) { ADDRGP4 $379 JUMPV LABELV $378 ADDRLP4 0 INDIRF4 CNSTF4 1088421888 LEF4 $382 line 973 ;973: PM_AddEvent( EV_FALL_SHORT ); CNSTI4 10 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 974 ;974: } else { ADDRGP4 $383 JUMPV LABELV $382 line 975 ;975: PM_AddEvent( PM_FootstepForSurface() ); ADDRLP4 48 ADDRGP4 PM_FootstepForSurface CALLI4 ASGNI4 ADDRLP4 48 INDIRI4 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 976 ;976: } LABELV $383 LABELV $379 LABELV $377 line 977 ;977: } LABELV $372 line 980 ;978: ;979: // start footstep cycle over ;980: pm->ps->bobCycle = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 8 ADDP4 CNSTI4 0 ASGNI4 line 981 ;981:} LABELV $353 endproc PM_CrashLand 52 4 proc PM_CorrectAllSolid 36 28 line 1004 ;982: ;983:/* ;984:============= ;985:PM_CheckStuck ;986:============= ;987:*/ ;988:/* ;989:void PM_CheckStuck(void) { ;990: trace_t trace; ;991: ;992: pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, pm->ps->origin, pm->ps->clientNum, pm->tracemask); ;993: if (trace.allsolid) { ;994: //int shit = qtrue; ;995: } ;996:} ;997:*/ ;998: ;999:/* ;1000:============= ;1001:PM_CorrectAllSolid ;1002:============= ;1003:*/ ;1004:static int PM_CorrectAllSolid( trace_t *trace ) { line 1008 ;1005: int i, j, k; ;1006: vec3_t point; ;1007: ;1008: if ( pm->debugLevel ) { ADDRGP4 pm INDIRP4 CNSTI4 32 ADDP4 INDIRI4 CNSTI4 0 EQI4 $385 line 1009 ;1009: Com_Printf("%i:allsolid\n", c_pmove); ADDRGP4 $387 ARGP4 ADDRGP4 c_pmove INDIRI4 ARGI4 ADDRGP4 Com_Printf CALLV pop line 1010 ;1010: } LABELV $385 line 1013 ;1011: ;1012: // jitter around ;1013: for (i = -1; i <= 1; i++) { ADDRLP4 20 CNSTI4 -1 ASGNI4 LABELV $388 line 1014 ;1014: for (j = -1; j <= 1; j++) { ADDRLP4 16 CNSTI4 -1 ASGNI4 LABELV $392 line 1015 ;1015: for (k = -1; k <= 1; k++) { ADDRLP4 12 CNSTI4 -1 ASGNI4 LABELV $396 line 1016 ;1016: VectorCopy(pm->ps->origin, point); ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1017 ;1017: point[0] += (float) i; ADDRLP4 0 ADDRLP4 0 INDIRF4 ADDRLP4 20 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 1018 ;1018: point[1] += (float) j; ADDRLP4 0+4 ADDRLP4 0+4 INDIRF4 ADDRLP4 16 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 1019 ;1019: point[2] += (float) k; ADDRLP4 0+8 ADDRLP4 0+8 INDIRF4 ADDRLP4 12 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 1020 ;1020: pm->trace (trace, point, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 24 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 24 INDIRP4 CNSTI4 180 ADDP4 ARGP4 ADDRLP4 24 INDIRP4 CNSTI4 192 ADDP4 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 24 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 24 INDIRP4 CNSTI4 28 ADDP4 INDIRI4 ARGI4 ADDRLP4 24 INDIRP4 CNSTI4 224 ADDP4 INDIRP4 CALLV pop line 1021 ;1021: if ( !trace->allsolid ) { ADDRFP4 0 INDIRP4 INDIRI4 CNSTI4 0 NEI4 $402 line 1022 ;1022: point[0] = pm->ps->origin[0]; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ASGNF4 line 1023 ;1023: point[1] = pm->ps->origin[1]; ADDRLP4 0+4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ASGNF4 line 1024 ;1024: point[2] = pm->ps->origin[2] - 0.25; ADDRLP4 0+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 1048576000 SUBF4 ASGNF4 line 1026 ;1025: ;1026: pm->trace (trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 28 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 32 ADDRLP4 28 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 32 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 28 INDIRP4 CNSTI4 180 ADDP4 ARGP4 ADDRLP4 28 INDIRP4 CNSTI4 192 ADDP4 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 32 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 28 INDIRP4 CNSTI4 28 ADDP4 INDIRI4 ARGI4 ADDRLP4 28 INDIRP4 CNSTI4 224 ADDP4 INDIRP4 CALLV pop line 1027 ;1027: pml.groundTrace = *trace; ADDRGP4 pml+52 ADDRFP4 0 INDIRP4 INDIRB ASGNB 56 line 1028 ;1028: return qtrue; CNSTI4 1 RETI4 ADDRGP4 $384 JUMPV LABELV $402 line 1030 ;1029: } ;1030: } LABELV $397 line 1015 ADDRLP4 12 ADDRLP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 1 LEI4 $396 line 1031 ;1031: } LABELV $393 line 1014 ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 16 INDIRI4 CNSTI4 1 LEI4 $392 line 1032 ;1032: } LABELV $389 line 1013 ADDRLP4 20 ADDRLP4 20 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 20 INDIRI4 CNSTI4 1 LEI4 $388 line 1034 ;1033: ;1034: pm->ps->groundEntityNum = ENTITYNUM_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 CNSTI4 1023 ASGNI4 line 1035 ;1035: pml.groundPlane = qfalse; ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 1036 ;1036: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 1038 ;1037: ;1038: return qfalse; CNSTI4 0 RETI4 LABELV $384 endproc PM_CorrectAllSolid 36 28 proc PM_GroundTraceMissed 80 28 line 1049 ;1039:} ;1040: ;1041: ;1042:/* ;1043:============= ;1044:PM_GroundTraceMissed ;1045: ;1046:The ground trace didn't hit a surface, so we are in freefall ;1047:============= ;1048:*/ ;1049:static void PM_GroundTraceMissed( void ) { line 1053 ;1050: trace_t trace; ;1051: vec3_t point; ;1052: ;1053: if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 INDIRI4 CNSTI4 1023 EQI4 $410 line 1055 ;1054: // we just transitioned into freefall ;1055: if ( pm->debugLevel ) { ADDRGP4 pm INDIRP4 CNSTI4 32 ADDP4 INDIRI4 CNSTI4 0 EQI4 $412 line 1056 ;1056: Com_Printf("%i:lift\n", c_pmove); ADDRGP4 $414 ARGP4 ADDRGP4 c_pmove INDIRI4 ARGI4 ADDRGP4 Com_Printf CALLV pop line 1057 ;1057: } LABELV $412 line 1061 ;1058: ;1059: // if they aren't in a jumping animation and the ground is a ways away, force into it ;1060: // if we didn't do the trace, the player would be backflipping down staircases ;1061: VectorCopy( pm->ps->origin, point ); ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1062 ;1062: point[2] -= 64; ADDRLP4 0+8 ADDRLP4 0+8 INDIRF4 CNSTF4 1115684864 SUBF4 ASGNF4 line 1064 ;1063: ;1064: pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask); ADDRLP4 12 ARGP4 ADDRLP4 68 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 72 ADDRLP4 68 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 72 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 68 INDIRP4 CNSTI4 180 ADDP4 ARGP4 ADDRLP4 68 INDIRP4 CNSTI4 192 ADDP4 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 72 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 68 INDIRP4 CNSTI4 28 ADDP4 INDIRI4 ARGI4 ADDRLP4 68 INDIRP4 CNSTI4 224 ADDP4 INDIRP4 CALLV pop line 1065 ;1065: if ( trace.fraction == 1.0 ) { ADDRLP4 12+8 INDIRF4 CNSTF4 1065353216 NEF4 $416 line 1066 ;1066: if ( pm->cmd.forwardmove >= 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 LTI4 $419 line 1067 ;1067: PM_ForceLegsAnim( LEGS_JUMP ); CNSTI4 18 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 1068 ;1068: pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP; ADDRLP4 76 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 76 INDIRP4 ADDRLP4 76 INDIRP4 INDIRI4 CNSTI4 -9 BANDI4 ASGNI4 line 1069 ;1069: } else { ADDRGP4 $420 JUMPV LABELV $419 line 1070 ;1070: PM_ForceLegsAnim( LEGS_JUMPB ); CNSTI4 20 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 1071 ;1071: pm->ps->pm_flags |= PMF_BACKWARDS_JUMP; ADDRLP4 76 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 76 INDIRP4 ADDRLP4 76 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1072 ;1072: } LABELV $420 line 1073 ;1073: } LABELV $416 line 1074 ;1074: } LABELV $410 line 1076 ;1075: ;1076: pm->ps->groundEntityNum = ENTITYNUM_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 CNSTI4 1023 ASGNI4 line 1077 ;1077: pml.groundPlane = qfalse; ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 1078 ;1078: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 1079 ;1079:} LABELV $409 endproc PM_GroundTraceMissed 80 28 proc PM_GroundTrace 88 28 line 1087 ;1080: ;1081: ;1082:/* ;1083:============= ;1084:PM_GroundTrace ;1085:============= ;1086:*/ ;1087:static void PM_GroundTrace( void ) { line 1091 ;1088: vec3_t point; ;1089: trace_t trace; ;1090: ;1091: point[0] = pm->ps->origin[0]; ADDRLP4 56 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ASGNF4 line 1092 ;1092: point[1] = pm->ps->origin[1]; ADDRLP4 56+4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ASGNF4 line 1093 ;1093: point[2] = pm->ps->origin[2] - 0.25; ADDRLP4 56+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 1048576000 SUBF4 ASGNF4 line 1095 ;1094: ;1095: pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask); ADDRLP4 0 ARGP4 ADDRLP4 68 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 72 ADDRLP4 68 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 72 INDIRP4 CNSTI4 20 ADDP4 ARGP4 ADDRLP4 68 INDIRP4 CNSTI4 180 ADDP4 ARGP4 ADDRLP4 68 INDIRP4 CNSTI4 192 ADDP4 ARGP4 ADDRLP4 56 ARGP4 ADDRLP4 72 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 68 INDIRP4 CNSTI4 28 ADDP4 INDIRI4 ARGI4 ADDRLP4 68 INDIRP4 CNSTI4 224 ADDP4 INDIRP4 CALLV pop line 1096 ;1096: pml.groundTrace = trace; ADDRGP4 pml+52 ADDRLP4 0 INDIRB ASGNB 56 line 1099 ;1097: ;1098: // do something corrective if the trace starts in a solid... ;1099: if ( trace.allsolid ) { ADDRLP4 0 INDIRI4 CNSTI4 0 EQI4 $427 line 1100 ;1100: if ( !PM_CorrectAllSolid(&trace) ) ADDRLP4 0 ARGP4 ADDRLP4 76 ADDRGP4 PM_CorrectAllSolid CALLI4 ASGNI4 ADDRLP4 76 INDIRI4 CNSTI4 0 NEI4 $429 line 1101 ;1101: return; ADDRGP4 $423 JUMPV LABELV $429 line 1102 ;1102: } LABELV $427 line 1105 ;1103: ;1104: // if the trace didn't hit anything, we are in free fall ;1105: if ( trace.fraction == 1.0 ) { ADDRLP4 0+8 INDIRF4 CNSTF4 1065353216 NEF4 $431 line 1106 ;1106: PM_GroundTraceMissed(); ADDRGP4 PM_GroundTraceMissed CALLV pop line 1107 ;1107: pml.groundPlane = qfalse; ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 1108 ;1108: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 1109 ;1109: return; ADDRGP4 $423 JUMPV LABELV $431 line 1113 ;1110: } ;1111: ;1112: // check if getting thrown off the ground ;1113: if ( pm->ps->velocity[2] > 0 && DotProduct( pm->ps->velocity, trace.plane.normal ) > 10 ) { ADDRLP4 76 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 80 ADDRLP4 76 INDIRP4 CNSTI4 40 ADDP4 INDIRF4 ASGNF4 ADDRLP4 80 INDIRF4 CNSTF4 0 LEF4 $436 ADDRLP4 76 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ADDRLP4 0+24 INDIRF4 MULF4 ADDRLP4 76 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ADDRLP4 0+24+4 INDIRF4 MULF4 ADDF4 ADDRLP4 80 INDIRF4 ADDRLP4 0+24+8 INDIRF4 MULF4 ADDF4 CNSTF4 1092616192 LEF4 $436 line 1114 ;1114: if ( pm->debugLevel ) { ADDRGP4 pm INDIRP4 CNSTI4 32 ADDP4 INDIRI4 CNSTI4 0 EQI4 $443 line 1115 ;1115: Com_Printf("%i:kickoff\n", c_pmove); ADDRGP4 $445 ARGP4 ADDRGP4 c_pmove INDIRI4 ARGI4 ADDRGP4 Com_Printf CALLV pop line 1116 ;1116: } LABELV $443 line 1118 ;1117: // go into jump animation ;1118: if ( pm->cmd.forwardmove >= 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 LTI4 $446 line 1119 ;1119: PM_ForceLegsAnim( LEGS_JUMP ); CNSTI4 18 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 1120 ;1120: pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP; ADDRLP4 84 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 84 INDIRP4 ADDRLP4 84 INDIRP4 INDIRI4 CNSTI4 -9 BANDI4 ASGNI4 line 1121 ;1121: } else { ADDRGP4 $447 JUMPV LABELV $446 line 1122 ;1122: PM_ForceLegsAnim( LEGS_JUMPB ); CNSTI4 20 ARGI4 ADDRGP4 PM_ForceLegsAnim CALLV pop line 1123 ;1123: pm->ps->pm_flags |= PMF_BACKWARDS_JUMP; ADDRLP4 84 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 84 INDIRP4 ADDRLP4 84 INDIRP4 INDIRI4 CNSTI4 8 BORI4 ASGNI4 line 1124 ;1124: } LABELV $447 line 1126 ;1125: ;1126: pm->ps->groundEntityNum = ENTITYNUM_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 CNSTI4 1023 ASGNI4 line 1127 ;1127: pml.groundPlane = qfalse; ADDRGP4 pml+48 CNSTI4 0 ASGNI4 line 1128 ;1128: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 1129 ;1129: return; ADDRGP4 $423 JUMPV LABELV $436 line 1133 ;1130: } ;1131: ;1132: // slopes that are too steep will not be considered onground ;1133: if ( trace.plane.normal[2] < MIN_WALK_NORMAL ) { ADDRLP4 0+24+8 INDIRF4 CNSTF4 1060320051 GEF4 $450 line 1134 ;1134: if ( pm->debugLevel ) { ADDRGP4 pm INDIRP4 CNSTI4 32 ADDP4 INDIRI4 CNSTI4 0 EQI4 $454 line 1135 ;1135: Com_Printf("%i:steep\n", c_pmove); ADDRGP4 $456 ARGP4 ADDRGP4 c_pmove INDIRI4 ARGI4 ADDRGP4 Com_Printf CALLV pop line 1136 ;1136: } LABELV $454 line 1139 ;1137: // FIXME: if they can't slide down the slope, let them ;1138: // walk (sharp crevices) ;1139: pm->ps->groundEntityNum = ENTITYNUM_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 CNSTI4 1023 ASGNI4 line 1140 ;1140: pml.groundPlane = qtrue; ADDRGP4 pml+48 CNSTI4 1 ASGNI4 line 1141 ;1141: pml.walking = qfalse; ADDRGP4 pml+44 CNSTI4 0 ASGNI4 line 1142 ;1142: return; ADDRGP4 $423 JUMPV LABELV $450 line 1145 ;1143: } ;1144: ;1145: pml.groundPlane = qtrue; ADDRGP4 pml+48 CNSTI4 1 ASGNI4 line 1146 ;1146: pml.walking = qtrue; ADDRGP4 pml+44 CNSTI4 1 ASGNI4 line 1149 ;1147: ;1148: // hitting solid ground will end a waterjump ;1149: if (pm->ps->pm_flags & PMF_TIME_WATERJUMP) ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 256 BANDI4 CNSTI4 0 EQI4 $461 line 1150 ;1150: { line 1151 ;1151: pm->ps->pm_flags &= ~(PMF_TIME_WATERJUMP | PMF_TIME_LAND); ADDRLP4 84 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 84 INDIRP4 ADDRLP4 84 INDIRP4 INDIRI4 CNSTI4 -289 BANDI4 ASGNI4 line 1152 ;1152: pm->ps->pm_time = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 0 ASGNI4 line 1153 ;1153: } LABELV $461 line 1155 ;1154: ;1155: if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 INDIRI4 CNSTI4 1023 NEI4 $463 line 1157 ;1156: // just hit the ground ;1157: if ( pm->debugLevel ) { ADDRGP4 pm INDIRP4 CNSTI4 32 ADDP4 INDIRI4 CNSTI4 0 EQI4 $465 line 1158 ;1158: Com_Printf("%i:Land\n", c_pmove); ADDRGP4 $467 ARGP4 ADDRGP4 c_pmove INDIRI4 ARGI4 ADDRGP4 Com_Printf CALLV pop line 1159 ;1159: } LABELV $465 line 1161 ;1160: ;1161: PM_CrashLand(); ADDRGP4 PM_CrashLand CALLV pop line 1164 ;1162: ;1163: // don't do landing time if we were just going down a slope ;1164: if ( pml.previous_velocity[2] < -200 ) { ADDRGP4 pml+124+8 INDIRF4 CNSTF4 3276275712 GEF4 $468 line 1166 ;1165: // don't allow another jump for a little while ;1166: pm->ps->pm_flags |= PMF_TIME_LAND; ADDRLP4 84 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 84 INDIRP4 ADDRLP4 84 INDIRP4 INDIRI4 CNSTI4 32 BORI4 ASGNI4 line 1167 ;1167: pm->ps->pm_time = 250; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 250 ASGNI4 line 1168 ;1168: } LABELV $468 line 1169 ;1169: } LABELV $463 line 1171 ;1170: ;1171: pm->ps->groundEntityNum = trace.entityNum; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 ADDRLP4 0+52 INDIRI4 ASGNI4 line 1176 ;1172: ;1173: // don't reset the z velocity for slopes ;1174:// pm->ps->velocity[2] = 0; ;1175: ;1176: PM_AddTouchEnt( trace.entityNum ); ADDRLP4 0+52 INDIRI4 ARGI4 ADDRGP4 PM_AddTouchEnt CALLV pop line 1177 ;1177:} LABELV $423 endproc PM_GroundTrace 88 28 proc PM_SetWaterLevel 48 8 line 1185 ;1178: ;1179: ;1180:/* ;1181:============= ;1182:PM_SetWaterLevel FIXME: avoid this twice? certainly if not moving ;1183:============= ;1184:*/ ;1185:static void PM_SetWaterLevel( void ) { line 1194 ;1186: vec3_t point; ;1187: int cont; ;1188: int sample1; ;1189: int sample2; ;1190: ;1191: // ;1192: // get waterlevel, accounting for ducking ;1193: // ;1194: pm->waterlevel = 0; ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 CNSTI4 0 ASGNI4 line 1195 ;1195: pm->watertype = 0; ADDRGP4 pm INDIRP4 CNSTI4 204 ADDP4 CNSTI4 0 ASGNI4 line 1197 ;1196: ;1197: point[0] = pm->ps->origin[0]; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRF4 ASGNF4 line 1198 ;1198: point[1] = pm->ps->origin[1]; ADDRLP4 0+4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 ASGNF4 line 1199 ;1199: point[2] = pm->ps->origin[2] + MINS_Z + 1; ADDRLP4 0+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 3250585600 ADDF4 CNSTF4 1065353216 ADDF4 ASGNF4 line 1200 ;1200: cont = pm->pointcontents( point, pm->ps->clientNum ); ADDRLP4 0 ARGP4 ADDRLP4 24 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 24 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 28 ADDRLP4 24 INDIRP4 CNSTI4 228 ADDP4 INDIRP4 CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 28 INDIRI4 ASGNI4 line 1202 ;1201: ;1202: if ( cont & MASK_WATER ) { ADDRLP4 12 INDIRI4 CNSTI4 56 BANDI4 CNSTI4 0 EQI4 $477 line 1203 ;1203: sample2 = pm->ps->viewheight - MINS_Z; ADDRLP4 16 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 INDIRI4 CNSTI4 -24 SUBI4 ASGNI4 line 1204 ;1204: sample1 = sample2 / 2; ADDRLP4 20 ADDRLP4 16 INDIRI4 CNSTI4 2 DIVI4 ASGNI4 line 1206 ;1205: ;1206: pm->watertype = cont; ADDRGP4 pm INDIRP4 CNSTI4 204 ADDP4 ADDRLP4 12 INDIRI4 ASGNI4 line 1207 ;1207: pm->waterlevel = 1; ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 CNSTI4 1 ASGNI4 line 1208 ;1208: point[2] = pm->ps->origin[2] + MINS_Z + sample1; ADDRLP4 0+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 3250585600 ADDF4 ADDRLP4 20 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 1209 ;1209: cont = pm->pointcontents (point, pm->ps->clientNum ); ADDRLP4 0 ARGP4 ADDRLP4 32 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 32 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 36 ADDRLP4 32 INDIRP4 CNSTI4 228 ADDP4 INDIRP4 CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 36 INDIRI4 ASGNI4 line 1210 ;1210: if ( cont & MASK_WATER ) { ADDRLP4 12 INDIRI4 CNSTI4 56 BANDI4 CNSTI4 0 EQI4 $480 line 1211 ;1211: pm->waterlevel = 2; ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 CNSTI4 2 ASGNI4 line 1212 ;1212: point[2] = pm->ps->origin[2] + MINS_Z + sample2; ADDRLP4 0+8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 3250585600 ADDF4 ADDRLP4 16 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 1213 ;1213: cont = pm->pointcontents (point, pm->ps->clientNum ); ADDRLP4 0 ARGP4 ADDRLP4 40 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 40 INDIRP4 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 44 ADDRLP4 40 INDIRP4 CNSTI4 228 ADDP4 INDIRP4 CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 44 INDIRI4 ASGNI4 line 1214 ;1214: if ( cont & MASK_WATER ){ ADDRLP4 12 INDIRI4 CNSTI4 56 BANDI4 CNSTI4 0 EQI4 $483 line 1215 ;1215: pm->waterlevel = 3; ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 CNSTI4 3 ASGNI4 line 1216 ;1216: } LABELV $483 line 1217 ;1217: } LABELV $480 line 1218 ;1218: } LABELV $477 line 1220 ;1219: ;1220:} LABELV $474 endproc PM_SetWaterLevel 48 8 proc PM_CheckDuck 76 28 line 1230 ;1221: ;1222:/* ;1223:============== ;1224:PM_CheckDuck ;1225: ;1226:Sets mins, maxs, and pm->ps->viewheight ;1227:============== ;1228:*/ ;1229:static void PM_CheckDuck (void) ;1230:{ line 1233 ;1231: trace_t trace; ;1232: ;1233: if ( pm->ps->powerups[PW_INVULNERABILITY] ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 368 ADDP4 INDIRI4 CNSTI4 0 EQI4 $486 line 1234 ;1234: if ( pm->ps->pm_flags & PMF_INVULEXPAND ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 16384 BANDI4 CNSTI4 0 EQI4 $488 line 1236 ;1235: // invulnerability sphere has a 42 units radius ;1236: VectorSet( pm->mins, -42, -42, -42 ); ADDRGP4 pm INDIRP4 CNSTI4 180 ADDP4 CNSTF4 3257401344 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 184 ADDP4 CNSTF4 3257401344 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 188 ADDP4 CNSTF4 3257401344 ASGNF4 line 1237 ;1237: VectorSet( pm->maxs, 42, 42, 42 ); ADDRGP4 pm INDIRP4 CNSTI4 192 ADDP4 CNSTF4 1109917696 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 196 ADDP4 CNSTF4 1109917696 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 1109917696 ASGNF4 line 1238 ;1238: } ADDRGP4 $489 JUMPV LABELV $488 line 1239 ;1239: else { line 1240 ;1240: VectorSet( pm->mins, -15, -15, MINS_Z ); ADDRGP4 pm INDIRP4 CNSTI4 180 ADDP4 CNSTF4 3245342720 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 184 ADDP4 CNSTF4 3245342720 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 188 ADDP4 CNSTF4 3250585600 ASGNF4 line 1241 ;1241: VectorSet( pm->maxs, 15, 15, 16 ); ADDRGP4 pm INDIRP4 CNSTI4 192 ADDP4 CNSTF4 1097859072 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 196 ADDP4 CNSTF4 1097859072 ASGNF4 ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 1098907648 ASGNF4 line 1242 ;1242: } LABELV $489 line 1243 ;1243: pm->ps->pm_flags |= PMF_DUCKED; ADDRLP4 56 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 56 INDIRP4 ADDRLP4 56 INDIRP4 INDIRI4 CNSTI4 1 BORI4 ASGNI4 line 1244 ;1244: pm->ps->viewheight = CROUCH_VIEWHEIGHT; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 CNSTI4 12 ASGNI4 line 1245 ;1245: return; ADDRGP4 $485 JUMPV LABELV $486 line 1247 ;1246: } ;1247: pm->ps->pm_flags &= ~PMF_INVULEXPAND; ADDRLP4 56 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 56 INDIRP4 ADDRLP4 56 INDIRP4 INDIRI4 CNSTI4 -16385 BANDI4 ASGNI4 line 1249 ;1248: ;1249: pm->mins[0] = -15; ADDRGP4 pm INDIRP4 CNSTI4 180 ADDP4 CNSTF4 3245342720 ASGNF4 line 1250 ;1250: pm->mins[1] = -15; ADDRGP4 pm INDIRP4 CNSTI4 184 ADDP4 CNSTF4 3245342720 ASGNF4 line 1252 ;1251: ;1252: pm->maxs[0] = 15; ADDRGP4 pm INDIRP4 CNSTI4 192 ADDP4 CNSTF4 1097859072 ASGNF4 line 1253 ;1253: pm->maxs[1] = 15; ADDRGP4 pm INDIRP4 CNSTI4 196 ADDP4 CNSTF4 1097859072 ASGNF4 line 1255 ;1254: ;1255: pm->mins[2] = MINS_Z; ADDRGP4 pm INDIRP4 CNSTI4 188 ADDP4 CNSTF4 3250585600 ASGNF4 line 1257 ;1256: ;1257: if (pm->ps->pm_type == PM_DEAD) ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 3 NEI4 $490 line 1258 ;1258: { line 1259 ;1259: pm->maxs[2] = -8; ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 3238002688 ASGNF4 line 1260 ;1260: pm->ps->viewheight = DEAD_VIEWHEIGHT; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 CNSTI4 -16 ASGNI4 line 1261 ;1261: return; ADDRGP4 $485 JUMPV LABELV $490 line 1264 ;1262: } ;1263: ;1264: if (pm->cmd.upmove < 0) ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 GEI4 $492 line 1265 ;1265: { // duck line 1266 ;1266: pm->ps->pm_flags |= PMF_DUCKED; ADDRLP4 60 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 60 INDIRP4 ADDRLP4 60 INDIRP4 INDIRI4 CNSTI4 1 BORI4 ASGNI4 line 1267 ;1267: } ADDRGP4 $493 JUMPV LABELV $492 line 1269 ;1268: else ;1269: { // stand up if possible line 1270 ;1270: if (pm->ps->pm_flags & PMF_DUCKED) ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $494 line 1271 ;1271: { line 1273 ;1272: // try to stand up ;1273: pm->maxs[2] = 32; ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 1107296256 ASGNF4 line 1274 ;1274: pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, pm->ps->origin, pm->ps->clientNum, pm->tracemask ); ADDRLP4 0 ARGP4 ADDRLP4 60 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 64 ADDRLP4 60 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 68 ADDRLP4 64 INDIRP4 CNSTI4 20 ADDP4 ASGNP4 ADDRLP4 68 INDIRP4 ARGP4 ADDRLP4 60 INDIRP4 CNSTI4 180 ADDP4 ARGP4 ADDRLP4 60 INDIRP4 CNSTI4 192 ADDP4 ARGP4 ADDRLP4 68 INDIRP4 ARGP4 ADDRLP4 64 INDIRP4 CNSTI4 140 ADDP4 INDIRI4 ARGI4 ADDRLP4 60 INDIRP4 CNSTI4 28 ADDP4 INDIRI4 ARGI4 ADDRLP4 60 INDIRP4 CNSTI4 224 ADDP4 INDIRP4 CALLV pop line 1275 ;1275: if (!trace.allsolid) ADDRLP4 0 INDIRI4 CNSTI4 0 NEI4 $496 line 1276 ;1276: pm->ps->pm_flags &= ~PMF_DUCKED; ADDRLP4 72 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 72 INDIRP4 ADDRLP4 72 INDIRP4 INDIRI4 CNSTI4 -2 BANDI4 ASGNI4 LABELV $496 line 1277 ;1277: } LABELV $494 line 1278 ;1278: } LABELV $493 line 1280 ;1279: ;1280: if (pm->ps->pm_flags & PMF_DUCKED) ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $498 line 1281 ;1281: { line 1282 ;1282: pm->maxs[2] = 16; ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 1098907648 ASGNF4 line 1283 ;1283: pm->ps->viewheight = CROUCH_VIEWHEIGHT; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 CNSTI4 12 ASGNI4 line 1284 ;1284: } ADDRGP4 $499 JUMPV LABELV $498 line 1286 ;1285: else ;1286: { line 1287 ;1287: pm->maxs[2] = 32; ADDRGP4 pm INDIRP4 CNSTI4 200 ADDP4 CNSTF4 1107296256 ASGNF4 line 1288 ;1288: pm->ps->viewheight = DEFAULT_VIEWHEIGHT; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 164 ADDP4 CNSTI4 26 ASGNI4 line 1289 ;1289: } LABELV $499 line 1290 ;1290:} LABELV $485 endproc PM_CheckDuck 76 28 proc PM_Footsteps 52 4 line 1302 ;1291: ;1292: ;1293: ;1294://=================================================================== ;1295: ;1296: ;1297:/* ;1298:=============== ;1299:PM_Footsteps ;1300:=============== ;1301:*/ ;1302:static void PM_Footsteps( void ) { line 1311 ;1303: float bobmove; ;1304: int old; ;1305: qboolean footstep; ;1306: ;1307: // ;1308: // calculate speed and cycle to be used for ;1309: // all cyclic walking effects ;1310: // ;1311: pm->xyspeed = sqrt( pm->ps->velocity[0] * pm->ps->velocity[0] ADDRLP4 12 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 16 ADDRLP4 12 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 20 ADDRLP4 16 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 ASGNF4 ADDRLP4 24 ADDRLP4 16 INDIRP4 CNSTI4 36 ADDP4 INDIRF4 ASGNF4 ADDRLP4 20 INDIRF4 ADDRLP4 20 INDIRF4 MULF4 ADDRLP4 24 INDIRF4 ADDRLP4 24 INDIRF4 MULF4 ADDF4 ARGF4 ADDRLP4 28 ADDRGP4 sqrt CALLF4 ASGNF4 ADDRLP4 12 INDIRP4 CNSTI4 212 ADDP4 ADDRLP4 28 INDIRF4 ASGNF4 line 1314 ;1312: + pm->ps->velocity[1] * pm->ps->velocity[1] ); ;1313: ;1314: if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 68 ADDP4 INDIRI4 CNSTI4 1023 NEI4 $501 line 1316 ;1315: ;1316: if ( pm->ps->powerups[PW_INVULNERABILITY] ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 368 ADDP4 INDIRI4 CNSTI4 0 EQI4 $503 line 1317 ;1317: PM_ContinueLegsAnim( LEGS_IDLECR ); CNSTI4 23 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1318 ;1318: } LABELV $503 line 1320 ;1319: // airborne leaves position in cycle intact, but doesn't advance ;1320: if ( pm->waterlevel > 1 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 LEI4 $500 line 1321 ;1321: PM_ContinueLegsAnim( LEGS_SWIM ); CNSTI4 17 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1322 ;1322: } line 1323 ;1323: return; ADDRGP4 $500 JUMPV LABELV $501 line 1327 ;1324: } ;1325: ;1326: // if not trying to move ;1327: if ( !pm->cmd.forwardmove && !pm->cmd.rightmove ) { ADDRLP4 32 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 36 CNSTI4 0 ASGNI4 ADDRLP4 32 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ADDRLP4 36 INDIRI4 NEI4 $507 ADDRLP4 32 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 36 INDIRI4 NEI4 $507 line 1328 ;1328: if ( pm->xyspeed < 5 ) { ADDRGP4 pm INDIRP4 CNSTI4 212 ADDP4 INDIRF4 CNSTF4 1084227584 GEF4 $500 line 1329 ;1329: pm->ps->bobCycle = 0; // start at beginning of cycle again ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 8 ADDP4 CNSTI4 0 ASGNI4 line 1330 ;1330: if ( pm->ps->pm_flags & PMF_DUCKED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $511 line 1331 ;1331: PM_ContinueLegsAnim( LEGS_IDLECR ); CNSTI4 23 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1332 ;1332: } else { ADDRGP4 $500 JUMPV LABELV $511 line 1333 ;1333: PM_ContinueLegsAnim( LEGS_IDLE ); CNSTI4 22 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1334 ;1334: } line 1335 ;1335: } line 1336 ;1336: return; ADDRGP4 $500 JUMPV LABELV $507 line 1340 ;1337: } ;1338: ;1339: ;1340: footstep = qfalse; ADDRLP4 8 CNSTI4 0 ASGNI4 line 1342 ;1341: ;1342: if ( pm->ps->pm_flags & PMF_DUCKED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 EQI4 $513 line 1343 ;1343: bobmove = 0.5; // ducked characters bob much faster ADDRLP4 4 CNSTF4 1056964608 ASGNF4 line 1344 ;1344: if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 16 BANDI4 CNSTI4 0 EQI4 $515 line 1345 ;1345: PM_ContinueLegsAnim( LEGS_BACKCR ); CNSTI4 32 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1346 ;1346: } ADDRGP4 $514 JUMPV LABELV $515 line 1347 ;1347: else { line 1348 ;1348: PM_ContinueLegsAnim( LEGS_WALKCR ); CNSTI4 13 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1349 ;1349: } line 1361 ;1350: // ducked characters never play footsteps ;1351: /* ;1352: } else if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) { ;1353: if ( !( pm->cmd.buttons & BUTTON_WALKING ) ) { ;1354: bobmove = 0.4; // faster speeds bob faster ;1355: footstep = qtrue; ;1356: } else { ;1357: bobmove = 0.3; ;1358: } ;1359: PM_ContinueLegsAnim( LEGS_BACK ); ;1360: */ ;1361: } else { ADDRGP4 $514 JUMPV LABELV $513 line 1362 ;1362: if ( !( pm->cmd.buttons & BUTTON_WALKING ) ) { ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 16 BANDI4 CNSTI4 0 NEI4 $517 line 1363 ;1363: bobmove = 0.4f; // faster speeds bob faster ADDRLP4 4 CNSTF4 1053609165 ASGNF4 line 1364 ;1364: if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 16 BANDI4 CNSTI4 0 EQI4 $519 line 1365 ;1365: PM_ContinueLegsAnim( LEGS_BACK ); CNSTI4 16 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1366 ;1366: } ADDRGP4 $520 JUMPV LABELV $519 line 1367 ;1367: else { line 1368 ;1368: PM_ContinueLegsAnim( LEGS_RUN ); CNSTI4 15 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1369 ;1369: } LABELV $520 line 1370 ;1370: footstep = qtrue; ADDRLP4 8 CNSTI4 1 ASGNI4 line 1371 ;1371: } else { ADDRGP4 $518 JUMPV LABELV $517 line 1372 ;1372: bobmove = 0.3f; // walking bobs slow ADDRLP4 4 CNSTF4 1050253722 ASGNF4 line 1373 ;1373: if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 16 BANDI4 CNSTI4 0 EQI4 $521 line 1374 ;1374: PM_ContinueLegsAnim( LEGS_BACKWALK ); CNSTI4 33 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1375 ;1375: } ADDRGP4 $522 JUMPV LABELV $521 line 1376 ;1376: else { line 1377 ;1377: PM_ContinueLegsAnim( LEGS_WALK ); CNSTI4 14 ARGI4 ADDRGP4 PM_ContinueLegsAnim CALLV pop line 1378 ;1378: } LABELV $522 line 1379 ;1379: } LABELV $518 line 1380 ;1380: } LABELV $514 line 1383 ;1381: ;1382: // check for footstep / splash sounds ;1383: old = pm->ps->bobCycle; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 8 ADDP4 INDIRI4 ASGNI4 line 1384 ;1384: pm->ps->bobCycle = (int)( old + bobmove * pml.msec ) & 255; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 8 ADDP4 ADDRLP4 0 INDIRI4 CVIF4 4 ADDRLP4 4 INDIRF4 ADDRGP4 pml+40 INDIRI4 CVIF4 4 MULF4 ADDF4 CVFI4 4 CNSTI4 255 BANDI4 ASGNI4 line 1387 ;1385: ;1386: // if we just crossed a cycle boundary, play an apropriate footstep event ;1387: if ( ( ( old + 64 ) ^ ( pm->ps->bobCycle + 64 ) ) & 128 ) { ADDRLP4 40 CNSTI4 64 ASGNI4 ADDRLP4 0 INDIRI4 ADDRLP4 40 INDIRI4 ADDI4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 8 ADDP4 INDIRI4 ADDRLP4 40 INDIRI4 ADDI4 BXORI4 CNSTI4 128 BANDI4 CNSTI4 0 EQI4 $524 line 1388 ;1388: if ( pm->waterlevel == 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 0 NEI4 $526 line 1390 ;1389: // on ground will only play sounds if running ;1390: if ( footstep && !pm->noFootsteps ) { ADDRLP4 44 CNSTI4 0 ASGNI4 ADDRLP4 8 INDIRI4 ADDRLP4 44 INDIRI4 EQI4 $527 ADDRGP4 pm INDIRP4 CNSTI4 36 ADDP4 INDIRI4 ADDRLP4 44 INDIRI4 NEI4 $527 line 1391 ;1391: PM_AddEvent( PM_FootstepForSurface() ); ADDRLP4 48 ADDRGP4 PM_FootstepForSurface CALLI4 ASGNI4 ADDRLP4 48 INDIRI4 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1392 ;1392: } line 1393 ;1393: } else if ( pm->waterlevel == 1 ) { ADDRGP4 $527 JUMPV LABELV $526 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 NEI4 $530 line 1395 ;1394: // splashing ;1395: PM_AddEvent( EV_FOOTSPLASH ); CNSTI4 3 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1396 ;1396: } else if ( pm->waterlevel == 2 ) { ADDRGP4 $531 JUMPV LABELV $530 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 2 NEI4 $532 line 1398 ;1397: // wading / swimming at surface ;1398: PM_AddEvent( EV_SWIM ); CNSTI4 5 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1399 ;1399: } else if ( pm->waterlevel == 3 ) { ADDRGP4 $533 JUMPV LABELV $532 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 3 NEI4 $534 line 1402 ;1400: // no sound when completely underwater ;1401: ;1402: } LABELV $534 LABELV $533 LABELV $531 LABELV $527 line 1403 ;1403: } LABELV $524 line 1404 ;1404:} LABELV $500 endproc PM_Footsteps 52 4 proc PM_WaterEvents 16 4 line 1413 ;1405: ;1406:/* ;1407:============== ;1408:PM_WaterEvents ;1409: ;1410:Generate sound events for entering and leaving water ;1411:============== ;1412:*/ ;1413:static void PM_WaterEvents( void ) { // FIXME? line 1417 ;1414: // ;1415: // if just entered a water volume, play a sound ;1416: // ;1417: if (!pml.previous_waterlevel && pm->waterlevel) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 pml+136 INDIRI4 ADDRLP4 0 INDIRI4 NEI4 $537 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 ADDRLP4 0 INDIRI4 EQI4 $537 line 1418 ;1418: PM_AddEvent( EV_WATER_TOUCH ); CNSTI4 15 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1419 ;1419: } LABELV $537 line 1424 ;1420: ;1421: // ;1422: // if just completely exited a water volume, play a sound ;1423: // ;1424: if (pml.previous_waterlevel && !pm->waterlevel) { ADDRLP4 4 CNSTI4 0 ASGNI4 ADDRGP4 pml+136 INDIRI4 ADDRLP4 4 INDIRI4 EQI4 $540 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 ADDRLP4 4 INDIRI4 NEI4 $540 line 1425 ;1425: PM_AddEvent( EV_WATER_LEAVE ); CNSTI4 16 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1426 ;1426: } LABELV $540 line 1431 ;1427: ;1428: // ;1429: // check for head just going under water ;1430: // ;1431: if (pml.previous_waterlevel != 3 && pm->waterlevel == 3) { ADDRLP4 8 CNSTI4 3 ASGNI4 ADDRGP4 pml+136 INDIRI4 ADDRLP4 8 INDIRI4 EQI4 $543 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 ADDRLP4 8 INDIRI4 NEI4 $543 line 1432 ;1432: PM_AddEvent( EV_WATER_UNDER ); CNSTI4 17 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1433 ;1433: } LABELV $543 line 1438 ;1434: ;1435: // ;1436: // check for head just coming out of water ;1437: // ;1438: if (pml.previous_waterlevel == 3 && pm->waterlevel != 3) { ADDRLP4 12 CNSTI4 3 ASGNI4 ADDRGP4 pml+136 INDIRI4 ADDRLP4 12 INDIRI4 NEI4 $546 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 ADDRLP4 12 INDIRI4 EQI4 $546 line 1439 ;1439: PM_AddEvent( EV_WATER_CLEAR ); CNSTI4 18 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1440 ;1440: } LABELV $546 line 1441 ;1441:} LABELV $536 endproc PM_WaterEvents 16 4 proc PM_BeginWeaponChange 8 4 line 1449 ;1442: ;1443: ;1444:/* ;1445:=============== ;1446:PM_BeginWeaponChange ;1447:=============== ;1448:*/ ;1449:static void PM_BeginWeaponChange( int weapon ) { line 1450 ;1450: if ( weapon <= WP_NONE || weapon >= WP_NUM_WEAPONS ) { ADDRLP4 0 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 0 LEI4 $552 ADDRLP4 0 INDIRI4 CNSTI4 11 LTI4 $550 LABELV $552 line 1451 ;1451: return; ADDRGP4 $549 JUMPV LABELV $550 line 1454 ;1452: } ;1453: ;1454: if ( !( pm->ps->stats[STAT_WEAPONS] & ( 1 << weapon ) ) ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 192 ADDP4 INDIRI4 CNSTI4 1 ADDRFP4 0 INDIRI4 LSHI4 BANDI4 CNSTI4 0 NEI4 $553 line 1455 ;1455: return; ADDRGP4 $549 JUMPV LABELV $553 line 1458 ;1456: } ;1457: ;1458: if ( pm->ps->weaponstate == WEAPON_DROPPING ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 NEI4 $555 line 1459 ;1459: return; ADDRGP4 $549 JUMPV LABELV $555 line 1462 ;1460: } ;1461: ;1462: PM_AddEvent( EV_CHANGE_WEAPON ); CNSTI4 22 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1463 ;1463: pm->ps->weaponstate = WEAPON_DROPPING; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 2 ASGNI4 line 1464 ;1464: pm->ps->weaponTime += 200; ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 200 ADDI4 ASGNI4 line 1465 ;1465: PM_StartTorsoAnim( TORSO_DROP ); CNSTI4 9 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1466 ;1466:} LABELV $549 endproc PM_BeginWeaponChange 8 4 proc PM_FinishWeaponChange 12 4 line 1474 ;1467: ;1468: ;1469:/* ;1470:=============== ;1471:PM_FinishWeaponChange ;1472:=============== ;1473:*/ ;1474:static void PM_FinishWeaponChange( void ) { line 1477 ;1475: int weapon; ;1476: ;1477: weapon = pm->cmd.weapon; ADDRLP4 0 ADDRGP4 pm INDIRP4 CNSTI4 24 ADDP4 INDIRU1 CVUI4 1 ASGNI4 line 1478 ;1478: if ( weapon < WP_NONE || weapon >= WP_NUM_WEAPONS ) { ADDRLP4 0 INDIRI4 CNSTI4 0 LTI4 $560 ADDRLP4 0 INDIRI4 CNSTI4 11 LTI4 $558 LABELV $560 line 1479 ;1479: weapon = WP_NONE; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1480 ;1480: } LABELV $558 line 1482 ;1481: ;1482: if ( !( pm->ps->stats[STAT_WEAPONS] & ( 1 << weapon ) ) ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 192 ADDP4 INDIRI4 CNSTI4 1 ADDRLP4 0 INDIRI4 LSHI4 BANDI4 CNSTI4 0 NEI4 $561 line 1483 ;1483: weapon = WP_NONE; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1484 ;1484: } LABELV $561 line 1486 ;1485: ;1486: pm->ps->weapon = weapon; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 ADDRLP4 0 INDIRI4 ASGNI4 line 1487 ;1487: pm->ps->weaponstate = WEAPON_RAISING; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 1 ASGNI4 line 1488 ;1488: pm->ps->weaponTime += 250; ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 250 ADDI4 ASGNI4 line 1489 ;1489: PM_StartTorsoAnim( TORSO_RAISE ); CNSTI4 10 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1490 ;1490:} LABELV $557 endproc PM_FinishWeaponChange 12 4 proc PM_TorsoAnimation 0 4 line 1499 ;1491: ;1492: ;1493:/* ;1494:============== ;1495:PM_TorsoAnimation ;1496: ;1497:============== ;1498:*/ ;1499:static void PM_TorsoAnimation( void ) { line 1500 ;1500: if ( pm->ps->weaponstate == WEAPON_READY ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 0 NEI4 $564 line 1501 ;1501: if ( pm->ps->weapon == WP_GAUNTLET ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 1 NEI4 $566 line 1502 ;1502: PM_ContinueTorsoAnim( TORSO_STAND2 ); CNSTI4 12 ARGI4 ADDRGP4 PM_ContinueTorsoAnim CALLV pop line 1503 ;1503: } else { ADDRGP4 $563 JUMPV LABELV $566 line 1504 ;1504: PM_ContinueTorsoAnim( TORSO_STAND ); CNSTI4 11 ARGI4 ADDRGP4 PM_ContinueTorsoAnim CALLV pop line 1505 ;1505: } line 1506 ;1506: return; LABELV $564 line 1508 ;1507: } ;1508:} LABELV $563 endproc PM_TorsoAnimation 0 4 proc PM_Weapon 28 4 line 1518 ;1509: ;1510: ;1511:/* ;1512:============== ;1513:PM_Weapon ;1514: ;1515:Generates weapon events and modifes the weapon counter ;1516:============== ;1517:*/ ;1518:static void PM_Weapon( void ) { line 1522 ;1519: int addTime; ;1520: ;1521: // don't allow attack until all buttons are up ;1522: if ( pm->ps->pm_flags & PMF_RESPAWNED ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 512 BANDI4 CNSTI4 0 EQI4 $569 line 1523 ;1523: return; ADDRGP4 $568 JUMPV LABELV $569 line 1527 ;1524: } ;1525: ;1526: // ignore if spectator ;1527: if ( pm->ps->persistant[PERS_TEAM] == TEAM_SPECTATOR ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 260 ADDP4 INDIRI4 CNSTI4 3 NEI4 $571 line 1528 ;1528: return; ADDRGP4 $568 JUMPV LABELV $571 line 1532 ;1529: } ;1530: ;1531: // check for dead player ;1532: if ( pm->ps->stats[STAT_HEALTH] <= 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 CNSTI4 0 GTI4 $573 line 1533 ;1533: pm->ps->weapon = WP_NONE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 CNSTI4 0 ASGNI4 line 1534 ;1534: return; ADDRGP4 $568 JUMPV LABELV $573 line 1538 ;1535: } ;1536: ;1537: // check for item using ;1538: if ( pm->cmd.buttons & BUTTON_USE_HOLDABLE ) { ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $575 line 1539 ;1539: if ( ! ( pm->ps->pm_flags & PMF_USE_ITEM_HELD ) ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 1024 BANDI4 CNSTI4 0 NEI4 $576 line 1540 ;1540: if ( bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_MEDKIT ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 CNSTI4 52 ADDRLP4 4 INDIRP4 CNSTI4 188 ADDP4 INDIRI4 MULI4 ADDRGP4 bg_itemlist+40 ADDP4 INDIRI4 CNSTI4 2 NEI4 $579 ADDRLP4 4 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 ADDRLP4 4 INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 25 ADDI4 LTI4 $579 line 1541 ;1541: && pm->ps->stats[STAT_HEALTH] >= (pm->ps->stats[STAT_MAX_HEALTH] + 25) ) { line 1543 ;1542: // don't use medkit if at max health ;1543: } else { ADDRGP4 $568 JUMPV LABELV $579 line 1544 ;1544: pm->ps->pm_flags |= PMF_USE_ITEM_HELD; ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 CNSTI4 1024 BORI4 ASGNI4 line 1545 ;1545: PM_AddEvent( EV_USE_ITEM0 + bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag ); CNSTI4 52 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 188 ADDP4 INDIRI4 MULI4 ADDRGP4 bg_itemlist+40 ADDP4 INDIRI4 CNSTI4 24 ADDI4 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1546 ;1546: pm->ps->stats[STAT_HOLDABLE_ITEM] = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 188 ADDP4 CNSTI4 0 ASGNI4 line 1547 ;1547: } line 1548 ;1548: return; ADDRGP4 $568 JUMPV line 1550 ;1549: } ;1550: } else { LABELV $575 line 1551 ;1551: pm->ps->pm_flags &= ~PMF_USE_ITEM_HELD; ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 -1025 BANDI4 ASGNI4 line 1552 ;1552: } LABELV $576 line 1556 ;1553: ;1554: ;1555: // make weapon function ;1556: if ( pm->ps->weaponTime > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 INDIRI4 CNSTI4 0 LEI4 $583 line 1557 ;1557: pm->ps->weaponTime -= pml.msec; ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 ADDRGP4 pml+40 INDIRI4 SUBI4 ASGNI4 line 1558 ;1558: } LABELV $583 line 1563 ;1559: ;1560: // check for weapon change ;1561: // can't change if weapon is firing, but can change ;1562: // again if lowering or raising ;1563: if ( pm->ps->weaponTime <= 0 || pm->ps->weaponstate != WEAPON_FIRING ) { ADDRLP4 4 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 44 ADDP4 INDIRI4 CNSTI4 0 LEI4 $588 ADDRLP4 4 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 3 EQI4 $586 LABELV $588 line 1564 ;1564: if ( pm->ps->weapon != pm->cmd.weapon ) { ADDRLP4 8 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 8 INDIRP4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 ADDRLP4 8 INDIRP4 CNSTI4 24 ADDP4 INDIRU1 CVUI4 1 EQI4 $589 line 1565 ;1565: PM_BeginWeaponChange( pm->cmd.weapon ); ADDRGP4 pm INDIRP4 CNSTI4 24 ADDP4 INDIRU1 CVUI4 1 ARGI4 ADDRGP4 PM_BeginWeaponChange CALLV pop line 1566 ;1566: } LABELV $589 line 1567 ;1567: } LABELV $586 line 1569 ;1568: ;1569: if ( pm->ps->weaponTime > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 INDIRI4 CNSTI4 0 LEI4 $591 line 1570 ;1570: return; ADDRGP4 $568 JUMPV LABELV $591 line 1574 ;1571: } ;1572: ;1573: // change weapon if time ;1574: if ( pm->ps->weaponstate == WEAPON_DROPPING ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 2 NEI4 $593 line 1575 ;1575: PM_FinishWeaponChange(); ADDRGP4 PM_FinishWeaponChange CALLV pop line 1576 ;1576: return; ADDRGP4 $568 JUMPV LABELV $593 line 1579 ;1577: } ;1578: ;1579: if ( pm->ps->weaponstate == WEAPON_RAISING ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 INDIRI4 CNSTI4 1 NEI4 $595 line 1580 ;1580: pm->ps->weaponstate = WEAPON_READY; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 0 ASGNI4 line 1581 ;1581: if ( pm->ps->weapon == WP_GAUNTLET ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 1 NEI4 $597 line 1582 ;1582: PM_StartTorsoAnim( TORSO_STAND2 ); CNSTI4 12 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1583 ;1583: } else { ADDRGP4 $568 JUMPV LABELV $597 line 1584 ;1584: PM_StartTorsoAnim( TORSO_STAND ); CNSTI4 11 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1585 ;1585: } line 1586 ;1586: return; ADDRGP4 $568 JUMPV LABELV $595 line 1590 ;1587: } ;1588: ;1589: // check for fire ;1590: if ( ! (pm->cmd.buttons & BUTTON_ATTACK) ) { ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 1 BANDI4 CNSTI4 0 NEI4 $599 line 1591 ;1591: pm->ps->weaponTime = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 CNSTI4 0 ASGNI4 line 1592 ;1592: pm->ps->weaponstate = WEAPON_READY; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 0 ASGNI4 line 1593 ;1593: return; ADDRGP4 $568 JUMPV LABELV $599 line 1597 ;1594: } ;1595: ;1596: // start the animation even if out of ammo ;1597: if ( pm->ps->weapon == WP_GAUNTLET ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 1 NEI4 $601 line 1599 ;1598: // the guantlet only "fires" when it actually hits something ;1599: if ( !pm->gauntletHit ) { ADDRGP4 pm INDIRP4 CNSTI4 40 ADDP4 INDIRI4 CNSTI4 0 NEI4 $603 line 1600 ;1600: pm->ps->weaponTime = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 CNSTI4 0 ASGNI4 line 1601 ;1601: pm->ps->weaponstate = WEAPON_READY; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 0 ASGNI4 line 1602 ;1602: return; ADDRGP4 $568 JUMPV LABELV $603 line 1604 ;1603: } ;1604: PM_StartTorsoAnim( TORSO_ATTACK2 ); CNSTI4 8 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1605 ;1605: } else { ADDRGP4 $602 JUMPV LABELV $601 line 1606 ;1606: PM_StartTorsoAnim( TORSO_ATTACK ); CNSTI4 7 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1607 ;1607: } LABELV $602 line 1609 ;1608: ;1609: pm->ps->weaponstate = WEAPON_FIRING; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 148 ADDP4 CNSTI4 3 ASGNI4 line 1612 ;1610: ;1611: // check for out of ammo ;1612: if ( ! pm->ps->ammo[ pm->ps->weapon ] ) { ADDRLP4 8 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 8 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 8 INDIRP4 CNSTI4 376 ADDP4 ADDP4 INDIRI4 CNSTI4 0 NEI4 $605 line 1613 ;1613: PM_AddEvent( EV_NOAMMO ); CNSTI4 21 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1614 ;1614: pm->ps->weaponTime += 500; ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 500 ADDI4 ASGNI4 line 1615 ;1615: return; ADDRGP4 $568 JUMPV LABELV $605 line 1619 ;1616: } ;1617: ;1618: // take an ammo away if not infinite ;1619: if ( pm->ps->ammo[ pm->ps->weapon ] != -1 ) { ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 12 INDIRP4 CNSTI4 376 ADDP4 ADDP4 INDIRI4 CNSTI4 -1 EQI4 $607 line 1620 ;1620: pm->ps->ammo[ pm->ps->weapon ]--; ADDRLP4 16 ADDRGP4 pm INDIRP4 INDIRP4 ASGNP4 ADDRLP4 20 ADDRLP4 16 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 16 INDIRP4 CNSTI4 376 ADDP4 ADDP4 ASGNP4 ADDRLP4 20 INDIRP4 ADDRLP4 20 INDIRP4 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 1621 ;1621: } LABELV $607 line 1624 ;1622: ;1623: // fire weapon ;1624: PM_AddEvent( EV_FIRE_WEAPON ); CNSTI4 23 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1626 ;1625: ;1626: switch( pm->ps->weapon ) { ADDRLP4 16 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 ASGNI4 ADDRLP4 16 INDIRI4 CNSTI4 1 LTI4 $609 ADDRLP4 16 INDIRI4 CNSTI4 10 GTI4 $609 ADDRLP4 16 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 $622-4 ADDP4 INDIRP4 JUMPV lit align 4 LABELV $622 address $612 address $615 address $614 address $616 address $617 address $613 address $619 address $618 address $620 address $621 code LABELV $609 LABELV $612 line 1629 ;1627: default: ;1628: case WP_GAUNTLET: ;1629: addTime = 400; ADDRLP4 0 CNSTI4 400 ASGNI4 line 1630 ;1630: break; ADDRGP4 $610 JUMPV LABELV $613 line 1632 ;1631: case WP_LIGHTNING: ;1632: addTime = 50; ADDRLP4 0 CNSTI4 50 ASGNI4 line 1633 ;1633: break; ADDRGP4 $610 JUMPV LABELV $614 line 1635 ;1634: case WP_SHOTGUN: ;1635: addTime = 1000; ADDRLP4 0 CNSTI4 1000 ASGNI4 line 1636 ;1636: break; ADDRGP4 $610 JUMPV LABELV $615 line 1638 ;1637: case WP_MACHINEGUN: ;1638: addTime = 100; ADDRLP4 0 CNSTI4 100 ASGNI4 line 1639 ;1639: break; ADDRGP4 $610 JUMPV LABELV $616 line 1641 ;1640: case WP_GRENADE_LAUNCHER: ;1641: addTime = 800; ADDRLP4 0 CNSTI4 800 ASGNI4 line 1642 ;1642: break; ADDRGP4 $610 JUMPV LABELV $617 line 1644 ;1643: case WP_ROCKET_LAUNCHER: ;1644: addTime = 800; ADDRLP4 0 CNSTI4 800 ASGNI4 line 1645 ;1645: break; ADDRGP4 $610 JUMPV LABELV $618 line 1647 ;1646: case WP_PLASMAGUN: ;1647: addTime = 100; ADDRLP4 0 CNSTI4 100 ASGNI4 line 1648 ;1648: break; ADDRGP4 $610 JUMPV LABELV $619 line 1650 ;1649: case WP_RAILGUN: ;1650: addTime = 1500; ADDRLP4 0 CNSTI4 1500 ASGNI4 line 1651 ;1651: break; ADDRGP4 $610 JUMPV LABELV $620 line 1653 ;1652: case WP_BFG: ;1653: addTime = 200; ADDRLP4 0 CNSTI4 200 ASGNI4 line 1654 ;1654: break; ADDRGP4 $610 JUMPV LABELV $621 line 1656 ;1655: case WP_GRAPPLING_HOOK: ;1656: addTime = 400; ADDRLP4 0 CNSTI4 400 ASGNI4 line 1657 ;1657: break; LABELV $610 line 1681 ;1658:#ifdef MISSIONPACK ;1659: case WP_NAILGUN: ;1660: addTime = 1000; ;1661: break; ;1662: case WP_PROX_LAUNCHER: ;1663: addTime = 800; ;1664: break; ;1665: case WP_CHAINGUN: ;1666: addTime = 30; ;1667: break; ;1668:#endif ;1669: } ;1670: ;1671:#ifdef MISSIONPACK ;1672: if( bg_itemlist[pm->ps->stats[STAT_PERSISTANT_POWERUP]].giTag == PW_SCOUT ) { ;1673: addTime /= 1.5; ;1674: } ;1675: else ;1676: if( bg_itemlist[pm->ps->stats[STAT_PERSISTANT_POWERUP]].giTag == PW_AMMOREGEN ) { ;1677: addTime /= 1.3; ;1678: } ;1679: else ;1680:#endif ;1681: if ( pm->ps->powerups[PW_HASTE] ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 324 ADDP4 INDIRI4 CNSTI4 0 EQI4 $624 line 1682 ;1682: addTime /= 1.3; ADDRLP4 0 ADDRLP4 0 INDIRI4 CVIF4 4 CNSTF4 1067869798 DIVF4 CVFI4 4 ASGNI4 line 1683 ;1683: } LABELV $624 line 1685 ;1684: ;1685: pm->ps->weaponTime += addTime; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 ADDRLP4 0 INDIRI4 ADDI4 ASGNI4 line 1686 ;1686:} LABELV $568 endproc PM_Weapon 28 4 proc PM_Animate 0 4 line 1694 ;1687: ;1688:/* ;1689:================ ;1690:PM_Animate ;1691:================ ;1692:*/ ;1693: ;1694:static void PM_Animate( void ) { line 1695 ;1695: if ( pm->cmd.buttons & BUTTON_GESTURE ) { ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 8 BANDI4 CNSTI4 0 EQI4 $627 line 1696 ;1696: if ( pm->ps->torsoTimer == 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 INDIRI4 CNSTI4 0 NEI4 $629 line 1697 ;1697: PM_StartTorsoAnim( TORSO_GESTURE ); CNSTI4 6 ARGI4 ADDRGP4 PM_StartTorsoAnim CALLV pop line 1698 ;1698: pm->ps->torsoTimer = TIMER_GESTURE; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 CNSTI4 2294 ASGNI4 line 1699 ;1699: PM_AddEvent( EV_TAUNT ); CNSTI4 76 ARGI4 ADDRGP4 PM_AddEvent CALLV pop line 1700 ;1700: } LABELV $629 line 1733 ;1701:#ifdef MISSIONPACK ;1702: } else if ( pm->cmd.buttons & BUTTON_GETFLAG ) { ;1703: if ( pm->ps->torsoTimer == 0 ) { ;1704: PM_StartTorsoAnim( TORSO_GETFLAG ); ;1705: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1706: } ;1707: } else if ( pm->cmd.buttons & BUTTON_GUARDBASE ) { ;1708: if ( pm->ps->torsoTimer == 0 ) { ;1709: PM_StartTorsoAnim( TORSO_GUARDBASE ); ;1710: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1711: } ;1712: } else if ( pm->cmd.buttons & BUTTON_PATROL ) { ;1713: if ( pm->ps->torsoTimer == 0 ) { ;1714: PM_StartTorsoAnim( TORSO_PATROL ); ;1715: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1716: } ;1717: } else if ( pm->cmd.buttons & BUTTON_FOLLOWME ) { ;1718: if ( pm->ps->torsoTimer == 0 ) { ;1719: PM_StartTorsoAnim( TORSO_FOLLOWME ); ;1720: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1721: } ;1722: } else if ( pm->cmd.buttons & BUTTON_AFFIRMATIVE ) { ;1723: if ( pm->ps->torsoTimer == 0 ) { ;1724: PM_StartTorsoAnim( TORSO_AFFIRMATIVE); ;1725: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1726: } ;1727: } else if ( pm->cmd.buttons & BUTTON_NEGATIVE ) { ;1728: if ( pm->ps->torsoTimer == 0 ) { ;1729: PM_StartTorsoAnim( TORSO_NEGATIVE ); ;1730: pm->ps->torsoTimer = 600; //TIMER_GESTURE; ;1731: } ;1732:#endif ;1733: } LABELV $627 line 1734 ;1734:} LABELV $626 endproc PM_Animate 0 4 proc PM_DropTimers 4 0 line 1742 ;1735: ;1736: ;1737:/* ;1738:================ ;1739:PM_DropTimers ;1740:================ ;1741:*/ ;1742:static void PM_DropTimers( void ) { line 1744 ;1743: // drop misc timing counter ;1744: if ( pm->ps->pm_time ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 CNSTI4 0 EQI4 $632 line 1745 ;1745: if ( pml.msec >= pm->ps->pm_time ) { ADDRGP4 pml+40 INDIRI4 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 INDIRI4 LTI4 $634 line 1746 ;1746: pm->ps->pm_flags &= ~PMF_ALL_TIMES; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 CNSTI4 -353 BANDI4 ASGNI4 line 1747 ;1747: pm->ps->pm_time = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 CNSTI4 0 ASGNI4 line 1748 ;1748: } else { ADDRGP4 $635 JUMPV LABELV $634 line 1749 ;1749: pm->ps->pm_time -= pml.msec; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 16 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 ADDRGP4 pml+40 INDIRI4 SUBI4 ASGNI4 line 1750 ;1750: } LABELV $635 line 1751 ;1751: } LABELV $632 line 1754 ;1752: ;1753: // drop animation counter ;1754: if ( pm->ps->legsTimer > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 INDIRI4 CNSTI4 0 LEI4 $638 line 1755 ;1755: pm->ps->legsTimer -= pml.msec; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 ADDRGP4 pml+40 INDIRI4 SUBI4 ASGNI4 line 1756 ;1756: if ( pm->ps->legsTimer < 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 INDIRI4 CNSTI4 0 GEI4 $641 line 1757 ;1757: pm->ps->legsTimer = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 72 ADDP4 CNSTI4 0 ASGNI4 line 1758 ;1758: } LABELV $641 line 1759 ;1759: } LABELV $638 line 1761 ;1760: ;1761: if ( pm->ps->torsoTimer > 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 INDIRI4 CNSTI4 0 LEI4 $643 line 1762 ;1762: pm->ps->torsoTimer -= pml.msec; ADDRLP4 0 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 ADDRGP4 pml+40 INDIRI4 SUBI4 ASGNI4 line 1763 ;1763: if ( pm->ps->torsoTimer < 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 INDIRI4 CNSTI4 0 GEI4 $646 line 1764 ;1764: pm->ps->torsoTimer = 0; ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 80 ADDP4 CNSTI4 0 ASGNI4 line 1765 ;1765: } LABELV $646 line 1766 ;1766: } LABELV $643 line 1767 ;1767:} LABELV $631 endproc PM_DropTimers 4 0 export PM_UpdateViewAngles proc PM_UpdateViewAngles 24 0 line 1777 ;1768: ;1769:/* ;1770:================ ;1771:PM_UpdateViewAngles ;1772: ;1773:This can be used as another entry point when only the viewangles ;1774:are being updated isntead of a full move ;1775:================ ;1776:*/ ;1777:void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) { line 1781 ;1778: short temp; ;1779: int i; ;1780: ;1781: if ( ps->pm_type == PM_INTERMISSION || ps->pm_type == PM_SPINTERMISSION) { ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 ASGNI4 ADDRLP4 8 INDIRI4 CNSTI4 5 EQI4 $651 ADDRLP4 8 INDIRI4 CNSTI4 6 NEI4 $649 LABELV $651 line 1782 ;1782: return; // no view changes at all ADDRGP4 $648 JUMPV LABELV $649 line 1785 ;1783: } ;1784: ;1785: if ( ps->pm_type != PM_SPECTATOR && ps->stats[STAT_HEALTH] <= 0 ) { ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 2 EQI4 $652 ADDRLP4 12 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 CNSTI4 0 GTI4 $652 line 1786 ;1786: return; // no view changes at all ADDRGP4 $648 JUMPV LABELV $652 line 1790 ;1787: } ;1788: ;1789: // circularly clamp the angles with deltas ;1790: for (i=0 ; i<3 ; i++) { ADDRLP4 0 CNSTI4 0 ASGNI4 LABELV $654 line 1791 ;1791: temp = cmd->angles[i] + ps->delta_angles[i]; ADDRLP4 16 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 4 ADDRLP4 16 INDIRI4 ADDRFP4 4 INDIRP4 CNSTI4 4 ADDP4 ADDP4 INDIRI4 ADDRLP4 16 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 56 ADDP4 ADDP4 INDIRI4 ADDI4 CVII2 4 ASGNI2 line 1792 ;1792: if ( i == PITCH ) { ADDRLP4 0 INDIRI4 CNSTI4 0 NEI4 $658 line 1794 ;1793: // don't let the player look up or down more than 90 degrees ;1794: if ( temp > 16000 ) { ADDRLP4 4 INDIRI2 CVII4 2 CNSTI4 16000 LEI4 $660 line 1795 ;1795: ps->delta_angles[i] = 16000 - cmd->angles[i]; ADDRLP4 20 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 20 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 56 ADDP4 ADDP4 CNSTI4 16000 ADDRLP4 20 INDIRI4 ADDRFP4 4 INDIRP4 CNSTI4 4 ADDP4 ADDP4 INDIRI4 SUBI4 ASGNI4 line 1796 ;1796: temp = 16000; ADDRLP4 4 CNSTI2 16000 ASGNI2 line 1797 ;1797: } else if ( temp < -16000 ) { ADDRGP4 $661 JUMPV LABELV $660 ADDRLP4 4 INDIRI2 CVII4 2 CNSTI4 -16000 GEI4 $662 line 1798 ;1798: ps->delta_angles[i] = -16000 - cmd->angles[i]; ADDRLP4 20 ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ASGNI4 ADDRLP4 20 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 56 ADDP4 ADDP4 CNSTI4 -16000 ADDRLP4 20 INDIRI4 ADDRFP4 4 INDIRP4 CNSTI4 4 ADDP4 ADDP4 INDIRI4 SUBI4 ASGNI4 line 1799 ;1799: temp = -16000; ADDRLP4 4 CNSTI2 -16000 ASGNI2 line 1800 ;1800: } LABELV $662 LABELV $661 line 1801 ;1801: } LABELV $658 line 1802 ;1802: ps->viewangles[i] = SHORT2ANGLE(temp); ADDRLP4 0 INDIRI4 CNSTI4 2 LSHI4 ADDRFP4 0 INDIRP4 CNSTI4 152 ADDP4 ADDP4 CNSTF4 1001652224 ADDRLP4 4 INDIRI2 CVII4 2 CVIF4 4 MULF4 ASGNF4 line 1803 ;1803: } LABELV $655 line 1790 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 3 LTI4 $654 line 1805 ;1804: ;1805:} LABELV $648 endproc PM_UpdateViewAngles 24 0 export PmoveSingle proc PmoveSingle 56 16 line 1816 ;1806: ;1807: ;1808:/* ;1809:================ ;1810:PmoveSingle ;1811: ;1812:================ ;1813:*/ ;1814:void trap_SnapVector( float *v ); ;1815: ;1816:void PmoveSingle (pmove_t *pmove) { line 1817 ;1817: pm = pmove; ADDRGP4 pm ADDRFP4 0 INDIRP4 ASGNP4 line 1821 ;1818: ;1819: // this counter lets us debug movement problems with a journal ;1820: // by setting a conditional breakpoint fot the previous frame ;1821: c_pmove++; ADDRLP4 0 ADDRGP4 c_pmove ASGNP4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 line 1824 ;1822: ;1823: // clear results ;1824: pm->numtouch = 0; ADDRGP4 pm INDIRP4 CNSTI4 48 ADDP4 CNSTI4 0 ASGNI4 line 1825 ;1825: pm->watertype = 0; ADDRGP4 pm INDIRP4 CNSTI4 204 ADDP4 CNSTI4 0 ASGNI4 line 1826 ;1826: pm->waterlevel = 0; ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 CNSTI4 0 ASGNI4 line 1828 ;1827: ;1828: if ( pm->ps->stats[STAT_HEALTH] <= 0 ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 CNSTI4 0 GTI4 $665 line 1829 ;1829: pm->tracemask &= ~CONTENTS_BODY; // corpses can fly through bodies ADDRLP4 4 ADDRGP4 pm INDIRP4 CNSTI4 28 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 CNSTI4 -33554433 BANDI4 ASGNI4 line 1830 ;1830: } LABELV $665 line 1834 ;1831: ;1832: // make sure walking button is clear if they are running, to avoid ;1833: // proxy no-footsteps cheats ;1834: if ( abs( pm->cmd.forwardmove ) > 64 || abs( pm->cmd.rightmove ) > 64 ) { ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 4 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 4 INDIRI4 CNSTI4 64 GTI4 $669 ADDRGP4 pm INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ARGI4 ADDRLP4 8 ADDRGP4 abs CALLI4 ASGNI4 ADDRLP4 8 INDIRI4 CNSTI4 64 LEI4 $667 LABELV $669 line 1835 ;1835: pm->cmd.buttons &= ~BUTTON_WALKING; ADDRLP4 12 ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 -17 BANDI4 ASGNI4 line 1836 ;1836: } LABELV $667 line 1839 ;1837: ;1838: // set the talk balloon flag ;1839: if ( pm->cmd.buttons & BUTTON_TALK ) { ADDRGP4 pm INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $670 line 1840 ;1840: pm->ps->eFlags |= EF_TALK; ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 104 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 4096 BORI4 ASGNI4 line 1841 ;1841: } else { ADDRGP4 $671 JUMPV LABELV $670 line 1842 ;1842: pm->ps->eFlags &= ~EF_TALK; ADDRLP4 12 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 104 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI4 CNSTI4 -4097 BANDI4 ASGNI4 line 1843 ;1843: } LABELV $671 line 1846 ;1844: ;1845: // set the firing flag for continuous beam weapons ;1846: if ( !(pm->ps->pm_flags & PMF_RESPAWNED) && pm->ps->pm_type != PM_INTERMISSION ADDRLP4 12 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 16 ADDRLP4 12 INDIRP4 INDIRP4 ASGNP4 ADDRLP4 20 CNSTI4 0 ASGNI4 ADDRLP4 16 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 512 BANDI4 ADDRLP4 20 INDIRI4 NEI4 $672 ADDRLP4 16 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 5 EQI4 $672 ADDRLP4 12 INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 1 BANDI4 ADDRLP4 20 INDIRI4 EQI4 $672 ADDRLP4 16 INDIRP4 CNSTI4 144 ADDP4 INDIRI4 CNSTI4 2 LSHI4 ADDRLP4 16 INDIRP4 CNSTI4 376 ADDP4 ADDP4 INDIRI4 ADDRLP4 20 INDIRI4 EQI4 $672 line 1847 ;1847: && ( pm->cmd.buttons & BUTTON_ATTACK ) && pm->ps->ammo[ pm->ps->weapon ] ) { line 1848 ;1848: pm->ps->eFlags |= EF_FIRING; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 104 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 CNSTI4 256 BORI4 ASGNI4 line 1849 ;1849: } else { ADDRGP4 $673 JUMPV LABELV $672 line 1850 ;1850: pm->ps->eFlags &= ~EF_FIRING; ADDRLP4 24 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 104 ADDP4 ASGNP4 ADDRLP4 24 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 CNSTI4 -257 BANDI4 ASGNI4 line 1851 ;1851: } LABELV $673 line 1854 ;1852: ;1853: // clear the respawned flag if attack and use are cleared ;1854: if ( pm->ps->stats[STAT_HEALTH] > 0 && ADDRLP4 24 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 28 CNSTI4 0 ASGNI4 ADDRLP4 24 INDIRP4 INDIRP4 CNSTI4 184 ADDP4 INDIRI4 ADDRLP4 28 INDIRI4 LEI4 $674 ADDRLP4 24 INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 5 BANDI4 ADDRLP4 28 INDIRI4 NEI4 $674 line 1855 ;1855: !( pm->cmd.buttons & (BUTTON_ATTACK | BUTTON_USE_HOLDABLE) ) ) { line 1856 ;1856: pm->ps->pm_flags &= ~PMF_RESPAWNED; ADDRLP4 32 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 32 INDIRP4 ADDRLP4 32 INDIRP4 INDIRI4 CNSTI4 -513 BANDI4 ASGNI4 line 1857 ;1857: } LABELV $674 line 1862 ;1858: ;1859: // if talk button is down, dissallow all other input ;1860: // this is to prevent any possible intercept proxy from ;1861: // adding fake talk balloons ;1862: if ( pmove->cmd.buttons & BUTTON_TALK ) { ADDRFP4 0 INDIRP4 CNSTI4 20 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $676 line 1865 ;1863: // keep the talk button set tho for when the cmd.serverTime > 66 msec ;1864: // and the same cmd is used multiple times in Pmove ;1865: pmove->cmd.buttons = BUTTON_TALK; ADDRFP4 0 INDIRP4 CNSTI4 20 ADDP4 CNSTI4 2 ASGNI4 line 1866 ;1866: pmove->cmd.forwardmove = 0; ADDRFP4 0 INDIRP4 CNSTI4 25 ADDP4 CNSTI1 0 ASGNI1 line 1867 ;1867: pmove->cmd.rightmove = 0; ADDRFP4 0 INDIRP4 CNSTI4 26 ADDP4 CNSTI1 0 ASGNI1 line 1868 ;1868: pmove->cmd.upmove = 0; ADDRFP4 0 INDIRP4 CNSTI4 27 ADDP4 CNSTI1 0 ASGNI1 line 1869 ;1869: } LABELV $676 line 1872 ;1870: ;1871: // clear all pmove local vars ;1872: memset (&pml, 0, sizeof(pml)); ADDRGP4 pml ARGP4 CNSTI4 0 ARGI4 CNSTI4 140 ARGI4 ADDRGP4 memset CALLP4 pop line 1875 ;1873: ;1874: // determine the time ;1875: pml.msec = pmove->cmd.serverTime - pm->ps->commandTime; ADDRGP4 pml+40 ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 ADDRGP4 pm INDIRP4 INDIRP4 INDIRI4 SUBI4 ASGNI4 line 1876 ;1876: if ( pml.msec < 1 ) { ADDRGP4 pml+40 INDIRI4 CNSTI4 1 GEI4 $679 line 1877 ;1877: pml.msec = 1; ADDRGP4 pml+40 CNSTI4 1 ASGNI4 line 1878 ;1878: } else if ( pml.msec > 200 ) { ADDRGP4 $680 JUMPV LABELV $679 ADDRGP4 pml+40 INDIRI4 CNSTI4 200 LEI4 $683 line 1879 ;1879: pml.msec = 200; ADDRGP4 pml+40 CNSTI4 200 ASGNI4 line 1880 ;1880: } LABELV $683 LABELV $680 line 1881 ;1881: pm->ps->commandTime = pmove->cmd.serverTime; ADDRGP4 pm INDIRP4 INDIRP4 ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 ASGNI4 line 1884 ;1882: ;1883: // save old org in case we get stuck ;1884: VectorCopy (pm->ps->origin, pml.previous_origin); ADDRGP4 pml+112 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 20 ADDP4 INDIRB ASGNB 12 line 1887 ;1885: ;1886: // save old velocity for crashlanding ;1887: VectorCopy (pm->ps->velocity, pml.previous_velocity); ADDRGP4 pml+124 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 INDIRB ASGNB 12 line 1889 ;1888: ;1889: pml.frametime = pml.msec * 0.001; ADDRGP4 pml+36 CNSTF4 981668463 ADDRGP4 pml+40 INDIRI4 CVIF4 4 MULF4 ASGNF4 line 1892 ;1890: ;1891: // update the viewangles ;1892: PM_UpdateViewAngles( pm->ps, &pm->cmd ); ADDRLP4 32 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 32 INDIRP4 INDIRP4 ARGP4 ADDRLP4 32 INDIRP4 CNSTI4 4 ADDP4 ARGP4 ADDRGP4 PM_UpdateViewAngles CALLV pop line 1894 ;1893: ;1894: AngleVectors (pm->ps->viewangles, pml.forward, pml.right, pml.up); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 152 ADDP4 ARGP4 ADDRGP4 pml ARGP4 ADDRGP4 pml+12 ARGP4 ADDRGP4 pml+24 ARGP4 ADDRGP4 AngleVectors CALLV pop line 1896 ;1895: ;1896: if ( pm->cmd.upmove < 10 ) { ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 INDIRI1 CVII4 1 CNSTI4 10 GEI4 $693 line 1898 ;1897: // not holding jump ;1898: pm->ps->pm_flags &= ~PMF_JUMP_HELD; ADDRLP4 36 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 36 INDIRP4 ADDRLP4 36 INDIRP4 INDIRI4 CNSTI4 -3 BANDI4 ASGNI4 line 1899 ;1899: } LABELV $693 line 1902 ;1900: ;1901: // decide if backpedaling animations should be used ;1902: if ( pm->cmd.forwardmove < 0 ) { ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 GEI4 $695 line 1903 ;1903: pm->ps->pm_flags |= PMF_BACKWARDS_RUN; ADDRLP4 36 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 36 INDIRP4 ADDRLP4 36 INDIRP4 INDIRI4 CNSTI4 16 BORI4 ASGNI4 line 1904 ;1904: } else if ( pm->cmd.forwardmove > 0 || ( pm->cmd.forwardmove == 0 && pm->cmd.rightmove ) ) { ADDRGP4 $696 JUMPV LABELV $695 ADDRLP4 36 ADDRGP4 pm INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 36 INDIRP4 CNSTI4 25 ADDP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 44 CNSTI4 0 ASGNI4 ADDRLP4 40 INDIRI4 ADDRLP4 44 INDIRI4 GTI4 $699 ADDRLP4 40 INDIRI4 ADDRLP4 44 INDIRI4 NEI4 $697 ADDRLP4 36 INDIRP4 CNSTI4 26 ADDP4 INDIRI1 CVII4 1 ADDRLP4 44 INDIRI4 EQI4 $697 LABELV $699 line 1905 ;1905: pm->ps->pm_flags &= ~PMF_BACKWARDS_RUN; ADDRLP4 48 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 ASGNP4 ADDRLP4 48 INDIRP4 ADDRLP4 48 INDIRP4 INDIRI4 CNSTI4 -17 BANDI4 ASGNI4 line 1906 ;1906: } LABELV $697 LABELV $696 line 1908 ;1907: ;1908: if ( pm->ps->pm_type >= PM_DEAD ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 3 LTI4 $700 line 1909 ;1909: pm->cmd.forwardmove = 0; ADDRGP4 pm INDIRP4 CNSTI4 25 ADDP4 CNSTI1 0 ASGNI1 line 1910 ;1910: pm->cmd.rightmove = 0; ADDRGP4 pm INDIRP4 CNSTI4 26 ADDP4 CNSTI1 0 ASGNI1 line 1911 ;1911: pm->cmd.upmove = 0; ADDRGP4 pm INDIRP4 CNSTI4 27 ADDP4 CNSTI1 0 ASGNI1 line 1912 ;1912: } LABELV $700 line 1914 ;1913: ;1914: if ( pm->ps->pm_type == PM_SPECTATOR ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 2 NEI4 $702 line 1915 ;1915: PM_CheckDuck (); ADDRGP4 PM_CheckDuck CALLV pop line 1916 ;1916: PM_FlyMove (); ADDRGP4 PM_FlyMove CALLV pop line 1917 ;1917: PM_DropTimers (); ADDRGP4 PM_DropTimers CALLV pop line 1918 ;1918: return; ADDRGP4 $664 JUMPV LABELV $702 line 1921 ;1919: } ;1920: ;1921: if ( pm->ps->pm_type == PM_NOCLIP ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 1 NEI4 $704 line 1922 ;1922: PM_NoclipMove (); ADDRGP4 PM_NoclipMove CALLV pop line 1923 ;1923: PM_DropTimers (); ADDRGP4 PM_DropTimers CALLV pop line 1924 ;1924: return; ADDRGP4 $664 JUMPV LABELV $704 line 1927 ;1925: } ;1926: ;1927: if (pm->ps->pm_type == PM_FREEZE) { ADDRLP4 48 CNSTI4 4 ASGNI4 ADDRGP4 pm INDIRP4 INDIRP4 ADDRLP4 48 INDIRI4 ADDP4 INDIRI4 ADDRLP4 48 INDIRI4 NEI4 $706 line 1928 ;1928: return; // no movement at all ADDRGP4 $664 JUMPV LABELV $706 line 1931 ;1929: } ;1930: ;1931: if ( pm->ps->pm_type == PM_INTERMISSION || pm->ps->pm_type == PM_SPINTERMISSION) { ADDRLP4 52 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 ASGNI4 ADDRLP4 52 INDIRI4 CNSTI4 5 EQI4 $710 ADDRLP4 52 INDIRI4 CNSTI4 6 NEI4 $708 LABELV $710 line 1932 ;1932: return; // no movement at all ADDRGP4 $664 JUMPV LABELV $708 line 1936 ;1933: } ;1934: ;1935: // set watertype, and waterlevel ;1936: PM_SetWaterLevel(); ADDRGP4 PM_SetWaterLevel CALLV pop line 1937 ;1937: pml.previous_waterlevel = pmove->waterlevel; ADDRGP4 pml+136 ADDRFP4 0 INDIRP4 CNSTI4 208 ADDP4 INDIRI4 ASGNI4 line 1940 ;1938: ;1939: // set mins, maxs, and viewheight ;1940: PM_CheckDuck (); ADDRGP4 PM_CheckDuck CALLV pop line 1943 ;1941: ;1942: // set groundentity ;1943: PM_GroundTrace(); ADDRGP4 PM_GroundTrace CALLV pop line 1945 ;1944: ;1945: if ( pm->ps->pm_type == PM_DEAD ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 CNSTI4 3 NEI4 $712 line 1946 ;1946: PM_DeadMove (); ADDRGP4 PM_DeadMove CALLV pop line 1947 ;1947: } LABELV $712 line 1949 ;1948: ;1949: PM_DropTimers(); ADDRGP4 PM_DropTimers CALLV pop line 1956 ;1950: ;1951:#ifdef MISSIONPACK ;1952: if ( pm->ps->powerups[PW_INVULNERABILITY] ) { ;1953: PM_InvulnerabilityMove(); ;1954: } else ;1955:#endif ;1956: if ( pm->ps->powerups[PW_FLIGHT] ) { ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 336 ADDP4 INDIRI4 CNSTI4 0 EQI4 $714 line 1958 ;1957: // flight powerup doesn't allow jump and has different friction ;1958: PM_FlyMove(); ADDRGP4 PM_FlyMove CALLV pop line 1959 ;1959: } else if (pm->ps->pm_flags & PMF_GRAPPLE_PULL) { ADDRGP4 $715 JUMPV LABELV $714 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 2048 BANDI4 CNSTI4 0 EQI4 $716 line 1960 ;1960: PM_GrappleMove(); ADDRGP4 PM_GrappleMove CALLV pop line 1962 ;1961: // We can wiggle a bit ;1962: PM_AirMove(); ADDRGP4 PM_AirMove CALLV pop line 1963 ;1963: } else if (pm->ps->pm_flags & PMF_TIME_WATERJUMP) { ADDRGP4 $717 JUMPV LABELV $716 ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 256 BANDI4 CNSTI4 0 EQI4 $718 line 1964 ;1964: PM_WaterJumpMove(); ADDRGP4 PM_WaterJumpMove CALLV pop line 1965 ;1965: } else if ( pm->waterlevel > 1 ) { ADDRGP4 $719 JUMPV LABELV $718 ADDRGP4 pm INDIRP4 CNSTI4 208 ADDP4 INDIRI4 CNSTI4 1 LEI4 $720 line 1967 ;1966: // swimming ;1967: PM_WaterMove(); ADDRGP4 PM_WaterMove CALLV pop line 1968 ;1968: } else if ( pml.walking ) { ADDRGP4 $721 JUMPV LABELV $720 ADDRGP4 pml+44 INDIRI4 CNSTI4 0 EQI4 $722 line 1970 ;1969: // walking on ground ;1970: PM_WalkMove(); ADDRGP4 PM_WalkMove CALLV pop line 1971 ;1971: } else { ADDRGP4 $723 JUMPV LABELV $722 line 1973 ;1972: // airborne ;1973: PM_AirMove(); ADDRGP4 PM_AirMove CALLV pop line 1974 ;1974: } LABELV $723 LABELV $721 LABELV $719 LABELV $717 LABELV $715 line 1976 ;1975: ;1976: PM_Animate(); ADDRGP4 PM_Animate CALLV pop line 1979 ;1977: ;1978: // set groundentity, watertype, and waterlevel ;1979: PM_GroundTrace(); ADDRGP4 PM_GroundTrace CALLV pop line 1980 ;1980: PM_SetWaterLevel(); ADDRGP4 PM_SetWaterLevel CALLV pop line 1983 ;1981: ;1982: // weapons ;1983: PM_Weapon(); ADDRGP4 PM_Weapon CALLV pop line 1986 ;1984: ;1985: // torso animation ;1986: PM_TorsoAnimation(); ADDRGP4 PM_TorsoAnimation CALLV pop line 1989 ;1987: ;1988: // footstep events / legs animations ;1989: PM_Footsteps(); ADDRGP4 PM_Footsteps CALLV pop line 1992 ;1990: ;1991: // entering / leaving water splashes ;1992: PM_WaterEvents(); ADDRGP4 PM_WaterEvents CALLV pop line 1995 ;1993: ;1994: // snap some parts of playerstate to save network bandwidth ;1995: trap_SnapVector( pm->ps->velocity ); ADDRGP4 pm INDIRP4 INDIRP4 CNSTI4 32 ADDP4 ARGP4 ADDRGP4 trap_SnapVector CALLV pop line 1996 ;1996:} LABELV $664 endproc PmoveSingle 56 16 export Pmove proc Pmove 16 4 line 2006 ;1997: ;1998: ;1999:/* ;2000:================ ;2001:Pmove ;2002: ;2003:Can be called by either the server or the client ;2004:================ ;2005:*/ ;2006:void Pmove (pmove_t *pmove) { line 2009 ;2007: int finalTime; ;2008: ;2009: finalTime = pmove->cmd.serverTime; ADDRLP4 0 ADDRFP4 0 INDIRP4 CNSTI4 4 ADDP4 INDIRI4 ASGNI4 line 2011 ;2010: ;2011: if ( finalTime < pmove->ps->commandTime ) { ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 INDIRP4 INDIRI4 GEI4 $726 line 2012 ;2012: return; // should not happen ADDRGP4 $725 JUMPV LABELV $726 line 2015 ;2013: } ;2014: ;2015: if ( finalTime > pmove->ps->commandTime + 1000 ) { ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 INDIRP4 INDIRI4 CNSTI4 1000 ADDI4 LEI4 $728 line 2016 ;2016: pmove->ps->commandTime = finalTime - 1000; ADDRFP4 0 INDIRP4 INDIRP4 ADDRLP4 0 INDIRI4 CNSTI4 1000 SUBI4 ASGNI4 line 2017 ;2017: } LABELV $728 line 2019 ;2018: ;2019: pmove->ps->pmove_framecount = (pmove->ps->pmove_framecount+1) & ((1<ps->commandTime != finalTime ) { line 2026 ;2024: int msec; ;2025: ;2026: msec = finalTime - pmove->ps->commandTime; ADDRLP4 8 ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 INDIRP4 INDIRI4 SUBI4 ASGNI4 line 2028 ;2027: ;2028: if ( pmove->pmove_fixed ) { ADDRFP4 0 INDIRP4 CNSTI4 216 ADDP4 INDIRI4 CNSTI4 0 EQI4 $733 line 2029 ;2029: if ( msec > pmove->pmove_msec ) { ADDRLP4 8 INDIRI4 ADDRFP4 0 INDIRP4 CNSTI4 220 ADDP4 INDIRI4 LEI4 $734 line 2030 ;2030: msec = pmove->pmove_msec; ADDRLP4 8 ADDRFP4 0 INDIRP4 CNSTI4 220 ADDP4 INDIRI4 ASGNI4 line 2031 ;2031: } line 2032 ;2032: } ADDRGP4 $734 JUMPV LABELV $733 line 2033 ;2033: else { line 2034 ;2034: if ( msec > 66 ) { ADDRLP4 8 INDIRI4 CNSTI4 66 LEI4 $737 line 2035 ;2035: msec = 66; ADDRLP4 8 CNSTI4 66 ASGNI4 line 2036 ;2036: } LABELV $737 line 2037 ;2037: } LABELV $734 line 2038 ;2038: pmove->cmd.serverTime = pmove->ps->commandTime + msec; ADDRLP4 12 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI4 4 ADDP4 ADDRLP4 12 INDIRP4 INDIRP4 INDIRI4 ADDRLP4 8 INDIRI4 ADDI4 ASGNI4 line 2039 ;2039: PmoveSingle( pmove ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 PmoveSingle CALLV pop line 2041 ;2040: ;2041: if ( pmove->ps->pm_flags & PMF_JUMP_HELD ) { ADDRFP4 0 INDIRP4 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 2 BANDI4 CNSTI4 0 EQI4 $739 line 2042 ;2042: pmove->cmd.upmove = 20; ADDRFP4 0 INDIRP4 CNSTI4 27 ADDP4 CNSTI1 20 ASGNI1 line 2043 ;2043: } LABELV $739 line 2044 ;2044: } LABELV $731 line 2023 ADDRFP4 0 INDIRP4 INDIRP4 INDIRI4 ADDRLP4 0 INDIRI4 NEI4 $730 line 2048 ;2045: ;2046: //PM_CheckStuck(); ;2047: ;2048:} LABELV $725 endproc Pmove 16 4 import trap_SnapVector import PM_StepSlideMove import PM_SlideMove bss export pml align 4 LABELV pml skip 140 export pm align 4 LABELV pm skip 4 import BG_PlayerTouchesItem import BG_PlayerStateToEntityStateExtraPolate import BG_PlayerStateToEntityState import BG_TouchJumpPad import BG_AddPredictableEventToPlayerstate import BG_EvaluateTrajectoryDelta import BG_EvaluateTrajectory import BG_CanItemBeGrabbed import BG_FindItemForHoldable import BG_FindItemForPowerup import BG_FindItemForWeapon import BG_FindItem import bg_numItems import bg_itemlist import Com_Printf import Com_Error import Info_NextPair import Info_Validate import Info_SetValueForKey_Big import Info_SetValueForKey import Info_RemoveKey_big import Info_RemoveKey import Info_ValueForKey import va import Q_CleanStr import Q_PrintStrlen import Q_strcat import Q_strncpyz import Q_strrchr import Q_strupr import Q_strlwr import Q_stricmpn import Q_strncmp import Q_stricmp import Q_isalpha import Q_isupper import Q_islower import Q_isprint import Com_sprintf import Parse3DMatrix import Parse2DMatrix import Parse1DMatrix import SkipRestOfLine import SkipBracedSection import COM_MatchToken import COM_ParseWarning import COM_ParseError import COM_Compress import COM_ParseExt import COM_Parse import COM_GetCurrentParseLine import COM_BeginParseSession import COM_DefaultExtension import COM_StripExtension import COM_SkipPath import Com_Clamp import PerpendicularVector import AngleVectors import MatrixMultiply import MakeNormalVectors import RotateAroundDirection import RotatePointAroundVector import ProjectPointOnPlane import PlaneFromPoints import AngleDelta import AngleNormalize180 import AngleNormalize360 import AnglesSubtract import AngleSubtract import LerpAngle import AngleMod import BoxOnPlaneSide import SetPlaneSignbits import AxisCopy import AxisClear import AnglesToAxis import vectoangles import Q_crandom import Q_random import Q_rand import Q_acos import Q_log2 import VectorRotate import Vector4Scale import VectorNormalize2 import VectorNormalize import CrossProduct import VectorInverse import VectorNormalizeFast import DistanceSquared import Distance import VectorLengthSquared import VectorLength import VectorCompare import AddPointToBounds import ClearBounds import RadiusFromBounds import NormalizeColor import ColorBytes4 import ColorBytes3 import _VectorMA import _VectorScale import _VectorCopy import _VectorAdd import _VectorSubtract import _DotProduct import ByteToDir import DirToByte import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import FloatSwap import LongSwap import ShortSwap import acos import fabs import abs import tan import atan2 import cos import sin import sqrt import floor import ceil import memcpy import memset import memmove import sscanf import vsprintf import _atoi import atoi import _atof import atof import toupper import tolower import strncpy import strstr import strchr import strcmp import strcpy import strcat import strlen import rand import srand import qsort lit align 1 LABELV $467 byte 1 37 byte 1 105 byte 1 58 byte 1 76 byte 1 97 byte 1 110 byte 1 100 byte 1 10 byte 1 0 align 1 LABELV $456 byte 1 37 byte 1 105 byte 1 58 byte 1 115 byte 1 116 byte 1 101 byte 1 101 byte 1 112 byte 1 10 byte 1 0 align 1 LABELV $445 byte 1 37 byte 1 105 byte 1 58 byte 1 107 byte 1 105 byte 1 99 byte 1 107 byte 1 111 byte 1 102 byte 1 102 byte 1 10 byte 1 0 align 1 LABELV $414 byte 1 37 byte 1 105 byte 1 58 byte 1 108 byte 1 105 byte 1 102 byte 1 116 byte 1 10 byte 1 0 align 1 LABELV $387 byte 1 37 byte 1 105 byte 1 58 byte 1 97 byte 1 108 byte 1 108 byte 1 115 byte 1 111 byte 1 108 byte 1 105 byte 1 100 byte 1 10 byte 1 0