data
export gPMDoSlowFall
align 4
LABELV gPMDoSlowFall
byte 4 0
export pm_stopspeed
align 4
LABELV pm_stopspeed
byte 4 1120403456
export pm_duckScale
align 4
LABELV pm_duckScale
byte 4 1056964608
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 forceSpeedLevels
align 4
LABELV forceSpeedLevels
byte 4 1065353216
byte 4 1067450368
byte 4 1069547520
byte 4 1071644672
export forcePowerNeeded
align 4
LABELV forcePowerNeeded
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 999
byte 4 65
byte 4 10
byte 4 50
byte 4 20
byte 4 20
byte 4 20
byte 4 30
byte 4 1
byte 4 50
byte 4 50
byte 4 50
byte 4 50
byte 4 50
byte 4 20
byte 4 20
byte 4 0
byte 4 2
byte 4 20
byte 4 60
byte 4 10
byte 4 50
byte 4 20
byte 4 20
byte 4 20
byte 4 30
byte 4 1
byte 4 50
byte 4 25
byte 4 25
byte 4 33
byte 4 33
byte 4 20
byte 4 20
byte 4 0
byte 4 1
byte 4 20
byte 4 50
byte 4 10
byte 4 50
byte 4 20
byte 4 20
byte 4 20
byte 4 60
byte 4 1
byte 4 50
byte 4 10
byte 4 10
byte 4 25
byte 4 25
byte 4 20
byte 4 20
byte 4 0
byte 4 0
byte 4 20
export forceJumpHeight
align 4
LABELV forceJumpHeight
byte 4 1107296256
byte 4 1119879168
byte 4 1128267776
byte 4 1136656384
export forceJumpStrength
align 4
LABELV forceJumpStrength
byte 4 1130430464
byte 4 1137836032
byte 4 1142128640
byte 4 1146224640
export PM_GetSaberStance
code
proc PM_GetSaberStance 0 0
file "../bg_pmove.c"
line 148
;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:#define MAX_WEAPON_CHARGE_TIME 5000
;11:
;12:pmove_t		*pm;
;13:pml_t		pml;
;14:
;15:qboolean gPMDoSlowFall = qfalse;
;16:
;17:// movement parameters
;18:float	pm_stopspeed = 100.0f;
;19:float	pm_duckScale = 0.50f;
;20:float	pm_swimScale = 0.50f;
;21:float	pm_wadeScale = 0.70f;
;22:
;23:float	pm_accelerate = 10.0f;
;24:float	pm_airaccelerate = 1.0f;
;25:float	pm_wateraccelerate = 4.0f;
;26:float	pm_flyaccelerate = 8.0f;
;27:
;28:float	pm_friction = 6.0f;
;29:float	pm_waterfriction = 1.0f;
;30:float	pm_flightfriction = 3.0f;
;31:float	pm_spectatorfriction = 5.0f;
;32:
;33:int		c_pmove = 0;
;34:
;35:float forceSpeedLevels[4] = 
;36:{
;37:	1, //rank 0?
;38:	1.25,
;39:	1.5,
;40:	1.75
;41:};
;42:
;43:int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] = 
;44:{
;45:	{ //nothing should be usable at rank 0..
;46:		999,//FP_HEAL,//instant
;47:		999,//FP_LEVITATION,//hold/duration
;48:		999,//FP_SPEED,//duration
;49:		999,//FP_PUSH,//hold/duration
;50:		999,//FP_PULL,//hold/duration
;51:		999,//FP_TELEPATHY,//instant
;52:		999,//FP_GRIP,//hold/duration
;53:		999,//FP_LIGHTNING,//hold/duration
;54:		999,//FP_RAGE,//duration
;55:		999,//FP_PROTECT,//duration
;56:		999,//FP_ABSORB,//duration
;57:		999,//FP_TEAM_HEAL,//instant
;58:		999,//FP_TEAM_FORCE,//instant
;59:		999,//FP_DRAIN,//hold/duration
;60:		999,//FP_SEE,//duration
;61:		999,//FP_SABERATTACK,
;62:		999,//FP_SABERDEFEND,
;63:		999//FP_SABERTHROW,
;64:		//NUM_FORCE_POWERS
;65:	},
;66:	{
;67:		65,//FP_HEAL,//instant //was 25, but that was way too little
;68:		10,//FP_LEVITATION,//hold/duration
;69:		50,//FP_SPEED,//duration
;70:		20,//FP_PUSH,//hold/duration
;71:		20,//FP_PULL,//hold/duration
;72:		20,//FP_TELEPATHY,//instant
;73:		30,//FP_GRIP,//hold/duration
;74:		1,//FP_LIGHTNING,//hold/duration
;75:		50,//FP_RAGE,//duration
;76:		50,//FP_PROTECT,//duration
;77:		50,//FP_ABSORB,//duration
;78:		50,//FP_TEAM_HEAL,//instant
;79:		50,//FP_TEAM_FORCE,//instant
;80:		20,//FP_DRAIN,//hold/duration
;81:		20,//FP_SEE,//duration
;82:		0,//FP_SABERATTACK,
;83:		2,//FP_SABERDEFEND,
;84:		20//FP_SABERTHROW,
;85:		//NUM_FORCE_POWERS
;86:	},
;87:	{
;88:		60,//FP_HEAL,//instant
;89:		10,//FP_LEVITATION,//hold/duration
;90:		50,//FP_SPEED,//duration
;91:		20,//FP_PUSH,//hold/duration
;92:		20,//FP_PULL,//hold/duration
;93:		20,//FP_TELEPATHY,//instant
;94:		30,//FP_GRIP,//hold/duration
;95:		1,//FP_LIGHTNING,//hold/duration
;96:		50,//FP_RAGE,//duration
;97:		25,//FP_PROTECT,//duration
;98:		25,//FP_ABSORB,//duration
;99:		33,//FP_TEAM_HEAL,//instant
;100:		33,//FP_TEAM_FORCE,//instant
;101:		20,//FP_DRAIN,//hold/duration
;102:		20,//FP_SEE,//duration
;103:		0,//FP_SABERATTACK,
;104:		1,//FP_SABERDEFEND,
;105:		20//FP_SABERTHROW,
;106:		//NUM_FORCE_POWERS
;107:	},
;108:	{
;109:		50,//FP_HEAL,//instant //You get 5 points of health.. for 50 force points!
;110:		10,//FP_LEVITATION,//hold/duration
;111:		50,//FP_SPEED,//duration
;112:		20,//FP_PUSH,//hold/duration
;113:		20,//FP_PULL,//hold/duration
;114:		20,//FP_TELEPATHY,//instant
;115:		60,//FP_GRIP,//hold/duration
;116:		1,//FP_LIGHTNING,//hold/duration
;117:		50,//FP_RAGE,//duration
;118:		10,//FP_PROTECT,//duration
;119:		10,//FP_ABSORB,//duration
;120:		25,//FP_TEAM_HEAL,//instant
;121:		25,//FP_TEAM_FORCE,//instant
;122:		20,//FP_DRAIN,//hold/duration
;123:		20,//FP_SEE,//duration
;124:		0,//FP_SABERATTACK,
;125:		0,//FP_SABERDEFEND,
;126:		20//FP_SABERTHROW,
;127:		//NUM_FORCE_POWERS
;128:	}
;129:};
;130:
;131:float forceJumpHeight[NUM_FORCE_POWER_LEVELS] = 
;132:{
;133:	32,//normal jump (+stepheight+crouchdiff = 66)
;134:	96,//(+stepheight+crouchdiff = 130)
;135:	192,//(+stepheight+crouchdiff = 226)
;136:	384//(+stepheight+crouchdiff = 418)
;137:};
;138:
;139:float forceJumpStrength[NUM_FORCE_POWER_LEVELS] = 
;140:{
;141:	JUMP_VELOCITY,//normal jump
;142:	420,
;143:	590,
;144:	840
;145:};
;146:
;147:int PM_GetSaberStance(void)
;148:{
line 149
;149:	if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 2
NEI4 $68
line 150
;150:	{ //medium
line 151
;151:		return BOTH_STAND2;
CNSTI4 573
RETI4
ADDRGP4 $67
JUMPV
LABELV $68
line 153
;152:	}
;153:	if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_3)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
NEI4 $70
line 154
;154:	{ //strong
line 155
;155:		return BOTH_SABERSLOW_STANCE;
CNSTI4 563
RETI4
ADDRGP4 $67
JUMPV
LABELV $70
line 159
;156:	}
;157:
;158:	//fast
;159:	return BOTH_SABERFAST_STANCE;
CNSTI4 562
RETI4
LABELV $67
endproc PM_GetSaberStance 0 0
export PM_DoSlowFall
proc PM_DoSlowFall 4 0
line 163
;160:}
;161:
;162:qboolean PM_DoSlowFall(void)
;163:{
line 164
;164:	if ( ( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT || (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_LEFT ) && pm->ps->legsTimer > 500 )
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 915
EQI4 $75
ADDRLP4 0
INDIRI4
CNSTI4 918
NEI4 $73
LABELV $75
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 500
LEI4 $73
line 165
;165:	{
line 166
;166:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $72
JUMPV
LABELV $73
line 169
;167:	}
;168:
;169:	return qfalse;
CNSTI4 0
RETI4
LABELV $72
endproc PM_DoSlowFall 4 0
export PM_AddEvent
proc PM_AddEvent 0 12
line 178
;170:}
;171:
;172:/*
;173:===============
;174:PM_AddEvent
;175:
;176:===============
;177:*/
;178:void PM_AddEvent( int newEvent ) {
line 179
;179:	BG_AddPredictableEventToPlayerstate( newEvent, 0, pm->ps );
ADDRFP4 0
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
ADDRGP4 BG_AddPredictableEventToPlayerstate
CALLV
pop
line 180
;180:}
LABELV $76
endproc PM_AddEvent 0 12
export PM_AddEventWithParm
proc PM_AddEventWithParm 0 12
line 183
;181:
;182:void PM_AddEventWithParm( int newEvent, int parm ) 
;183:{
line 184
;184:	BG_AddPredictableEventToPlayerstate( newEvent, parm, pm->ps );
ADDRFP4 0
INDIRI4
ARGI4
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
ADDRGP4 BG_AddPredictableEventToPlayerstate
CALLV
pop
line 185
;185:}
LABELV $77
endproc PM_AddEventWithParm 0 12
export PM_AddTouchEnt
proc PM_AddTouchEnt 12 0
line 192
;186:
;187:/*
;188:===============
;189:PM_AddTouchEnt
;190:===============
;191:*/
;192:void PM_AddTouchEnt( int entityNum ) {
line 195
;193:	int		i;
;194:
;195:	if ( entityNum == ENTITYNUM_WORLD ) {
ADDRFP4 0
INDIRI4
CNSTI4 1022
NEI4 $79
line 196
;196:		return;
ADDRGP4 $78
JUMPV
LABELV $79
line 198
;197:	}
;198:	if ( pm->numtouch == MAXTOUCH ) {
ADDRGP4 pm
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
CNSTI4 32
NEI4 $81
line 199
;199:		return;
ADDRGP4 $78
JUMPV
LABELV $81
line 203
;200:	}
;201:
;202:	// see if it is already added
;203:	for ( i = 0 ; i < pm->numtouch ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 $86
JUMPV
LABELV $83
line 204
;204:		if ( pm->touchents[ i ] == entityNum ) {
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 pm
INDIRP4
CNSTI4 56
ADDP4
ADDP4
INDIRI4
ADDRFP4 0
INDIRI4
NEI4 $87
line 205
;205:			return;
ADDRGP4 $78
JUMPV
LABELV $87
line 207
;206:		}
;207:	}
LABELV $84
line 203
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
LABELV $86
ADDRLP4 0
INDIRI4
ADDRGP4 pm
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
LTI4 $83
line 210
;208:
;209:	// add it
;210:	pm->touchents[pm->numtouch] = entityNum;
ADDRLP4 4
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 4
INDIRP4
CNSTI4 56
ADDP4
ADDP4
ADDRFP4 0
INDIRI4
ASGNI4
line 211
;211:	pm->numtouch++;
ADDRLP4 8
ADDRGP4 pm
INDIRP4
CNSTI4 52
ADDP4
ASGNP4
ADDRLP4 8
INDIRP4
ADDRLP4 8
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 212
;212:}
LABELV $78
endproc PM_AddTouchEnt 12 0
export PM_ClipVelocity
proc PM_ClipVelocity 32 0
line 222
;213:
;214:
;215:/*
;216:==================
;217:PM_ClipVelocity
;218:
;219:Slide off of the impacting surface
;220:==================
;221:*/
;222:void PM_ClipVelocity( vec3_t in, vec3_t normal, vec3_t out, float overbounce ) {
line 227
;223:	float	backoff;
;224:	float	change;
;225:	int		i;
;226:	
;227:	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 229
;228:	
;229:	if ( backoff < 0 ) {
ADDRLP4 8
INDIRF4
CNSTF4 0
GEF4 $90
line 230
;230:		backoff *= overbounce;
ADDRLP4 8
ADDRLP4 8
INDIRF4
ADDRFP4 12
INDIRF4
MULF4
ASGNF4
line 231
;231:	} else {
ADDRGP4 $91
JUMPV
LABELV $90
line 232
;232:		backoff /= overbounce;
ADDRLP4 8
ADDRLP4 8
INDIRF4
ADDRFP4 12
INDIRF4
DIVF4
ASGNF4
line 233
;233:	}
LABELV $91
line 235
;234:
;235:	for ( i=0 ; i<3 ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $92
line 236
;236:		change = normal[i]*backoff;
ADDRLP4 4
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRFP4 4
INDIRP4
ADDP4
INDIRF4
ADDRLP4 8
INDIRF4
MULF4
ASGNF4
line 237
;237:		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 238
;238:	}
LABELV $93
line 235
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $92
line 239
;239:}
LABELV $89
endproc PM_ClipVelocity 32 0
proc PM_Friction 52 4
line 249
;240:
;241:
;242:/*
;243:==================
;244:PM_Friction
;245:
;246:Handles both ground friction and water friction
;247:==================
;248:*/
;249:static void PM_Friction( void ) {
line 255
;250:	vec3_t	vec;
;251:	float	*vel;
;252:	float	speed, newspeed, control;
;253:	float	drop;
;254:	
;255:	vel = pm->ps->velocity;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
line 257
;256:	
;257:	VectorCopy( vel, vec );
ADDRLP4 16
ADDRLP4 0
INDIRP4
INDIRB
ASGNB 12
line 258
;258:	if ( pml.walking ) {
ADDRGP4 pml+44
INDIRI4
CNSTI4 0
EQI4 $97
line 259
;259:		vec[2] = 0;	// ignore slope movement
ADDRLP4 16+8
CNSTF4 0
ASGNF4
line 260
;260:	}
LABELV $97
line 262
;261:
;262:	speed = VectorLength(vec);
ADDRLP4 16
ARGP4
ADDRLP4 32
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 8
ADDRLP4 32
INDIRF4
ASGNF4
line 263
;263:	if (speed < 1) {
ADDRLP4 8
INDIRF4
CNSTF4 1065353216
GEF4 $101
line 264
;264:		vel[0] = 0;
ADDRLP4 0
INDIRP4
CNSTF4 0
ASGNF4
line 265
;265:		vel[1] = 0;		// allow sinking underwater
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTF4 0
ASGNF4
line 267
;266:		// FIXME: still have z friction underwater?
;267:		return;
ADDRGP4 $96
JUMPV
LABELV $101
line 270
;268:	}
;269:
;270:	drop = 0;
ADDRLP4 12
CNSTF4 0
ASGNF4
line 273
;271:
;272:	// apply ground friction
;273:	if ( pm->waterlevel <= 1 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 1
GTI4 $103
line 274
;274:		if ( pml.walking && !(pml.groundTrace.surfaceFlags & SURF_SLICK) ) {
ADDRLP4 36
CNSTI4 0
ASGNI4
ADDRGP4 pml+44
INDIRI4
ADDRLP4 36
INDIRI4
EQI4 $105
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 16384
BANDI4
ADDRLP4 36
INDIRI4
NEI4 $105
line 276
;275:			// if getting knocked back, no friction
;276:			if ( ! (pm->ps->pm_flags & PMF_TIME_KNOCKBACK) ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 64
BANDI4
CNSTI4 0
NEI4 $110
line 277
;277:				control = speed < pm_stopspeed ? pm_stopspeed : speed;
ADDRLP4 8
INDIRF4
ADDRGP4 pm_stopspeed
INDIRF4
GEF4 $113
ADDRLP4 40
ADDRGP4 pm_stopspeed
INDIRF4
ASGNF4
ADDRGP4 $114
JUMPV
LABELV $113
ADDRLP4 40
ADDRLP4 8
INDIRF4
ASGNF4
LABELV $114
ADDRLP4 28
ADDRLP4 40
INDIRF4
ASGNF4
line 278
;278:				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 279
;279:			}
LABELV $110
line 280
;280:		}
LABELV $105
line 281
;281:	}
LABELV $103
line 284
;282:
;283:	// apply water friction even if just wading
;284:	if ( pm->waterlevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 0
EQI4 $116
line 285
;285:		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 216
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDRGP4 pml+36
INDIRF4
MULF4
ADDF4
ASGNF4
line 286
;286:	}
LABELV $116
line 288
;287:
;288:	if ( pm->ps->pm_type == PM_SPECTATOR || pm->ps->pm_type == PM_FLOAT )
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 3
EQI4 $121
ADDRLP4 36
INDIRI4
CNSTI4 1
NEI4 $119
LABELV $121
line 289
;289:	{
line 290
;290:		if (pm->ps->pm_type == PM_FLOAT)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $122
line 291
;291:		{ //almost no friction while floating
line 292
;292:			drop += speed*0.1*pml.frametime;
ADDRLP4 12
ADDRLP4 12
INDIRF4
CNSTF4 1036831949
ADDRLP4 8
INDIRF4
MULF4
ADDRGP4 pml+36
INDIRF4
MULF4
ADDF4
ASGNF4
line 293
;293:		}
ADDRGP4 $123
JUMPV
LABELV $122
line 295
;294:		else
;295:		{
line 296
;296:			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 297
;297:		}
LABELV $123
line 298
;298:	}
LABELV $119
line 301
;299:
;300:	// scale the velocity
;301:	newspeed = speed - drop;
ADDRLP4 4
ADDRLP4 8
INDIRF4
ADDRLP4 12
INDIRF4
SUBF4
ASGNF4
line 302
;302:	if (newspeed < 0) {
ADDRLP4 4
INDIRF4
CNSTF4 0
GEF4 $126
line 303
;303:		newspeed = 0;
ADDRLP4 4
CNSTF4 0
ASGNF4
line 304
;304:	}
LABELV $126
line 305
;305:	newspeed /= speed;
ADDRLP4 4
ADDRLP4 4
INDIRF4
ADDRLP4 8
INDIRF4
DIVF4
ASGNF4
line 307
;306:
;307:	vel[0] = vel[0] * newspeed;
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
INDIRF4
ADDRLP4 4
INDIRF4
MULF4
ASGNF4
line 308
;308:	vel[1] = vel[1] * newspeed;
ADDRLP4 44
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 44
INDIRP4
ADDRLP4 44
INDIRP4
INDIRF4
ADDRLP4 4
INDIRF4
MULF4
ASGNF4
line 309
;309:	vel[2] = vel[2] * newspeed;
ADDRLP4 48
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRF4
ADDRLP4 4
INDIRF4
MULF4
ASGNF4
line 310
;310:}
LABELV $96
endproc PM_Friction 52 4
proc PM_Accelerate 32 0
line 320
;311:
;312:
;313:/*
;314:==============
;315:PM_Accelerate
;316:
;317:Handles user intended acceleration
;318:==============
;319:*/
;320:static void PM_Accelerate( vec3_t wishdir, float wishspeed, float accel ) {
line 326
;321:#if 1
;322:	// q2 style
;323:	int			i;
;324:	float		addspeed, accelspeed, currentspeed;
;325:
;326:	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 327
;327:	addspeed = wishspeed - currentspeed;
ADDRLP4 8
ADDRFP4 4
INDIRF4
ADDRLP4 12
INDIRF4
SUBF4
ASGNF4
line 328
;328:	if (addspeed <= 0) {
ADDRLP4 8
INDIRF4
CNSTF4 0
GTF4 $129
line 329
;329:		return;
ADDRGP4 $128
JUMPV
LABELV $129
line 331
;330:	}
;331:	accelspeed = accel*pml.frametime*wishspeed;
ADDRLP4 4
ADDRFP4 8
INDIRF4
ADDRGP4 pml+36
INDIRF4
MULF4
ADDRFP4 4
INDIRF4
MULF4
ASGNF4
line 332
;332:	if (accelspeed > addspeed) {
ADDRLP4 4
INDIRF4
ADDRLP4 8
INDIRF4
LEF4 $132
line 333
;333:		accelspeed = addspeed;
ADDRLP4 4
ADDRLP4 8
INDIRF4
ASGNF4
line 334
;334:	}
LABELV $132
line 336
;335:	
;336:	for (i=0 ; i<3 ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $134
line 337
;337:		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 338
;338:	}
LABELV $135
line 336
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $134
line 357
;339:#else
;340:	// proper way (avoids strafe jump maxspeed bug), but feels bad
;341:	vec3_t		wishVelocity;
;342:	vec3_t		pushDir;
;343:	float		pushLen;
;344:	float		canPush;
;345:
;346:	VectorScale( wishdir, wishspeed, wishVelocity );
;347:	VectorSubtract( wishVelocity, pm->ps->velocity, pushDir );
;348:	pushLen = VectorNormalize( pushDir );
;349:
;350:	canPush = accel*pml.frametime*wishspeed;
;351:	if (canPush > pushLen) {
;352:		canPush = pushLen;
;353:	}
;354:
;355:	VectorMA( pm->ps->velocity, canPush, pushDir, pm->ps->velocity );
;356:#endif
;357:}
LABELV $128
endproc PM_Accelerate 32 0
proc PM_CmdScale 48 4
line 370
;358:
;359:
;360:
;361:/*
;362:============
;363:PM_CmdScale
;364:
;365:Returns the scale factor to apply to cmd movements
;366:This allows the clients to use axial -127 to 127 values for all directions
;367:without getting a sqrt(2) distortion in speed.
;368:============
;369:*/
;370:static float PM_CmdScale( usercmd_t *cmd ) {
line 374
;371:	int		max;
;372:	float	total;
;373:	float	scale;
;374:	int		umove = 0; //cmd->upmove;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 377
;375:			//don't factor upmove into scaling speed
;376:
;377:	max = abs( cmd->forwardmove );
ADDRFP4 0
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
ARGI4
ADDRLP4 16
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 16
INDIRI4
ASGNI4
line 378
;378:	if ( abs( cmd->rightmove ) > max ) {
ADDRFP4 0
INDIRP4
CNSTI4 25
ADDP4
INDIRI1
CVII4 1
ARGI4
ADDRLP4 20
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
ADDRLP4 0
INDIRI4
LEI4 $139
line 379
;379:		max = abs( cmd->rightmove );
ADDRFP4 0
INDIRP4
CNSTI4 25
ADDP4
INDIRI1
CVII4 1
ARGI4
ADDRLP4 24
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 24
INDIRI4
ASGNI4
line 380
;380:	}
LABELV $139
line 381
;381:	if ( abs( umove ) > max ) {
ADDRLP4 4
INDIRI4
ARGI4
ADDRLP4 24
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 24
INDIRI4
ADDRLP4 0
INDIRI4
LEI4 $141
line 382
;382:		max = abs( umove );
ADDRLP4 4
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 0
ADDRLP4 28
INDIRI4
ASGNI4
line 383
;383:	}
LABELV $141
line 384
;384:	if ( !max ) {
ADDRLP4 0
INDIRI4
CNSTI4 0
NEI4 $143
line 385
;385:		return 0;
CNSTF4 0
RETF4
ADDRGP4 $138
JUMPV
LABELV $143
line 388
;386:	}
;387:
;388:	total = sqrt( cmd->forwardmove * cmd->forwardmove
ADDRLP4 28
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 32
ADDRLP4 28
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
ASGNI4
ADDRLP4 36
ADDRLP4 28
INDIRP4
CNSTI4 25
ADDP4
INDIRI1
CVII4 1
ASGNI4
ADDRLP4 32
INDIRI4
ADDRLP4 32
INDIRI4
MULI4
ADDRLP4 36
INDIRI4
ADDRLP4 36
INDIRI4
MULI4
ADDI4
ADDRLP4 4
INDIRI4
ADDRLP4 4
INDIRI4
MULI4
ADDI4
CVIF4 4
ARGF4
ADDRLP4 44
ADDRGP4 sqrt
CALLF4
ASGNF4
ADDRLP4 8
ADDRLP4 44
INDIRF4
ASGNF4
line 390
;389:		+ cmd->rightmove * cmd->rightmove + umove * umove );
;390:	scale = (float)pm->ps->speed * max / ( 127.0 * total );
ADDRLP4 12
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 0
INDIRI4
CVIF4 4
MULF4
CNSTF4 1123942400
ADDRLP4 8
INDIRF4
MULF4
DIVF4
ASGNF4
line 392
;391:
;392:	return scale;
ADDRLP4 12
INDIRF4
RETF4
LABELV $138
endproc PM_CmdScale 48 4
proc PM_SetMovementDir 72 0
line 404
;393:}
;394:
;395:
;396:/*
;397:================
;398:PM_SetMovementDir
;399:
;400:Determine the rotation of the legs reletive
;401:to the facing dir
;402:================
;403:*/
;404:static void PM_SetMovementDir( void ) {
line 405
;405:	if ( pm->cmd.forwardmove || pm->cmd.rightmove ) {
ADDRLP4 0
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
NEI4 $148
ADDRLP4 0
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
EQI4 $146
LABELV $148
line 406
;406:		if ( pm->cmd.rightmove == 0 && pm->cmd.forwardmove > 0 ) {
ADDRLP4 8
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRLP4 8
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 12
INDIRI4
NEI4 $149
ADDRLP4 8
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 12
INDIRI4
LEI4 $149
line 407
;407:			pm->ps->movementDir = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 0
ASGNI4
line 408
;408:		} else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove > 0 ) {
ADDRGP4 $147
JUMPV
LABELV $149
ADDRLP4 16
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 20
CNSTI4 0
ASGNI4
ADDRLP4 16
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 20
INDIRI4
GEI4 $151
ADDRLP4 16
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 20
INDIRI4
LEI4 $151
line 409
;409:			pm->ps->movementDir = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 1
ASGNI4
line 410
;410:		} else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove == 0 ) {
ADDRGP4 $147
JUMPV
LABELV $151
ADDRLP4 24
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 28
CNSTI4 0
ASGNI4
ADDRLP4 24
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 28
INDIRI4
GEI4 $153
ADDRLP4 24
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 28
INDIRI4
NEI4 $153
line 411
;411:			pm->ps->movementDir = 2;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 2
ASGNI4
line 412
;412:		} else if ( pm->cmd.rightmove < 0 && pm->cmd.forwardmove < 0 ) {
ADDRGP4 $147
JUMPV
LABELV $153
ADDRLP4 32
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 36
CNSTI4 0
ASGNI4
ADDRLP4 32
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 36
INDIRI4
GEI4 $155
ADDRLP4 32
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 36
INDIRI4
GEI4 $155
line 413
;413:			pm->ps->movementDir = 3;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 3
ASGNI4
line 414
;414:		} else if ( pm->cmd.rightmove == 0 && pm->cmd.forwardmove < 0 ) {
ADDRGP4 $147
JUMPV
LABELV $155
ADDRLP4 40
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 44
CNSTI4 0
ASGNI4
ADDRLP4 40
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 44
INDIRI4
NEI4 $157
ADDRLP4 40
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 44
INDIRI4
GEI4 $157
line 415
;415:			pm->ps->movementDir = 4;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 4
ASGNI4
line 416
;416:		} else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove < 0 ) {
ADDRGP4 $147
JUMPV
LABELV $157
ADDRLP4 48
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 52
CNSTI4 0
ASGNI4
ADDRLP4 48
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 52
INDIRI4
LEI4 $159
ADDRLP4 48
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 52
INDIRI4
GEI4 $159
line 417
;417:			pm->ps->movementDir = 5;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 5
ASGNI4
line 418
;418:		} else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove == 0 ) {
ADDRGP4 $147
JUMPV
LABELV $159
ADDRLP4 56
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 60
CNSTI4 0
ASGNI4
ADDRLP4 56
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 60
INDIRI4
LEI4 $161
ADDRLP4 56
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 60
INDIRI4
NEI4 $161
line 419
;419:			pm->ps->movementDir = 6;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 6
ASGNI4
line 420
;420:		} else if ( pm->cmd.rightmove > 0 && pm->cmd.forwardmove > 0 ) {
ADDRGP4 $147
JUMPV
LABELV $161
ADDRLP4 64
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 68
CNSTI4 0
ASGNI4
ADDRLP4 64
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 68
INDIRI4
LEI4 $147
ADDRLP4 64
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 68
INDIRI4
LEI4 $147
line 421
;421:			pm->ps->movementDir = 7;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 7
ASGNI4
line 422
;422:		}
line 423
;423:	} else {
ADDRGP4 $147
JUMPV
LABELV $146
line 427
;424:		// if they aren't actively going directly sideways,
;425:		// change the animation to the diagonal so they
;426:		// don't stop too crooked
;427:		if ( pm->ps->movementDir == 2 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
INDIRI4
CNSTI4 2
NEI4 $165
line 428
;428:			pm->ps->movementDir = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 1
ASGNI4
line 429
;429:		} else if ( pm->ps->movementDir == 6 ) {
ADDRGP4 $166
JUMPV
LABELV $165
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
INDIRI4
CNSTI4 6
NEI4 $167
line 430
;430:			pm->ps->movementDir = 7;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 104
ADDP4
CNSTI4 7
ASGNI4
line 431
;431:		} 
LABELV $167
LABELV $166
line 432
;432:	}
LABELV $147
line 433
;433:}
LABELV $145
endproc PM_SetMovementDir 72 0
export PM_ForceJumpingUp
proc PM_ForceJumpingUp 40 16
line 438
;434:
;435:#define METROID_JUMP 1
;436:
;437:qboolean PM_ForceJumpingUp(void)
;438:{
line 439
;439:	if ( !(pm->ps->fd.forcePowersActive&(1<<FP_LEVITATION)) && pm->ps->fd.forceJumpCharge )
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
NEI4 $170
ADDRLP4 0
INDIRP4
CNSTI4 1096
ADDP4
INDIRF4
CNSTF4 0
EQF4 $170
line 440
;440:	{//already jumped and let go
line 441
;441:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $170
line 444
;442:	}
;443:
;444:	if ( BG_InSpecialJump( pm->ps->legsAnim ) )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 4
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $172
line 445
;445:	{
line 446
;446:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $172
line 449
;447:	}
;448:
;449:	if (BG_SaberInSpecial(pm->ps->saberMove))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $174
line 450
;450:	{
line 451
;451:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $174
line 454
;452:	}
;453:
;454:	if (BG_SaberInSpecialAttack(pm->ps->legsAnim))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 12
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 12
INDIRI4
CNSTI4 0
EQI4 $176
line 455
;455:	{
line 456
;456:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $176
line 459
;457:	}
;458:
;459:	if (BG_HasYsalamiri(pm->gametype, pm->ps))
ADDRLP4 16
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
INDIRP4
INDIRP4
ARGP4
ADDRLP4 20
ADDRGP4 BG_HasYsalamiri
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
EQI4 $178
line 460
;460:	{
line 461
;461:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $178
line 464
;462:	}
;463:
;464:	if (!BG_CanUseFPNow(pm->gametype, pm->ps, pm->cmd.serverTime, FP_LEVITATION))
ADDRLP4 24
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 24
INDIRP4
INDIRP4
ARGP4
ADDRLP4 24
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 28
ADDRGP4 BG_CanUseFPNow
CALLI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 0
NEI4 $180
line 465
;465:	{
line 466
;466:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $169
JUMPV
LABELV $180
line 469
;467:	}
;468:
;469:	if ( pm->ps->groundEntityNum == ENTITYNUM_NONE && //in air
ADDRLP4 32
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 32
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $182
ADDRLP4 36
CNSTI4 0
ASGNI4
ADDRLP4 32
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 2
BANDI4
ADDRLP4 36
INDIRI4
EQI4 $182
ADDRLP4 32
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
ADDRLP4 36
INDIRI4
LEI4 $182
ADDRLP4 32
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 0
LEF4 $182
line 473
;470:		(pm->ps->pm_flags & PMF_JUMP_HELD) && //jumped
;471:		pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_0 && //force-jump capable
;472:		pm->ps->velocity[2] > 0 )//going up
;473:	{
line 474
;474:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $169
JUMPV
LABELV $182
line 476
;475:	}
;476:	return qfalse;
CNSTI4 0
RETI4
LABELV $169
endproc PM_ForceJumpingUp 40 16
proc PM_JumpForDir 8 16
line 480
;477:}
;478:
;479:static void PM_JumpForDir( void )
;480:{
line 481
;481:	int anim = BOTH_JUMP1;
ADDRLP4 0
CNSTI4 856
ASGNI4
line 482
;482:	if ( pm->cmd.forwardmove > 0 ) 
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $185
line 483
;483:	{
line 484
;484:		anim = BOTH_JUMP1;
ADDRLP4 0
CNSTI4 856
ASGNI4
line 485
;485:		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 486
;486:	} 
ADDRGP4 $186
JUMPV
LABELV $185
line 487
;487:	else if ( pm->cmd.forwardmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $187
line 488
;488:	{
line 489
;489:		anim = BOTH_JUMPBACK1;
ADDRLP4 0
CNSTI4 860
ASGNI4
line 490
;490:		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 491
;491:	}
ADDRGP4 $188
JUMPV
LABELV $187
line 492
;492:	else if ( pm->cmd.rightmove > 0 ) 
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $189
line 493
;493:	{
line 494
;494:		anim = BOTH_JUMPRIGHT1;
ADDRLP4 0
CNSTI4 866
ASGNI4
line 495
;495:		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 496
;496:	}
ADDRGP4 $190
JUMPV
LABELV $189
line 497
;497:	else if ( pm->cmd.rightmove < 0 ) 
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $191
line 498
;498:	{
line 499
;499:		anim = BOTH_JUMPLEFT1;
ADDRLP4 0
CNSTI4 863
ASGNI4
line 500
;500:		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 501
;501:	}
ADDRGP4 $192
JUMPV
LABELV $191
line 503
;502:	else
;503:	{
line 504
;504:		anim = BOTH_JUMP1;
ADDRLP4 0
CNSTI4 856
ASGNI4
line 505
;505:		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 506
;506:	}
LABELV $192
LABELV $190
LABELV $188
LABELV $186
line 507
;507:	if(!BG_InDeathAnim(pm->ps->legsAnim))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 4
ADDRGP4 BG_InDeathAnim
CALLI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 0
NEI4 $193
line 508
;508:	{
line 509
;509:		PM_SetAnim(SETANIM_LEGS,anim,SETANIM_FLAG_OVERRIDE, 100);
CNSTI4 2
ARGI4
ADDRLP4 0
INDIRI4
ARGI4
CNSTI4 1
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 510
;510:	}
LABELV $193
line 511
;511:}
LABELV $184
endproc PM_JumpForDir 8 16
export PM_SetPMViewAngle
proc PM_SetPMViewAngle 12 0
line 514
;512:
;513:void PM_SetPMViewAngle(playerState_t *ps, vec3_t angle, usercmd_t *ucmd)
;514:{
line 517
;515:	int			i;
;516:
;517:	for (i=0 ; i<3 ; i++)
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $196
line 518
;518:	{ // set the delta angle
line 521
;519:		int		cmdAngle;
;520:
;521:		cmdAngle = ANGLE2SHORT(angle[i]);
ADDRLP4 4
CNSTF4 1199570944
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRFP4 4
INDIRP4
ADDP4
INDIRF4
MULF4
CNSTF4 1135869952
DIVF4
CVFI4 4
CNSTI4 65535
BANDI4
ASGNI4
line 522
;522:		ps->delta_angles[i] = cmdAngle - ucmd->angles[i];
ADDRLP4 8
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 68
ADDP4
ADDP4
ADDRLP4 4
INDIRI4
ADDRLP4 8
INDIRI4
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ADDP4
INDIRI4
SUBI4
ASGNI4
line 523
;523:	}
LABELV $197
line 517
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $196
line 524
;524:	VectorCopy (angle, ps->viewangles);
ADDRFP4 0
INDIRP4
CNSTI4 156
ADDP4
ADDRFP4 4
INDIRP4
INDIRB
ASGNB 12
line 525
;525:}
LABELV $195
endproc PM_SetPMViewAngle 12 0
export PM_AdjustAngleForWallRun
proc PM_AdjustAngleForWallRun 1216 28
line 528
;526:
;527:qboolean PM_AdjustAngleForWallRun( playerState_t *ps, usercmd_t *ucmd, qboolean doMove )
;528:{
line 529
;529:	if (( (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT || (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_LEFT ) && ps->legsTimer > 500 )
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 915
EQI4 $203
ADDRLP4 0
INDIRI4
CNSTI4 918
NEI4 $201
LABELV $203
ADDRFP4 0
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 500
LEI4 $201
line 530
;530:	{//wall-running and not at end of anim
line 536
;531:		//stick to wall, if there is one
;532:		vec3_t	rt, traceTo, mins, maxs, fwdAngles;
;533:		trace_t	trace;
;534:		float	dist, yawAdjust;
;535:
;536:		VectorSet(mins, -15, -15, 0);
ADDRLP4 1152
CNSTF4 3245342720
ASGNF4
ADDRLP4 44
ADDRLP4 1152
INDIRF4
ASGNF4
ADDRLP4 44+4
ADDRLP4 1152
INDIRF4
ASGNF4
ADDRLP4 44+8
CNSTF4 0
ASGNF4
line 537
;537:		VectorSet(maxs, 15, 15, 24);
ADDRLP4 1156
CNSTF4 1097859072
ASGNF4
ADDRLP4 56
ADDRLP4 1156
INDIRF4
ASGNF4
ADDRLP4 56+4
ADDRLP4 1156
INDIRF4
ASGNF4
ADDRLP4 56+8
CNSTF4 1103101952
ASGNF4
line 538
;538:		VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 20
CNSTF4 0
ASGNF4
ADDRLP4 20+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 20+8
CNSTF4 0
ASGNF4
line 540
;539:
;540:		AngleVectors( fwdAngles, NULL, rt, NULL );
ADDRLP4 20
ARGP4
ADDRLP4 1160
CNSTP4 0
ASGNP4
ADDRLP4 1160
INDIRP4
ARGP4
ADDRLP4 4
ARGP4
ADDRLP4 1160
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 541
;541:		if ( (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT )
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 915
NEI4 $210
line 542
;542:		{
line 543
;543:			dist = 128;
ADDRLP4 16
CNSTF4 1124073472
ASGNF4
line 544
;544:			yawAdjust = -90;
ADDRLP4 1148
CNSTF4 3266576384
ASGNF4
line 545
;545:		}
ADDRGP4 $211
JUMPV
LABELV $210
line 547
;546:		else
;547:		{
line 548
;548:			dist = -128;
ADDRLP4 16
CNSTF4 3271557120
ASGNF4
line 549
;549:			yawAdjust = 90;
ADDRLP4 1148
CNSTF4 1119092736
ASGNF4
line 550
;550:		}
LABELV $211
line 551
;551:		VectorMA( ps->origin, dist, rt, traceTo );
ADDRLP4 1164
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1168
ADDRLP4 16
INDIRF4
ASGNF4
ADDRLP4 32
ADDRLP4 1164
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 4
INDIRF4
ADDRLP4 1168
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 32+4
ADDRLP4 1164
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 4+4
INDIRF4
ADDRLP4 1168
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 32+8
ADDRFP4 0
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 4+8
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDF4
ASGNF4
line 553
;552:		
;553:		pm->trace( &trace, ps->origin, mins, maxs, traceTo, ps->clientNum, MASK_PLAYERSOLID );
ADDRLP4 68
ARGP4
ADDRLP4 1172
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1172
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 44
ARGP4
ADDRLP4 56
ARGP4
ADDRLP4 32
ARGP4
ADDRLP4 1172
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 273
ARGI4
ADDRGP4 pm
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 555
;554:
;555:		if ( trace.fraction < 1.0f )
ADDRLP4 68+8
INDIRF4
CNSTF4 1065353216
GEF4 $216
line 556
;556:		{//still a wall there
line 557
;557:			if ( (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT )
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 915
NEI4 $219
line 558
;558:			{
line 559
;559:				ucmd->rightmove = 127;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 127
ASGNI1
line 560
;560:			}
ADDRGP4 $220
JUMPV
LABELV $219
line 562
;561:			else
;562:			{
line 563
;563:				ucmd->rightmove = -127;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 -127
ASGNI1
line 564
;564:			}
LABELV $220
line 565
;565:			if ( ucmd->upmove < 0 )
ADDRFP4 4
INDIRP4
CNSTI4 26
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $221
line 566
;566:			{
line 567
;567:				ucmd->upmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 26
ADDP4
CNSTI1 0
ASGNI1
line 568
;568:			}
LABELV $221
line 570
;569:			//make me face perpendicular to the wall
;570:			ps->viewangles[YAW] = vectoyaw( trace.plane.normal )+yawAdjust;
ADDRLP4 68+24
ARGP4
ADDRLP4 1176
ADDRGP4 vectoyaw
CALLF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 160
ADDP4
ADDRLP4 1176
INDIRF4
ADDRLP4 1148
INDIRF4
ADDF4
ASGNF4
line 572
;571:
;572:			PM_SetPMViewAngle(ps, ps->viewangles, ucmd);
ADDRLP4 1180
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1180
INDIRP4
ARGP4
ADDRLP4 1180
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 PM_SetPMViewAngle
CALLV
pop
line 574
;573:
;574:			ucmd->angles[YAW] = ANGLE2SHORT( ps->viewangles[YAW] ) - ps->delta_angles[YAW];
ADDRLP4 1184
ADDRFP4 0
INDIRP4
ASGNP4
ADDRFP4 4
INDIRP4
CNSTI4 8
ADDP4
CNSTF4 1199570944
ADDRLP4 1184
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
MULF4
CNSTF4 1135869952
DIVF4
CVFI4 4
CNSTI4 65535
BANDI4
ADDRLP4 1184
INDIRP4
CNSTI4 72
ADDP4
INDIRI4
SUBI4
ASGNI4
line 575
;575:			if ( doMove )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $224
line 576
;576:			{
line 579
;577:				//push me forward
;578:				vec3_t	fwd;
;579:				float	zVel = ps->velocity[2];
ADDRLP4 1188
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
ASGNF4
line 580
;580:				if ( ps->legsTimer > 500 )
ADDRFP4 0
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 500
LEI4 $226
line 581
;581:				{//not at end of anim yet
line 582
;582:					float speed = 175;
ADDRLP4 1204
CNSTF4 1127153664
ASGNF4
line 584
;583:
;584:					fwdAngles[YAW] = ps->viewangles[YAW];
ADDRLP4 20+4
ADDRFP4 0
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 585
;585:					AngleVectors( fwdAngles, fwd, NULL, NULL );
ADDRLP4 20
ARGP4
ADDRLP4 1192
ARGP4
ADDRLP4 1208
CNSTP4 0
ASGNP4
ADDRLP4 1208
INDIRP4
ARGP4
ADDRLP4 1208
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 587
;586:
;587:					if ( ucmd->forwardmove < 0 )
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $229
line 588
;588:					{//slower
line 589
;589:						speed = 100;
ADDRLP4 1204
CNSTF4 1120403456
ASGNF4
line 590
;590:					}
ADDRGP4 $230
JUMPV
LABELV $229
line 591
;591:					else if ( ucmd->forwardmove > 0 )
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $231
line 592
;592:					{
line 593
;593:						speed = 250;//running speed
ADDRLP4 1204
CNSTF4 1132068864
ASGNF4
line 594
;594:					}
LABELV $231
LABELV $230
line 595
;595:					VectorScale( fwd, speed, ps->velocity );
ADDRFP4 0
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1192
INDIRF4
ADDRLP4 1204
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1192+4
INDIRF4
ADDRLP4 1204
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1192+8
INDIRF4
ADDRLP4 1204
INDIRF4
MULF4
ASGNF4
line 596
;596:				}
LABELV $226
line 597
;597:				ps->velocity[2] = zVel;//preserve z velocity
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1188
INDIRF4
ASGNF4
line 599
;598:				//pull me toward the wall, too
;599:				VectorMA( ps->velocity, dist, rt, ps->velocity );
ADDRLP4 1204
ADDRFP4 0
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1204
INDIRP4
ADDRLP4 1204
INDIRP4
INDIRF4
ADDRLP4 4
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1208
INDIRP4
ADDRLP4 1208
INDIRP4
INDIRF4
ADDRLP4 4+4
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1212
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1212
INDIRP4
ADDRLP4 1212
INDIRP4
INDIRF4
ADDRLP4 4+8
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDF4
ASGNF4
line 600
;600:			}
LABELV $224
line 601
;601:			ucmd->forwardmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
CNSTI1 0
ASGNI1
line 602
;602:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $200
JUMPV
LABELV $216
line 604
;603:		}
;604:		else if ( doMove )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $237
line 605
;605:		{//stop it
line 606
;606:			if ( (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT )
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 915
NEI4 $239
line 607
;607:			{
line 608
;608:				PM_SetAnim(SETANIM_BOTH, BOTH_WALL_RUN_RIGHT_STOP, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1176
CNSTI4 3
ASGNI4
ADDRLP4 1176
INDIRI4
ARGI4
CNSTI4 917
ARGI4
ADDRLP4 1176
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 609
;609:			}
ADDRGP4 $240
JUMPV
LABELV $239
line 610
;610:			else if ( (ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_LEFT )
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 918
NEI4 $241
line 611
;611:			{
line 612
;612:				PM_SetAnim(SETANIM_BOTH, BOTH_WALL_RUN_LEFT_STOP, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1176
CNSTI4 3
ASGNI4
ADDRLP4 1176
INDIRI4
ARGI4
CNSTI4 920
ARGI4
ADDRLP4 1176
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 613
;613:			}
LABELV $241
LABELV $240
line 614
;614:		}
LABELV $237
line 615
;615:	}
LABELV $201
line 617
;616:
;617:	return qfalse;
CNSTI4 0
RETI4
LABELV $200
endproc PM_AdjustAngleForWallRun 1216 28
export PM_SetForceJumpZStart
proc PM_SetForceJumpZStart 4 0
line 622
;618:}
;619:
;620://Set the height for when a force jump was started. If it's 0, nuge it up (slight hack to prevent holding jump over slopes)
;621:void PM_SetForceJumpZStart(float value)
;622:{
line 623
;623:	pm->ps->fd.forceJumpZStart = value;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1092
ADDP4
ADDRFP4 0
INDIRF4
ASGNF4
line 624
;624:	if (!pm->ps->fd.forceJumpZStart)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
CNSTF4 0
NEF4 $244
line 625
;625:	{
line 626
;626:		pm->ps->fd.forceJumpZStart -= 0.1;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1092
ADDP4
ASGNP4
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
INDIRF4
CNSTF4 1036831949
SUBF4
ASGNF4
line 627
;627:	}
LABELV $244
line 628
;628:}
LABELV $243
endproc PM_SetForceJumpZStart 4 0
proc PM_CheckJump 1288 28
line 636
;629:
;630:/*
;631:=============
;632:PM_CheckJump
;633:=============
;634:*/
;635:static qboolean PM_CheckJump( void ) 
;636:{
line 637
;637:	if (pm->ps->usingATST)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $247
line 638
;638:	{
line 639
;639:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $247
line 642
;640:	}
;641:
;642:	if (pm->ps->forceHandExtend == HANDEXTEND_KNOCKDOWN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 8
NEI4 $249
line 643
;643:	{
line 644
;644:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $249
line 648
;645:	}
;646:
;647:	//Don't allow jump until all buttons are up
;648:	if ( pm->ps->pm_flags & PMF_RESPAWNED ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 512
BANDI4
CNSTI4 0
EQI4 $251
line 649
;649:		return qfalse;		
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $251
line 652
;650:	}
;651:
;652:	if ( PM_InKnockDown( pm->ps ) || BG_InRoll( pm->ps, pm->ps->legsAnim ) ) 
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
ADDRLP4 0
ADDRGP4 PM_InKnockDown
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
NEI4 $255
ADDRLP4 4
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $253
LABELV $255
line 653
;653:	{//in knockdown
line 654
;654:		return qfalse;		
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $253
line 657
;655:	}
;656:
;657:	if (pm->ps->groundEntityNum != ENTITYNUM_NONE || pm->ps->origin[2] < pm->ps->fd.forceJumpZStart)
ADDRLP4 12
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 12
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $258
ADDRLP4 12
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 12
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
GEF4 $256
LABELV $258
line 658
;658:	{
line 659
;659:		pm->ps->fd.forcePowersActive &= ~(1<<FP_LEVITATION);
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
ASGNP4
ADDRLP4 16
INDIRP4
ADDRLP4 16
INDIRP4
INDIRI4
CNSTI4 -3
BANDI4
ASGNI4
line 660
;660:	}
LABELV $256
line 662
;661:
;662:	if (pm->ps->fd.forcePowersActive & (1 << FP_LEVITATION))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
EQI4 $259
line 663
;663:	{ //Force jump is already active.. continue draining power appropriately until we land.
line 664
;664:		if (pm->ps->fd.forcePowerDebounce[FP_LEVITATION] < pm->cmd.serverTime)
ADDRLP4 16
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
INDIRP4
CNSTI4 776
ADDP4
INDIRI4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $261
line 665
;665:		{
line 666
;666:			BG_ForcePowerDrain( pm->ps, FP_LEVITATION, 5 );
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
CNSTI4 5
ARGI4
ADDRGP4 BG_ForcePowerDrain
CALLV
pop
line 667
;667:			if (pm->ps->fd.forcePowerLevel[FP_LEVITATION] >= FORCE_LEVEL_2)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 2
LTI4 $263
line 668
;668:			{
line 669
;669:				pm->ps->fd.forcePowerDebounce[FP_LEVITATION] = pm->cmd.serverTime + 300;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
INDIRP4
CNSTI4 776
ADDP4
ADDRLP4 20
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 670
;670:			}
ADDRGP4 $264
JUMPV
LABELV $263
line 672
;671:			else
;672:			{
line 673
;673:				pm->ps->fd.forcePowerDebounce[FP_LEVITATION] = pm->cmd.serverTime + 200;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
INDIRP4
CNSTI4 776
ADDP4
ADDRLP4 20
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 200
ADDI4
ASGNI4
line 674
;674:			}
LABELV $264
line 675
;675:		}
LABELV $261
line 676
;676:	}
LABELV $259
line 678
;677:
;678:	if (pm->ps->forceJumpFlip)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1244
ADDP4
INDIRI4
CNSTI4 0
EQI4 $265
line 679
;679:	{ //Forced jump anim
line 680
;680:		int anim = BOTH_FORCEINAIR1;
ADDRLP4 16
CNSTI4 870
ASGNI4
line 681
;681:		int	parts = SETANIM_BOTH;
ADDRLP4 20
CNSTI4 3
ASGNI4
line 683
;682:
;683:		if ( pm->cmd.forwardmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $267
line 684
;684:		{
line 685
;685:			anim = BOTH_FLIP_F;
ADDRLP4 16
CNSTI4 881
ASGNI4
line 686
;686:		}
ADDRGP4 $268
JUMPV
LABELV $267
line 687
;687:		else if ( pm->cmd.forwardmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $269
line 688
;688:		{
line 689
;689:			anim = BOTH_FLIP_B;
ADDRLP4 16
CNSTI4 882
ASGNI4
line 690
;690:		}
ADDRGP4 $270
JUMPV
LABELV $269
line 691
;691:		else if ( pm->cmd.rightmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $271
line 692
;692:		{
line 693
;693:			anim = BOTH_FLIP_R;
ADDRLP4 16
CNSTI4 884
ASGNI4
line 694
;694:		}
ADDRGP4 $272
JUMPV
LABELV $271
line 695
;695:		else if ( pm->cmd.rightmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $273
line 696
;696:		{
line 697
;697:			anim = BOTH_FLIP_L;
ADDRLP4 16
CNSTI4 883
ASGNI4
line 698
;698:		}
LABELV $273
LABELV $272
LABELV $270
LABELV $268
line 699
;699:		if ( pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
EQI4 $275
line 700
;700:		{//FIXME: really only care if we're in a saber attack anim...
line 701
;701:			parts = SETANIM_LEGS;
ADDRLP4 20
CNSTI4 2
ASGNI4
line 702
;702:		}
LABELV $275
line 704
;703:
;704:		PM_SetAnim( parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150 );
ADDRLP4 20
INDIRI4
ARGI4
ADDRLP4 16
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 705
;705:		pm->ps->forceJumpFlip = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1244
ADDP4
CNSTI4 0
ASGNI4
line 706
;706:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $246
JUMPV
LABELV $265
line 709
;707:	}
;708:#if METROID_JUMP
;709:	if ( pm->waterlevel < 2 ) 
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 2
GEI4 $277
line 710
;710:	{
line 711
;711:		if ( pm->ps->gravity > 0 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 56
ADDP4
INDIRI4
CNSTI4 0
LEI4 $279
line 712
;712:		{//can't do this in zero-G
line 713
;713:			if ( PM_ForceJumpingUp() )
ADDRLP4 16
ADDRGP4 PM_ForceJumpingUp
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $281
line 714
;714:			{//holding jump in air
line 715
;715:				float curHeight = pm->ps->origin[2] - pm->ps->fd.forceJumpZStart;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
ADDRLP4 24
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 24
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
SUBF4
ASGNF4
line 717
;716:				//check for max force jump level and cap off & cut z vel
;717:				if ( ( curHeight<=forceJumpHeight[0] ||//still below minimum jump height
ADDRLP4 20
INDIRF4
ADDRGP4 forceJumpHeight
INDIRF4
LEF4 $285
ADDRLP4 28
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
INDIRP4
CNSTI4 932
ADDP4
INDIRI4
CNSTI4 0
EQI4 $283
ADDRLP4 28
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 10
LTI4 $283
LABELV $285
ADDRLP4 32
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRF4
ADDRLP4 32
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 forceJumpHeight
ADDP4
INDIRF4
GEF4 $283
ADDRLP4 32
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
CNSTF4 0
EQF4 $283
line 721
;718:						(pm->ps->fd.forcePower&&pm->cmd.upmove>=10) ) &&////still have force power available and still trying to jump up 
;719:					curHeight < forceJumpHeight[pm->ps->fd.forcePowerLevel[FP_LEVITATION]] &&
;720:					pm->ps->fd.forceJumpZStart)//still below maximum jump height
;721:				{//can still go up
line 722
;722:					if ( curHeight > forceJumpHeight[0] )
ADDRLP4 20
INDIRF4
ADDRGP4 forceJumpHeight
INDIRF4
LEF4 $286
line 723
;723:					{//passed normal jump height  *2?
line 724
;724:						if ( !(pm->ps->fd.forcePowersActive&(1<<FP_LEVITATION)) )//haven't started forcejump yet
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
NEI4 $288
line 725
;725:						{
line 727
;726:							//start force jump
;727:							pm->ps->fd.forcePowersActive |= (1<<FP_LEVITATION);
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
ADDRLP4 36
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 728
;728:							pm->ps->fd.forceJumpSound = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1100
ADDP4
CNSTI4 1
ASGNI4
line 730
;729:							//play flip
;730:							if ((pm->cmd.forwardmove || pm->cmd.rightmove) && //pushing in a dir
ADDRLP4 40
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 44
CNSTI4 0
ASGNI4
ADDRLP4 40
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 44
INDIRI4
NEI4 $292
ADDRLP4 40
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 44
INDIRI4
EQI4 $290
LABELV $292
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 48
INDIRI4
CNSTI4 881
EQI4 $290
ADDRLP4 48
INDIRI4
CNSTI4 882
EQI4 $290
ADDRLP4 48
INDIRI4
CNSTI4 884
EQI4 $290
ADDRLP4 48
INDIRI4
CNSTI4 883
EQI4 $290
line 735
;731:								(pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_FLIP_F &&//not already flipping
;732:								(pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_FLIP_B &&
;733:								(pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_FLIP_R &&
;734:								(pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_FLIP_L )
;735:							{ 
line 736
;736:								int anim = BOTH_FORCEINAIR1;
ADDRLP4 52
CNSTI4 870
ASGNI4
line 737
;737:								int	parts = SETANIM_BOTH;
ADDRLP4 56
CNSTI4 3
ASGNI4
line 739
;738:
;739:								if ( pm->cmd.forwardmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $293
line 740
;740:								{
line 741
;741:									anim = BOTH_FLIP_F;
ADDRLP4 52
CNSTI4 881
ASGNI4
line 742
;742:								}
ADDRGP4 $294
JUMPV
LABELV $293
line 743
;743:								else if ( pm->cmd.forwardmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $295
line 744
;744:								{
line 745
;745:									anim = BOTH_FLIP_B;
ADDRLP4 52
CNSTI4 882
ASGNI4
line 746
;746:								}
ADDRGP4 $296
JUMPV
LABELV $295
line 747
;747:								else if ( pm->cmd.rightmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $297
line 748
;748:								{
line 749
;749:									anim = BOTH_FLIP_R;
ADDRLP4 52
CNSTI4 884
ASGNI4
line 750
;750:								}
ADDRGP4 $298
JUMPV
LABELV $297
line 751
;751:								else if ( pm->cmd.rightmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $299
line 752
;752:								{
line 753
;753:									anim = BOTH_FLIP_L;
ADDRLP4 52
CNSTI4 883
ASGNI4
line 754
;754:								}
LABELV $299
LABELV $298
LABELV $296
LABELV $294
line 755
;755:								if ( pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
EQI4 $301
line 756
;756:								{
line 757
;757:									parts = SETANIM_LEGS;
ADDRLP4 56
CNSTI4 2
ASGNI4
line 758
;758:								}
LABELV $301
line 760
;759:
;760:								PM_SetAnim( parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150 );
ADDRLP4 56
INDIRI4
ARGI4
ADDRLP4 52
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 761
;761:							}
ADDRGP4 $289
JUMPV
LABELV $290
line 762
;762:							else if ( pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 1
LEI4 $289
line 763
;763:							{
line 765
;764:								vec3_t facingFwd, facingRight, facingAngles;
;765:								int	anim = -1;
ADDRLP4 52
CNSTI4 -1
ASGNI4
line 768
;766:								float dotR, dotF;
;767:								
;768:								VectorSet(facingAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 80
CNSTF4 0
ASGNF4
ADDRLP4 80+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 80+8
CNSTF4 0
ASGNF4
line 770
;769:
;770:								AngleVectors( facingAngles, facingFwd, facingRight, NULL );
ADDRLP4 80
ARGP4
ADDRLP4 56
ARGP4
ADDRLP4 68
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 771
;771:								dotR = DotProduct( facingRight, pm->ps->velocity );
ADDRLP4 100
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 92
ADDRLP4 68
INDIRF4
ADDRLP4 100
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
MULF4
ADDRLP4 68+4
INDIRF4
ADDRLP4 100
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
MULF4
ADDF4
ADDRLP4 68+8
INDIRF4
ADDRLP4 100
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
MULF4
ADDF4
ASGNF4
line 772
;772:								dotF = DotProduct( facingFwd, pm->ps->velocity );
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 96
ADDRLP4 56
INDIRF4
ADDRLP4 104
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
MULF4
ADDRLP4 56+4
INDIRF4
ADDRLP4 104
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
MULF4
ADDF4
ADDRLP4 56+8
INDIRF4
ADDRLP4 104
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
MULF4
ADDF4
ASGNF4
line 774
;773:
;774:								if ( fabs(dotR) > fabs(dotF) * 1.5 )
ADDRLP4 92
INDIRF4
ARGF4
ADDRLP4 108
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 96
INDIRF4
ARGF4
ADDRLP4 112
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 108
INDIRF4
CNSTF4 1069547520
ADDRLP4 112
INDIRF4
MULF4
LEF4 $311
line 775
;775:								{
line 776
;776:									if ( dotR > 150 )
ADDRLP4 92
INDIRF4
CNSTF4 1125515264
LEF4 $313
line 777
;777:									{
line 778
;778:										anim = BOTH_FORCEJUMPRIGHT1;
ADDRLP4 52
CNSTI4 878
ASGNI4
line 779
;779:									}
ADDRGP4 $312
JUMPV
LABELV $313
line 780
;780:									else if ( dotR < -150 )
ADDRLP4 92
INDIRF4
CNSTF4 3272998912
GEF4 $312
line 781
;781:									{
line 782
;782:										anim = BOTH_FORCEJUMPLEFT1;
ADDRLP4 52
CNSTI4 875
ASGNI4
line 783
;783:									}
line 784
;784:								}
ADDRGP4 $312
JUMPV
LABELV $311
line 786
;785:								else
;786:								{
line 787
;787:									if ( dotF > 150 )
ADDRLP4 96
INDIRF4
CNSTF4 1125515264
LEF4 $317
line 788
;788:									{
line 789
;789:										anim = BOTH_FORCEJUMP1;
ADDRLP4 52
CNSTI4 869
ASGNI4
line 790
;790:									}
ADDRGP4 $318
JUMPV
LABELV $317
line 791
;791:									else if ( dotF < -150 )
ADDRLP4 96
INDIRF4
CNSTF4 3272998912
GEF4 $319
line 792
;792:									{
line 793
;793:										anim = BOTH_FORCEJUMPBACK1;
ADDRLP4 52
CNSTI4 872
ASGNI4
line 794
;794:									}
LABELV $319
LABELV $318
line 795
;795:								}
LABELV $312
line 796
;796:								if ( anim != -1 )
ADDRLP4 52
INDIRI4
CNSTI4 -1
EQI4 $289
line 797
;797:								{
line 798
;798:									int parts = SETANIM_BOTH;
ADDRLP4 116
CNSTI4 3
ASGNI4
line 799
;799:									if ( pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
EQI4 $323
line 800
;800:									{//FIXME: really only care if we're in a saber attack anim...
line 801
;801:										parts = SETANIM_LEGS;
ADDRLP4 116
CNSTI4 2
ASGNI4
line 802
;802:									}
LABELV $323
line 804
;803:
;804:									PM_SetAnim( parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150 );
ADDRLP4 116
INDIRI4
ARGI4
ADDRLP4 52
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 805
;805:								}
line 806
;806:							}
line 807
;807:						}
ADDRGP4 $289
JUMPV
LABELV $288
line 809
;808:						else
;809:						{ //jump is already active (the anim has started)
line 810
;810:							if ( pm->ps->legsTimer < 1 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 1
GEI4 $325
line 811
;811:							{//not in the middle of a legsAnim
line 812
;812:								int anim = (pm->ps->legsAnim&~ANIM_TOGGLEBIT);
ADDRLP4 40
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
line 813
;813:								int newAnim = -1;
ADDRLP4 36
CNSTI4 -1
ASGNI4
line 814
;814:								switch ( anim )
ADDRLP4 44
ADDRLP4 40
INDIRI4
ASGNI4
ADDRLP4 48
CNSTI4 869
ASGNI4
ADDRLP4 44
INDIRI4
ADDRLP4 48
INDIRI4
EQI4 $329
ADDRLP4 44
INDIRI4
CNSTI4 872
EQI4 $330
ADDRLP4 44
INDIRI4
ADDRLP4 48
INDIRI4
LTI4 $327
LABELV $333
ADDRLP4 52
ADDRLP4 40
INDIRI4
ASGNI4
ADDRLP4 52
INDIRI4
CNSTI4 875
EQI4 $331
ADDRLP4 52
INDIRI4
CNSTI4 878
EQI4 $332
ADDRGP4 $327
JUMPV
line 815
;815:								{
LABELV $329
line 817
;816:								case BOTH_FORCEJUMP1:
;817:									newAnim = BOTH_FORCELAND1;//BOTH_FORCEINAIR1;
ADDRLP4 36
CNSTI4 871
ASGNI4
line 818
;818:									break;
ADDRGP4 $328
JUMPV
LABELV $330
line 820
;819:								case BOTH_FORCEJUMPBACK1:
;820:									newAnim = BOTH_FORCELANDBACK1;//BOTH_FORCEINAIRBACK1;
ADDRLP4 36
CNSTI4 874
ASGNI4
line 821
;821:									break;
ADDRGP4 $328
JUMPV
LABELV $331
line 823
;822:								case BOTH_FORCEJUMPLEFT1:
;823:									newAnim = BOTH_FORCELANDLEFT1;//BOTH_FORCEINAIRLEFT1;
ADDRLP4 36
CNSTI4 877
ASGNI4
line 824
;824:									break;
ADDRGP4 $328
JUMPV
LABELV $332
line 826
;825:								case BOTH_FORCEJUMPRIGHT1:
;826:									newAnim = BOTH_FORCELANDRIGHT1;//BOTH_FORCEINAIRRIGHT1;
ADDRLP4 36
CNSTI4 880
ASGNI4
line 827
;827:									break;
LABELV $327
LABELV $328
line 829
;828:								}
;829:								if ( newAnim != -1 )
ADDRLP4 36
INDIRI4
CNSTI4 -1
EQI4 $334
line 830
;830:								{
line 831
;831:									int parts = SETANIM_BOTH;
ADDRLP4 56
CNSTI4 3
ASGNI4
line 832
;832:									if ( pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
EQI4 $336
line 833
;833:									{
line 834
;834:										parts = SETANIM_LEGS;
ADDRLP4 56
CNSTI4 2
ASGNI4
line 835
;835:									}
LABELV $336
line 837
;836:
;837:									PM_SetAnim( parts, newAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150 );
ADDRLP4 56
INDIRI4
ARGI4
ADDRLP4 36
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 838
;838:								}
LABELV $334
line 839
;839:							}
LABELV $325
line 840
;840:						}
LABELV $289
line 841
;841:					}
LABELV $286
line 844
;842:
;843:					//need to scale this down, start with height velocity (based on max force jump height) and scale down to regular jump vel
;844:					pm->ps->velocity[2] = (forceJumpHeight[pm->ps->fd.forcePowerLevel[FP_LEVITATION]]-curHeight)/forceJumpHeight[pm->ps->fd.forcePowerLevel[FP_LEVITATION]]*forceJumpStrength[pm->ps->fd.forcePowerLevel[FP_LEVITATION]];//JUMP_VELOCITY;
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 40
ADDRLP4 36
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 44
ADDRLP4 40
INDIRI4
ADDRGP4 forceJumpHeight
ADDP4
INDIRF4
ASGNF4
ADDRLP4 36
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 44
INDIRF4
ADDRLP4 20
INDIRF4
SUBF4
ADDRLP4 44
INDIRF4
DIVF4
ADDRLP4 40
INDIRI4
ADDRGP4 forceJumpStrength
ADDP4
INDIRF4
MULF4
ASGNF4
line 845
;845:					pm->ps->velocity[2] /= 10;
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRF4
CNSTF4 1092616192
DIVF4
ASGNF4
line 846
;846:					pm->ps->velocity[2] += JUMP_VELOCITY;
ADDRLP4 52
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 52
INDIRP4
ADDRLP4 52
INDIRP4
INDIRF4
CNSTF4 1130430464
ADDF4
ASGNF4
line 847
;847:					pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 56
INDIRP4
ADDRLP4 56
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 848
;848:				}
ADDRGP4 $284
JUMPV
LABELV $283
line 849
;849:				else if ( curHeight > forceJumpHeight[0] && curHeight < forceJumpHeight[pm->ps->fd.forcePowerLevel[FP_LEVITATION]] - forceJumpHeight[0] )
ADDRLP4 36
ADDRLP4 20
INDIRF4
ASGNF4
ADDRLP4 40
ADDRGP4 forceJumpHeight
ASGNP4
ADDRLP4 44
ADDRLP4 40
INDIRP4
INDIRF4
ASGNF4
ADDRLP4 36
INDIRF4
ADDRLP4 44
INDIRF4
LEF4 $338
ADDRLP4 36
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 40
INDIRP4
ADDP4
INDIRF4
ADDRLP4 44
INDIRF4
SUBF4
GEF4 $338
line 850
;850:				{//still have some headroom, don't totally stop it
line 851
;851:					if ( pm->ps->velocity[2] > JUMP_VELOCITY )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 1130430464
LEF4 $339
line 852
;852:					{
line 853
;853:						pm->ps->velocity[2] = JUMP_VELOCITY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1130430464
ASGNF4
line 854
;854:					}
line 855
;855:				}
ADDRGP4 $339
JUMPV
LABELV $338
line 857
;856:				else
;857:				{
line 861
;858:					//pm->ps->velocity[2] = 0;
;859:					//rww - changed for the sake of balance in multiplayer
;860:
;861:					if ( pm->ps->velocity[2] > JUMP_VELOCITY )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 1130430464
LEF4 $342
line 862
;862:					{
line 863
;863:						pm->ps->velocity[2] = JUMP_VELOCITY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1130430464
ASGNF4
line 864
;864:					}
LABELV $342
line 865
;865:				}
LABELV $339
LABELV $284
line 866
;866:				pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 867
;867:				return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $281
line 869
;868:			}
;869:		}
LABELV $279
line 870
;870:	}
LABELV $277
line 875
;871:
;872:#endif
;873:
;874:	//Not jumping
;875:	if ( pm->cmd.upmove < 10 && pm->ps->groundEntityNum != ENTITYNUM_NONE) {
ADDRLP4 16
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 10
GEI4 $344
ADDRLP4 16
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
EQI4 $344
line 876
;876:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $344
line 880
;877:	}
;878:
;879:	// must wait for jump to be released
;880:	if ( pm->ps->pm_flags & PMF_JUMP_HELD ) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
EQI4 $346
line 881
;881:	{
line 883
;882:		// clear upmove so cmdscale doesn't lower running speed
;883:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 884
;884:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $346
line 887
;885:	}
;886:
;887:	if ( pm->ps->gravity <= 0 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 56
ADDP4
INDIRI4
CNSTI4 0
GTI4 $348
line 888
;888:	{//in low grav, you push in the dir you're facing as long as there is something behind you to shove off of
line 892
;889:		vec3_t	forward, back;
;890:		trace_t	trace;
;891:
;892:		AngleVectors( pm->ps->viewangles, forward, NULL, NULL );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 20
ARGP4
ADDRLP4 1124
CNSTP4 0
ASGNP4
ADDRLP4 1124
INDIRP4
ARGP4
ADDRLP4 1124
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 893
;893:		VectorMA( pm->ps->origin, -8, forward, back );
ADDRLP4 1128
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1132
CNSTF4 3238002688
ASGNF4
ADDRLP4 32
ADDRLP4 1128
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1132
INDIRF4
ADDRLP4 20
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 32+4
ADDRLP4 1128
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1132
INDIRF4
ADDRLP4 20+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 32+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 3238002688
ADDRLP4 20+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 894
;894:		pm->trace( &trace, pm->ps->origin, pm->mins, pm->maxs, back, pm->ps->clientNum, pm->tracemask );
ADDRLP4 44
ARGP4
ADDRLP4 1136
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1140
ADDRLP4 1136
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1140
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1136
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1136
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 32
ARGP4
ADDRLP4 1140
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1136
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1136
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 896
;895:
;896:		if ( trace.fraction <= 1.0f )
ADDRLP4 44+8
INDIRF4
CNSTF4 1065353216
GTF4 $354
line 897
;897:		{
line 898
;898:			VectorMA( pm->ps->velocity, JUMP_VELOCITY*2, forward, pm->ps->velocity );
ADDRLP4 1144
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1144
INDIRP4
ADDRLP4 1144
INDIRP4
INDIRF4
CNSTF4 1138819072
ADDRLP4 20
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1148
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1148
INDIRP4
ADDRLP4 1148
INDIRP4
INDIRF4
CNSTF4 1138819072
ADDRLP4 20+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1152
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1152
INDIRP4
ADDRLP4 1152
INDIRP4
INDIRF4
CNSTF4 1138819072
ADDRLP4 20+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 899
;899:			PM_SetAnim(SETANIM_LEGS,BOTH_FORCEJUMP1,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD|SETANIM_FLAG_RESTART, 150);
CNSTI4 2
ARGI4
CNSTI4 869
ARGI4
CNSTI4 7
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 900
;900:		}//else no surf close enough to push off of
LABELV $354
line 901
;901:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 902
;902:	}
ADDRGP4 $349
JUMPV
LABELV $348
line 903
;903:	else if ( pm->cmd.upmove > 0 && pm->waterlevel < 2 &&
ADDRLP4 20
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 24
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
ADDRLP4 24
INDIRI4
LEI4 $359
ADDRLP4 28
CNSTI4 2
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
GEI4 $359
ADDRLP4 32
ADDRLP4 20
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 32
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
ADDRLP4 24
INDIRI4
LEI4 $359
ADDRLP4 32
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
BANDI4
ADDRLP4 24
INDIRI4
NEI4 $359
ADDRLP4 32
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
NEI4 $359
ADDRLP4 20
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 32
INDIRP4
ARGP4
ADDRLP4 36
ADDRGP4 BG_HasYsalamiri
CALLI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 0
NEI4 $359
ADDRLP4 40
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 40
INDIRP4
INDIRP4
ARGP4
ADDRLP4 40
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 44
ADDRGP4 BG_CanUseFPNow
CALLI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 0
EQI4 $359
line 909
;904:		pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_0 &&
;905:		!(pm->ps->pm_flags&PMF_JUMP_HELD) &&
;906:		pm->ps->weapon == WP_SABER &&
;907:		!BG_HasYsalamiri(pm->gametype, pm->ps) &&
;908:		BG_CanUseFPNow(pm->gametype, pm->ps, pm->cmd.serverTime, FP_LEVITATION) )
;909:	{
line 910
;910:		if ( pm->ps->groundEntityNum != ENTITYNUM_NONE )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
EQI4 $361
line 911
;911:		{//on the ground
line 913
;912:			//check for left-wall and right-wall special jumps
;913:			int anim = -1;
ADDRLP4 48
CNSTI4 -1
ASGNI4
line 914
;914:			float	vertPush = 0;
ADDRLP4 52
CNSTF4 0
ASGNF4
line 915
;915:			if ( pm->cmd.rightmove > 0 && pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 )
ADDRLP4 56
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $363
ADDRLP4 56
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 1
LEI4 $363
line 916
;916:			{//strafing right
line 917
;917:				if ( pm->cmd.forwardmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $365
line 918
;918:				{//wall-run
line 919
;919:					vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f;
ADDRLP4 52
ADDRGP4 forceJumpStrength+8
INDIRF4
CNSTF4 1073741824
DIVF4
ASGNF4
line 920
;920:					anim = BOTH_WALL_RUN_RIGHT;
ADDRLP4 48
CNSTI4 915
ASGNI4
line 921
;921:				}
ADDRGP4 $364
JUMPV
LABELV $365
line 922
;922:				else if ( pm->cmd.forwardmove == 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $364
line 923
;923:				{//wall-flip
line 924
;924:					vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f;
ADDRLP4 52
ADDRGP4 forceJumpStrength+8
INDIRF4
CNSTF4 1074790400
DIVF4
ASGNF4
line 925
;925:					anim = BOTH_WALL_FLIP_RIGHT;
ADDRLP4 48
CNSTI4 921
ASGNI4
line 926
;926:				}
line 927
;927:			}
ADDRGP4 $364
JUMPV
LABELV $363
line 928
;928:			else if ( pm->cmd.rightmove < 0 && pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 )
ADDRLP4 60
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 60
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $371
ADDRLP4 60
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 1
LEI4 $371
line 929
;929:			{//strafing left
line 930
;930:				if ( pm->cmd.forwardmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $373
line 931
;931:				{//wall-run
line 932
;932:					vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f;
ADDRLP4 52
ADDRGP4 forceJumpStrength+8
INDIRF4
CNSTF4 1073741824
DIVF4
ASGNF4
line 933
;933:					anim = BOTH_WALL_RUN_LEFT;
ADDRLP4 48
CNSTI4 918
ASGNI4
line 934
;934:				}
ADDRGP4 $372
JUMPV
LABELV $373
line 935
;935:				else if ( pm->cmd.forwardmove == 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
NEI4 $372
line 936
;936:				{//wall-flip
line 937
;937:					vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f;
ADDRLP4 52
ADDRGP4 forceJumpStrength+8
INDIRF4
CNSTF4 1074790400
DIVF4
ASGNF4
line 938
;938:					anim = BOTH_WALL_FLIP_LEFT;
ADDRLP4 48
CNSTI4 922
ASGNI4
line 939
;939:				}
line 940
;940:			}
ADDRGP4 $372
JUMPV
LABELV $371
line 941
;941:			else if ( pm->cmd.forwardmove < 0 && !(pm->cmd.buttons&BUTTON_ATTACK) )
ADDRLP4 64
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 68
CNSTI4 0
ASGNI4
ADDRLP4 64
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 68
INDIRI4
GEI4 $379
ADDRLP4 64
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 68
INDIRI4
NEI4 $379
line 942
;942:			{//backflip
line 943
;943:				vertPush = JUMP_VELOCITY;
ADDRLP4 52
CNSTF4 1130430464
ASGNF4
line 944
;944:				anim = BOTH_FLIP_BACK1;//PM_PickAnim( BOTH_FLIP_BACK1, BOTH_FLIP_BACK3 );
ADDRLP4 48
CNSTI4 910
ASGNI4
line 945
;945:			}
LABELV $379
LABELV $372
LABELV $364
line 947
;946:
;947:			vertPush += 128; //give them an extra shove
ADDRLP4 52
ADDRLP4 52
INDIRF4
CNSTF4 1124073472
ADDF4
ASGNF4
line 949
;948:
;949:			if ( anim != -1 )
ADDRLP4 48
INDIRI4
CNSTI4 -1
EQI4 $362
line 950
;950:			{
line 954
;951:				vec3_t fwd, right, traceto, mins, maxs, fwdAngles;
;952:				vec3_t	idealNormal;
;953:				trace_t	trace;
;954:				qboolean doTrace = qfalse;
ADDRLP4 72
CNSTI4 0
ASGNI4
line 955
;955:				int contents = MASK_PLAYERSOLID;
ADDRLP4 76
CNSTI4 273
ASGNI4
line 957
;956:
;957:				VectorSet(mins, pm->mins[0],pm->mins[1],0);
ADDRLP4 1244
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1184
ADDRLP4 1244
INDIRP4
CNSTI4 188
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1184+4
ADDRLP4 1244
INDIRP4
CNSTI4 192
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1184+8
CNSTF4 0
ASGNF4
line 958
;958:				VectorSet(maxs, pm->maxs[0],pm->maxs[1],24);
ADDRLP4 1248
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1196
ADDRLP4 1248
INDIRP4
CNSTI4 200
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1196+4
ADDRLP4 1248
INDIRP4
CNSTI4 204
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1196+8
CNSTF4 1103101952
ASGNF4
line 959
;959:				VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 1172
CNSTF4 0
ASGNF4
ADDRLP4 1172+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1172+8
CNSTF4 0
ASGNF4
line 961
;960:
;961:				memset(&trace, 0, sizeof(trace)); //to shut the compiler up
ADDRLP4 80
ARGP4
CNSTI4 0
ARGI4
CNSTI4 1080
ARGI4
ADDRGP4 memset
CALLP4
pop
line 963
;962:
;963:				AngleVectors( fwdAngles, fwd, right, NULL );
ADDRLP4 1172
ARGP4
ADDRLP4 1232
ARGP4
ADDRLP4 1220
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 966
;964:
;965:				//trace-check for a wall, if necc.
;966:				switch ( anim )
ADDRLP4 1252
ADDRLP4 48
INDIRI4
ASGNI4
ADDRLP4 1252
INDIRI4
CNSTI4 915
LTI4 $389
ADDRLP4 1252
INDIRI4
CNSTI4 922
GTI4 $406
ADDRLP4 1252
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $407-3660
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $407
address $396
address $389
address $389
address $391
address $389
address $389
address $396
address $391
code
LABELV $406
ADDRLP4 48
INDIRI4
CNSTI4 944
EQI4 $401
ADDRGP4 $389
JUMPV
line 967
;967:				{
LABELV $391
line 971
;968:				case BOTH_WALL_FLIP_LEFT:
;969:					//NOTE: purposely falls through to next case!
;970:				case BOTH_WALL_RUN_LEFT:
;971:					doTrace = qtrue;
ADDRLP4 72
CNSTI4 1
ASGNI4
line 972
;972:					VectorMA( pm->ps->origin, -16, right, traceto );
ADDRLP4 1256
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1260
CNSTF4 3246391296
ASGNF4
ADDRLP4 1208
ADDRLP4 1256
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1260
INDIRF4
ADDRLP4 1220
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+4
ADDRLP4 1256
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1260
INDIRF4
ADDRLP4 1220+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 3246391296
ADDRLP4 1220+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 973
;973:					break;
ADDRGP4 $390
JUMPV
LABELV $396
line 978
;974:
;975:				case BOTH_WALL_FLIP_RIGHT:
;976:					//NOTE: purposely falls through to next case!
;977:				case BOTH_WALL_RUN_RIGHT:
;978:					doTrace = qtrue;
ADDRLP4 72
CNSTI4 1
ASGNI4
line 979
;979:					VectorMA( pm->ps->origin, 16, right, traceto );
ADDRLP4 1264
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1268
CNSTF4 1098907648
ASGNF4
ADDRLP4 1208
ADDRLP4 1264
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1268
INDIRF4
ADDRLP4 1220
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+4
ADDRLP4 1264
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1268
INDIRF4
ADDRLP4 1220+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1098907648
ADDRLP4 1220+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 980
;980:					break;
ADDRGP4 $390
JUMPV
LABELV $401
line 983
;981:
;982:				case BOTH_WALL_FLIP_BACK1:
;983:					doTrace = qtrue;
ADDRLP4 72
CNSTI4 1
ASGNI4
line 984
;984:					VectorMA( pm->ps->origin, 16, fwd, traceto );
ADDRLP4 1272
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1276
CNSTF4 1098907648
ASGNF4
ADDRLP4 1208
ADDRLP4 1272
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1276
INDIRF4
ADDRLP4 1232
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+4
ADDRLP4 1272
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1276
INDIRF4
ADDRLP4 1232+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1208+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1098907648
ADDRLP4 1232+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 985
;985:					break;
LABELV $389
LABELV $390
line 988
;986:				}
;987:
;988:				if ( doTrace )
ADDRLP4 72
INDIRI4
CNSTI4 0
EQI4 $409
line 989
;989:				{
line 990
;990:					pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, contents );
ADDRLP4 80
ARGP4
ADDRLP4 1256
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1260
ADDRLP4 1256
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1260
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1184
ARGP4
ADDRLP4 1196
ARGP4
ADDRLP4 1208
ARGP4
ADDRLP4 1260
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 76
INDIRI4
ARGI4
ADDRLP4 1256
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 991
;991:					VectorSubtract( pm->ps->origin, traceto, idealNormal );
ADDRLP4 1264
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1160
ADDRLP4 1264
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1208
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1160+4
ADDRLP4 1264
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1208+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1160+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 1208+8
INDIRF4
SUBF4
ASGNF4
line 992
;992:					VectorNormalize( idealNormal );
ADDRLP4 1160
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 993
;993:				}
LABELV $409
line 995
;994:
;995:				if ( !doTrace || (trace.fraction < 1.0f && (trace.entityNum < MAX_CLIENTS || DotProduct(trace.plane.normal,idealNormal) > 0.7)) )
ADDRLP4 72
INDIRI4
CNSTI4 0
EQI4 $427
ADDRLP4 80+8
INDIRF4
CNSTF4 1065353216
GEF4 $362
ADDRLP4 80+52
INDIRI4
CNSTI4 32
LTI4 $427
ADDRLP4 80+24
INDIRF4
ADDRLP4 1160
INDIRF4
MULF4
ADDRLP4 80+24+4
INDIRF4
ADDRLP4 1160+4
INDIRF4
MULF4
ADDF4
ADDRLP4 80+24+8
INDIRF4
ADDRLP4 1160+8
INDIRF4
MULF4
ADDF4
CNSTF4 1060320051
LEF4 $362
LABELV $427
line 996
;996:				{//there is a wall there.. or hit a client
line 999
;997:					int parts;
;998:					//move me to side
;999:					if ( anim == BOTH_WALL_FLIP_LEFT )
ADDRLP4 48
INDIRI4
CNSTI4 922
NEI4 $428
line 1000
;1000:					{
line 1001
;1001:						pm->ps->velocity[0] = pm->ps->velocity[1] = 0;
ADDRLP4 1260
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1264
CNSTF4 0
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
line 1002
;1002:						VectorMA( pm->ps->velocity, 150, right, pm->ps->velocity );
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 1220
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1272
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1272
INDIRP4
ADDRLP4 1272
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 1220+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1276
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1276
INDIRP4
ADDRLP4 1276
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 1220+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1003
;1003:					}
ADDRGP4 $429
JUMPV
LABELV $428
line 1004
;1004:					else if ( anim == BOTH_WALL_FLIP_RIGHT )
ADDRLP4 48
INDIRI4
CNSTI4 921
NEI4 $432
line 1005
;1005:					{
line 1006
;1006:						pm->ps->velocity[0] = pm->ps->velocity[1] = 0;
ADDRLP4 1260
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1264
CNSTF4 0
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
line 1007
;1007:						VectorMA( pm->ps->velocity, -150, right, pm->ps->velocity );
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1220
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1272
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1272
INDIRP4
ADDRLP4 1272
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1220+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1276
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1276
INDIRP4
ADDRLP4 1276
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1220+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1008
;1008:					}
ADDRGP4 $433
JUMPV
LABELV $432
line 1009
;1009:					else if ( anim == BOTH_FLIP_BACK1 
ADDRLP4 1260
ADDRLP4 48
INDIRI4
ASGNI4
ADDRLP4 1260
INDIRI4
CNSTI4 910
EQI4 $440
ADDRLP4 1260
INDIRI4
CNSTI4 911
EQI4 $440
ADDRLP4 1260
INDIRI4
CNSTI4 912
EQI4 $440
ADDRLP4 1260
INDIRI4
CNSTI4 944
NEI4 $436
LABELV $440
line 1013
;1010:						|| anim == BOTH_FLIP_BACK2 
;1011:						|| anim == BOTH_FLIP_BACK3 
;1012:						|| anim == BOTH_WALL_FLIP_BACK1 )
;1013:					{
line 1014
;1014:						pm->ps->velocity[0] = pm->ps->velocity[1] = 0;
ADDRLP4 1264
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1268
CNSTF4 0
ASGNF4
ADDRLP4 1264
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1268
INDIRF4
ASGNF4
ADDRLP4 1264
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1268
INDIRF4
ASGNF4
line 1015
;1015:						VectorMA( pm->ps->velocity, -150, fwd, pm->ps->velocity );
ADDRLP4 1272
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1272
INDIRP4
ADDRLP4 1272
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1232
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1276
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1276
INDIRP4
ADDRLP4 1276
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1232+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1280
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1280
INDIRP4
ADDRLP4 1280
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 1232+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1016
;1016:					}
LABELV $436
LABELV $433
LABELV $429
line 1018
;1017:
;1018:					if ( doTrace && anim != BOTH_WALL_RUN_LEFT && anim != BOTH_WALL_RUN_RIGHT )
ADDRLP4 72
INDIRI4
CNSTI4 0
EQI4 $443
ADDRLP4 1264
ADDRLP4 48
INDIRI4
ASGNI4
ADDRLP4 1264
INDIRI4
CNSTI4 918
EQI4 $443
ADDRLP4 1264
INDIRI4
CNSTI4 915
EQI4 $443
line 1019
;1019:					{
line 1020
;1020:						if (trace.entityNum < MAX_CLIENTS)
ADDRLP4 80+52
INDIRI4
CNSTI4 32
GEI4 $445
line 1021
;1021:						{
line 1022
;1022:							pm->ps->forceKickFlip = trace.entityNum+1; //let the server know that this person gets kicked by this client
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1292
ADDP4
ADDRLP4 80+52
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1023
;1023:						}
LABELV $445
line 1024
;1024:					}
LABELV $443
line 1027
;1025:
;1026:					//up
;1027:					if ( vertPush )
ADDRLP4 52
INDIRF4
CNSTF4 0
EQF4 $449
line 1028
;1028:					{
line 1029
;1029:						pm->ps->velocity[2] = vertPush;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 52
INDIRF4
ASGNF4
line 1030
;1030:						pm->ps->fd.forcePowersActive |= (1 << FP_LEVITATION);
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1031
;1031:					}
LABELV $449
line 1033
;1032:					//animate me
;1033:					parts = SETANIM_LEGS;
ADDRLP4 1256
CNSTI4 2
ASGNI4
line 1034
;1034:					if ( anim == BOTH_BUTTERFLY_LEFT )
ADDRLP4 48
INDIRI4
CNSTI4 913
NEI4 $451
line 1035
;1035:					{
line 1036
;1036:						parts = SETANIM_BOTH;
ADDRLP4 1256
CNSTI4 3
ASGNI4
line 1037
;1037:						pm->cmd.buttons&=~BUTTON_ATTACK;
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
line 1038
;1038:						pm->ps->saberMove = LS_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 0
ASGNI4
line 1039
;1039:					}
ADDRGP4 $452
JUMPV
LABELV $451
line 1040
;1040:					else if ( !pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
NEI4 $453
line 1041
;1041:					{
line 1042
;1042:						parts = SETANIM_BOTH;
ADDRLP4 1256
CNSTI4 3
ASGNI4
line 1043
;1043:					}
LABELV $453
LABELV $452
line 1044
;1044:					PM_SetAnim( parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 );
ADDRLP4 1256
INDIRI4
ARGI4
ADDRLP4 48
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 1045
;1045:					if ( anim == BOTH_BUTTERFLY_LEFT )
ADDRLP4 48
INDIRI4
CNSTI4 913
NEI4 $455
line 1046
;1046:					{
line 1047
;1047:						pm->ps->weaponTime = pm->ps->torsoTimer;
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1268
INDIRP4
CNSTI4 44
ADDP4
ADDRLP4 1268
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
ASGNI4
line 1048
;1048:					}
LABELV $455
line 1049
;1049:					PM_SetForceJumpZStart(pm->ps->origin[2]);//so we don't take damage if we land at same height
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ARGF4
ADDRGP4 PM_SetForceJumpZStart
CALLV
pop
line 1050
;1050:					pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1051
;1051:					pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 1052
;1052:					pm->ps->fd.forceJumpSound = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1100
ADDP4
CNSTI4 1
ASGNI4
line 1053
;1053:				}
line 1054
;1054:			}
line 1055
;1055:		}
ADDRGP4 $362
JUMPV
LABELV $361
line 1057
;1056:		else 
;1057:		{//in the air
line 1058
;1058:			int legsAnim = (pm->ps->legsAnim&~ANIM_TOGGLEBIT);
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
line 1059
;1059:			if ( legsAnim == BOTH_WALL_RUN_LEFT || legsAnim == BOTH_WALL_RUN_RIGHT )
ADDRLP4 52
ADDRLP4 48
INDIRI4
ASGNI4
ADDRLP4 52
INDIRI4
CNSTI4 918
EQI4 $459
ADDRLP4 52
INDIRI4
CNSTI4 915
NEI4 $457
LABELV $459
line 1060
;1060:			{//running on a wall
line 1063
;1061:				vec3_t right, traceto, mins, maxs, fwdAngles;
;1062:				trace_t	trace;
;1063:				int		anim = -1;
ADDRLP4 56
CNSTI4 -1
ASGNI4
line 1065
;1064:
;1065:				VectorSet(mins, pm->mins[0], pm->mins[0], 0);
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
CNSTI4 188
ADDP4
ASGNP4
ADDRLP4 72
ADDRLP4 1200
INDIRP4
INDIRF4
ASGNF4
ADDRLP4 72+4
ADDRLP4 1200
INDIRP4
INDIRF4
ASGNF4
ADDRLP4 72+8
CNSTF4 0
ASGNF4
line 1066
;1066:				VectorSet(maxs, pm->maxs[0], pm->maxs[0], 24);
ADDRLP4 1204
ADDRGP4 pm
INDIRP4
CNSTI4 200
ADDP4
ASGNP4
ADDRLP4 84
ADDRLP4 1204
INDIRP4
INDIRF4
ASGNF4
ADDRLP4 84+4
ADDRLP4 1204
INDIRP4
INDIRF4
ASGNF4
ADDRLP4 84+8
CNSTF4 1103101952
ASGNF4
line 1067
;1067:				VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 60
CNSTF4 0
ASGNF4
ADDRLP4 60+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 60+8
CNSTF4 0
ASGNF4
line 1069
;1068:
;1069:				AngleVectors( fwdAngles, NULL, right, NULL );
ADDRLP4 60
ARGP4
ADDRLP4 1208
CNSTP4 0
ASGNP4
ADDRLP4 1208
INDIRP4
ARGP4
ADDRLP4 96
ARGP4
ADDRLP4 1208
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 1071
;1070:
;1071:				if ( legsAnim == BOTH_WALL_RUN_LEFT )
ADDRLP4 48
INDIRI4
CNSTI4 918
NEI4 $466
line 1072
;1072:				{
line 1073
;1073:					if ( pm->ps->legsTimer > 400 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 400
LEI4 $467
line 1074
;1074:					{//not at the end of the anim
line 1075
;1075:						float animLen = PM_AnimLength( 0, (animNumber_t)BOTH_WALL_RUN_LEFT );
CNSTI4 0
ARGI4
CNSTI4 918
ARGI4
ADDRLP4 1216
ADDRGP4 PM_AnimLength
CALLI4
ASGNI4
ADDRLP4 1212
ADDRLP4 1216
INDIRI4
CVIF4 4
ASGNF4
line 1076
;1076:						if ( pm->ps->legsTimer < animLen - 400 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 1212
INDIRF4
CNSTF4 1137180672
SUBF4
GEF4 $467
line 1077
;1077:						{//not at start of anim
line 1078
;1078:							VectorMA( pm->ps->origin, -16, right, traceto );
ADDRLP4 1220
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1224
CNSTF4 3246391296
ASGNF4
ADDRLP4 108
ADDRLP4 1220
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
ADDRLP4 96
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 108+4
ADDRLP4 1220
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
ADDRLP4 96+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 108+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 3246391296
ADDRLP4 96+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1079
;1079:							anim = BOTH_WALL_RUN_LEFT_FLIP;
ADDRLP4 56
CNSTI4 919
ASGNI4
line 1080
;1080:						}
line 1081
;1081:					}
line 1082
;1082:				}
ADDRGP4 $467
JUMPV
LABELV $466
line 1083
;1083:				else if ( legsAnim == BOTH_WALL_RUN_RIGHT )
ADDRLP4 48
INDIRI4
CNSTI4 915
NEI4 $476
line 1084
;1084:				{
line 1085
;1085:					if ( pm->ps->legsTimer > 400 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 400
LEI4 $478
line 1086
;1086:					{//not at the end of the anim
line 1087
;1087:						float animLen = PM_AnimLength( 0, (animNumber_t)BOTH_WALL_RUN_RIGHT );
CNSTI4 0
ARGI4
CNSTI4 915
ARGI4
ADDRLP4 1216
ADDRGP4 PM_AnimLength
CALLI4
ASGNI4
ADDRLP4 1212
ADDRLP4 1216
INDIRI4
CVIF4 4
ASGNF4
line 1088
;1088:						if ( pm->ps->legsTimer < animLen - 400 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 1212
INDIRF4
CNSTF4 1137180672
SUBF4
GEF4 $480
line 1089
;1089:						{//not at start of anim
line 1090
;1090:							VectorMA( pm->ps->origin, 16, right, traceto );
ADDRLP4 1220
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1224
CNSTF4 1098907648
ASGNF4
ADDRLP4 108
ADDRLP4 1220
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
ADDRLP4 96
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 108+4
ADDRLP4 1220
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
ADDRLP4 96+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 108+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1098907648
ADDRLP4 96+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1091
;1091:							anim = BOTH_WALL_RUN_RIGHT_FLIP;
ADDRLP4 56
CNSTI4 916
ASGNI4
line 1092
;1092:						}
LABELV $480
line 1093
;1093:					}
LABELV $478
line 1094
;1094:				}
LABELV $476
LABELV $467
line 1095
;1095:				if ( anim != -1 )
ADDRLP4 56
INDIRI4
CNSTI4 -1
EQI4 $486
line 1096
;1096:				{
line 1097
;1097:					pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID|CONTENTS_BODY );
ADDRLP4 120
ARGP4
ADDRLP4 1212
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1216
ADDRLP4 1212
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1216
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 72
ARGP4
ADDRLP4 84
ARGP4
ADDRLP4 108
ARGP4
ADDRLP4 1216
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 257
ARGI4
ADDRLP4 1212
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 1098
;1098:					if ( trace.fraction < 1.0f )
ADDRLP4 120+8
INDIRF4
CNSTF4 1065353216
GEF4 $488
line 1099
;1099:					{//flip off wall
line 1100
;1100:						int parts = 0;
ADDRLP4 1220
CNSTI4 0
ASGNI4
line 1102
;1101:
;1102:						if ( anim == BOTH_WALL_RUN_LEFT_FLIP )
ADDRLP4 56
INDIRI4
CNSTI4 919
NEI4 $491
line 1103
;1103:						{
line 1104
;1104:							pm->ps->velocity[0] *= 0.5f;
ADDRLP4 1224
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1224
INDIRP4
CNSTF4 1056964608
ADDRLP4 1224
INDIRP4
INDIRF4
MULF4
ASGNF4
line 1105
;1105:							pm->ps->velocity[1] *= 0.5f;
ADDRLP4 1228
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1228
INDIRP4
CNSTF4 1056964608
ADDRLP4 1228
INDIRP4
INDIRF4
MULF4
ASGNF4
line 1106
;1106:							VectorMA( pm->ps->velocity, 150, right, pm->ps->velocity );
ADDRLP4 1232
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1232
INDIRP4
ADDRLP4 1232
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 96
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1236
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1236
INDIRP4
ADDRLP4 1236
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 96+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1240
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1240
INDIRP4
ADDRLP4 1240
INDIRP4
INDIRF4
CNSTF4 1125515264
ADDRLP4 96+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1107
;1107:						}
ADDRGP4 $492
JUMPV
LABELV $491
line 1108
;1108:						else if ( anim == BOTH_WALL_RUN_RIGHT_FLIP )
ADDRLP4 56
INDIRI4
CNSTI4 916
NEI4 $495
line 1109
;1109:						{
line 1110
;1110:							pm->ps->velocity[0] *= 0.5f;
ADDRLP4 1224
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1224
INDIRP4
CNSTF4 1056964608
ADDRLP4 1224
INDIRP4
INDIRF4
MULF4
ASGNF4
line 1111
;1111:							pm->ps->velocity[1] *= 0.5f;
ADDRLP4 1228
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1228
INDIRP4
CNSTF4 1056964608
ADDRLP4 1228
INDIRP4
INDIRF4
MULF4
ASGNF4
line 1112
;1112:							VectorMA( pm->ps->velocity, -150, right, pm->ps->velocity );
ADDRLP4 1232
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1232
INDIRP4
ADDRLP4 1232
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 96
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1236
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1236
INDIRP4
ADDRLP4 1236
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 96+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1240
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1240
INDIRP4
ADDRLP4 1240
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 96+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1113
;1113:						}
LABELV $495
LABELV $492
line 1114
;1114:						parts = SETANIM_LEGS;
ADDRLP4 1220
CNSTI4 2
ASGNI4
line 1115
;1115:						if ( !pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
NEI4 $499
line 1116
;1116:						{
line 1117
;1117:							parts = SETANIM_BOTH;
ADDRLP4 1220
CNSTI4 3
ASGNI4
line 1118
;1118:						}
LABELV $499
line 1119
;1119:						PM_SetAnim( parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 );
ADDRLP4 1220
INDIRI4
ARGI4
ADDRLP4 56
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 1120
;1120:						pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 1121
;1121:					}
LABELV $488
line 1122
;1122:				}
LABELV $486
line 1123
;1123:				if ( pm->cmd.upmove != 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $458
line 1124
;1124:				{//jump failed, so don't try to do normal jump code, just return
line 1125
;1125:					return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
line 1127
;1126:				}
;1127:			}
LABELV $457
line 1128
;1128:			else if ( pm->cmd.forwardmove > 0 //pushing forward
ADDRLP4 56
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $503
ADDRLP4 60
ADDRLP4 56
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 60
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 1
LEI4 $503
ADDRLP4 60
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 1128792064
LEF4 $503
ADDRLP4 64
ADDRGP4 PM_GroundDistance
CALLF4
ASGNF4
ADDRLP4 64
INDIRF4
CNSTF4 1117782016
GTF4 $503
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
NEI4 $503
line 1133
;1129:				&& pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1
;1130:				&& pm->ps->velocity[2] > 200
;1131:				&& PM_GroundDistance() <= 80 //unfortunately we do not have a happy ground timer like SP (this would use up more bandwidth if we wanted prediction workign right), so we'll just use the actual ground distance.
;1132:				&& !BG_InSpecialJump(pm->ps->legsAnim))
;1133:			{//run up wall, flip backwards
line 1138
;1134:				vec3_t fwd, traceto, mins, maxs, fwdAngles;
;1135:				trace_t	trace;
;1136:				vec3_t	idealNormal;
;1137:
;1138:				VectorSet(mins, pm->mins[0],pm->mins[1],pm->mins[2]);
ADDRLP4 1224
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 96
ADDRLP4 1224
INDIRP4
CNSTI4 188
ADDP4
INDIRF4
ASGNF4
ADDRLP4 96+4
ADDRLP4 1224
INDIRP4
CNSTI4 192
ADDP4
INDIRF4
ASGNF4
ADDRLP4 96+8
ADDRGP4 pm
INDIRP4
CNSTI4 196
ADDP4
INDIRF4
ASGNF4
line 1139
;1139:				VectorSet(maxs, pm->maxs[0],pm->maxs[1],pm->maxs[2]);
ADDRLP4 1228
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 108
ADDRLP4 1228
INDIRP4
CNSTI4 200
ADDP4
INDIRF4
ASGNF4
ADDRLP4 108+4
ADDRLP4 1228
INDIRP4
CNSTI4 204
ADDP4
INDIRF4
ASGNF4
ADDRLP4 108+8
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
INDIRF4
ASGNF4
line 1140
;1140:				VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 120
CNSTF4 0
ASGNF4
ADDRLP4 120+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 120+8
CNSTF4 0
ASGNF4
line 1142
;1141:
;1142:				AngleVectors( fwdAngles, fwd, NULL, NULL );
ADDRLP4 120
ARGP4
ADDRLP4 84
ARGP4
ADDRLP4 1232
CNSTP4 0
ASGNP4
ADDRLP4 1232
INDIRP4
ARGP4
ADDRLP4 1232
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 1143
;1143:				VectorMA( pm->ps->origin, 32, fwd, traceto );
ADDRLP4 1236
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1240
CNSTF4 1107296256
ASGNF4
ADDRLP4 72
ADDRLP4 1236
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1240
INDIRF4
ADDRLP4 84
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 72+4
ADDRLP4 1236
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1240
INDIRF4
ADDRLP4 84+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 72+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1107296256
ADDRLP4 84+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1145
;1144:
;1145:				pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, MASK_PLAYERSOLID );//FIXME: clip brushes too?
ADDRLP4 144
ARGP4
ADDRLP4 1244
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1248
ADDRLP4 1244
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1248
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 96
ARGP4
ADDRLP4 108
ARGP4
ADDRLP4 72
ARGP4
ADDRLP4 1248
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 273
ARGI4
ADDRLP4 1244
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 1146
;1146:				VectorSubtract( pm->ps->origin, traceto, idealNormal );
ADDRLP4 1252
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 132
ADDRLP4 1252
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 72
INDIRF4
SUBF4
ASGNF4
ADDRLP4 132+4
ADDRLP4 1252
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 72+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 132+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 72+8
INDIRF4
SUBF4
ASGNF4
line 1147
;1147:				VectorNormalize( idealNormal );
ADDRLP4 132
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1149
;1148:				
;1149:				if ( trace.fraction < 1.0f )
ADDRLP4 144+8
INDIRF4
CNSTF4 1065353216
GEF4 $519
line 1150
;1150:				{//there is a wall there
line 1151
;1151:					int parts = SETANIM_LEGS;
ADDRLP4 1256
CNSTI4 2
ASGNI4
line 1153
;1152:
;1153:					pm->ps->velocity[0] = pm->ps->velocity[1] = 0;
ADDRLP4 1260
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1264
CNSTF4 0
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
ADDRLP4 1260
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1264
INDIRF4
ASGNF4
line 1154
;1154:					VectorMA( pm->ps->velocity, -150, fwd, pm->ps->velocity );
ADDRLP4 1268
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 1268
INDIRP4
ADDRLP4 1268
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 84
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1272
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 1272
INDIRP4
ADDRLP4 1272
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 84+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1276
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1276
INDIRP4
ADDRLP4 1276
INDIRP4
INDIRF4
CNSTF4 3272998912
ADDRLP4 84+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1155
;1155:					pm->ps->velocity[2] += 128;
ADDRLP4 1280
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 1280
INDIRP4
ADDRLP4 1280
INDIRP4
INDIRF4
CNSTF4 1124073472
ADDF4
ASGNF4
line 1157
;1156:
;1157:					if ( !pm->ps->weaponTime )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
NEI4 $524
line 1158
;1158:					{
line 1159
;1159:						parts = SETANIM_BOTH;
ADDRLP4 1256
CNSTI4 3
ASGNI4
line 1160
;1160:					}
LABELV $524
line 1161
;1161:					PM_SetAnim( parts, BOTH_WALL_FLIP_BACK1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 );
ADDRLP4 1256
INDIRI4
ARGI4
CNSTI4 944
ARGI4
CNSTI4 3
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 1163
;1162:
;1163:					pm->ps->legsTimer -= 600; //I force this anim to play to the end to prevent landing on your head and suddenly flipping over.
ADDRLP4 1284
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
ASGNP4
ADDRLP4 1284
INDIRP4
ADDRLP4 1284
INDIRP4
INDIRI4
CNSTI4 600
SUBI4
ASGNI4
line 1166
;1164:											  //It is a bit too long at the end though, so I'll just shorten it.
;1165:
;1166:					PM_SetForceJumpZStart(pm->ps->origin[2]);//so we don't take damage if we land at same height
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ARGF4
ADDRGP4 PM_SetForceJumpZStart
CALLV
pop
line 1167
;1167:					pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 1168
;1168:					pm->ps->fd.forceJumpSound = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1100
ADDP4
CNSTI4 1
ASGNI4
line 1169
;1169:					BG_ForcePowerDrain( pm->ps, FP_LEVITATION, 5 );
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
CNSTI4 5
ARGI4
ADDRGP4 BG_ForcePowerDrain
CALLV
pop
line 1171
;1170:
;1171:					if (trace.entityNum < MAX_CLIENTS)
ADDRLP4 144+52
INDIRI4
CNSTI4 32
GEI4 $526
line 1172
;1172:					{
line 1173
;1173:						pm->ps->forceKickFlip = trace.entityNum+1; //let the server know that this person gets kicked by this client
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1292
ADDP4
ADDRLP4 144+52
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1174
;1174:					}
LABELV $526
line 1175
;1175:				}
LABELV $519
line 1176
;1176:			}
LABELV $503
LABELV $458
line 1177
;1177:		}
LABELV $362
line 1178
;1178:	}
LABELV $359
LABELV $349
line 1180
;1179:
;1180:	if ( pm->cmd.upmove > 0 
ADDRLP4 48
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 52
CNSTI4 0
ASGNI4
ADDRLP4 48
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
ADDRLP4 52
INDIRI4
LEI4 $530
ADDRLP4 56
ADDRLP4 48
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $530
ADDRLP4 56
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 52
INDIRI4
GTI4 $532
ADDRLP4 48
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 52
INDIRI4
EQI4 $530
LABELV $532
line 1183
;1181:		&& pm->ps->weapon == WP_SABER
;1182:		&& (pm->ps->weaponTime > 0||pm->cmd.buttons&BUTTON_ATTACK) )
;1183:	{//okay, we just jumped and we're in an attack
line 1184
;1184:		if ( !BG_InRoll( pm->ps, pm->ps->legsAnim )
ADDRLP4 60
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 60
INDIRP4
ARGP4
ADDRLP4 60
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
ADDRLP4 68
ADDRGP4 PM_InKnockDown
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 72
ADDRGP4 BG_InDeathAnim
CALLI4
ASGNI4
ADDRLP4 72
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 76
ADDRGP4 BG_FlippingAnim
CALLI4
ASGNI4
ADDRLP4 76
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 80
ADDRGP4 PM_SpinningAnim
CALLI4
ASGNI4
ADDRLP4 80
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 84
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 84
INDIRI4
CNSTI4 0
NEI4 $533
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 88
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 88
INDIRI4
CNSTI4 0
EQI4 $533
line 1191
;1185:			&& !PM_InKnockDown( pm->ps )
;1186:			&& !BG_InDeathAnim(pm->ps->legsAnim)
;1187:			&& !BG_FlippingAnim( pm->ps->legsAnim )
;1188:			&& !PM_SpinningAnim( pm->ps->legsAnim )
;1189:			&& !BG_SaberInSpecialAttack( pm->ps->torsoAnim )
;1190:			&& ( BG_SaberInAttack( pm->ps->saberMove ) ) )
;1191:		{//not in an anim we shouldn't interrupt
line 1193
;1192:			//see if it's not too late to start a special jump-attack
;1193:			float animLength = PM_AnimLength( 0, (animNumber_t)pm->ps->torsoAnim );
CNSTI4 0
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 96
ADDRGP4 PM_AnimLength
CALLI4
ASGNI4
ADDRLP4 92
ADDRLP4 96
INDIRI4
CVIF4 4
ASGNF4
line 1194
;1194:			if ( animLength - pm->ps->torsoTimer < 500 )
ADDRLP4 92
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
CVIF4 4
SUBF4
CNSTF4 1140457472
GEF4 $535
line 1195
;1195:			{//just started the saberMove
line 1197
;1196:				//check for special-case jump attacks
;1197:				if ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 2
NEI4 $537
line 1198
;1198:				{//using medium attacks
line 1199
;1199:					if (PM_GroundDistance() < 32 &&
ADDRLP4 100
ADDRGP4 PM_GroundDistance
CALLF4
ASGNF4
ADDRLP4 100
INDIRF4
CNSTF4 1107296256
GEF4 $538
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 104
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 104
INDIRI4
CNSTI4 0
NEI4 $538
line 1201
;1200:						!BG_InSpecialJump(pm->ps->legsAnim))
;1201:					{ //FLIP AND DOWNWARD ATTACK
line 1204
;1202:						trace_t tr;
;1203:
;1204:						if (PM_SomeoneInFront(&tr))
ADDRLP4 108
ARGP4
ADDRLP4 1188
ADDRGP4 PM_SomeoneInFront
CALLI4
ASGNI4
ADDRLP4 1188
INDIRI4
CNSTI4 0
EQI4 $538
line 1205
;1205:						{
line 1206
;1206:							PM_SetSaberMove(PM_SaberFlipOverAttackMove(&tr));
ADDRLP4 108
ARGP4
ADDRLP4 1192
ADDRGP4 PM_SaberFlipOverAttackMove
CALLI4
ASGNI4
ADDRLP4 1192
INDIRI4
CVII2 4
CVII4 2
ARGI4
ADDRGP4 PM_SetSaberMove
CALLV
pop
line 1207
;1207:							pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 1208
;1208:							pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 1209
;1209:							pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 1196
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1196
INDIRP4
ADDRLP4 1196
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1210
;1210:							pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 1211
;1211:							VectorClear(pml.groundTrace.plane.normal);
ADDRLP4 1200
CNSTF4 0
ASGNF4
ADDRGP4 pml+52+24+8
ADDRLP4 1200
INDIRF4
ASGNF4
ADDRGP4 pml+52+24+4
ADDRLP4 1200
INDIRF4
ASGNF4
ADDRGP4 pml+52+24
ADDRLP4 1200
INDIRF4
ASGNF4
line 1213
;1212:
;1213:							pm->ps->weaponTime = pm->ps->torsoTimer;
ADDRLP4 1204
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
CNSTI4 44
ADDP4
ADDRLP4 1204
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
ASGNI4
line 1214
;1214:						}
line 1215
;1215:					}
line 1216
;1216:				}
ADDRGP4 $538
JUMPV
LABELV $537
line 1217
;1217:				else if ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_3 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
NEI4 $553
line 1218
;1218:				{//using strong attacks
line 1219
;1219:					if ( pm->cmd.forwardmove > 0 && //going forward
ADDRLP4 100
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 104
CNSTI4 0
ASGNI4
ADDRLP4 100
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 104
INDIRI4
LEI4 $555
ADDRLP4 100
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 104
INDIRI4
EQI4 $555
ADDRLP4 108
ADDRGP4 PM_GroundDistance
CALLF4
ASGNF4
ADDRLP4 108
INDIRF4
CNSTF4 1107296256
GEF4 $555
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 112
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 112
INDIRI4
CNSTI4 0
NEI4 $555
line 1223
;1220:						(pm->cmd.buttons & BUTTON_ATTACK) && //must be holding attack still
;1221:						PM_GroundDistance() < 32 &&
;1222:						!BG_InSpecialJump(pm->ps->legsAnim))
;1223:					{//strong attack: jump-hack
line 1224
;1224:						PM_SetSaberMove( PM_SaberJumpAttackMove() );
ADDRLP4 116
ADDRGP4 PM_SaberJumpAttackMove
CALLI4
ASGNI4
ADDRLP4 116
INDIRI4
CVII2 4
CVII4 2
ARGI4
ADDRGP4 PM_SetSaberMove
CALLV
pop
line 1225
;1225:						pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 1226
;1226:						pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 1227
;1227:						pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 120
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 120
INDIRP4
ADDRLP4 120
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1228
;1228:						pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 1229
;1229:						VectorClear(pml.groundTrace.plane.normal);
ADDRLP4 124
CNSTF4 0
ASGNF4
ADDRGP4 pml+52+24+8
ADDRLP4 124
INDIRF4
ASGNF4
ADDRGP4 pml+52+24+4
ADDRLP4 124
INDIRF4
ASGNF4
ADDRGP4 pml+52+24
ADDRLP4 124
INDIRF4
ASGNF4
line 1231
;1230:
;1231:						pm->ps->weaponTime = pm->ps->torsoTimer;
ADDRLP4 128
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 128
INDIRP4
CNSTI4 44
ADDP4
ADDRLP4 128
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
ASGNI4
line 1232
;1232:					}
LABELV $555
line 1233
;1233:				}
LABELV $553
LABELV $538
line 1234
;1234:			}
LABELV $535
line 1235
;1235:		}
LABELV $533
line 1236
;1236:	}
LABELV $530
line 1237
;1237:	if ( pm->ps->groundEntityNum == ENTITYNUM_NONE )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $567
line 1238
;1238:	{
line 1239
;1239:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $246
JUMPV
LABELV $567
line 1241
;1240:	}
;1241:	if ( pm->cmd.upmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $569
line 1242
;1242:	{//no special jumps
line 1243
;1243:		pm->ps->velocity[2] = JUMP_VELOCITY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1130430464
ASGNF4
line 1244
;1244:		PM_SetForceJumpZStart(pm->ps->origin[2]);//so we don't take damage if we land at same height
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ARGF4
ADDRGP4 PM_SetForceJumpZStart
CALLV
pop
line 1245
;1245:		pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 60
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 60
INDIRP4
ADDRLP4 60
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1246
;1246:	}
LABELV $569
line 1249
;1247:
;1248:	//Jumping
;1249:	pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 1250
;1250:	pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 1251
;1251:	pm->ps->pm_flags |= PMF_JUMP_HELD;
ADDRLP4 60
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 60
INDIRP4
ADDRLP4 60
INDIRP4
INDIRI4
CNSTI4 2
BORI4
ASGNI4
line 1252
;1252:	pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 1253
;1253:	PM_SetForceJumpZStart(pm->ps->origin[2]);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ARGF4
ADDRGP4 PM_SetForceJumpZStart
CALLV
pop
line 1255
;1254:
;1255:	PM_AddEvent( EV_JUMP );
CNSTI4 14
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 1258
;1256:
;1257:	//Set the animations
;1258:	if ( pm->ps->gravity > 0 && !BG_InSpecialJump( pm->ps->legsAnim ) )
ADDRLP4 64
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTI4 56
ADDP4
INDIRI4
CNSTI4 0
LEI4 $573
ADDRLP4 64
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
NEI4 $573
line 1259
;1259:	{
line 1260
;1260:		PM_JumpForDir();
ADDRGP4 PM_JumpForDir
CALLV
pop
line 1261
;1261:	}
LABELV $573
line 1263
;1262:
;1263:	return qtrue;
CNSTI4 1
RETI4
LABELV $246
endproc PM_CheckJump 1288 28
proc PM_CheckWaterJump 56 8
line 1270
;1264:}
;1265:/*
;1266:=============
;1267:PM_CheckWaterJump
;1268:=============
;1269:*/
;1270:static qboolean	PM_CheckWaterJump( void ) {
line 1275
;1271:	vec3_t	spot;
;1272:	int		cont;
;1273:	vec3_t	flatforward;
;1274:
;1275:	if (pm->ps->pm_time) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
INDIRI4
CNSTI4 0
EQI4 $576
line 1276
;1276:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $575
JUMPV
LABELV $576
line 1280
;1277:	}
;1278:
;1279:	// check for water jump
;1280:	if ( pm->waterlevel != 2 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 2
EQI4 $578
line 1281
;1281:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $575
JUMPV
LABELV $578
line 1284
;1282:	}
;1283:
;1284:	flatforward[0] = pml.forward[0];
ADDRLP4 12
ADDRGP4 pml
INDIRF4
ASGNF4
line 1285
;1285:	flatforward[1] = pml.forward[1];
ADDRLP4 12+4
ADDRGP4 pml+4
INDIRF4
ASGNF4
line 1286
;1286:	flatforward[2] = 0;
ADDRLP4 12+8
CNSTF4 0
ASGNF4
line 1287
;1287:	VectorNormalize (flatforward);
ADDRLP4 12
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1289
;1288:
;1289:	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 1290
;1290:	spot[2] += 4;
ADDRLP4 0+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1082130432
ADDF4
ASGNF4
line 1291
;1291:	cont = pm->pointcontents (spot, pm->ps->clientNum );
ADDRLP4 0
ARGP4
ADDRLP4 36
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 36
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 40
ADDRLP4 36
INDIRP4
CNSTI4 244
ADDP4
INDIRP4
CALLI4
ASGNI4
ADDRLP4 24
ADDRLP4 40
INDIRI4
ASGNI4
line 1292
;1292:	if ( !(cont & CONTENTS_SOLID) ) {
ADDRLP4 24
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
NEI4 $588
line 1293
;1293:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $575
JUMPV
LABELV $588
line 1296
;1294:	}
;1295:
;1296:	spot[2] += 16;
ADDRLP4 0+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1098907648
ADDF4
ASGNF4
line 1297
;1297:	cont = pm->pointcontents (spot, pm->ps->clientNum );
ADDRLP4 0
ARGP4
ADDRLP4 44
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 48
ADDRLP4 44
INDIRP4
CNSTI4 244
ADDP4
INDIRP4
CALLI4
ASGNI4
ADDRLP4 24
ADDRLP4 48
INDIRI4
ASGNI4
line 1298
;1298:	if ( cont ) {
ADDRLP4 24
INDIRI4
CNSTI4 0
EQI4 $591
line 1299
;1299:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $575
JUMPV
LABELV $591
line 1303
;1300:	}
;1301:
;1302:	// jump out of water
;1303:	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 1304
;1304:	pm->ps->velocity[2] = 350;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1135542272
ASGNF4
line 1306
;1305:
;1306:	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 1307
;1307:	pm->ps->pm_time = 2000;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
CNSTI4 2000
ASGNI4
line 1309
;1308:
;1309:	return qtrue;
CNSTI4 1
RETI4
LABELV $575
endproc PM_CheckWaterJump 56 8
proc PM_WaterJumpMove 12 4
line 1322
;1310:}
;1311:
;1312://============================================================================
;1313:
;1314:
;1315:/*
;1316:===================
;1317:PM_WaterJumpMove
;1318:
;1319:Flying out of the water
;1320:===================
;1321:*/
;1322:static void PM_WaterJumpMove( void ) {
line 1325
;1323:	// waterjump has no control, but falls
;1324:
;1325:	PM_StepSlideMove( qtrue );
CNSTI4 1
ARGI4
ADDRGP4 PM_StepSlideMove
CALLV
pop
line 1327
;1326:
;1327:	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 56
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pml+36
INDIRF4
MULF4
SUBF4
ASGNF4
line 1328
;1328:	if (pm->ps->velocity[2] < 0) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 0
GEF4 $597
line 1330
;1329:		// cancel as soon as we are falling down again
;1330:		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 1331
;1331:		pm->ps->pm_time = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
CNSTI4 0
ASGNI4
line 1332
;1332:	}
LABELV $597
line 1333
;1333:}
LABELV $595
endproc PM_WaterJumpMove 12 4
proc PM_WaterMove 76 16
line 1341
;1334:
;1335:/*
;1336:===================
;1337:PM_WaterMove
;1338:
;1339:===================
;1340:*/
;1341:static void PM_WaterMove( void ) {
line 1349
;1342:	int		i;
;1343:	vec3_t	wishvel;
;1344:	float	wishspeed;
;1345:	vec3_t	wishdir;
;1346:	float	scale;
;1347:	float	vel;
;1348:
;1349:	if ( PM_CheckWaterJump() ) {
ADDRLP4 40
ADDRGP4 PM_CheckWaterJump
CALLI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 0
EQI4 $600
line 1350
;1350:		PM_WaterJumpMove();
ADDRGP4 PM_WaterJumpMove
CALLV
pop
line 1351
;1351:		return;
ADDRGP4 $599
JUMPV
LABELV $600
line 1367
;1352:	}
;1353:#if 0
;1354:	// jump = head for surface
;1355:	if ( pm->cmd.upmove >= 10 ) {
;1356:		if (pm->ps->velocity[2] > -300) {
;1357:			if ( pm->watertype == CONTENTS_WATER ) {
;1358:				pm->ps->velocity[2] = 100;
;1359:			} else if (pm->watertype == CONTENTS_SLIME) {
;1360:				pm->ps->velocity[2] = 80;
;1361:			} else {
;1362:				pm->ps->velocity[2] = 50;
;1363:			}
;1364:		}
;1365:	}
;1366:#endif
;1367:	PM_Friction ();
ADDRGP4 PM_Friction
CALLV
pop
line 1369
;1368:
;1369:	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 1373
;1370:	//
;1371:	// user intentions
;1372:	//
;1373:	if ( !scale ) {
ADDRLP4 4
INDIRF4
CNSTF4 0
NEF4 $602
line 1374
;1374:		wishvel[0] = 0;
ADDRLP4 8
CNSTF4 0
ASGNF4
line 1375
;1375:		wishvel[1] = 0;
ADDRLP4 8+4
CNSTF4 0
ASGNF4
line 1376
;1376:		wishvel[2] = -60;		// sink towards bottom
ADDRLP4 8+8
CNSTF4 3262119936
ASGNF4
line 1377
;1377:	} else {
ADDRGP4 $603
JUMPV
LABELV $602
line 1378
;1378:		for (i=0 ; i<3 ; i++)
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $606
line 1379
;1379:			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 28
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDRLP4 4
INDIRF4
ADDRLP4 48
INDIRI4
ADDRGP4 pml+12
ADDP4
INDIRF4
MULF4
ADDRLP4 56
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDF4
ASGNF4
LABELV $607
line 1378
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $606
line 1381
;1380:
;1381:		wishvel[2] += scale * pm->cmd.upmove;
ADDRLP4 8+8
ADDRLP4 8+8
INDIRF4
ADDRLP4 4
INDIRF4
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDF4
ASGNF4
line 1382
;1382:	}
LABELV $603
line 1384
;1383:
;1384:	VectorCopy (wishvel, wishdir);
ADDRLP4 24
ADDRLP4 8
INDIRB
ASGNB 12
line 1385
;1385:	wishspeed = VectorNormalize(wishdir);
ADDRLP4 24
ARGP4
ADDRLP4 48
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 20
ADDRLP4 48
INDIRF4
ASGNF4
line 1387
;1386:
;1387:	if ( wishspeed > pm->ps->speed * pm_swimScale ) {
ADDRLP4 20
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_swimScale
INDIRF4
MULF4
LEF4 $612
line 1388
;1388:		wishspeed = pm->ps->speed * pm_swimScale;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_swimScale
INDIRF4
MULF4
ASGNF4
line 1389
;1389:	}
LABELV $612
line 1391
;1390:
;1391:	PM_Accelerate (wishdir, wishspeed, pm_wateraccelerate);
ADDRLP4 24
ARGP4
ADDRLP4 20
INDIRF4
ARGF4
ADDRGP4 pm_wateraccelerate
INDIRF4
ARGF4
ADDRGP4 PM_Accelerate
CALLV
pop
line 1394
;1392:
;1393:	// make sure we can go up slopes easily under water
;1394:	if ( pml.groundPlane && DotProduct( pm->ps->velocity, pml.groundTrace.plane.normal ) < 0 ) {
ADDRGP4 pml+48
INDIRI4
CNSTI4 0
EQI4 $614
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 $614
line 1395
;1395:		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 1397
;1396:		// slide along the ground plane
;1397:		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 1400
;1398:			pm->ps->velocity, OVERCLIP );
;1399:
;1400:		VectorNormalize(pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1401
;1401:		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 1402
;1402:	}
LABELV $614
line 1404
;1403:
;1404:	PM_SlideMove( qfalse );
CNSTI4 0
ARGI4
ADDRGP4 PM_SlideMove
CALLI4
pop
line 1405
;1405:}
LABELV $599
endproc PM_WaterMove 76 16
proc PM_FlyMove 56 12
line 1414
;1406:
;1407:/*
;1408:===================
;1409:PM_FlyMove
;1410:
;1411:Only with the flight powerup
;1412:===================
;1413:*/
;1414:static void PM_FlyMove( void ) {
line 1422
;1415:	int		i;
;1416:	vec3_t	wishvel;
;1417:	float	wishspeed;
;1418:	vec3_t	wishdir;
;1419:	float	scale;
;1420:
;1421:	// normal slowdown
;1422:	PM_Friction ();
ADDRGP4 PM_Friction
CALLV
pop
line 1424
;1423:
;1424:	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 1426
;1425:	
;1426:	if ( pm->ps->pm_type == PM_SPECTATOR && pm->cmd.buttons & BUTTON_ALT_ATTACK) {
ADDRLP4 40
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
NEI4 $628
ADDRLP4 40
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $628
line 1428
;1427:		//turbo boost
;1428:		scale *= 10;
ADDRLP4 4
CNSTF4 1092616192
ADDRLP4 4
INDIRF4
MULF4
ASGNF4
line 1429
;1429:	}
LABELV $628
line 1434
;1430:
;1431:	//
;1432:	// user intentions
;1433:	//
;1434:	if ( !scale ) {
ADDRLP4 4
INDIRF4
CNSTF4 0
NEF4 $630
line 1435
;1435:		wishvel[0] = 0;
ADDRLP4 8
CNSTF4 0
ASGNF4
line 1436
;1436:		wishvel[1] = 0;
ADDRLP4 8+4
CNSTF4 0
ASGNF4
line 1437
;1437:		wishvel[2] = pm->ps->speed * (pm->cmd.upmove/127.0f);
ADDRLP4 44
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 8+8
ADDRLP4 44
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 44
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CVIF4 4
CNSTF4 1123942400
DIVF4
MULF4
ASGNF4
line 1438
;1438:	} else {
ADDRGP4 $631
JUMPV
LABELV $630
line 1439
;1439:		for (i=0 ; i<3 ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $634
line 1440
;1440:			wishvel[i] = scale * pml.forward[i]*pm->cmd.forwardmove + scale * pml.right[i]*pm->cmd.rightmove;
ADDRLP4 44
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 52
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 44
INDIRI4
ADDRLP4 8
ADDP4
ADDRLP4 4
INDIRF4
ADDRLP4 44
INDIRI4
ADDRGP4 pml
ADDP4
INDIRF4
MULF4
ADDRLP4 52
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDRLP4 4
INDIRF4
ADDRLP4 44
INDIRI4
ADDRGP4 pml+12
ADDP4
INDIRF4
MULF4
ADDRLP4 52
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDF4
ASGNF4
line 1441
;1441:		}
LABELV $635
line 1439
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $634
line 1443
;1442:
;1443:		wishvel[2] += scale * pm->cmd.upmove;
ADDRLP4 8+8
ADDRLP4 8+8
INDIRF4
ADDRLP4 4
INDIRF4
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CVIF4 4
MULF4
ADDF4
ASGNF4
line 1444
;1444:	}
LABELV $631
line 1446
;1445:
;1446:	VectorCopy (wishvel, wishdir);
ADDRLP4 20
ADDRLP4 8
INDIRB
ASGNB 12
line 1447
;1447:	wishspeed = VectorNormalize(wishdir);
ADDRLP4 20
ARGP4
ADDRLP4 44
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 32
ADDRLP4 44
INDIRF4
ASGNF4
line 1449
;1448:
;1449:	PM_Accelerate (wishdir, wishspeed, pm_flyaccelerate);
ADDRLP4 20
ARGP4
ADDRLP4 32
INDIRF4
ARGF4
ADDRGP4 pm_flyaccelerate
INDIRF4
ARGF4
ADDRGP4 PM_Accelerate
CALLV
pop
line 1451
;1450:
;1451:	PM_StepSlideMove( qfalse );
CNSTI4 0
ARGI4
ADDRGP4 PM_StepSlideMove
CALLV
pop
line 1452
;1452:}
LABELV $627
endproc PM_FlyMove 56 12
proc PM_FlightMove 132 8
line 1456
;1453:
;1454:
;1455:// adnan
;1456:static void PM_FlightMove(void) {
line 1469
;1457:   int		i;
;1458:	vec3_t	wishvel;
;1459:	float	wishspeed;
;1460:	vec3_t	wishdir;
;1461:	float	scale;
;1462:   float speed;
;1463:   vec3_t axis[3];
;1464:   quat_t q;
;1465:
;1466:	// normal slowdown
;1467:	//PM_Friction ();
;1468:
;1469:	scale = PM_CmdScale( &pm->cmd );
ADDRGP4 pm
INDIRP4
CNSTI4 4
ADDP4
ARGP4
ADDRLP4 92
ADDRGP4 PM_CmdScale
CALLF4
ASGNF4
ADDRLP4 56
ADDRLP4 92
INDIRF4
ASGNF4
line 1471
;1470:	
;1471:	if ( pm->ps->pm_type == PM_SPECTATOR && pm->cmd.buttons & BUTTON_ALT_ATTACK) {
ADDRLP4 96
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 96
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
NEI4 $641
ADDRLP4 96
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $641
line 1473
;1472:		//turbo boost
;1473:		scale *= 10;
ADDRLP4 56
CNSTF4 1092616192
ADDRLP4 56
INDIRF4
MULF4
ASGNF4
line 1474
;1474:	}
LABELV $641
line 1495
;1475:
;1476:	//
;1477:	// user intentions
;1478:	//
;1479:	/*
;1480:   if ( !scale ) {
;1481:      wishvel[0] = 0;
;1482:		wishvel[1] = 0;
;1483:		wishvel[2] = pm->ps->speed * (pm->cmd.upmove/127.0f);
;1484:	} else {
;1485:		for (i=0 ; i<3 ; i++) {
;1486:			wishvel[i] = scale * pml.forward[i]*pm->cmd.forwardmove + scale * pml.right[i]*pm->cmd.rightmove;
;1487:		}
;1488:
;1489:		wishvel[2] += scale * pm->cmd.upmove;
;1490:	}
;1491:   */
;1492:
;1493:   // adnan
;1494:   // adjust view height
;1495:   pm->ps->viewheight = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 0
ASGNI4
line 1500
;1496:
;1497:   // add in roll
;1498:   // get throttle states and modify values...
;1499:   
;1500:   if(pm->cmd.buttons & BUTTON_ROLL_RIGHT) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 16384
BANDI4
CNSTI4 0
EQI4 $643
line 1501
;1501:      pm->ps->stats[STAT_ROLL] += 1;
ADDRLP4 100
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 256
ADDP4
ASGNP4
ADDRLP4 100
INDIRP4
ADDRLP4 100
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1502
;1502:      pm->ps->viewangles[ROLL] += 1;
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 164
ADDP4
ASGNP4
ADDRLP4 104
INDIRP4
ADDRLP4 104
INDIRP4
INDIRF4
CNSTF4 1065353216
ADDF4
ASGNF4
line 1503
;1503:   } else if(pm->cmd.buttons & BUTTON_ROLL_LEFT) {
ADDRGP4 $644
JUMPV
LABELV $643
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 64
BANDI4
CNSTI4 0
EQI4 $645
line 1504
;1504:      pm->ps->stats[STAT_ROLL] -= 1;
ADDRLP4 100
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 256
ADDP4
ASGNP4
ADDRLP4 100
INDIRP4
ADDRLP4 100
INDIRP4
INDIRI4
CNSTI4 1
SUBI4
ASGNI4
line 1505
;1505:      pm->ps->viewangles[ROLL] -= 1;
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 164
ADDP4
ASGNP4
ADDRLP4 104
INDIRP4
ADDRLP4 104
INDIRP4
INDIRF4
CNSTF4 1065353216
SUBF4
ASGNF4
line 1506
;1506:   }
LABELV $645
LABELV $644
line 1522
;1507:
;1508:   /*
;1509:   // clamp the roll
;1510:   if(pm->ps->viewangles[ROLL] < -360) {
;1511:      pm->ps->viewangles[ROLL] = 0;
;1512:   } else if (pm->ps->viewangles[ROLL] > 360) {
;1513:      pm->ps->viewangles[ROLL] = 0;
;1514:   }
;1515:   */
;1516:
;1517:   
;1518:   // METHOD 1: THROTTLE IS A DIRECT CONTROL OF VELOCITY
;1519:
;1520:   // GET CURRENT SPEED
;1521:   // apply the velocity in the direction we're moving
;1522:   wishspeed = VectorNormalize(pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRLP4 100
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 0
ADDRLP4 100
INDIRF4
ASGNF4
line 1525
;1523:
;1524:   // get throttle states and modify values...
;1525:   if(pm->cmd.buttons & BUTTON_THROTTLE_INCREASE) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 4096
BANDI4
CNSTI4 0
EQI4 $647
line 1526
;1526:      pm->ps->stats[STAT_THROTTLE] += 1;
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
ASGNP4
ADDRLP4 104
INDIRP4
ADDRLP4 104
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1527
;1527:   } else if(pm->cmd.buttons & BUTTON_THROTTLE_DECREASE) {
ADDRGP4 $648
JUMPV
LABELV $647
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 8192
BANDI4
CNSTI4 0
EQI4 $649
line 1528
;1528:      pm->ps->stats[STAT_THROTTLE] -= 1;
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
ASGNP4
ADDRLP4 104
INDIRP4
ADDRLP4 104
INDIRP4
INDIRI4
CNSTI4 1
SUBI4
ASGNI4
line 1529
;1529:   }
LABELV $649
LABELV $648
line 1532
;1530:
;1531:   // clamp the throttle...
;1532:   if(pm->ps->stats[STAT_THROTTLE] < 0)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
CNSTI4 0
GEI4 $651
line 1533
;1533:		pm->ps->stats[STAT_THROTTLE] = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
CNSTI4 0
ASGNI4
ADDRGP4 $652
JUMPV
LABELV $651
line 1534
;1534:	else if(pm->ps->stats[STAT_THROTTLE] > 100)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
CNSTI4 100
LEI4 $653
line 1535
;1535:		pm->ps->stats[STAT_THROTTLE] = 100;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
CNSTI4 100
ASGNI4
LABELV $653
LABELV $652
line 1541
;1536:   
;1537:   //Com_Printf("throttle: %d, wishspeed: %d\n", pm->ps->stats[STAT_THROTTLE], wishspeed);
;1538:
;1539:   // MODIFY SPEED TO FIT
;1540:   // if were not fast enough yet
;1541:   if(wishspeed < (pm->ps->stats[STAT_THROTTLE] * 3))
ADDRLP4 0
INDIRF4
CNSTI4 3
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
MULI4
CVIF4 4
GEF4 $655
line 1543
;1542:      //wishspeed += pm_flyaccelerate;
;1543:      wishspeed = wishspeed + 1;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1065353216
ADDF4
ASGNF4
ADDRGP4 $656
JUMPV
LABELV $655
line 1545
;1544:   // if were too fast right now
;1545:   else if(wishspeed > (pm->ps->stats[STAT_THROTTLE] * 3))
ADDRLP4 0
INDIRF4
CNSTI4 3
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
MULI4
CVIF4 4
LEF4 $657
line 1547
;1546:      //wishspeed -= pm_flyaccelerate;
;1547:      wishspeed = wishspeed - 1;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1065353216
SUBF4
ASGNF4
ADDRGP4 $658
JUMPV
LABELV $657
line 1549
;1548:   // were already going the right speed
;1549:   else if(wishspeed == (pm->ps->stats[STAT_THROTTLE] * 3))
ADDRLP4 0
INDIRF4
CNSTI4 3
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 252
ADDP4
INDIRI4
MULI4
CVIF4 4
NEF4 $659
line 1550
;1550:      wishspeed = wishspeed;
ADDRLP4 0
ADDRLP4 0
INDIRF4
ASGNF4
LABELV $659
LABELV $658
LABELV $656
line 1555
;1551:
;1552:   //wishspeed = pm->ps->stats[STAT_THROTTLE];
;1553:
;1554:   // CLAMP SPEED
;1555:   if(wishspeed > 200)
ADDRLP4 0
INDIRF4
CNSTF4 1128792064
LEF4 $661
line 1556
;1556:      wishspeed = 200;
ADDRLP4 0
CNSTF4 1128792064
ASGNF4
ADDRGP4 $662
JUMPV
LABELV $661
line 1557
;1557:   else if(wishspeed < 0)
ADDRLP4 0
INDIRF4
CNSTF4 0
GEF4 $663
line 1558
;1558:      wishspeed = 0;
ADDRLP4 0
CNSTF4 0
ASGNF4
LABELV $663
LABELV $662
line 1566
;1559:
;1560:   // APPLY SPEED IN CURRENT DIRECTION
;1561:   // point us in the current viewing direction
;1562:   
;1563:   //VectorCopy(pml.forward, pm->ps->velocity);
;1564:   //AnglesToAxis(pm->ps->viewangles, axis);
;1565:   
;1566:   QuaternionFromTieFloats(pm->ps->tieFloats, &q);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 656
ADDP4
ARGP4
ADDRLP4 40
ARGP4
ADDRGP4 QuaternionFromTieFloats
CALLV
pop
line 1568
;1567://   Com_Printf("%f, %f, %f, %f", q.x, q.y, q.z, q.w);
;1568:   QuaternionToAxis(q, axis);
ADDRLP4 104
ADDRLP4 40
INDIRB
ASGNB 16
ADDRLP4 104
ARGP4
ADDRLP4 4
ARGP4
ADDRGP4 QuaternionToAxis
CALLF4
pop
line 1569
;1569:   VectorCopy(axis[0], pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 1572
;1570:   
;1571:   // get a unit vector in that direction
;1572:   VectorNormalize(pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1575
;1573:   
;1574:   // give us the right speed
;1575:   VectorScale(pm->ps->velocity, wishspeed, pm->ps->velocity);
ADDRLP4 120
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 120
INDIRP4
ADDRLP4 120
INDIRP4
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
ADDRLP4 124
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ADDRLP4 124
INDIRP4
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
ADDRLP4 128
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 128
INDIRP4
ADDRLP4 128
INDIRP4
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 1581
;1576:
;1577:   //Com_Printf("velocity: %f, %f, %f\n", pm->ps->velocity[0], pm->ps->velocity[1], pm->ps->velocity[2]);
;1578:   //Com_Printf("fwd: %f, %f, %f\n", pml.forward[0], pml.forward[1], pml.forward[2]);
;1579:   
;1580:   // scale bounding box
;1581:   VectorSet(pm->mins, -5, -5, -5);
ADDRGP4 pm
INDIRP4
CNSTI4 188
ADDP4
CNSTF4 3231711232
ASGNF4
ADDRGP4 pm
INDIRP4
CNSTI4 192
ADDP4
CNSTF4 3231711232
ASGNF4
ADDRGP4 pm
INDIRP4
CNSTI4 196
ADDP4
CNSTF4 3231711232
ASGNF4
line 1582
;1582:   VectorSet(pm->maxs, 5, 5, 5);
ADDRGP4 pm
INDIRP4
CNSTI4 200
ADDP4
CNSTF4 1084227584
ASGNF4
ADDRGP4 pm
INDIRP4
CNSTI4 204
ADDP4
CNSTF4 1084227584
ASGNF4
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1084227584
ASGNF4
line 1646
;1583:   
;1584:
;1585:   /*
;1586:   // METHOD 2: THROTTLE IS RESULT OF MAX FORWARD MINUS BACKWARDS
;1587:   // the resultant velocity is (max forward) + (max - throttle backwards)
;1588:   
;1589:   // get throttle states and modify values...
;1590:   if(pm->cmd.buttons & BUTTON_THROTTLE_INCREASE) {
;1591:      pm->ps->stats[STAT_THROTTLE] += 1;
;1592:   } else if(pm->cmd.buttons & BUTTON_THROTTLE_DECREASE) {
;1593:      pm->ps->stats[STAT_THROTTLE] -= 1;
;1594:   }
;1595:
;1596:   // clamp the throttle...
;1597:   if(pm->ps->stats[STAT_THROTTLE] < 0)
;1598:		pm->ps->stats[STAT_THROTTLE] = 0;
;1599:	else if(pm->ps->stats[STAT_THROTTLE] > 100)
;1600:		pm->ps->stats[STAT_THROTTLE] = 100;
;1601:
;1602:   // try it my own way...
;1603:   VectorCopy(pml.forward, wishvel);
;1604:   //VectorCopy(pm->ps->viewangles, wishvel);
;1605:   VectorNormalize(wishvel);
;1606:   //VectorScale(wishvel, pm->ps->persistant[PERS_THROTTLE], wishvel);
;1607:
;1608:   ///////////
;1609:   // forward velocity.......
;1610:   ///////////
;1611:   //VectorScale(wishvel, pm->ps->stats[STAT_THROTTLE], wishvel);
;1612:   VectorScale(wishvel, (100), wishvel);
;1613:
;1614:	VectorCopy (wishvel, wishdir);
;1615:	wishspeed = VectorNormalize(wishdir);
;1616:
;1617:   PM_Accelerate (wishdir, wishspeed, pm_flyaccelerate);
;1618:   //PM_Accelerate (wishdir, wishspeed, 20);
;1619:   
;1620:   ///////////
;1621:   // reverse velocity
;1622:   ///////////
;1623:   
;1624:   // apply in opposite direction
;1625:   //wishvel[0] = 1 - wishvel[0];
;1626:   //wishvel[1] = 1 - wishvel[1];
;1627:   //wishvel[2] = 1 - wishvel[2];
;1628:   
;1629:
;1630:   // get a unit vector in the direction of the reverse velocity
;1631:   VectorNormalize(wishvel);
;1632:   
;1633:   // scale it by the reverse throttle amount
;1634:   VectorScale(wishvel, -1 * ( (100 - pm->ps->stats[STAT_THROTTLE]) ), wishvel);
;1635:
;1636:	// copy it to the direction vector
;1637:   //VectorCopy (wishvel, wishdir);
;1638:   // calculate the speed
;1639:   wishspeed = VectorNormalize(wishdir);
;1640:
;1641:   PM_Accelerate (wishdir, wishspeed, pm_flyaccelerate);
;1642:   //PM_Accelerate (wishdir, wishspeed, 20);
;1643:   */ 
;1644:   
;1645:
;1646:	PM_StepSlideMove( qfalse );
CNSTI4 0
ARGI4
ADDRGP4 PM_StepSlideMove
CALLV
pop
line 1647
;1647:}
LABELV $640
endproc PM_FlightMove 132 8
proc PM_AirMove 84 16
line 1656
;1648:
;1649:
;1650:/*
;1651:===================
;1652:PM_AirMove
;1653:
;1654:===================
;1655:*/
;1656:static void PM_AirMove( void ) {
line 1665
;1657:	int			i;
;1658:	vec3_t		wishvel;
;1659:	float		fmove, smove;
;1660:	vec3_t		wishdir;
;1661:	float		wishspeed;
;1662:	float		scale;
;1663:	usercmd_t	cmd;
;1664:
;1665:	if (pm->ps->pm_type != PM_SPECTATOR)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
EQI4 $666
line 1666
;1666:	{
line 1668
;1667:#if METROID_JUMP
;1668:		PM_CheckJump();
ADDRGP4 PM_CheckJump
CALLI4
pop
line 1676
;1669:#else
;1670:		if (pm->ps->fd.forceJumpZStart &&
;1671:			pm->ps->forceJumpFlip)
;1672:		{
;1673:			PM_CheckJump();
;1674:		}
;1675:#endif
;1676:	}
LABELV $666
line 1677
;1677:	PM_Friction();
ADDRGP4 PM_Friction
CALLV
pop
line 1679
;1678:
;1679:	fmove = pm->cmd.forwardmove;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1680
;1680:	smove = pm->cmd.rightmove;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1682
;1681:
;1682:	cmd = pm->cmd;
ADDRLP4 44
ADDRGP4 pm
INDIRP4
CNSTI4 4
ADDP4
INDIRB
ASGNB 28
line 1683
;1683:	scale = PM_CmdScale( &cmd );
ADDRLP4 44
ARGP4
ADDRLP4 72
ADDRGP4 PM_CmdScale
CALLF4
ASGNF4
ADDRLP4 40
ADDRLP4 72
INDIRF4
ASGNF4
line 1686
;1684:
;1685:	// set the movementDir so clients can rotate the legs for strafing
;1686:	PM_SetMovementDir();
ADDRGP4 PM_SetMovementDir
CALLV
pop
line 1689
;1687:
;1688:	// project moves down to flat plane
;1689:	pml.forward[2] = 0;
ADDRGP4 pml+8
CNSTF4 0
ASGNF4
line 1690
;1690:	pml.right[2] = 0;
ADDRGP4 pml+12+8
CNSTF4 0
ASGNF4
line 1691
;1691:	VectorNormalize (pml.forward);
ADDRGP4 pml
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1692
;1692:	VectorNormalize (pml.right);
ADDRGP4 pml+12
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1694
;1693:
;1694:	if ( gPMDoSlowFall )
ADDRGP4 gPMDoSlowFall
INDIRI4
CNSTI4 0
EQI4 $672
line 1695
;1695:	{//no air-control
line 1696
;1696:		VectorClear( wishvel );
ADDRLP4 76
CNSTF4 0
ASGNF4
ADDRLP4 4+8
ADDRLP4 76
INDIRF4
ASGNF4
ADDRLP4 4+4
ADDRLP4 76
INDIRF4
ASGNF4
ADDRLP4 4
ADDRLP4 76
INDIRF4
ASGNF4
line 1697
;1697:	}
ADDRGP4 $673
JUMPV
LABELV $672
line 1699
;1698:	else
;1699:	{
line 1700
;1700:		for ( i = 0 ; i < 2 ; i++ )
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $676
line 1701
;1701:		{
line 1702
;1702:			wishvel[i] = pml.forward[i]*fmove + pml.right[i]*smove;
ADDRLP4 76
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 76
INDIRI4
ADDRLP4 4
ADDP4
ADDRLP4 76
INDIRI4
ADDRGP4 pml
ADDP4
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDRLP4 76
INDIRI4
ADDRGP4 pml+12
ADDP4
INDIRF4
ADDRLP4 20
INDIRF4
MULF4
ADDF4
ASGNF4
line 1703
;1703:		}
LABELV $677
line 1700
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 2
LTI4 $676
line 1704
;1704:		wishvel[2] = 0;
ADDRLP4 4+8
CNSTF4 0
ASGNF4
line 1705
;1705:	}
LABELV $673
line 1707
;1706:
;1707:	VectorCopy (wishvel, wishdir);
ADDRLP4 24
ADDRLP4 4
INDIRB
ASGNB 12
line 1708
;1708:	wishspeed = VectorNormalize(wishdir);
ADDRLP4 24
ARGP4
ADDRLP4 76
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 36
ADDRLP4 76
INDIRF4
ASGNF4
line 1709
;1709:	wishspeed *= scale;
ADDRLP4 36
ADDRLP4 36
INDIRF4
ADDRLP4 40
INDIRF4
MULF4
ASGNF4
line 1712
;1710:
;1711:	// not on ground, so little effect on velocity
;1712:	PM_Accelerate (wishdir, wishspeed, pm_airaccelerate);
ADDRLP4 24
ARGP4
ADDRLP4 36
INDIRF4
ARGF4
ADDRGP4 pm_airaccelerate
INDIRF4
ARGF4
ADDRGP4 PM_Accelerate
CALLV
pop
line 1717
;1713:
;1714:	// we may have a ground plane that is very steep, even
;1715:	// though we don't have a groundentity
;1716:	// slide along the steep plane
;1717:	if ( pml.groundPlane ) {
ADDRGP4 pml+48
INDIRI4
CNSTI4 0
EQI4 $682
line 1718
;1718:		PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, 
ADDRLP4 80
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 80
INDIRP4
ARGP4
ADDRGP4 pml+52+24
ARGP4
ADDRLP4 80
INDIRP4
ARGP4
CNSTF4 1065361605
ARGF4
ADDRGP4 PM_ClipVelocity
CALLV
pop
line 1720
;1719:			pm->ps->velocity, OVERCLIP );
;1720:	}
LABELV $682
line 1722
;1721:
;1722:	PM_StepSlideMove ( qtrue );
CNSTI4 1
ARGI4
ADDRGP4 PM_StepSlideMove
CALLV
pop
line 1723
;1723:}
LABELV $665
endproc PM_AirMove 84 16
proc PM_WalkMove 148 16
line 1731
;1724:
;1725:/*
;1726:===================
;1727:PM_WalkMove
;1728:
;1729:===================
;1730:*/
;1731:static void PM_WalkMove( void ) {
line 1743
;1732:	int			i;
;1733:	vec3_t		wishvel;
;1734:	float		fmove, smove;
;1735:	vec3_t		wishdir;
;1736:	float		wishspeed;
;1737:	float		scale;
;1738:	usercmd_t	cmd;
;1739:	float		accelerate;
;1740:	float		vel;
;1741:	float		totalVel;
;1742:
;1743:	if (pm->ps->velocity[0] < 0)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
CNSTF4 0
GEF4 $688
line 1744
;1744:	{
line 1745
;1745:		totalVel = -pm->ps->velocity[0];
ADDRLP4 44
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
NEGF4
ASGNF4
line 1746
;1746:	}
ADDRGP4 $689
JUMPV
LABELV $688
line 1748
;1747:	else
;1748:	{
line 1749
;1749:		totalVel = pm->ps->velocity[0];
ADDRLP4 44
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
ASGNF4
line 1750
;1750:	}
LABELV $689
line 1752
;1751:
;1752:	if (pm->ps->velocity[1] < 0)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
CNSTF4 0
GEF4 $690
line 1753
;1753:	{
line 1754
;1754:		totalVel += -pm->ps->velocity[1];
ADDRLP4 44
ADDRLP4 44
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
NEGF4
ADDF4
ASGNF4
line 1755
;1755:	}
ADDRGP4 $691
JUMPV
LABELV $690
line 1757
;1756:	else
;1757:	{
line 1758
;1758:		totalVel += pm->ps->velocity[1];
ADDRLP4 44
ADDRLP4 44
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
ADDF4
ASGNF4
line 1759
;1759:	}
LABELV $691
line 1761
;1760:
;1761:	if (totalVel < 200)
ADDRLP4 44
INDIRF4
CNSTF4 1128792064
GEF4 $692
line 1762
;1762:	{
line 1763
;1763:		pm->ps->fd.forceSpeedSmash = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1136
ADDP4
CNSTF4 1065353216
ASGNF4
line 1764
;1764:	}
LABELV $692
line 1766
;1765:
;1766:	if ( pm->waterlevel > 2 && DotProduct( pml.forward, pml.groundTrace.plane.normal ) > 0 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 2
LEI4 $694
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 $694
line 1768
;1767:		// begin swimming
;1768:		PM_WaterMove();
ADDRGP4 PM_WaterMove
CALLV
pop
line 1769
;1769:		return;
ADDRGP4 $687
JUMPV
LABELV $694
line 1773
;1770:	}
;1771:
;1772:
;1773:	if (pm->ps->pm_type != PM_SPECTATOR)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
EQI4 $706
line 1774
;1774:	{
line 1775
;1775:		if ( PM_CheckJump () ) {
ADDRLP4 84
ADDRGP4 PM_CheckJump
CALLI4
ASGNI4
ADDRLP4 84
INDIRI4
CNSTI4 0
EQI4 $708
line 1777
;1776:			// jumped away
;1777:			if ( pm->waterlevel > 1 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 1
LEI4 $710
line 1778
;1778:				PM_WaterMove();
ADDRGP4 PM_WaterMove
CALLV
pop
line 1779
;1779:			} else {
ADDRGP4 $687
JUMPV
LABELV $710
line 1780
;1780:				PM_AirMove();
ADDRGP4 PM_AirMove
CALLV
pop
line 1781
;1781:			}
line 1782
;1782:			return;
ADDRGP4 $687
JUMPV
LABELV $708
line 1784
;1783:		}
;1784:	}
LABELV $706
line 1786
;1785:
;1786:	PM_Friction ();
ADDRGP4 PM_Friction
CALLV
pop
line 1788
;1787:
;1788:	fmove = pm->cmd.forwardmove;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1789
;1789:	smove = pm->cmd.rightmove;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1791
;1790:
;1791:	cmd = pm->cmd;
ADDRLP4 52
ADDRGP4 pm
INDIRP4
CNSTI4 4
ADDP4
INDIRB
ASGNB 28
line 1792
;1792:	scale = PM_CmdScale( &cmd );
ADDRLP4 52
ARGP4
ADDRLP4 84
ADDRGP4 PM_CmdScale
CALLF4
ASGNF4
ADDRLP4 48
ADDRLP4 84
INDIRF4
ASGNF4
line 1795
;1793:
;1794:	// set the movementDir so clients can rotate the legs for strafing
;1795:	PM_SetMovementDir();
ADDRGP4 PM_SetMovementDir
CALLV
pop
line 1798
;1796:
;1797:	// project moves down to flat plane
;1798:	pml.forward[2] = 0;
ADDRGP4 pml+8
CNSTF4 0
ASGNF4
line 1799
;1799:	pml.right[2] = 0;
ADDRGP4 pml+12+8
CNSTF4 0
ASGNF4
line 1802
;1800:
;1801:	// project the forward and right directions onto the ground plane
;1802:	PM_ClipVelocity (pml.forward, pml.groundTrace.plane.normal, pml.forward, OVERCLIP );
ADDRLP4 88
ADDRGP4 pml
ASGNP4
ADDRLP4 88
INDIRP4
ARGP4
ADDRGP4 pml+52+24
ARGP4
ADDRLP4 88
INDIRP4
ARGP4
CNSTF4 1065361605
ARGF4
ADDRGP4 PM_ClipVelocity
CALLV
pop
line 1803
;1803:	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 1805
;1804:	//
;1805:	VectorNormalize (pml.forward);
ADDRGP4 pml
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1806
;1806:	VectorNormalize (pml.right);
ADDRGP4 pml+12
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1808
;1807:
;1808:	for ( i = 0 ; i < 3 ; i++ ) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $722
line 1809
;1809:		wishvel[i] = pml.forward[i]*fmove + pml.right[i]*smove;
ADDRLP4 92
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 92
INDIRI4
ADDRLP4 4
ADDP4
ADDRLP4 92
INDIRI4
ADDRGP4 pml
ADDP4
INDIRF4
ADDRLP4 16
INDIRF4
MULF4
ADDRLP4 92
INDIRI4
ADDRGP4 pml+12
ADDP4
INDIRF4
ADDRLP4 20
INDIRF4
MULF4
ADDF4
ASGNF4
line 1810
;1810:	}
LABELV $723
line 1808
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $722
line 1813
;1811:	// when going up or down slopes the wish velocity should Not be zero
;1812:
;1813:	VectorCopy (wishvel, wishdir);
ADDRLP4 32
ADDRLP4 4
INDIRB
ASGNB 12
line 1814
;1814:	wishspeed = VectorNormalize(wishdir);
ADDRLP4 32
ARGP4
ADDRLP4 92
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 24
ADDRLP4 92
INDIRF4
ASGNF4
line 1815
;1815:	wishspeed *= scale;
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRLP4 48
INDIRF4
MULF4
ASGNF4
line 1818
;1816:
;1817:	// clamp the speed lower if ducking
;1818:	if ( pm->ps->pm_flags & PMF_DUCKED ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $727
line 1819
;1819:		if ( wishspeed > pm->ps->speed * pm_duckScale ) {
ADDRLP4 24
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_duckScale
INDIRF4
MULF4
LEF4 $728
line 1820
;1820:			wishspeed = pm->ps->speed * pm_duckScale;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_duckScale
INDIRF4
MULF4
ASGNF4
line 1821
;1821:		}
line 1822
;1822:	}
ADDRGP4 $728
JUMPV
LABELV $727
line 1823
;1823:	else if ( (pm->ps->pm_flags & PMF_ROLLING) && !BG_InRoll(pm->ps, pm->ps->legsAnim) &&
ADDRLP4 96
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 96
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $731
ADDRLP4 96
INDIRP4
ARGP4
ADDRLP4 96
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 100
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 100
INDIRI4
CNSTI4 0
NEI4 $731
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 104
INDIRP4
ARGP4
ADDRLP4 104
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 108
ADDRGP4 PM_InRollComplete
CALLI4
ASGNI4
ADDRLP4 108
INDIRI4
CNSTI4 0
NEI4 $731
line 1825
;1824:		!PM_InRollComplete(pm->ps, pm->ps->legsAnim))
;1825:	{
line 1826
;1826:		if ( wishspeed > pm->ps->speed * pm_duckScale ) {
ADDRLP4 24
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_duckScale
INDIRF4
MULF4
LEF4 $733
line 1827
;1827:			wishspeed = pm->ps->speed * pm_duckScale;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pm_duckScale
INDIRF4
MULF4
ASGNF4
line 1828
;1828:		}
LABELV $733
line 1829
;1829:	}
LABELV $731
LABELV $728
line 1832
;1830:
;1831:	// clamp the speed lower if wading or walking on the bottom
;1832:	if ( pm->waterlevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 0
EQI4 $735
line 1835
;1833:		float	waterScale;
;1834:
;1835:		waterScale = pm->waterlevel / 3.0;
ADDRLP4 112
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1077936128
DIVF4
ASGNF4
line 1836
;1836:		waterScale = 1.0 - ( 1.0 - pm_swimScale ) * waterScale;
ADDRLP4 116
CNSTF4 1065353216
ASGNF4
ADDRLP4 112
ADDRLP4 116
INDIRF4
ADDRLP4 116
INDIRF4
ADDRGP4 pm_swimScale
INDIRF4
SUBF4
ADDRLP4 112
INDIRF4
MULF4
SUBF4
ASGNF4
line 1837
;1837:		if ( wishspeed > pm->ps->speed * waterScale ) {
ADDRLP4 24
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 112
INDIRF4
MULF4
LEF4 $737
line 1838
;1838:			wishspeed = pm->ps->speed * waterScale;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 112
INDIRF4
MULF4
ASGNF4
line 1839
;1839:		}
LABELV $737
line 1840
;1840:	}
LABELV $735
line 1844
;1841:
;1842:	// when a player gets hit, they temporarily lose
;1843:	// full control, which allows them to be moved a bit
;1844:	if ( ( pml.groundTrace.surfaceFlags & SURF_SLICK ) || pm->ps->pm_flags & PMF_TIME_KNOCKBACK ) {
ADDRLP4 112
CNSTI4 0
ASGNI4
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 16384
BANDI4
ADDRLP4 112
INDIRI4
NEI4 $743
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 64
BANDI4
ADDRLP4 112
INDIRI4
EQI4 $739
LABELV $743
line 1845
;1845:		accelerate = pm_airaccelerate;
ADDRLP4 80
ADDRGP4 pm_airaccelerate
INDIRF4
ASGNF4
line 1846
;1846:	} else {
ADDRGP4 $740
JUMPV
LABELV $739
line 1847
;1847:		accelerate = pm_accelerate;
ADDRLP4 80
ADDRGP4 pm_accelerate
INDIRF4
ASGNF4
line 1848
;1848:	}
LABELV $740
line 1850
;1849:
;1850:	PM_Accelerate (wishdir, wishspeed, accelerate);
ADDRLP4 32
ARGP4
ADDRLP4 24
INDIRF4
ARGF4
ADDRLP4 80
INDIRF4
ARGF4
ADDRGP4 PM_Accelerate
CALLV
pop
line 1855
;1851:
;1852:	//Com_Printf("velocity = %1.1f %1.1f %1.1f\n", pm->ps->velocity[0], pm->ps->velocity[1], pm->ps->velocity[2]);
;1853:	//Com_Printf("velocity1 = %1.1f\n", VectorLength(pm->ps->velocity));
;1854:
;1855:	if ( ( pml.groundTrace.surfaceFlags & SURF_SLICK ) || pm->ps->pm_flags & PMF_TIME_KNOCKBACK )
ADDRLP4 116
CNSTI4 0
ASGNI4
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 16384
BANDI4
ADDRLP4 116
INDIRI4
NEI4 $748
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 64
BANDI4
ADDRLP4 116
INDIRI4
EQI4 $744
LABELV $748
line 1856
;1856:	{
line 1857
;1857:		pm->ps->velocity[2] -= pm->ps->gravity * pml.frametime;
ADDRLP4 120
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 124
ADDRLP4 120
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ADDRLP4 124
INDIRP4
INDIRF4
ADDRLP4 120
INDIRP4
CNSTI4 56
ADDP4
INDIRI4
CVIF4 4
ADDRGP4 pml+36
INDIRF4
MULF4
SUBF4
ASGNF4
line 1858
;1858:	}
LABELV $744
line 1860
;1859:
;1860:	vel = VectorLength(pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRLP4 120
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 28
ADDRLP4 120
INDIRF4
ASGNF4
line 1863
;1861:
;1862:	// slide along the ground plane
;1863:	PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, 
ADDRLP4 124
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ARGP4
ADDRGP4 pml+52+24
ARGP4
ADDRLP4 124
INDIRP4
ARGP4
CNSTF4 1065361605
ARGF4
ADDRGP4 PM_ClipVelocity
CALLV
pop
line 1867
;1864:		pm->ps->velocity, OVERCLIP );
;1865:
;1866:	// don't decrease velocity when going up or down a slope
;1867:	VectorNormalize(pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1868
;1868:	VectorScale(pm->ps->velocity, vel, pm->ps->velocity);
ADDRLP4 128
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 128
INDIRP4
ADDRLP4 128
INDIRP4
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
ADDRLP4 132
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 36
ADDP4
ASGNP4
ADDRLP4 132
INDIRP4
ADDRLP4 132
INDIRP4
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
ADDRLP4 136
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
ASGNP4
ADDRLP4 136
INDIRP4
ADDRLP4 136
INDIRP4
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
line 1871
;1869:
;1870:	// don't do anything if standing still
;1871:	if (!pm->ps->velocity[0] && !pm->ps->velocity[1]) {
ADDRLP4 140
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 144
CNSTF4 0
ASGNF4
ADDRLP4 140
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
ADDRLP4 144
INDIRF4
NEF4 $752
ADDRLP4 140
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
ADDRLP4 144
INDIRF4
NEF4 $752
line 1872
;1872:		pm->ps->fd.forceSpeedSmash = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1136
ADDP4
CNSTF4 1065353216
ASGNF4
line 1873
;1873:		return;
ADDRGP4 $687
JUMPV
LABELV $752
line 1876
;1874:	}
;1875:
;1876:	PM_StepSlideMove( qfalse );
CNSTI4 0
ARGI4
ADDRGP4 PM_StepSlideMove
CALLV
pop
line 1879
;1877:
;1878:	//Com_Printf("velocity2 = %1.1f\n", VectorLength(pm->ps->velocity));
;1879:}
LABELV $687
endproc PM_WalkMove 148 16
proc PM_DeadMove 20 4
line 1887
;1880:
;1881:
;1882:/*
;1883:==============
;1884:PM_DeadMove
;1885:==============
;1886:*/
;1887:static void PM_DeadMove( void ) {
line 1890
;1888:	float	forward;
;1889:
;1890:	if ( !pml.walking ) {
ADDRGP4 pml+44
INDIRI4
CNSTI4 0
NEI4 $755
line 1891
;1891:		return;
ADDRGP4 $754
JUMPV
LABELV $755
line 1896
;1892:	}
;1893:
;1894:	// extra friction
;1895:
;1896:	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 1897
;1897:	forward -= 20;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1101004800
SUBF4
ASGNF4
line 1898
;1898:	if ( forward <= 0 ) {
ADDRLP4 0
INDIRF4
CNSTF4 0
GTF4 $758
line 1899
;1899:		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 1900
;1900:	} else {
ADDRGP4 $759
JUMPV
LABELV $758
line 1901
;1901:		VectorNormalize (pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1902
;1902:		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 1903
;1903:	}
LABELV $759
line 1904
;1904:}
LABELV $754
endproc PM_DeadMove 20 4
proc PM_NoclipMove 104 12
line 1912
;1905:
;1906:
;1907:/*
;1908:===============
;1909:PM_NoclipMove
;1910:===============
;1911:*/
;1912:static void PM_NoclipMove( void ) {
line 1921
;1913:	float	speed, drop, friction, control, newspeed;
;1914:	int			i;
;1915:	vec3_t		wishvel;
;1916:	float		fmove, smove;
;1917:	vec3_t		wishdir;
;1918:	float		wishspeed;
;1919:	float		scale;
;1920:
;1921:	pm->ps->viewheight = DEFAULT_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 36
ASGNI4
line 1925
;1922:
;1923:	// friction
;1924:
;1925:	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 1926
;1926:	if (speed < 1)
ADDRLP4 24
INDIRF4
CNSTF4 1065353216
GEF4 $761
line 1927
;1927:	{
line 1928
;1928:		VectorCopy (vec3_origin, pm->ps->velocity);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ADDRGP4 vec3_origin
INDIRB
ASGNB 12
line 1929
;1929:	}
ADDRGP4 $762
JUMPV
LABELV $761
line 1931
;1930:	else
;1931:	{
line 1932
;1932:		drop = 0;
ADDRLP4 52
CNSTF4 0
ASGNF4
line 1934
;1933:
;1934:		friction = pm_friction*1.5;	// extra friction
ADDRLP4 56
CNSTF4 1069547520
ADDRGP4 pm_friction
INDIRF4
MULF4
ASGNF4
line 1935
;1935:		control = speed < pm_stopspeed ? pm_stopspeed : speed;
ADDRLP4 24
INDIRF4
ADDRGP4 pm_stopspeed
INDIRF4
GEF4 $764
ADDRLP4 68
ADDRGP4 pm_stopspeed
INDIRF4
ASGNF4
ADDRGP4 $765
JUMPV
LABELV $764
ADDRLP4 68
ADDRLP4 24
INDIRF4
ASGNF4
LABELV $765
ADDRLP4 60
ADDRLP4 68
INDIRF4
ASGNF4
line 1936
;1936:		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 1939
;1937:
;1938:		// scale the velocity
;1939:		newspeed = speed - drop;
ADDRLP4 28
ADDRLP4 24
INDIRF4
ADDRLP4 52
INDIRF4
SUBF4
ASGNF4
line 1940
;1940:		if (newspeed < 0)
ADDRLP4 28
INDIRF4
CNSTF4 0
GEF4 $767
line 1941
;1941:			newspeed = 0;
ADDRLP4 28
CNSTF4 0
ASGNF4
LABELV $767
line 1942
;1942:		newspeed /= speed;
ADDRLP4 28
ADDRLP4 28
INDIRF4
ADDRLP4 24
INDIRF4
DIVF4
ASGNF4
line 1944
;1943:
;1944:		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 1945
;1945:	}
LABELV $762
line 1948
;1946:
;1947:	// accelerate
;1948:	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 1949
;1949:	if (pm->cmd.buttons & BUTTON_ATTACK) {	//turbo boost
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $769
line 1950
;1950:		scale *= 10;
ADDRLP4 48
CNSTF4 1092616192
ADDRLP4 48
INDIRF4
MULF4
ASGNF4
line 1951
;1951:	}
LABELV $769
line 1952
;1952:	if (pm->cmd.buttons & BUTTON_ALT_ATTACK) {	//turbo boost
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $771
line 1953
;1953:		scale *= 10;
ADDRLP4 48
CNSTF4 1092616192
ADDRLP4 48
INDIRF4
MULF4
ASGNF4
line 1954
;1954:	}
LABELV $771
line 1956
;1955:
;1956:	fmove = pm->cmd.forwardmove;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1957
;1957:	smove = pm->cmd.rightmove;
ADDRLP4 20
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ASGNF4
line 1959
;1958:	
;1959:	for (i=0 ; i<3 ; i++)
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $773
line 1960
;1960:		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 $774
line 1959
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $773
line 1961
;1961:	wishvel[2] += pm->cmd.upmove;
ADDRLP4 4+8
ADDRLP4 4+8
INDIRF4
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CVIF4 4
ADDF4
ASGNF4
line 1963
;1962:
;1963:	VectorCopy (wishvel, wishdir);
ADDRLP4 32
ADDRLP4 4
INDIRB
ASGNB 12
line 1964
;1964:	wishspeed = VectorNormalize(wishdir);
ADDRLP4 32
ARGP4
ADDRLP4 76
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 44
ADDRLP4 76
INDIRF4
ASGNF4
line 1965
;1965:	wishspeed *= scale;
ADDRLP4 44
ADDRLP4 44
INDIRF4
ADDRLP4 48
INDIRF4
MULF4
ASGNF4
line 1967
;1966:
;1967:	PM_Accelerate( wishdir, wishspeed, pm_accelerate );
ADDRLP4 32
ARGP4
ADDRLP4 44
INDIRF4
ARGF4
ADDRGP4 pm_accelerate
INDIRF4
ARGF4
ADDRGP4 PM_Accelerate
CALLV
pop
line 1970
;1968:
;1969:	// move
;1970:	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 1971
;1971:}
LABELV $760
endproc PM_NoclipMove 104 12
proc PM_FootstepForSurface 0 0
line 1983
;1972:
;1973://============================================================================
;1974:
;1975:/*
;1976:================
;1977:PM_FootstepForSurface
;1978:
;1979:Returns an event number apropriate for the groundsurface
;1980:================
;1981:*/
;1982:static int PM_FootstepForSurface( void )
;1983:{
line 1984
;1984:	if ( pml.groundTrace.surfaceFlags & SURF_NOSTEPS ) 
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 4194304
BANDI4
CNSTI4 0
EQI4 $783
line 1985
;1985:	{
line 1986
;1986:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $782
JUMPV
LABELV $783
line 1988
;1987:	}
;1988:	if ( pml.groundTrace.surfaceFlags & SURF_METALSTEPS ) 
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 32768
BANDI4
CNSTI4 0
EQI4 $787
line 1989
;1989:	{
line 1990
;1990:		return EV_FOOTSTEP_METAL;
CNSTI4 3
RETI4
ADDRGP4 $782
JUMPV
LABELV $787
line 1992
;1991:	}
;1992:	return EV_FOOTSTEP;
CNSTI4 2
RETI4
LABELV $782
endproc PM_FootstepForSurface 0 0
proc PM_TryRoll 1208 28
line 1996
;1993:}
;1994:
;1995:static int PM_TryRoll( void )
;1996:{
line 1998
;1997:	trace_t	trace;
;1998:	int		anim = -1;
ADDRLP4 36
CNSTI4 -1
ASGNI4
line 2001
;1999:	vec3_t fwd, right, traceto, mins, maxs, fwdAngles;
;2000:
;2001:	if ( BG_SaberInAttack( pm->ps->saberMove ) || BG_SaberInSpecialAttack( pm->ps->torsoAnim ) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1156
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 1156
INDIRI4
CNSTI4 0
NEI4 $796
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 1160
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 1160
INDIRI4
CNSTI4 0
NEI4 $796
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 1164
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 1164
INDIRI4
CNSTI4 0
NEI4 $796
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1168
ADDRGP4 PM_SaberInStart
CALLI4
ASGNI4
ADDRLP4 1168
INDIRI4
CNSTI4 0
EQI4 $792
LABELV $796
line 2004
;2002:		|| BG_SpinningSaberAnim( pm->ps->legsAnim ) 
;2003:		|| PM_SaberInStart( pm->ps->saberMove ) )
;2004:	{//attacking or spinning (or, if player, starting an attack)
line 2005
;2005:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $791
JUMPV
LABELV $792
line 2008
;2006:	}
;2007:
;2008:	if (pm->ps->weapon != WP_SABER || BG_HasYsalamiri(pm->gametype, pm->ps) ||
ADDRLP4 1172
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1176
ADDRLP4 1172
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1176
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $800
ADDRLP4 1172
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 1176
INDIRP4
ARGP4
ADDRLP4 1180
ADDRGP4 BG_HasYsalamiri
CALLI4
ASGNI4
ADDRLP4 1180
INDIRI4
CNSTI4 0
NEI4 $800
ADDRLP4 1184
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1184
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
ARGI4
ADDRLP4 1184
INDIRP4
INDIRP4
ARGP4
ADDRLP4 1184
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 1188
ADDRGP4 BG_CanUseFPNow
CALLI4
ASGNI4
ADDRLP4 1188
INDIRI4
CNSTI4 0
NEI4 $797
LABELV $800
line 2010
;2009:		!BG_CanUseFPNow(pm->gametype, pm->ps, pm->cmd.serverTime, FP_LEVITATION))
;2010:	{ //Not using saber, or can't use jump
line 2011
;2011:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $791
JUMPV
LABELV $797
line 2014
;2012:	}
;2013:
;2014:	VectorSet(mins, pm->mins[0],pm->mins[1],pm->mins[2]+STEPSIZE);
ADDRLP4 1192
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 12
ADDRLP4 1192
INDIRP4
CNSTI4 188
ADDP4
INDIRF4
ASGNF4
ADDRLP4 12+4
ADDRLP4 1192
INDIRP4
CNSTI4 192
ADDP4
INDIRF4
ASGNF4
ADDRLP4 12+8
ADDRGP4 pm
INDIRP4
CNSTI4 196
ADDP4
INDIRF4
CNSTF4 1099956224
ADDF4
ASGNF4
line 2015
;2015:	VectorSet(maxs, pm->maxs[0],pm->maxs[1],CROUCH_MAXS_2);
ADDRLP4 1196
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 24
ADDRLP4 1196
INDIRP4
CNSTI4 200
ADDP4
INDIRF4
ASGNF4
ADDRLP4 24+4
ADDRLP4 1196
INDIRP4
CNSTI4 204
ADDP4
INDIRF4
ASGNF4
ADDRLP4 24+8
CNSTF4 1098907648
ASGNF4
line 2017
;2016:
;2017:	VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
ADDRLP4 0
CNSTF4 0
ASGNF4
ADDRLP4 0+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 2019
;2018:
;2019:	AngleVectors( fwdAngles, fwd, right, NULL );
ADDRLP4 0
ARGP4
ADDRLP4 52
ARGP4
ADDRLP4 64
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 2021
;2020:
;2021:	if ( pm->cmd.forwardmove )
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
EQI4 $807
line 2022
;2022:	{ //check forward/backward rolls
line 2023
;2023:		if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
EQI4 $809
line 2024
;2024:		{
line 2025
;2025:			anim = BOTH_ROLL_B;
ADDRLP4 36
CNSTI4 886
ASGNI4
line 2026
;2026:			VectorMA( pm->ps->origin, -64, fwd, traceto );
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 3263168512
ASGNF4
ADDRLP4 40
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 52
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+4
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 52+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 3263168512
ADDRLP4 52+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2027
;2027:		}
ADDRGP4 $808
JUMPV
LABELV $809
line 2029
;2028:		else
;2029:		{
line 2030
;2030:			anim = BOTH_ROLL_F;
ADDRLP4 36
CNSTI4 885
ASGNI4
line 2031
;2031:			VectorMA( pm->ps->origin, 64, fwd, traceto );
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 1115684864
ASGNF4
ADDRLP4 40
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 52
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+4
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 52+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 52+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2032
;2032:		}
line 2033
;2033:	}
ADDRGP4 $808
JUMPV
LABELV $807
line 2034
;2034:	else if ( pm->cmd.rightmove > 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $819
line 2035
;2035:	{ //right
line 2036
;2036:		anim = BOTH_ROLL_R;
ADDRLP4 36
CNSTI4 888
ASGNI4
line 2037
;2037:		VectorMA( pm->ps->origin, 64, right, traceto );
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 1115684864
ASGNF4
ADDRLP4 40
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 64
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+4
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 64+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 64+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2038
;2038:	}
ADDRGP4 $820
JUMPV
LABELV $819
line 2039
;2039:	else if ( pm->cmd.rightmove < 0 )
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $825
line 2040
;2040:	{ //left
line 2041
;2041:		anim = BOTH_ROLL_L;
ADDRLP4 36
CNSTI4 887
ASGNI4
line 2042
;2042:		VectorMA( pm->ps->origin, -64, right, traceto );
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 3263168512
ASGNF4
ADDRLP4 40
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 64
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+4
ADDRLP4 1200
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
ADDRLP4 64+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 40+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 3263168512
ADDRLP4 64+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2043
;2043:	}
LABELV $825
LABELV $820
LABELV $808
line 2045
;2044:
;2045:	if ( anim != -1 )
ADDRLP4 36
INDIRI4
CNSTI4 -1
EQI4 $831
line 2046
;2046:	{ //We want to roll. Perform a trace to see if we can, and if so, send us into one.
line 2047
;2047:		pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID );
ADDRLP4 76
ARGP4
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
ADDRLP4 1200
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 12
ARGP4
ADDRLP4 24
ARGP4
ADDRLP4 40
ARGP4
ADDRLP4 1204
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 1200
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2048
;2048:		if ( trace.fraction >= 1.0f )
ADDRLP4 76+8
INDIRF4
CNSTF4 1065353216
LTF4 $833
line 2049
;2049:		{
line 2050
;2050:			pm->ps->saberMove = LS_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 0
ASGNI4
line 2051
;2051:			return anim;
ADDRLP4 36
INDIRI4
RETI4
ADDRGP4 $791
JUMPV
LABELV $833
line 2053
;2052:		}
;2053:	}
LABELV $831
line 2054
;2054:	return 0;
CNSTI4 0
RETI4
LABELV $791
endproc PM_TryRoll 1208 28
proc PM_CrashLand 116 16
line 2064
;2055:}
;2056:
;2057:/*
;2058:=================
;2059:PM_CrashLand
;2060:
;2061:Check for hard landings that generate sound events
;2062:=================
;2063:*/
;2064:static void PM_CrashLand( void ) {
line 2070
;2065:	float		delta;
;2066:	float		dist;
;2067:	float		vel, acc;
;2068:	float		t;
;2069:	float		a, b, c, den;
;2070:	qboolean	didRoll = qfalse;
ADDRLP4 36
CNSTI4 0
ASGNI4
line 2073
;2071:
;2072:	// calculate the exact velocity on landing
;2073:	dist = pm->ps->origin[2] - pml.previous_origin[2];
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRGP4 pml+1136+8
INDIRF4
SUBF4
ASGNF4
line 2074
;2074:	vel = pml.previous_velocity[2];
ADDRLP4 8
ADDRGP4 pml+1148+8
INDIRF4
ASGNF4
line 2075
;2075:	acc = -pm->ps->gravity;
ADDRLP4 12
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 56
ADDP4
INDIRI4
NEGI4
CVIF4 4
ASGNF4
line 2077
;2076:
;2077:	a = acc / 2;
ADDRLP4 16
ADDRLP4 12
INDIRF4
CNSTF4 1073741824
DIVF4
ASGNF4
line 2078
;2078:	b = vel;
ADDRLP4 4
ADDRLP4 8
INDIRF4
ASGNF4
line 2079
;2079:	c = -dist;
ADDRLP4 32
ADDRLP4 24
INDIRF4
NEGF4
ASGNF4
line 2081
;2080:
;2081:	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 2082
;2082:	if ( den < 0 ) {
ADDRLP4 20
INDIRF4
CNSTF4 0
GEF4 $841
line 2083
;2083:		pm->ps->inAirAnim = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
CNSTI4 0
ASGNI4
line 2084
;2084:		return;
ADDRGP4 $836
JUMPV
LABELV $841
line 2086
;2085:	}
;2086:	t = (-b - sqrt( den ) ) / ( 2 * a );
ADDRLP4 20
INDIRF4
ARGF4
ADDRLP4 44
ADDRGP4 sqrt
CALLF4
ASGNF4
ADDRLP4 28
ADDRLP4 4
INDIRF4
NEGF4
ADDRLP4 44
INDIRF4
SUBF4
CNSTF4 1073741824
ADDRLP4 16
INDIRF4
MULF4
DIVF4
ASGNF4
line 2088
;2087:
;2088:	delta = vel + t * acc;
ADDRLP4 0
ADDRLP4 8
INDIRF4
ADDRLP4 28
INDIRF4
ADDRLP4 12
INDIRF4
MULF4
ADDF4
ASGNF4
line 2089
;2089:	delta = delta*delta * 0.0001;
ADDRLP4 0
CNSTF4 953267991
ADDRLP4 0
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
MULF4
ASGNF4
line 2092
;2090:
;2091:	// ducking while falling doubles damage
;2092:	if ( pm->ps->pm_flags & PMF_DUCKED ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $843
line 2093
;2093:		delta *= 2;
ADDRLP4 0
CNSTF4 1073741824
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 2094
;2094:	}
LABELV $843
line 2097
;2095:
;2096:	// decide which landing animation to use
;2097:	if (!BG_InRoll(pm->ps, pm->ps->legsAnim) && pm->ps->inAirAnim)
ADDRLP4 52
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 52
INDIRP4
ARGP4
ADDRLP4 52
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 56
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 60
CNSTI4 0
ASGNI4
ADDRLP4 56
INDIRI4
ADDRLP4 60
INDIRI4
NEI4 $845
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
INDIRI4
ADDRLP4 60
INDIRI4
EQI4 $845
line 2098
;2098:	{ //only play a land animation if we transitioned into an in-air animation while off the ground
line 2099
;2099:		if (!BG_SaberInSpecial(pm->ps->saberMove))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 0
NEI4 $847
line 2100
;2100:		{
line 2101
;2101:			if ( pm->ps->pm_flags & PMF_BACKWARDS_JUMP ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 8
BANDI4
CNSTI4 0
EQI4 $849
line 2102
;2102:				PM_ForceLegsAnim( BOTH_LANDBACK1 );
CNSTI4 862
ARGI4
ADDRGP4 PM_ForceLegsAnim
CALLV
pop
line 2103
;2103:			} else {
ADDRGP4 $850
JUMPV
LABELV $849
line 2104
;2104:				PM_ForceLegsAnim( BOTH_LAND1 );
CNSTI4 858
ARGI4
ADDRGP4 PM_ForceLegsAnim
CALLV
pop
line 2105
;2105:			}
LABELV $850
line 2106
;2106:		}
LABELV $847
line 2107
;2107:	}
LABELV $845
line 2109
;2108:
;2109:	if (pm->ps->weapon != WP_SABER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
EQI4 $851
line 2110
;2110:	{ //saber handles its own anims
line 2112
;2111:		//This will push us back into our weaponready stance from the land anim.
;2112:		if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
ADDRLP4 64
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $853
ADDRLP4 64
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $853
line 2113
;2113:		{
line 2114
;2114:			PM_StartTorsoAnim( TORSO_WEAPONREADY4 );
CNSTI4 1102
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 2115
;2115:		}
ADDRGP4 $854
JUMPV
LABELV $853
line 2117
;2116:		else
;2117:		{
line 2118
;2118:			if (pm->ps->weapon == WP_EMPLACED_GUN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $855
line 2119
;2119:			{
line 2120
;2120:				PM_StartTorsoAnim( BOTH_GUNSIT1 );
CNSTI4 810
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 2121
;2121:			}
ADDRGP4 $856
JUMPV
LABELV $855
line 2123
;2122:			else
;2123:			{
line 2124
;2124:				PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 2125
;2125:			}
LABELV $856
line 2126
;2126:		}
LABELV $854
line 2127
;2127:	}
LABELV $851
line 2129
;2128:
;2129:	if (!BG_InSpecialJump(pm->ps->legsAnim) ||
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 0
EQI4 $861
ADDRLP4 68
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 68
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 1
LTI4 $861
ADDRLP4 72
ADDRLP4 68
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 72
INDIRI4
CNSTI4 918
EQI4 $861
ADDRLP4 72
INDIRI4
CNSTI4 915
NEI4 $857
LABELV $861
line 2133
;2130:		pm->ps->legsTimer < 1 ||
;2131:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_LEFT ||
;2132:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_WALL_RUN_RIGHT)
;2133:	{ //Only set the timer if we're in an anim that can be interrupted (this would not be, say, a flip)
line 2134
;2134:		if (!BG_InRoll(pm->ps, pm->ps->legsAnim) && pm->ps->inAirAnim)
ADDRLP4 76
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 76
INDIRP4
ARGP4
ADDRLP4 76
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 80
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 84
CNSTI4 0
ASGNI4
ADDRLP4 80
INDIRI4
ADDRLP4 84
INDIRI4
NEI4 $862
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
INDIRI4
ADDRLP4 84
INDIRI4
EQI4 $862
line 2135
;2135:		{
line 2136
;2136:			if (!BG_SaberInSpecial(pm->ps->saberMove) || pm->ps->weapon != WP_SABER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 88
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 88
INDIRI4
CNSTI4 0
EQI4 $866
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
EQI4 $864
LABELV $866
line 2137
;2137:			{
line 2138
;2138:				pm->ps->legsTimer = TIMER_LAND;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 130
ASGNI4
line 2139
;2139:			}
LABELV $864
line 2140
;2140:		}
LABELV $862
line 2141
;2141:	}
LABELV $857
line 2143
;2142:
;2143:	pm->ps->inAirAnim = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
CNSTI4 0
ASGNI4
line 2146
;2144:
;2145:	// never take falling damage if completely underwater
;2146:	if ( pm->waterlevel == 3 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 3
NEI4 $867
line 2147
;2147:		return;
ADDRGP4 $836
JUMPV
LABELV $867
line 2151
;2148:	}
;2149:
;2150:	// reduce falling damage if there is standing water
;2151:	if ( pm->waterlevel == 2 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 2
NEI4 $869
line 2152
;2152:		delta *= 0.25;
ADDRLP4 0
CNSTF4 1048576000
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 2153
;2153:	}
LABELV $869
line 2154
;2154:	if ( pm->waterlevel == 1 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 1
NEI4 $871
line 2155
;2155:		delta *= 0.5;
ADDRLP4 0
CNSTF4 1056964608
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 2156
;2156:	}
LABELV $871
line 2158
;2157:
;2158:	if ( delta < 1 ) {
ADDRLP4 0
INDIRF4
CNSTF4 1065353216
GEF4 $873
line 2159
;2159:		return;
ADDRGP4 $836
JUMPV
LABELV $873
line 2162
;2160:	}
;2161:
;2162:	if ( pm->ps->pm_flags & PMF_DUCKED ) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $875
line 2163
;2163:	{
line 2164
;2164:		if( delta >= 2 && !PM_InOnGroundAnim( pm->ps->legsAnim ) && !PM_InKnockDown( pm->ps ) && !BG_InRoll(pm->ps, pm->ps->legsAnim) &&
ADDRLP4 0
INDIRF4
CNSTF4 1073741824
LTF4 $877
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 76
ADDRGP4 PM_InOnGroundAnim
CALLI4
ASGNI4
ADDRLP4 76
INDIRI4
CNSTI4 0
NEI4 $877
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
ADDRLP4 80
ADDRGP4 PM_InKnockDown
CALLI4
ASGNI4
ADDRLP4 80
INDIRI4
CNSTI4 0
NEI4 $877
ADDRLP4 84
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 84
INDIRP4
ARGP4
ADDRLP4 84
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 88
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 92
CNSTI4 0
ASGNI4
ADDRLP4 88
INDIRI4
ADDRLP4 92
INDIRI4
NEI4 $877
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
ADDRLP4 92
INDIRI4
NEI4 $877
line 2166
;2165:			pm->ps->forceHandExtend == HANDEXTEND_NONE )
;2166:		{//roll!
line 2167
;2167:			int anim = PM_TryRoll();
ADDRLP4 100
ADDRGP4 PM_TryRoll
CALLI4
ASGNI4
ADDRLP4 96
ADDRLP4 100
INDIRI4
ASGNI4
line 2169
;2168:
;2169:			if (PM_InRollComplete(pm->ps, pm->ps->legsAnim))
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 104
INDIRP4
ARGP4
ADDRLP4 104
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 108
ADDRGP4 PM_InRollComplete
CALLI4
ASGNI4
ADDRLP4 108
INDIRI4
CNSTI4 0
EQI4 $879
line 2170
;2170:			{
line 2171
;2171:				anim = 0;
ADDRLP4 96
CNSTI4 0
ASGNI4
line 2172
;2172:				pm->ps->legsTimer = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 0
ASGNI4
line 2173
;2173:				pm->ps->legsAnim = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
CNSTI4 0
ASGNI4
line 2174
;2174:				PM_SetAnim(SETANIM_BOTH,BOTH_LAND1,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150);
ADDRLP4 112
CNSTI4 3
ASGNI4
ADDRLP4 112
INDIRI4
ARGI4
CNSTI4 858
ARGI4
ADDRLP4 112
INDIRI4
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2175
;2175:				pm->ps->legsTimer = TIMER_LAND;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 130
ASGNI4
line 2176
;2176:			}
LABELV $879
line 2178
;2177:
;2178:			if ( anim )
ADDRLP4 96
INDIRI4
CNSTI4 0
EQI4 $881
line 2179
;2179:			{//absorb some impact
line 2180
;2180:				pm->ps->legsTimer = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 0
ASGNI4
line 2181
;2181:				delta /= 3; // /= 2 just cancels out the above delta *= 2 when landing while crouched, the roll itself should absorb a little damage
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1077936128
DIVF4
ASGNF4
line 2182
;2182:				pm->ps->legsAnim = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
CNSTI4 0
ASGNI4
line 2183
;2183:				PM_SetAnim(SETANIM_BOTH,anim,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150);
ADDRLP4 112
CNSTI4 3
ASGNI4
ADDRLP4 112
INDIRI4
ARGI4
ADDRLP4 96
INDIRI4
ARGI4
ADDRLP4 112
INDIRI4
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2184
;2184:				didRoll = qtrue;
ADDRLP4 36
CNSTI4 1
ASGNI4
line 2185
;2185:			}
LABELV $881
line 2186
;2186:		}
LABELV $877
line 2187
;2187:	}
LABELV $875
line 2191
;2188:
;2189:	// SURF_NODAMAGE is used for bounce pads where you don't ever
;2190:	// want to take damage or play a crunch sound
;2191:	if ( !(pml.groundTrace.surfaceFlags & SURF_NODAMAGE) )  {
ADDRGP4 pml+52+44
INDIRI4
CNSTI4 262144
BANDI4
CNSTI4 0
NEI4 $883
line 2192
;2192:		if (delta > 7)
ADDRLP4 0
INDIRF4
CNSTF4 1088421888
LEF4 $887
line 2193
;2193:		{
line 2194
;2194:			int delta_send = (int)delta;
ADDRLP4 76
ADDRLP4 0
INDIRF4
CVFI4 4
ASGNI4
line 2196
;2195:
;2196:			if (delta_send > 600)
ADDRLP4 76
INDIRI4
CNSTI4 600
LEI4 $889
line 2197
;2197:			{ //will never need to know any value above this
line 2198
;2198:				delta_send = 600;
ADDRLP4 76
CNSTI4 600
ASGNI4
line 2199
;2199:			}
LABELV $889
line 2201
;2200:
;2201:			if (pm->ps->fd.forceJumpZStart)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
CNSTF4 0
EQF4 $891
line 2202
;2202:			{
line 2203
;2203:				if ((int)pm->ps->origin[2] >= (int)pm->ps->fd.forceJumpZStart)
ADDRLP4 80
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 80
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CVFI4 4
ADDRLP4 80
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
CVFI4 4
LTI4 $893
line 2204
;2204:				{ //was force jumping, landed on higher or same level as when force jump was started
line 2205
;2205:					if (delta_send > 8)
ADDRLP4 76
INDIRI4
CNSTI4 8
LEI4 $894
line 2206
;2206:					{
line 2207
;2207:						delta_send = 8;
ADDRLP4 76
CNSTI4 8
ASGNI4
line 2208
;2208:					}
line 2209
;2209:				}
ADDRGP4 $894
JUMPV
LABELV $893
line 2211
;2210:				else
;2211:				{
line 2212
;2212:					if (delta_send > 8)
ADDRLP4 76
INDIRI4
CNSTI4 8
LEI4 $897
line 2213
;2213:					{
line 2214
;2214:						int dif = ((int)pm->ps->fd.forceJumpZStart - (int)pm->ps->origin[2]);
ADDRLP4 92
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 88
ADDRLP4 92
INDIRP4
CNSTI4 1092
ADDP4
INDIRF4
CVFI4 4
ADDRLP4 92
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CVFI4 4
SUBI4
ASGNI4
line 2215
;2215:						int dmgLess = (forceJumpHeight[pm->ps->fd.forcePowerLevel[FP_LEVITATION]] - dif);
ADDRLP4 84
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 948
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 forceJumpHeight
ADDP4
INDIRF4
ADDRLP4 88
INDIRI4
CVIF4 4
SUBF4
CVFI4 4
ASGNI4
line 2217
;2216:
;2217:						if (dmgLess < 0)
ADDRLP4 84
INDIRI4
CNSTI4 0
GEI4 $899
line 2218
;2218:						{
line 2219
;2219:							dmgLess = 0;
ADDRLP4 84
CNSTI4 0
ASGNI4
line 2220
;2220:						}
LABELV $899
line 2222
;2221:
;2222:						delta_send -= (dmgLess*0.3);
ADDRLP4 76
ADDRLP4 76
INDIRI4
CVIF4 4
CNSTF4 1050253722
ADDRLP4 84
INDIRI4
CVIF4 4
MULF4
SUBF4
CVFI4 4
ASGNI4
line 2224
;2223:
;2224:						if (delta_send < 8)
ADDRLP4 76
INDIRI4
CNSTI4 8
GEI4 $901
line 2225
;2225:						{
line 2226
;2226:							delta_send = 8;
ADDRLP4 76
CNSTI4 8
ASGNI4
line 2227
;2227:						}
LABELV $901
line 2230
;2228:
;2229:						//Com_Printf("Damage sub: %i\n", (int)((dmgLess*0.1)));
;2230:					}
LABELV $897
line 2231
;2231:				}
LABELV $894
line 2232
;2232:			}
LABELV $891
line 2234
;2233:
;2234:			if (didRoll)
ADDRLP4 36
INDIRI4
CNSTI4 0
EQI4 $903
line 2235
;2235:			{ //Add the appropriate event..
line 2236
;2236:				PM_AddEventWithParm( EV_ROLL, delta_send );
CNSTI4 15
ARGI4
ADDRLP4 76
INDIRI4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 2237
;2237:			}
ADDRGP4 $888
JUMPV
LABELV $903
line 2239
;2238:			else
;2239:			{
line 2240
;2240:				PM_AddEventWithParm( EV_FALL, delta_send );
CNSTI4 11
ARGI4
ADDRLP4 76
INDIRI4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 2241
;2241:			}
line 2242
;2242:		}
ADDRGP4 $888
JUMPV
LABELV $887
line 2244
;2243:		else
;2244:		{
line 2245
;2245:			if (didRoll)
ADDRLP4 36
INDIRI4
CNSTI4 0
EQI4 $905
line 2246
;2246:			{
line 2247
;2247:				PM_AddEventWithParm( EV_ROLL, 0 );
CNSTI4 15
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 2248
;2248:			}
ADDRGP4 $906
JUMPV
LABELV $905
line 2250
;2249:			else
;2250:			{
line 2251
;2251:				PM_AddEvent( PM_FootstepForSurface() );
ADDRLP4 76
ADDRGP4 PM_FootstepForSurface
CALLI4
ASGNI4
ADDRLP4 76
INDIRI4
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2252
;2252:			}
LABELV $906
line 2253
;2253:		}
LABELV $888
line 2254
;2254:	}
LABELV $883
line 2257
;2255:
;2256:	// make sure velocity resets so we don't bounce back up again in case we miss the clear elsewhere
;2257:	pm->ps->velocity[2] = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 0
ASGNF4
line 2260
;2258:
;2259:	// start footstep cycle over
;2260:	pm->ps->bobCycle = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 0
ASGNI4
line 2261
;2261:}
LABELV $836
endproc PM_CrashLand 116 16
proc PM_CorrectAllSolid 36 28
line 2268
;2262:
;2263:/*
;2264:=============
;2265:PM_CorrectAllSolid
;2266:=============
;2267:*/
;2268:static int PM_CorrectAllSolid( trace_t *trace ) {
line 2272
;2269:	int			i, j, k;
;2270:	vec3_t		point;
;2271:
;2272:	if ( pm->debugLevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 36
ADDP4
INDIRI4
CNSTI4 0
EQI4 $908
line 2273
;2273:		Com_Printf("%i:allsolid\n", c_pmove);
ADDRGP4 $910
ARGP4
ADDRGP4 c_pmove
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2274
;2274:	}
LABELV $908
line 2277
;2275:
;2276:	// jitter around
;2277:	for (i = -1; i <= 1; i++) {
ADDRLP4 20
CNSTI4 -1
ASGNI4
LABELV $911
line 2278
;2278:		for (j = -1; j <= 1; j++) {
ADDRLP4 16
CNSTI4 -1
ASGNI4
LABELV $915
line 2279
;2279:			for (k = -1; k <= 1; k++) {
ADDRLP4 12
CNSTI4 -1
ASGNI4
LABELV $919
line 2280
;2280:				VectorCopy(pm->ps->origin, point);
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2281
;2281:				point[0] += (float) i;
ADDRLP4 0
ADDRLP4 0
INDIRF4
ADDRLP4 20
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 2282
;2282:				point[1] += (float) j;
ADDRLP4 0+4
ADDRLP4 0+4
INDIRF4
ADDRLP4 16
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 2283
;2283:				point[2] += (float) k;
ADDRLP4 0+8
ADDRLP4 0+8
INDIRF4
ADDRLP4 12
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 2284
;2284:				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 188
ADDP4
ARGP4
ADDRLP4 24
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 24
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 24
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 24
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2285
;2285:				if ( !trace->allsolid ) {
ADDRFP4 0
INDIRP4
INDIRI4
CNSTI4 0
NEI4 $925
line 2286
;2286:					point[0] = pm->ps->origin[0];
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ASGNF4
line 2287
;2287:					point[1] = pm->ps->origin[1];
ADDRLP4 0+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ASGNF4
line 2288
;2288:					point[2] = pm->ps->origin[2] - 0.25;
ADDRLP4 0+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1048576000
SUBF4
ASGNF4
line 2290
;2289:
;2290:					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 188
ADDP4
ARGP4
ADDRLP4 28
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 32
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2291
;2291:					pml.groundTrace = *trace;
ADDRGP4 pml+52
ADDRFP4 0
INDIRP4
INDIRB
ASGNB 1080
line 2292
;2292:					return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $907
JUMPV
LABELV $925
line 2294
;2293:				}
;2294:			}
LABELV $920
line 2279
ADDRLP4 12
ADDRLP4 12
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 12
INDIRI4
CNSTI4 1
LEI4 $919
line 2295
;2295:		}
LABELV $916
line 2278
ADDRLP4 16
ADDRLP4 16
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 1
LEI4 $915
line 2296
;2296:	}
LABELV $912
line 2277
ADDRLP4 20
ADDRLP4 20
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 1
LEI4 $911
line 2298
;2297:
;2298:	pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 2299
;2299:	pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 2300
;2300:	pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2302
;2301:
;2302:	return qfalse;
CNSTI4 0
RETI4
LABELV $907
endproc PM_CorrectAllSolid 36 28
proc PM_GroundTraceMissed 1112 28
line 2312
;2303:}
;2304:
;2305:/*
;2306:=============
;2307:PM_GroundTraceMissed
;2308:
;2309:The ground trace didn't hit a surface, so we are in freefall
;2310:=============
;2311:*/
;2312:static void PM_GroundTraceMissed( void ) {
line 2318
;2313:	trace_t		trace;
;2314:	vec3_t		point;
;2315:
;2316:	//rww - don't want to do this when handextend_choke, because you can be standing on the ground
;2317:	//while still holding your throat.
;2318:	if ( pm->ps->pm_type == PM_FLOAT ) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $933
line 2319
;2319:	{
line 2321
;2320:		//we're assuming this is because you're being choked
;2321:		int parts = SETANIM_LEGS;
ADDRLP4 1092
CNSTI4 2
ASGNI4
line 2325
;2322:
;2323:		//rww - also don't use SETANIM_FLAG_HOLD, it will cause the legs to float around a bit before going into
;2324:		//a proper anim even when on the ground.
;2325:		PM_SetAnim(parts, BOTH_CHOKE3, SETANIM_FLAG_OVERRIDE, 100);
ADDRLP4 1092
INDIRI4
ARGI4
CNSTI4 1032
ARGI4
CNSTI4 1
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2326
;2326:	}
ADDRGP4 $934
JUMPV
LABELV $933
line 2328
;2327:	//If the anim is choke3, act like we just went into the air because we aren't in a float
;2328:	else if ( pm->ps->groundEntityNum != ENTITYNUM_NONE || (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_CHOKE3 ) 
ADDRLP4 1092
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1092
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $937
ADDRLP4 1092
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 1032
NEI4 $935
LABELV $937
line 2329
;2329:	{
line 2331
;2330:		// we just transitioned into freefall
;2331:		if ( pm->debugLevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 36
ADDP4
INDIRI4
CNSTI4 0
EQI4 $938
line 2332
;2332:			Com_Printf("%i:lift\n", c_pmove);
ADDRGP4 $940
ARGP4
ADDRGP4 c_pmove
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2333
;2333:		}
LABELV $938
line 2337
;2334:
;2335:		// if they aren't in a jumping animation and the ground is a ways away, force into it
;2336:		// if we didn't do the trace, the player would be backflipping down staircases
;2337:		VectorCopy( pm->ps->origin, point );
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2338
;2338:		point[2] -= 64;
ADDRLP4 0+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1115684864
SUBF4
ASGNF4
line 2340
;2339:
;2340:		pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask);
ADDRLP4 12
ARGP4
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1100
ADDRLP4 1096
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1100
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 1100
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2341
;2341:		if ( trace.fraction == 1.0 || pm->ps->pm_type == PM_FLOAT ) {
ADDRLP4 12+8
INDIRF4
CNSTF4 1065353216
EQF4 $945
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $936
LABELV $945
line 2342
;2342:			if ( pm->ps->velocity[2] <= 0 && !(pm->ps->pm_flags&PMF_JUMP_HELD))
ADDRLP4 1104
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1104
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 0
GTF4 $946
ADDRLP4 1104
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
NEI4 $946
line 2343
;2343:			{
line 2344
;2344:				PM_SetAnim(SETANIM_LEGS,BOTH_INAIR1,SETANIM_FLAG_OVERRIDE, 100);
CNSTI4 2
ARGI4
CNSTI4 857
ARGI4
CNSTI4 1
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2345
;2345:				pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 -9
BANDI4
ASGNI4
line 2346
;2346:			}
ADDRGP4 $947
JUMPV
LABELV $946
line 2347
;2347:			else if ( pm->cmd.forwardmove >= 0 ) 
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LTI4 $948
line 2348
;2348:			{
line 2349
;2349:				PM_SetAnim(SETANIM_LEGS,BOTH_JUMP1,SETANIM_FLAG_OVERRIDE, 100);
CNSTI4 2
ARGI4
CNSTI4 856
ARGI4
CNSTI4 1
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2350
;2350:				pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 -9
BANDI4
ASGNI4
line 2351
;2351:			} 
ADDRGP4 $949
JUMPV
LABELV $948
line 2353
;2352:			else 
;2353:			{
line 2354
;2354:				PM_SetAnim(SETANIM_LEGS,BOTH_JUMPBACK1,SETANIM_FLAG_OVERRIDE, 100);
CNSTI4 2
ARGI4
CNSTI4 860
ARGI4
CNSTI4 1
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2355
;2355:				pm->ps->pm_flags |= PMF_BACKWARDS_JUMP;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 8
BORI4
ASGNI4
line 2356
;2356:			}
LABELV $949
LABELV $947
line 2358
;2357:
;2358:			pm->ps->inAirAnim = qtrue;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
CNSTI4 1
ASGNI4
line 2359
;2359:		}
line 2360
;2360:	}
ADDRGP4 $936
JUMPV
LABELV $935
line 2361
;2361:	else if (!pm->ps->inAirAnim)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
INDIRI4
CNSTI4 0
NEI4 $950
line 2362
;2362:	{
line 2365
;2363:		// if they aren't in a jumping animation and the ground is a ways away, force into it
;2364:		// if we didn't do the trace, the player would be backflipping down staircases
;2365:		VectorCopy( pm->ps->origin, point );
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2366
;2366:		point[2] -= 64;
ADDRLP4 0+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1115684864
SUBF4
ASGNF4
line 2368
;2367:
;2368:		pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask);
ADDRLP4 12
ARGP4
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1100
ADDRLP4 1096
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1100
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 1100
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2369
;2369:		if ( trace.fraction == 1.0 || pm->ps->pm_type == PM_FLOAT )
ADDRLP4 12+8
INDIRF4
CNSTF4 1065353216
EQF4 $956
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $953
LABELV $956
line 2370
;2370:		{
line 2371
;2371:			pm->ps->inAirAnim = qtrue;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
CNSTI4 1
ASGNI4
line 2372
;2372:		}
LABELV $953
line 2373
;2373:	}
LABELV $950
LABELV $936
LABELV $934
line 2375
;2374:
;2375:	if (PM_InRollComplete(pm->ps, pm->ps->legsAnim))
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1096
INDIRP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 1100
ADDRGP4 PM_InRollComplete
CALLI4
ASGNI4
ADDRLP4 1100
INDIRI4
CNSTI4 0
EQI4 $957
line 2376
;2376:	{ //Client won't catch an animation restart because it only checks frame against incoming frame, so if you roll when you land after rolling
line 2378
;2377:	  //off of something it won't replay the roll anim unless we switch it off in the air. This fixes that.
;2378:		PM_SetAnim(SETANIM_BOTH,BOTH_INAIR1,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150);
ADDRLP4 1104
CNSTI4 3
ASGNI4
ADDRLP4 1104
INDIRI4
ARGI4
CNSTI4 857
ARGI4
ADDRLP4 1104
INDIRI4
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2379
;2379:		pm->ps->inAirAnim = qtrue;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1360
ADDP4
CNSTI4 1
ASGNI4
line 2380
;2380:	}
LABELV $957
line 2382
;2381:
;2382:	pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 2383
;2383:	pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 2384
;2384:	pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2385
;2385:}
LABELV $932
endproc PM_GroundTraceMissed 1112 28
proc PM_GroundTrace 1112 28
line 2393
;2386:
;2387:
;2388:/*
;2389:=============
;2390:PM_GroundTrace
;2391:=============
;2392:*/
;2393:static void PM_GroundTrace( void ) {
line 2397
;2394:	vec3_t		point;
;2395:	trace_t		trace;
;2396:
;2397:	point[0] = pm->ps->origin[0];
ADDRLP4 1080
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ASGNF4
line 2398
;2398:	point[1] = pm->ps->origin[1];
ADDRLP4 1080+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ASGNF4
line 2399
;2399:	point[2] = pm->ps->origin[2] - 0.25;
ADDRLP4 1080+8
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1048576000
SUBF4
ASGNF4
line 2401
;2400:
;2401:	pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, point, pm->ps->clientNum, pm->tracemask);
ADDRLP4 0
ARGP4
ADDRLP4 1092
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1096
ADDRLP4 1092
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1096
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1092
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1092
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1092
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1092
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2402
;2402:	pml.groundTrace = trace;
ADDRGP4 pml+52
ADDRLP4 0
INDIRB
ASGNB 1080
line 2405
;2403:
;2404:	// do something corrective if the trace starts in a solid...
;2405:	if ( trace.allsolid ) {
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $965
line 2406
;2406:		if ( !PM_CorrectAllSolid(&trace) )
ADDRLP4 0
ARGP4
ADDRLP4 1100
ADDRGP4 PM_CorrectAllSolid
CALLI4
ASGNI4
ADDRLP4 1100
INDIRI4
CNSTI4 0
NEI4 $967
line 2407
;2407:			return;
ADDRGP4 $961
JUMPV
LABELV $967
line 2408
;2408:	}
LABELV $965
line 2410
;2409:
;2410:	if (pm->ps->pm_type == PM_FLOAT)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $969
line 2411
;2411:	{
line 2412
;2412:		PM_GroundTraceMissed();
ADDRGP4 PM_GroundTraceMissed
CALLV
pop
line 2413
;2413:		pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 2414
;2414:		pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2415
;2415:		return;
ADDRGP4 $961
JUMPV
LABELV $969
line 2419
;2416:	}
;2417:
;2418:	// if the trace didn't hit anything, we are in free fall
;2419:	if ( trace.fraction == 1.0 ) {
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $973
line 2420
;2420:		PM_GroundTraceMissed();
ADDRGP4 PM_GroundTraceMissed
CALLV
pop
line 2421
;2421:		pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 2422
;2422:		pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2423
;2423:		return;
ADDRGP4 $961
JUMPV
LABELV $973
line 2427
;2424:	}
;2425:
;2426:	// check if getting thrown off the ground
;2427:	if ( pm->ps->velocity[2] > 0 && DotProduct( pm->ps->velocity, trace.plane.normal ) > 10 ) {
ADDRLP4 1100
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1104
ADDRLP4 1100
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
ASGNF4
ADDRLP4 1104
INDIRF4
CNSTF4 0
LEF4 $978
ADDRLP4 1100
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
ADDRLP4 0+24
INDIRF4
MULF4
ADDRLP4 1100
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
ADDRLP4 0+24+4
INDIRF4
MULF4
ADDF4
ADDRLP4 1104
INDIRF4
ADDRLP4 0+24+8
INDIRF4
MULF4
ADDF4
CNSTF4 1092616192
LEF4 $978
line 2428
;2428:		if ( pm->debugLevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 36
ADDP4
INDIRI4
CNSTI4 0
EQI4 $985
line 2429
;2429:			Com_Printf("%i:kickoff\n", c_pmove);
ADDRGP4 $987
ARGP4
ADDRGP4 c_pmove
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2430
;2430:		}
LABELV $985
line 2432
;2431:		// go into jump animation
;2432:		if ( pm->cmd.forwardmove >= 0 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LTI4 $988
line 2433
;2433:			PM_ForceLegsAnim( BOTH_JUMP1 );
CNSTI4 856
ARGI4
ADDRGP4 PM_ForceLegsAnim
CALLV
pop
line 2434
;2434:			pm->ps->pm_flags &= ~PMF_BACKWARDS_JUMP;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 -9
BANDI4
ASGNI4
line 2435
;2435:		} else {
ADDRGP4 $989
JUMPV
LABELV $988
line 2436
;2436:			PM_ForceLegsAnim( BOTH_JUMPBACK1 );
CNSTI4 860
ARGI4
ADDRGP4 PM_ForceLegsAnim
CALLV
pop
line 2437
;2437:			pm->ps->pm_flags |= PMF_BACKWARDS_JUMP;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 8
BORI4
ASGNI4
line 2438
;2438:		}
LABELV $989
line 2440
;2439:
;2440:		pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 2441
;2441:		pml.groundPlane = qfalse;
ADDRGP4 pml+48
CNSTI4 0
ASGNI4
line 2442
;2442:		pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2443
;2443:		return;
ADDRGP4 $961
JUMPV
LABELV $978
line 2447
;2444:	}
;2445:	
;2446:	// slopes that are too steep will not be considered onground
;2447:	if ( trace.plane.normal[2] < MIN_WALK_NORMAL ) {
ADDRLP4 0+24+8
INDIRF4
CNSTF4 1060320051
GEF4 $992
line 2448
;2448:		if ( pm->debugLevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 36
ADDP4
INDIRI4
CNSTI4 0
EQI4 $996
line 2449
;2449:			Com_Printf("%i:steep\n", c_pmove);
ADDRGP4 $998
ARGP4
ADDRGP4 c_pmove
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2450
;2450:		}
LABELV $996
line 2451
;2451:		pm->ps->groundEntityNum = ENTITYNUM_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
CNSTI4 1023
ASGNI4
line 2452
;2452:		pml.groundPlane = qtrue;
ADDRGP4 pml+48
CNSTI4 1
ASGNI4
line 2453
;2453:		pml.walking = qfalse;
ADDRGP4 pml+44
CNSTI4 0
ASGNI4
line 2454
;2454:		return;
ADDRGP4 $961
JUMPV
LABELV $992
line 2457
;2455:	}
;2456:
;2457:	pml.groundPlane = qtrue;
ADDRGP4 pml+48
CNSTI4 1
ASGNI4
line 2458
;2458:	pml.walking = qtrue;
ADDRGP4 pml+44
CNSTI4 1
ASGNI4
line 2461
;2459:
;2460:	// hitting solid ground will end a waterjump
;2461:	if (pm->ps->pm_flags & PMF_TIME_WATERJUMP)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $1003
line 2462
;2462:	{
line 2463
;2463:		pm->ps->pm_flags &= ~(PMF_TIME_WATERJUMP | PMF_TIME_LAND);
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 -289
BANDI4
ASGNI4
line 2464
;2464:		pm->ps->pm_time = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
CNSTI4 0
ASGNI4
line 2465
;2465:	}
LABELV $1003
line 2467
;2466:
;2467:	if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $1005
line 2469
;2468:		// just hit the ground
;2469:		if ( pm->debugLevel ) {
ADDRGP4 pm
INDIRP4
CNSTI4 36
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1007
line 2470
;2470:			Com_Printf("%i:Land\n", c_pmove);
ADDRGP4 $1009
ARGP4
ADDRGP4 c_pmove
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2471
;2471:		}
LABELV $1007
line 2473
;2472:		
;2473:		PM_CrashLand();
ADDRGP4 PM_CrashLand
CALLV
pop
line 2476
;2474:
;2475:		// don't do landing time if we were just going down a slope
;2476:		if ( pml.previous_velocity[2] < -200 ) {
ADDRGP4 pml+1148+8
INDIRF4
CNSTF4 3276275712
GEF4 $1010
line 2478
;2477:			// don't allow another jump for a little while
;2478:			pm->ps->pm_flags |= PMF_TIME_LAND;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 32
BORI4
ASGNI4
line 2479
;2479:			pm->ps->pm_time = 250;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
CNSTI4 250
ASGNI4
line 2480
;2480:		}
LABELV $1010
line 2481
;2481:	}
LABELV $1005
line 2483
;2482:
;2483:	pm->ps->groundEntityNum = trace.entityNum;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
ADDRLP4 0+52
INDIRI4
ASGNI4
line 2484
;2484:	pm->ps->lastOnGround = pm->cmd.serverTime;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1108
INDIRP4
INDIRP4
CNSTI4 500
ADDP4
ADDRLP4 1108
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 2486
;2485:
;2486:	PM_AddTouchEnt( trace.entityNum );
ADDRLP4 0+52
INDIRI4
ARGI4
ADDRGP4 PM_AddTouchEnt
CALLV
pop
line 2487
;2487:}
LABELV $961
endproc PM_GroundTrace 1112 28
proc PM_SetWaterLevel 48 8
line 2495
;2488:
;2489:
;2490:/*
;2491:=============
;2492:PM_SetWaterLevel
;2493:=============
;2494:*/
;2495:static void PM_SetWaterLevel( void ) {
line 2504
;2496:	vec3_t		point;
;2497:	int			cont;
;2498:	int			sample1;
;2499:	int			sample2;
;2500:
;2501:	//
;2502:	// get waterlevel, accounting for ducking
;2503:	//
;2504:	pm->waterlevel = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
CNSTI4 0
ASGNI4
line 2505
;2505:	pm->watertype = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 212
ADDP4
CNSTI4 0
ASGNI4
line 2507
;2506:
;2507:	point[0] = pm->ps->origin[0];
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ASGNF4
line 2508
;2508:	point[1] = pm->ps->origin[1];
ADDRLP4 0+4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ASGNF4
line 2509
;2509:	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 2510
;2510:	cont = pm->pointcontents( point, pm->ps->clientNum );
ADDRLP4 0
ARGP4
ADDRLP4 24
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
ADDRLP4 24
INDIRP4
CNSTI4 244
ADDP4
INDIRP4
CALLI4
ASGNI4
ADDRLP4 12
ADDRLP4 28
INDIRI4
ASGNI4
line 2512
;2511:
;2512:	if ( cont & MASK_WATER ) {
ADDRLP4 12
INDIRI4
CNSTI4 131078
BANDI4
CNSTI4 0
EQI4 $1019
line 2513
;2513:		sample2 = pm->ps->viewheight - MINS_Z;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
INDIRI4
CNSTI4 -24
SUBI4
ASGNI4
line 2514
;2514:		sample1 = sample2 / 2;
ADDRLP4 20
ADDRLP4 16
INDIRI4
CNSTI4 2
DIVI4
ASGNI4
line 2516
;2515:
;2516:		pm->watertype = cont;
ADDRGP4 pm
INDIRP4
CNSTI4 212
ADDP4
ADDRLP4 12
INDIRI4
ASGNI4
line 2517
;2517:		pm->waterlevel = 1;
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
CNSTI4 1
ASGNI4
line 2518
;2518:		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 2519
;2519:		cont = pm->pointcontents (point, pm->ps->clientNum );
ADDRLP4 0
ARGP4
ADDRLP4 32
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 32
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 36
ADDRLP4 32
INDIRP4
CNSTI4 244
ADDP4
INDIRP4
CALLI4
ASGNI4
ADDRLP4 12
ADDRLP4 36
INDIRI4
ASGNI4
line 2520
;2520:		if ( cont & MASK_WATER ) {
ADDRLP4 12
INDIRI4
CNSTI4 131078
BANDI4
CNSTI4 0
EQI4 $1022
line 2521
;2521:			pm->waterlevel = 2;
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
CNSTI4 2
ASGNI4
line 2522
;2522:			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 2523
;2523:			cont = pm->pointcontents (point, pm->ps->clientNum );
ADDRLP4 0
ARGP4
ADDRLP4 40
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 44
ADDRLP4 40
INDIRP4
CNSTI4 244
ADDP4
INDIRP4
CALLI4
ASGNI4
ADDRLP4 12
ADDRLP4 44
INDIRI4
ASGNI4
line 2524
;2524:			if ( cont & MASK_WATER ){
ADDRLP4 12
INDIRI4
CNSTI4 131078
BANDI4
CNSTI4 0
EQI4 $1025
line 2525
;2525:				pm->waterlevel = 3;
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
CNSTI4 3
ASGNI4
line 2526
;2526:			}
LABELV $1025
line 2527
;2527:		}
LABELV $1022
line 2528
;2528:	}
LABELV $1019
line 2530
;2529:
;2530:}
LABELV $1016
endproc PM_SetWaterLevel 48 8
proc PM_CheckDuck 1112 28
line 2540
;2531:
;2532:/*
;2533:==============
;2534:PM_CheckDuck
;2535:
;2536:Sets mins, maxs, and pm->ps->viewheight
;2537:==============
;2538:*/
;2539:static void PM_CheckDuck (void)
;2540:{
line 2543
;2541:	trace_t	trace;
;2542:
;2543:	pm->mins[0] = -15;
ADDRGP4 pm
INDIRP4
CNSTI4 188
ADDP4
CNSTF4 3245342720
ASGNF4
line 2544
;2544:	pm->mins[1] = -15;
ADDRGP4 pm
INDIRP4
CNSTI4 192
ADDP4
CNSTF4 3245342720
ASGNF4
line 2546
;2545:
;2546:	pm->maxs[0] = 15;
ADDRGP4 pm
INDIRP4
CNSTI4 200
ADDP4
CNSTF4 1097859072
ASGNF4
line 2547
;2547:	pm->maxs[1] = 15;
ADDRGP4 pm
INDIRP4
CNSTI4 204
ADDP4
CNSTF4 1097859072
ASGNF4
line 2549
;2548:
;2549:	pm->mins[2] = MINS_Z;
ADDRGP4 pm
INDIRP4
CNSTI4 196
ADDP4
CNSTF4 3250585600
ASGNF4
line 2551
;2550:
;2551:	if (pm->ps->pm_type == PM_DEAD)
ADDRLP4 1080
CNSTI4 4
ASGNI4
ADDRGP4 pm
INDIRP4
INDIRP4
ADDRLP4 1080
INDIRI4
ADDP4
INDIRI4
ADDRLP4 1080
INDIRI4
NEI4 $1028
line 2552
;2552:	{
line 2553
;2553:		pm->maxs[2] = -8;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 3238002688
ASGNF4
line 2554
;2554:		pm->ps->viewheight = DEAD_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 -16
ASGNI4
line 2555
;2555:		return;
ADDRGP4 $1027
JUMPV
LABELV $1028
line 2558
;2556:	}
;2557:
;2558:	if (pm->ps->usingATST)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1030
line 2559
;2559:	{
line 2560
;2560:		if (pm->cmd.upmove < 0)
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $1032
line 2561
;2561:		{
line 2562
;2562:			pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 2563
;2563:		}
LABELV $1032
line 2564
;2564:	}
LABELV $1030
line 2566
;2565:
;2566:	if (BG_InRoll(pm->ps, pm->ps->legsAnim))
ADDRLP4 1084
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1084
INDIRP4
ARGP4
ADDRLP4 1084
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 1088
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 1088
INDIRI4
CNSTI4 0
EQI4 $1034
line 2567
;2567:	{
line 2568
;2568:		pm->maxs[2] = CROUCH_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1098907648
ASGNF4
line 2569
;2569:		pm->ps->viewheight = DEFAULT_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 36
ASGNI4
line 2570
;2570:		pm->ps->pm_flags &= ~PMF_DUCKED;
ADDRLP4 1092
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1092
INDIRP4
ADDRLP4 1092
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
line 2571
;2571:		pm->ps->pm_flags |= PMF_ROLLING;
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1096
INDIRP4
ADDRLP4 1096
INDIRP4
INDIRI4
CNSTI4 4
BORI4
ASGNI4
line 2572
;2572:		return;
ADDRGP4 $1027
JUMPV
LABELV $1034
line 2574
;2573:	}
;2574:	else if (pm->ps->pm_flags & PMF_ROLLING)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1036
line 2575
;2575:	{
line 2577
;2576:		// try to stand up
;2577:		pm->maxs[2] = DEFAULT_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1109393408
ASGNF4
line 2578
;2578:		pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, pm->ps->origin, pm->ps->clientNum, pm->tracemask );
ADDRLP4 0
ARGP4
ADDRLP4 1092
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1096
ADDRLP4 1092
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1100
ADDRLP4 1096
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 1100
INDIRP4
ARGP4
ADDRLP4 1092
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1092
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 1100
INDIRP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1092
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1092
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2579
;2579:		if (!trace.allsolid)
ADDRLP4 0
INDIRI4
CNSTI4 0
NEI4 $1037
line 2580
;2580:			pm->ps->pm_flags &= ~PMF_ROLLING;
ADDRLP4 1104
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1104
INDIRP4
ADDRLP4 1104
INDIRP4
INDIRI4
CNSTI4 -5
BANDI4
ASGNI4
line 2581
;2581:	}
ADDRGP4 $1037
JUMPV
LABELV $1036
line 2582
;2582:	else if (pm->cmd.upmove < 0 ||
ADDRLP4 1092
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1092
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LTI4 $1042
ADDRLP4 1092
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 8
NEI4 $1040
LABELV $1042
line 2584
;2583:		pm->ps->forceHandExtend == HANDEXTEND_KNOCKDOWN)
;2584:	{	// duck
line 2585
;2585:		pm->ps->pm_flags |= PMF_DUCKED;
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1096
INDIRP4
ADDRLP4 1096
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 2586
;2586:	}
ADDRGP4 $1041
JUMPV
LABELV $1040
line 2588
;2587:	else
;2588:	{	// stand up if possible 
line 2589
;2589:		if (pm->ps->pm_flags & PMF_DUCKED)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1043
line 2590
;2590:		{
line 2592
;2591:			// try to stand up
;2592:			pm->maxs[2] = DEFAULT_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1109393408
ASGNF4
line 2593
;2593:			pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, pm->ps->origin, pm->ps->clientNum, pm->tracemask );
ADDRLP4 0
ARGP4
ADDRLP4 1096
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1100
ADDRLP4 1096
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1104
ADDRLP4 1100
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 1104
INDIRP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 188
ADDP4
ARGP4
ADDRLP4 1096
INDIRP4
CNSTI4 200
ADDP4
ARGP4
ADDRLP4 1104
INDIRP4
ARGP4
ADDRLP4 1100
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 32
ADDP4
INDIRI4
ARGI4
ADDRLP4 1096
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 2594
;2594:			if (!trace.allsolid)
ADDRLP4 0
INDIRI4
CNSTI4 0
NEI4 $1045
line 2595
;2595:				pm->ps->pm_flags &= ~PMF_DUCKED;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
LABELV $1045
line 2596
;2596:		}
LABELV $1043
line 2597
;2597:	}
LABELV $1041
LABELV $1037
line 2599
;2598:
;2599:	if (pm->ps->pm_flags & PMF_DUCKED)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1047
line 2600
;2600:	{
line 2601
;2601:		pm->maxs[2] = CROUCH_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1098907648
ASGNF4
line 2602
;2602:		pm->ps->viewheight = CROUCH_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 12
ASGNI4
line 2603
;2603:	}
ADDRGP4 $1048
JUMPV
LABELV $1047
line 2604
;2604:	else if (pm->ps->pm_flags & PMF_ROLLING)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1049
line 2605
;2605:	{
line 2606
;2606:		pm->maxs[2] = CROUCH_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1098907648
ASGNF4
line 2607
;2607:		pm->ps->viewheight = DEFAULT_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 36
ASGNI4
line 2608
;2608:	}
ADDRGP4 $1050
JUMPV
LABELV $1049
line 2610
;2609:	else
;2610:	{
line 2611
;2611:		pm->maxs[2] = DEFAULT_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1109393408
ASGNF4
line 2612
;2612:		pm->ps->viewheight = DEFAULT_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 36
ASGNI4
line 2613
;2613:	}
LABELV $1050
LABELV $1048
line 2615
;2614:
;2615:	if (pm->ps->usingATST)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1051
line 2616
;2616:	{
line 2617
;2617:		pm->mins[0] = ATST_MINS0;
ADDRGP4 pm
INDIRP4
CNSTI4 188
ADDP4
CNSTF4 3256877056
ASGNF4
line 2618
;2618:		pm->mins[1] = ATST_MINS1;
ADDRGP4 pm
INDIRP4
CNSTI4 192
ADDP4
CNSTF4 3256877056
ASGNF4
line 2619
;2619:		pm->mins[2] = ATST_MINS2;
ADDRGP4 pm
INDIRP4
CNSTI4 196
ADDP4
CNSTF4 3250585600
ASGNF4
line 2621
;2620:
;2621:		pm->maxs[0] = ATST_MAXS0;
ADDRGP4 pm
INDIRP4
CNSTI4 200
ADDP4
CNSTF4 1109393408
ASGNF4
line 2622
;2622:		pm->maxs[1] = ATST_MAXS1;
ADDRGP4 pm
INDIRP4
CNSTI4 204
ADDP4
CNSTF4 1109393408
ASGNF4
line 2623
;2623:		pm->maxs[2] = ATST_MAXS2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1131937792
ASGNF4
line 2624
;2624:	}
LABELV $1051
line 2625
;2625:}
LABELV $1027
endproc PM_CheckDuck 1112 28
export PM_Use
proc PM_Use 4 0
line 2643
;2626:
;2627:
;2628:
;2629://===================================================================
;2630:
;2631:
;2632:
;2633:/*
;2634:==============
;2635:PM_Use
;2636:
;2637:Generates a use event
;2638:==============
;2639:*/
;2640:#define USE_DELAY 2000
;2641:
;2642:void PM_Use( void ) 
;2643:{
line 2644
;2644:	if ( pm->ps->useTime > 0 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 80
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1054
line 2645
;2645:		pm->ps->useTime -= 100;//pm->cmd.msec;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 80
ADDP4
ASGNP4
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
INDIRI4
CNSTI4 100
SUBI4
ASGNI4
LABELV $1054
line 2647
;2646:
;2647:	if ( pm->ps->useTime > 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 80
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1056
line 2648
;2648:		return;
ADDRGP4 $1053
JUMPV
LABELV $1056
line 2651
;2649:	}
;2650:
;2651:	if ( ! (pm->cmd.buttons & BUTTON_USE ) )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 32
BANDI4
CNSTI4 0
NEI4 $1058
line 2652
;2652:	{
line 2653
;2653:		pm->useEvent = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 184
ADDP4
CNSTI4 0
ASGNI4
line 2654
;2654:		pm->ps->useTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 80
ADDP4
CNSTI4 0
ASGNI4
line 2655
;2655:		return;
ADDRGP4 $1053
JUMPV
LABELV $1058
line 2658
;2656:	}
;2657:
;2658:	pm->useEvent = EV_USE;
ADDRGP4 pm
INDIRP4
CNSTI4 184
ADDP4
CNSTI4 39
ASGNI4
line 2659
;2659:	pm->ps->useTime = USE_DELAY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 80
ADDP4
CNSTI4 2000
ASGNI4
line 2660
;2660:}
LABELV $1053
endproc PM_Use 4 0
export PM_RunningAnim
proc PM_RunningAnim 16 0
line 2663
;2661:
;2662:qboolean PM_RunningAnim( int anim )
;2663:{
line 2664
;2664:	switch ( (anim&~ANIM_TOGGLEBIT) )
ADDRLP4 0
ADDRFP4 0
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 8
CNSTI4 833
ASGNI4
ADDRLP4 0
INDIRI4
ADDRLP4 8
INDIRI4
EQI4 $1064
ADDRLP4 0
INDIRI4
CNSTI4 836
EQI4 $1064
ADDRLP4 0
INDIRI4
ADDRLP4 8
INDIRI4
LTI4 $1061
LABELV $1065
ADDRLP4 0
INDIRI4
CNSTI4 850
EQI4 $1064
ADDRLP4 0
INDIRI4
CNSTI4 854
EQI4 $1064
ADDRLP4 0
INDIRI4
CNSTI4 855
EQI4 $1064
ADDRGP4 $1061
JUMPV
line 2665
;2665:	{
LABELV $1064
line 2671
;2666:	case BOTH_RUN1:			
;2667:	case BOTH_RUN2:			
;2668:	case BOTH_RUNBACK1:			
;2669:	case BOTH_RUNBACK2:			
;2670:	case BOTH_RUNAWAY1:			
;2671:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $1060
JUMPV
line 2672
;2672:		break;
LABELV $1061
line 2674
;2673:	}
;2674:	return qfalse;
CNSTI4 0
RETI4
LABELV $1060
endproc PM_RunningAnim 16 0
proc PM_Footsteps 92 16
line 2682
;2675:}
;2676:
;2677:/*
;2678:===============
;2679:PM_Footsteps
;2680:===============
;2681:*/
;2682:static void PM_Footsteps( void ) {
line 2686
;2683:	float		bobmove;
;2684:	int			old;
;2685:	qboolean	footstep;
;2686:	int			setAnimFlags = 0;
ADDRLP4 8
CNSTI4 0
ASGNI4
line 2688
;2687:
;2688:	if ( (PM_InSaberAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ) && !BG_SpinningSaberAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) )) 
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ARGI4
ADDRLP4 16
ADDRGP4 PM_InSaberAnim
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $1070
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ARGI4
ADDRLP4 20
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
EQI4 $1079
LABELV $1070
ADDRLP4 24
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 24
INDIRI4
CNSTI4 571
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 587
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 588
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 573
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 562
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 563
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 1038
EQI4 $1079
ADDRLP4 24
INDIRI4
CNSTI4 1039
EQI4 $1079
ADDRLP4 24
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 PM_LandingAnim
CALLI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 0
NEI4 $1079
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ARGI4
ADDRLP4 32
ADDRGP4 PM_PainAnim
CALLI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 0
EQI4 $1067
LABELV $1079
line 2699
;2689:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND1 
;2690:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND1TO2 
;2691:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND2TO1 
;2692:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND2 
;2693:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_SABERFAST_STANCE
;2694:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_SABERSLOW_STANCE
;2695:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_BUTTON_HOLD
;2696:		|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_BUTTON_RELEASE
;2697:		|| PM_LandingAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ) 
;2698:		|| PM_PainAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ))
;2699:	{//legs are in a saber anim, and not spinning, be sure to override it
line 2700
;2700:		setAnimFlags |= SETANIM_FLAG_OVERRIDE;
ADDRLP4 8
ADDRLP4 8
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 2701
;2701:	}
LABELV $1067
line 2707
;2702:
;2703:	//
;2704:	// calculate speed and cycle to be used for
;2705:	// all cyclic walking effects
;2706:	//
;2707:	pm->xyspeed = sqrt( pm->ps->velocity[0] * pm->ps->velocity[0]
ADDRLP4 36
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 40
ADDRLP4 36
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 44
ADDRLP4 40
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
ASGNF4
ADDRLP4 48
ADDRLP4 40
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
ASGNF4
ADDRLP4 44
INDIRF4
ADDRLP4 44
INDIRF4
MULF4
ADDRLP4 48
INDIRF4
ADDRLP4 48
INDIRF4
MULF4
ADDF4
ARGF4
ADDRLP4 52
ADDRGP4 sqrt
CALLF4
ASGNF4
ADDRLP4 36
INDIRP4
CNSTI4 228
ADDP4
ADDRLP4 52
INDIRF4
ASGNF4
line 2710
;2708:		+  pm->ps->velocity[1] * pm->ps->velocity[1] );
;2709:
;2710:	if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $1080
line 2713
;2711:
;2712:		// airborne leaves position in cycle intact, but doesn't advance
;2713:		if ( pm->waterlevel > 1 )
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 1
LEI4 $1066
line 2714
;2714:		{
line 2715
;2715:			if (pm->xyspeed > 60)
ADDRGP4 pm
INDIRP4
CNSTI4 228
ADDP4
INDIRF4
CNSTF4 1114636288
LEF4 $1084
line 2716
;2716:			{
line 2717
;2717:				PM_ContinueLegsAnim( BOTH_SWIMFORWARD );
CNSTI4 981
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2718
;2718:			}
ADDRGP4 $1066
JUMPV
LABELV $1084
line 2720
;2719:			else
;2720:			{
line 2721
;2721:				PM_ContinueLegsAnim( BOTH_SWIM_IDLE1 );
CNSTI4 980
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2722
;2722:			}
line 2723
;2723:		}
line 2724
;2724:		return;
ADDRGP4 $1066
JUMPV
LABELV $1080
line 2728
;2725:	}
;2726:
;2727:	// if not trying to move
;2728:	if ( !pm->cmd.forwardmove && !pm->cmd.rightmove ) {
ADDRLP4 56
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 60
CNSTI4 0
ASGNI4
ADDRLP4 56
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 60
INDIRI4
NEI4 $1086
ADDRLP4 56
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 60
INDIRI4
NEI4 $1086
line 2729
;2729:		if (  pm->xyspeed < 5 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 228
ADDP4
INDIRF4
CNSTF4 1084227584
GEF4 $1066
line 2730
;2730:			pm->ps->bobCycle = 0;	// start at beginning of cycle again
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 0
ASGNI4
line 2731
;2731:			if ( (pm->ps->pm_flags & PMF_DUCKED) || (pm->ps->pm_flags & PMF_ROLLING) ) {
ADDRLP4 64
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
ASGNI4
ADDRLP4 68
CNSTI4 0
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 68
INDIRI4
NEI4 $1092
ADDRLP4 64
INDIRI4
CNSTI4 4
BANDI4
ADDRLP4 68
INDIRI4
EQI4 $1090
LABELV $1092
line 2732
;2732:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1IDLE)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 797
EQI4 $1093
line 2733
;2733:				{
line 2734
;2734:					PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1IDLE, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 797
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2735
;2735:				}
ADDRGP4 $1066
JUMPV
LABELV $1093
line 2737
;2736:				else
;2737:				{
line 2738
;2738:					PM_ContinueLegsAnim( BOTH_CROUCH1IDLE );
CNSTI4 797
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2739
;2739:				}
line 2740
;2740:			} else {
ADDRGP4 $1066
JUMPV
LABELV $1090
line 2741
;2741:				if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
ADDRLP4 72
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 72
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1095
ADDRLP4 72
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1095
line 2742
;2742:				{
line 2743
;2743:					PM_ContinueLegsAnim( TORSO_WEAPONREADY4 );
CNSTI4 1102
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2744
;2744:				}
ADDRGP4 $1066
JUMPV
LABELV $1095
line 2746
;2745:				else
;2746:				{
line 2747
;2747:					if (pm->ps->weapon == WP_SABER && pm->ps->saberHolstered)
ADDRLP4 76
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 76
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1097
ADDRLP4 76
INDIRP4
CNSTI4 1312
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1097
line 2748
;2748:					{
line 2749
;2749:						PM_ContinueLegsAnim( BOTH_STAND1 );
CNSTI4 571
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2750
;2750:					}
ADDRGP4 $1066
JUMPV
LABELV $1097
line 2752
;2751:					else
;2752:					{
line 2753
;2753:						PM_ContinueLegsAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2754
;2754:					}
line 2755
;2755:				}
line 2756
;2756:			}
line 2757
;2757:		}
line 2758
;2758:		return;
ADDRGP4 $1066
JUMPV
LABELV $1086
line 2762
;2759:	}
;2760:	
;2761:
;2762:	footstep = qfalse;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 2764
;2763:
;2764:	if ( pm->ps->pm_flags & PMF_DUCKED )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1099
line 2765
;2765:	{
line 2766
;2766:		int rolled = 0;
ADDRLP4 64
CNSTI4 0
ASGNI4
line 2768
;2767:
;2768:		bobmove = 0.5;	// ducked characters bob much faster
ADDRLP4 4
CNSTF4 1056964608
ASGNF4
line 2770
;2769:
;2770:		if ( PM_RunningAnim( pm->ps->legsAnim ) && !BG_InRoll(pm->ps, pm->ps->legsAnim) )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 PM_RunningAnim
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1101
ADDRLP4 72
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 72
INDIRP4
ARGP4
ADDRLP4 72
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 76
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 76
INDIRI4
CNSTI4 0
NEI4 $1101
line 2771
;2771:		{//roll!
line 2772
;2772:			rolled = PM_TryRoll();
ADDRLP4 80
ADDRGP4 PM_TryRoll
CALLI4
ASGNI4
ADDRLP4 64
ADDRLP4 80
INDIRI4
ASGNI4
line 2773
;2773:		}
LABELV $1101
line 2774
;2774:		if ( !rolled )
ADDRLP4 64
INDIRI4
CNSTI4 0
NEI4 $1103
line 2775
;2775:		{ //if the roll failed or didn't attempt, do standard crouching anim stuff.
line 2776
;2776:			if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
EQI4 $1105
line 2777
;2777:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALKBACK)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 799
EQI4 $1107
line 2778
;2778:				{
line 2779
;2779:					PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALKBACK, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 799
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2780
;2780:				}
ADDRGP4 $1100
JUMPV
LABELV $1107
line 2782
;2781:				else
;2782:				{
line 2783
;2783:					PM_ContinueLegsAnim( BOTH_CROUCH1WALKBACK );
CNSTI4 799
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2784
;2784:				}
line 2785
;2785:			}
ADDRGP4 $1100
JUMPV
LABELV $1105
line 2786
;2786:			else {
line 2787
;2787:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALK)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 798
EQI4 $1109
line 2788
;2788:				{
line 2789
;2789:					PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALK, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 798
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2790
;2790:				}
ADDRGP4 $1100
JUMPV
LABELV $1109
line 2792
;2791:				else
;2792:				{
line 2793
;2793:					PM_ContinueLegsAnim( BOTH_CROUCH1WALK );
CNSTI4 798
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2794
;2794:				}
line 2795
;2795:			}
line 2796
;2796:		}
ADDRGP4 $1100
JUMPV
LABELV $1103
line 2798
;2797:		else
;2798:		{ //otherwise send us into the roll
line 2799
;2799:			pm->ps->legsTimer = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 0
ASGNI4
line 2800
;2800:			pm->ps->legsAnim = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
CNSTI4 0
ASGNI4
line 2801
;2801:			PM_SetAnim(SETANIM_BOTH,rolled,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 150);
ADDRLP4 80
CNSTI4 3
ASGNI4
ADDRLP4 80
INDIRI4
ARGI4
ADDRLP4 64
INDIRI4
ARGI4
ADDRLP4 80
INDIRI4
ARGI4
CNSTI4 150
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2802
;2802:			PM_AddEventWithParm( EV_ROLL, 0 );
CNSTI4 15
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 2803
;2803:			pm->maxs[2] = CROUCH_MAXS_2;
ADDRGP4 pm
INDIRP4
CNSTI4 208
ADDP4
CNSTF4 1098907648
ASGNF4
line 2804
;2804:			pm->ps->viewheight = DEFAULT_VIEWHEIGHT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
CNSTI4 36
ASGNI4
line 2805
;2805:			pm->ps->pm_flags &= ~PMF_DUCKED;
ADDRLP4 84
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 84
INDIRP4
ADDRLP4 84
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
line 2806
;2806:			pm->ps->pm_flags |= PMF_ROLLING;
ADDRLP4 88
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 88
INDIRP4
ADDRLP4 88
INDIRP4
INDIRI4
CNSTI4 4
BORI4
ASGNI4
line 2807
;2807:		}
line 2808
;2808:	}
ADDRGP4 $1100
JUMPV
LABELV $1099
line 2809
;2809:	else if ((pm->ps->pm_flags & PMF_ROLLING) && !BG_InRoll(pm->ps, pm->ps->legsAnim) &&
ADDRLP4 64
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1111
ADDRLP4 64
INDIRP4
ARGP4
ADDRLP4 64
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
NEI4 $1111
ADDRLP4 72
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 72
INDIRP4
ARGP4
ADDRLP4 72
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 76
ADDRGP4 PM_InRollComplete
CALLI4
ASGNI4
ADDRLP4 76
INDIRI4
CNSTI4 0
NEI4 $1111
line 2811
;2810:		!PM_InRollComplete(pm->ps, pm->ps->legsAnim))
;2811:	{
line 2812
;2812:		bobmove = 0.5;	// ducked characters bob much faster
ADDRLP4 4
CNSTF4 1056964608
ASGNF4
line 2814
;2813:
;2814:		if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
EQI4 $1113
line 2815
;2815:		{
line 2816
;2816:			if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALKBACK)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 799
EQI4 $1115
line 2817
;2817:			{
line 2818
;2818:				PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALKBACK, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 799
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2819
;2819:			}
ADDRGP4 $1112
JUMPV
LABELV $1115
line 2821
;2820:			else
;2821:			{
line 2822
;2822:				PM_ContinueLegsAnim( BOTH_CROUCH1WALKBACK );
CNSTI4 799
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2823
;2823:			}
line 2824
;2824:		}
ADDRGP4 $1112
JUMPV
LABELV $1113
line 2826
;2825:		else
;2826:		{
line 2827
;2827:			if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALK)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 798
EQI4 $1117
line 2828
;2828:			{
line 2829
;2829:				PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALK, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 798
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2830
;2830:			}
ADDRGP4 $1112
JUMPV
LABELV $1117
line 2832
;2831:			else
;2832:			{
line 2833
;2833:				PM_ContinueLegsAnim( BOTH_CROUCH1WALK );
CNSTI4 798
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2834
;2834:			}
line 2835
;2835:		}
line 2836
;2836:	}
ADDRGP4 $1112
JUMPV
LABELV $1111
line 2838
;2837:	else
;2838:	{
line 2839
;2839:		if ( !( pm->cmd.buttons & BUTTON_WALKING ) ) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
NEI4 $1119
line 2840
;2840:			bobmove = 0.4f;	// faster speeds bob faster
ADDRLP4 4
CNSTF4 1053609165
ASGNF4
line 2841
;2841:			if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
EQI4 $1121
line 2842
;2842:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_RUNBACK1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 854
EQI4 $1123
line 2843
;2843:				{
line 2844
;2844:					PM_SetAnim(SETANIM_LEGS, BOTH_RUNBACK1, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 854
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2845
;2845:				}
ADDRGP4 $1122
JUMPV
LABELV $1123
line 2847
;2846:				else
;2847:				{
line 2848
;2848:					PM_ContinueLegsAnim( BOTH_RUNBACK1 );
CNSTI4 854
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2849
;2849:				}
line 2850
;2850:			}
ADDRGP4 $1122
JUMPV
LABELV $1121
line 2851
;2851:			else {
line 2852
;2852:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_RUN1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 833
EQI4 $1125
line 2853
;2853:				{
line 2854
;2854:					PM_SetAnim(SETANIM_LEGS, BOTH_RUN1, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 833
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2855
;2855:				}
ADDRGP4 $1126
JUMPV
LABELV $1125
line 2857
;2856:				else
;2857:				{
line 2858
;2858:					PM_ContinueLegsAnim( BOTH_RUN1 );
CNSTI4 833
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2859
;2859:				}
LABELV $1126
line 2860
;2860:			}
LABELV $1122
line 2861
;2861:			footstep = qtrue;
ADDRLP4 12
CNSTI4 1
ASGNI4
line 2862
;2862:		} else {
ADDRGP4 $1120
JUMPV
LABELV $1119
line 2863
;2863:			bobmove = 0.2f;	// walking bobs slow
ADDRLP4 4
CNSTF4 1045220557
ASGNF4
line 2864
;2864:			if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 16
BANDI4
CNSTI4 0
EQI4 $1127
line 2865
;2865:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_WALKBACK1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 852
EQI4 $1129
line 2866
;2866:				{
line 2867
;2867:					PM_SetAnim(SETANIM_LEGS, BOTH_WALKBACK1, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 852
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2868
;2868:				}
ADDRGP4 $1128
JUMPV
LABELV $1129
line 2870
;2869:				else
;2870:				{
line 2871
;2871:					PM_ContinueLegsAnim( BOTH_WALKBACK1 );
CNSTI4 852
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2872
;2872:				}
line 2873
;2873:			}
ADDRGP4 $1128
JUMPV
LABELV $1127
line 2874
;2874:			else {
line 2875
;2875:				if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_WALK1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 822
EQI4 $1131
line 2876
;2876:				{
line 2877
;2877:					PM_SetAnim(SETANIM_LEGS, BOTH_WALK1, setAnimFlags, 100);
CNSTI4 2
ARGI4
CNSTI4 822
ARGI4
ADDRLP4 8
INDIRI4
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 2878
;2878:				}
ADDRGP4 $1132
JUMPV
LABELV $1131
line 2880
;2879:				else
;2880:				{
line 2881
;2881:					PM_ContinueLegsAnim( BOTH_WALK1 );
CNSTI4 822
ARGI4
ADDRGP4 PM_ContinueLegsAnim
CALLV
pop
line 2882
;2882:				}
LABELV $1132
line 2883
;2883:			}
LABELV $1128
line 2884
;2884:		}
LABELV $1120
line 2885
;2885:	}
LABELV $1112
LABELV $1100
line 2888
;2886:
;2887:	// check for footstep / splash sounds
;2888:	old = pm->ps->bobCycle;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 8
ADDP4
INDIRI4
ASGNI4
line 2889
;2889:	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 2892
;2890:
;2891:	// if we just crossed a cycle boundary, play an apropriate footstep event
;2892:	if ( ( ( old + 64 ) ^ ( pm->ps->bobCycle + 64 ) ) & 128 )
ADDRLP4 80
CNSTI4 64
ASGNI4
ADDRLP4 0
INDIRI4
ADDRLP4 80
INDIRI4
ADDI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 8
ADDP4
INDIRI4
ADDRLP4 80
INDIRI4
ADDI4
BXORI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1134
line 2893
;2893:	{
line 2894
;2894:		pm->ps->footstepTime = pm->cmd.serverTime + 300;
ADDRLP4 84
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 84
INDIRP4
INDIRP4
CNSTI4 1272
ADDP4
ADDRLP4 84
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 2895
;2895:		if ( pm->waterlevel == 1 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1136
line 2897
;2896:			// splashing
;2897:			PM_AddEvent( EV_FOOTSPLASH );
CNSTI4 4
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2898
;2898:		} else if ( pm->waterlevel == 2 ) {
ADDRGP4 $1137
JUMPV
LABELV $1136
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1138
line 2900
;2899:			// wading / swimming at surface
;2900:			PM_AddEvent( EV_SWIM );
CNSTI4 6
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2901
;2901:		} else if ( pm->waterlevel == 3 ) {
ADDRGP4 $1139
JUMPV
LABELV $1138
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1140
line 2903
;2902:			// no sound when completely underwater
;2903:		}
LABELV $1140
LABELV $1139
LABELV $1137
line 2904
;2904:	}
LABELV $1134
line 2905
;2905:}
LABELV $1066
endproc PM_Footsteps 92 16
proc PM_WaterEvents 16 4
line 2914
;2906:
;2907:/*
;2908:==============
;2909:PM_WaterEvents
;2910:
;2911:Generate sound events for entering and leaving water
;2912:==============
;2913:*/
;2914:static void PM_WaterEvents( void ) {		// FIXME?
line 2918
;2915:	//
;2916:	// if just entered a water volume, play a sound
;2917:	//
;2918:	if (!pml.previous_waterlevel && pm->waterlevel) {
ADDRLP4 0
CNSTI4 0
ASGNI4
ADDRGP4 pml+1160
INDIRI4
ADDRLP4 0
INDIRI4
NEI4 $1143
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 0
INDIRI4
EQI4 $1143
line 2919
;2919:		PM_AddEvent( EV_WATER_TOUCH );
CNSTI4 16
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2920
;2920:	}
LABELV $1143
line 2925
;2921:
;2922:	//
;2923:	// if just completely exited a water volume, play a sound
;2924:	//
;2925:	if (pml.previous_waterlevel && !pm->waterlevel) {
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRGP4 pml+1160
INDIRI4
ADDRLP4 4
INDIRI4
EQI4 $1146
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 4
INDIRI4
NEI4 $1146
line 2926
;2926:		PM_AddEvent( EV_WATER_LEAVE );
CNSTI4 17
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2927
;2927:	}
LABELV $1146
line 2932
;2928:
;2929:	//
;2930:	// check for head just going under water
;2931:	//
;2932:	if (pml.previous_waterlevel != 3 && pm->waterlevel == 3) {
ADDRLP4 8
CNSTI4 3
ASGNI4
ADDRGP4 pml+1160
INDIRI4
ADDRLP4 8
INDIRI4
EQI4 $1149
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
NEI4 $1149
line 2933
;2933:		PM_AddEvent( EV_WATER_UNDER );
CNSTI4 18
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2934
;2934:	}
LABELV $1149
line 2939
;2935:
;2936:	//
;2937:	// check for head just coming out of water
;2938:	//
;2939:	if (pml.previous_waterlevel == 3 && pm->waterlevel != 3) {
ADDRLP4 12
CNSTI4 3
ASGNI4
ADDRGP4 pml+1160
INDIRI4
ADDRLP4 12
INDIRI4
NEI4 $1152
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 12
INDIRI4
EQI4 $1152
line 2940
;2940:		PM_AddEvent( EV_WATER_CLEAR );
CNSTI4 19
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2941
;2941:	}
LABELV $1152
line 2942
;2942:}
LABELV $1142
endproc PM_WaterEvents 16 4
export PM_BeginWeaponChange
proc PM_BeginWeaponChange 8 4
line 2950
;2943:
;2944:
;2945:/*
;2946:===============
;2947:PM_BeginWeaponChange
;2948:===============
;2949:*/
;2950:void PM_BeginWeaponChange( int weapon ) {
line 2951
;2951:	if ( weapon <= WP_NONE || weapon >= WP_NUM_WEAPONS ) {
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
LEI4 $1158
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $1156
LABELV $1158
line 2952
;2952:		return;
ADDRGP4 $1155
JUMPV
LABELV $1156
line 2955
;2953:	}
;2954:
;2955:	if ( !( pm->ps->stats[STAT_WEAPONS] & ( 1 << weapon ) ) ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 232
ADDP4
INDIRI4
CNSTI4 1
ADDRFP4 0
INDIRI4
LSHI4
BANDI4
CNSTI4 0
NEI4 $1159
line 2956
;2956:		return;
ADDRGP4 $1155
JUMPV
LABELV $1159
line 2959
;2957:	}
;2958:	
;2959:	if ( pm->ps->weaponstate == WEAPON_DROPPING ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1161
line 2960
;2960:		return;
ADDRGP4 $1155
JUMPV
LABELV $1161
line 2964
;2961:	}
;2962:
;2963:	// turn of any kind of zooming when weapon switching.
;2964:	if (pm->ps->zoomMode)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1163
line 2965
;2965:	{
line 2966
;2966:		pm->ps->zoomMode = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 0
ASGNI4
line 2967
;2967:		pm->ps->zoomTime = pm->ps->commandTime;
ADDRLP4 4
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
CNSTI4 1336
ADDP4
ADDRLP4 4
INDIRP4
INDIRI4
ASGNI4
line 2968
;2968:	}
LABELV $1163
line 2970
;2969:
;2970:	PM_AddEvent( EV_CHANGE_WEAPON );
CNSTI4 23
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 2971
;2971:	pm->ps->weaponstate = WEAPON_DROPPING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 2
ASGNI4
line 2972
;2972:	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 2973
;2973:	PM_StartTorsoAnim( TORSO_DROPWEAP1 );
CNSTI4 1091
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 2974
;2974:}
LABELV $1155
endproc PM_BeginWeaponChange 8 4
export PM_FinishWeaponChange
proc PM_FinishWeaponChange 12 4
line 2982
;2975:
;2976:
;2977:/*
;2978:===============
;2979:PM_FinishWeaponChange
;2980:===============
;2981:*/
;2982:void PM_FinishWeaponChange( void ) {
line 2985
;2983:	int		weapon;
;2984:
;2985:	weapon = pm->cmd.weapon;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
INDIRU1
CVUI4 1
ASGNI4
line 2986
;2986:	if ( weapon < WP_NONE || weapon >= WP_NUM_WEAPONS ) {
ADDRLP4 0
INDIRI4
CNSTI4 0
LTI4 $1168
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $1166
LABELV $1168
line 2987
;2987:		weapon = WP_NONE;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 2988
;2988:	}
LABELV $1166
line 2990
;2989:
;2990:	if ( !( pm->ps->stats[STAT_WEAPONS] & ( 1 << weapon ) ) ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 232
ADDP4
INDIRI4
CNSTI4 1
ADDRLP4 0
INDIRI4
LSHI4
BANDI4
CNSTI4 0
NEI4 $1169
line 2991
;2991:		weapon = WP_NONE;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 2992
;2992:	}
LABELV $1169
line 2994
;2993:
;2994:	if (weapon == WP_SABER)
ADDRLP4 0
INDIRI4
CNSTI4 2
NEI4 $1171
line 2995
;2995:	{
line 2996
;2996:		PM_SetSaberMove(LS_DRAW);
CNSTI4 2
ARGI4
ADDRGP4 PM_SetSaberMove
CALLV
pop
line 2997
;2997:	}
ADDRGP4 $1172
JUMPV
LABELV $1171
line 2999
;2998:	else
;2999:	{
line 3000
;3000:		PM_StartTorsoAnim( TORSO_RAISEWEAP1);
CNSTI4 1095
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3001
;3001:	}
LABELV $1172
line 3002
;3002:	pm->ps->weapon = weapon;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
ADDRLP4 0
INDIRI4
ASGNI4
line 3003
;3003:	pm->ps->weaponstate = WEAPON_RAISING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 1
ASGNI4
line 3004
;3004:	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 3005
;3005:}
LABELV $1165
endproc PM_FinishWeaponChange 12 4
proc PM_DoChargedWeapons 1208 28
line 3012
;3006:
;3007:
;3008:
;3009://---------------------------------------
;3010:static qboolean PM_DoChargedWeapons( void )
;3011://---------------------------------------
;3012:{
line 3015
;3013:	vec3_t		ang;
;3014:	trace_t		tr;
;3015:	qboolean	charging = qfalse,
ADDRLP4 0
CNSTI4 0
ASGNI4
line 3016
;3016:				altFire = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 3019
;3017:
;3018:	// If you want your weapon to be a charging weapon, just set this bit up
;3019:	switch( pm->ps->weapon )
ADDRLP4 1100
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1100
INDIRI4
CNSTI4 3
LTI4 $1174
ADDRLP4 1100
INDIRI4
CNSTI4 11
GTI4 $1174
ADDRLP4 1100
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1248-12
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1248
address $1177
address $1174
address $1243
address $1180
address $1174
address $1240
address $1174
address $1183
address $1235
code
line 3020
;3020:	{
LABELV $1177
line 3025
;3021:	//------------------
;3022:	case WP_BRYAR_PISTOL:
;3023:
;3024:		// alt-fire charges the weapon
;3025:		if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1175
line 3026
;3026:		{
line 3027
;3027:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3028
;3028:			altFire = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3029
;3029:		}
line 3030
;3030:		break;
ADDRGP4 $1175
JUMPV
LABELV $1180
line 3036
;3031:	
;3032:	//------------------
;3033:	case WP_BOWCASTER:
;3034:
;3035:		// primary fire charges the weapon
;3036:		if ( pm->cmd.buttons & BUTTON_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1175
line 3037
;3037:		{
line 3038
;3038:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3039
;3039:		}
line 3040
;3040:		break;
ADDRGP4 $1175
JUMPV
LABELV $1183
line 3047
;3041:	
;3042:	//------------------
;3043:	case WP_ROCKET_LAUNCHER:
;3044:
;3045:		// Not really a charge weapon, but we still want to delay fire until the button comes up so that we can
;3046:		//	implement our alt-fire locking stuff
;3047:		if ( (pm->cmd.buttons & BUTTON_ALT_ATTACK) && pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] >= weaponData[pm->ps->weapon].altEnergyPerShot )
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1108
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1175
ADDRLP4 1112
ADDRLP4 1108
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1116
CNSTI4 56
ADDRLP4 1112
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 1116
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 1112
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 1116
INDIRI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
LTI4 $1175
line 3048
;3048:		{
line 3051
;3049:			vec3_t muzzleOffPoint, muzzlePoint, forward, right, up;
;3050:
;3051:			AngleVectors( pm->ps->viewangles, forward, right, up );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 1144
ARGP4
ADDRLP4 1156
ARGP4
ADDRLP4 1168
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3053
;3052:
;3053:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3054
;3054:			altFire = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3056
;3055:
;3056:			AngleVectors(pm->ps->viewangles, ang, NULL, NULL);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 8
ARGP4
ADDRLP4 1180
CNSTP4 0
ASGNP4
ADDRLP4 1180
INDIRP4
ARGP4
ADDRLP4 1180
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3058
;3057:
;3058:			VectorCopy( pm->ps->origin, muzzlePoint );
ADDRLP4 1120
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 3059
;3059:			VectorCopy(WP_MuzzlePoint[WP_ROCKET_LAUNCHER], muzzleOffPoint);
ADDRLP4 1132
ADDRGP4 WP_MuzzlePoint+120
INDIRB
ASGNB 12
line 3061
;3060:
;3061:			VectorMA(muzzlePoint, muzzleOffPoint[0], forward, muzzlePoint);
ADDRLP4 1184
ADDRLP4 1132
INDIRF4
ASGNF4
ADDRLP4 1120
ADDRLP4 1120
INDIRF4
ADDRLP4 1144
INDIRF4
ADDRLP4 1184
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1120+4
ADDRLP4 1120+4
INDIRF4
ADDRLP4 1144+4
INDIRF4
ADDRLP4 1184
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1120+8
ADDRLP4 1120+8
INDIRF4
ADDRLP4 1144+8
INDIRF4
ADDRLP4 1132
INDIRF4
MULF4
ADDF4
ASGNF4
line 3062
;3062:			VectorMA(muzzlePoint, muzzleOffPoint[1], right, muzzlePoint);
ADDRLP4 1120
ADDRLP4 1120
INDIRF4
ADDRLP4 1156
INDIRF4
ADDRLP4 1132+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1120+4
ADDRLP4 1120+4
INDIRF4
ADDRLP4 1156+4
INDIRF4
ADDRLP4 1132+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1120+8
ADDRLP4 1120+8
INDIRF4
ADDRLP4 1156+8
INDIRF4
ADDRLP4 1132+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3063
;3063:			muzzlePoint[2] += pm->ps->viewheight + muzzleOffPoint[2];
ADDRLP4 1120+8
ADDRLP4 1120+8
INDIRF4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 168
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 1132+8
INDIRF4
ADDF4
ADDF4
ASGNF4
line 3065
;3064:
;3065:			ang[0] = muzzlePoint[0] + ang[0]*2048;
ADDRLP4 8
ADDRLP4 1120
INDIRF4
CNSTF4 1157627904
ADDRLP4 8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3066
;3066:			ang[1] = muzzlePoint[1] + ang[1]*2048;
ADDRLP4 8+4
ADDRLP4 1120+4
INDIRF4
CNSTF4 1157627904
ADDRLP4 8+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3067
;3067:			ang[2] = muzzlePoint[2] + ang[2]*2048;
ADDRLP4 8+8
ADDRLP4 1120+8
INDIRF4
CNSTF4 1157627904
ADDRLP4 8+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3069
;3068:
;3069:			pm->trace(&tr, muzzlePoint, NULL, NULL, ang, pm->ps->clientNum, MASK_PLAYERSOLID);
ADDRLP4 20
ARGP4
ADDRLP4 1120
ARGP4
ADDRLP4 1188
CNSTP4 0
ASGNP4
ADDRLP4 1188
INDIRP4
ARGP4
ADDRLP4 1188
INDIRP4
ARGP4
ADDRLP4 8
ARGP4
ADDRLP4 1192
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1192
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 273
ARGI4
ADDRLP4 1192
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 3071
;3070:
;3071:			if (tr.fraction != 1 && tr.entityNum < MAX_CLIENTS && tr.entityNum != pm->ps->clientNum)
ADDRLP4 20+8
INDIRF4
CNSTF4 1065353216
EQF4 $1211
ADDRLP4 20+52
INDIRI4
CNSTI4 32
GEI4 $1211
ADDRLP4 20+52
INDIRI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
EQI4 $1211
line 3072
;3072:			{
line 3073
;3073:				if (pm->ps->rocketLockIndex == MAX_CLIENTS)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
INDIRI4
CNSTI4 32
NEI4 $1216
line 3074
;3074:				{
line 3075
;3075:					pm->ps->rocketLockIndex = tr.entityNum;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
ADDRLP4 20+52
INDIRI4
ASGNI4
line 3076
;3076:					pm->ps->rocketLockTime = pm->cmd.serverTime;
ADDRLP4 1196
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1196
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
ADDRLP4 1196
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CVIF4 4
ASGNF4
line 3077
;3077:				}
ADDRGP4 $1217
JUMPV
LABELV $1216
line 3078
;3078:				else if (pm->ps->rocketLockIndex != tr.entityNum && pm->ps->rocketTargetTime < pm->cmd.serverTime)
ADDRLP4 1196
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1200
ADDRLP4 1196
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1200
INDIRP4
CNSTI4 580
ADDP4
INDIRI4
ADDRLP4 20+52
INDIRI4
EQI4 $1219
ADDRLP4 1200
INDIRP4
CNSTI4 592
ADDP4
INDIRF4
ADDRLP4 1196
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CVIF4 4
GEF4 $1219
line 3079
;3079:				{
line 3080
;3080:					pm->ps->rocketLockIndex = tr.entityNum;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
ADDRLP4 20+52
INDIRI4
ASGNI4
line 3081
;3081:					pm->ps->rocketLockTime = pm->cmd.serverTime;
ADDRLP4 1204
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
ADDRLP4 1204
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CVIF4 4
ASGNF4
line 3082
;3082:				}
ADDRGP4 $1220
JUMPV
LABELV $1219
line 3083
;3083:				else if (pm->ps->rocketLockIndex == tr.entityNum)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
INDIRI4
ADDRLP4 20+52
INDIRI4
NEI4 $1223
line 3084
;3084:				{
line 3085
;3085:					if (pm->ps->rocketLockTime == -1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
INDIRF4
CNSTF4 3212836864
NEF4 $1226
line 3086
;3086:					{
line 3087
;3087:						pm->ps->rocketLockTime = pm->ps->rocketLastValidTime;
ADDRLP4 1204
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
CNSTI4 588
ADDP4
ADDRLP4 1204
INDIRP4
CNSTI4 584
ADDP4
INDIRF4
ASGNF4
line 3088
;3088:					}
LABELV $1226
line 3089
;3089:				}
LABELV $1223
LABELV $1220
LABELV $1217
line 3091
;3090:
;3091:				if (pm->ps->rocketLockIndex == tr.entityNum)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
INDIRI4
ADDRLP4 20+52
INDIRI4
NEI4 $1175
line 3092
;3092:				{
line 3093
;3093:					pm->ps->rocketTargetTime = pm->cmd.serverTime + 500;
ADDRLP4 1204
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
INDIRP4
CNSTI4 592
ADDP4
ADDRLP4 1204
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 500
ADDI4
CVIF4 4
ASGNF4
line 3094
;3094:				}
line 3095
;3095:			}
ADDRGP4 $1175
JUMPV
LABELV $1211
line 3096
;3096:			else if (pm->ps->rocketTargetTime < pm->cmd.serverTime)
ADDRLP4 1196
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1196
INDIRP4
INDIRP4
CNSTI4 592
ADDP4
INDIRF4
ADDRLP4 1196
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CVIF4 4
GEF4 $1231
line 3097
;3097:			{
line 3098
;3098:				pm->ps->rocketLockIndex = MAX_CLIENTS;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
CNSTI4 32
ASGNI4
line 3099
;3099:				pm->ps->rocketLockTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
CNSTF4 0
ASGNF4
line 3100
;3100:			}
ADDRGP4 $1175
JUMPV
LABELV $1231
line 3102
;3101:			else
;3102:			{
line 3103
;3103:				if (pm->ps->rocketLockTime != -1)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
INDIRF4
CNSTF4 3212836864
EQF4 $1233
line 3104
;3104:				{
line 3105
;3105:					pm->ps->rocketLastValidTime = pm->ps->rocketLockTime;
ADDRLP4 1200
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1200
INDIRP4
CNSTI4 584
ADDP4
ADDRLP4 1200
INDIRP4
CNSTI4 588
ADDP4
INDIRF4
ASGNF4
line 3106
;3106:				}
LABELV $1233
line 3107
;3107:				pm->ps->rocketLockTime = -1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
CNSTF4 3212836864
ASGNF4
line 3108
;3108:			}
line 3109
;3109:		}
line 3110
;3110:		break;
ADDRGP4 $1175
JUMPV
LABELV $1235
line 3115
;3111:
;3112:	//------------------
;3113:	case WP_THERMAL:
;3114:
;3115:		if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1236
line 3116
;3116:		{
line 3117
;3117:			altFire = qtrue; // override default of not being an alt-fire
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3118
;3118:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3119
;3119:		}
ADDRGP4 $1175
JUMPV
LABELV $1236
line 3120
;3120:		else if ( pm->cmd.buttons & BUTTON_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1175
line 3121
;3121:		{
line 3122
;3122:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3123
;3123:		}
line 3124
;3124:		break;
ADDRGP4 $1175
JUMPV
LABELV $1240
line 3127
;3125:
;3126:	case WP_DEMP2:
;3127:		if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1175
line 3128
;3128:		{
line 3129
;3129:			altFire = qtrue; // override default of not being an alt-fire
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3130
;3130:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3131
;3131:		}
line 3132
;3132:		break;
ADDRGP4 $1175
JUMPV
LABELV $1243
line 3135
;3133:
;3134:	case WP_DISRUPTOR:
;3135:		if ((pm->cmd.buttons & BUTTON_ATTACK) &&
ADDRLP4 1120
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1124
CNSTI4 1
ASGNI4
ADDRLP4 1128
CNSTI4 0
ASGNI4
ADDRLP4 1120
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
ADDRLP4 1124
INDIRI4
BANDI4
ADDRLP4 1128
INDIRI4
EQI4 $1244
ADDRLP4 1132
ADDRLP4 1120
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1132
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
ADDRLP4 1124
INDIRI4
NEI4 $1244
ADDRLP4 1132
INDIRP4
CNSTI4 1340
ADDP4
INDIRI4
ADDRLP4 1128
INDIRI4
EQI4 $1244
line 3138
;3136:			pm->ps->zoomMode == 1 &&
;3137:			pm->ps->zoomLocked)
;3138:		{
line 3139
;3139:			charging = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 3140
;3140:			altFire = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3141
;3141:		}
LABELV $1244
line 3143
;3142:
;3143:		if (pm->ps->zoomMode != 1 &&
ADDRLP4 1136
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1136
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
EQI4 $1246
ADDRLP4 1136
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1246
line 3145
;3144:			pm->ps->weaponstate == WEAPON_CHARGING_ALT)
;3145:		{
line 3146
;3146:			pm->ps->weaponstate = WEAPON_READY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 3147
;3147:			charging = qfalse;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 3148
;3148:			altFire = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 3149
;3149:		}
LABELV $1246
line 3151
;3150:
;3151:	} // end switch
LABELV $1174
LABELV $1175
line 3156
;3152:
;3153:
;3154:	// set up the appropriate weapon state based on the button that's down.  
;3155:	//	Note that we ALWAYS return if charging is set ( meaning the buttons are still down )
;3156:	if ( charging )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $1250
line 3157
;3157:	{
line 3158
;3158:		if ( altFire )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $1252
line 3159
;3159:		{
line 3160
;3160:			if ( pm->ps->weaponstate != WEAPON_CHARGING_ALT )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 5
EQI4 $1254
line 3161
;3161:			{
line 3163
;3162:				// charge isn't started, so do it now
;3163:				pm->ps->weaponstate = WEAPON_CHARGING_ALT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 5
ASGNI4
line 3164
;3164:				pm->ps->weaponChargeTime = pm->cmd.serverTime;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1108
INDIRP4
INDIRP4
CNSTI4 48
ADDP4
ADDRLP4 1108
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 3165
;3165:				pm->ps->weaponChargeSubtractTime = pm->cmd.serverTime + weaponData[pm->ps->weapon].altChargeSubTime;
ADDRLP4 1112
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1116
ADDRLP4 1112
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1116
INDIRP4
CNSTI4 52
ADDP4
ADDRLP4 1112
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 56
ADDRLP4 1116
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+36
ADDP4
INDIRI4
ADDI4
ASGNI4
line 3170
;3166:
;3167:#ifdef _DEBUG
;3168:				Com_Printf("Starting charge\n");
;3169:#endif
;3170:				assert(pm->ps->weapon > WP_NONE);
line 3171
;3171:				BG_AddPredictableEventToPlayerstate(EV_WEAPON_CHARGE_ALT, pm->ps->weapon, pm->ps);
CNSTI4 96
ARGI4
ADDRLP4 1120
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1120
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ARGI4
ADDRLP4 1120
INDIRP4
ARGP4
ADDRGP4 BG_AddPredictableEventToPlayerstate
CALLV
pop
line 3172
;3172:			}
LABELV $1254
line 3174
;3173:
;3174:			if (pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] < (weaponData[pm->ps->weapon].altChargeSub+weaponData[pm->ps->weapon].altEnergyPerShot))
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1112
CNSTI4 56
ADDRLP4 1108
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 1108
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData+44
ADDP4
INDIRI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
ADDI4
GEI4 $1257
line 3175
;3175:			{
line 3176
;3176:				pm->ps->weaponstate = WEAPON_CHARGING_ALT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 5
ASGNI4
line 3178
;3177:
;3178:				goto rest;
ADDRGP4 $1261
JUMPV
LABELV $1257
line 3180
;3179:			}
;3180:			else if ((pm->cmd.serverTime - pm->ps->weaponChargeTime) < weaponData[pm->ps->weapon].altMaxCharge)
ADDRLP4 1116
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1120
ADDRLP4 1116
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1116
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ADDRLP4 1120
INDIRP4
CNSTI4 48
ADDP4
INDIRI4
SUBI4
CNSTI4 56
ADDRLP4 1120
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+52
ADDP4
INDIRI4
GEI4 $1253
line 3181
;3181:			{
line 3182
;3182:				if (pm->ps->weaponChargeSubtractTime < pm->cmd.serverTime)
ADDRLP4 1124
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1124
INDIRP4
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
ADDRLP4 1124
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1253
line 3183
;3183:				{
line 3184
;3184:					pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] -= weaponData[pm->ps->weapon].altChargeSub;
ADDRLP4 1128
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1132
CNSTI4 56
ADDRLP4 1128
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1132
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 1128
INDIRP4
CNSTI4 408
ADDP4
ADDP4
ASGNP4
ADDRLP4 1136
INDIRP4
ADDRLP4 1136
INDIRP4
INDIRI4
ADDRLP4 1132
INDIRI4
ADDRGP4 weaponData+44
ADDP4
INDIRI4
SUBI4
ASGNI4
line 3185
;3185:					pm->ps->weaponChargeSubtractTime = pm->cmd.serverTime + weaponData[pm->ps->weapon].altChargeSubTime;
ADDRLP4 1140
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1144
ADDRLP4 1140
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1144
INDIRP4
CNSTI4 52
ADDP4
ADDRLP4 1140
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 56
ADDRLP4 1144
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+36
ADDP4
INDIRI4
ADDI4
ASGNI4
line 3186
;3186:				}
line 3187
;3187:			}
line 3188
;3188:		}
ADDRGP4 $1253
JUMPV
LABELV $1252
line 3190
;3189:		else
;3190:		{
line 3191
;3191:			if ( pm->ps->weaponstate != WEAPON_CHARGING )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 4
EQI4 $1269
line 3192
;3192:			{
line 3194
;3193:				// charge isn't started, so do it now
;3194:				pm->ps->weaponstate = WEAPON_CHARGING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 4
ASGNI4
line 3195
;3195:				pm->ps->weaponChargeTime = pm->cmd.serverTime;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1108
INDIRP4
INDIRP4
CNSTI4 48
ADDP4
ADDRLP4 1108
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 3196
;3196:				pm->ps->weaponChargeSubtractTime = pm->cmd.serverTime + weaponData[pm->ps->weapon].chargeSubTime;
ADDRLP4 1112
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1116
ADDRLP4 1112
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1116
INDIRP4
CNSTI4 52
ADDP4
ADDRLP4 1112
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 56
ADDRLP4 1116
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+32
ADDP4
INDIRI4
ADDI4
ASGNI4
line 3201
;3197:
;3198:#ifdef _DEBUG
;3199:				Com_Printf("Starting charge\n");
;3200:#endif
;3201:				BG_AddPredictableEventToPlayerstate(EV_WEAPON_CHARGE, pm->ps->weapon, pm->ps);
CNSTI4 95
ARGI4
ADDRLP4 1120
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1120
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ARGI4
ADDRLP4 1120
INDIRP4
ARGP4
ADDRGP4 BG_AddPredictableEventToPlayerstate
CALLV
pop
line 3202
;3202:			}
LABELV $1269
line 3204
;3203:
;3204:			if (pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] < (weaponData[pm->ps->weapon].chargeSub+weaponData[pm->ps->weapon].energyPerShot))
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1112
CNSTI4 56
ADDRLP4 1108
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 1108
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData+40
ADDP4
INDIRI4
ADDRLP4 1112
INDIRI4
ADDRGP4 weaponData+8
ADDP4
INDIRI4
ADDI4
GEI4 $1272
line 3205
;3205:			{
line 3206
;3206:				pm->ps->weaponstate = WEAPON_CHARGING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 4
ASGNI4
line 3208
;3207:
;3208:				goto rest;
ADDRGP4 $1261
JUMPV
LABELV $1272
line 3210
;3209:			}
;3210:			else if ((pm->cmd.serverTime - pm->ps->weaponChargeTime) < weaponData[pm->ps->weapon].maxCharge)
ADDRLP4 1116
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1120
ADDRLP4 1116
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1116
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ADDRLP4 1120
INDIRP4
CNSTI4 48
ADDP4
INDIRI4
SUBI4
CNSTI4 56
ADDRLP4 1120
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+48
ADDP4
INDIRI4
GEI4 $1276
line 3211
;3211:			{
line 3212
;3212:				if (pm->ps->weaponChargeSubtractTime < pm->cmd.serverTime)
ADDRLP4 1124
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1124
INDIRP4
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
ADDRLP4 1124
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1279
line 3213
;3213:				{
line 3214
;3214:					pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] -= weaponData[pm->ps->weapon].chargeSub;
ADDRLP4 1128
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1132
CNSTI4 56
ADDRLP4 1128
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1132
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 1128
INDIRP4
CNSTI4 408
ADDP4
ADDP4
ASGNP4
ADDRLP4 1136
INDIRP4
ADDRLP4 1136
INDIRP4
INDIRI4
ADDRLP4 1132
INDIRI4
ADDRGP4 weaponData+40
ADDP4
INDIRI4
SUBI4
ASGNI4
line 3215
;3215:					pm->ps->weaponChargeSubtractTime = pm->cmd.serverTime + weaponData[pm->ps->weapon].chargeSubTime;
ADDRLP4 1140
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 1144
ADDRLP4 1140
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 1144
INDIRP4
CNSTI4 52
ADDP4
ADDRLP4 1140
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 56
ADDRLP4 1144
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+32
ADDP4
INDIRI4
ADDI4
ASGNI4
line 3216
;3216:				}
LABELV $1279
line 3217
;3217:			}
LABELV $1276
line 3218
;3218:		}
LABELV $1253
line 3220
;3219:
;3220:		return qtrue; // short-circuit rest of weapon code
CNSTI4 1
RETI4
ADDRGP4 $1173
JUMPV
LABELV $1250
LABELV $1261
line 3225
;3221:	}
;3222:rest:
;3223:	// Only charging weapons should be able to set these states...so....
;3224:	//	let's see which fire mode we need to set up now that the buttons are up
;3225:	if ( pm->ps->weaponstate == WEAPON_CHARGING )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 4
NEI4 $1283
line 3226
;3226:	{
line 3233
;3227:		// weapon has a charge, so let us do an attack
;3228:#ifdef _DEBUG
;3229:		Com_Printf("Firing.  Charge time=%d\n", pm->cmd.serverTime - pm->ps->weaponChargeTime);
;3230:#endif
;3231:
;3232:		// dumb, but since we shoot a charged weapon on button-up, we need to repress this button for now
;3233:		pm->cmd.buttons |= BUTTON_ATTACK;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 3234
;3234:		pm->ps->eFlags |= EF_FIRING;
ADDRLP4 1112
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 1112
INDIRP4
ADDRLP4 1112
INDIRP4
INDIRI4
CNSTI4 256
BORI4
ASGNI4
line 3235
;3235:	}
ADDRGP4 $1284
JUMPV
LABELV $1283
line 3236
;3236:	else if ( pm->ps->weaponstate == WEAPON_CHARGING_ALT )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1285
line 3237
;3237:	{
line 3244
;3238:		// weapon has a charge, so let us do an alt-attack
;3239:#ifdef _DEBUG
;3240:		Com_Printf("Firing.  Charge time=%d\n", pm->cmd.serverTime - pm->ps->weaponChargeTime);
;3241:#endif
;3242:
;3243:		// dumb, but since we shoot a charged weapon on button-up, we need to repress this button for now
;3244:		pm->cmd.buttons |= BUTTON_ALT_ATTACK;
ADDRLP4 1108
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 1108
INDIRP4
ADDRLP4 1108
INDIRP4
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 3245
;3245:		pm->ps->eFlags |= (EF_FIRING|EF_ALT_FIRING);
ADDRLP4 1112
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 1112
INDIRP4
ADDRLP4 1112
INDIRP4
INDIRI4
CNSTI4 768
BORI4
ASGNI4
line 3246
;3246:	}
LABELV $1285
LABELV $1284
line 3248
;3247:
;3248:	return qfalse; // continue with the rest of the weapon code
CNSTI4 0
RETI4
LABELV $1173
endproc PM_DoChargedWeapons 1208 28
export PM_ItemUsable
proc PM_ItemUsable 1236 28
line 3256
;3249:}
;3250:
;3251:
;3252:#define BOWCASTER_CHARGE_UNIT	200.0f	// bowcaster charging gives us one more unit every 200ms--if you change this, you'll have to do the same in g_weapon
;3253:#define BRYAR_CHARGE_UNIT		200.0f	// bryar charging gives us one more unit every 200ms--if you change this, you'll have to do the same in g_weapon
;3254:
;3255:int PM_ItemUsable(playerState_t *ps, int forcedUse)
;3256:{
line 3263
;3257:	vec3_t fwd, fwdorg, dest, pos;
;3258:	vec3_t yawonly;
;3259:	vec3_t mins, maxs;
;3260:	vec3_t trtest;
;3261:	trace_t tr;
;3262:
;3263:	if (ps->usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1288
line 3264
;3264:	{
line 3265
;3265:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1288
line 3268
;3266:	}
;3267:
;3268:	if (ps->pm_flags & PMF_USE_ITEM_HELD)
ADDRFP4 0
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1024
BANDI4
CNSTI4 0
EQI4 $1290
line 3269
;3269:	{ //force to let go first
line 3270
;3270:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1290
line 3273
;3271:	}
;3272:
;3273:	if (ps->duelInProgress)
ADDRFP4 0
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1292
line 3274
;3274:	{ //not allowed to use holdables while in a private duel.
line 3275
;3275:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1292
line 3278
;3276:	}
;3277:
;3278:	if (!forcedUse)
ADDRFP4 4
INDIRI4
CNSTI4 0
NEI4 $1294
line 3279
;3279:	{
line 3280
;3280:		forcedUse = bg_itemlist[ps->stats[STAT_HOLDABLE_ITEM]].giTag;
ADDRFP4 4
CNSTI4 52
ADDRFP4 0
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
ASGNI4
line 3281
;3281:	}
LABELV $1294
line 3283
;3282:
;3283:	switch (forcedUse)
ADDRLP4 1176
ADDRFP4 4
INDIRI4
ASGNI4
ADDRLP4 1176
INDIRI4
CNSTI4 1
LTI4 $1297
ADDRLP4 1176
INDIRI4
CNSTI4 6
GTI4 $1297
ADDRLP4 1176
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1357-4
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1357
address $1305
address $1335
address $1299
address $1297
address $1297
address $1308
code
line 3284
;3284:	{
LABELV $1299
line 3286
;3285:	case HI_MEDPAC:
;3286:		if (ps->stats[STAT_HEALTH] >= ps->stats[STAT_MAX_HEALTH])
ADDRLP4 1180
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1180
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 1180
INDIRP4
CNSTI4 248
ADDP4
INDIRI4
LTI4 $1300
line 3287
;3287:		{
line 3288
;3288:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1300
line 3290
;3289:		}
;3290:		if (ps->stats[STAT_HEALTH] <= 0 ||
ADDRLP4 1184
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1188
CNSTI4 0
ASGNI4
ADDRLP4 1184
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 1188
INDIRI4
LEI4 $1304
ADDRLP4 1184
INDIRP4
CNSTI4 108
ADDP4
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 1188
INDIRI4
EQI4 $1302
LABELV $1304
line 3292
;3291:			(ps->eFlags & EF_DEAD))
;3292:		{
line 3293
;3293:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1302
line 3296
;3294:		}
;3295:
;3296:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1305
line 3298
;3297:	case HI_SEEKER:
;3298:		if (ps->eFlags & EF_SEEKERDRONE)
ADDRFP4 0
INDIRP4
CNSTI4 108
ADDP4
INDIRI4
CNSTI4 1048576
BANDI4
CNSTI4 0
EQI4 $1306
line 3299
;3299:		{
line 3300
;3300:			PM_AddEventWithParm(EV_ITEMUSEFAIL, SEEKER_ALREADYDEPLOYED);
CNSTI4 56
ARGI4
CNSTI4 4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3301
;3301:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1306
line 3304
;3302:		}
;3303:
;3304:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1308
line 3306
;3305:	case HI_SENTRY_GUN:
;3306:		if (ps->fd.sentryDeployed)
ADDRFP4 0
INDIRP4
CNSTI4 1224
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1309
line 3307
;3307:		{
line 3308
;3308:			PM_AddEventWithParm(EV_ITEMUSEFAIL, SENTRY_ALREADYPLACED);
CNSTI4 56
ARGI4
CNSTI4 2
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3309
;3309:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1309
line 3312
;3310:		}
;3311:
;3312:		yawonly[ROLL] = 0;
ADDRLP4 1140+8
CNSTF4 0
ASGNF4
line 3313
;3313:		yawonly[PITCH] = 0;
ADDRLP4 1140
CNSTF4 0
ASGNF4
line 3314
;3314:		yawonly[YAW] = ps->viewangles[YAW];
ADDRLP4 1140+4
ADDRFP4 0
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 3316
;3315:
;3316:		VectorSet( mins, -8, -8, 0 );
ADDRLP4 1192
CNSTF4 3238002688
ASGNF4
ADDRLP4 1092
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1092+4
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1092+8
CNSTF4 0
ASGNF4
line 3317
;3317:		VectorSet( maxs, 8, 8, 24 );
ADDRLP4 1196
CNSTF4 1090519040
ASGNF4
ADDRLP4 1104
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1104+4
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1104+8
CNSTF4 1103101952
ASGNF4
line 3319
;3318:
;3319:		AngleVectors(yawonly, fwd, NULL, NULL);
ADDRLP4 1140
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 1200
CNSTP4 0
ASGNP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3321
;3320:
;3321:		fwdorg[0] = ps->origin[0] + fwd[0]*64;
ADDRLP4 1116
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 0
INDIRF4
MULF4
ADDF4
ASGNF4
line 3322
;3322:		fwdorg[1] = ps->origin[1] + fwd[1]*64;
ADDRLP4 1116+4
ADDRFP4 0
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3323
;3323:		fwdorg[2] = ps->origin[2] + fwd[2]*64;
ADDRLP4 1116+8
ADDRFP4 0
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3325
;3324:
;3325:		trtest[0] = fwdorg[0] + fwd[0]*16;
ADDRLP4 1152
ADDRLP4 1116
INDIRF4
CNSTF4 1098907648
ADDRLP4 0
INDIRF4
MULF4
ADDF4
ASGNF4
line 3326
;3326:		trtest[1] = fwdorg[1] + fwd[1]*16;
ADDRLP4 1152+4
ADDRLP4 1116+4
INDIRF4
CNSTF4 1098907648
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3327
;3327:		trtest[2] = fwdorg[2] + fwd[2]*16;
ADDRLP4 1152+8
ADDRLP4 1116+8
INDIRF4
CNSTF4 1098907648
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3329
;3328:
;3329:		pm->trace(&tr, ps->origin, mins, maxs, trtest, ps->clientNum, MASK_PLAYERSOLID);
ADDRLP4 12
ARGP4
ADDRLP4 1204
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1092
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1152
ARGP4
ADDRLP4 1204
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 273
ARGI4
ADDRGP4 pm
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 3331
;3330:
;3331:		if ((tr.fraction != 1 && tr.entityNum != ps->clientNum) || tr.startsolid || tr.allsolid)
ADDRLP4 12+8
INDIRF4
CNSTF4 1065353216
EQF4 $1333
ADDRLP4 12+52
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
NEI4 $1334
LABELV $1333
ADDRLP4 1208
CNSTI4 0
ASGNI4
ADDRLP4 12+4
INDIRI4
ADDRLP4 1208
INDIRI4
NEI4 $1334
ADDRLP4 12
INDIRI4
ADDRLP4 1208
INDIRI4
EQI4 $1327
LABELV $1334
line 3332
;3332:		{
line 3333
;3333:			PM_AddEventWithParm(EV_ITEMUSEFAIL, SENTRY_NOROOM);
CNSTI4 56
ARGI4
CNSTI4 1
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3334
;3334:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1327
line 3337
;3335:		}
;3336:
;3337:		return 1;
CNSTI4 1
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1335
line 3339
;3338:	case HI_SHIELD:
;3339:		mins[0] = -8;
ADDRLP4 1092
CNSTF4 3238002688
ASGNF4
line 3340
;3340:		mins[1] = -8;
ADDRLP4 1092+4
CNSTF4 3238002688
ASGNF4
line 3341
;3341:		mins[2] = 0;
ADDRLP4 1092+8
CNSTF4 0
ASGNF4
line 3343
;3342:
;3343:		maxs[0] = 8;
ADDRLP4 1104
CNSTF4 1090519040
ASGNF4
line 3344
;3344:		maxs[1] = 8;
ADDRLP4 1104+4
CNSTF4 1090519040
ASGNF4
line 3345
;3345:		maxs[2] = 8;
ADDRLP4 1104+8
CNSTF4 1090519040
ASGNF4
line 3347
;3346:
;3347:		AngleVectors (ps->viewangles, fwd, NULL, NULL);
ADDRFP4 0
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 1212
CNSTP4 0
ASGNP4
ADDRLP4 1212
INDIRP4
ARGP4
ADDRLP4 1212
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3348
;3348:		fwd[2] = 0;
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 3349
;3349:		VectorMA(ps->origin, 64, fwd, dest);
ADDRLP4 1216
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1220
CNSTF4 1115684864
ASGNF4
ADDRLP4 1128
ADDRLP4 1216
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 1220
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1128+4
ADDRLP4 1216
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 1220
INDIRF4
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 1128+8
ADDRFP4 0
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
CNSTF4 1115684864
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3350
;3350:		pm->trace(&tr, ps->origin, mins, maxs, dest, ps->clientNum, MASK_SHOT );
ADDRLP4 12
ARGP4
ADDRLP4 1224
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1224
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1092
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1128
ARGP4
ADDRLP4 1224
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 769
ARGI4
ADDRGP4 pm
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 3351
;3351:		if (tr.fraction > 0.9 && !tr.startsolid && !tr.allsolid)
ADDRLP4 12+8
INDIRF4
CNSTF4 1063675494
LEF4 $1345
ADDRLP4 1228
CNSTI4 0
ASGNI4
ADDRLP4 12+4
INDIRI4
ADDRLP4 1228
INDIRI4
NEI4 $1345
ADDRLP4 12
INDIRI4
ADDRLP4 1228
INDIRI4
NEI4 $1345
line 3352
;3352:		{
line 3353
;3353:			VectorCopy(tr.endpos, pos);
ADDRLP4 1164
ADDRLP4 12+12
INDIRB
ASGNB 12
line 3354
;3354:			VectorSet( dest, pos[0], pos[1], pos[2] - 4096 );
ADDRLP4 1128
ADDRLP4 1164
INDIRF4
ASGNF4
ADDRLP4 1128+4
ADDRLP4 1164+4
INDIRF4
ASGNF4
ADDRLP4 1128+8
ADDRLP4 1164+8
INDIRF4
CNSTF4 1166016512
SUBF4
ASGNF4
line 3355
;3355:			pm->trace( &tr, pos, mins, maxs, dest, ps->clientNum, MASK_SOLID );
ADDRLP4 12
ARGP4
ADDRLP4 1164
ARGP4
ADDRLP4 1092
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1128
ARGP4
ADDRFP4 0
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRGP4 pm
INDIRP4
CNSTI4 240
ADDP4
INDIRP4
CALLV
pop
line 3356
;3356:			if ( !tr.startsolid && !tr.allsolid )
ADDRLP4 1232
CNSTI4 0
ASGNI4
ADDRLP4 12+4
INDIRI4
ADDRLP4 1232
INDIRI4
NEI4 $1354
ADDRLP4 12
INDIRI4
ADDRLP4 1232
INDIRI4
NEI4 $1354
line 3357
;3357:			{
line 3358
;3358:				return 1;
CNSTI4 1
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1354
line 3360
;3359:			}
;3360:		}
LABELV $1345
line 3361
;3361:		PM_AddEventWithParm(EV_ITEMUSEFAIL, SHIELD_NOROOM);
CNSTI4 56
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3362
;3362:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1287
JUMPV
LABELV $1297
line 3364
;3363:	default:
;3364:		return 1;
CNSTI4 1
RETI4
LABELV $1287
endproc PM_ItemUsable 1236 28
proc PM_Weapon 156 16
line 3376
;3365:	}
;3366:}
;3367:
;3368:/*
;3369:==============
;3370:PM_Weapon
;3371:
;3372:Generates weapon events and modifes the weapon counter
;3373:==============
;3374:*/
;3375:static void PM_Weapon( void )
;3376:{
line 3379
;3377:	int		addTime;
;3378:	int amount;
;3379:	int		killAfterItem = 0;
ADDRLP4 8
CNSTI4 0
ASGNI4
line 3381
;3380:
;3381:	if (pm->ps->usingATST)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1360
line 3382
;3382:	{
line 3383
;3383:		if ( pm->ps->weaponTime > 0 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1362
line 3384
;3384:		{
line 3385
;3385:			pm->ps->weaponTime -= pml.msec;
ADDRLP4 12
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 12
INDIRP4
ADDRLP4 12
INDIRP4
INDIRI4
ADDRGP4 pml+40
INDIRI4
SUBI4
ASGNI4
line 3386
;3386:		}
LABELV $1362
line 3388
;3387:
;3388:		if (pm->ps->weaponTime < 1 && (pm->cmd.buttons & (BUTTON_ATTACK|BUTTON_ALT_ATTACK)))
ADDRLP4 12
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 12
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 1
GEI4 $1359
ADDRLP4 12
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 129
BANDI4
CNSTI4 0
EQI4 $1359
line 3389
;3389:		{
line 3390
;3390:			pm->ps->weaponTime += 500;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 16
INDIRP4
ADDRLP4 16
INDIRP4
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 3392
;3391:
;3392:			if (pm->ps->atstAltFire)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1320
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1367
line 3393
;3393:			{
line 3394
;3394:				PM_AddEvent( EV_ALT_FIRE );
CNSTI4 25
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3395
;3395:				pm->ps->atstAltFire = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1320
ADDP4
CNSTI4 0
ASGNI4
line 3396
;3396:			}
ADDRGP4 $1359
JUMPV
LABELV $1367
line 3398
;3397:			else
;3398:			{
line 3399
;3399:				PM_AddEvent( EV_FIRE_WEAPON );
CNSTI4 24
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3400
;3400:				pm->ps->atstAltFire = qtrue;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1320
ADDP4
CNSTI4 1
ASGNI4
line 3401
;3401:			}
line 3402
;3402:		}
line 3404
;3403:
;3404:		return;
ADDRGP4 $1359
JUMPV
LABELV $1360
line 3407
;3405:	}
;3406:
;3407:	if (pm->ps->weapon != WP_DISRUPTOR && pm->ps->weapon != WP_ROCKET_LAUNCHER)
ADDRLP4 12
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ASGNI4
ADDRLP4 12
INDIRI4
CNSTI4 5
EQI4 $1369
ADDRLP4 12
INDIRI4
CNSTI4 10
EQI4 $1369
line 3408
;3408:	{ //check for exceeding max charge time if not using disruptor or rocket launcher
line 3409
;3409:		if ( pm->ps->weaponstate == WEAPON_CHARGING_ALT )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1371
line 3410
;3410:		{
line 3411
;3411:			int timeDif = (pm->cmd.serverTime - pm->ps->weaponChargeTime);
ADDRLP4 20
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 16
ADDRLP4 20
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ADDRLP4 20
INDIRP4
INDIRP4
CNSTI4 48
ADDP4
INDIRI4
SUBI4
ASGNI4
line 3413
;3412:
;3413:			if (timeDif > MAX_WEAPON_CHARGE_TIME)
ADDRLP4 16
INDIRI4
CNSTI4 5000
LEI4 $1373
line 3414
;3414:			{
line 3415
;3415:				pm->cmd.buttons &= ~BUTTON_ALT_ATTACK;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
CNSTI4 -129
BANDI4
ASGNI4
line 3416
;3416:			}
LABELV $1373
line 3417
;3417:		}
LABELV $1371
line 3419
;3418:
;3419:		if ( pm->ps->weaponstate == WEAPON_CHARGING )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 4
NEI4 $1375
line 3420
;3420:		{
line 3421
;3421:			int timeDif = (pm->cmd.serverTime - pm->ps->weaponChargeTime);
ADDRLP4 20
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 16
ADDRLP4 20
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ADDRLP4 20
INDIRP4
INDIRP4
CNSTI4 48
ADDP4
INDIRI4
SUBI4
ASGNI4
line 3423
;3422:
;3423:			if (timeDif > MAX_WEAPON_CHARGE_TIME)
ADDRLP4 16
INDIRI4
CNSTI4 5000
LEI4 $1377
line 3424
;3424:			{
line 3425
;3425:				pm->cmd.buttons &= ~BUTTON_ATTACK;
ADDRLP4 24
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
line 3426
;3426:			}
LABELV $1377
line 3427
;3427:		}
LABELV $1375
line 3428
;3428:	}
LABELV $1369
line 3430
;3429:
;3430:	if (pm->ps->forceHandExtend == HANDEXTEND_WEAPONREADY)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 6
NEI4 $1379
line 3431
;3431:	{ //reset into weapon stance
line 3432
;3432:		if (pm->ps->weapon != WP_SABER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
EQI4 $1381
line 3433
;3433:		{ //saber handles its own anims
line 3434
;3434:			if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1383
ADDRLP4 16
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1383
line 3435
;3435:			{
line 3437
;3436:				//PM_StartTorsoAnim( TORSO_WEAPONREADY4 );
;3437:				PM_StartTorsoAnim( TORSO_RAISEWEAP1);
CNSTI4 1095
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3438
;3438:			}
ADDRGP4 $1384
JUMPV
LABELV $1383
line 3440
;3439:			else
;3440:			{
line 3441
;3441:				if (pm->ps->weapon == WP_EMPLACED_GUN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1385
line 3442
;3442:				{
line 3443
;3443:					PM_StartTorsoAnim( BOTH_GUNSIT1 );
CNSTI4 810
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3444
;3444:				}
ADDRGP4 $1386
JUMPV
LABELV $1385
line 3446
;3445:				else
;3446:				{
line 3448
;3447:					//PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
;3448:					PM_StartTorsoAnim( TORSO_RAISEWEAP1);
CNSTI4 1095
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3449
;3449:				}
LABELV $1386
line 3450
;3450:			}
LABELV $1384
line 3451
;3451:		}
LABELV $1381
line 3455
;3452:
;3453:		//we now go into a weapon raise anim after every force hand extend.
;3454:		//this is so that my holster-view-weapon-when-hand-extend stuff works.
;3455:		pm->ps->weaponstate = WEAPON_RAISING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 1
ASGNI4
line 3456
;3456:		pm->ps->weaponTime += 250;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 16
INDIRP4
ADDRLP4 16
INDIRP4
INDIRI4
CNSTI4 250
ADDI4
ASGNI4
line 3458
;3457:
;3458:		pm->ps->forceHandExtend = HANDEXTEND_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
CNSTI4 0
ASGNI4
line 3459
;3459:	}
ADDRGP4 $1380
JUMPV
LABELV $1379
line 3460
;3460:	else if (pm->ps->forceHandExtend != HANDEXTEND_NONE)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1387
line 3461
;3461:	{ //nothing else should be allowed to happen during this time, including weapon fire
line 3462
;3462:		int desiredAnim = 0;
ADDRLP4 16
CNSTI4 0
ASGNI4
line 3463
;3463:		qboolean seperateOnTorso = qfalse;
ADDRLP4 20
CNSTI4 0
ASGNI4
line 3464
;3464:		int desiredOnTorso = 0;
ADDRLP4 24
CNSTI4 0
ASGNI4
line 3466
;3465:
;3466:		switch(pm->ps->forceHandExtend)
ADDRLP4 28
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 1
LTI4 $1389
ADDRLP4 28
INDIRI4
CNSTI4 10
GTI4 $1389
ADDRLP4 28
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1413-4
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1413
address $1392
address $1393
address $1394
address $1395
address $1396
address $1389
address $1397
address $1398
address $1411
address $1412
code
line 3467
;3467:		{
LABELV $1392
line 3469
;3468:		case HANDEXTEND_FORCEPUSH:
;3469:			desiredAnim = BOTH_FORCEPUSH;
ADDRLP4 16
CNSTI4 1041
ASGNI4
line 3470
;3470:			break;
ADDRGP4 $1390
JUMPV
LABELV $1393
line 3472
;3471:		case HANDEXTEND_FORCEPULL:
;3472:			desiredAnim = BOTH_FORCEPULL;
ADDRLP4 16
CNSTI4 1042
ASGNI4
line 3473
;3473:			break;
ADDRGP4 $1390
JUMPV
LABELV $1394
line 3475
;3474:		case HANDEXTEND_FORCEGRIP:
;3475:			desiredAnim = BOTH_FORCEGRIP_HOLD;
ADDRLP4 16
CNSTI4 1056
ASGNI4
line 3476
;3476:			break;
ADDRGP4 $1390
JUMPV
LABELV $1395
line 3478
;3477:		case HANDEXTEND_SABERPULL:
;3478:			desiredAnim = BOTH_SABERPULL;
ADDRLP4 16
CNSTI4 1052
ASGNI4
line 3479
;3479:			break;
ADDRGP4 $1390
JUMPV
LABELV $1396
line 3481
;3480:		case HANDEXTEND_CHOKE:
;3481:			desiredAnim = BOTH_CHOKE3; //left-handed choke
ADDRLP4 16
CNSTI4 1032
ASGNI4
line 3482
;3482:			break;
ADDRGP4 $1390
JUMPV
LABELV $1397
line 3484
;3483:		case HANDEXTEND_DODGE:
;3484:			desiredAnim = pm->ps->forceDodgeAnim;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
ASGNI4
line 3485
;3485:			break;
ADDRGP4 $1390
JUMPV
LABELV $1398
line 3487
;3486:		case HANDEXTEND_KNOCKDOWN:
;3487:			if (pm->ps->forceDodgeAnim)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1399
line 3488
;3488:			{
line 3489
;3489:				if (pm->ps->forceDodgeAnim > 4)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
CNSTI4 4
LEI4 $1401
line 3490
;3490:				{ //this means that we want to play a sepereate anim on the torso
line 3491
;3491:					int originalDAnim = pm->ps->forceDodgeAnim-8; //-8 is the original legs anim
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
CNSTI4 8
SUBI4
ASGNI4
line 3492
;3492:					if (originalDAnim == 2)
ADDRLP4 36
INDIRI4
CNSTI4 2
NEI4 $1403
line 3493
;3493:					{
line 3494
;3494:						desiredAnim = BOTH_FORCE_GETUP_B1;
ADDRLP4 16
CNSTI4 938
ASGNI4
line 3495
;3495:					}
ADDRGP4 $1404
JUMPV
LABELV $1403
line 3496
;3496:					else if (originalDAnim == 3)
ADDRLP4 36
INDIRI4
CNSTI4 3
NEI4 $1405
line 3497
;3497:					{
line 3498
;3498:						desiredAnim = BOTH_FORCE_GETUP_B3;
ADDRLP4 16
CNSTI4 940
ASGNI4
line 3499
;3499:					}
ADDRGP4 $1406
JUMPV
LABELV $1405
line 3501
;3500:					else
;3501:					{
line 3502
;3502:						desiredAnim = BOTH_GETUP1;
ADDRLP4 16
CNSTI4 929
ASGNI4
line 3503
;3503:					}
LABELV $1406
LABELV $1404
line 3506
;3504:
;3505:					//now specify the torso anim
;3506:					seperateOnTorso = qtrue;
ADDRLP4 20
CNSTI4 1
ASGNI4
line 3507
;3507:					desiredOnTorso = BOTH_FORCEPUSH;
ADDRLP4 24
CNSTI4 1041
ASGNI4
line 3508
;3508:				}
ADDRGP4 $1390
JUMPV
LABELV $1401
line 3509
;3509:				else if (pm->ps->forceDodgeAnim == 2)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1407
line 3510
;3510:				{
line 3511
;3511:					desiredAnim = BOTH_FORCE_GETUP_B1;
ADDRLP4 16
CNSTI4 938
ASGNI4
line 3512
;3512:				}
ADDRGP4 $1390
JUMPV
LABELV $1407
line 3513
;3513:				else if (pm->ps->forceDodgeAnim == 3)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1409
line 3514
;3514:				{
line 3515
;3515:					desiredAnim = BOTH_FORCE_GETUP_B3;
ADDRLP4 16
CNSTI4 940
ASGNI4
line 3516
;3516:				}
ADDRGP4 $1390
JUMPV
LABELV $1409
line 3518
;3517:				else
;3518:				{
line 3519
;3519:					desiredAnim = BOTH_GETUP1;
ADDRLP4 16
CNSTI4 929
ASGNI4
line 3520
;3520:				}
line 3521
;3521:			}
ADDRGP4 $1390
JUMPV
LABELV $1399
line 3523
;3522:			else
;3523:			{
line 3524
;3524:				desiredAnim = BOTH_KNOCKDOWN1;
ADDRLP4 16
CNSTI4 924
ASGNI4
line 3525
;3525:			}
line 3526
;3526:			break;
ADDRGP4 $1390
JUMPV
LABELV $1411
line 3528
;3527:		case HANDEXTEND_DUELCHALLENGE:
;3528:			desiredAnim = BOTH_ENGAGETAUNT;
ADDRLP4 16
CNSTI4 904
ASGNI4
line 3529
;3529:			break;
ADDRGP4 $1390
JUMPV
LABELV $1412
line 3531
;3530:		case HANDEXTEND_TAUNT:
;3531:			desiredAnim = pm->ps->forceDodgeAnim;
ADDRLP4 16
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
INDIRI4
ASGNI4
line 3532
;3532:			break;
ADDRGP4 $1390
JUMPV
LABELV $1389
line 3545
;3533:			//Hmm... maybe use these, too?
;3534:			//BOTH_FORCEHEAL_QUICK //quick heal (SP level 2 & 3)
;3535:			//BOTH_MINDTRICK1 // wave (maybe for mind trick 2 & 3 - whole area, and for force seeing)
;3536:			//BOTH_MINDTRICK2 // tap (maybe for mind trick 1 - one person)
;3537:			//BOTH_FORCEGRIP_START //start grip
;3538:			//BOTH_FORCEGRIP_HOLD //hold grip
;3539:			//BOTH_FORCEGRIP_RELEASE //release grip
;3540:			//BOTH_FORCELIGHTNING //quick lightning burst (level 1)
;3541:			//BOTH_FORCELIGHTNING_START //start lightning
;3542:			//BOTH_FORCELIGHTNING_HOLD //hold lightning
;3543:			//BOTH_FORCELIGHTNING_RELEASE //release lightning
;3544:		default:
;3545:			desiredAnim = BOTH_FORCEPUSH;
ADDRLP4 16
CNSTI4 1041
ASGNI4
line 3546
;3546:			break;
LABELV $1390
line 3549
;3547:		}
;3548:
;3549:		if (!seperateOnTorso)
ADDRLP4 20
INDIRI4
CNSTI4 0
NEI4 $1415
line 3550
;3550:		{ //of seperateOnTorso, handle it after setting the legs
line 3551
;3551:			PM_SetAnim(SETANIM_TORSO, desiredAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
CNSTI4 1
ARGI4
ADDRLP4 16
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 3552
;3552:			pm->ps->torsoTimer = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
CNSTI4 1
ASGNI4
line 3553
;3553:		}
LABELV $1415
line 3555
;3554:
;3555:		if (pm->ps->forceHandExtend == HANDEXTEND_DODGE || pm->ps->forceHandExtend == HANDEXTEND_KNOCKDOWN ||
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 40
ADDRLP4 36
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 7
EQI4 $1420
ADDRLP4 40
INDIRI4
CNSTI4 8
EQI4 $1420
ADDRLP4 40
INDIRI4
CNSTI4 5
NEI4 $1359
ADDRLP4 36
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $1359
LABELV $1420
line 3557
;3556:			(pm->ps->forceHandExtend == HANDEXTEND_CHOKE && pm->ps->groundEntityNum == ENTITYNUM_NONE) )
;3557:		{ //special case, play dodge anim on whole body, choke anim too if off ground
line 3558
;3558:			if (seperateOnTorso)
ADDRLP4 20
INDIRI4
CNSTI4 0
EQI4 $1421
line 3559
;3559:			{
line 3560
;3560:				PM_SetAnim(SETANIM_LEGS, desiredAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
CNSTI4 2
ARGI4
ADDRLP4 16
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 3561
;3561:				pm->ps->legsTimer = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 1
ASGNI4
line 3563
;3562:
;3563:				PM_SetAnim(SETANIM_TORSO, desiredOnTorso, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
CNSTI4 1
ARGI4
ADDRLP4 24
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 3564
;3564:				pm->ps->torsoTimer = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
CNSTI4 1
ASGNI4
line 3565
;3565:			}
ADDRGP4 $1359
JUMPV
LABELV $1421
line 3567
;3566:			else
;3567:			{
line 3568
;3568:				PM_SetAnim(SETANIM_LEGS, desiredAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
CNSTI4 2
ARGI4
ADDRLP4 16
INDIRI4
ARGI4
CNSTI4 3
ARGI4
CNSTI4 100
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 3569
;3569:				pm->ps->legsTimer = 1;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 1
ASGNI4
line 3570
;3570:			}
line 3571
;3571:		}
line 3573
;3572:
;3573:		return;
ADDRGP4 $1359
JUMPV
LABELV $1387
LABELV $1380
line 3576
;3574:	}
;3575:
;3576:	if (BG_InSpecialJump(pm->ps->legsAnim) ||
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
NEI4 $1426
ADDRLP4 20
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
ARGP4
ADDRLP4 20
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 24
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 24
INDIRI4
CNSTI4 0
NEI4 $1426
ADDRLP4 28
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
ARGP4
ADDRLP4 28
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 32
ADDRGP4 PM_InRollComplete
CALLI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 0
EQI4 $1423
LABELV $1426
line 3579
;3577:		BG_InRoll(pm->ps, pm->ps->legsAnim) ||
;3578:		PM_InRollComplete(pm->ps, pm->ps->legsAnim))
;3579:	{
line 3580
;3580:		pm->cmd.weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
CNSTU1 2
ASGNU1
line 3581
;3581:		pm->ps->weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
CNSTI4 2
ASGNI4
line 3582
;3582:	}
LABELV $1423
line 3584
;3583:
;3584:	if (pm->ps->duelInProgress)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1427
line 3585
;3585:	{
line 3586
;3586:		pm->cmd.weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
CNSTU1 2
ASGNU1
line 3587
;3587:		pm->ps->weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
CNSTI4 2
ASGNI4
line 3589
;3588:
;3589:		if (pm->ps->duelTime >= pm->cmd.serverTime)
ADDRLP4 36
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 36
INDIRP4
INDIRP4
CNSTI4 1300
ADDP4
INDIRI4
ADDRLP4 36
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
LTI4 $1429
line 3590
;3590:		{
line 3591
;3591:			pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 3592
;3592:			pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 3593
;3593:			pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 3594
;3594:		}
LABELV $1429
line 3595
;3595:	}
LABELV $1427
line 3597
;3596:
;3597:	if (pm->ps->weapon == WP_SABER && pm->ps->saberMove != LS_READY && pm->ps->saberMove != LS_NONE)
ADDRLP4 36
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1431
ADDRLP4 40
ADDRLP4 36
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 1
EQI4 $1431
ADDRLP4 40
INDIRI4
CNSTI4 0
EQI4 $1431
line 3598
;3598:	{
line 3599
;3599:		pm->cmd.weapon = WP_SABER; //don't allow switching out mid-attack
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
CNSTU1 2
ASGNU1
line 3600
;3600:	}
LABELV $1431
line 3602
;3601:
;3602:	if (pm->ps->weapon == WP_SABER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1433
line 3603
;3603:	{
line 3605
;3604:		//rww - we still need the item stuff, so we won't return immediately
;3605:		PM_WeaponLightsaber();
ADDRGP4 PM_WeaponLightsaber
CALLV
pop
line 3606
;3606:		killAfterItem = 1;
ADDRLP4 8
CNSTI4 1
ASGNI4
line 3607
;3607:	}
ADDRGP4 $1434
JUMPV
LABELV $1433
line 3609
;3608:	else
;3609:	{
line 3610
;3610:		pm->ps->saberHolstered = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1312
ADDP4
CNSTI4 0
ASGNI4
line 3611
;3611:	}
LABELV $1434
line 3613
;3612:
;3613:	if (pm->ps->weapon == WP_THERMAL ||
ADDRLP4 44
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 11
EQI4 $1438
ADDRLP4 44
INDIRI4
CNSTI4 12
EQI4 $1438
ADDRLP4 44
INDIRI4
CNSTI4 13
NEI4 $1435
LABELV $1438
line 3616
;3614:		pm->ps->weapon == WP_TRIP_MINE ||
;3615:		pm->ps->weapon == WP_DET_PACK)
;3616:	{
line 3617
;3617:		if (pm->ps->weapon == WP_THERMAL)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 11
NEI4 $1439
line 3618
;3618:		{
line 3619
;3619:			if ((pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == WeaponAttackAnim[pm->ps->weapon] &&
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ADDRLP4 48
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponAttackAnim
ADDP4
INDIRI4
NEI4 $1440
ADDRLP4 48
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 200
SUBI4
CNSTI4 0
GTI4 $1440
line 3621
;3620:				(pm->ps->weaponTime-200) <= 0)
;3621:			{
line 3622
;3622:				PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3623
;3623:			}
line 3624
;3624:		}
ADDRGP4 $1440
JUMPV
LABELV $1439
line 3626
;3625:		else
;3626:		{
line 3627
;3627:			if ((pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == WeaponAttackAnim[pm->ps->weapon] &&
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ADDRLP4 48
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponAttackAnim
ADDP4
INDIRI4
NEI4 $1443
ADDRLP4 48
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 700
SUBI4
CNSTI4 0
GTI4 $1443
line 3629
;3628:				(pm->ps->weaponTime-700) <= 0)
;3629:			{
line 3630
;3630:				PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3631
;3631:			}
LABELV $1443
line 3632
;3632:		}
LABELV $1440
line 3633
;3633:	}
LABELV $1435
line 3636
;3634:
;3635:	// don't allow attack until all buttons are up
;3636:	if ( pm->ps->pm_flags & PMF_RESPAWNED ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 512
BANDI4
CNSTI4 0
EQI4 $1445
line 3637
;3637:		return;
ADDRGP4 $1359
JUMPV
LABELV $1445
line 3641
;3638:	}
;3639:
;3640:	// ignore if spectator
;3641:	if ( pm->ps->persistant[PERS_TEAM] == TEAM_SPECTATOR ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 292
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1447
line 3642
;3642:		return;
ADDRGP4 $1359
JUMPV
LABELV $1447
line 3646
;3643:	}
;3644:
;3645:	// check for dead player
;3646:	if ( pm->ps->stats[STAT_HEALTH] <= 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 0
GTI4 $1449
line 3647
;3647:		pm->ps->weapon = WP_NONE;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
CNSTI4 0
ASGNI4
line 3648
;3648:		return;
ADDRGP4 $1359
JUMPV
LABELV $1449
line 3652
;3649:	}
;3650:
;3651:	// check for item using
;3652:	if ( pm->cmd.buttons & BUTTON_USE_HOLDABLE ) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1451
line 3653
;3653:		if ( ! ( pm->ps->pm_flags & PMF_USE_ITEM_HELD ) ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 1024
BANDI4
CNSTI4 0
NEI4 $1452
line 3655
;3654:
;3655:			if (!pm->ps->stats[STAT_HOLDABLE_ITEM])
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1455
line 3656
;3656:			{
line 3657
;3657:				return;
ADDRGP4 $1359
JUMPV
LABELV $1455
line 3660
;3658:			}
;3659:
;3660:			if (!PM_ItemUsable(pm->ps, 0))
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 48
ADDRGP4 PM_ItemUsable
CALLI4
ASGNI4
ADDRLP4 48
INDIRI4
CNSTI4 0
NEI4 $1457
line 3661
;3661:			{
line 3662
;3662:				pm->ps->pm_flags |= PMF_USE_ITEM_HELD;
ADDRLP4 52
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 52
INDIRP4
ADDRLP4 52
INDIRP4
INDIRI4
CNSTI4 1024
BORI4
ASGNI4
line 3663
;3663:				return;
ADDRGP4 $1359
JUMPV
LABELV $1457
line 3666
;3664:			}
;3665:			else
;3666:			{
line 3667
;3667:				if (pm->ps->stats[STAT_HOLDABLE_ITEMS] & (1 << bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag))
ADDRLP4 52
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 52
INDIRP4
CNSTI4 224
ADDP4
INDIRI4
CNSTI4 1
CNSTI4 52
ADDRLP4 52
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
LSHI4
BANDI4
CNSTI4 0
EQI4 $1359
line 3668
;3668:				{
line 3669
;3669:					if (bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag != HI_BINOCULARS)
CNSTI4 52
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
CNSTI4 5
EQI4 $1460
line 3670
;3670:					{ //never use up the binoculars
line 3671
;3671:						pm->ps->stats[STAT_HOLDABLE_ITEMS] -= (1 << bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag);
ADDRLP4 56
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 60
ADDRLP4 56
INDIRP4
CNSTI4 224
ADDP4
ASGNP4
ADDRLP4 60
INDIRP4
ADDRLP4 60
INDIRP4
INDIRI4
CNSTI4 1
CNSTI4 52
ADDRLP4 56
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
LSHI4
SUBI4
ASGNI4
line 3672
;3672:					}
line 3673
;3673:				}
line 3675
;3674:				else
;3675:				{
line 3676
;3676:					return; //this should not happen...
LABELV $1460
line 3679
;3677:				}
;3678:
;3679:				pm->ps->pm_flags |= PMF_USE_ITEM_HELD;
ADDRLP4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 56
INDIRP4
ADDRLP4 56
INDIRP4
INDIRI4
CNSTI4 1024
BORI4
ASGNI4
line 3680
;3680:				PM_AddEvent( EV_USE_ITEM0 + bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag );
CNSTI4 52
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
CNSTI4 40
ADDI4
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3682
;3681:
;3682:				if (bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag != HI_BINOCULARS)
CNSTI4 52
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
INDIRI4
MULI4
ADDRGP4 bg_itemlist+40
ADDP4
INDIRI4
CNSTI4 5
EQI4 $1359
line 3683
;3683:				{
line 3684
;3684:					pm->ps->stats[STAT_HOLDABLE_ITEM] = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
CNSTI4 0
ASGNI4
line 3685
;3685:					BG_CycleInven(pm->ps, 1);
ADDRGP4 pm
INDIRP4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 BG_CycleInven
CALLV
pop
line 3686
;3686:				}
line 3687
;3687:			}
line 3688
;3688:			return;
ADDRGP4 $1359
JUMPV
line 3690
;3689:		}
;3690:	} else {
LABELV $1451
line 3691
;3691:		pm->ps->pm_flags &= ~PMF_USE_ITEM_HELD;
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRI4
CNSTI4 -1025
BANDI4
ASGNI4
line 3692
;3692:	}
LABELV $1452
line 3694
;3693:
;3694:	if (pm->ps->weapon == WP_SABER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1470
line 3695
;3695:	{ //we can't toggle zoom while using saber (for obvious reasons) so make sure it's always off
line 3696
;3696:		pm->ps->zoomMode = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 0
ASGNI4
line 3697
;3697:		pm->ps->zoomFov = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
CNSTF4 0
ASGNF4
line 3698
;3698:		pm->ps->zoomLocked = qfalse;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 0
ASGNI4
line 3699
;3699:		pm->ps->zoomLockTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1348
ADDP4
CNSTI4 0
ASGNI4
line 3700
;3700:	}
LABELV $1470
line 3702
;3701:
;3702:	if (killAfterItem)
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $1472
line 3703
;3703:	{
line 3704
;3704:		return;
ADDRGP4 $1359
JUMPV
LABELV $1472
line 3708
;3705:	}
;3706:
;3707:	// make weapon function
;3708:	if ( pm->ps->weaponTime > 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1474
line 3709
;3709:		pm->ps->weaponTime -= pml.msec;
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRI4
ADDRGP4 pml+40
INDIRI4
SUBI4
ASGNI4
line 3710
;3710:	}
LABELV $1474
line 3712
;3711:
;3712:	if (pm->ps->isJediMaster && pm->ps->emplacedIndex)
ADDRLP4 48
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 52
CNSTI4 0
ASGNI4
ADDRLP4 48
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
ADDRLP4 52
INDIRI4
EQI4 $1477
ADDRLP4 48
INDIRP4
CNSTI4 596
ADDP4
INDIRI4
ADDRLP4 52
INDIRI4
EQI4 $1477
line 3713
;3713:	{
line 3714
;3714:		pm->ps->emplacedIndex = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 596
ADDP4
CNSTI4 0
ASGNI4
line 3715
;3715:	}
LABELV $1477
line 3717
;3716:
;3717:	if (pm->ps->duelInProgress && pm->ps->emplacedIndex)
ADDRLP4 56
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 60
CNSTI4 0
ASGNI4
ADDRLP4 56
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 60
INDIRI4
EQI4 $1479
ADDRLP4 56
INDIRP4
CNSTI4 596
ADDP4
INDIRI4
ADDRLP4 60
INDIRI4
EQI4 $1479
line 3718
;3718:	{
line 3719
;3719:		pm->ps->emplacedIndex = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 596
ADDP4
CNSTI4 0
ASGNI4
line 3720
;3720:	}
LABELV $1479
line 3722
;3721:
;3722:	if (pm->ps->weapon == WP_EMPLACED_GUN && pm->ps->emplacedIndex)
ADDRLP4 64
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1481
ADDRLP4 64
INDIRP4
CNSTI4 596
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1481
line 3723
;3723:	{
line 3724
;3724:		pm->cmd.weapon = WP_EMPLACED_GUN; //No switch for you!
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
CNSTU1 14
ASGNU1
line 3725
;3725:		PM_StartTorsoAnim( BOTH_GUNSIT1 );
CNSTI4 810
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3726
;3726:	}
LABELV $1481
line 3728
;3727:
;3728:	if (pm->ps->isJediMaster || pm->ps->duelInProgress || pm->ps->trueJedi)
ADDRLP4 68
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 72
CNSTI4 0
ASGNI4
ADDRLP4 68
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
ADDRLP4 72
INDIRI4
NEI4 $1486
ADDRLP4 68
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 72
INDIRI4
NEI4 $1486
ADDRLP4 68
INDIRP4
CNSTI4 612
ADDP4
INDIRI4
ADDRLP4 72
INDIRI4
EQI4 $1483
LABELV $1486
line 3729
;3729:	{
line 3730
;3730:		pm->cmd.weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
CNSTU1 2
ASGNU1
line 3731
;3731:		pm->ps->weapon = WP_SABER;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
CNSTI4 2
ASGNI4
line 3733
;3732:
;3733:		if (pm->ps->isJediMaster || pm->ps->trueJedi)
ADDRLP4 76
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 80
CNSTI4 0
ASGNI4
ADDRLP4 76
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
ADDRLP4 80
INDIRI4
NEI4 $1489
ADDRLP4 76
INDIRP4
CNSTI4 612
ADDP4
INDIRI4
ADDRLP4 80
INDIRI4
EQI4 $1487
LABELV $1489
line 3734
;3734:		{
line 3735
;3735:			pm->ps->stats[STAT_WEAPONS] = (1 << WP_SABER);
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 232
ADDP4
CNSTI4 4
ASGNI4
line 3736
;3736:		}
LABELV $1487
line 3737
;3737:	}
LABELV $1483
line 3739
;3738:
;3739:	amount = weaponData[pm->ps->weapon].energyPerShot;
ADDRLP4 4
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+8
ADDP4
INDIRI4
ASGNI4
line 3742
;3740:
;3741:	// take an ammo away if not infinite
;3742:	if ( pm->ps->weapon != WP_NONE &&
ADDRLP4 76
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 80
ADDRLP4 76
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 84
ADDRLP4 80
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ASGNI4
ADDRLP4 88
CNSTI4 0
ASGNI4
ADDRLP4 84
INDIRI4
ADDRLP4 88
INDIRI4
EQI4 $1491
ADDRLP4 84
INDIRI4
ADDRLP4 76
INDIRP4
CNSTI4 24
ADDP4
INDIRU1
CVUI4 1
NEI4 $1491
ADDRLP4 80
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 88
INDIRI4
LEI4 $1493
ADDRLP4 80
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 3
EQI4 $1491
LABELV $1493
line 3745
;3743:		pm->ps->weapon == pm->cmd.weapon &&
;3744:		(pm->ps->weaponTime <= 0 || pm->ps->weaponstate != WEAPON_FIRING) )
;3745:	{
line 3746
;3746:		if ( pm->ps->ammo[ weaponData[pm->ps->weapon].ammoIndex ] != -1 )
ADDRLP4 92
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
CNSTI4 56
ADDRLP4 92
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 92
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1494
line 3747
;3747:		{
line 3749
;3748:			// enough energy to fire this weapon?
;3749:			if (pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] < weaponData[pm->ps->weapon].energyPerShot &&
ADDRLP4 96
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 100
CNSTI4 56
ADDRLP4 96
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 104
ADDRLP4 100
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 96
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 104
INDIRI4
ADDRLP4 100
INDIRI4
ADDRGP4 weaponData+8
ADDP4
INDIRI4
GEI4 $1496
ADDRLP4 104
INDIRI4
ADDRLP4 100
INDIRI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
GEI4 $1496
line 3751
;3750:				pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] < weaponData[pm->ps->weapon].altEnergyPerShot) 
;3751:			{ //the weapon is out of ammo essentially because it cannot fire primary or secondary, so do the switch
line 3753
;3752:			  //regardless of if the player is attacking or not
;3753:				PM_AddEventWithParm( EV_NOAMMO, WP_NUM_WEAPONS+pm->ps->weapon );
CNSTI4 22
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 16
ADDI4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3755
;3754:
;3755:				if (pm->ps->weaponTime < 500)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 500
GEI4 $1359
line 3756
;3756:				{
line 3757
;3757:					pm->ps->weaponTime += 500;
ADDRLP4 108
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 108
INDIRP4
ADDRLP4 108
INDIRP4
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 3758
;3758:				}
line 3759
;3759:				return;
ADDRGP4 $1359
JUMPV
LABELV $1496
line 3762
;3760:			}
;3761:
;3762:			if (pm->ps->weapon == WP_DET_PACK && !pm->ps->hasDetPackPlanted && pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] < 1)
ADDRLP4 108
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 112
ADDRLP4 108
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ASGNI4
ADDRLP4 112
INDIRI4
CNSTI4 13
NEI4 $1502
ADDRLP4 108
INDIRP4
CNSTI4 640
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1502
CNSTI4 56
ADDRLP4 112
INDIRI4
MULI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 108
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
CNSTI4 1
GEI4 $1502
line 3763
;3763:			{
line 3764
;3764:				PM_AddEventWithParm( EV_NOAMMO, WP_NUM_WEAPONS+pm->ps->weapon );
CNSTI4 22
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 16
ADDI4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3766
;3765:
;3766:				if (pm->ps->weaponTime < 500)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 500
GEI4 $1359
line 3767
;3767:				{
line 3768
;3768:					pm->ps->weaponTime += 500;
ADDRLP4 116
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 116
INDIRP4
ADDRLP4 116
INDIRP4
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 3769
;3769:				}
line 3770
;3770:				return;
ADDRGP4 $1359
JUMPV
LABELV $1502
line 3772
;3771:			}
;3772:		}
LABELV $1494
line 3773
;3773:	}
LABELV $1491
line 3778
;3774:
;3775:	// check for weapon change
;3776:	// can't change if weapon is firing, but can change
;3777:	// again if lowering or raising
;3778:	if ( pm->ps->weaponTime <= 0 || pm->ps->weaponstate != WEAPON_FIRING ) {
ADDRLP4 92
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 92
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1508
ADDRLP4 92
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 3
EQI4 $1506
LABELV $1508
line 3779
;3779:		if ( pm->ps->weapon != pm->cmd.weapon ) {
ADDRLP4 96
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 96
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ADDRLP4 96
INDIRP4
CNSTI4 24
ADDP4
INDIRU1
CVUI4 1
EQI4 $1509
line 3780
;3780:			PM_BeginWeaponChange( pm->cmd.weapon );
ADDRGP4 pm
INDIRP4
CNSTI4 24
ADDP4
INDIRU1
CVUI4 1
ARGI4
ADDRGP4 PM_BeginWeaponChange
CALLV
pop
line 3781
;3781:		}
LABELV $1509
line 3782
;3782:	}
LABELV $1506
line 3784
;3783:
;3784:	if ( pm->ps->weaponTime > 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1511
line 3785
;3785:		return;
ADDRGP4 $1359
JUMPV
LABELV $1511
line 3789
;3786:	}
;3787:
;3788:	// change weapon if time
;3789:	if ( pm->ps->weaponstate == WEAPON_DROPPING ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1513
line 3790
;3790:		PM_FinishWeaponChange();
ADDRGP4 PM_FinishWeaponChange
CALLV
pop
line 3791
;3791:		return;
ADDRGP4 $1359
JUMPV
LABELV $1513
line 3794
;3792:	}
;3793:
;3794:	if ( pm->ps->weaponstate == WEAPON_RAISING ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1515
line 3795
;3795:		pm->ps->weaponstate = WEAPON_READY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 3796
;3796:		if ( pm->ps->weapon == WP_SABER ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1517
line 3797
;3797:			PM_StartTorsoAnim( PM_GetSaberStance() );
ADDRLP4 96
ADDRGP4 PM_GetSaberStance
CALLI4
ASGNI4
ADDRLP4 96
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3798
;3798:		} else {
ADDRGP4 $1359
JUMPV
LABELV $1517
line 3799
;3799:			if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
ADDRLP4 96
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 96
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1519
ADDRLP4 96
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1519
line 3800
;3800:			{
line 3801
;3801:				PM_StartTorsoAnim( TORSO_WEAPONREADY4 );
CNSTI4 1102
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3802
;3802:			}
ADDRGP4 $1359
JUMPV
LABELV $1519
line 3804
;3803:			else
;3804:			{
line 3805
;3805:				if (pm->ps->weapon == WP_EMPLACED_GUN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1521
line 3806
;3806:				{
line 3807
;3807:					PM_StartTorsoAnim( BOTH_GUNSIT1 );
CNSTI4 810
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3808
;3808:				}
ADDRGP4 $1359
JUMPV
LABELV $1521
line 3810
;3809:				else
;3810:				{
line 3811
;3811:					PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3812
;3812:				}
line 3813
;3813:			}
line 3814
;3814:		}
line 3815
;3815:		return;
ADDRGP4 $1359
JUMPV
LABELV $1515
line 3818
;3816:	}
;3817:
;3818:	if (((pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) == TORSO_WEAPONREADY4 ||
ADDRLP4 96
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 96
INDIRI4
CNSTI4 1102
EQI4 $1525
ADDRLP4 96
INDIRI4
CNSTI4 121
NEI4 $1523
LABELV $1525
ADDRLP4 100
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 100
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1526
ADDRLP4 100
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
EQI4 $1523
LABELV $1526
line 3821
;3819:		(pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) == BOTH_ATTACK4) &&
;3820:		(pm->ps->weapon != WP_DISRUPTOR || pm->ps->zoomMode != 1))
;3821:	{
line 3822
;3822:		if (pm->ps->weapon == WP_EMPLACED_GUN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1527
line 3823
;3823:		{
line 3824
;3824:			PM_StartTorsoAnim( BOTH_GUNSIT1 );
CNSTI4 810
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3825
;3825:		}
ADDRGP4 $1524
JUMPV
LABELV $1527
line 3827
;3826:		else
;3827:		{
line 3828
;3828:			PM_StartTorsoAnim( WeaponReadyAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3829
;3829:		}
line 3830
;3830:	}
ADDRGP4 $1524
JUMPV
LABELV $1523
line 3831
;3831:	else if (((pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) != TORSO_WEAPONREADY4 &&
ADDRLP4 104
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 108
ADDRLP4 104
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 108
INDIRI4
CNSTI4 1102
EQI4 $1529
ADDRLP4 108
INDIRI4
CNSTI4 121
EQI4 $1529
ADDRLP4 104
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1529
ADDRLP4 104
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1529
line 3834
;3832:		(pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) != BOTH_ATTACK4) &&
;3833:		(pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1))
;3834:	{
line 3835
;3835:		PM_StartTorsoAnim( TORSO_WEAPONREADY4 );
CNSTI4 1102
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3836
;3836:	}
LABELV $1529
LABELV $1524
line 3839
;3837:
;3838:
;3839:	if (pm->ps->weapon != WP_ROCKET_LAUNCHER)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 10
EQI4 $1531
line 3840
;3840:	{
line 3841
;3841:		pm->ps->rocketLockIndex = MAX_CLIENTS;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 580
ADDP4
CNSTI4 32
ASGNI4
line 3842
;3842:		pm->ps->rocketLockTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 588
ADDP4
CNSTF4 0
ASGNF4
line 3843
;3843:		pm->ps->rocketTargetTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 592
ADDP4
CNSTF4 0
ASGNF4
line 3844
;3844:	}
LABELV $1531
line 3846
;3845:
;3846:	if ( PM_DoChargedWeapons())
ADDRLP4 112
ADDRGP4 PM_DoChargedWeapons
CALLI4
ASGNI4
ADDRLP4 112
INDIRI4
CNSTI4 0
EQI4 $1533
line 3847
;3847:	{
line 3849
;3848:		// In some cases the charged weapon code may want us to short circuit the rest of the firing code
;3849:		return;
ADDRGP4 $1359
JUMPV
LABELV $1533
line 3853
;3850:	}
;3851:
;3852:	// check for fire
;3853:	if ( ! (pm->cmd.buttons & (BUTTON_ATTACK|BUTTON_ALT_ATTACK))) 
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 129
BANDI4
CNSTI4 0
NEI4 $1535
line 3854
;3854:	{
line 3855
;3855:		pm->ps->weaponTime = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 3856
;3856:		pm->ps->weaponstate = WEAPON_READY;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 3857
;3857:		return;
ADDRGP4 $1359
JUMPV
LABELV $1535
line 3860
;3858:	}
;3859:
;3860:	if (pm->ps->weapon == WP_EMPLACED_GUN)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1537
line 3861
;3861:	{
line 3862
;3862:		addTime = weaponData[pm->ps->weapon].fireTime;
ADDRLP4 0
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+12
ADDP4
INDIRI4
ASGNI4
line 3863
;3863:		pm->ps->weaponTime += addTime;
ADDRLP4 116
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 116
INDIRP4
ADDRLP4 116
INDIRP4
INDIRI4
ADDRLP4 0
INDIRI4
ADDI4
ASGNI4
line 3864
;3864:		PM_AddEvent( EV_FIRE_WEAPON );
CNSTI4 24
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3865
;3865:		return;
ADDRGP4 $1359
JUMPV
LABELV $1537
line 3868
;3866:	}
;3867:
;3868:	if (pm->ps->weapon == WP_DISRUPTOR &&
ADDRLP4 116
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 120
ADDRLP4 116
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 120
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1540
ADDRLP4 124
CNSTI4 0
ASGNI4
ADDRLP4 116
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
ADDRLP4 124
INDIRI4
EQI4 $1540
ADDRLP4 120
INDIRP4
CNSTI4 1340
ADDP4
INDIRI4
ADDRLP4 124
INDIRI4
NEI4 $1540
line 3871
;3869:		(pm->cmd.buttons & BUTTON_ALT_ATTACK) &&
;3870:		!pm->ps->zoomLocked)
;3871:	{
line 3872
;3872:		return;
ADDRGP4 $1359
JUMPV
LABELV $1540
line 3875
;3873:	}
;3874:
;3875:	if (pm->ps->weapon == WP_DISRUPTOR &&
ADDRLP4 128
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 132
ADDRLP4 128
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 132
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1542
ADDRLP4 128
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1542
ADDRLP4 132
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1542
line 3878
;3876:		(pm->cmd.buttons & BUTTON_ALT_ATTACK) &&
;3877:		pm->ps->zoomMode == 2)
;3878:	{ //can't use disruptor secondary while zoomed binoculars
line 3879
;3879:		return;
ADDRGP4 $1359
JUMPV
LABELV $1542
line 3882
;3880:	}
;3881:
;3882:	if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
ADDRLP4 136
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 136
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1544
ADDRLP4 136
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1544
line 3883
;3883:	{
line 3884
;3884:		PM_StartTorsoAnim( BOTH_ATTACK4 );
CNSTI4 121
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3885
;3885:	}
ADDRGP4 $1545
JUMPV
LABELV $1544
line 3887
;3886:	else
;3887:	{
line 3888
;3888:		PM_StartTorsoAnim( WeaponAttackAnim[pm->ps->weapon] );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponAttackAnim
ADDP4
INDIRI4
ARGI4
ADDRGP4 PM_StartTorsoAnim
CALLV
pop
line 3889
;3889:	}
LABELV $1545
line 3891
;3890:
;3891:	if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1546
line 3892
;3892:	{
line 3893
;3893:		amount = weaponData[pm->ps->weapon].altEnergyPerShot;
ADDRLP4 4
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
ASGNI4
line 3894
;3894:	}
ADDRGP4 $1547
JUMPV
LABELV $1546
line 3896
;3895:	else
;3896:	{
line 3897
;3897:		amount = weaponData[pm->ps->weapon].energyPerShot;
ADDRLP4 4
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+8
ADDP4
INDIRI4
ASGNI4
line 3898
;3898:	}
LABELV $1547
line 3900
;3899:
;3900:	pm->ps->weaponstate = WEAPON_FIRING;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 3
ASGNI4
line 3903
;3901:
;3902:	// take an ammo away if not infinite
;3903:	if ( pm->ps->ammo[ weaponData[pm->ps->weapon].ammoIndex ] != -1 )
ADDRLP4 140
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
CNSTI4 56
ADDRLP4 140
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 140
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1550
line 3904
;3904:	{
line 3906
;3905:		// enough energy to fire this weapon?
;3906:		if ((pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] - amount) >= 0) 
ADDRLP4 144
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
CNSTI4 56
ADDRLP4 144
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 144
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 4
INDIRI4
SUBI4
CNSTI4 0
LTI4 $1552
line 3907
;3907:		{
line 3908
;3908:			pm->ps->ammo[weaponData[pm->ps->weapon].ammoIndex] -= amount;
ADDRLP4 148
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 152
CNSTI4 56
ADDRLP4 148
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 148
INDIRP4
CNSTI4 408
ADDP4
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRI4
ADDRLP4 4
INDIRI4
SUBI4
ASGNI4
line 3909
;3909:		}
ADDRGP4 $1553
JUMPV
LABELV $1552
line 3911
;3910:		else	// Not enough energy
;3911:		{
line 3913
;3912:			// Switch weapons
;3913:			if (pm->ps->weapon != WP_DET_PACK || !pm->ps->hasDetPackPlanted)
ADDRLP4 148
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 148
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 13
NEI4 $1556
ADDRLP4 148
INDIRP4
CNSTI4 640
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1359
LABELV $1556
line 3914
;3914:			{
line 3915
;3915:				PM_AddEventWithParm( EV_NOAMMO, WP_NUM_WEAPONS+pm->ps->weapon );
CNSTI4 22
ARGI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 16
ADDI4
ARGI4
ADDRGP4 PM_AddEventWithParm
CALLV
pop
line 3916
;3916:				if (pm->ps->weaponTime < 500)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 500
GEI4 $1359
line 3917
;3917:				{
line 3918
;3918:					pm->ps->weaponTime += 500;
ADDRLP4 152
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 3919
;3919:				}
line 3920
;3920:			}
line 3921
;3921:			return;
ADDRGP4 $1359
JUMPV
LABELV $1553
line 3923
;3922:		}
;3923:	}
LABELV $1550
line 3925
;3924:
;3925:	if ( pm->cmd.buttons & BUTTON_ALT_ATTACK ) 	{
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1559
line 3926
;3926:		if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode != 1)
ADDRLP4 144
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1561
ADDRLP4 144
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
EQI4 $1561
line 3927
;3927:		{
line 3928
;3928:			PM_AddEvent( EV_FIRE_WEAPON );
CNSTI4 24
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3929
;3929:			addTime = weaponData[pm->ps->weapon].fireTime;
ADDRLP4 0
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+12
ADDP4
INDIRI4
ASGNI4
line 3930
;3930:		}
ADDRGP4 $1560
JUMPV
LABELV $1561
line 3932
;3931:		else
;3932:		{
line 3933
;3933:			PM_AddEvent( EV_ALT_FIRE );
CNSTI4 25
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3934
;3934:			addTime = weaponData[pm->ps->weapon].altFireTime;
ADDRLP4 0
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+24
ADDP4
INDIRI4
ASGNI4
line 3935
;3935:		}
line 3936
;3936:	}
ADDRGP4 $1560
JUMPV
LABELV $1559
line 3937
;3937:	else {
line 3938
;3938:		PM_AddEvent( EV_FIRE_WEAPON );
CNSTI4 24
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3939
;3939:		addTime = weaponData[pm->ps->weapon].fireTime;
ADDRLP4 0
CNSTI4 56
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ADDRGP4 weaponData+12
ADDP4
INDIRI4
ASGNI4
line 3940
;3940:	}
LABELV $1560
line 3942
;3941:
;3942:	if ( pm->ps->powerups[PW_HASTE] ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 356
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1566
line 3943
;3943:		addTime /= 1.3;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CVIF4 4
CNSTF4 1067869798
DIVF4
CVFI4 4
ASGNI4
line 3944
;3944:	}
LABELV $1566
line 3946
;3945:
;3946:	if (pm->ps->fd.forcePowersActive & (1 << FP_RAGE))
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $1568
line 3947
;3947:	{
line 3948
;3948:		addTime *= 0.75;
ADDRLP4 0
CNSTF4 1061158912
ADDRLP4 0
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 3949
;3949:	}
ADDRGP4 $1569
JUMPV
LABELV $1568
line 3950
;3950:	else if (pm->ps->fd.forceRageRecoveryTime > pm->cmd.serverTime)
ADDRLP4 144
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
INDIRP4
CNSTI4 1172
ADDP4
INDIRI4
ADDRLP4 144
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
LEI4 $1570
line 3951
;3951:	{
line 3952
;3952:		addTime *= 1.5;
ADDRLP4 0
CNSTF4 1069547520
ADDRLP4 0
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 3953
;3953:	}
LABELV $1570
LABELV $1569
line 3955
;3954:
;3955:	pm->ps->weaponTime += addTime;
ADDRLP4 148
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
ASGNP4
ADDRLP4 148
INDIRP4
ADDRLP4 148
INDIRP4
INDIRI4
ADDRLP4 0
INDIRI4
ADDI4
ASGNI4
line 3956
;3956:}
LABELV $1359
endproc PM_Weapon 156 16
proc PM_Animate 16 4
line 3964
;3957:
;3958:/*
;3959:================
;3960:PM_Animate
;3961:================
;3962:*/
;3963:
;3964:static void PM_Animate( void ) {
line 3965
;3965:	if ( pm->cmd.buttons & BUTTON_GESTURE ) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 8
BANDI4
CNSTI4 0
EQI4 $1573
line 3966
;3966:		if ( pm->ps->torsoTimer < 1 && pm->ps->forceHandExtend == HANDEXTEND_NONE &&
ADDRLP4 0
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 4
ADDRLP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 8
CNSTI4 1
ASGNI4
ADDRLP4 4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
GEI4 $1575
ADDRLP4 4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1575
ADDRLP4 4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
GEI4 $1575
ADDRLP4 4
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
GEI4 $1575
ADDRLP4 4
INDIRP4
CNSTI4 524
ADDP4
INDIRI4
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1575
line 3967
;3967:			pm->ps->legsTimer < 1 && pm->ps->weaponTime < 1 && pm->ps->saberLockTime < pm->cmd.serverTime) {
line 3969
;3968:
;3969:			pm->ps->forceHandExtend = HANDEXTEND_TAUNT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1248
ADDP4
CNSTI4 10
ASGNI4
line 3972
;3970:
;3971:			//FIXME: random taunt anims?
;3972:			pm->ps->forceDodgeAnim = BOTH_ENGAGETAUNT;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1260
ADDP4
CNSTI4 904
ASGNI4
line 3974
;3973:
;3974:			pm->ps->forceHandExtendTime = pm->cmd.serverTime + 1000;
ADDRLP4 12
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 12
INDIRP4
INDIRP4
CNSTI4 1252
ADDP4
ADDRLP4 12
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1000
ADDI4
ASGNI4
line 3976
;3975:			
;3976:			pm->ps->weaponTime = 100;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 100
ASGNI4
line 3978
;3977:
;3978:			PM_AddEvent( EV_TAUNT );
CNSTI4 102
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 3979
;3979:		}
LABELV $1575
line 4015
;3980:#if 0
;3981:// Here's an interesting bit.  The bots in TA used buttons to do additional gestures.
;3982:// I ripped them out because I didn't want too many buttons given the fact that I was already adding some for JK2.
;3983:// We can always add some back in if we want though.
;3984:	} else if ( pm->cmd.buttons & BUTTON_GETFLAG ) {
;3985:		if ( pm->ps->torsoTimer == 0 ) {
;3986:			PM_StartTorsoAnim( TORSO_GETFLAG );
;3987:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;3988:		}
;3989:	} else if ( pm->cmd.buttons & BUTTON_GUARDBASE ) {
;3990:		if ( pm->ps->torsoTimer == 0 ) {
;3991:			PM_StartTorsoAnim( TORSO_GUARDBASE );
;3992:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;3993:		}
;3994:	} else if ( pm->cmd.buttons & BUTTON_PATROL ) {
;3995:		if ( pm->ps->torsoTimer == 0 ) {
;3996:			PM_StartTorsoAnim( TORSO_PATROL );
;3997:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;3998:		}
;3999:	} else if ( pm->cmd.buttons & BUTTON_FOLLOWME ) {
;4000:		if ( pm->ps->torsoTimer == 0 ) {
;4001:			PM_StartTorsoAnim( TORSO_FOLLOWME );
;4002:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;4003:		}
;4004:	} else if ( pm->cmd.buttons & BUTTON_AFFIRMATIVE ) {
;4005:		if ( pm->ps->torsoTimer == 0 ) {
;4006:			PM_StartTorsoAnim( TORSO_AFFIRMATIVE);
;4007:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;4008:		}
;4009:	} else if ( pm->cmd.buttons & BUTTON_NEGATIVE ) {
;4010:		if ( pm->ps->torsoTimer == 0 ) {
;4011:			PM_StartTorsoAnim( TORSO_NEGATIVE );
;4012:			pm->ps->torsoTimer = 600;	//TIMER_GESTURE;
;4013:		}
;4014:#endif //
;4015:	}
LABELV $1573
line 4016
;4016:}
LABELV $1572
endproc PM_Animate 16 4
proc PM_DropTimers 4 0
line 4024
;4017:
;4018:
;4019:/*
;4020:================
;4021:PM_DropTimers
;4022:================
;4023:*/
;4024:static void PM_DropTimers( void ) {
line 4026
;4025:	// drop misc timing counter
;4026:	if ( pm->ps->pm_time ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1578
line 4027
;4027:		if ( pml.msec >= pm->ps->pm_time ) {
ADDRGP4 pml+40
INDIRI4
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
INDIRI4
LTI4 $1580
line 4028
;4028:			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 4029
;4029:			pm->ps->pm_time = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 16
ADDP4
CNSTI4 0
ASGNI4
line 4030
;4030:		} else {
ADDRGP4 $1581
JUMPV
LABELV $1580
line 4031
;4031:			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 4032
;4032:		}
LABELV $1581
line 4033
;4033:	}
LABELV $1578
line 4036
;4034:
;4035:	// drop animation counter
;4036:	if ( pm->ps->legsTimer > 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1584
line 4037
;4037:		pm->ps->legsTimer -= pml.msec;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
ASGNP4
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
INDIRI4
ADDRGP4 pml+40
INDIRI4
SUBI4
ASGNI4
line 4038
;4038:		if ( pm->ps->legsTimer < 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 0
GEI4 $1587
line 4039
;4039:			pm->ps->legsTimer = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
CNSTI4 0
ASGNI4
line 4040
;4040:		}
LABELV $1587
line 4041
;4041:	}
LABELV $1584
line 4043
;4042:
;4043:	if ( pm->ps->torsoTimer > 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
CNSTI4 0
LEI4 $1589
line 4044
;4044:		pm->ps->torsoTimer -= pml.msec;
ADDRLP4 0
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
ASGNP4
ADDRLP4 0
INDIRP4
ADDRLP4 0
INDIRP4
INDIRI4
ADDRGP4 pml+40
INDIRI4
SUBI4
ASGNI4
line 4045
;4045:		if ( pm->ps->torsoTimer < 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
CNSTI4 0
GEI4 $1592
line 4046
;4046:			pm->ps->torsoTimer = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 96
ADDP4
CNSTI4 0
ASGNI4
line 4047
;4047:		}
LABELV $1592
line 4048
;4048:	}
LABELV $1589
line 4049
;4049:}
LABELV $1577
endproc PM_DropTimers 4 0
export PM_UpdateViewAngles
proc PM_UpdateViewAngles 20 0
line 4059
;4050:
;4051:/*
;4052:================
;4053:PM_UpdateViewAngles
;4054:
;4055:This can be used as another entry point when only the viewangles
;4056:are being updated isntead of a full move
;4057:================
;4058:*/
;4059:void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) {
line 4063
;4060:	short		temp;
;4061:	int		i;
;4062:
;4063:	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 6
EQI4 $1597
ADDRLP4 8
INDIRI4
CNSTI4 7
NEI4 $1595
LABELV $1597
line 4064
;4064:		return;		// no view changes at all
ADDRGP4 $1594
JUMPV
LABELV $1595
line 4067
;4065:	}
;4066:
;4067:	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 3
EQI4 $1598
ADDRLP4 12
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 0
GTI4 $1598
line 4068
;4068:		return;		// no view changes at all
ADDRGP4 $1594
JUMPV
LABELV $1598
line 4076
;4069:	}
;4070:
;4071:	// adnan
;4072:   // dont clamp angles...
;4073:
;4074:   
;4075:   // circularly clamp the angles with deltas
;4076:	for (i=0 ; i<3 ; i++) {
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $1600
line 4077
;4077:		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 68
ADDP4
ADDP4
INDIRI4
ADDI4
CVII2 4
ASGNI2
line 4094
;4078:		/*
;4079:      if ( i == PITCH ) {
;4080:			// don't let the player look up or down more than 90 degrees
;4081:			if ( temp > 16000 ) {
;4082:				ps->delta_angles[i] = 16000 - cmd->angles[i];
;4083:				temp = 16000;
;4084:			} else if ( temp < -16000 ) {
;4085:				ps->delta_angles[i] = -16000 - cmd->angles[i];
;4086:				temp = -16000;
;4087:			}
;4088:		}
;4089:      */
;4090:      // adnan
;4091:      // HELLO
;4092:      //ps->delta_angles[i] = 16000 - cmd->angles[i];
;4093:
;4094:		ps->viewangles[i] = SHORT2ANGLE(temp);
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRFP4 0
INDIRP4
CNSTI4 156
ADDP4
ADDP4
CNSTF4 1001652224
ADDRLP4 4
INDIRI2
CVII4 2
CVIF4 4
MULF4
ASGNF4
line 4095
;4095:	}
LABELV $1601
line 4076
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $1600
line 4098
;4096:   
;4097:
;4098:}
LABELV $1594
endproc PM_UpdateViewAngles 20 0
data
align 4
LABELV eye
byte 4 1065353216
byte 4 0
byte 4 0
byte 4 0
byte 4 1065353216
byte 4 0
byte 4 0
byte 4 0
byte 4 1065353216
export PM_QuaternionViewAngles
code
proc PM_QuaternionViewAngles 1352 12
line 4104
;4099:
;4100:static float eye[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
;4101:static quat_t prevq[MAX_CLIENTS];
;4102:static vec3_t prevangles[MAX_CLIENTS];
;4103:
;4104:void PM_QuaternionViewAngles( const usercmd_t *cmd, playerState_t *ps) {
line 4116
;4105:   int i, j;
;4106:   
;4107:   float pitch, yaw, roll;
;4108:
;4109:   vec3_t vec;
;4110:
;4111:   quat_t q, qprev, qr, qp, qy, qtemp;
;4112:   float R[3][3];
;4113:
;4114:   char configstring[MAX_INFO_STRING];
;4115:
;4116:   if( (prevq[ps->clientNum].x == 0) 
ADDRLP4 1188
ADDRFP4 4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
CNSTI4 4
LSHI4
ASGNI4
ADDRLP4 1192
CNSTF4 0
ASGNF4
ADDRLP4 1188
INDIRI4
ADDRGP4 prevq
ADDP4
INDIRF4
ADDRLP4 1192
INDIRF4
NEF4 $1605
ADDRLP4 1188
INDIRI4
ADDRGP4 prevq+4
ADDP4
INDIRF4
ADDRLP4 1192
INDIRF4
NEF4 $1605
ADDRLP4 1188
INDIRI4
ADDRGP4 prevq+8
ADDP4
INDIRF4
ADDRLP4 1192
INDIRF4
NEF4 $1605
ADDRLP4 1188
INDIRI4
ADDRGP4 prevq+12
ADDP4
INDIRF4
ADDRLP4 1192
INDIRF4
NEF4 $1605
line 4120
;4117:      && (prevq[ps->clientNum].y == 0)
;4118:      && (prevq[ps->clientNum].z == 0)
;4119:      && (prevq[ps->clientNum].w == 0))
;4120:   {
line 4121
;4121:      QuaternionIdentity(&(prevq[ps->clientNum]));
ADDRFP4 4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
CNSTI4 4
LSHI4
ADDRGP4 prevq
ADDP4
ARGP4
ADDRGP4 QuaternionIdentity
CALLI4
pop
line 4122
;4122:   }
LABELV $1605
line 4138
;4123:
;4124:
;4125:   //int zeros;
;4126:   //int rotatedYet = 1;
;4127:
;4128:   // get previous quaternion
;4129:   /*
;4130:   qprev.w = ps->tieFloats[Q_W];
;4131:   qprev.x = ps->tieFloats[Q_X];
;4132:   qprev.y = ps->tieFloats[Q_Y];
;4133:   qprev.z = ps->tieFloats[Q_Z];
;4134:   */
;4135:   //QuaternionFromTieFloats(ps->tieFloats, &qprev);
;4136:   //trap_GetConfigstring(ps->clientNum + CS_QUATERNIONS, configstring, MAX_INFO_STRING);
;4137:   //QuaternionFromString(configstring, &qprev);
;4138:   QuaternionCopy(prevq[ps->clientNum], &qprev);
ADDRLP4 1196
ADDRFP4 4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
CNSTI4 4
LSHI4
ADDRGP4 prevq
ADDP4
INDIRB
ASGNB 16
ADDRLP4 1196
ARGP4
ADDRLP4 104
ARGP4
ADDRGP4 QuaternionCopy
CALLV
pop
line 4143
;4139:   //Com_Printf("%f, %f, %f, %f", qprev.x, qprev.y, qprev.z, qprev.w);
;4140:   
;4141:   // get delta angles...
;4142:   //AnglesFromTieFloats(ps->tieFloats, &vec);
;4143:   VectorCopy(prevangles[ps->clientNum], vec);
ADDRLP4 0
CNSTI4 12
ADDRFP4 4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
MULI4
ADDRGP4 prevangles
ADDP4
INDIRB
ASGNB 12
line 4144
;4144:   pitch = ps->viewangles[PITCH] - vec[PITCH];
ADDRLP4 28
ADDRFP4 4
INDIRP4
CNSTI4 156
ADDP4
INDIRF4
ADDRLP4 0
INDIRF4
SUBF4
ASGNF4
line 4145
;4145:   yaw = ps->viewangles[YAW] - vec[YAW];
ADDRLP4 32
ADDRFP4 4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ADDRLP4 0+4
INDIRF4
SUBF4
ASGNF4
line 4146
;4146:   roll = ps->viewangles[ROLL] - vec[ROLL];
ADDRLP4 36
ADDRFP4 4
INDIRP4
CNSTI4 164
ADDP4
INDIRF4
ADDRLP4 0+8
INDIRF4
SUBF4
ASGNF4
line 4149
;4147:
;4148:   // convert angles from degrees to radians
;4149:   pitch = DEG2RAD(pitch);
ADDRLP4 28
CNSTF4 1078530011
ADDRLP4 28
INDIRF4
MULF4
CNSTF4 1127481344
DIVF4
ASGNF4
line 4150
;4150:   yaw = DEG2RAD(yaw);
ADDRLP4 32
CNSTF4 1078530011
ADDRLP4 32
INDIRF4
MULF4
CNSTF4 1127481344
DIVF4
ASGNF4
line 4151
;4151:   roll = DEG2RAD(roll);
ADDRLP4 36
CNSTF4 1078530011
ADDRLP4 36
INDIRF4
MULF4
CNSTF4 1127481344
DIVF4
ASGNF4
line 4154
;4152:
;4153:   // generate roll quaternion
;4154:   VectorSet(vec, 1, 0, 0);
ADDRLP4 0
CNSTF4 1065353216
ASGNF4
ADDRLP4 0+4
CNSTF4 0
ASGNF4
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 4155
;4155:   Quaternion(vec, roll, &qr);
ADDRLP4 0
ARGP4
ADDRLP4 36
INDIRF4
ARGF4
ADDRLP4 56
ARGP4
ADDRGP4 Quaternion
CALLI4
pop
line 4156
;4156:   QuaternionNormalize(&qr);
ADDRLP4 56
ARGP4
ADDRGP4 QuaternionNormalize
CALLF4
pop
line 4159
;4157:
;4158:   // generate pitch quaternion
;4159:   VectorSet(vec, 0, 1, 0);
ADDRLP4 0
CNSTF4 0
ASGNF4
ADDRLP4 0+4
CNSTF4 1065353216
ASGNF4
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 4160
;4160:   Quaternion(vec, pitch, &qp);
ADDRLP4 0
ARGP4
ADDRLP4 28
INDIRF4
ARGF4
ADDRLP4 72
ARGP4
ADDRGP4 Quaternion
CALLI4
pop
line 4161
;4161:   QuaternionNormalize(&qp);
ADDRLP4 72
ARGP4
ADDRGP4 QuaternionNormalize
CALLF4
pop
line 4164
;4162:
;4163:   // generate yaw quaternion
;4164:   VectorSet(vec, 0, 0, 1);
ADDRLP4 1212
CNSTF4 0
ASGNF4
ADDRLP4 0
ADDRLP4 1212
INDIRF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 1212
INDIRF4
ASGNF4
ADDRLP4 0+8
CNSTF4 1065353216
ASGNF4
line 4165
;4165:   Quaternion(vec, yaw, &qy);
ADDRLP4 0
ARGP4
ADDRLP4 32
INDIRF4
ARGF4
ADDRLP4 88
ARGP4
ADDRGP4 Quaternion
CALLI4
pop
line 4166
;4166:   QuaternionNormalize(&qy);
ADDRLP4 88
ARGP4
ADDRGP4 QuaternionNormalize
CALLF4
pop
line 4169
;4167:
;4168:   // concatenate into general rotation quaternion
;4169:   QuaternionMultiply(qr, qp, &qtemp);
ADDRLP4 1216
ADDRLP4 56
INDIRB
ASGNB 16
ADDRLP4 1216
ARGP4
ADDRLP4 1232
ADDRLP4 72
INDIRB
ASGNB 16
ADDRLP4 1232
ARGP4
ADDRLP4 40
ARGP4
ADDRGP4 QuaternionMultiply
CALLF4
pop
line 4170
;4170:   QuaternionMultiply(qtemp, qy, &q);
ADDRLP4 1248
ADDRLP4 40
INDIRB
ASGNB 16
ADDRLP4 1248
ARGP4
ADDRLP4 1264
ADDRLP4 88
INDIRB
ASGNB 16
ADDRLP4 1264
ARGP4
ADDRLP4 12
ARGP4
ADDRGP4 QuaternionMultiply
CALLF4
pop
line 4172
;4171:   //Com_Printf("%f, %f, %f, %f", q.x, q.y, q.z, q.w);
;4172:   QuaternionCopy(q, &qtemp);
ADDRLP4 1280
ADDRLP4 12
INDIRB
ASGNB 16
ADDRLP4 1280
ARGP4
ADDRLP4 40
ARGP4
ADDRGP4 QuaternionCopy
CALLV
pop
line 4173
;4173:   QuaternionMultiply(qtemp, qprev, &q);
ADDRLP4 1296
ADDRLP4 40
INDIRB
ASGNB 16
ADDRLP4 1296
ARGP4
ADDRLP4 1312
ADDRLP4 104
INDIRB
ASGNB 16
ADDRLP4 1312
ARGP4
ADDRLP4 12
ARGP4
ADDRGP4 QuaternionMultiply
CALLF4
pop
line 4177
;4174:   //Com_Printf("%f, %f, %f, %f", q.x, q.y, q.z, q.w);
;4175:
;4176:   // renormalize the orientation to prevent shearing
;4177:   QuaternionNormalize(&q);
ADDRLP4 12
ARGP4
ADDRGP4 QuaternionNormalize
CALLF4
pop
line 4180
;4178:
;4179:   
;4180:   AnglesToTieFloats(ps->tieFloats, &(ps->viewangles));
ADDRLP4 1328
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1328
INDIRP4
CNSTI4 656
ADDP4
ARGP4
ADDRLP4 1328
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRGP4 AnglesToTieFloats
CALLV
pop
line 4181
;4181:   VectorCopy(ps->viewangles, prevangles[ps->clientNum]);
ADDRLP4 1332
ADDRFP4 4
INDIRP4
ASGNP4
CNSTI4 12
ADDRLP4 1332
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
MULI4
ADDRGP4 prevangles
ADDP4
ADDRLP4 1332
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 4183
;4182:
;4183:   QuaternionToTieFloats(ps->tieFloats, &q);
ADDRFP4 4
INDIRP4
CNSTI4 656
ADDP4
ARGP4
ADDRLP4 12
ARGP4
ADDRGP4 QuaternionToTieFloats
CALLV
pop
line 4184
;4184:   QuaternionCopy(q, &(prevq[ps->clientNum]));
ADDRLP4 1336
ADDRLP4 12
INDIRB
ASGNB 16
ADDRLP4 1336
ARGP4
ADDRFP4 4
INDIRP4
CNSTI4 144
ADDP4
INDIRI4
CNSTI4 4
LSHI4
ADDRGP4 prevq
ADDP4
ARGP4
ADDRGP4 QuaternionCopy
CALLV
pop
line 4186
;4185://   Com_Printf("%f, %f, %f, %f", q.x, q.y, q.z, q.w);
;4186:}
LABELV $1604
endproc PM_QuaternionViewAngles 1352 12
export PM_AdjustAttackStates
proc PM_AdjustAttackStates 56 4
line 4191
;4187:
;4188://-------------------------------------------
;4189:void PM_AdjustAttackStates( pmove_t *pm )
;4190://-------------------------------------------
;4191:{
line 4195
;4192:	int amount;
;4193:
;4194:	// get ammo usage
;4195:	if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1619
line 4196
;4196:	{
line 4197
;4197:		amount = pm->ps->ammo[weaponData[ pm->ps->weapon ].ammoIndex] - weaponData[pm->ps->weapon].altEnergyPerShot;
ADDRLP4 4
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 8
CNSTI4 56
ADDRLP4 4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 0
ADDRLP4 8
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 4
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
SUBI4
ASGNI4
line 4198
;4198:	}
ADDRGP4 $1620
JUMPV
LABELV $1619
line 4200
;4199:	else
;4200:	{
line 4201
;4201:		amount = pm->ps->ammo[weaponData[ pm->ps->weapon ].ammoIndex] - weaponData[pm->ps->weapon].energyPerShot;
ADDRLP4 4
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 8
CNSTI4 56
ADDRLP4 4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 0
ADDRLP4 8
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 4
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
ADDRGP4 weaponData+8
ADDP4
INDIRI4
SUBI4
ASGNI4
line 4202
;4202:	}
LABELV $1620
line 4205
;4203:
;4204:	// disruptor alt-fire should toggle the zoom mode, but only bother doing this for the player?
;4205:	if ( pm->ps->weapon == WP_DISRUPTOR && pm->ps->weaponstate == WEAPON_READY )
ADDRLP4 4
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1623
ADDRLP4 4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1623
line 4206
;4206:	{
line 4207
;4207:		if ( !(pm->ps->eFlags & EF_ALT_FIRING) && (pm->cmd.buttons & BUTTON_ALT_ATTACK) /*&&
ADDRLP4 8
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRLP4 8
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
INDIRI4
CNSTI4 512
BANDI4
ADDRLP4 12
INDIRI4
NEI4 $1625
ADDRLP4 8
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
ADDRLP4 12
INDIRI4
EQI4 $1625
line 4209
;4208:			pm->cmd.upmove <= 0 && !pm->cmd.forwardmove && !pm->cmd.rightmove*/)
;4209:		{
line 4211
;4210:			// We just pressed the alt-fire key
;4211:			if ( !pm->ps->zoomMode )
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1627
line 4212
;4212:			{
line 4214
;4213:				// not already zooming, so do it now
;4214:				pm->ps->zoomMode = 1;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 1
ASGNI4
line 4215
;4215:				pm->ps->zoomLocked = qfalse;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 0
ASGNI4
line 4216
;4216:				pm->ps->zoomFov = 80.0f;//cg_fov.value;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
CNSTF4 1117782016
ASGNF4
line 4217
;4217:				pm->ps->zoomLockTime = pm->cmd.serverTime + 50;
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
INDIRP4
CNSTI4 1348
ADDP4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 50
ADDI4
ASGNI4
line 4218
;4218:				PM_AddEvent(EV_DISRUPTOR_ZOOMSOUND);
CNSTI4 35
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 4219
;4219:			}
ADDRGP4 $1626
JUMPV
LABELV $1627
line 4220
;4220:			else if (pm->ps->zoomMode == 1 && pm->ps->zoomLockTime < pm->cmd.serverTime)
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 20
ADDRLP4 16
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1626
ADDRLP4 20
INDIRP4
CNSTI4 1348
ADDP4
INDIRI4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1626
line 4221
;4221:			{ //check for == 1 so we can't turn binoculars off with disruptor alt fire
line 4223
;4222:				// already zooming, so must be wanting to turn it off
;4223:				pm->ps->zoomMode = 0;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 0
ASGNI4
line 4224
;4224:				pm->ps->zoomTime = pm->ps->commandTime;
ADDRLP4 24
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTI4 1336
ADDP4
ADDRLP4 24
INDIRP4
INDIRI4
ASGNI4
line 4225
;4225:				pm->ps->zoomLocked = qfalse;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 0
ASGNI4
line 4226
;4226:				PM_AddEvent(EV_DISRUPTOR_ZOOMSOUND);
CNSTI4 35
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 4227
;4227:			}
line 4228
;4228:		}
ADDRGP4 $1626
JUMPV
LABELV $1625
line 4229
;4229:		else if ( !(pm->cmd.buttons & BUTTON_ALT_ATTACK ) && pm->ps->zoomLockTime < pm->cmd.serverTime)
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
NEI4 $1631
ADDRLP4 16
INDIRP4
INDIRP4
CNSTI4 1348
ADDP4
INDIRI4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1631
line 4230
;4230:		{
line 4232
;4231:			// Not pressing zoom any more
;4232:			if ( pm->ps->zoomMode )
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1633
line 4233
;4233:			{
line 4234
;4234:				if (pm->ps->zoomMode == 1 && !pm->ps->zoomLocked)
ADDRLP4 20
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1635
ADDRLP4 20
INDIRP4
CNSTI4 1340
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1635
line 4235
;4235:				{ //approximate what level the client should be zoomed at based on how long zoom was held
line 4236
;4236:					pm->ps->zoomFov = ((pm->cmd.serverTime+50) - pm->ps->zoomLockTime) * 0.035f;
ADDRLP4 24
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 28
ADDRLP4 24
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CNSTI4 1344
ADDP4
CNSTF4 1024416809
ADDRLP4 24
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 50
ADDI4
ADDRLP4 28
INDIRP4
CNSTI4 1348
ADDP4
INDIRI4
SUBI4
CVIF4 4
MULF4
ASGNF4
line 4237
;4237:					if (pm->ps->zoomFov > 50)
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
INDIRF4
CNSTF4 1112014848
LEF4 $1637
line 4238
;4238:					{
line 4239
;4239:						pm->ps->zoomFov = 50;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
CNSTF4 1112014848
ASGNF4
line 4240
;4240:					}
LABELV $1637
line 4241
;4241:					if (pm->ps->zoomFov < 1)
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
INDIRF4
CNSTF4 1065353216
GEF4 $1639
line 4242
;4242:					{
line 4243
;4243:						pm->ps->zoomFov = 1;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1344
ADDP4
CNSTF4 1065353216
ASGNF4
line 4244
;4244:					}
LABELV $1639
line 4245
;4245:				}
LABELV $1635
line 4247
;4246:				// were zooming in, so now lock the zoom
;4247:				pm->ps->zoomLocked = qtrue;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 1
ASGNI4
line 4248
;4248:			}
LABELV $1633
line 4249
;4249:		}
LABELV $1631
LABELV $1626
line 4260
;4250:		//This seemed like a good idea, but apparently it confuses people. So disabled for now.
;4251:		/*
;4252:		else if (!(pm->ps->eFlags & EF_ALT_FIRING) && (pm->cmd.buttons & BUTTON_ALT_ATTACK) &&
;4253:			(pm->cmd.upmove > 0 || pm->cmd.forwardmove || pm->cmd.rightmove))
;4254:		{ //if you try to zoom while moving, just convert it into a primary attack
;4255:			pm->cmd.buttons &= ~BUTTON_ALT_ATTACK;
;4256:			pm->cmd.buttons |= BUTTON_ATTACK;
;4257:		}
;4258:		*/
;4259:
;4260:		if (pm->cmd.upmove > 0 || pm->cmd.forwardmove || pm->cmd.rightmove)
ADDRLP4 20
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 24
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
ADDRLP4 24
INDIRI4
GTI4 $1644
ADDRLP4 20
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 24
INDIRI4
NEI4 $1644
ADDRLP4 20
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 24
INDIRI4
EQI4 $1641
LABELV $1644
line 4261
;4261:		{
line 4262
;4262:			if (pm->ps->zoomMode == 1 && pm->ps->zoomLockTime < pm->cmd.serverTime)
ADDRLP4 28
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 32
ADDRLP4 28
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 32
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1645
ADDRLP4 32
INDIRP4
CNSTI4 1348
ADDP4
INDIRI4
ADDRLP4 28
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1645
line 4263
;4263:			{ //check for == 1 so we can't turn binoculars off with disruptor alt fire
line 4264
;4264:				pm->ps->zoomMode = 0;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 0
ASGNI4
line 4265
;4265:				pm->ps->zoomTime = pm->ps->commandTime;
ADDRLP4 36
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTI4 1336
ADDP4
ADDRLP4 36
INDIRP4
INDIRI4
ASGNI4
line 4266
;4266:				pm->ps->zoomLocked = qfalse;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 0
ASGNI4
line 4267
;4267:				PM_AddEvent(EV_DISRUPTOR_ZOOMSOUND);
CNSTI4 35
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 4268
;4268:			}
LABELV $1645
line 4269
;4269:		}
LABELV $1641
line 4271
;4270:
;4271:		if ( pm->cmd.buttons & BUTTON_ATTACK )
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1647
line 4272
;4272:		{
line 4275
;4273:			// If we are zoomed, we should switch the ammo usage to the alt-fire, otherwise, we'll
;4274:			//	just use whatever ammo was selected from above
;4275:			if ( pm->ps->zoomMode )
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1624
line 4276
;4276:			{
line 4277
;4277:				amount = pm->ps->ammo[weaponData[ pm->ps->weapon ].ammoIndex] - 
ADDRLP4 28
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 32
CNSTI4 56
ADDRLP4 28
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 0
ADDRLP4 32
INDIRI4
ADDRGP4 weaponData
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 28
INDIRP4
CNSTI4 408
ADDP4
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
ADDRGP4 weaponData+20
ADDP4
INDIRI4
SUBI4
ASGNI4
line 4279
;4278:							weaponData[pm->ps->weapon].altEnergyPerShot;
;4279:			}
line 4280
;4280:		}
ADDRGP4 $1624
JUMPV
LABELV $1647
line 4282
;4281:		else
;4282:		{
line 4284
;4283:			// alt-fire button pressing doesn't use any ammo
;4284:			amount = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 4285
;4285:		}
line 4286
;4286:	}
ADDRGP4 $1624
JUMPV
LABELV $1623
line 4287
;4287:	else if (pm->ps->weapon == WP_DISRUPTOR) //still perform certain checks, even if the weapon is not ready
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1652
line 4288
;4288:	{
line 4289
;4289:		if (pm->cmd.upmove > 0 || pm->cmd.forwardmove || pm->cmd.rightmove)
ADDRLP4 8
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRLP4 8
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
ADDRLP4 12
INDIRI4
GTI4 $1657
ADDRLP4 8
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ADDRLP4 12
INDIRI4
NEI4 $1657
ADDRLP4 8
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 12
INDIRI4
EQI4 $1654
LABELV $1657
line 4290
;4290:		{
line 4291
;4291:			if (pm->ps->zoomMode == 1 && pm->ps->zoomLockTime < pm->cmd.serverTime)
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 20
ADDRLP4 16
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1658
ADDRLP4 20
INDIRP4
CNSTI4 1348
ADDP4
INDIRI4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
GEI4 $1658
line 4292
;4292:			{ //check for == 1 so we can't turn binoculars off with disruptor alt fire
line 4293
;4293:				pm->ps->zoomMode = 0;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1332
ADDP4
CNSTI4 0
ASGNI4
line 4294
;4294:				pm->ps->zoomTime = pm->ps->commandTime;
ADDRLP4 24
ADDRFP4 0
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTI4 1336
ADDP4
ADDRLP4 24
INDIRP4
INDIRI4
ASGNI4
line 4295
;4295:				pm->ps->zoomLocked = qfalse;
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1340
ADDP4
CNSTI4 0
ASGNI4
line 4296
;4296:				PM_AddEvent(EV_DISRUPTOR_ZOOMSOUND);
CNSTI4 35
ARGI4
ADDRGP4 PM_AddEvent
CALLV
pop
line 4297
;4297:			}
LABELV $1658
line 4298
;4298:		}
LABELV $1654
line 4299
;4299:	}
LABELV $1652
LABELV $1624
line 4302
;4300:
;4301:	// set the firing flag for continuous beam weapons, saber will fire even if out of ammo
;4302:	if ( !(pm->ps->pm_flags & PMF_RESPAWNED) && 
ADDRLP4 8
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 12
ADDRLP4 8
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 16
CNSTI4 0
ASGNI4
ADDRLP4 12
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 512
BANDI4
ADDRLP4 16
INDIRI4
NEI4 $1660
ADDRLP4 12
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 6
EQI4 $1660
ADDRLP4 8
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 129
BANDI4
ADDRLP4 16
INDIRI4
EQI4 $1660
ADDRLP4 0
INDIRI4
ADDRLP4 16
INDIRI4
GEI4 $1662
ADDRLP4 12
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1660
LABELV $1662
line 4306
;4303:			pm->ps->pm_type != PM_INTERMISSION && 
;4304:			( pm->cmd.buttons & (BUTTON_ATTACK|BUTTON_ALT_ATTACK)) && 
;4305:			( amount >= 0 || pm->ps->weapon == WP_SABER ))
;4306:	{
line 4307
;4307:		if ( pm->cmd.buttons & BUTTON_ALT_ATTACK )
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
EQI4 $1663
line 4308
;4308:		{
line 4309
;4309:			pm->ps->eFlags |= EF_ALT_FIRING;
ADDRLP4 20
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 512
BORI4
ASGNI4
line 4310
;4310:		}
ADDRGP4 $1664
JUMPV
LABELV $1663
line 4312
;4311:		else
;4312:		{
line 4313
;4313:			pm->ps->eFlags &= ~EF_ALT_FIRING;
ADDRLP4 20
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 -513
BANDI4
ASGNI4
line 4314
;4314:		}
LABELV $1664
line 4317
;4315:
;4316:		// This flag should always get set, even when alt-firing
;4317:		pm->ps->eFlags |= EF_FIRING;
ADDRLP4 20
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 256
BORI4
ASGNI4
line 4318
;4318:	} 
ADDRGP4 $1661
JUMPV
LABELV $1660
line 4320
;4319:	else 
;4320:	{
line 4322
;4321:		// Clear 'em out
;4322:		pm->ps->eFlags &= ~(EF_FIRING|EF_ALT_FIRING);
ADDRLP4 20
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 20
INDIRP4
ADDRLP4 20
INDIRP4
INDIRI4
CNSTI4 -769
BANDI4
ASGNI4
line 4323
;4323:	}
LABELV $1661
line 4326
;4324:
;4325:	// disruptor should convert a main fire to an alt-fire if the gun is currently zoomed
;4326:	if ( pm->ps->weapon == WP_DISRUPTOR)
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1665
line 4327
;4327:	{
line 4328
;4328:		if ( pm->cmd.buttons & BUTTON_ATTACK && pm->ps->zoomMode == 1 && pm->ps->zoomLocked)
ADDRLP4 20
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 24
CNSTI4 1
ASGNI4
ADDRLP4 28
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
ADDRLP4 24
INDIRI4
BANDI4
ADDRLP4 28
INDIRI4
EQI4 $1667
ADDRLP4 32
ADDRLP4 20
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 32
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
ADDRLP4 24
INDIRI4
NEI4 $1667
ADDRLP4 32
INDIRP4
CNSTI4 1340
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
EQI4 $1667
line 4329
;4329:		{
line 4331
;4330:			// converting the main fire to an alt-fire
;4331:			pm->cmd.buttons |= BUTTON_ALT_ATTACK;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
ADDRLP4 36
INDIRP4
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 4332
;4332:			pm->ps->eFlags |= EF_ALT_FIRING;
ADDRLP4 40
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 40
INDIRP4
ADDRLP4 40
INDIRP4
INDIRI4
CNSTI4 512
BORI4
ASGNI4
line 4333
;4333:		}
ADDRGP4 $1668
JUMPV
LABELV $1667
line 4334
;4334:		else if ( pm->cmd.buttons & BUTTON_ALT_ATTACK && pm->ps->zoomMode == 1 && pm->ps->zoomLocked)
ADDRLP4 36
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 40
CNSTI4 0
ASGNI4
ADDRLP4 36
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 128
BANDI4
ADDRLP4 40
INDIRI4
EQI4 $1669
ADDRLP4 44
ADDRLP4 36
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
CNSTI4 1332
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1669
ADDRLP4 44
INDIRP4
CNSTI4 1340
ADDP4
INDIRI4
ADDRLP4 40
INDIRI4
EQI4 $1669
line 4335
;4335:		{
line 4336
;4336:			pm->cmd.buttons &= ~BUTTON_ALT_ATTACK;
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRI4
CNSTI4 -129
BANDI4
ASGNI4
line 4337
;4337:			pm->ps->eFlags &= ~EF_ALT_FIRING;
ADDRLP4 52
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 52
INDIRP4
ADDRLP4 52
INDIRP4
INDIRI4
CNSTI4 -513
BANDI4
ASGNI4
line 4338
;4338:		}
LABELV $1669
LABELV $1668
line 4339
;4339:	}
LABELV $1665
line 4340
;4340:}
LABELV $1618
endproc PM_AdjustAttackStates 56 4
export BG_CmdForRoll
proc BG_CmdForRoll 8 0
line 4343
;4341:
;4342:void BG_CmdForRoll( int anim, usercmd_t *pCmd )
;4343:{
line 4344
;4344:	switch ( (anim&~ANIM_TOGGLEBIT) )
ADDRLP4 0
ADDRFP4 0
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 885
LTI4 $1672
ADDRLP4 0
INDIRI4
CNSTI4 888
GTI4 $1672
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1679-3540
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1679
address $1675
address $1676
address $1678
address $1677
code
line 4345
;4345:	{
LABELV $1675
line 4347
;4346:	case BOTH_ROLL_F:
;4347:		pCmd->forwardmove = 127;
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
CNSTI1 127
ASGNI1
line 4348
;4348:		pCmd->rightmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 0
ASGNI1
line 4349
;4349:		break;
ADDRGP4 $1673
JUMPV
LABELV $1676
line 4351
;4350:	case BOTH_ROLL_B:
;4351:		pCmd->forwardmove = -127;
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
CNSTI1 -127
ASGNI1
line 4352
;4352:		pCmd->rightmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 0
ASGNI1
line 4353
;4353:		break;
ADDRGP4 $1673
JUMPV
LABELV $1677
line 4355
;4354:	case BOTH_ROLL_R:
;4355:		pCmd->forwardmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
CNSTI1 0
ASGNI1
line 4356
;4356:		pCmd->rightmove = 127;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 127
ASGNI1
line 4357
;4357:		break;
ADDRGP4 $1673
JUMPV
LABELV $1678
line 4359
;4358:	case BOTH_ROLL_L:
;4359:		pCmd->forwardmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
CNSTI1 0
ASGNI1
line 4360
;4360:		pCmd->rightmove = -127;
ADDRFP4 4
INDIRP4
CNSTI4 25
ADDP4
CNSTI1 -127
ASGNI1
line 4361
;4361:		break;
LABELV $1672
LABELV $1673
line 4363
;4362:	}
;4363:	pCmd->upmove = 0;
ADDRFP4 4
INDIRP4
CNSTI4 26
ADDP4
CNSTI1 0
ASGNI1
line 4364
;4364:}
LABELV $1671
endproc BG_CmdForRoll 8 0
export BG_AdjustClientSpeed
proc BG_AdjustClientSpeed 76 8
line 4369
;4365:
;4366:qboolean PM_SaberInTransition( int move );
;4367:
;4368:void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime)
;4369:{
line 4373
;4370:	//For prediction, always reset speed back to the last known server base speed
;4371:	//If we didn't do this, under lag we'd eventually dwindle speed down to 0 even though
;4372:	//that would not be the correct predicted value.
;4373:	ps->speed = ps->basespeed;
ADDRLP4 0
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 0
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 0
INDIRP4
CNSTI4 64
ADDP4
INDIRI4
ASGNI4
line 4375
;4374:
;4375:	if (ps->forceHandExtend == HANDEXTEND_DODGE)
ADDRFP4 0
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 7
NEI4 $1682
line 4376
;4376:	{
line 4377
;4377:		ps->speed = 0;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTI4 0
ASGNI4
line 4378
;4378:	}
LABELV $1682
line 4380
;4379:
;4380:	if (ps->forceHandExtend == HANDEXTEND_KNOCKDOWN)
ADDRFP4 0
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 8
NEI4 $1684
line 4381
;4381:	{
line 4382
;4382:		ps->speed = 0;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTI4 0
ASGNI4
line 4383
;4383:	}
LABELV $1684
line 4385
;4384:
;4385:	if (ps->usingATST && (cmd->rightmove ||
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
ADDRLP4 4
INDIRI4
EQI4 $1686
ADDRLP4 8
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 8
INDIRP4
CNSTI4 25
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
NEI4 $1688
ADDRLP4 8
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
EQI4 $1686
LABELV $1688
line 4387
;4386:		cmd->forwardmove))
;4387:	{
line 4388
;4388:		if (!ps->holdMoveTime)
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1687
line 4389
;4389:		{
line 4390
;4390:			ps->torsoAnim = ( ( ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT )
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 100
ADDP4
ASGNP4
ADDRLP4 16
CNSTI4 2048
ASGNI4
ADDRLP4 12
INDIRP4
ADDRLP4 12
INDIRP4
INDIRI4
ADDRLP4 16
INDIRI4
BANDI4
ADDRLP4 16
INDIRI4
BXORI4
CNSTI4 834
BORI4
ASGNI4
line 4392
;4391:				| BOTH_RUN1START;
;4392:			ps->holdMoveTime = svTime;
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
ADDRFP4 8
INDIRI4
ASGNI4
line 4393
;4393:		}
line 4394
;4394:	}
ADDRGP4 $1687
JUMPV
LABELV $1686
line 4396
;4395:	else
;4396:	{
line 4397
;4397:		ps->holdMoveTime = 0;
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
CNSTI4 0
ASGNI4
line 4399
;4398:
;4399:		if (ps->usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1691
line 4400
;4400:		{
line 4401
;4401:			ps->torsoAnim = ( ( ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT )
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 100
ADDP4
ASGNP4
ADDRLP4 16
CNSTI4 2048
ASGNI4
ADDRLP4 12
INDIRP4
ADDRLP4 12
INDIRP4
INDIRI4
ADDRLP4 16
INDIRI4
BANDI4
ADDRLP4 16
INDIRI4
BXORI4
CNSTI4 571
BORI4
ASGNI4
line 4403
;4402:				| BOTH_STAND1;
;4403:		}
LABELV $1691
line 4404
;4404:	}
LABELV $1687
line 4406
;4405:
;4406:	if (ps->usingATST &&
ADDRLP4 12
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 16
CNSTI4 0
ASGNI4
ADDRLP4 12
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
EQI4 $1693
ADDRLP4 20
ADDRLP4 12
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
ASGNI4
ADDRFP4 8
INDIRI4
ADDRLP4 20
INDIRI4
SUBI4
CNSTI4 500
LTI4 $1695
ADDRLP4 20
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $1693
LABELV $1695
line 4409
;4407:		((svTime - ps->holdMoveTime) < 500 ||
;4408:		!ps->holdMoveTime))
;4409:	{
line 4410
;4410:		ps->speed = 0;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTI4 0
ASGNI4
line 4411
;4411:	}
ADDRGP4 $1694
JUMPV
LABELV $1693
line 4412
;4412:	else if (ps->usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1696
line 4413
;4413:	{
line 4414
;4414:		if ((svTime - ps->holdMoveTime) < 600)
ADDRFP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
SUBI4
CNSTI4 600
GEI4 $1698
line 4415
;4415:		{
line 4416
;4416:			ps->speed *= 0.4;
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTF4 1053609165
ADDRLP4 24
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4417
;4417:		}
ADDRGP4 $1699
JUMPV
LABELV $1698
line 4418
;4418:		else if ((svTime - ps->holdMoveTime) < 1000)
ADDRFP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
SUBI4
CNSTI4 1000
GEI4 $1700
line 4419
;4419:		{
line 4420
;4420:			ps->speed *= 0.5;
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTF4 1056964608
ADDRLP4 24
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4421
;4421:		}
ADDRGP4 $1701
JUMPV
LABELV $1700
line 4422
;4422:		else if ((svTime - ps->holdMoveTime) < 1400)
ADDRFP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
SUBI4
CNSTI4 1400
GEI4 $1702
line 4423
;4423:		{
line 4424
;4424:			ps->speed *= 0.6;
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTF4 1058642330
ADDRLP4 24
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4425
;4425:		}
ADDRGP4 $1703
JUMPV
LABELV $1702
line 4426
;4426:		else if ((svTime - ps->holdMoveTime) < 1700)
ADDRFP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
SUBI4
CNSTI4 1700
GEI4 $1704
line 4427
;4427:		{
line 4428
;4428:			ps->speed *= 0.7;
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTF4 1060320051
ADDRLP4 24
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4429
;4429:		}
ADDRGP4 $1705
JUMPV
LABELV $1704
line 4430
;4430:		else if ((svTime - ps->holdMoveTime) < 1900)
ADDRFP4 8
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 1324
ADDP4
INDIRI4
SUBI4
CNSTI4 1900
GEI4 $1706
line 4431
;4431:		{
line 4432
;4432:			ps->speed *= 0.8;
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTF4 1061997773
ADDRLP4 24
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4433
;4433:		}
LABELV $1706
LABELV $1705
LABELV $1703
LABELV $1701
LABELV $1699
line 4435
;4434:
;4435:		if (cmd->forwardmove < 0)
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $1708
line 4436
;4436:		{
line 4437
;4437:			ps->torsoAnim = ( ( ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT )
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 100
ADDP4
ASGNP4
ADDRLP4 28
CNSTI4 2048
ASGNI4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
ADDRLP4 28
INDIRI4
BANDI4
ADDRLP4 28
INDIRI4
BXORI4
CNSTI4 852
BORI4
ASGNI4
line 4439
;4438:				| BOTH_WALKBACK1;
;4439:			ps->speed *= 0.6;
ADDRLP4 32
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 32
INDIRP4
CNSTF4 1058642330
ADDRLP4 32
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4440
;4440:		}
ADDRGP4 $1697
JUMPV
LABELV $1708
line 4442
;4441:		else
;4442:		{
line 4443
;4443:			ps->torsoAnim = ( ( ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT )
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 100
ADDP4
ASGNP4
ADDRLP4 28
CNSTI4 2048
ASGNI4
ADDRLP4 24
INDIRP4
ADDRLP4 24
INDIRP4
INDIRI4
ADDRLP4 28
INDIRI4
BANDI4
ADDRLP4 28
INDIRI4
BXORI4
CNSTI4 833
BORI4
ASGNI4
line 4445
;4444:				| BOTH_RUN1;
;4445:		}
line 4446
;4446:	}
ADDRGP4 $1697
JUMPV
LABELV $1696
line 4447
;4447:	else if ( cmd->forwardmove < 0 && !(cmd->buttons&BUTTON_WALKING) && pm->ps->groundEntityNum != ENTITYNUM_NONE )
ADDRLP4 24
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 28
CNSTI4 0
ASGNI4
ADDRLP4 24
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
ADDRLP4 28
INDIRI4
GEI4 $1710
ADDRLP4 32
CNSTI4 16
ASGNI4
ADDRLP4 24
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
BANDI4
ADDRLP4 28
INDIRI4
NEI4 $1710
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
EQI4 $1710
line 4448
;4448:	{//running backwards is slower than running forwards (like SP)
line 4449
;4449:		ps->speed *= 0.75;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1061158912
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4450
;4450:	}
LABELV $1710
LABELV $1697
LABELV $1694
line 4452
;4451:
;4452:	if (ps->fd.forcePowersActive & (1 << FP_GRIP))
ADDRFP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 64
BANDI4
CNSTI4 0
EQI4 $1712
line 4453
;4453:	{
line 4454
;4454:		ps->speed *= 0.4;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1053609165
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4455
;4455:	}
LABELV $1712
line 4457
;4456:
;4457:	if (ps->fd.forcePowersActive & (1 << FP_SPEED))
ADDRFP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1714
line 4458
;4458:	{
line 4459
;4459:		if (ps->fd.forceSpeedSmash < 1.2)
ADDRFP4 0
INDIRP4
CNSTI4 1136
ADDP4
INDIRF4
CNSTF4 1067030938
GEF4 $1716
line 4460
;4460:		{
line 4461
;4461:			ps->fd.forceSpeedSmash = 1.2;
ADDRFP4 0
INDIRP4
CNSTI4 1136
ADDP4
CNSTF4 1067030938
ASGNF4
line 4462
;4462:		}
LABELV $1716
line 4463
;4463:		if (ps->fd.forceSpeedSmash > forceSpeedLevels[ps->fd.forcePowerLevel[FP_SPEED]]) //2.8
ADDRLP4 36
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTI4 1136
ADDP4
INDIRF4
ADDRLP4 36
INDIRP4
CNSTI4 952
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 forceSpeedLevels
ADDP4
INDIRF4
LEF4 $1718
line 4464
;4464:		{
line 4465
;4465:			ps->fd.forceSpeedSmash = forceSpeedLevels[ps->fd.forcePowerLevel[FP_SPEED]];
ADDRLP4 40
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
CNSTI4 1136
ADDP4
ADDRLP4 40
INDIRP4
CNSTI4 952
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 forceSpeedLevels
ADDP4
INDIRF4
ASGNF4
line 4466
;4466:		}
LABELV $1718
line 4467
;4467:		ps->speed *= ps->fd.forceSpeedSmash;
ADDRLP4 40
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 44
ADDRLP4 40
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 44
INDIRP4
ADDRLP4 44
INDIRP4
INDIRI4
CVIF4 4
ADDRLP4 40
INDIRP4
CNSTI4 1136
ADDP4
INDIRF4
MULF4
CVFI4 4
ASGNI4
line 4468
;4468:		ps->fd.forceSpeedSmash += 0.005f;
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 1136
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
ADDRLP4 48
INDIRP4
INDIRF4
CNSTF4 1000593162
ADDF4
ASGNF4
line 4469
;4469:	}
LABELV $1714
line 4471
;4470:
;4471:	if (ps->fd.forcePowersActive & (1 << FP_RAGE))
ADDRFP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $1720
line 4472
;4472:	{
line 4473
;4473:		ps->speed *= 1.3;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1067869798
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4474
;4474:	}
ADDRGP4 $1721
JUMPV
LABELV $1720
line 4475
;4475:	else if (ps->fd.forceRageRecoveryTime > svTime)
ADDRFP4 0
INDIRP4
CNSTI4 1172
ADDP4
INDIRI4
ADDRFP4 8
INDIRI4
LEI4 $1722
line 4476
;4476:	{
line 4477
;4477:		ps->speed *= 0.75;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1061158912
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4478
;4478:	}
LABELV $1722
LABELV $1721
line 4480
;4479:
;4480:	if (ps->fd.forceGripCripple)
ADDRFP4 0
INDIRP4
CNSTI4 1120
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1724
line 4481
;4481:	{
line 4482
;4482:		if (ps->fd.forcePowersActive & (1 << FP_RAGE))
ADDRFP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $1726
line 4483
;4483:		{
line 4484
;4484:			ps->speed *= 0.9;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1063675494
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4485
;4485:		}
ADDRGP4 $1727
JUMPV
LABELV $1726
line 4486
;4486:		else if (ps->fd.forcePowersActive & (1 << FP_SPEED))
ADDRFP4 0
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 4
BANDI4
CNSTI4 0
EQI4 $1728
line 4487
;4487:		{ //force speed will help us escape
line 4488
;4488:			ps->speed *= 0.8;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1061997773
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4489
;4489:		}
ADDRGP4 $1729
JUMPV
LABELV $1728
line 4491
;4490:		else
;4491:		{
line 4492
;4492:			ps->speed *= 0.2;
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 36
INDIRP4
CNSTF4 1045220557
ADDRLP4 36
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4493
;4493:		}
LABELV $1729
LABELV $1727
line 4494
;4494:	}
LABELV $1724
line 4496
;4495:
;4496:	if ( BG_SaberInAttack( ps->saberMove ) && cmd->forwardmove < 0 )
ADDRFP4 0
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 36
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 40
CNSTI4 0
ASGNI4
ADDRLP4 36
INDIRI4
ADDRLP4 40
INDIRI4
EQI4 $1730
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
ADDRLP4 40
INDIRI4
GEI4 $1730
line 4497
;4497:	{//if running backwards while attacking, don't run as fast.
line 4498
;4498:		switch( ps->fd.saberAnimLevel )
ADDRLP4 44
ADDRFP4 0
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 1
EQI4 $1735
ADDRLP4 44
INDIRI4
CNSTI4 2
EQI4 $1736
ADDRLP4 44
INDIRI4
CNSTI4 3
EQI4 $1737
ADDRGP4 $1731
JUMPV
line 4499
;4499:		{
LABELV $1735
line 4501
;4500:		case FORCE_LEVEL_1:
;4501:			ps->speed *= 0.75f;
ADDRLP4 52
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 52
INDIRP4
CNSTF4 1061158912
ADDRLP4 52
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4502
;4502:			break;
ADDRGP4 $1731
JUMPV
LABELV $1736
line 4504
;4503:		case FORCE_LEVEL_2:
;4504:			ps->speed *= 0.60f;
ADDRLP4 56
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTF4 1058642330
ADDRLP4 56
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4505
;4505:			break;
ADDRGP4 $1731
JUMPV
LABELV $1737
line 4507
;4506:		case FORCE_LEVEL_3:
;4507:			ps->speed *= 0.45f;
ADDRLP4 60
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 60
INDIRP4
CNSTF4 1055286886
ADDRLP4 60
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4508
;4508:			break;
line 4510
;4509:		default:
;4510:			break;
line 4512
;4511:		}
;4512:	}
ADDRGP4 $1731
JUMPV
LABELV $1730
line 4513
;4513:	else if ( BG_SpinningSaberAnim( ps->legsAnim ) )
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 44
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 0
EQI4 $1738
line 4514
;4514:	{
line 4515
;4515:		if (ps->fd.saberAnimLevel == FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1740
line 4516
;4516:		{
line 4517
;4517:			ps->speed *= 0.3f;
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTF4 1050253722
ADDRLP4 48
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4518
;4518:		}
ADDRGP4 $1739
JUMPV
LABELV $1740
line 4520
;4519:		else
;4520:		{
line 4521
;4521:			ps->speed *= 0.5f;
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTF4 1056964608
ADDRLP4 48
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4522
;4522:		}
line 4523
;4523:	}
ADDRGP4 $1739
JUMPV
LABELV $1738
line 4524
;4524:	else if ( ps->weapon == WP_SABER && BG_SaberInAttack( ps->saberMove ) )
ADDRLP4 48
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1742
ADDRLP4 48
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 52
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 52
INDIRI4
CNSTI4 0
EQI4 $1742
line 4525
;4525:	{//if attacking with saber while running, drop your speed
line 4526
;4526:		switch( ps->fd.saberAnimLevel )
ADDRLP4 56
ADDRFP4 0
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
ADDRLP4 56
INDIRI4
CNSTI4 2
EQI4 $1747
ADDRLP4 56
INDIRI4
CNSTI4 3
EQI4 $1748
ADDRGP4 $1743
JUMPV
line 4527
;4527:		{
LABELV $1747
line 4529
;4528:		case FORCE_LEVEL_2:
;4529:			ps->speed *= 0.85f;
ADDRLP4 64
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTF4 1062836634
ADDRLP4 64
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4530
;4530:			break;
ADDRGP4 $1743
JUMPV
LABELV $1748
line 4532
;4531:		case FORCE_LEVEL_3:
;4532:			ps->speed *= 0.55f;
ADDRLP4 68
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 68
INDIRP4
CNSTF4 1057803469
ADDRLP4 68
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4533
;4533:			break;
line 4535
;4534:		default:
;4535:			break;
line 4537
;4536:		}
;4537:	}
ADDRGP4 $1743
JUMPV
LABELV $1742
line 4538
;4538:	else if (ps->weapon == WP_SABER && ps->fd.saberAnimLevel == FORCE_LEVEL_3 &&
ADDRLP4 56
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1749
ADDRLP4 56
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1749
ADDRLP4 56
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 60
ADDRGP4 PM_SaberInTransition
CALLI4
ASGNI4
ADDRLP4 60
INDIRI4
CNSTI4 0
EQI4 $1749
line 4540
;4539:		PM_SaberInTransition(ps->saberMove))
;4540:	{ //Now, we want to even slow down in transitions for level 3 (since it has chains and stuff now)
line 4541
;4541:		if (cmd->forwardmove < 0)
ADDRFP4 4
INDIRP4
CNSTI4 24
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $1751
line 4542
;4542:		{
line 4543
;4543:			ps->speed *= 0.4f;
ADDRLP4 64
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTF4 1053609165
ADDRLP4 64
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4544
;4544:		}
ADDRGP4 $1752
JUMPV
LABELV $1751
line 4546
;4545:		else
;4546:		{
line 4547
;4547:			ps->speed *= 0.6f;
ADDRLP4 64
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
ASGNP4
ADDRLP4 64
INDIRP4
CNSTF4 1058642330
ADDRLP4 64
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 4548
;4548:		}
LABELV $1752
line 4549
;4549:	}
LABELV $1749
LABELV $1743
LABELV $1739
LABELV $1731
line 4552
;4550:
;4551:
;4552:	if ( BG_InRoll( ps, ps->legsAnim ) && ps->speed > 200 )
ADDRLP4 64
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
ARGP4
ADDRLP4 64
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1753
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CNSTI4 200
LEI4 $1753
line 4553
;4553:	{ //can't roll unless you're able to move normally
line 4554
;4554:		BG_CmdForRoll( ps->legsAnim, cmd );
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 BG_CmdForRoll
CALLV
pop
line 4555
;4555:		if ((ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_ROLL_B)
ADDRFP4 0
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
CNSTI4 886
NEI4 $1755
line 4556
;4556:		{ //backwards roll is pretty fast, should also be slower
line 4557
;4557:			ps->speed = ps->legsTimer/2.5;
ADDRLP4 72
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 72
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 72
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1075838976
DIVF4
CVFI4 4
ASGNI4
line 4558
;4558:		}
ADDRGP4 $1756
JUMPV
LABELV $1755
line 4560
;4559:		else
;4560:		{
line 4561
;4561:			ps->speed = ps->legsTimer/1.5;//450;
ADDRLP4 72
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 72
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 72
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1069547520
DIVF4
CVFI4 4
ASGNI4
line 4562
;4562:		}
LABELV $1756
line 4563
;4563:		if (ps->speed > 600)
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
INDIRI4
CNSTI4 600
LEI4 $1757
line 4564
;4564:		{
line 4565
;4565:			ps->speed = 600;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTI4 600
ASGNI4
line 4566
;4566:		}
LABELV $1757
line 4568
;4567:		//Automatically slow down as the roll ends.
;4568:	}
LABELV $1753
line 4569
;4569:}
LABELV $1681
endproc BG_AdjustClientSpeed 76 8
export PmoveSingle
proc PmoveSingle 204 12
line 4581
;4570:
;4571:/*
;4572:================
;4573:PmoveSingle
;4574:
;4575:================
;4576:*/
;4577:void trap_SnapVector( float *v );
;4578:
;4579:static vec3_t angles_rotated;
;4580:
;4581:void PmoveSingle (pmove_t *pmove) {
line 4586
;4582:	vec3_t axis[3];
;4583:   vec3_t rotated_angles;
;4584:   int roll, i;
;4585:   float y, p, r, yaw, pitch, percentage;
;4586:   pm = pmove;
ADDRGP4 pm
ADDRFP4 0
INDIRP4
ASGNP4
line 4588
;4587:
;4588:	gPMDoSlowFall = PM_DoSlowFall();
ADDRLP4 80
ADDRGP4 PM_DoSlowFall
CALLI4
ASGNI4
ADDRGP4 gPMDoSlowFall
ADDRLP4 80
INDIRI4
ASGNI4
line 4592
;4589:
;4590:	// this counter lets us debug movement problems with a journal
;4591:	// by setting a conditional breakpoint fot the previous frame
;4592:	c_pmove++;
ADDRLP4 84
ADDRGP4 c_pmove
ASGNP4
ADDRLP4 84
INDIRP4
ADDRLP4 84
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 4595
;4593:
;4594:	// clear results
;4595:	pm->numtouch = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 52
ADDP4
CNSTI4 0
ASGNI4
line 4596
;4596:	pm->watertype = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 212
ADDP4
CNSTI4 0
ASGNI4
line 4597
;4597:	pm->waterlevel = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 216
ADDP4
CNSTI4 0
ASGNI4
line 4599
;4598:
;4599:	if (pm->ps->pm_type == PM_FLOAT)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1760
line 4600
;4600:	{ //You get no control over where you go in grip movement
line 4601
;4601:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4602
;4602:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4603
;4603:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4604
;4604:	}
LABELV $1760
line 4606
;4605:
;4606:	if (pm->ps->eFlags & EF_DISINTEGRATION)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
INDIRI4
CNSTI4 33554432
BANDI4
CNSTI4 0
EQI4 $1762
line 4607
;4607:	{
line 4608
;4608:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4609
;4609:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4610
;4610:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4611
;4611:	}
LABELV $1762
line 4613
;4612:
;4613:	if ( pm->ps->saberMove == LS_A_LUNGE )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 14
NEI4 $1764
line 4614
;4614:	{//can't move during lunge
line 4615
;4615:		pm->cmd.rightmove = pm->cmd.upmove = 0;
ADDRLP4 88
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 92
CNSTI1 0
ASGNI1
ADDRLP4 88
INDIRP4
CNSTI4 30
ADDP4
ADDRLP4 92
INDIRI1
ASGNI1
ADDRLP4 88
INDIRP4
CNSTI4 29
ADDP4
ADDRLP4 92
INDIRI1
ASGNI1
line 4616
;4616:		if ( pm->ps->legsTimer > 500 )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 88
ADDP4
INDIRI4
CNSTI4 500
LEI4 $1766
line 4617
;4617:		{
line 4618
;4618:			pm->cmd.forwardmove = 127;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 127
ASGNI1
line 4619
;4619:		}
ADDRGP4 $1767
JUMPV
LABELV $1766
line 4621
;4620:		else
;4621:		{
line 4622
;4622:			pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4623
;4623:		}
LABELV $1767
line 4624
;4624:	}
LABELV $1764
line 4626
;4625:
;4626:	if ( pm->ps->saberMove == LS_A_JUMP_T__B_ )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 15
NEI4 $1768
line 4627
;4627:	{//can't move during leap
line 4628
;4628:		if ( pm->ps->groundEntityNum != ENTITYNUM_NONE )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
EQI4 $1770
line 4629
;4629:		{//hit the ground
line 4630
;4630:			pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4631
;4631:		}
LABELV $1770
line 4632
;4632:		pm->cmd.rightmove = pm->cmd.upmove = 0;
ADDRLP4 88
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 92
CNSTI1 0
ASGNI1
ADDRLP4 88
INDIRP4
CNSTI4 30
ADDP4
ADDRLP4 92
INDIRI1
ASGNI1
ADDRLP4 88
INDIRP4
CNSTI4 29
ADDP4
ADDRLP4 92
INDIRI1
ASGNI1
line 4633
;4633:	}
LABELV $1768
line 4635
;4634:
;4635:	if ( pm->ps->saberMove == LS_A_BACK || pm->ps->saberMove == LS_A_BACK_CR 
ADDRLP4 88
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 88
INDIRI4
CNSTI4 12
EQI4 $1778
ADDRLP4 88
INDIRI4
CNSTI4 13
EQI4 $1778
ADDRLP4 88
INDIRI4
CNSTI4 11
EQI4 $1778
ADDRLP4 88
INDIRI4
CNSTI4 16
EQI4 $1778
ADDRLP4 88
INDIRI4
CNSTI4 17
EQI4 $1778
ADDRLP4 88
INDIRI4
CNSTI4 15
NEI4 $1772
LABELV $1778
line 4638
;4636:		|| pm->ps->saberMove == LS_A_BACKSTAB || pm->ps->saberMove == LS_A_FLIP_STAB ||
;4637:		pm->ps->saberMove == LS_A_FLIP_SLASH || pm->ps->saberMove == LS_A_JUMP_T__B_ )
;4638:	{
line 4639
;4639:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4640
;4640:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4641
;4641:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4642
;4642:	}
LABELV $1772
line 4644
;4643:
;4644:	if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_A2_STABBACK1) ||
ADDRLP4 92
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 92
INDIRI4
CNSTI4 564
EQI4 $1785
ADDRLP4 92
INDIRI4
CNSTI4 565
EQI4 $1785
ADDRLP4 92
INDIRI4
CNSTI4 570
EQI4 $1785
ADDRLP4 92
INDIRI4
CNSTI4 568
EQI4 $1785
ADDRLP4 92
INDIRI4
CNSTI4 567
EQI4 $1785
ADDRLP4 92
INDIRI4
CNSTI4 566
NEI4 $1779
LABELV $1785
line 4650
;4645:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_ATTACK_BACK) ||
;4646:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_CROUCHATTACKBACK1) ||
;4647:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_FORCELEAP2_T__B_) ||
;4648:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_JUMPFLIPSTABDOWN) ||
;4649:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == (BOTH_JUMPFLIPSLASHDOWN1))
;4650:	{
line 4651
;4651:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4652
;4652:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4653
;4653:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4654
;4654:	}
LABELV $1779
line 4656
;4655:
;4656:	if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_KISSER1LOOP ||
ADDRLP4 96
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 96
INDIRI4
CNSTI4 745
EQI4 $1788
ADDRLP4 96
INDIRI4
CNSTI4 752
NEI4 $1786
LABELV $1788
line 4658
;4657:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_KISSEE1LOOP)
;4658:	{
line 4659
;4659:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4660
;4660:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4661
;4661:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4662
;4662:	}
LABELV $1786
line 4664
;4663:
;4664:	if (pm->ps->emplacedIndex)
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 596
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1789
line 4665
;4665:	{
line 4666
;4666:		if (pm->cmd.forwardmove < 0)
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $1791
line 4667
;4667:		{
line 4668
;4668:			pm->ps->emplacedIndex = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 596
ADDP4
CNSTI4 0
ASGNI4
line 4669
;4669:		}
ADDRGP4 $1792
JUMPV
LABELV $1791
line 4671
;4670:		else
;4671:		{
line 4672
;4672:			pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4673
;4673:			pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4674
;4674:			pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4675
;4675:		}
LABELV $1792
line 4676
;4676:	}
LABELV $1789
line 4678
;4677:
;4678:	if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->weaponstate == WEAPON_CHARGING_ALT)
ADDRLP4 100
ADDRGP4 pm
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 104
CNSTI4 5
ASGNI4
ADDRLP4 100
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ADDRLP4 104
INDIRI4
NEI4 $1793
ADDRLP4 100
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
ADDRLP4 104
INDIRI4
NEI4 $1793
line 4679
;4679:	{ //not allowed to move while charging the disruptor
line 4680
;4680:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4681
;4681:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4682
;4682:		if (pm->cmd.upmove > 0)
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
LEI4 $1795
line 4683
;4683:		{
line 4684
;4684:			pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4685
;4685:		}
LABELV $1795
line 4686
;4686:	}
LABELV $1793
line 4688
;4687:
;4688:	BG_AdjustClientSpeed(pm->ps, &pm->cmd, pm->cmd.serverTime);
ADDRLP4 108
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 108
INDIRP4
INDIRP4
ARGP4
ADDRLP4 112
ADDRLP4 108
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 112
INDIRP4
ARGP4
ADDRLP4 112
INDIRP4
INDIRI4
ARGI4
ADDRGP4 BG_AdjustClientSpeed
CALLV
pop
line 4690
;4689:
;4690:	if ( pm->ps->stats[STAT_HEALTH] <= 0 ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
CNSTI4 0
GTI4 $1797
line 4691
;4691:		pm->tracemask &= ~CONTENTS_BODY;	// corpses can fly through bodies
ADDRLP4 116
ADDRGP4 pm
INDIRP4
CNSTI4 32
ADDP4
ASGNP4
ADDRLP4 116
INDIRP4
ADDRLP4 116
INDIRP4
INDIRI4
CNSTI4 -257
BANDI4
ASGNI4
line 4692
;4692:	}
LABELV $1797
line 4696
;4693:
;4694:	// make sure walking button is clear if they are running, to avoid
;4695:	// proxy no-footsteps cheats
;4696:	if ( abs( pm->cmd.forwardmove ) > 64 || abs( pm->cmd.rightmove ) > 64 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ARGI4
ADDRLP4 116
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 116
INDIRI4
CNSTI4 64
GTI4 $1801
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ARGI4
ADDRLP4 120
ADDRGP4 abs
CALLI4
ASGNI4
ADDRLP4 120
INDIRI4
CNSTI4 64
LEI4 $1799
LABELV $1801
line 4697
;4697:		pm->cmd.buttons &= ~BUTTON_WALKING;
ADDRLP4 124
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ADDRLP4 124
INDIRP4
INDIRI4
CNSTI4 -17
BANDI4
ASGNI4
line 4698
;4698:	}
LABELV $1799
line 4701
;4699:
;4700:	// set the talk balloon flag
;4701:	if ( pm->cmd.buttons & BUTTON_TALK ) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
EQI4 $1802
line 4702
;4702:		pm->ps->eFlags |= EF_TALK;
ADDRLP4 124
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ADDRLP4 124
INDIRP4
INDIRI4
CNSTI4 4096
BORI4
ASGNI4
line 4703
;4703:	} else {
ADDRGP4 $1803
JUMPV
LABELV $1802
line 4704
;4704:		pm->ps->eFlags &= ~EF_TALK;
ADDRLP4 124
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 124
INDIRP4
ADDRLP4 124
INDIRP4
INDIRI4
CNSTI4 -4097
BANDI4
ASGNI4
line 4705
;4705:	}
LABELV $1803
line 4709
;4706:
;4707:	// In certain situations, we may want to control which attack buttons are pressed and what kind of functionality
;4708:	//	is attached to them
;4709:	PM_AdjustAttackStates( pm );
ADDRGP4 pm
INDIRP4
ARGP4
ADDRGP4 PM_AdjustAttackStates
CALLV
pop
line 4712
;4710:
;4711:	// clear the respawned flag if attack and use are cleared
;4712:	if ( pm->ps->stats[STAT_HEALTH] > 0 && 
ADDRLP4 124
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 128
CNSTI4 0
ASGNI4
ADDRLP4 124
INDIRP4
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ADDRLP4 128
INDIRI4
LEI4 $1804
ADDRLP4 124
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 5
BANDI4
ADDRLP4 128
INDIRI4
NEI4 $1804
line 4713
;4713:		!( pm->cmd.buttons & (BUTTON_ATTACK | BUTTON_USE_HOLDABLE) ) ) {
line 4714
;4714:		pm->ps->pm_flags &= ~PMF_RESPAWNED;
ADDRLP4 132
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 132
INDIRP4
ADDRLP4 132
INDIRP4
INDIRI4
CNSTI4 -513
BANDI4
ASGNI4
line 4715
;4715:	}
LABELV $1804
line 4720
;4716:
;4717:	// if talk button is down, dissallow all other input
;4718:	// this is to prevent any possible intercept proxy from
;4719:	// adding fake talk balloons
;4720:	if ( pmove->cmd.buttons & BUTTON_TALK ) {
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
EQI4 $1806
line 4723
;4721:		// keep the talk button set tho for when the cmd.serverTime > 66 msec
;4722:		// and the same cmd is used multiple times in Pmove
;4723:		pmove->cmd.buttons = BUTTON_TALK;
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
CNSTI4 2
ASGNI4
line 4724
;4724:		pmove->cmd.forwardmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4725
;4725:		pmove->cmd.rightmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4726
;4726:		pmove->cmd.upmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4727
;4727:	}
LABELV $1806
line 4730
;4728:
;4729:	// clear all pmove local vars
;4730:	memset (&pml, 0, sizeof(pml));
ADDRGP4 pml
ARGP4
CNSTI4 0
ARGI4
CNSTI4 1164
ARGI4
ADDRGP4 memset
CALLP4
pop
line 4733
;4731:
;4732:	// determine the time
;4733:	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 4734
;4734:	if ( pml.msec < 1 ) {
ADDRGP4 pml+40
INDIRI4
CNSTI4 1
GEI4 $1809
line 4735
;4735:		pml.msec = 1;
ADDRGP4 pml+40
CNSTI4 1
ASGNI4
line 4736
;4736:	} else if ( pml.msec > 200 ) {
ADDRGP4 $1810
JUMPV
LABELV $1809
ADDRGP4 pml+40
INDIRI4
CNSTI4 200
LEI4 $1813
line 4737
;4737:		pml.msec = 200;
ADDRGP4 pml+40
CNSTI4 200
ASGNI4
line 4738
;4738:	}
LABELV $1813
LABELV $1810
line 4739
;4739:	pm->ps->commandTime = pmove->cmd.serverTime;
ADDRGP4 pm
INDIRP4
INDIRP4
ADDRFP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 4742
;4740:
;4741:	// save old org in case we get stuck
;4742:	VectorCopy (pm->ps->origin, pml.previous_origin);
ADDRGP4 pml+1136
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 4745
;4743:
;4744:	// save old velocity for crashlanding
;4745:	VectorCopy (pm->ps->velocity, pml.previous_velocity);
ADDRGP4 pml+1148
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
INDIRB
ASGNB 12
line 4747
;4746:
;4747:	pml.frametime = pml.msec * 0.001;
ADDRGP4 pml+36
CNSTF4 981668463
ADDRGP4 pml+40
INDIRI4
CVIF4 4
MULF4
ASGNF4
line 4749
;4748:
;4749:	PM_AdjustAngleForWallRun(pm->ps, &pm->cmd, qtrue);
ADDRLP4 132
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 132
INDIRP4
INDIRP4
ARGP4
ADDRLP4 132
INDIRP4
CNSTI4 4
ADDP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 PM_AdjustAngleForWallRun
CALLI4
pop
line 4751
;4750:
;4751:	if (pm->ps->saberMove == LS_A_JUMP_T__B_ || pm->ps->saberMove == LS_A_LUNGE ||
ADDRLP4 136
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 136
INDIRI4
CNSTI4 15
EQI4 $1826
ADDRLP4 136
INDIRI4
CNSTI4 14
EQI4 $1826
ADDRLP4 136
INDIRI4
CNSTI4 13
EQI4 $1826
ADDRLP4 136
INDIRI4
CNSTI4 12
EQI4 $1826
ADDRLP4 136
INDIRI4
CNSTI4 11
NEI4 $1821
LABELV $1826
line 4754
;4752:		pm->ps->saberMove == LS_A_BACK_CR || pm->ps->saberMove == LS_A_BACK ||
;4753:		pm->ps->saberMove == LS_A_BACKSTAB)
;4754:	{
line 4755
;4755:		PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd);
ADDRLP4 140
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 144
ADDRLP4 140
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
ARGP4
ADDRLP4 144
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 140
INDIRP4
CNSTI4 4
ADDP4
ARGP4
ADDRGP4 PM_SetPMViewAngle
CALLV
pop
line 4756
;4756:	}
LABELV $1821
line 4758
;4757:
;4758:	if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_KISSER1LOOP ||
ADDRLP4 140
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
ADDRLP4 140
INDIRI4
CNSTI4 745
EQI4 $1829
ADDRLP4 140
INDIRI4
CNSTI4 752
NEI4 $1827
LABELV $1829
line 4760
;4759:		(pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_KISSEE1LOOP)
;4760:	{
line 4761
;4761:		pm->ps->viewangles[PITCH] = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 156
ADDP4
CNSTF4 0
ASGNF4
line 4762
;4762:		PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd);
ADDRLP4 144
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 148
ADDRLP4 144
INDIRP4
INDIRP4
ASGNP4
ADDRLP4 148
INDIRP4
ARGP4
ADDRLP4 148
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 144
INDIRP4
CNSTI4 4
ADDP4
ARGP4
ADDRGP4 PM_SetPMViewAngle
CALLV
pop
line 4763
;4763:	}
LABELV $1827
line 4770
;4764:
;4765:   
;4766:   // adnan
;4767:   // roll first, then apply new yaw and pitch
;4768:   // update the viewangles
;4769:   //pm->cmd.angles[ROLL] = pm->ps->stats[STAT_ROLL];
;4770:	PM_UpdateViewAngles( pm->ps, &pm->cmd );
ADDRLP4 144
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
INDIRP4
ARGP4
ADDRLP4 144
INDIRP4
CNSTI4 4
ADDP4
ARGP4
ADDRGP4 PM_UpdateViewAngles
CALLV
pop
line 4771
;4771:   PM_QuaternionViewAngles( &pm->cmd, pm->ps );
ADDRLP4 148
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 148
INDIRP4
CNSTI4 4
ADDP4
ARGP4
ADDRLP4 148
INDIRP4
INDIRP4
ARGP4
ADDRGP4 PM_QuaternionViewAngles
CALLV
pop
line 4963
;4772:   
;4773:
;4774:   /*
;4775:   // adnan
;4776:   // try it properly...
;4777:
;4778:   // get the roll
;4779:   roll = pm->ps->stats[STAT_ROLL];
;4780:
;4781:   if(roll) {
;4782:      if(roll < 0) {
;4783:        roll += 360;
;4784:      } else if (roll > 360) {
;4785:         roll -= 360;
;4786:      }
;4787:      //PM_CalculateRelativeViewAngles(&(pm->cmd), roll);
;4788:      roll = ANGLE2SHORT(roll);
;4789:      pm->cmd.angles[ROLL] = roll;
;4790:      
;4791:      //PM_CaltulateViewAnglesQuatOld(pm->ps, &pm->cmd);
;4792:      PM_QuatViewAngles(pm->ps, &pm->cmd);
;4793:      
;4794:      PM_UpdateViewAngles( pm->ps, &pm->cmd );
;4795:      //VectorCopy(pm->cmd.angles, pm->ps->viewangles);
;4796:   } else {
;4797:      PM_UpdateViewAngles( pm->ps, &pm->cmd );
;4798:   }
;4799:   */
;4800:
;4801:   // adnan
;4802:   /*
;4803:   // try it all as percentages of rotation...
;4804:   VectorClear(rotated_angles);
;4805:   yaw = pitch = roll = 0;
;4806:
;4807:   y = SHORT2ANGLE(pm->cmd.angles[YAW]);
;4808:   p = SHORT2ANGLE(pm->cmd.angles[PITCH]);
;4809:   r = SHORT2ANGLE(pm->cmd.angles[ROLL]);
;4810:
;4811:   
;4812:
;4813:   // if were not rolled, the angles are exactly how they were input
;4814:   if(roll == 0) {
;4815:      // dont do anything
;4816:      PM_UpdateViewAngles( pm->ps, &pm->cmd );
;4817:   }
;4818:   // we are rolled, now do the different cases
;4819:   else {
;4820:      percentage = 0;
;4821:      
;4822:      Com_Printf("angles: %f, %f, %f\n", y, p, r);
;4823:
;4824:      // if we rolled between 0 and 90
;4825:      if(roll > 0 && roll < 90) {
;4826:         Com_Printf("0 < roll < 90\n");
;4827:         // yaw
;4828:         percentage = roll / 90.0f;
;4829:         yaw   = y * percentage + p * (1.0f - percentage);
;4830:         Com_Printf("ry: %f, rp: %f, y: %f, per: %f\n", y, p, yaw, percentage);
;4831:         
;4832:         // pitch
;4833:         //percentage = roll / 90.0f;
;4834:         pitch = p * percentage + y * (1.0f - percentage);
;4835:         Com_Printf("ry: %f, rp: %f, p: %f, per: %f\n", y, p, pitch, percentage);
;4836:      }
;4837:      
;4838:      
;4839:      // if we rolled 90 degrees
;4840:      else if (roll == 90) {
;4841:         Com_Printf("roll == 90\n");
;4842:         yaw   = p;
;4843:         pitch = y;
;4844:      }
;4845:
;4846:      // if we rolled between 90 and 180
;4847:      else if (roll > 90 && roll < 180) {
;4848:         Com_Printf("90 < roll < 180\n");
;4849:
;4850:         percentage = (roll - 90) / 90.0f;
;4851:         //yaw   = (y - 180.0f) * percentage + (p - 180.0f) * (1.0f - percentage);
;4852:         yaw   = y * percentage + p * (1.0f - percentage);
;4853:         Com_Printf("ry: %f, rp: %f, y: %f, per: %f\n", y, p, yaw, percentage);
;4854:
;4855:         //percentage = (p - 90) / 90.0f;
;4856:         //pitch = (p - 180.0f) * percentage + (y - 180.0f) * (1.0f - percentage);
;4857:         pitch = p  * percentage + y * (1.0f - percentage);
;4858:         Com_Printf("ry: %f, rp: %f, p: %f, per: %f\n", y, p, pitch, percentage);
;4859:      }
;4860:
;4861:      // if we're inverted
;4862:      else if (roll == 180) {
;4863:         Com_Printf("roll == 180\n");
;4864:         yaw   = y - 180.0f;
;4865:         pitch = p - 180.0f;
;4866:      }
;4867:
;4868:      // if we rolled between 180 and 270
;4869:      else if (roll > 180 && roll < 270) {
;4870:         Com_Printf("180 < roll < 270\n");
;4871:
;4872:         percentage = (roll - 180.0f) / 90.0f;
;4873:         //yaw   = (y - 180.0f) * percentage + (p - 180.0f) * (1 - percentage);
;4874:         yaw   = y * percentage + p * (1 - percentage);
;4875:         Com_Printf("ry: %f, rp: %f, y: %f, per: %f\n", y, p, yaw, percentage);
;4876:
;4877:         //percentage = (p - 180) / 90.0f;
;4878:         //pitch = (p - 180.0f) * percentage + (y - 180.0f) * (1 - percentage);
;4879:         pitch = p * percentage + y * (1 - percentage);
;4880:         Com_Printf("ry: %f, rp: %f, p: %f, per: %f\n", y, p, pitch, percentage);
;4881:
;4882:      }
;4883:
;4884:      // if we rolled 270
;4885:      else if (roll == 270) {
;4886:         Com_Printf("roll == 270\n");
;4887:         yaw   = p - 180.0f;
;4888:         pitch = y - 180.0f;
;4889:      }
;4890:
;4891:      // if we rolled between 270 and 360
;4892:      else if (roll > 270 && roll < 360) {
;4893:         Com_Printf("270 < roll < 360\n");
;4894:
;4895:         percentage = (roll - 270.0f) / 90;
;4896:         yaw   = y * percentage + p * (1 - percentage);
;4897:         Com_Printf("ry: %f, rp: %f, y: %f, per: %f\n", y, p, yaw, percentage);
;4898:         
;4899:         //percentage = (p - 270.0f) / 90;
;4900:         pitch = p * percentage + y * (1 - percentage);
;4901:         Com_Printf("ry: %f, rp: %f, p: %f, per: %f\n", y, p, pitch, percentage);
;4902:
;4903:      }
;4904:      */
;4905:
;4906:      /*
;4907:      angles_rotated[ROLL] = roll;
;4908:            
;4909:      if( sqrt( (angles_rotated[YAW] - yaw) * (angles_rotated[YAW] - yaw)) > .01)
;4910:      if(angles_rotated[YAW] < yaw) {
;4911:         angles_rotated[YAW] += 1;
;4912:         if(angles_rotated[YAW] > yaw)
;4913:            angles_rotated[YAW] = yaw;
;4914:      } else {
;4915:         angles_rotated[YAW] -= 1;
;4916:         if(angles_rotated[YAW] < yaw)
;4917:            angles_rotated[YAW] = yaw;
;4918:      }
;4919:
;4920:      if( sqrt( (angles_rotated[PITCH] - pitch) * (angles_rotated[PITCH] - pitch)) > .01)
;4921:      if(angles_rotated[PITCH] < pitch) {
;4922:         angles_rotated[PITCH] += 1;
;4923:         if(angles_rotated[PITCH] > pitch)
;4924:            angles_rotated[PITCH] = pitch;
;4925:      } else if(angles_rotated[PITCH] > pitch) {
;4926:         angles_rotated[PITCH] -= 1;
;4927:         if(angles_rotated[PITCH] < pitch)
;4928:            angles_rotated[PITCH] = pitch;
;4929:      }
;4930:
;4931:      
;4932:      if(angles_rotated[ROLL] < roll) {
;4933:         angles_rotated[ROLL] += 1;
;4934:         if(angles_rotated[ROLL] > roll)
;4935:            angles_rotated[ROLL] = roll;
;4936:      } else {
;4937:         angles_rotated[ROLL] -= 1;
;4938:         if(angles_rotated[ROLL] < roll)
;4939:            angles_rotated[ROLL] = roll;
;4940:      }
;4941:      */
;4942:
;4943:      /*
;4944:      yaw = (int)yaw % 360;
;4945:      pitch = (int)pitch % 360;
;4946:      roll %= 360;
;4947:
;4948:      VectorSet(angles_rotated, yaw, pitch, roll);
;4949:      
;4950:      
;4951:      Com_Printf("y: %f, p: %f, r:%d\n", yaw, pitch, roll);
;4952:      
;4953:
;4954:      VectorCopy(pm->cmd.angles, pm->ps->viewangles);
;4955:   }
;4956:   */
;4957:
;4958:   // /adnan
;4959:   
;4960:
;4961:   //Com_Printf("y: %f, p: %f, r:%d\n", pm->ps->viewangles[YAW], pm->ps->viewangles[PITCH], pm->ps->viewangles[ROLL]);
;4962:
;4963:	if ( pm->cmd.upmove < 10 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
INDIRI1
CVII4 1
CNSTI4 10
GEI4 $1830
line 4965
;4964:		// not holding jump
;4965:		pm->ps->pm_flags &= ~PMF_JUMP_HELD;
ADDRLP4 152
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRI4
CNSTI4 -3
BANDI4
ASGNI4
line 4966
;4966:	}
LABELV $1830
line 4969
;4967:
;4968:	// decide if backpedaling animations should be used
;4969:	if ( pm->cmd.forwardmove < 0 ) {
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
CNSTI4 0
GEI4 $1832
line 4970
;4970:		pm->ps->pm_flags |= PMF_BACKWARDS_RUN;
ADDRLP4 152
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRI4
CNSTI4 16
BORI4
ASGNI4
line 4971
;4971:	} else if ( pm->cmd.forwardmove > 0 || ( pm->cmd.forwardmove == 0 && pm->cmd.rightmove ) ) {
ADDRGP4 $1833
JUMPV
LABELV $1832
ADDRLP4 152
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 156
ADDRLP4 152
INDIRP4
CNSTI4 28
ADDP4
INDIRI1
CVII4 1
ASGNI4
ADDRLP4 160
CNSTI4 0
ASGNI4
ADDRLP4 156
INDIRI4
ADDRLP4 160
INDIRI4
GTI4 $1836
ADDRLP4 156
INDIRI4
ADDRLP4 160
INDIRI4
NEI4 $1834
ADDRLP4 152
INDIRP4
CNSTI4 29
ADDP4
INDIRI1
CVII4 1
ADDRLP4 160
INDIRI4
EQI4 $1834
LABELV $1836
line 4972
;4972:		pm->ps->pm_flags &= ~PMF_BACKWARDS_RUN;
ADDRLP4 164
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
ASGNP4
ADDRLP4 164
INDIRP4
ADDRLP4 164
INDIRP4
INDIRI4
CNSTI4 -17
BANDI4
ASGNI4
line 4973
;4973:	}
LABELV $1834
LABELV $1833
line 4975
;4974:
;4975:	if ( pm->ps->pm_type >= PM_DEAD ) {
ADDRLP4 164
CNSTI4 4
ASGNI4
ADDRGP4 pm
INDIRP4
INDIRP4
ADDRLP4 164
INDIRI4
ADDP4
INDIRI4
ADDRLP4 164
INDIRI4
LTI4 $1837
line 4976
;4976:		pm->cmd.forwardmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 4977
;4977:		pm->cmd.rightmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4978
;4978:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4979
;4979:	}
LABELV $1837
line 4981
;4980:
;4981:	if (pm->ps->saberLockTime >= pm->cmd.serverTime)
ADDRLP4 168
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 168
INDIRP4
INDIRP4
CNSTI4 524
ADDP4
INDIRI4
ADDRLP4 168
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
LTI4 $1839
line 4982
;4982:	{
line 4983
;4983:		pm->cmd.upmove = 0;
ADDRGP4 pm
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 4984
;4984:		pm->cmd.forwardmove = 50;
ADDRGP4 pm
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 50
ASGNI1
line 4985
;4985:		pm->cmd.rightmove = 0;//*= 0.1;
ADDRGP4 pm
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 4986
;4986:	}
LABELV $1839
line 4988
;4987:
;4988:	if ( pm->ps->pm_type == PM_SPECTATOR ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1841
line 4989
;4989:		PM_CheckDuck ();
ADDRGP4 PM_CheckDuck
CALLV
pop
line 4990
;4990:		PM_FlyMove ();
ADDRGP4 PM_FlyMove
CALLV
pop
line 4991
;4991:		PM_DropTimers ();
ADDRGP4 PM_DropTimers
CALLV
pop
line 4992
;4992:		return;
ADDRGP4 $1759
JUMPV
LABELV $1841
line 4995
;4993:	}
;4994:
;4995:	if ( pm->ps->pm_type == PM_NOCLIP ) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1843
line 4996
;4996:		PM_NoclipMove ();
ADDRGP4 PM_NoclipMove
CALLV
pop
line 4997
;4997:		PM_DropTimers ();
ADDRGP4 PM_DropTimers
CALLV
pop
line 4998
;4998:		return;
ADDRGP4 $1759
JUMPV
LABELV $1843
line 5001
;4999:	}
;5000:
;5001:	if (pm->ps->pm_type == PM_FREEZE) {
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 5
NEI4 $1845
line 5002
;5002:		return;		// no movement at all
ADDRGP4 $1759
JUMPV
LABELV $1845
line 5005
;5003:	}
;5004:
;5005:	if ( pm->ps->pm_type == PM_INTERMISSION || pm->ps->pm_type == PM_SPINTERMISSION) {
ADDRLP4 172
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 172
INDIRI4
CNSTI4 6
EQI4 $1849
ADDRLP4 172
INDIRI4
CNSTI4 7
NEI4 $1847
LABELV $1849
line 5006
;5006:		return;		// no movement at all
ADDRGP4 $1759
JUMPV
LABELV $1847
line 5009
;5007:	}
;5008:
;5009:	if (gPMDoSlowFall)
ADDRGP4 gPMDoSlowFall
INDIRI4
CNSTI4 0
EQI4 $1850
line 5010
;5010:	{
line 5011
;5011:		pm->ps->gravity *= 0.5;
ADDRLP4 176
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 56
ADDP4
ASGNP4
ADDRLP4 176
INDIRP4
CNSTF4 1056964608
ADDRLP4 176
INDIRP4
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 5012
;5012:	}
LABELV $1850
line 5015
;5013:
;5014:	// set watertype, and waterlevel
;5015:	PM_SetWaterLevel();
ADDRGP4 PM_SetWaterLevel
CALLV
pop
line 5016
;5016:	pml.previous_waterlevel = pmove->waterlevel;
ADDRGP4 pml+1160
ADDRFP4 0
INDIRP4
CNSTI4 216
ADDP4
INDIRI4
ASGNI4
line 5019
;5017:
;5018:	// set mins, maxs, and viewheight
;5019:	PM_CheckDuck ();
ADDRGP4 PM_CheckDuck
CALLV
pop
line 5022
;5020:
;5021:	// set groundentity
;5022:	PM_GroundTrace();
ADDRGP4 PM_GroundTrace
CALLV
pop
line 5024
;5023:
;5024:	if ( pm->ps->groundEntityNum != ENTITYNUM_NONE )
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
EQI4 $1853
line 5025
;5025:	{//on ground
line 5026
;5026:		pm->ps->fd.forceJumpZStart = 0;
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 1092
ADDP4
CNSTF4 0
ASGNF4
line 5027
;5027:	}
LABELV $1853
line 5029
;5028:
;5029:	if ( pm->ps->pm_type == PM_DEAD ) {
ADDRLP4 176
CNSTI4 4
ASGNI4
ADDRGP4 pm
INDIRP4
INDIRP4
ADDRLP4 176
INDIRI4
ADDP4
INDIRI4
ADDRLP4 176
INDIRI4
NEI4 $1855
line 5030
;5030:		PM_DeadMove ();
ADDRGP4 PM_DeadMove
CALLV
pop
line 5031
;5031:	}
LABELV $1855
line 5033
;5032:
;5033:	PM_DropTimers();
ADDRGP4 PM_DropTimers
CALLV
pop
line 5058
;5034:
;5035:	/*
;5036:   if (pm->ps->pm_type == PM_FLOAT)
;5037:	{
;5038:		PM_FlyMove ();
;5039:	}
;5040:	else
;5041:	{
;5042:		if (pm->ps->pm_flags & PMF_TIME_WATERJUMP) {
;5043:			PM_WaterJumpMove();
;5044:		} else if ( pm->waterlevel > 1 ) {
;5045:			// swimming
;5046:			PM_WaterMove();
;5047:		} else if ( pml.walking ) {
;5048:			// walking on ground
;5049:			PM_WalkMove();
;5050:		} else {
;5051:			// airborne
;5052:			PM_AirMove();
;5053:		}
;5054:	}
;5055:   */
;5056:
;5057:   // adnan
;5058:   if(pm->cmd.buttons & BUTTON_ROLL_RIGHT) {
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 16384
BANDI4
CNSTI4 0
EQI4 $1857
line 5059
;5059:      pm->ps->stats[STAT_ROLL] += 1;
ADDRLP4 180
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 256
ADDP4
ASGNP4
ADDRLP4 180
INDIRP4
ADDRLP4 180
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 5060
;5060:      pm->ps->viewangles[ROLL] += 1;
ADDRLP4 184
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 164
ADDP4
ASGNP4
ADDRLP4 184
INDIRP4
ADDRLP4 184
INDIRP4
INDIRF4
CNSTF4 1065353216
ADDF4
ASGNF4
line 5061
;5061:   } else if(pm->cmd.buttons & BUTTON_ROLL_LEFT) {
ADDRGP4 $1858
JUMPV
LABELV $1857
ADDRGP4 pm
INDIRP4
CNSTI4 20
ADDP4
INDIRI4
CNSTI4 64
BANDI4
CNSTI4 0
EQI4 $1859
line 5062
;5062:      pm->ps->stats[STAT_ROLL] -= 1;
ADDRLP4 180
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 256
ADDP4
ASGNP4
ADDRLP4 180
INDIRP4
ADDRLP4 180
INDIRP4
INDIRI4
CNSTI4 1
SUBI4
ASGNI4
line 5063
;5063:      pm->ps->viewangles[ROLL] -= 1;
ADDRLP4 184
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 164
ADDP4
ASGNP4
ADDRLP4 184
INDIRP4
ADDRLP4 184
INDIRP4
INDIRF4
CNSTF4 1065353216
SUBF4
ASGNF4
line 5064
;5064:   }
LABELV $1859
LABELV $1858
line 5067
;5065:
;5066:   // tie fighter flight movement
;5067:   PM_FlightMove();
ADDRGP4 PM_FlightMove
CALLV
pop
line 5070
;5068:   //PM_FlyMove ();
;5069:
;5070:	PM_Animate();
ADDRGP4 PM_Animate
CALLV
pop
line 5073
;5071:
;5072:	// set groundentity, watertype, and waterlevel
;5073:	PM_GroundTrace();
ADDRGP4 PM_GroundTrace
CALLV
pop
line 5074
;5074:	PM_SetWaterLevel();
ADDRGP4 PM_SetWaterLevel
CALLV
pop
line 5076
;5075:
;5076:	if (pm->cmd.forcesel != -1 && (pm->ps->fd.forcePowersKnown & (1 << pm->cmd.forcesel)))
ADDRLP4 180
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 184
ADDRLP4 180
INDIRP4
CNSTI4 25
ADDP4
INDIRU1
CVUI4 1
ASGNI4
ADDRLP4 184
INDIRI4
CNSTI4 -1
EQI4 $1861
ADDRLP4 180
INDIRP4
INDIRP4
CNSTI4 844
ADDP4
INDIRI4
CNSTI4 1
ADDRLP4 184
INDIRI4
LSHI4
BANDI4
CNSTI4 0
EQI4 $1861
line 5077
;5077:	{
line 5078
;5078:		pm->ps->fd.forcePowerSelected = pm->cmd.forcesel;
ADDRLP4 188
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 188
INDIRP4
INDIRP4
CNSTI4 852
ADDP4
ADDRLP4 188
INDIRP4
CNSTI4 25
ADDP4
INDIRU1
CVUI4 1
ASGNI4
line 5079
;5079:	}
LABELV $1861
line 5080
;5080:	if (pm->cmd.invensel != -1 && (pm->ps->stats[STAT_HOLDABLE_ITEMS] & (1 << pm->cmd.invensel)))
ADDRLP4 188
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 192
ADDRLP4 188
INDIRP4
CNSTI4 26
ADDP4
INDIRU1
CVUI4 1
ASGNI4
ADDRLP4 192
INDIRI4
CNSTI4 -1
EQI4 $1863
ADDRLP4 188
INDIRP4
INDIRP4
CNSTI4 224
ADDP4
INDIRI4
CNSTI4 1
ADDRLP4 192
INDIRI4
LSHI4
BANDI4
CNSTI4 0
EQI4 $1863
line 5081
;5081:	{
line 5082
;5082:		pm->ps->stats[STAT_HOLDABLE_ITEM] = BG_GetItemIndexByTag(pm->cmd.invensel, IT_HOLDABLE);
ADDRLP4 196
ADDRGP4 pm
INDIRP4
ASGNP4
ADDRLP4 196
INDIRP4
CNSTI4 26
ADDP4
INDIRU1
CVUI4 1
ARGI4
CNSTI4 6
ARGI4
ADDRLP4 200
ADDRGP4 BG_GetItemIndexByTag
CALLI4
ASGNI4
ADDRLP4 196
INDIRP4
INDIRP4
CNSTI4 220
ADDP4
ADDRLP4 200
INDIRI4
ASGNI4
line 5083
;5083:	}
LABELV $1863
line 5086
;5084:
;5085:	// weapons
;5086:	PM_Weapon();
ADDRGP4 PM_Weapon
CALLV
pop
line 5088
;5087:
;5088:	PM_Use();
ADDRGP4 PM_Use
CALLV
pop
line 5091
;5089:
;5090:	// footstep events / legs animations
;5091:	PM_Footsteps();
ADDRGP4 PM_Footsteps
CALLV
pop
line 5094
;5092:
;5093:	// entering / leaving water splashes
;5094:	PM_WaterEvents();
ADDRGP4 PM_WaterEvents
CALLV
pop
line 5097
;5095:
;5096:	// snap some parts of playerstate to save network bandwidth
;5097:	trap_SnapVector( pm->ps->velocity );
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 32
ADDP4
ARGP4
ADDRGP4 trap_SnapVector
CALLV
pop
line 5099
;5098:
;5099:	if (gPMDoSlowFall)
ADDRGP4 gPMDoSlowFall
INDIRI4
CNSTI4 0
EQI4 $1865
line 5100
;5100:	{
line 5101
;5101:		pm->ps->gravity *= 2;
ADDRLP4 196
ADDRGP4 pm
INDIRP4
INDIRP4
CNSTI4 56
ADDP4
ASGNP4
ADDRLP4 196
INDIRP4
ADDRLP4 196
INDIRP4
INDIRI4
CNSTI4 1
LSHI4
ASGNI4
line 5102
;5102:	}
LABELV $1865
line 5103
;5103:}
LABELV $1759
endproc PmoveSingle 204 12
export Pmove
proc Pmove 20 4
line 5113
;5104:
;5105:
;5106:/*
;5107:================
;5108:Pmove
;5109:
;5110:Can be called by either the server or the client
;5111:================
;5112:*/
;5113:quat_t *Pmove (pmove_t *pmove) {
line 5116
;5114:	// adnan
;5115:   // hope this works... return an orientation quat and use as axis on server side and viewaxis on client side
;5116:   quat_t *qrot = NULL;
ADDRLP4 4
CNSTP4 0
ASGNP4
line 5120
;5117:
;5118:   int			finalTime;
;5119:
;5120:	finalTime = pmove->cmd.serverTime;
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
ASGNI4
line 5122
;5121:
;5122:	if ( finalTime < pmove->ps->commandTime ) {
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
INDIRP4
INDIRI4
GEI4 $1868
line 5123
;5123:		return NULL;	// should not happen
CNSTP4 0
RETP4
ADDRGP4 $1867
JUMPV
LABELV $1868
line 5127
;5124:      //return; // should not happen
;5125:	}
;5126:
;5127:	if ( finalTime > pmove->ps->commandTime + 1000 ) {
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
INDIRP4
INDIRI4
CNSTI4 1000
ADDI4
LEI4 $1870
line 5128
;5128:		pmove->ps->commandTime = finalTime - 1000;
ADDRFP4 0
INDIRP4
INDIRP4
ADDRLP4 0
INDIRI4
CNSTI4 1000
SUBI4
ASGNI4
line 5129
;5129:	}
LABELV $1870
line 5131
;5130:
;5131:	if (pmove->ps->fallingToDeath)
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 1352
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1872
line 5132
;5132:	{
line 5133
;5133:		pmove->cmd.forwardmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 28
ADDP4
CNSTI1 0
ASGNI1
line 5134
;5134:		pmove->cmd.rightmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 29
ADDP4
CNSTI1 0
ASGNI1
line 5135
;5135:		pmove->cmd.upmove = 0;
ADDRFP4 0
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 0
ASGNI1
line 5136
;5136:		pmove->cmd.buttons = 0;
ADDRFP4 0
INDIRP4
CNSTI4 20
ADDP4
CNSTI4 0
ASGNI4
line 5137
;5137:	}
LABELV $1872
line 5139
;5138:
;5139:	pmove->ps->pmove_framecount = (pmove->ps->pmove_framecount+1) & ((1<<PS_PMOVEFRAMECOUNTBITS)-1);
ADDRLP4 8
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 488
ADDP4
ASGNP4
ADDRLP4 8
INDIRP4
ADDRLP4 8
INDIRP4
INDIRI4
CNSTI4 1
ADDI4
CNSTI4 63
BANDI4
ASGNI4
ADDRGP4 $1875
JUMPV
LABELV $1874
line 5143
;5140:
;5141:	// chop the move up if it is too long, to prevent framerate
;5142:	// dependent behavior
;5143:	while ( pmove->ps->commandTime != finalTime ) {
line 5146
;5144:		int		msec;
;5145:
;5146:		msec = finalTime - pmove->ps->commandTime;
ADDRLP4 12
ADDRLP4 0
INDIRI4
ADDRFP4 0
INDIRP4
INDIRP4
INDIRI4
SUBI4
ASGNI4
line 5148
;5147:
;5148:		if ( pmove->pmove_fixed ) {
ADDRFP4 0
INDIRP4
CNSTI4 232
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1877
line 5149
;5149:			if ( msec > pmove->pmove_msec ) {
ADDRLP4 12
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 236
ADDP4
INDIRI4
LEI4 $1878
line 5150
;5150:				msec = pmove->pmove_msec;
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 236
ADDP4
INDIRI4
ASGNI4
line 5151
;5151:			}
line 5152
;5152:		}
ADDRGP4 $1878
JUMPV
LABELV $1877
line 5153
;5153:		else {
line 5154
;5154:			if ( msec > 66 ) {
ADDRLP4 12
INDIRI4
CNSTI4 66
LEI4 $1881
line 5155
;5155:				msec = 66;
ADDRLP4 12
CNSTI4 66
ASGNI4
line 5156
;5156:			}
LABELV $1881
line 5157
;5157:		}
LABELV $1878
line 5158
;5158:		pmove->cmd.serverTime = pmove->ps->commandTime + msec;
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 16
INDIRP4
INDIRP4
INDIRI4
ADDRLP4 12
INDIRI4
ADDI4
ASGNI4
line 5160
;5159:		//qrot = PmoveSingle( pmove );
;5160:      PmoveSingle( pmove );
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 PmoveSingle
CALLV
pop
line 5162
;5161:
;5162:		if ( pmove->ps->pm_flags & PMF_JUMP_HELD ) {
ADDRFP4 0
INDIRP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 2
BANDI4
CNSTI4 0
EQI4 $1883
line 5163
;5163:			pmove->cmd.upmove = 20;
ADDRFP4 0
INDIRP4
CNSTI4 30
ADDP4
CNSTI1 20
ASGNI1
line 5164
;5164:		}
LABELV $1883
line 5165
;5165:	}
LABELV $1875
line 5143
ADDRFP4 0
INDIRP4
INDIRP4
INDIRI4
ADDRLP4 0
INDIRI4
NEI4 $1874
line 5167
;5166:
;5167:   return qrot;
ADDRLP4 4
INDIRP4
RETP4
LABELV $1867
endproc Pmove 20 4
import Quaternion
import QuaternionIdentity
bss
align 4
LABELV angles_rotated
skip 12
import trap_SnapVector
import PM_SaberInTransition
align 4
LABELV prevangles
skip 384
align 4
LABELV prevq
skip 512
import PM_SetSaberMove
import PM_WeaponLightsaber
import PM_SetAnim
import PM_ForceLegsAnim
import PM_ContinueLegsAnim
import PM_StartTorsoAnim
import BG_CycleInven
import PM_StepSlideMove
import PM_SlideMove
import PM_SaberJumpAttackMove
import PM_SaberFlipOverAttackMove
import PM_SomeoneInFront
import PM_GroundDistance
import PM_AnimLength
import PM_InRollComplete
import PM_InOnGroundAnim
import PM_SpinningAnim
import PM_LandingAnim
import PM_JumpingAnim
import PM_PainAnim
import PM_InKnockDown
import PM_InSaberAnim
import PM_SaberInStart
import PM_SaberInReflect
import PM_SaberInKnockaway
import PM_SaberInParry
import trap_FS_FCloseFile
import trap_FS_Write
import trap_FS_Read
import trap_FS_FOpenFile
export pml
align 4
LABELV pml
skip 1164
import forcePowerDarkLight
import WeaponAttackAnim
import WeaponReadyAnim
import BG_OutOfMemory
import BG_StringAlloc
import BG_TempFree
import BG_TempAlloc
import BG_AllocUnaligned
import BG_Alloc
import BG_CanUseFPNow
import BG_HasYsalamiri
import BG_GetItemIndexByTag
import BG_ParseAnimationFile
import BG_PlayerTouchesItem
import BG_PlayerStateToEntityStateExtraPolate
import BG_PlayerStateToEntityState
import BG_TouchJumpPad
import BG_AddPredictableEventToPlayerstate
import BG_EvaluateTrajectoryDelta
import BG_EvaluateTrajectory
import BG_ForcePowerDrain
import BG_SaberStartTransAnim
import BG_InDeathAnim
import BG_InRoll
import BG_KnockawayForParry
import BG_BrokenParryForParry
import BG_BrokenParryForAttack
import BG_SaberInSpecialAttack
import BG_SpinningSaberAnim
import BG_FlippingAnim
import BG_SaberInIdle
import BG_SaberInSpecial
import BG_SaberInAttack
import BG_DirectFlippingAnim
import BG_InSaberStandAnim
import BG_InSpecialJump
import BG_LegalizedForcePowers
import saberMoveData
import BG_CanItemBeGrabbed
import BG_FindItemForHoldable
import BG_FindItemForPowerup
import BG_FindItemForWeapon
import BG_FindItem
import vectoyaw
import bg_numItems
import bg_itemlist
import PM_CalculateRelativeViewAngles
export pm
align 4
LABELV pm
skip 4
import bgForcePowerCost
import forceMasteryPoints
import forceMasteryLevels
import bgGlobalAnimations
import BGPAFtextLoaded
import forcePowerSorted
import WP_MuzzlePoint
import ammoData
import weaponData
import GetStringForID
import GetIDForString
import Q_irand
import irand
import flrand
import Rand_Init
import Com_Printf
import Com_Error
import Info_NextPair
import Info_Validate
import Info_SetValueForKey_Big
import Info_SetValueForKey
import Info_RemoveKey_big
import Info_RemoveKey
import Info_ValueForKey
import va
import Q_CleanStr
import Q_PrintStrlen
import Q_strcat
import Q_strncpyz
import Q_strrchr
import Q_strupr
import Q_strlwr
import Q_stricmpn
import Q_strncmp
import Q_stricmp
import Q_isalpha
import Q_isupper
import Q_islower
import Q_isprint
import Com_sprintf
import Parse3DMatrix
import Parse2DMatrix
import Parse1DMatrix
import SkipRestOfLine
import SkipBracedSection
import COM_MatchToken
import COM_ParseVec4
import COM_ParseFloat
import COM_ParseInt
import COM_ParseString
import COM_ParseWarning
import COM_ParseError
import COM_Compress
import COM_ParseExt
import COM_Parse
import SkipWhitespace
import COM_GetCurrentParseLine
import COM_BeginParseSession
import COM_DefaultExtension
import COM_StripExtension
import COM_SkipPath
import Com_Clamp
import MatrixToEuler
import QuatToAngles
import QuatMul
import AnglesToQuat
import AxisToQuaternion
import QuaternionToAxis
import QuaternionToEuler
import QuatToAxis
import QuaternionMultiply
import QuaternionNormalize
import QuaternionMagnitude
import QuaternionFromString
import AnglesToTieFloats
import AnglesFromTieFloats
import QuaternionToTieFloats
import QuaternionFromTieFloats
import QuaternionCopy
import PerpendicularVector
import AngleVectors
import RotationMatrixAroundDir
import MatrixMultiply
import MakeNormalVectors
import RotateAroundDirection
import RotatePointAroundVector
import ProjectPointOnPlane
import PlaneFromPoints
import AngleDelta
import AngleNormalize180
import AngleNormalize360
import AnglesSubtract
import AngleSubtract
import LerpAngle
import AngleMod
import BoxOnPlaneSide
import SetPlaneSignbits
import AxisCopy
import AxisClear
import AnglesToAxis
import vectoangles
import Q_crandom
import Q_random
import Q_rand
import Q_acos
import Q_log2
import VectorRotate
import Vector4Scale
import VectorNormalize2
import VectorNormalize
import CrossProduct
import VectorInverse
import VectorNormalizeFast
import DistanceSquared
import Distance
import VectorLengthSquared
import VectorLength
import VectorCompare
import AddPointToBounds
import ClearBounds
import RadiusFromBounds
import NormalizeColor
import ColorBytes4
import ColorBytes3
import _VectorMA
import _VectorScale
import _VectorCopy
import _VectorAdd
import _VectorSubtract
import _DotProduct
import ByteToDir
import DirToByte
import powf
import ClampShort
import ClampChar
import Q_rsqrt
import Q_fabs
import axisDefault
import vec3_origin
import g_color_table
import colorDkBlue
import colorLtBlue
import colorDkGrey
import colorMdGrey
import colorLtGrey
import colorWhite
import colorCyan
import colorMagenta
import colorYellow
import colorBlue
import colorGreen
import colorRed
import colorBlack
import colorTable
import bytedirs
import Com_Memcpy
import Com_Memset
import Hunk_Alloc
import 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 $1009
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 $998
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 $987
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 $940
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 $910
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
