data
export saberSpinSound
align 4
LABELV saberSpinSound
byte 4 0
export saberOffSound
align 4
LABELV saberOffSound
byte 4 0
export saberOnSound
align 4
LABELV saberOnSound
byte 4 0
export saberHumSound
align 4
LABELV saberHumSound
byte 4 0
export RandFloat
code
proc RandFloat 8 0
file "../w_saber.c"
line 23
;1:#include "g_local.h"
;2:#include "bg_local.h" //Only because we use PM_SetAnim here once.
;3:#include "w_saber.h"
;4:#include "ai_main.h"
;5:#include "..\ghoul2\g2.h"
;6:
;7:#define SABER_BOX_SIZE 16.0f
;8:
;9:extern bot_state_t *botstates[MAX_CLIENTS];
;10:extern qboolean InFront( vec3_t spot, vec3_t from, vec3_t fromAngles, float threshHold );
;11:
;12:int saberSpinSound = 0;
;13:int saberOffSound = 0;
;14:int saberOnSound = 0;
;15:int saberHumSound = 0;
;16:
;17://would be cleaner if these were renamed to BG_ and proto'd in a header.
;18:qboolean PM_SaberInTransition( int move );
;19:qboolean PM_SaberInDeflect( int move );
;20:qboolean PM_SaberInBrokenParry( int move );
;21:qboolean PM_SaberInBounce( int move );
;22:
;23:float RandFloat(float min, float max) {
line 24
;24:	return ((rand() * (max - min)) / 32768.0F) + min;
ADDRLP4 0
ADDRGP4 rand
CALLI4
ASGNI4
ADDRLP4 4
ADDRFP4 0
INDIRF4
ASGNF4
ADDRLP4 0
INDIRI4
CVIF4 4
ADDRFP4 4
INDIRF4
ADDRLP4 4
INDIRF4
SUBF4
MULF4
CNSTF4 1191182336
DIVF4
ADDRLP4 4
INDIRF4
ADDF4
RETF4
LABELV $94
endproc RandFloat 8 0
export SaberUpdateSelf
proc SaberUpdateSelf 20 4
line 68
;25:}
;26:
;27://#define DEBUG_SABER_BOX
;28:
;29:#ifdef DEBUG_SABER_BOX
;30:void	G_DebugBoxLines(vec3_t mins, vec3_t maxs, int duration)
;31:{
;32:	vec3_t start;
;33:	vec3_t end;
;34:
;35:	float x = maxs[0] - mins[0];
;36:	float y = maxs[1] - mins[1];
;37:
;38:	// top of box
;39:	VectorCopy(maxs, start);
;40:	VectorCopy(maxs, end);
;41:	start[0] -= x;
;42:	G_TestLine(start, end, 0x00000ff, duration);
;43:	end[0] = start[0];
;44:	end[1] -= y;
;45:	G_TestLine(start, end, 0x00000ff, duration);
;46:	start[1] = end[1];
;47:	start[0] += x;
;48:	G_TestLine(start, end, 0x00000ff, duration);
;49:	G_TestLine(start, maxs, 0x00000ff, duration);
;50:	// bottom of box
;51:	VectorCopy(mins, start);
;52:	VectorCopy(mins, end);
;53:	start[0] += x;
;54:	G_TestLine(start, end, 0x00000ff, duration);
;55:	end[0] = start[0];
;56:	end[1] += y;
;57:	G_TestLine(start, end, 0x00000ff, duration);
;58:	start[1] = end[1];
;59:	start[0] -= x;
;60:	G_TestLine(start, end, 0x00000ff, duration);
;61:	G_TestLine(start, mins, 0x00000ff, duration);
;62:}
;63:#endif
;64:
;65:#define PROPER_THROWN_VALUE 999 //Ah, well.. 
;66:
;67:void SaberUpdateSelf(gentity_t *ent)
;68:{
line 69
;69:	if (ent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $96
line 70
;70:	{
line 71
;71:		ent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 72
;72:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 73
;73:		return;
ADDRGP4 $95
JUMPV
LABELV $96
line 76
;74:	}
;75:
;76:	if (!g_entities[ent->r.ownerNum].inuse ||
ADDRLP4 0
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 0
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $105
ADDRLP4 0
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $105
ADDRLP4 0
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
CNSTI4 3
NEI4 $99
LABELV $105
line 79
;77:		!g_entities[ent->r.ownerNum].client ||
;78:		g_entities[ent->r.ownerNum].client->sess.sessionTeam == TEAM_SPECTATOR)
;79:	{
line 80
;80:		ent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 81
;81:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 82
;82:		return;
ADDRGP4 $95
JUMPV
LABELV $99
line 85
;83:	}
;84:
;85:	if (g_entities[ent->r.ownerNum].client->ps.saberInFlight && g_entities[ent->r.ownerNum].health > 0)
ADDRLP4 4
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 8
CNSTI4 0
ASGNI4
ADDRLP4 4
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
EQI4 $107
ADDRLP4 4
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
LEI4 $107
line 86
;86:	{ //let The Master take care of us now (we'll get treated like a missile until we return)
line 87
;87:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 88
;88:		ent->bolt_Head = PROPER_THROWN_VALUE;
ADDRFP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 999
ASGNI4
line 89
;89:		return;
ADDRGP4 $95
JUMPV
LABELV $107
line 92
;90:	}
;91:
;92:	ent->bolt_Head = 0;
ADDRFP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 94
;93:
;94:	if (g_entities[ent->r.ownerNum].client->ps.usingATST)
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $112
line 95
;95:	{ //using atst
line 96
;96:		ent->r.contents = 0;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 0
ASGNI4
line 97
;97:		ent->clipmask = 0;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 0
ASGNI4
line 98
;98:	}
ADDRGP4 $113
JUMPV
LABELV $112
line 99
;99:	else if (g_entities[ent->r.ownerNum].client->ps.weapon != WP_SABER ||
ADDRLP4 12
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $125
ADDRLP4 16
CNSTI4 0
ASGNI4
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 12
ADDP4
INDIRI4
CNSTI4 4096
BANDI4
ADDRLP4 16
INDIRI4
NEI4 $125
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
CNSTI4 1
LTI4 $125
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1312
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $125
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1004
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $115
LABELV $125
line 104
;100:		(g_entities[ent->r.ownerNum].client->ps.pm_flags & PMF_FOLLOW) ||
;101:		g_entities[ent->r.ownerNum].health < 1 ||
;102:		g_entities[ent->r.ownerNum].client->ps.saberHolstered ||
;103:		!g_entities[ent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK])
;104:	{ //owner is not using saber, spectating, dead, saber holstered, or has no attack level
line 105
;105:		ent->r.contents = 0;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 0
ASGNI4
line 106
;106:		ent->clipmask = 0;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 0
ASGNI4
line 107
;107:	}
ADDRGP4 $116
JUMPV
LABELV $115
line 109
;108:	else
;109:	{ //Standard contents (saber is active)
line 123
;110:#ifdef DEBUG_SABER_BOX
;111:		vec3_t dbgMins;
;112:		vec3_t dbgMaxs;
;113:
;114:		if (ent->r.ownerNum == 0)
;115:		{
;116:			VectorAdd( ent->r.currentOrigin, ent->r.mins, dbgMins );
;117:			VectorAdd( ent->r.currentOrigin, ent->r.maxs, dbgMaxs );
;118:
;119:			G_DebugBoxLines(dbgMins, dbgMaxs, 100);
;120:		}
;121:#endif
;122:
;123:		ent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 124
;124:		ent->clipmask = MASK_PLAYERSOLID | CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 262417
ASGNI4
line 125
;125:	}
LABELV $116
LABELV $113
line 127
;126:
;127:	trap_LinkEntity(ent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 129
;128:
;129:	ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 130
;130:}
LABELV $95
endproc SaberUpdateSelf 20 4
export SaberGotHit
proc SaberGotHit 12 0
line 133
;131:
;132:void SaberGotHit( gentity_t *self, gentity_t *other, trace_t *trace )
;133:{
line 134
;134:	gentity_t *own = &g_entities[self->r.ownerNum];
ADDRLP4 0
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 136
;135:
;136:	if (!own || !own->client)
ADDRLP4 8
CNSTU4 0
ASGNU4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
EQU4 $130
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
NEU4 $128
LABELV $130
line 137
;137:	{
line 138
;138:		return;
LABELV $128
line 142
;139:	}
;140:
;141:	//Do something here..? Was handling projectiles here, but instead they're now handled in their own functions.
;142:}
LABELV $127
endproc SaberGotHit 12 0
export WP_SaberInitBladeData
proc WP_SaberInitBladeData 32 4
line 145
;143:
;144:void WP_SaberInitBladeData( gentity_t *ent )
;145:{
line 150
;146:	gentity_t *saberent;
;147:
;148:	//We do not want the client to have any real knowledge of the entity whatsoever. It will only
;149:	//ever be used on the server.
;150:	saberent = G_Spawn();
ADDRLP4 4
ADDRGP4 G_Spawn
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 4
INDIRP4
ASGNP4
line 151
;151:	ent->client->ps.saberEntityNum = saberent->s.number;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
ADDRLP4 0
INDIRP4
INDIRI4
ASGNI4
line 152
;152:	saberent->classname = "lightsaber";
ADDRLP4 0
INDIRP4
CNSTI4 416
ADDP4
ADDRGP4 $132
ASGNP4
line 154
;153:			
;154:	saberent->r.svFlags = SVF_USE_CURRENT_ORIGIN;
ADDRLP4 0
INDIRP4
CNSTI4 304
ADDP4
CNSTI4 128
ASGNI4
line 155
;155:	saberent->r.ownerNum = ent->s.number;
ADDRLP4 0
INDIRP4
CNSTI4 396
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 157
;156:
;157:	saberent->clipmask = MASK_PLAYERSOLID | CONTENTS_LIGHTSABER;
ADDRLP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 262417
ASGNI4
line 158
;158:	saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 160
;159:
;160:	VectorSet( saberent->r.mins, -SABER_BOX_SIZE, -SABER_BOX_SIZE, -SABER_BOX_SIZE );
ADDRLP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3246391296
ASGNF4
line 161
;161:	VectorSet( saberent->r.maxs, SABER_BOX_SIZE, SABER_BOX_SIZE, SABER_BOX_SIZE );
ADDRLP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1098907648
ASGNF4
line 163
;162:
;163:	saberent->mass = 10;
ADDRLP4 0
INDIRP4
CNSTI4 624
ADDP4
CNSTF4 1092616192
ASGNF4
line 165
;164:
;165:	saberent->s.eFlags |= EF_NODRAW;
ADDRLP4 8
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
ASGNP4
ADDRLP4 8
INDIRP4
ADDRLP4 8
INDIRP4
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 166
;166:	saberent->r.svFlags |= SVF_NOCLIENT;
ADDRLP4 12
ADDRLP4 0
INDIRP4
CNSTI4 304
ADDP4
ASGNP4
ADDRLP4 12
INDIRP4
ADDRLP4 12
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 168
;167:
;168:	saberent->touch = SaberGotHit;
ADDRLP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 170
;169:
;170:	saberent->think = SaberUpdateSelf;
ADDRLP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 171
;171:	saberent->bolt_Head = 0;
ADDRLP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 172
;172:	saberent->nextthink = level.time + 50;
ADDRLP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
ASGNI4
line 174
;173:
;174:	saberSpinSound = G_SoundIndex("sound/weapons/saber/saberspin.wav");
ADDRGP4 $134
ARGP4
ADDRLP4 16
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberSpinSound
ADDRLP4 16
INDIRI4
ASGNI4
line 175
;175:	saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav");
ADDRGP4 $135
ARGP4
ADDRLP4 20
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberOffSound
ADDRLP4 20
INDIRI4
ASGNI4
line 176
;176:	saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav");
ADDRGP4 $136
ARGP4
ADDRLP4 24
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberOnSound
ADDRLP4 24
INDIRI4
ASGNI4
line 177
;177:	saberHumSound = G_SoundIndex("sound/weapons/saber/saberhum1.wav");
ADDRGP4 $137
ARGP4
ADDRLP4 28
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberHumSound
ADDRLP4 28
INDIRI4
ASGNI4
line 178
;178:}
LABELV $131
endproc WP_SaberInitBladeData 32 4
export G_G2ClientSpineAngles
proc G_G2ClientSpineAngles 152 36
line 182
;179:
;180://NOTE: If C` is modified this function should be modified as well (and vice versa)
;181:void G_G2ClientSpineAngles( gentity_t *ent, vec3_t viewAngles, const vec3_t angles, vec3_t thoracicAngles, vec3_t ulAngles, vec3_t llAngles )
;182:{
line 183
;183:	viewAngles[YAW] = AngleDelta( ent->client->ps.viewangles[YAW], angles[YAW] );
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ARGF4
ADDRLP4 0
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 0
INDIRI4
ADDP4
INDIRF4
ARGF4
ADDRLP4 4
ADDRGP4 AngleDelta
CALLF4
ASGNF4
ADDRFP4 4
INDIRP4
ADDRLP4 0
INDIRI4
ADDP4
ADDRLP4 4
INDIRF4
ASGNF4
line 185
;184:
;185:	if ( !BG_FlippingAnim( ent->client->ps.legsAnim ) 
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 BG_FlippingAnim
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
NEI4 $139
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 12
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 12
INDIRI4
CNSTI4 0
NEI4 $139
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
NEI4 $139
ADDRLP4 20
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 20
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ADDRLP4 20
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
EQI4 $139
line 189
;186:		&& !BG_SpinningSaberAnim( ent->client->ps.legsAnim ) 
;187:		&& !BG_SpinningSaberAnim( ent->client->ps.torsoAnim )
;188:		&& ent->client->ps.legsAnim != ent->client->ps.torsoAnim )//NOTE: presumes your legs & torso are on the same frame, though they *should* be because PM_SetAnimFinal tries to keep them in synch
;189:	{//FIXME: no need to do this if legs and torso on are same frame
line 196
;190:		//adjust for motion offset
;191:		mdxaBone_t	boltMatrix;
;192:		vec3_t		motionFwd, motionAngles;
;193:		vec3_t		motionRt, tempAng;
;194:		int			ang;
;195:
;196:		trap_G2API_GetBoltMatrix_NoRecNoRot( ent->client->ghoul2, 0, ent->bolt_Motion, &boltMatrix, vec3_origin, ent->client->ps.origin, level.time, /*cgs.gameModels*/0, vec3_origin);
ADDRLP4 124
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 128
ADDRLP4 124
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 128
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 124
INDIRP4
CNSTI4 808
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
ARGP4
ADDRLP4 132
ADDRGP4 vec3_origin
ASGNP4
ADDRLP4 132
INDIRP4
ARGP4
ADDRLP4 128
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTP4 0
ARGP4
ADDRLP4 132
INDIRP4
ARGP4
ADDRGP4 trap_G2API_GetBoltMatrix_NoRecNoRot
CALLI4
pop
line 198
;197:		//trap_G2API_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_Y, motionFwd );
;198:		motionFwd[0] = -boltMatrix.matrix[0][1];
ADDRLP4 88
ADDRLP4 28+4
INDIRF4
NEGF4
ASGNF4
line 199
;199:		motionFwd[1] = -boltMatrix.matrix[1][1];
ADDRLP4 88+4
ADDRLP4 28+16+4
INDIRF4
NEGF4
ASGNF4
line 200
;200:		motionFwd[2] = -boltMatrix.matrix[2][1];
ADDRLP4 88+8
ADDRLP4 28+32+4
INDIRF4
NEGF4
ASGNF4
line 202
;201:
;202:		vectoangles( motionFwd, motionAngles );
ADDRLP4 88
ARGP4
ADDRLP4 76
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 205
;203:
;204:		//trap_G2API_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_X, motionRt );
;205:		motionRt[0] = -boltMatrix.matrix[0][0];
ADDRLP4 100
ADDRLP4 28
INDIRF4
NEGF4
ASGNF4
line 206
;206:		motionRt[1] = -boltMatrix.matrix[1][0];
ADDRLP4 100+4
ADDRLP4 28+16
INDIRF4
NEGF4
ASGNF4
line 207
;207:		motionRt[2] = -boltMatrix.matrix[2][0];
ADDRLP4 100+8
ADDRLP4 28+32
INDIRF4
NEGF4
ASGNF4
line 208
;208:		vectoangles( motionRt, tempAng );
ADDRLP4 100
ARGP4
ADDRLP4 112
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 209
;209:		motionAngles[ROLL] = -tempAng[PITCH];
ADDRLP4 76+8
ADDRLP4 112
INDIRF4
NEGF4
ASGNF4
line 213
;210:
;211:		// adnan
;212:      // what happens if we dont do this?
;213:      for ( ang = 0; ang < 3; ang++ )
ADDRLP4 24
CNSTI4 0
ASGNI4
LABELV $154
line 214
;214:		{
line 216
;215:			// this is where i dont let it happen to pitch...
;216:         if(ang != PITCH)
ADDRLP4 24
INDIRI4
CNSTI4 0
EQI4 $158
line 217
;217:            viewAngles[ang] = AngleNormalize180( viewAngles[ang] - AngleNormalize180( motionAngles[ang] ) );
ADDRLP4 136
ADDRLP4 24
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 136
INDIRI4
ADDRLP4 76
ADDP4
INDIRF4
ARGF4
ADDRLP4 140
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 144
ADDRLP4 136
INDIRI4
ADDRFP4 4
INDIRP4
ADDP4
ASGNP4
ADDRLP4 144
INDIRP4
INDIRF4
ADDRLP4 140
INDIRF4
SUBF4
ARGF4
ADDRLP4 148
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 144
INDIRP4
ADDRLP4 148
INDIRF4
ASGNF4
LABELV $158
line 218
;218:		}
LABELV $155
line 213
ADDRLP4 24
ADDRLP4 24
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 24
INDIRI4
CNSTI4 3
LTI4 $154
line 220
;219:      
;220:	}
LABELV $139
line 223
;221:	//distribute the angles differently up the spine
;222:	//NOTE: each of these distributions must add up to 1.0f
;223:	thoracicAngles[PITCH] = viewAngles[PITCH]*0.20f;
ADDRFP4 12
INDIRP4
CNSTF4 1045220557
ADDRFP4 4
INDIRP4
INDIRF4
MULF4
ASGNF4
line 224
;224:	llAngles[PITCH] = viewAngles[PITCH]*0.40f;
ADDRFP4 20
INDIRP4
CNSTF4 1053609165
ADDRFP4 4
INDIRP4
INDIRF4
MULF4
ASGNF4
line 225
;225:	ulAngles[PITCH] = viewAngles[PITCH]*0.40f;
ADDRFP4 16
INDIRP4
CNSTF4 1053609165
ADDRFP4 4
INDIRP4
INDIRF4
MULF4
ASGNF4
line 227
;226:
;227:	thoracicAngles[YAW] = viewAngles[YAW]*0.20f;
ADDRLP4 24
CNSTI4 4
ASGNI4
ADDRFP4 12
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
CNSTF4 1045220557
ADDRFP4 4
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 228
;228:	ulAngles[YAW] = viewAngles[YAW]*0.35f;
ADDRLP4 28
CNSTI4 4
ASGNI4
ADDRFP4 16
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
CNSTF4 1051931443
ADDRFP4 4
INDIRP4
ADDRLP4 28
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 229
;229:	llAngles[YAW] = viewAngles[YAW]*0.45f;
ADDRLP4 32
CNSTI4 4
ASGNI4
ADDRFP4 20
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
CNSTF4 1055286886
ADDRFP4 4
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 231
;230:
;231:	thoracicAngles[ROLL] = viewAngles[ROLL]*0.20f;
ADDRLP4 36
CNSTI4 8
ASGNI4
ADDRFP4 12
INDIRP4
ADDRLP4 36
INDIRI4
ADDP4
CNSTF4 1045220557
ADDRFP4 4
INDIRP4
ADDRLP4 36
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 232
;232:	ulAngles[ROLL] = viewAngles[ROLL]*0.35f;
ADDRLP4 40
CNSTI4 8
ASGNI4
ADDRFP4 16
INDIRP4
ADDRLP4 40
INDIRI4
ADDP4
CNSTF4 1051931443
ADDRFP4 4
INDIRP4
ADDRLP4 40
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 233
;233:	llAngles[ROLL] = viewAngles[ROLL]*0.45f;
ADDRLP4 44
CNSTI4 8
ASGNI4
ADDRFP4 20
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
CNSTF4 1055286886
ADDRFP4 4
INDIRP4
ADDRLP4 44
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 234
;234:}
LABELV $138
endproc G_G2ClientSpineAngles 152 36
data
align 4
LABELV $161
byte 4 0
byte 4 22
byte 4 45
byte 4 -22
byte 4 0
byte 4 22
byte 4 -45
byte 4 -22
lit
align 4
LABELV $162
byte 4 0
byte 4 0
byte 4 0
export G_G2PlayerAngles
code
proc G_G2PlayerAngles 232 44
line 236
;235:
;236:void G_G2PlayerAngles( gentity_t *ent, vec3_t legs[3], vec3_t legsAngles){
line 244
;237:	vec3_t		torsoAngles, headAngles;
;238:	float		dest;
;239:	static	int	movementOffsets[8] = { 0, 22, 45, -22, 0, 22, -45, -22 };
;240:	vec3_t		velocity;
;241:	float		speed;
;242:	int			dir;
;243:	vec3_t		velPos, velAng;
;244:	int			adddir = 0;
ADDRLP4 104
CNSTI4 0
ASGNI4
line 246
;245:	float		dif;
;246:	float		degrees_negative = 0;
ADDRLP4 96
CNSTF4 0
ASGNF4
line 247
;247:	float		degrees_positive = 0;
ADDRLP4 100
CNSTF4 0
ASGNF4
line 248
;248:	qboolean	yawing = qfalse;
ADDRLP4 144
CNSTI4 0
ASGNI4
line 249
;249:	vec3_t		ulAngles, llAngles, viewAngles, angles, thoracicAngles = {0,0,0};
ADDRLP4 84
ADDRGP4 $162
INDIRB
ASGNB 12
line 251
;250:
;251:	VectorCopy( ent->client->ps.viewangles, headAngles );
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 252
;252:	headAngles[YAW] = AngleMod( headAngles[YAW] );
ADDRLP4 12+4
INDIRF4
ARGF4
ADDRLP4 152
ADDRGP4 AngleMod
CALLF4
ASGNF4
ADDRLP4 12+4
ADDRLP4 152
INDIRF4
ASGNF4
line 253
;253:	VectorClear( legsAngles );
ADDRLP4 156
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 160
CNSTF4 0
ASGNF4
ADDRLP4 156
INDIRP4
CNSTI4 8
ADDP4
ADDRLP4 160
INDIRF4
ASGNF4
ADDRLP4 156
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 160
INDIRF4
ASGNF4
ADDRLP4 156
INDIRP4
ADDRLP4 160
INDIRF4
ASGNF4
line 254
;254:	VectorClear( torsoAngles );
ADDRLP4 164
CNSTF4 0
ASGNF4
ADDRLP4 0+8
ADDRLP4 164
INDIRF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 164
INDIRF4
ASGNF4
ADDRLP4 0
ADDRLP4 164
INDIRF4
ASGNF4
line 259
;255:
;256:	// --------- yaw -------------
;257:
;258:	// allow yaw to drift a bit
;259:	if ((( ent->s.legsAnim & ~ANIM_TOGGLEBIT ) != BOTH_STAND1) || 
ADDRLP4 168
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 172
CNSTI4 -2049
ASGNI4
ADDRLP4 168
INDIRP4
CNSTI4 280
ADDP4
INDIRI4
ADDRLP4 172
INDIRI4
BANDI4
CNSTI4 571
NEI4 $169
ADDRLP4 168
INDIRP4
CNSTI4 284
ADDP4
INDIRI4
ADDRLP4 172
INDIRI4
BANDI4
ADDRLP4 168
INDIRP4
CNSTI4 276
ADDP4
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 WeaponReadyAnim
ADDP4
INDIRI4
EQI4 $167
LABELV $169
line 261
;260:			( ent->s.torsoAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[ent->s.weapon]  ) 
;261:	{
line 262
;262:		yawing = qtrue;
ADDRLP4 144
CNSTI4 1
ASGNI4
line 263
;263:	}
LABELV $167
line 266
;264:
;265:	// adjust legs for movement dir
;266:	dir = ent->s.angles2[YAW];
ADDRLP4 72
ADDRFP4 0
INDIRP4
CNSTI4 132
ADDP4
INDIRF4
CVFI4 4
ASGNI4
line 267
;267:	if ( dir < 0 || dir > 7 ) {
ADDRLP4 72
INDIRI4
CNSTI4 0
LTI4 $172
ADDRLP4 72
INDIRI4
CNSTI4 7
LEI4 $170
LABELV $172
line 268
;268:		return;
ADDRGP4 $160
JUMPV
LABELV $170
line 271
;269:	}
;270:
;271:	torsoAngles[YAW] = headAngles[YAW] + 0.25 * movementOffsets[ dir ];
ADDRLP4 0+4
ADDRLP4 12+4
INDIRF4
CNSTF4 1048576000
ADDRLP4 72
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $161
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
ASGNF4
line 276
;272:
;273:	// --------- pitch -------------
;274:
;275:	// only show a fraction of the pitch angle in the torso
;276:	if ( headAngles[PITCH] > 180 ) {
ADDRLP4 12
INDIRF4
CNSTF4 1127481344
LEF4 $175
line 277
;277:		dest = (-360 + headAngles[PITCH]) * 0.75;
ADDRLP4 148
CNSTF4 1061158912
ADDRLP4 12
INDIRF4
CNSTF4 3283353600
ADDF4
MULF4
ASGNF4
line 278
;278:	} else {
ADDRGP4 $176
JUMPV
LABELV $175
line 279
;279:		dest = headAngles[PITCH] * 0.75;
ADDRLP4 148
CNSTF4 1061158912
ADDRLP4 12
INDIRF4
MULF4
ASGNF4
line 280
;280:	}
LABELV $176
line 282
;281:
;282:	torsoAngles[PITCH] = ent->client->ps.viewangles[PITCH];
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRF4
ASGNF4
line 288
;283:
;284:	// --------- roll -------------
;285:
;286:
;287:	// lean towards the direction of travel
;288:	VectorCopy( ent->s.pos.trDelta, velocity );
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
INDIRB
ASGNB 12
line 289
;289:	speed = VectorNormalize( velocity );
ADDRLP4 24
ARGP4
ADDRLP4 180
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 76
ADDRLP4 180
INDIRF4
ASGNF4
line 291
;290:
;291:	if ( speed ) {
ADDRLP4 76
INDIRF4
CNSTF4 0
EQF4 $177
line 295
;292:		vec3_t	axis[3];
;293:		float	side;
;294:
;295:		speed *= 0.05;
ADDRLP4 76
CNSTF4 1028443341
ADDRLP4 76
INDIRF4
MULF4
ASGNF4
line 297
;296:
;297:		AnglesToAxis( legsAngles, axis );
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 184
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 298
;298:		side = speed * DotProduct( velocity, axis[1] );
ADDRLP4 220
ADDRLP4 76
INDIRF4
ADDRLP4 24
INDIRF4
ADDRLP4 184+12
INDIRF4
MULF4
ADDRLP4 24+4
INDIRF4
ADDRLP4 184+12+4
INDIRF4
MULF4
ADDF4
ADDRLP4 24+8
INDIRF4
ADDRLP4 184+12+8
INDIRF4
MULF4
ADDF4
MULF4
ASGNF4
line 299
;299:		legsAngles[ROLL] -= side;
ADDRLP4 224
ADDRFP4 8
INDIRP4
CNSTI4 8
ADDP4
ASGNP4
ADDRLP4 224
INDIRP4
ADDRLP4 224
INDIRP4
INDIRF4
ADDRLP4 220
INDIRF4
SUBF4
ASGNF4
line 301
;300:
;301:		side = speed * DotProduct( velocity, axis[0] );
ADDRLP4 220
ADDRLP4 76
INDIRF4
ADDRLP4 24
INDIRF4
ADDRLP4 184
INDIRF4
MULF4
ADDRLP4 24+4
INDIRF4
ADDRLP4 184+4
INDIRF4
MULF4
ADDF4
ADDRLP4 24+8
INDIRF4
ADDRLP4 184+8
INDIRF4
MULF4
ADDF4
MULF4
ASGNF4
line 302
;302:		legsAngles[PITCH] += side;
ADDRLP4 228
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 228
INDIRP4
ADDRLP4 228
INDIRP4
INDIRF4
ADDRLP4 220
INDIRF4
ADDF4
ASGNF4
line 303
;303:	}
LABELV $177
line 306
;304:
;305:	//rww - crazy velocity-based leg angle calculation
;306:	legsAngles[YAW] = headAngles[YAW];
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 12+4
INDIRF4
ASGNF4
line 307
;307:	velPos[0] = ent->client->ps.origin[0] + velocity[0];
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 24
INDIRF4
ADDF4
ASGNF4
line 308
;308:	velPos[1] = ent->client->ps.origin[1] + velocity[1];
ADDRLP4 36+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 24+4
INDIRF4
ADDF4
ASGNF4
line 309
;309:	velPos[2] = ent->client->ps.origin[2] + velocity[2];
ADDRLP4 36+8
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 24+8
INDIRF4
ADDF4
ASGNF4
line 311
;310:
;311:	if (ent->client->ps.groundEntityNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $195
line 312
;312:	{ //off the ground, no direction-based leg angles
line 313
;313:		VectorCopy(ent->client->ps.origin, velPos);
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 314
;314:	}
LABELV $195
line 316
;315:
;316:	VectorSubtract(ent->client->ps.origin, velPos, velAng);
ADDRLP4 184
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
ASGNP4
ADDRLP4 48
ADDRLP4 184
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 36
INDIRF4
SUBF4
ASGNF4
ADDRLP4 48+4
ADDRLP4 184
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 36+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 48+8
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRLP4 36+8
INDIRF4
SUBF4
ASGNF4
line 318
;317:
;318:	if (!VectorCompare(velAng, vec3_origin))
ADDRLP4 48
ARGP4
ADDRGP4 vec3_origin
ARGP4
ADDRLP4 188
ADDRGP4 VectorCompare
CALLI4
ASGNI4
ADDRLP4 188
INDIRI4
CNSTI4 0
NEI4 $201
line 319
;319:	{
line 320
;320:		vectoangles(velAng, velAng);
ADDRLP4 48
ARGP4
ADDRLP4 48
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 322
;321:
;322:		if (velAng[YAW] <= legsAngles[YAW])
ADDRLP4 48+4
INDIRF4
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
GTF4 $203
line 323
;323:		{
line 324
;324:			degrees_negative = (legsAngles[YAW] - velAng[YAW]);
ADDRLP4 96
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
ADDRLP4 48+4
INDIRF4
SUBF4
ASGNF4
line 325
;325:			degrees_positive = (360 - legsAngles[YAW]) + velAng[YAW];
ADDRLP4 100
CNSTF4 1135869952
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
SUBF4
ADDRLP4 48+4
INDIRF4
ADDF4
ASGNF4
line 326
;326:		}
ADDRGP4 $204
JUMPV
LABELV $203
line 328
;327:		else
;328:		{
line 329
;329:			degrees_negative = legsAngles[YAW] + (360 - velAng[YAW]);
ADDRLP4 96
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 1135869952
ADDRLP4 48+4
INDIRF4
SUBF4
ADDF4
ASGNF4
line 330
;330:			degrees_positive = (velAng[YAW] - legsAngles[YAW]);
ADDRLP4 100
ADDRLP4 48+4
INDIRF4
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 331
;331:		}
LABELV $204
line 333
;332:
;333:		if (degrees_negative < degrees_positive)
ADDRLP4 96
INDIRF4
ADDRLP4 100
INDIRF4
GEF4 $210
line 334
;334:		{
line 335
;335:			dif = degrees_negative;
ADDRLP4 80
ADDRLP4 96
INDIRF4
ASGNF4
line 336
;336:			adddir = 0;
ADDRLP4 104
CNSTI4 0
ASGNI4
line 337
;337:		}
ADDRGP4 $211
JUMPV
LABELV $210
line 339
;338:		else
;339:		{
line 340
;340:			dif = degrees_positive;
ADDRLP4 80
ADDRLP4 100
INDIRF4
ASGNF4
line 341
;341:			adddir = 1;
ADDRLP4 104
CNSTI4 1
ASGNI4
line 342
;342:		}
LABELV $211
line 344
;343:
;344:		if (dif > 90)
ADDRLP4 80
INDIRF4
CNSTF4 1119092736
LEF4 $212
line 345
;345:		{
line 346
;346:			dif = (180 - dif);
ADDRLP4 80
CNSTF4 1127481344
ADDRLP4 80
INDIRF4
SUBF4
ASGNF4
line 347
;347:		}
LABELV $212
line 349
;348:
;349:		if (dif > 60)
ADDRLP4 80
INDIRF4
CNSTF4 1114636288
LEF4 $214
line 350
;350:		{
line 351
;351:			dif = 60;
ADDRLP4 80
CNSTF4 1114636288
ASGNF4
line 352
;352:		}
LABELV $214
line 355
;353:
;354:		//Slight hack for when playing is running backward
;355:		if (dir == 3 || dir == 5)
ADDRLP4 72
INDIRI4
CNSTI4 3
EQI4 $218
ADDRLP4 72
INDIRI4
CNSTI4 5
NEI4 $216
LABELV $218
line 356
;356:		{
line 357
;357:			dif = -dif;
ADDRLP4 80
ADDRLP4 80
INDIRF4
NEGF4
ASGNF4
line 358
;358:		}
LABELV $216
line 360
;359:
;360:		if (adddir)
ADDRLP4 104
INDIRI4
CNSTI4 0
EQI4 $219
line 361
;361:		{
line 362
;362:			legsAngles[YAW] -= dif;
ADDRLP4 196
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 196
INDIRP4
ADDRLP4 196
INDIRP4
INDIRF4
ADDRLP4 80
INDIRF4
SUBF4
ASGNF4
line 363
;363:		}
ADDRGP4 $220
JUMPV
LABELV $219
line 365
;364:		else
;365:		{
line 366
;366:			legsAngles[YAW] += dif;
ADDRLP4 196
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 196
INDIRP4
ADDRLP4 196
INDIRP4
INDIRF4
ADDRLP4 80
INDIRF4
ADDF4
ASGNF4
line 367
;367:		}
LABELV $220
line 368
;368:	}
LABELV $201
line 370
;369:
;370:	legsAngles[YAW] = ent->client->ps.viewangles[YAW];
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 372
;371:
;372:	legsAngles[ROLL] = 0;
ADDRFP4 8
INDIRP4
CNSTI4 8
ADDP4
CNSTF4 0
ASGNF4
line 373
;373:	torsoAngles[ROLL] = 0;
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 376
;374:
;375:	// pull the angles back out of the hierarchial chain
;376:	AnglesSubtract( headAngles, torsoAngles, headAngles );
ADDRLP4 12
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 12
ARGP4
ADDRGP4 AnglesSubtract
CALLV
pop
line 377
;377:	AnglesSubtract( torsoAngles, legsAngles, torsoAngles );
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRGP4 AnglesSubtract
CALLV
pop
line 378
;378:	AnglesToAxis( legsAngles, legs );
ADDRFP4 8
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 381
;379:	// we assume that model 0 is the player model.
;380:
;381:	VectorCopy( ent->client->ps.viewangles, viewAngles );
ADDRLP4 60
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 383
;382:
;383:	if (viewAngles[PITCH] > 290)
ADDRLP4 60
INDIRF4
CNSTF4 1133576192
LEF4 $222
line 384
;384:	{ //keep the same general range as lerpAngles on the client so we can use the same spine correction
line 388
;385:		// adnan
;386:      // what happens if we dont do this...
;387:      //viewAngles[PITCH] -= 360;
;388:	}
LABELV $222
line 390
;389:
;390:	viewAngles[YAW] = viewAngles[ROLL] = 0;
ADDRLP4 192
CNSTF4 0
ASGNF4
ADDRLP4 60+8
ADDRLP4 192
INDIRF4
ASGNF4
ADDRLP4 60+4
ADDRLP4 192
INDIRF4
ASGNF4
line 391
;391:	viewAngles[PITCH] *= 0.5;
ADDRLP4 60
CNSTF4 1056964608
ADDRLP4 60
INDIRF4
MULF4
ASGNF4
line 393
;392:
;393:	VectorCopy(legsAngles, angles);
ADDRLP4 132
ADDRFP4 8
INDIRP4
INDIRB
ASGNB 12
line 395
;394:
;395:	G_G2ClientSpineAngles(ent, viewAngles, angles, thoracicAngles, ulAngles, llAngles);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 60
ARGP4
ADDRLP4 132
ARGP4
ADDRLP4 84
ARGP4
ADDRLP4 108
ARGP4
ADDRLP4 120
ARGP4
ADDRGP4 G_G2ClientSpineAngles
CALLV
pop
line 397
;396:
;397:	trap_G2API_SetBoneAngles(ent->client->ghoul2, 0, "upper_lumbar", ulAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); 
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
ADDRLP4 196
CNSTI4 0
ASGNI4
ADDRLP4 196
INDIRI4
ARGI4
ADDRGP4 $226
ARGP4
ADDRLP4 108
ARGP4
CNSTI4 2
ARGI4
CNSTI4 1
ARGI4
CNSTI4 6
ARGI4
CNSTI4 5
ARGI4
CNSTP4 0
ARGP4
ADDRLP4 196
INDIRI4
ARGI4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRGP4 trap_G2API_SetBoneAngles
CALLI4
pop
line 398
;398:	trap_G2API_SetBoneAngles(ent->client->ghoul2, 0, "lower_lumbar", llAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); 
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
ADDRLP4 200
CNSTI4 0
ASGNI4
ADDRLP4 200
INDIRI4
ARGI4
ADDRGP4 $228
ARGP4
ADDRLP4 120
ARGP4
CNSTI4 2
ARGI4
CNSTI4 1
ARGI4
CNSTI4 6
ARGI4
CNSTI4 5
ARGI4
CNSTP4 0
ARGP4
ADDRLP4 200
INDIRI4
ARGI4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRGP4 trap_G2API_SetBoneAngles
CALLI4
pop
line 399
;399:	trap_G2API_SetBoneAngles(ent->client->ghoul2, 0, "thoracic", thoracicAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); 
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
ADDRLP4 204
CNSTI4 0
ASGNI4
ADDRLP4 204
INDIRI4
ARGI4
ADDRGP4 $230
ARGP4
ADDRLP4 84
ARGP4
CNSTI4 2
ARGI4
CNSTI4 1
ARGI4
CNSTI4 6
ARGI4
CNSTI4 5
ARGI4
CNSTP4 0
ARGP4
ADDRLP4 204
INDIRI4
ARGI4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRGP4 trap_G2API_SetBoneAngles
CALLI4
pop
line 400
;400:}
LABELV $160
endproc G_G2PlayerAngles 232 44
export SaberAttacking
proc SaberAttacking 28 4
line 403
;401:
;402:qboolean SaberAttacking(gentity_t *self)
;403:{
line 404
;404:	if (PM_SaberInParry(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 0
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $233
line 405
;405:	{
line 406
;406:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $232
JUMPV
LABELV $233
line 408
;407:	}
;408:	if (PM_SaberInBrokenParry(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 4
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $235
line 409
;409:	{
line 410
;410:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $232
JUMPV
LABELV $235
line 412
;411:	}
;412:	if (PM_SaberInDeflect(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 8
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 0
EQI4 $237
line 413
;413:	{
line 414
;414:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $232
JUMPV
LABELV $237
line 416
;415:	}
;416:	if (PM_SaberInBounce(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 12
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 12
INDIRI4
CNSTI4 0
EQI4 $239
line 417
;417:	{
line 418
;418:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $232
JUMPV
LABELV $239
line 420
;419:	}
;420:	if (PM_SaberInKnockaway(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
ADDRGP4 PM_SaberInKnockaway
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $241
line 421
;421:	{
line 422
;422:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $232
JUMPV
LABELV $241
line 425
;423:	}
;424:
;425:	if (BG_SaberInAttack(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 20
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 20
INDIRI4
CNSTI4 0
EQI4 $243
line 426
;426:	{
line 427
;427:		if (self->client->ps.weaponstate == WEAPON_FIRING && self->client->ps.saberBlocked == BLOCKED_NONE)
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 3
NEI4 $245
ADDRLP4 24
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
CNSTI4 0
NEI4 $245
line 428
;428:		{ //if we're firing and not blocking, then we're attacking.
line 429
;429:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $232
JUMPV
LABELV $245
line 431
;430:		}
;431:	}
LABELV $243
line 433
;432:
;433:	return qfalse;
CNSTI4 0
RETI4
LABELV $232
endproc SaberAttacking 28 4
export WP_SabersCheckLock2
proc WP_SabersCheckLock2 1692 28
line 456
;434:}
;435:
;436:typedef enum
;437:{
;438:	LOCK_FIRST = 0,
;439:	LOCK_TOP = LOCK_FIRST,
;440:	LOCK_DIAG_TR,
;441:	LOCK_DIAG_TL,
;442:	LOCK_DIAG_BR,
;443:	LOCK_DIAG_BL,
;444:	LOCK_R,
;445:	LOCK_L,
;446:	LOCK_RANDOM
;447:} sabersLockMode_t;
;448:
;449:#define LOCK_IDEAL_DIST_TOP 32.0f
;450:#define LOCK_IDEAL_DIST_CIRCLE 48.0f
;451:
;452:#define SABER_HITDAMAGE 35
;453:void WP_SaberBlockNonRandom( gentity_t *self, vec3_t hitloc, qboolean missileBlock );
;454:
;455:qboolean WP_SabersCheckLock2( gentity_t *attacker, gentity_t *defender, sabersLockMode_t lockMode )
;456:{
line 457
;457:	int		attAnim, defAnim = 0;
ADDRLP4 1512
CNSTI4 0
ASGNI4
line 458
;458:	float	attStart = 0.5f;
ADDRLP4 1536
CNSTF4 1056964608
ASGNF4
line 459
;459:	float	idealDist = 48.0f;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 463
;460:	vec3_t	attAngles, defAngles, defDir;
;461:	vec3_t	newOrg;
;462:	vec3_t	attDir;
;463:	float	diff = 0;
ADDRLP4 380
CNSTF4 0
ASGNF4
line 468
;464:	trace_t trace;
;465:	pmove_t		pmv;
;466:
;467:	//MATCH ANIMS
;468:	if ( lockMode == LOCK_RANDOM )
ADDRFP4 8
INDIRI4
CNSTI4 7
NEI4 $249
line 469
;469:	{
line 470
;470:		lockMode = (sabersLockMode_t)Q_irand( (int)LOCK_FIRST, (int)(LOCK_RANDOM)-1 );
CNSTI4 0
ARGI4
CNSTI4 6
ARGI4
ADDRLP4 1540
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRFP4 8
ADDRLP4 1540
INDIRI4
ASGNI4
line 471
;471:	}
LABELV $249
line 472
;472:	switch ( lockMode )
ADDRLP4 1540
ADDRFP4 8
INDIRI4
ASGNI4
ADDRLP4 1540
INDIRI4
CNSTI4 0
LTI4 $251
ADDRLP4 1540
INDIRI4
CNSTI4 6
GTI4 $251
ADDRLP4 1540
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $261
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $261
address $254
address $255
address $256
address $257
address $258
address $259
address $260
code
line 473
;473:	{
LABELV $254
line 475
;474:	case LOCK_TOP:
;475:		attAnim = BOTH_BF2LOCK;
ADDRLP4 1532
CNSTI4 550
ASGNI4
line 476
;476:		defAnim = BOTH_BF1LOCK;
ADDRLP4 1512
CNSTI4 553
ASGNI4
line 477
;477:		attStart = 0.5f;
ADDRLP4 1536
CNSTF4 1056964608
ASGNF4
line 478
;478:		idealDist = LOCK_IDEAL_DIST_TOP;
ADDRLP4 1528
CNSTF4 1107296256
ASGNF4
line 479
;479:		break;
ADDRGP4 $252
JUMPV
LABELV $255
line 481
;480:	case LOCK_DIAG_TR:
;481:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 561
ASGNI4
line 482
;482:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 560
ASGNI4
line 483
;483:		attStart = 0.5f;
ADDRLP4 1536
CNSTF4 1056964608
ASGNF4
line 484
;484:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 485
;485:		break;
ADDRGP4 $252
JUMPV
LABELV $256
line 487
;486:	case LOCK_DIAG_TL:
;487:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 560
ASGNI4
line 488
;488:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 561
ASGNI4
line 489
;489:		attStart = 0.5f;
ADDRLP4 1536
CNSTF4 1056964608
ASGNF4
line 490
;490:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 491
;491:		break;
ADDRGP4 $252
JUMPV
LABELV $257
line 493
;492:	case LOCK_DIAG_BR:
;493:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 560
ASGNI4
line 494
;494:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 561
ASGNI4
line 495
;495:		attStart = 0.85f;
ADDRLP4 1536
CNSTF4 1062836634
ASGNF4
line 496
;496:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 497
;497:		break;
ADDRGP4 $252
JUMPV
LABELV $258
line 499
;498:	case LOCK_DIAG_BL:
;499:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 561
ASGNI4
line 500
;500:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 560
ASGNI4
line 501
;501:		attStart = 0.85f;
ADDRLP4 1536
CNSTF4 1062836634
ASGNF4
line 502
;502:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 503
;503:		break;
ADDRGP4 $252
JUMPV
LABELV $259
line 505
;504:	case LOCK_R:
;505:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 561
ASGNI4
line 506
;506:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 560
ASGNI4
line 507
;507:		attStart = 0.75f;
ADDRLP4 1536
CNSTF4 1061158912
ASGNF4
line 508
;508:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 509
;509:		break;
ADDRGP4 $252
JUMPV
LABELV $260
line 511
;510:	case LOCK_L:
;511:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1532
CNSTI4 560
ASGNI4
line 512
;512:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1512
CNSTI4 561
ASGNI4
line 513
;513:		attStart = 0.75f;
ADDRLP4 1536
CNSTF4 1061158912
ASGNF4
line 514
;514:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1528
CNSTF4 1111490560
ASGNF4
line 515
;515:		break;
ADDRGP4 $252
JUMPV
LABELV $251
line 517
;516:	default:
;517:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $248
JUMPV
line 518
;518:		break;
LABELV $252
line 521
;519:	}
;520:
;521:	memset (&pmv, 0, sizeof(pmv));
ADDRLP4 0
ARGP4
CNSTI4 0
ARGI4
CNSTI4 380
ARGI4
ADDRGP4 memset
CALLP4
pop
line 522
;522:	pmv.ps = &attacker->client->ps;
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
line 523
;523:	pmv.animations = bgGlobalAnimations;
ADDRLP4 0+224
ADDRGP4 bgGlobalAnimations
ASGNP4
line 524
;524:	pmv.cmd = attacker->client->pers.cmd;
ADDRLP4 0+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1384
ADDP4
INDIRB
ASGNB 28
line 525
;525:	pmv.trace = trap_Trace;
ADDRLP4 0+240
ADDRGP4 trap_Trace
ASGNP4
line 526
;526:	pmv.pointcontents = trap_PointContents;
ADDRLP4 0+244
ADDRGP4 trap_PointContents
ASGNP4
line 527
;527:	pmv.gametype = g_gametype.integer;
ADDRLP4 0+220
ADDRGP4 g_gametype+12
INDIRI4
ASGNI4
line 530
;528:
;529:	//This is a rare exception, you should never really call PM_ utility functions from game or cgame (despite the fact that it's technically possible)
;530:	pm = &pmv;
ADDRGP4 pm
ADDRLP4 0
ASGNP4
line 531
;531:	PM_SetAnim(SETANIM_BOTH, attAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1548
CNSTI4 3
ASGNI4
ADDRLP4 1548
INDIRI4
ARGI4
ADDRLP4 1532
INDIRI4
ARGI4
ADDRLP4 1548
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 532
;532:	attacker->client->ps.saberLockFrame = bgGlobalAnimations[attAnim].firstFrame+(bgGlobalAnimations[attAnim].numFrames*0.5);
ADDRLP4 1552
CNSTI4 28
ADDRLP4 1532
INDIRI4
MULI4
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
ADDRLP4 1552
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1056964608
ADDRLP4 1552
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
CVFI4 4
ASGNI4
line 534
;533:
;534:	pmv.ps = &defender->client->ps;
ADDRLP4 0
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
line 535
;535:	pmv.animations = bgGlobalAnimations;
ADDRLP4 0+224
ADDRGP4 bgGlobalAnimations
ASGNP4
line 536
;536:	pmv.cmd = defender->client->pers.cmd;
ADDRLP4 0+4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1384
ADDP4
INDIRB
ASGNB 28
line 538
;537:
;538:	pm = &pmv;
ADDRGP4 pm
ADDRLP4 0
ASGNP4
line 539
;539:	PM_SetAnim(SETANIM_BOTH, defAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1556
CNSTI4 3
ASGNI4
ADDRLP4 1556
INDIRI4
ARGI4
ADDRLP4 1512
INDIRI4
ARGI4
ADDRLP4 1556
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 540
;540:	defender->client->ps.saberLockFrame = bgGlobalAnimations[defAnim].firstFrame+(bgGlobalAnimations[defAnim].numFrames*0.5);
ADDRLP4 1560
CNSTI4 28
ADDRLP4 1512
INDIRI4
MULI4
ASGNI4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
ADDRLP4 1560
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1056964608
ADDRLP4 1560
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
CVFI4 4
ASGNI4
line 542
;541:
;542:	attacker->client->ps.saberLockHits = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 536
ADDP4
CNSTI4 0
ASGNI4
line 543
;543:	defender->client->ps.saberLockHits = 0;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 536
ADDP4
CNSTI4 0
ASGNI4
line 545
;544:
;545:	attacker->client->ps.saberLockAdvance = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 540
ADDP4
CNSTI4 0
ASGNI4
line 546
;546:	defender->client->ps.saberLockAdvance = qfalse;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 540
ADDP4
CNSTI4 0
ASGNI4
line 548
;547:
;548:	VectorClear( attacker->client->ps.velocity );
ADDRLP4 1564
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1568
CNSTF4 0
ASGNF4
ADDRLP4 1564
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1568
INDIRF4
ASGNF4
ADDRLP4 1564
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1568
INDIRF4
ASGNF4
ADDRLP4 1564
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1568
INDIRF4
ASGNF4
line 549
;549:	VectorClear( defender->client->ps.velocity );
ADDRLP4 1572
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1576
CNSTF4 0
ASGNF4
ADDRLP4 1572
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1576
INDIRF4
ASGNF4
ADDRLP4 1572
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1576
INDIRF4
ASGNF4
ADDRLP4 1572
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1576
INDIRF4
ASGNF4
line 550
;550:	attacker->client->ps.saberLockTime = defender->client->ps.saberLockTime = level.time + 10000;
ADDRLP4 1580
CNSTI4 408
ASGNI4
ADDRLP4 1584
CNSTI4 524
ASGNI4
ADDRLP4 1588
ADDRGP4 level+32
INDIRI4
CNSTI4 10000
ADDI4
ASGNI4
ADDRFP4 4
INDIRP4
ADDRLP4 1580
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1584
INDIRI4
ADDP4
ADDRLP4 1588
INDIRI4
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1580
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1584
INDIRI4
ADDP4
ADDRLP4 1588
INDIRI4
ASGNI4
line 551
;551:	attacker->client->ps.saberLockEnemy = defender->s.number;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 528
ADDP4
ADDRFP4 4
INDIRP4
INDIRI4
ASGNI4
line 552
;552:	defender->client->ps.saberLockEnemy = attacker->s.number;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 528
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 553
;553:	attacker->client->ps.weaponTime = defender->client->ps.weaponTime = Q_irand( 1000, 3000 );//delay 1 to 3 seconds before pushing
CNSTI4 1000
ARGI4
CNSTI4 3000
ARGI4
ADDRLP4 1592
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1596
CNSTI4 408
ASGNI4
ADDRLP4 1600
CNSTI4 44
ASGNI4
ADDRFP4 4
INDIRP4
ADDRLP4 1596
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1600
INDIRI4
ADDP4
ADDRLP4 1592
INDIRI4
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1596
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1600
INDIRI4
ADDP4
ADDRLP4 1592
INDIRI4
ASGNI4
line 555
;554:
;555:	VectorSubtract( defender->r.currentOrigin, attacker->r.currentOrigin, defDir );
ADDRLP4 1604
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1608
CNSTI4 368
ASGNI4
ADDRLP4 1612
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 384
ADDRLP4 1604
INDIRP4
ADDRLP4 1608
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1612
INDIRP4
ADDRLP4 1608
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1616
CNSTI4 372
ASGNI4
ADDRLP4 384+4
ADDRLP4 1604
INDIRP4
ADDRLP4 1616
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1612
INDIRP4
ADDRLP4 1616
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1620
CNSTI4 376
ASGNI4
ADDRLP4 384+8
ADDRFP4 4
INDIRP4
ADDRLP4 1620
INDIRI4
ADDP4
INDIRF4
ADDRFP4 0
INDIRP4
ADDRLP4 1620
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 556
;556:	VectorCopy( attacker->client->ps.viewangles, attAngles );
ADDRLP4 1500
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 557
;557:	attAngles[YAW] = vectoyaw( defDir );
ADDRLP4 384
ARGP4
ADDRLP4 1624
ADDRGP4 vectoyaw
CALLF4
ASGNF4
ADDRLP4 1500+4
ADDRLP4 1624
INDIRF4
ASGNF4
line 558
;558:	SetClientViewAngle( attacker, attAngles );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1500
ARGP4
ADDRGP4 SetClientViewAngle
CALLV
pop
line 559
;559:	defAngles[PITCH] = attAngles[PITCH]*-1;
ADDRLP4 1516
CNSTF4 3212836864
ADDRLP4 1500
INDIRF4
MULF4
ASGNF4
line 560
;560:	defAngles[YAW] = AngleNormalize180( attAngles[YAW] + 180);
ADDRLP4 1500+4
INDIRF4
CNSTF4 1127481344
ADDF4
ARGF4
ADDRLP4 1628
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 1516+4
ADDRLP4 1628
INDIRF4
ASGNF4
line 561
;561:	defAngles[ROLL] = 0;
ADDRLP4 1516+8
CNSTF4 0
ASGNF4
line 562
;562:	SetClientViewAngle( defender, defAngles );
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 1516
ARGP4
ADDRGP4 SetClientViewAngle
CALLV
pop
line 565
;563:	
;564:	//MATCH POSITIONS
;565:	diff = VectorNormalize( defDir ) - idealDist;//diff will be the total error in dist
ADDRLP4 384
ARGP4
ADDRLP4 1632
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 380
ADDRLP4 1632
INDIRF4
ADDRLP4 1528
INDIRF4
SUBF4
ASGNF4
line 567
;566:	//try to move attacker half the diff towards the defender
;567:	VectorMA( attacker->r.currentOrigin, diff*0.5f, defDir, newOrg );
ADDRLP4 1636
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1640
CNSTF4 1056964608
ADDRLP4 380
INDIRF4
MULF4
ASGNF4
ADDRLP4 396
ADDRLP4 1636
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
ADDRLP4 384
INDIRF4
ADDRLP4 1640
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 396+4
ADDRLP4 1636
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
ADDRLP4 384+4
INDIRF4
ADDRLP4 1640
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 396+8
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
ADDRLP4 384+8
INDIRF4
CNSTF4 1056964608
ADDRLP4 380
INDIRF4
MULF4
MULF4
ADDF4
ASGNF4
line 569
;568:
;569:	trap_Trace( &trace, attacker->r.currentOrigin, attacker->r.mins, attacker->r.maxs, newOrg, attacker->s.number, attacker->clipmask );
ADDRLP4 420
ARGP4
ADDRLP4 1644
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1644
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 1644
INDIRP4
CNSTI4 316
ADDP4
ARGP4
ADDRLP4 1644
INDIRP4
CNSTI4 328
ADDP4
ARGP4
ADDRLP4 396
ARGP4
ADDRLP4 1644
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1644
INDIRP4
CNSTI4 508
ADDP4
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 570
;570:	if ( !trace.startsolid && !trace.allsolid )
ADDRLP4 1648
CNSTI4 0
ASGNI4
ADDRLP4 420+4
INDIRI4
ADDRLP4 1648
INDIRI4
NEI4 $283
ADDRLP4 420
INDIRI4
ADDRLP4 1648
INDIRI4
NEI4 $283
line 571
;571:	{
line 572
;572:		G_SetOrigin( attacker, trace.endpos );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 420+12
ARGP4
ADDRGP4 G_SetOrigin
CALLV
pop
line 573
;573:		trap_LinkEntity( attacker );
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 574
;574:	}
LABELV $283
line 576
;575:	//now get the defender's dist and do it for him too
;576:	VectorSubtract( attacker->r.currentOrigin, defender->r.currentOrigin, attDir );
ADDRLP4 1652
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1656
CNSTI4 368
ASGNI4
ADDRLP4 1660
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 408
ADDRLP4 1652
INDIRP4
ADDRLP4 1656
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1660
INDIRP4
ADDRLP4 1656
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1664
CNSTI4 372
ASGNI4
ADDRLP4 408+4
ADDRLP4 1652
INDIRP4
ADDRLP4 1664
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1660
INDIRP4
ADDRLP4 1664
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1668
CNSTI4 376
ASGNI4
ADDRLP4 408+8
ADDRFP4 0
INDIRP4
ADDRLP4 1668
INDIRI4
ADDP4
INDIRF4
ADDRFP4 4
INDIRP4
ADDRLP4 1668
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 577
;577:	diff = VectorNormalize( attDir ) - idealDist;//diff will be the total error in dist
ADDRLP4 408
ARGP4
ADDRLP4 1672
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 380
ADDRLP4 1672
INDIRF4
ADDRLP4 1528
INDIRF4
SUBF4
ASGNF4
line 579
;578:	//try to move defender all of the remaining diff towards the attacker
;579:	VectorMA( defender->r.currentOrigin, diff, attDir, newOrg );
ADDRLP4 1676
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 396
ADDRLP4 1676
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
ADDRLP4 408
INDIRF4
ADDRLP4 380
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 396+4
ADDRLP4 1676
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
ADDRLP4 408+4
INDIRF4
ADDRLP4 380
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 396+8
ADDRFP4 4
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
ADDRLP4 408+8
INDIRF4
ADDRLP4 380
INDIRF4
MULF4
ADDF4
ASGNF4
line 580
;580:	trap_Trace( &trace, defender->r.currentOrigin, defender->r.mins, defender->r.maxs, newOrg, defender->s.number, defender->clipmask );
ADDRLP4 420
ARGP4
ADDRLP4 1684
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1684
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 1684
INDIRP4
CNSTI4 316
ADDP4
ARGP4
ADDRLP4 1684
INDIRP4
CNSTI4 328
ADDP4
ARGP4
ADDRLP4 396
ARGP4
ADDRLP4 1684
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1684
INDIRP4
CNSTI4 508
ADDP4
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 581
;581:	if ( !trace.startsolid && !trace.allsolid )
ADDRLP4 1688
CNSTI4 0
ASGNI4
ADDRLP4 420+4
INDIRI4
ADDRLP4 1688
INDIRI4
NEI4 $293
ADDRLP4 420
INDIRI4
ADDRLP4 1688
INDIRI4
NEI4 $293
line 582
;582:	{
line 583
;583:		G_SetOrigin( defender, trace.endpos );
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 420+12
ARGP4
ADDRGP4 G_SetOrigin
CALLV
pop
line 584
;584:		trap_LinkEntity( defender );
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 585
;585:	}
LABELV $293
line 588
;586:
;587:	//DONE!
;588:	return qtrue;
CNSTI4 1
RETI4
LABELV $248
endproc WP_SabersCheckLock2 1692 28
export WP_SabersCheckLock
proc WP_SabersCheckLock 240 16
line 592
;589:}
;590:
;591:qboolean WP_SabersCheckLock( gentity_t *ent1, gentity_t *ent2 )
;592:{
line 594
;593:	float dist;
;594:	qboolean	ent1BlockingPlayer = qfalse;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 595
;595:	qboolean	ent2BlockingPlayer = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 597
;596:
;597:	if (!g_saberLocking.integer)
ADDRGP4 g_saberLocking+12
INDIRI4
CNSTI4 0
NEI4 $298
line 598
;598:	{
line 599
;599:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $298
line 602
;600:	}
;601:
;602:	if (!ent1->client || !ent2->client)
ADDRLP4 12
CNSTI4 408
ASGNI4
ADDRLP4 16
CNSTU4 0
ASGNU4
ADDRFP4 0
INDIRP4
ADDRLP4 12
INDIRI4
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 16
INDIRU4
EQU4 $303
ADDRFP4 4
INDIRP4
ADDRLP4 12
INDIRI4
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 16
INDIRU4
NEU4 $301
LABELV $303
line 603
;603:	{
line 604
;604:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $301
line 607
;605:	}
;606:
;607:	if (!ent1->client->ps.duelInProgress ||
ADDRLP4 20
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 24
CNSTI4 408
ASGNI4
ADDRLP4 28
ADDRLP4 20
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 32
CNSTI4 1304
ASGNI4
ADDRLP4 36
CNSTI4 0
ASGNI4
ADDRLP4 28
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
INDIRI4
ADDRLP4 36
INDIRI4
EQI4 $308
ADDRLP4 40
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 44
ADDRLP4 40
INDIRP4
ADDRLP4 24
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
INDIRI4
ADDRLP4 36
INDIRI4
EQI4 $308
ADDRLP4 48
CNSTI4 1296
ASGNI4
ADDRLP4 28
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
INDIRI4
ADDRLP4 40
INDIRP4
INDIRI4
NEI4 $308
ADDRLP4 44
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
INDIRI4
ADDRLP4 20
INDIRP4
INDIRI4
EQI4 $304
LABELV $308
line 611
;608:		!ent2->client->ps.duelInProgress ||
;609:		ent1->client->ps.duelIndex != ent2->s.number ||
;610:		ent2->client->ps.duelIndex != ent1->s.number)
;611:	{ //only allow saber locking if two players are dueling with each other directly
line 612
;612:		if (g_gametype.integer != GT_TOURNAMENT)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
EQI4 $309
line 613
;613:		{
line 614
;614:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $309
line 616
;615:		}
;616:	}
LABELV $304
line 618
;617:
;618:	if ( fabs( ent1->r.currentOrigin[2]-ent2->r.currentOrigin[2] ) > 16 )
ADDRLP4 52
CNSTI4 376
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 52
INDIRI4
ADDP4
INDIRF4
ADDRFP4 4
INDIRP4
ADDRLP4 52
INDIRI4
ADDP4
INDIRF4
SUBF4
ARGF4
ADDRLP4 56
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 56
INDIRF4
CNSTF4 1098907648
LEF4 $312
line 619
;619:	{
line 620
;620:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $312
line 622
;621:	}
;622:	if ( ent1->client->ps.groundEntityNum == ENTITYNUM_NONE ||
ADDRLP4 60
CNSTI4 408
ASGNI4
ADDRLP4 64
CNSTI4 84
ASGNI4
ADDRLP4 68
CNSTI4 1023
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 60
INDIRI4
ADDP4
INDIRP4
ADDRLP4 64
INDIRI4
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
EQI4 $316
ADDRFP4 4
INDIRP4
ADDRLP4 60
INDIRI4
ADDP4
INDIRP4
ADDRLP4 64
INDIRI4
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
NEI4 $314
LABELV $316
line 624
;623:		ent2->client->ps.groundEntityNum == ENTITYNUM_NONE )
;624:	{
line 625
;625:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $314
line 627
;626:	}
;627:	dist = DistanceSquared(ent1->r.currentOrigin,ent2->r.currentOrigin);
ADDRLP4 72
CNSTI4 368
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 72
INDIRI4
ADDP4
ARGP4
ADDRFP4 4
INDIRP4
ADDRLP4 72
INDIRI4
ADDP4
ARGP4
ADDRLP4 76
ADDRGP4 DistanceSquared
CALLF4
ASGNF4
ADDRLP4 8
ADDRLP4 76
INDIRF4
ASGNF4
line 628
;628:	if ( dist < 64 || dist > 6400 )
ADDRLP4 8
INDIRF4
CNSTF4 1115684864
LTF4 $319
ADDRLP4 8
INDIRF4
CNSTF4 1170735104
LEF4 $317
LABELV $319
line 629
;629:	{//between 8 and 80 from each other
line 630
;630:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $317
line 633
;631:	}
;632:
;633:	if (BG_InSpecialJump(ent1->client->ps.legsAnim))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 84
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 84
INDIRI4
CNSTI4 0
EQI4 $320
line 634
;634:	{
line 635
;635:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $320
line 637
;636:	}
;637:	if (BG_InSpecialJump(ent2->client->ps.legsAnim))
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 88
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 88
INDIRI4
CNSTI4 0
EQI4 $322
line 638
;638:	{
line 639
;639:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $322
line 642
;640:	}
;641:
;642:	if (BG_InRoll(&ent1->client->ps, ent1->client->ps.legsAnim))
ADDRLP4 92
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 92
INDIRP4
ARGP4
ADDRLP4 92
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 96
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 96
INDIRI4
CNSTI4 0
EQI4 $324
line 643
;643:	{
line 644
;644:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $324
line 646
;645:	}
;646:	if (BG_InRoll(&ent2->client->ps, ent2->client->ps.legsAnim))
ADDRLP4 100
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 100
INDIRP4
ARGP4
ADDRLP4 100
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 104
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 104
INDIRI4
CNSTI4 0
EQI4 $326
line 647
;647:	{
line 648
;648:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $326
line 651
;649:	}
;650:
;651:	if (ent1->client->ps.forceHandExtend != HANDEXTEND_NONE ||
ADDRLP4 108
CNSTI4 408
ASGNI4
ADDRLP4 112
CNSTI4 1248
ASGNI4
ADDRLP4 116
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRI4
ADDRLP4 116
INDIRI4
NEI4 $330
ADDRFP4 4
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRI4
ADDRLP4 116
INDIRI4
EQI4 $328
LABELV $330
line 653
;652:		ent2->client->ps.forceHandExtend != HANDEXTEND_NONE)
;653:	{
line 654
;654:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $328
line 657
;655:	}
;656:
;657:	if ((ent1->client->ps.pm_flags & PMF_DUCKED) ||
ADDRLP4 120
CNSTI4 408
ASGNI4
ADDRLP4 124
CNSTI4 12
ASGNI4
ADDRLP4 128
CNSTI4 1
ASGNI4
ADDRLP4 132
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRP4
ADDRLP4 124
INDIRI4
ADDP4
INDIRI4
ADDRLP4 128
INDIRI4
BANDI4
ADDRLP4 132
INDIRI4
NEI4 $333
ADDRFP4 4
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRP4
ADDRLP4 124
INDIRI4
ADDP4
INDIRI4
ADDRLP4 128
INDIRI4
BANDI4
ADDRLP4 132
INDIRI4
EQI4 $331
LABELV $333
line 659
;658:		(ent2->client->ps.pm_flags & PMF_DUCKED))
;659:	{
line 660
;660:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $331
line 663
;661:	}
;662:
;663:	if (!InFront( ent1->client->ps.origin, ent2->client->ps.origin, ent2->client->ps.viewangles, 0.4f ))
ADDRLP4 136
CNSTI4 408
ASGNI4
ADDRLP4 140
CNSTI4 20
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 136
INDIRI4
ADDP4
INDIRP4
ADDRLP4 140
INDIRI4
ADDP4
ARGP4
ADDRLP4 144
ADDRFP4 4
INDIRP4
ADDRLP4 136
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
ADDRLP4 140
INDIRI4
ADDP4
ARGP4
ADDRLP4 144
INDIRP4
CNSTI4 156
ADDP4
ARGP4
CNSTF4 1053609165
ARGF4
ADDRLP4 148
ADDRGP4 InFront
CALLI4
ASGNI4
ADDRLP4 148
INDIRI4
CNSTI4 0
NEI4 $334
line 664
;664:	{
line 665
;665:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $334
line 667
;666:	}
;667:	if (!InFront( ent2->client->ps.origin, ent1->client->ps.origin, ent1->client->ps.viewangles, 0.4f ))
ADDRLP4 152
CNSTI4 408
ASGNI4
ADDRLP4 156
CNSTI4 20
ASGNI4
ADDRFP4 4
INDIRP4
ADDRLP4 152
INDIRI4
ADDP4
INDIRP4
ADDRLP4 156
INDIRI4
ADDP4
ARGP4
ADDRLP4 160
ADDRFP4 0
INDIRP4
ADDRLP4 152
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 160
INDIRP4
ADDRLP4 156
INDIRI4
ADDP4
ARGP4
ADDRLP4 160
INDIRP4
CNSTI4 156
ADDP4
ARGP4
CNSTF4 1053609165
ARGF4
ADDRLP4 164
ADDRGP4 InFront
CALLI4
ASGNI4
ADDRLP4 164
INDIRI4
CNSTI4 0
NEI4 $336
line 668
;668:	{
line 669
;669:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $336
line 673
;670:	}
;671:
;672:	//T to B lock
;673:	if ( ent1->client->ps.torsoAnim == BOTH_A1_T__B_ ||
ADDRLP4 168
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 168
INDIRI4
CNSTI4 138
EQI4 $343
ADDRLP4 168
INDIRI4
CNSTI4 215
EQI4 $343
ADDRLP4 168
INDIRI4
CNSTI4 292
EQI4 $343
ADDRLP4 168
INDIRI4
CNSTI4 369
EQI4 $343
ADDRLP4 168
INDIRI4
CNSTI4 446
NEI4 $338
LABELV $343
line 678
;674:		ent1->client->ps.torsoAnim == BOTH_A2_T__B_ ||
;675:		ent1->client->ps.torsoAnim == BOTH_A3_T__B_ ||
;676:		ent1->client->ps.torsoAnim == BOTH_A4_T__B_ ||
;677:		ent1->client->ps.torsoAnim == BOTH_A5_T__B_ )
;678:	{//ent1 is attacking top-down
line 679
;679:		return WP_SabersCheckLock2( ent1, ent2, LOCK_TOP );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 172
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 172
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $338
line 682
;680:	}
;681:
;682:	if ( ent2->client->ps.torsoAnim == BOTH_A1_T__B_ ||
ADDRLP4 172
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 172
INDIRI4
CNSTI4 138
EQI4 $349
ADDRLP4 172
INDIRI4
CNSTI4 215
EQI4 $349
ADDRLP4 172
INDIRI4
CNSTI4 292
EQI4 $349
ADDRLP4 172
INDIRI4
CNSTI4 369
EQI4 $349
ADDRLP4 172
INDIRI4
CNSTI4 446
NEI4 $344
LABELV $349
line 687
;683:		ent2->client->ps.torsoAnim == BOTH_A2_T__B_ ||
;684:		ent2->client->ps.torsoAnim == BOTH_A3_T__B_ ||
;685:		ent2->client->ps.torsoAnim == BOTH_A4_T__B_ ||
;686:		ent2->client->ps.torsoAnim == BOTH_A5_T__B_ )
;687:	{//ent2 is attacking top-down
line 688
;688:		return WP_SabersCheckLock2( ent2, ent1, LOCK_TOP );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 176
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 176
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $344
line 691
;689:	}
;690:
;691:	if ( ent1->s.number == 0 &&
ADDRLP4 176
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 180
CNSTI4 0
ASGNI4
ADDRLP4 176
INDIRP4
INDIRI4
ADDRLP4 180
INDIRI4
NEI4 $350
ADDRLP4 184
ADDRLP4 176
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 184
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 2
NEI4 $350
ADDRLP4 184
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 180
INDIRI4
GTI4 $350
line 693
;692:		ent1->client->ps.saberBlocking == BLK_WIDE && ent1->client->ps.weaponTime <= 0 )
;693:	{
line 694
;694:		ent1BlockingPlayer = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 695
;695:	}
LABELV $350
line 696
;696:	if ( ent2->s.number == 0 &&
ADDRLP4 188
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 192
CNSTI4 0
ASGNI4
ADDRLP4 188
INDIRP4
INDIRI4
ADDRLP4 192
INDIRI4
NEI4 $352
ADDRLP4 196
ADDRLP4 188
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 196
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 2
NEI4 $352
ADDRLP4 196
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 192
INDIRI4
GTI4 $352
line 698
;697:		ent2->client->ps.saberBlocking == BLK_WIDE && ent2->client->ps.weaponTime <= 0 )
;698:	{
line 699
;699:		ent2BlockingPlayer = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 700
;700:	}
LABELV $352
line 703
;701:
;702:	//TR to BL lock
;703:	if ( ent1->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 200
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 200
INDIRI4
CNSTI4 144
EQI4 $359
ADDRLP4 200
INDIRI4
CNSTI4 221
EQI4 $359
ADDRLP4 200
INDIRI4
CNSTI4 298
EQI4 $359
ADDRLP4 200
INDIRI4
CNSTI4 375
EQI4 $359
ADDRLP4 200
INDIRI4
CNSTI4 452
NEI4 $354
LABELV $359
line 708
;704:		ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;705:		ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;706:		ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;707:		ent1->client->ps.torsoAnim == BOTH_A5_TR_BL )
;708:	{//ent1 is attacking diagonally
line 709
;709:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $360
line 710
;710:		{//player will block this anyway
line 711
;711:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_TR );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 204
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 204
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $360
line 713
;712:		}
;713:		if ( ent2->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 204
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 204
INDIRI4
CNSTI4 144
EQI4 $368
ADDRLP4 204
INDIRI4
CNSTI4 221
EQI4 $368
ADDRLP4 204
INDIRI4
CNSTI4 298
EQI4 $368
ADDRLP4 204
INDIRI4
CNSTI4 375
EQI4 $368
ADDRLP4 204
INDIRI4
CNSTI4 452
EQI4 $368
ADDRLP4 204
INDIRI4
CNSTI4 525
NEI4 $362
LABELV $368
line 719
;714:			ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;715:			ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;716:			ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;717:			ent2->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;718:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TL )
;719:		{//ent2 is attacking in the opposite diagonal
line 720
;720:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_TR );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 208
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 208
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $362
line 722
;721:		}
;722:		if ( ent2->client->ps.torsoAnim == BOTH_A1_BR_TL ||
ADDRLP4 208
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 208
INDIRI4
CNSTI4 142
EQI4 $375
ADDRLP4 208
INDIRI4
CNSTI4 219
EQI4 $375
ADDRLP4 208
INDIRI4
CNSTI4 296
EQI4 $375
ADDRLP4 208
INDIRI4
CNSTI4 373
EQI4 $375
ADDRLP4 208
INDIRI4
CNSTI4 450
EQI4 $375
ADDRLP4 208
INDIRI4
CNSTI4 526
NEI4 $369
LABELV $375
line 728
;723:			ent2->client->ps.torsoAnim == BOTH_A2_BR_TL ||
;724:			ent2->client->ps.torsoAnim == BOTH_A3_BR_TL ||
;725:			ent2->client->ps.torsoAnim == BOTH_A4_BR_TL ||
;726:			ent2->client->ps.torsoAnim == BOTH_A5_BR_TL ||
;727:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BL )
;728:		{//ent2 is attacking in the opposite diagonal
line 729
;729:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_BL );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 4
ARGI4
ADDRLP4 212
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 212
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $369
line 731
;730:		}
;731:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $354
line 734
;732:	}
;733:
;734:	if ( ent2->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 204
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 204
INDIRI4
CNSTI4 144
EQI4 $381
ADDRLP4 204
INDIRI4
CNSTI4 221
EQI4 $381
ADDRLP4 204
INDIRI4
CNSTI4 298
EQI4 $381
ADDRLP4 204
INDIRI4
CNSTI4 375
EQI4 $381
ADDRLP4 204
INDIRI4
CNSTI4 452
NEI4 $376
LABELV $381
line 739
;735:		ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;736:		ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;737:		ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;738:		ent2->client->ps.torsoAnim == BOTH_A5_TR_BL )
;739:	{//ent2 is attacking diagonally
line 740
;740:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $382
line 741
;741:		{//player will block this anyway
line 742
;742:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_TR );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 208
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 208
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $382
line 744
;743:		}
;744:		if ( ent1->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 208
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 208
INDIRI4
CNSTI4 144
EQI4 $390
ADDRLP4 208
INDIRI4
CNSTI4 221
EQI4 $390
ADDRLP4 208
INDIRI4
CNSTI4 298
EQI4 $390
ADDRLP4 208
INDIRI4
CNSTI4 375
EQI4 $390
ADDRLP4 208
INDIRI4
CNSTI4 452
EQI4 $390
ADDRLP4 208
INDIRI4
CNSTI4 525
NEI4 $384
LABELV $390
line 750
;745:			ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;746:			ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;747:			ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;748:			ent1->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;749:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TL )
;750:		{//ent1 is attacking in the opposite diagonal
line 751
;751:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_TR );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 212
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 212
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $384
line 753
;752:		}
;753:		if ( ent1->client->ps.torsoAnim == BOTH_A1_BR_TL ||
ADDRLP4 212
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 212
INDIRI4
CNSTI4 142
EQI4 $397
ADDRLP4 212
INDIRI4
CNSTI4 219
EQI4 $397
ADDRLP4 212
INDIRI4
CNSTI4 296
EQI4 $397
ADDRLP4 212
INDIRI4
CNSTI4 373
EQI4 $397
ADDRLP4 212
INDIRI4
CNSTI4 450
EQI4 $397
ADDRLP4 212
INDIRI4
CNSTI4 526
NEI4 $391
LABELV $397
line 759
;754:			ent1->client->ps.torsoAnim == BOTH_A2_BR_TL ||
;755:			ent1->client->ps.torsoAnim == BOTH_A3_BR_TL ||
;756:			ent1->client->ps.torsoAnim == BOTH_A4_BR_TL ||
;757:			ent1->client->ps.torsoAnim == BOTH_A5_BR_TL ||
;758:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BL )
;759:		{//ent1 is attacking in the opposite diagonal
line 760
;760:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_BL );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 4
ARGI4
ADDRLP4 216
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 216
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $391
line 762
;761:		}
;762:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $376
line 766
;763:	}
;764:
;765:	//TL to BR lock
;766:	if ( ent1->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 208
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 208
INDIRI4
CNSTI4 141
EQI4 $403
ADDRLP4 208
INDIRI4
CNSTI4 218
EQI4 $403
ADDRLP4 208
INDIRI4
CNSTI4 295
EQI4 $403
ADDRLP4 208
INDIRI4
CNSTI4 372
EQI4 $403
ADDRLP4 208
INDIRI4
CNSTI4 449
NEI4 $398
LABELV $403
line 771
;767:		ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;768:		ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;769:		ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;770:		ent1->client->ps.torsoAnim == BOTH_A5_TL_BR )
;771:	{//ent1 is attacking diagonally
line 772
;772:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $404
line 773
;773:		{//player will block this anyway
line 774
;774:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_TL );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRLP4 212
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 212
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $404
line 776
;775:		}
;776:		if ( ent2->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 212
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 212
INDIRI4
CNSTI4 141
EQI4 $412
ADDRLP4 212
INDIRI4
CNSTI4 218
EQI4 $412
ADDRLP4 212
INDIRI4
CNSTI4 295
EQI4 $412
ADDRLP4 212
INDIRI4
CNSTI4 372
EQI4 $412
ADDRLP4 212
INDIRI4
CNSTI4 449
EQI4 $412
ADDRLP4 212
INDIRI4
CNSTI4 524
NEI4 $406
LABELV $412
line 782
;777:			ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;778:			ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;779:			ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;780:			ent2->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;781:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TR )
;782:		{//ent2 is attacking in the opposite diagonal
line 783
;783:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_TL );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRLP4 216
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 216
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $406
line 785
;784:		}
;785:		if ( ent2->client->ps.torsoAnim == BOTH_A1_BL_TR ||
ADDRLP4 216
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 216
INDIRI4
CNSTI4 143
EQI4 $419
ADDRLP4 216
INDIRI4
CNSTI4 220
EQI4 $419
ADDRLP4 216
INDIRI4
CNSTI4 297
EQI4 $419
ADDRLP4 216
INDIRI4
CNSTI4 374
EQI4 $419
ADDRLP4 216
INDIRI4
CNSTI4 451
EQI4 $419
ADDRLP4 216
INDIRI4
CNSTI4 527
NEI4 $413
LABELV $419
line 791
;786:			ent2->client->ps.torsoAnim == BOTH_A2_BL_TR ||
;787:			ent2->client->ps.torsoAnim == BOTH_A3_BL_TR ||
;788:			ent2->client->ps.torsoAnim == BOTH_A4_BL_TR ||
;789:			ent2->client->ps.torsoAnim == BOTH_A5_BL_TR ||
;790:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BR )
;791:		{//ent2 is attacking in the opposite diagonal
line 792
;792:			return WP_SabersCheckLock2( ent1, ent2, LOCK_DIAG_BR );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 3
ARGI4
ADDRLP4 220
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 220
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $413
line 794
;793:		}
;794:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $398
line 797
;795:	}
;796:
;797:	if ( ent2->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 212
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 212
INDIRI4
CNSTI4 141
EQI4 $425
ADDRLP4 212
INDIRI4
CNSTI4 218
EQI4 $425
ADDRLP4 212
INDIRI4
CNSTI4 295
EQI4 $425
ADDRLP4 212
INDIRI4
CNSTI4 372
EQI4 $425
ADDRLP4 212
INDIRI4
CNSTI4 449
NEI4 $420
LABELV $425
line 802
;798:		ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;799:		ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;800:		ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;801:		ent2->client->ps.torsoAnim == BOTH_A5_TL_BR )
;802:	{//ent2 is attacking diagonally
line 803
;803:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $426
line 804
;804:		{//player will block this anyway
line 805
;805:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_TL );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRLP4 216
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 216
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $426
line 807
;806:		}
;807:		if ( ent1->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 216
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 216
INDIRI4
CNSTI4 141
EQI4 $434
ADDRLP4 216
INDIRI4
CNSTI4 218
EQI4 $434
ADDRLP4 216
INDIRI4
CNSTI4 295
EQI4 $434
ADDRLP4 216
INDIRI4
CNSTI4 372
EQI4 $434
ADDRLP4 216
INDIRI4
CNSTI4 449
EQI4 $434
ADDRLP4 216
INDIRI4
CNSTI4 524
NEI4 $428
LABELV $434
line 813
;808:			ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;809:			ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;810:			ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;811:			ent1->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;812:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TR )
;813:		{//ent1 is attacking in the opposite diagonal
line 814
;814:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_TL );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRLP4 220
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 220
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $428
line 816
;815:		}
;816:		if ( ent1->client->ps.torsoAnim == BOTH_A1_BL_TR ||
ADDRLP4 220
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 220
INDIRI4
CNSTI4 143
EQI4 $441
ADDRLP4 220
INDIRI4
CNSTI4 220
EQI4 $441
ADDRLP4 220
INDIRI4
CNSTI4 297
EQI4 $441
ADDRLP4 220
INDIRI4
CNSTI4 374
EQI4 $441
ADDRLP4 220
INDIRI4
CNSTI4 451
EQI4 $441
ADDRLP4 220
INDIRI4
CNSTI4 527
NEI4 $435
LABELV $441
line 822
;817:			ent1->client->ps.torsoAnim == BOTH_A2_BL_TR ||
;818:			ent1->client->ps.torsoAnim == BOTH_A3_BL_TR ||
;819:			ent1->client->ps.torsoAnim == BOTH_A4_BL_TR ||
;820:			ent1->client->ps.torsoAnim == BOTH_A5_BL_TR ||
;821:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BR )
;822:		{//ent1 is attacking in the opposite diagonal
line 823
;823:			return WP_SabersCheckLock2( ent2, ent1, LOCK_DIAG_BR );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 3
ARGI4
ADDRLP4 224
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 224
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $435
line 825
;824:		}
;825:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $420
line 828
;826:	}
;827:	//L to R lock
;828:	if ( ent1->client->ps.torsoAnim == BOTH_A1__L__R ||
ADDRLP4 216
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 216
INDIRI4
CNSTI4 139
EQI4 $447
ADDRLP4 216
INDIRI4
CNSTI4 216
EQI4 $447
ADDRLP4 216
INDIRI4
CNSTI4 293
EQI4 $447
ADDRLP4 216
INDIRI4
CNSTI4 370
EQI4 $447
ADDRLP4 216
INDIRI4
CNSTI4 447
NEI4 $442
LABELV $447
line 833
;829:		ent1->client->ps.torsoAnim == BOTH_A2__L__R ||
;830:		ent1->client->ps.torsoAnim == BOTH_A3__L__R ||
;831:		ent1->client->ps.torsoAnim == BOTH_A4__L__R ||
;832:		ent1->client->ps.torsoAnim == BOTH_A5__L__R )
;833:	{//ent1 is attacking l to r
line 834
;834:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $448
line 835
;835:		{//player will block this anyway
line 836
;836:			return WP_SabersCheckLock2( ent1, ent2, LOCK_L );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 6
ARGI4
ADDRLP4 220
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 220
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $448
line 838
;837:		}
;838:		if ( ent2->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 220
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 220
INDIRI4
CNSTI4 141
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 218
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 295
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 372
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 449
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 524
EQI4 $457
ADDRLP4 220
INDIRI4
CNSTI4 526
NEI4 $450
LABELV $457
line 845
;839:			ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;840:			ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;841:			ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;842:			ent2->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;843:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TR ||
;844:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BL )
;845:		{//ent2 is attacking or blocking on the r
line 846
;846:			return WP_SabersCheckLock2( ent1, ent2, LOCK_L );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 6
ARGI4
ADDRLP4 224
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 224
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $450
line 848
;847:		}
;848:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $442
line 850
;849:	}
;850:	if ( ent2->client->ps.torsoAnim == BOTH_A1__L__R ||
ADDRLP4 220
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 220
INDIRI4
CNSTI4 139
EQI4 $463
ADDRLP4 220
INDIRI4
CNSTI4 216
EQI4 $463
ADDRLP4 220
INDIRI4
CNSTI4 293
EQI4 $463
ADDRLP4 220
INDIRI4
CNSTI4 370
EQI4 $463
ADDRLP4 220
INDIRI4
CNSTI4 447
NEI4 $458
LABELV $463
line 855
;851:		ent2->client->ps.torsoAnim == BOTH_A2__L__R ||
;852:		ent2->client->ps.torsoAnim == BOTH_A3__L__R ||
;853:		ent2->client->ps.torsoAnim == BOTH_A4__L__R ||
;854:		ent2->client->ps.torsoAnim == BOTH_A5__L__R )
;855:	{//ent2 is attacking l to r
line 856
;856:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $464
line 857
;857:		{//player will block this anyway
line 858
;858:			return WP_SabersCheckLock2( ent2, ent1, LOCK_L );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 6
ARGI4
ADDRLP4 224
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 224
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $464
line 860
;859:		}
;860:		if ( ent1->client->ps.torsoAnim == BOTH_A1_TL_BR ||
ADDRLP4 224
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 224
INDIRI4
CNSTI4 141
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 218
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 295
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 372
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 449
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 524
EQI4 $473
ADDRLP4 224
INDIRI4
CNSTI4 526
NEI4 $466
LABELV $473
line 867
;861:			ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;862:			ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;863:			ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;864:			ent1->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;865:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TR ||
;866:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BL )
;867:		{//ent1 is attacking or blocking on the r
line 868
;868:			return WP_SabersCheckLock2( ent2, ent1, LOCK_L );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 6
ARGI4
ADDRLP4 228
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 228
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $466
line 870
;869:		}
;870:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $458
line 873
;871:	}
;872:	//R to L lock
;873:	if ( ent1->client->ps.torsoAnim == BOTH_A1__R__L ||
ADDRLP4 224
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 224
INDIRI4
CNSTI4 140
EQI4 $479
ADDRLP4 224
INDIRI4
CNSTI4 217
EQI4 $479
ADDRLP4 224
INDIRI4
CNSTI4 294
EQI4 $479
ADDRLP4 224
INDIRI4
CNSTI4 371
EQI4 $479
ADDRLP4 224
INDIRI4
CNSTI4 448
NEI4 $474
LABELV $479
line 878
;874:		ent1->client->ps.torsoAnim == BOTH_A2__R__L ||
;875:		ent1->client->ps.torsoAnim == BOTH_A3__R__L ||
;876:		ent1->client->ps.torsoAnim == BOTH_A4__R__L ||
;877:		ent1->client->ps.torsoAnim == BOTH_A5__R__L )
;878:	{//ent1 is attacking r to l
line 879
;879:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $480
line 880
;880:		{//player will block this anyway
line 881
;881:			return WP_SabersCheckLock2( ent1, ent2, LOCK_R );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 5
ARGI4
ADDRLP4 228
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 228
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $480
line 883
;882:		}
;883:		if ( ent2->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 228
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 228
INDIRI4
CNSTI4 144
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 221
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 298
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 375
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 452
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 525
EQI4 $489
ADDRLP4 228
INDIRI4
CNSTI4 527
NEI4 $482
LABELV $489
line 890
;884:			ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;885:			ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;886:			ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;887:			ent2->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;888:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TL ||
;889:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BR )
;890:		{//ent2 is attacking or blocking on the l
line 891
;891:			return WP_SabersCheckLock2( ent1, ent2, LOCK_R );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 5
ARGI4
ADDRLP4 232
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 232
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $482
line 893
;892:		}
;893:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $474
line 895
;894:	}
;895:	if ( ent2->client->ps.torsoAnim == BOTH_A1__R__L ||
ADDRLP4 228
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 228
INDIRI4
CNSTI4 140
EQI4 $495
ADDRLP4 228
INDIRI4
CNSTI4 217
EQI4 $495
ADDRLP4 228
INDIRI4
CNSTI4 294
EQI4 $495
ADDRLP4 228
INDIRI4
CNSTI4 371
EQI4 $495
ADDRLP4 228
INDIRI4
CNSTI4 448
NEI4 $490
LABELV $495
line 900
;896:		ent2->client->ps.torsoAnim == BOTH_A2__R__L ||
;897:		ent2->client->ps.torsoAnim == BOTH_A3__R__L ||
;898:		ent2->client->ps.torsoAnim == BOTH_A4__R__L ||
;899:		ent2->client->ps.torsoAnim == BOTH_A5__R__L )
;900:	{//ent2 is attacking r to l
line 901
;901:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $496
line 902
;902:		{//player will block this anyway
line 903
;903:			return WP_SabersCheckLock2( ent2, ent1, LOCK_R );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 5
ARGI4
ADDRLP4 232
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 232
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $496
line 905
;904:		}
;905:		if ( ent1->client->ps.torsoAnim == BOTH_A1_TR_BL ||
ADDRLP4 232
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ASGNI4
ADDRLP4 232
INDIRI4
CNSTI4 144
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 221
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 298
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 375
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 452
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 525
EQI4 $505
ADDRLP4 232
INDIRI4
CNSTI4 527
NEI4 $498
LABELV $505
line 912
;906:			ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;907:			ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;908:			ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;909:			ent1->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;910:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TL ||
;911:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BR )
;912:		{//ent1 is attacking or blocking on the l
line 913
;913:			return WP_SabersCheckLock2( ent2, ent1, LOCK_R );
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 5
ARGI4
ADDRLP4 236
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 236
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $498
line 915
;914:		}
;915:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $297
JUMPV
LABELV $490
line 917
;916:	}
;917:	if ( !Q_irand( 0, 10 ) )
CNSTI4 0
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 232
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 232
INDIRI4
CNSTI4 0
NEI4 $506
line 918
;918:	{
line 919
;919:		return WP_SabersCheckLock2( ent1, ent2, LOCK_RANDOM );
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
CNSTI4 7
ARGI4
ADDRLP4 236
ADDRGP4 WP_SabersCheckLock2
CALLI4
ASGNI4
ADDRLP4 236
INDIRI4
RETI4
ADDRGP4 $297
JUMPV
LABELV $506
line 921
;920:	}
;921:	return qfalse;
CNSTI4 0
RETI4
LABELV $297
endproc WP_SabersCheckLock 240 16
export G_GetParryForBlock
proc G_GetParryForBlock 4 0
line 925
;922:}
;923:
;924:int G_GetParryForBlock(int block)
;925:{
line 926
;926:	switch (block)
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 4
LTI4 $510
ADDRLP4 0
INDIRI4
CNSTI4 13
GTI4 $510
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $521-16
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $521
address $511
address $513
address $515
address $517
address $519
address $512
address $514
address $516
address $518
address $520
code
line 927
;927:	{
LABELV $511
line 929
;928:		case BLOCKED_UPPER_RIGHT:
;929:			return LS_PARRY_UR;
CNSTI4 109
RETI4
ADDRGP4 $508
JUMPV
line 930
;930:			break;
LABELV $512
line 932
;931:		case BLOCKED_UPPER_RIGHT_PROJ:
;932:			return LS_REFLECT_UR;
CNSTI4 114
RETI4
ADDRGP4 $508
JUMPV
line 933
;933:			break;
LABELV $513
line 935
;934:		case BLOCKED_UPPER_LEFT:
;935:			return LS_PARRY_UL;
CNSTI4 110
RETI4
ADDRGP4 $508
JUMPV
line 936
;936:			break;
LABELV $514
line 938
;937:		case BLOCKED_UPPER_LEFT_PROJ:
;938:			return LS_REFLECT_UL;
CNSTI4 115
RETI4
ADDRGP4 $508
JUMPV
line 939
;939:			break;
LABELV $515
line 941
;940:		case BLOCKED_LOWER_RIGHT:
;941:			return LS_PARRY_LR;
CNSTI4 111
RETI4
ADDRGP4 $508
JUMPV
line 942
;942:			break;
LABELV $516
line 944
;943:		case BLOCKED_LOWER_RIGHT_PROJ:
;944:			return LS_REFLECT_LR;
CNSTI4 116
RETI4
ADDRGP4 $508
JUMPV
line 945
;945:			break;
LABELV $517
line 947
;946:		case BLOCKED_LOWER_LEFT:
;947:			return LS_PARRY_LL;
CNSTI4 112
RETI4
ADDRGP4 $508
JUMPV
line 948
;948:			break;
LABELV $518
line 950
;949:		case BLOCKED_LOWER_LEFT_PROJ:
;950:			return LS_REFLECT_LL;
CNSTI4 117
RETI4
ADDRGP4 $508
JUMPV
line 951
;951:			break;
LABELV $519
line 953
;952:		case BLOCKED_TOP:
;953:			return LS_PARRY_UP;
CNSTI4 108
RETI4
ADDRGP4 $508
JUMPV
line 954
;954:			break;
LABELV $520
line 956
;955:		case BLOCKED_TOP_PROJ:
;956:			return LS_REFLECT_UP;
CNSTI4 113
RETI4
ADDRGP4 $508
JUMPV
line 957
;957:			break;
line 959
;958:		default:
;959:			break;
LABELV $510
line 962
;960:	}
;961:
;962:	return LS_NONE;
CNSTI4 0
RETI4
LABELV $508
endproc G_GetParryForBlock 4 0
export WP_GetSaberDeflectionAngle
proc WP_GetSaberDeflectionAngle 132 16
line 969
;963:}
;964:
;965:int PM_SaberBounceForAttack( int move );
;966:int PM_SaberDeflectionForQuad( int quad );
;967:extern stringID_table_t animTable[MAX_ANIMATIONS+1];
;968:qboolean WP_GetSaberDeflectionAngle( gentity_t *attacker, gentity_t *defender, float saberHitFraction )
;969:{
line 970
;970:	qboolean animBasedDeflection = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 972
;971:
;972:	if ( !attacker || !attacker->client || !attacker->client->ghoul2 )
ADDRLP4 4
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 8
CNSTU4 0
ASGNU4
ADDRLP4 4
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
EQU4 $527
ADDRLP4 12
ADDRLP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 12
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
EQU4 $527
ADDRLP4 12
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
NEU4 $524
LABELV $527
line 973
;973:	{
line 974
;974:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $524
line 976
;975:	}
;976:	if ( !defender || !defender->client || !defender->client->ghoul2 )
ADDRLP4 16
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 20
CNSTU4 0
ASGNU4
ADDRLP4 16
INDIRP4
CVPU4 4
ADDRLP4 20
INDIRU4
EQU4 $531
ADDRLP4 24
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CVPU4 4
ADDRLP4 20
INDIRU4
EQU4 $531
ADDRLP4 24
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 20
INDIRU4
NEU4 $528
LABELV $531
line 977
;977:	{
line 978
;978:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $528
line 981
;979:	}
;980:
;981:	if ((level.time - attacker->client->lastSaberStorageTime) > 500)
ADDRGP4 level+32
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1784
ADDP4
INDIRI4
SUBI4
CNSTI4 500
LEI4 $532
line 982
;982:	{ //last update was too long ago, something is happening to this client to prevent his saber from updating
line 983
;983:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $532
line 985
;984:	}
;985:	if ((level.time - defender->client->lastSaberStorageTime) > 500)
ADDRGP4 level+32
INDIRI4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1784
ADDP4
INDIRI4
SUBI4
CNSTI4 500
LEI4 $535
line 986
;986:	{ //ditto
line 987
;987:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $535
line 990
;988:	}
;989:
;990:	if ( animBasedDeflection )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $538
line 991
;991:	{
line 993
;992:		//Hmm, let's try just basing it off the anim
;993:		int attQuadStart = saberMoveData[attacker->client->ps.saberMove].startQuad;
ADDRLP4 36
CNSTI4 40
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+8
ADDP4
INDIRI4
ASGNI4
line 994
;994:		int attQuadEnd = saberMoveData[attacker->client->ps.saberMove].endQuad;
ADDRLP4 40
CNSTI4 40
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+12
ADDP4
INDIRI4
ASGNI4
line 995
;995:		int defQuad = saberMoveData[defender->client->ps.saberMove].endQuad;
ADDRLP4 32
CNSTI4 40
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+12
ADDP4
INDIRI4
ASGNI4
line 996
;996:		int quadDiff = fabs(defQuad-attQuadStart);
ADDRLP4 32
INDIRI4
ADDRLP4 36
INDIRI4
SUBI4
CVIF4 4
ARGF4
ADDRLP4 44
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 28
ADDRLP4 44
INDIRF4
CVFI4 4
ASGNI4
line 998
;997:
;998:		if ( defender->client->ps.saberMove == LS_READY )
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 1
NEI4 $543
line 999
;999:		{
line 1007
;1000:			//FIXME: we should probably do SOMETHING here...
;1001:			//I have this return qfalse here in the hopes that
;1002:			//the defender will pick a parry and the attacker
;1003:			//will hit the defender's saber again.
;1004:			//But maybe this func call should come *after*
;1005:			//it's decided whether or not the defender is
;1006:			//going to parry.
;1007:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $543
line 1011
;1008:		}
;1009:
;1010:		//reverse the left/right of the defQuad because of the mirrored nature of facing each other in combat
;1011:		switch ( defQuad )
ADDRLP4 48
ADDRLP4 32
INDIRI4
ASGNI4
ADDRLP4 48
INDIRI4
CNSTI4 0
LTI4 $545
ADDRLP4 48
INDIRI4
CNSTI4 6
GTI4 $545
ADDRLP4 48
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $553
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $553
address $547
address $548
address $549
address $545
address $550
address $551
address $552
code
line 1012
;1012:		{
LABELV $547
line 1014
;1013:		case Q_BR:
;1014:			defQuad = Q_BL;
ADDRLP4 32
CNSTI4 6
ASGNI4
line 1015
;1015:			break;
ADDRGP4 $546
JUMPV
LABELV $548
line 1017
;1016:		case Q_R:
;1017:			defQuad = Q_L;
ADDRLP4 32
CNSTI4 5
ASGNI4
line 1018
;1018:			break;
ADDRGP4 $546
JUMPV
LABELV $549
line 1020
;1019:		case Q_TR:
;1020:			defQuad = Q_TL;
ADDRLP4 32
CNSTI4 4
ASGNI4
line 1021
;1021:			break;
ADDRGP4 $546
JUMPV
LABELV $550
line 1023
;1022:		case Q_TL:
;1023:			defQuad = Q_TR;
ADDRLP4 32
CNSTI4 2
ASGNI4
line 1024
;1024:			break;
ADDRGP4 $546
JUMPV
LABELV $551
line 1026
;1025:		case Q_L:
;1026:			defQuad = Q_R;
ADDRLP4 32
CNSTI4 1
ASGNI4
line 1027
;1027:			break;
ADDRGP4 $546
JUMPV
LABELV $552
line 1029
;1028:		case Q_BL:
;1029:			defQuad = Q_BR;
ADDRLP4 32
CNSTI4 0
ASGNI4
line 1030
;1030:			break;
LABELV $545
LABELV $546
line 1033
;1031:		}
;1032:
;1033:		if ( quadDiff > 4 )
ADDRLP4 28
INDIRI4
CNSTI4 4
LEI4 $554
line 1034
;1034:		{//wrap around so diff is never greater than 180 (4 * 45)
line 1035
;1035:			quadDiff = 4 - (quadDiff - 4);
ADDRLP4 52
CNSTI4 4
ASGNI4
ADDRLP4 28
ADDRLP4 52
INDIRI4
ADDRLP4 28
INDIRI4
ADDRLP4 52
INDIRI4
SUBI4
SUBI4
ASGNI4
line 1036
;1036:		}
LABELV $554
line 1038
;1037:		//have the quads, find a good anim to use
;1038:		if ( (!quadDiff || (quadDiff == 1 && Q_irand(0,1))) //defender pretty much stopped the attack at a 90 degree angle
ADDRLP4 56
CNSTI4 0
ASGNI4
ADDRLP4 28
INDIRI4
ADDRLP4 56
INDIRI4
EQI4 $558
ADDRLP4 60
CNSTI4 1
ASGNI4
ADDRLP4 28
INDIRI4
ADDRLP4 60
INDIRI4
NEI4 $556
ADDRLP4 56
INDIRI4
ARGI4
ADDRLP4 60
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 0
EQI4 $556
LABELV $558
ADDRLP4 68
CNSTI4 408
ASGNI4
ADDRLP4 72
CNSTI4 1228
ASGNI4
ADDRLP4 76
ADDRFP4 4
INDIRP4
ADDRLP4 68
INDIRI4
ADDP4
INDIRP4
ADDRLP4 72
INDIRI4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 80
ADDRFP4 0
INDIRP4
ADDRLP4 68
INDIRI4
ADDP4
INDIRP4
ADDRLP4 72
INDIRI4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 76
INDIRI4
ADDRLP4 80
INDIRI4
EQI4 $559
CNSTI4 0
ARGI4
ADDRLP4 76
INDIRI4
ADDRLP4 80
INDIRI4
SUBI4
ARGI4
ADDRLP4 84
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 84
INDIRI4
CNSTI4 0
LTI4 $556
LABELV $559
line 1040
;1039:			&& (defender->client->ps.fd.saberAnimLevel == attacker->client->ps.fd.saberAnimLevel || Q_irand( 0, defender->client->ps.fd.saberAnimLevel-attacker->client->ps.fd.saberAnimLevel ) >= 0) )//and the defender's style is stronger
;1040:		{
line 1042
;1041:			//bounce straight back
;1042:			int attMove = attacker->client->ps.saberMove;
ADDRLP4 88
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
line 1043
;1043:			attacker->client->ps.saberMove = PM_SaberBounceForAttack( attacker->client->ps.saberMove );
ADDRLP4 92
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 92
INDIRP4
INDIRI4
ARGI4
ADDRLP4 96
ADDRGP4 PM_SaberBounceForAttack
CALLI4
ASGNI4
ADDRLP4 92
INDIRP4
ADDRLP4 96
INDIRI4
ASGNI4
line 1044
;1044:			if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $560
line 1045
;1045:			{
line 1046
;1046:				Com_Printf( "attack %s vs. parry %s bounced to %s\n", 
ADDRGP4 $563
ARGP4
ADDRLP4 100
CNSTI4 40
ASGNI4
ADDRLP4 104
CNSTI4 3
ASGNI4
ADDRLP4 108
ADDRGP4 animTable
ASGNP4
ADDRLP4 100
INDIRI4
ADDRLP4 88
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 104
INDIRI4
LSHI4
ADDRLP4 108
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 112
CNSTI4 408
ASGNI4
ADDRLP4 116
CNSTI4 512
ASGNI4
ADDRLP4 100
INDIRI4
ADDRFP4 4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRP4
ADDRLP4 116
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 104
INDIRI4
LSHI4
ADDRLP4 108
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 100
INDIRI4
ADDRFP4 0
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRP4
ADDRLP4 116
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 104
INDIRI4
LSHI4
ADDRLP4 108
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRGP4 Com_Printf
CALLV
pop
line 1050
;1047:					animTable[saberMoveData[attMove].animToUse].name, 
;1048:					animTable[saberMoveData[defender->client->ps.saberMove].animToUse].name,
;1049:					animTable[saberMoveData[attacker->client->ps.saberMove].animToUse].name );
;1050:			}
LABELV $560
line 1051
;1051:			attacker->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 1052
;1052:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $556
line 1055
;1053:		}
;1054:		else
;1055:		{//attack hit at an angle, figure out what angle it should bounce off att
line 1057
;1056:			int newQuad;
;1057:			quadDiff = defQuad - attQuadEnd;
ADDRLP4 28
ADDRLP4 32
INDIRI4
ADDRLP4 40
INDIRI4
SUBI4
ASGNI4
line 1059
;1058:			//add half the diff of between the defense and attack end to the attack end
;1059:			if ( quadDiff > 4 )
ADDRLP4 28
INDIRI4
CNSTI4 4
LEI4 $567
line 1060
;1060:			{
line 1061
;1061:				quadDiff = 4 - (quadDiff - 4);
ADDRLP4 92
CNSTI4 4
ASGNI4
ADDRLP4 28
ADDRLP4 92
INDIRI4
ADDRLP4 28
INDIRI4
ADDRLP4 92
INDIRI4
SUBI4
SUBI4
ASGNI4
line 1062
;1062:			}
ADDRGP4 $568
JUMPV
LABELV $567
line 1063
;1063:			else if ( quadDiff < -4 )
ADDRLP4 28
INDIRI4
CNSTI4 -4
GEI4 $569
line 1064
;1064:			{
line 1065
;1065:				quadDiff = -4 + (quadDiff + 4);
ADDRLP4 28
ADDRLP4 28
INDIRI4
CNSTI4 4
ADDI4
CNSTI4 -4
ADDI4
ASGNI4
line 1066
;1066:			}
LABELV $569
LABELV $568
line 1067
;1067:			newQuad = attQuadEnd + ceil( ((float)quadDiff)/2.0f );
ADDRLP4 28
INDIRI4
CVIF4 4
CNSTF4 1073741824
DIVF4
ARGF4
ADDRLP4 92
ADDRGP4 ceil
CALLF4
ASGNF4
ADDRLP4 88
ADDRLP4 40
INDIRI4
CVIF4 4
ADDRLP4 92
INDIRF4
ADDF4
CVFI4 4
ASGNI4
line 1068
;1068:			if ( newQuad < Q_BR )
ADDRLP4 88
INDIRI4
CNSTI4 0
GEI4 $571
line 1069
;1069:			{//less than zero wraps around
line 1070
;1070:				newQuad = Q_B + newQuad;
ADDRLP4 88
ADDRLP4 88
INDIRI4
CNSTI4 7
ADDI4
ASGNI4
line 1071
;1071:			}
LABELV $571
line 1072
;1072:			if ( newQuad == attQuadStart )
ADDRLP4 88
INDIRI4
ADDRLP4 36
INDIRI4
NEI4 $573
line 1073
;1073:			{//never come off at the same angle that we would have if the attack was not interrupted
line 1074
;1074:				if ( Q_irand(0, 1) )
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 96
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 96
INDIRI4
CNSTI4 0
EQI4 $575
line 1075
;1075:				{
line 1076
;1076:					newQuad--;
ADDRLP4 88
ADDRLP4 88
INDIRI4
CNSTI4 1
SUBI4
ASGNI4
line 1077
;1077:				}
ADDRGP4 $576
JUMPV
LABELV $575
line 1079
;1078:				else
;1079:				{
line 1080
;1080:					newQuad++;
ADDRLP4 88
ADDRLP4 88
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1081
;1081:				}
LABELV $576
line 1082
;1082:				if ( newQuad < Q_BR )
ADDRLP4 88
INDIRI4
CNSTI4 0
GEI4 $577
line 1083
;1083:				{
line 1084
;1084:					newQuad = Q_B;
ADDRLP4 88
CNSTI4 7
ASGNI4
line 1085
;1085:				}
ADDRGP4 $578
JUMPV
LABELV $577
line 1086
;1086:				else if ( newQuad > Q_B )
ADDRLP4 88
INDIRI4
CNSTI4 7
LEI4 $579
line 1087
;1087:				{
line 1088
;1088:					newQuad = Q_BR;
ADDRLP4 88
CNSTI4 0
ASGNI4
line 1089
;1089:				}
LABELV $579
LABELV $578
line 1090
;1090:			}
LABELV $573
line 1091
;1091:			if ( newQuad == defQuad )
ADDRLP4 88
INDIRI4
ADDRLP4 32
INDIRI4
NEI4 $581
line 1092
;1092:			{//bounce straight back
line 1093
;1093:				int attMove = attacker->client->ps.saberMove;
ADDRLP4 96
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
line 1094
;1094:				attacker->client->ps.saberMove = PM_SaberBounceForAttack( attacker->client->ps.saberMove );
ADDRLP4 100
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 100
INDIRP4
INDIRI4
ARGI4
ADDRLP4 104
ADDRGP4 PM_SaberBounceForAttack
CALLI4
ASGNI4
ADDRLP4 100
INDIRP4
ADDRLP4 104
INDIRI4
ASGNI4
line 1095
;1095:				if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $583
line 1096
;1096:				{
line 1097
;1097:					Com_Printf( "attack %s vs. parry %s bounced to %s\n", 
ADDRGP4 $563
ARGP4
ADDRLP4 108
CNSTI4 40
ASGNI4
ADDRLP4 112
CNSTI4 3
ASGNI4
ADDRLP4 116
ADDRGP4 animTable
ASGNP4
ADDRLP4 108
INDIRI4
ADDRLP4 96
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 112
INDIRI4
LSHI4
ADDRLP4 116
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 120
CNSTI4 408
ASGNI4
ADDRLP4 124
CNSTI4 512
ASGNI4
ADDRLP4 108
INDIRI4
ADDRFP4 4
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRP4
ADDRLP4 124
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 112
INDIRI4
LSHI4
ADDRLP4 116
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 108
INDIRI4
ADDRFP4 0
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRP4
ADDRLP4 124
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 112
INDIRI4
LSHI4
ADDRLP4 116
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRGP4 Com_Printf
CALLV
pop
line 1101
;1098:						animTable[saberMoveData[attMove].animToUse].name, 
;1099:						animTable[saberMoveData[defender->client->ps.saberMove].animToUse].name,
;1100:						animTable[saberMoveData[attacker->client->ps.saberMove].animToUse].name );
;1101:				}
LABELV $583
line 1102
;1102:				attacker->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 1103
;1103:				return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $581
line 1107
;1104:			}
;1105:			//else, pick a deflection
;1106:			else
;1107:			{
line 1108
;1108:				int attMove = attacker->client->ps.saberMove;
ADDRLP4 96
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
line 1109
;1109:				attacker->client->ps.saberMove = PM_SaberDeflectionForQuad( newQuad );
ADDRLP4 88
INDIRI4
ARGI4
ADDRLP4 100
ADDRGP4 PM_SaberDeflectionForQuad
CALLI4
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ADDRLP4 100
INDIRI4
ASGNI4
line 1110
;1110:				if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $589
line 1111
;1111:				{
line 1112
;1112:					Com_Printf( "attack %s vs. parry %s deflected to %s\n", 
ADDRGP4 $592
ARGP4
ADDRLP4 104
CNSTI4 40
ASGNI4
ADDRLP4 108
CNSTI4 3
ASGNI4
ADDRLP4 112
ADDRGP4 animTable
ASGNP4
ADDRLP4 104
INDIRI4
ADDRLP4 96
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 108
INDIRI4
LSHI4
ADDRLP4 112
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 116
CNSTI4 408
ASGNI4
ADDRLP4 120
CNSTI4 512
ASGNI4
ADDRLP4 104
INDIRI4
ADDRFP4 4
INDIRP4
ADDRLP4 116
INDIRI4
ADDP4
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 108
INDIRI4
LSHI4
ADDRLP4 112
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRLP4 104
INDIRI4
ADDRFP4 0
INDIRP4
ADDRLP4 116
INDIRI4
ADDP4
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRI4
MULI4
ADDRGP4 saberMoveData+4
ADDP4
INDIRI4
ADDRLP4 108
INDIRI4
LSHI4
ADDRLP4 112
INDIRP4
ADDP4
INDIRP4
ARGP4
ADDRGP4 Com_Printf
CALLV
pop
line 1116
;1113:						animTable[saberMoveData[attMove].animToUse].name, 
;1114:						animTable[saberMoveData[defender->client->ps.saberMove].animToUse].name,
;1115:						animTable[saberMoveData[attacker->client->ps.saberMove].animToUse].name );
;1116:				}
LABELV $589
line 1117
;1117:				attacker->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1118
;1118:				return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $523
JUMPV
LABELV $538
line 1123
;1119:			}
;1120:		}
;1121:	}
;1122:	else
;1123:	{ //old math-based method (probably broken)
line 1127
;1124:		vec3_t	att_HitDir, def_BladeDir, temp;
;1125:		float	hitDot;
;1126:
;1127:		VectorCopy(attacker->client->lastSaberBase_Always, temp);
ADDRLP4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1772
ADDP4
INDIRB
ASGNB 12
line 1129
;1128:
;1129:		AngleVectors(attacker->client->lastSaberDir_Always, att_HitDir, 0, 0);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1760
ADDP4
ARGP4
ADDRLP4 40
ARGP4
ADDRLP4 68
CNSTP4 0
ASGNP4
ADDRLP4 68
INDIRP4
ARGP4
ADDRLP4 68
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 1131
;1130:
;1131:		AngleVectors(defender->client->lastSaberDir_Always, def_BladeDir, 0, 0);
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1760
ADDP4
ARGP4
ADDRLP4 52
ARGP4
ADDRLP4 72
CNSTP4 0
ASGNP4
ADDRLP4 72
INDIRP4
ARGP4
ADDRLP4 72
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 1134
;1132:
;1133:		//now compare
;1134:		hitDot = DotProduct( att_HitDir, def_BladeDir );
ADDRLP4 64
ADDRLP4 40
INDIRF4
ADDRLP4 52
INDIRF4
MULF4
ADDRLP4 40+4
INDIRF4
ADDRLP4 52+4
INDIRF4
MULF4
ADDF4
ADDRLP4 40+8
INDIRF4
ADDRLP4 52+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1135
;1135:		if ( hitDot < 0.25f && hitDot > -0.25f )
ADDRLP4 76
ADDRLP4 64
INDIRF4
ASGNF4
ADDRLP4 76
INDIRF4
CNSTF4 1048576000
GEF4 $600
ADDRLP4 76
INDIRF4
CNSTF4 3196059648
LEF4 $600
line 1136
;1136:		{//hit pretty much perpendicular, pop straight back
line 1137
;1137:			attacker->client->ps.saberMove = PM_SaberBounceForAttack( attacker->client->ps.saberMove );
ADDRLP4 80
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 80
INDIRP4
INDIRI4
ARGI4
ADDRLP4 84
ADDRGP4 PM_SaberBounceForAttack
CALLI4
ASGNI4
ADDRLP4 80
INDIRP4
ADDRLP4 84
INDIRI4
ASGNI4
line 1138
;1138:			attacker->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 1139
;1139:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $523
JUMPV
LABELV $600
line 1142
;1140:		}
;1141:		else 
;1142:		{//a deflection
line 1147
;1143:			vec3_t	att_Right, att_Up, att_DeflectionDir;
;1144:			float	swingRDot, swingUDot;
;1145:
;1146:			//get the direction of the deflection
;1147:			VectorScale( def_BladeDir, hitDot, att_DeflectionDir );
ADDRLP4 124
ADDRLP4 64
INDIRF4
ASGNF4
ADDRLP4 80
ADDRLP4 52
INDIRF4
ADDRLP4 124
INDIRF4
MULF4
ASGNF4
ADDRLP4 80+4
ADDRLP4 52+4
INDIRF4
ADDRLP4 124
INDIRF4
MULF4
ASGNF4
ADDRLP4 80+8
ADDRLP4 52+8
INDIRF4
ADDRLP4 64
INDIRF4
MULF4
ASGNF4
line 1149
;1148:			//get our bounce straight back direction
;1149:			VectorScale( att_HitDir, -1.0f, temp );
ADDRLP4 128
CNSTF4 3212836864
ASGNF4
ADDRLP4 28
ADDRLP4 128
INDIRF4
ADDRLP4 40
INDIRF4
MULF4
ASGNF4
ADDRLP4 28+4
ADDRLP4 128
INDIRF4
ADDRLP4 40+4
INDIRF4
MULF4
ASGNF4
ADDRLP4 28+8
CNSTF4 3212836864
ADDRLP4 40+8
INDIRF4
MULF4
ASGNF4
line 1151
;1150:			//add the bounce back and deflection
;1151:			VectorAdd( att_DeflectionDir, temp, att_DeflectionDir );
ADDRLP4 80
ADDRLP4 80
INDIRF4
ADDRLP4 28
INDIRF4
ADDF4
ASGNF4
ADDRLP4 80+4
ADDRLP4 80+4
INDIRF4
ADDRLP4 28+4
INDIRF4
ADDF4
ASGNF4
ADDRLP4 80+8
ADDRLP4 80+8
INDIRF4
ADDRLP4 28+8
INDIRF4
ADDF4
ASGNF4
line 1153
;1152:			//normalize the result to determine what direction our saber should bounce back toward
;1153:			VectorNormalize( att_DeflectionDir );
ADDRLP4 80
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1156
;1154:
;1155:			//need to know the direction of the deflectoin relative to the attacker's facing
;1156:			VectorSet( temp, 0, attacker->client->ps.viewangles[YAW], 0 );//presumes no pitch!
ADDRLP4 28
CNSTF4 0
ASGNF4
ADDRLP4 28+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
ADDRLP4 28+8
CNSTF4 0
ASGNF4
line 1157
;1157:			AngleVectors( temp, NULL, att_Right, att_Up );
ADDRLP4 28
ARGP4
CNSTP4 0
ARGP4
ADDRLP4 92
ARGP4
ADDRLP4 104
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 1158
;1158:			swingRDot = DotProduct( att_Right, att_DeflectionDir );
ADDRLP4 116
ADDRLP4 92
INDIRF4
ADDRLP4 80
INDIRF4
MULF4
ADDRLP4 92+4
INDIRF4
ADDRLP4 80+4
INDIRF4
MULF4
ADDF4
ADDRLP4 92+8
INDIRF4
ADDRLP4 80+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1159
;1159:			swingUDot = DotProduct( att_Up, att_DeflectionDir );
ADDRLP4 120
ADDRLP4 104
INDIRF4
ADDRLP4 80
INDIRF4
MULF4
ADDRLP4 104+4
INDIRF4
ADDRLP4 80+4
INDIRF4
MULF4
ADDF4
ADDRLP4 104+8
INDIRF4
ADDRLP4 80+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 1161
;1160:
;1161:			if ( swingRDot > 0.25f )
ADDRLP4 116
INDIRF4
CNSTF4 1048576000
LEF4 $626
line 1162
;1162:			{//deflect to right
line 1163
;1163:				if ( swingUDot > 0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 1048576000
LEF4 $628
line 1164
;1164:				{//deflect to top
line 1165
;1165:					attacker->client->ps.saberMove = LS_D1_TR;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 83
ASGNI4
line 1166
;1166:				}
ADDRGP4 $627
JUMPV
LABELV $628
line 1167
;1167:				else if ( swingUDot < -0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 3196059648
GEF4 $630
line 1168
;1168:				{//deflect to bottom
line 1169
;1169:					attacker->client->ps.saberMove = LS_D1_BR;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 81
ASGNI4
line 1170
;1170:				}
ADDRGP4 $627
JUMPV
LABELV $630
line 1172
;1171:				else
;1172:				{//deflect horizontally
line 1173
;1173:					attacker->client->ps.saberMove = LS_D1__R;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 82
ASGNI4
line 1174
;1174:				}
line 1175
;1175:			}
ADDRGP4 $627
JUMPV
LABELV $626
line 1176
;1176:			else if ( swingRDot < -0.25f )
ADDRLP4 116
INDIRF4
CNSTF4 3196059648
GEF4 $632
line 1177
;1177:			{//deflect to left
line 1178
;1178:				if ( swingUDot > 0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 1048576000
LEF4 $634
line 1179
;1179:				{//deflect to top
line 1180
;1180:					attacker->client->ps.saberMove = LS_D1_TL;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 85
ASGNI4
line 1181
;1181:				}
ADDRGP4 $633
JUMPV
LABELV $634
line 1182
;1182:				else if ( swingUDot < -0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 3196059648
GEF4 $636
line 1183
;1183:				{//deflect to bottom
line 1184
;1184:					attacker->client->ps.saberMove = LS_D1_BL;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 87
ASGNI4
line 1185
;1185:				}
ADDRGP4 $633
JUMPV
LABELV $636
line 1187
;1186:				else
;1187:				{//deflect horizontally
line 1188
;1188:					attacker->client->ps.saberMove = LS_D1__L;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 86
ASGNI4
line 1189
;1189:				}
line 1190
;1190:			}
ADDRGP4 $633
JUMPV
LABELV $632
line 1192
;1191:			else
;1192:			{//deflect in middle
line 1193
;1193:				if ( swingUDot > 0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 1048576000
LEF4 $638
line 1194
;1194:				{//deflect to top
line 1195
;1195:					attacker->client->ps.saberMove = LS_D1_T_;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 84
ASGNI4
line 1196
;1196:				}
ADDRGP4 $639
JUMPV
LABELV $638
line 1197
;1197:				else if ( swingUDot < -0.25f )
ADDRLP4 120
INDIRF4
CNSTF4 3196059648
GEF4 $640
line 1198
;1198:				{//deflect to bottom
line 1199
;1199:					attacker->client->ps.saberMove = LS_D1_B_;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 88
ASGNI4
line 1200
;1200:				}
ADDRGP4 $641
JUMPV
LABELV $640
line 1202
;1201:				else
;1202:				{//deflect horizontally?  Well, no such thing as straight back in my face, so use top
line 1203
;1203:					if ( swingRDot > 0 )
ADDRLP4 116
INDIRF4
CNSTF4 0
LEF4 $642
line 1204
;1204:					{
line 1205
;1205:						attacker->client->ps.saberMove = LS_D1_TR;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 83
ASGNI4
line 1206
;1206:					}
ADDRGP4 $643
JUMPV
LABELV $642
line 1207
;1207:					else if ( swingRDot < 0 )
ADDRLP4 116
INDIRF4
CNSTF4 0
GEF4 $644
line 1208
;1208:					{
line 1209
;1209:						attacker->client->ps.saberMove = LS_D1_TL;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 85
ASGNI4
line 1210
;1210:					}
ADDRGP4 $645
JUMPV
LABELV $644
line 1212
;1211:					else
;1212:					{
line 1213
;1213:						attacker->client->ps.saberMove = LS_D1_T_;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
CNSTI4 84
ASGNI4
line 1214
;1214:					}
LABELV $645
LABELV $643
line 1215
;1215:				}
LABELV $641
LABELV $639
line 1216
;1216:			}
LABELV $633
LABELV $627
line 1218
;1217:
;1218:			attacker->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1219
;1219:			return qtrue;
CNSTI4 1
RETI4
LABELV $523
endproc WP_GetSaberDeflectionAngle 132 16
export G_KnockawayForParry
proc G_KnockawayForParry 4 0
line 1225
;1220:		}
;1221:	}
;1222:}
;1223:
;1224:int G_KnockawayForParry( int move )
;1225:{
line 1228
;1226:	//FIXME: need actual anims for this
;1227:	//FIXME: need to know which side of the saber was hit!  For now, we presume the saber gets knocked away from the center
;1228:	switch ( move )
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 108
LTI4 $647
ADDRLP4 0
INDIRI4
CNSTI4 112
GTI4 $647
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $654-432
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $654
address $649
address $650
address $651
address $652
address $653
code
line 1229
;1229:	{
LABELV $649
line 1231
;1230:	case LS_PARRY_UP:
;1231:		return LS_K1_T_;//push up
CNSTI4 103
RETI4
ADDRGP4 $646
JUMPV
line 1232
;1232:		break;
LABELV $650
LABELV $647
line 1235
;1233:	case LS_PARRY_UR:
;1234:	default://case LS_READY:
;1235:		return LS_K1_TR;//push up, slightly to right
CNSTI4 104
RETI4
ADDRGP4 $646
JUMPV
line 1236
;1236:		break;
LABELV $651
line 1238
;1237:	case LS_PARRY_UL:
;1238:		return LS_K1_TL;//push up and to left
CNSTI4 105
RETI4
ADDRGP4 $646
JUMPV
line 1239
;1239:		break;
LABELV $652
line 1241
;1240:	case LS_PARRY_LR:
;1241:		return LS_K1_BR;//push down and to left
CNSTI4 106
RETI4
ADDRGP4 $646
JUMPV
line 1242
;1242:		break;
LABELV $653
line 1244
;1243:	case LS_PARRY_LL:
;1244:		return LS_K1_BL;//push down and to right
CNSTI4 107
RETI4
line 1245
;1245:		break;
LABELV $646
endproc G_KnockawayForParry 4 0
export G_GetAttackDamage
proc G_GetAttackDamage 48 12
line 1253
;1246:	}
;1247:}
;1248:
;1249:#define SABER_NONATTACK_DAMAGE 1
;1250:
;1251://For strong attacks, we ramp damage based on the point in the attack animation
;1252:int G_GetAttackDamage(gentity_t *self, int minDmg, int maxDmg, float multPoint)
;1253:{
line 1254
;1254:	int peakDif = 0;
ADDRLP4 28
CNSTI4 0
ASGNI4
line 1255
;1255:	int speedDif = 0;
ADDRLP4 20
CNSTI4 0
ASGNI4
line 1256
;1256:	int totalDamage = maxDmg;
ADDRLP4 0
ADDRFP4 8
INDIRI4
ASGNI4
line 1257
;1257:	float peakPoint = 0;
ADDRLP4 4
CNSTF4 0
ASGNF4
line 1258
;1258:	float attackAnimLength = bgGlobalAnimations[self->client->ps.torsoAnim&~ANIM_TOGGLEBIT].numFrames * fabs(bgGlobalAnimations[self->client->ps.torsoAnim&~ANIM_TOGGLEBIT].frameLerp);
ADDRLP4 32
CNSTI4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
MULI4
ASGNI4
ADDRLP4 32
INDIRI4
ADDRGP4 bgGlobalAnimations+12
ADDP4
INDIRI4
CVIF4 4
ARGF4
ADDRLP4 36
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 8
ADDRLP4 32
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 36
INDIRF4
MULF4
ASGNF4
line 1259
;1259:	float currentPoint = 0;
ADDRLP4 12
CNSTF4 0
ASGNF4
line 1260
;1260:	float damageFactor = 0;
ADDRLP4 16
CNSTF4 0
ASGNF4
line 1261
;1261:	float animSpeedFactor = 1.0f;
ADDRLP4 24
CNSTF4 1065353216
ASGNF4
line 1264
;1262:
;1263:	//Be sure to scale by the proper anim speed just as if we were going to play the animation
;1264:	BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, self->client->ps.torsoAnim&~ANIM_TOGGLEBIT, &animSpeedFactor);
ADDRLP4 40
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ARGI4
ADDRLP4 40
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ARGI4
ADDRLP4 24
ARGP4
ADDRGP4 BG_SaberStartTransAnim
CALLV
pop
line 1265
;1265:	speedDif = attackAnimLength - (attackAnimLength * animSpeedFactor);
ADDRLP4 20
ADDRLP4 8
INDIRF4
ADDRLP4 8
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
SUBF4
CVFI4 4
ASGNI4
line 1266
;1266:	attackAnimLength += speedDif;
ADDRLP4 8
ADDRLP4 8
INDIRF4
ADDRLP4 20
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 1267
;1267:	peakPoint = attackAnimLength;
ADDRLP4 4
ADDRLP4 8
INDIRF4
ASGNF4
line 1268
;1268:	peakPoint -= attackAnimLength*multPoint;
ADDRLP4 4
ADDRLP4 4
INDIRF4
ADDRLP4 8
INDIRF4
ADDRFP4 12
INDIRF4
MULF4
SUBF4
ASGNF4
line 1271
;1269:
;1270:	//we treat torsoTimer as the point in the animation (closer it is to attackAnimLength, closer it is to beginning)
;1271:	currentPoint = self->client->ps.torsoTimer;
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
CVIF4 4
ASGNF4
line 1273
;1272:
;1273:	if (peakPoint > currentPoint)
ADDRLP4 4
INDIRF4
ADDRLP4 12
INDIRF4
LEF4 $659
line 1274
;1274:	{
line 1275
;1275:		peakDif = (peakPoint - currentPoint);
ADDRLP4 28
ADDRLP4 4
INDIRF4
ADDRLP4 12
INDIRF4
SUBF4
CVFI4 4
ASGNI4
line 1276
;1276:	}
ADDRGP4 $660
JUMPV
LABELV $659
line 1278
;1277:	else
;1278:	{
line 1279
;1279:		peakDif = (currentPoint - peakPoint);
ADDRLP4 28
ADDRLP4 12
INDIRF4
ADDRLP4 4
INDIRF4
SUBF4
CVFI4 4
ASGNI4
line 1280
;1280:	}
LABELV $660
line 1282
;1281:
;1282:	damageFactor = (float)((currentPoint/peakPoint));
ADDRLP4 16
ADDRLP4 12
INDIRF4
ADDRLP4 4
INDIRF4
DIVF4
ASGNF4
line 1283
;1283:	if (damageFactor > 1)
ADDRLP4 16
INDIRF4
CNSTF4 1065353216
LEF4 $661
line 1284
;1284:	{
line 1285
;1285:		damageFactor = (2.0f - damageFactor);
ADDRLP4 16
CNSTF4 1073741824
ADDRLP4 16
INDIRF4
SUBF4
ASGNF4
line 1286
;1286:	}
LABELV $661
line 1288
;1287:
;1288:	totalDamage *= damageFactor;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CVIF4 4
ADDRLP4 16
INDIRF4
MULF4
CVFI4 4
ASGNI4
line 1289
;1289:	if (totalDamage < minDmg)
ADDRLP4 0
INDIRI4
ADDRFP4 4
INDIRI4
GEI4 $663
line 1290
;1290:	{
line 1291
;1291:		totalDamage = minDmg;
ADDRLP4 0
ADDRFP4 4
INDIRI4
ASGNI4
line 1292
;1292:	}
LABELV $663
line 1293
;1293:	if (totalDamage > maxDmg)
ADDRLP4 0
INDIRI4
ADDRFP4 8
INDIRI4
LEI4 $665
line 1294
;1294:	{
line 1295
;1295:		totalDamage = maxDmg;
ADDRLP4 0
ADDRFP4 8
INDIRI4
ASGNI4
line 1296
;1296:	}
LABELV $665
line 1300
;1297:
;1298:	//Com_Printf("%i\n", totalDamage);
;1299:
;1300:	return totalDamage;
ADDRLP4 0
INDIRI4
RETI4
LABELV $656
endproc G_GetAttackDamage 48 12
export G_GetAnimPoint
proc G_GetAnimPoint 36 12
line 1305
;1301:}
;1302:
;1303://Get the point in the animation and return a percentage of the current point in the anim between 0 and the total anim length (0.0f - 1.0f)
;1304:float G_GetAnimPoint(gentity_t *self)
;1305:{
line 1306
;1306:	int speedDif = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 1307
;1307:	float attackAnimLength = bgGlobalAnimations[self->client->ps.torsoAnim&~ANIM_TOGGLEBIT].numFrames * fabs(bgGlobalAnimations[self->client->ps.torsoAnim&~ANIM_TOGGLEBIT].frameLerp);
ADDRLP4 20
CNSTI4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
MULI4
ASGNI4
ADDRLP4 20
INDIRI4
ADDRGP4 bgGlobalAnimations+12
ADDP4
INDIRI4
CVIF4 4
ARGF4
ADDRLP4 24
ADDRGP4 fabs
CALLF4
ASGNF4
ADDRLP4 0
ADDRLP4 20
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
ADDRLP4 24
INDIRF4
MULF4
ASGNF4
line 1308
;1308:	float currentPoint = 0;
ADDRLP4 8
CNSTF4 0
ASGNF4
line 1309
;1309:	float animSpeedFactor = 1.0f;
ADDRLP4 12
CNSTF4 1065353216
ASGNF4
line 1310
;1310:	float animPercentage = 0;
ADDRLP4 16
CNSTF4 0
ASGNF4
line 1313
;1311:
;1312:	//Be sure to scale by the proper anim speed just as if we were going to play the animation
;1313:	BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, self->client->ps.torsoAnim&~ANIM_TOGGLEBIT, &animSpeedFactor);
ADDRLP4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ARGI4
ADDRLP4 12
ARGP4
ADDRGP4 BG_SaberStartTransAnim
CALLV
pop
line 1314
;1314:	speedDif = attackAnimLength - (attackAnimLength * animSpeedFactor);
ADDRLP4 4
ADDRLP4 0
INDIRF4
ADDRLP4 0
INDIRF4
ADDRLP4 12
INDIRF4
MULF4
SUBF4
CVFI4 4
ASGNI4
line 1315
;1315:	attackAnimLength += speedDif;
ADDRLP4 0
ADDRLP4 0
INDIRF4
ADDRLP4 4
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 1317
;1316:
;1317:	currentPoint = self->client->ps.torsoTimer;
ADDRLP4 8
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 96
ADDP4
INDIRI4
CVIF4 4
ASGNF4
line 1319
;1318:
;1319:	animPercentage = currentPoint/attackAnimLength;
ADDRLP4 16
ADDRLP4 8
INDIRF4
ADDRLP4 0
INDIRF4
DIVF4
ASGNF4
line 1323
;1320:
;1321:	//Com_Printf("%f\n", animPercentage);
;1322:
;1323:	return animPercentage;
ADDRLP4 16
INDIRF4
RETF4
LABELV $667
endproc G_GetAnimPoint 36 12
export G_ClientIdleInWorld
proc G_ClientIdleInWorld 12 0
line 1327
;1324:}
;1325:
;1326:qboolean G_ClientIdleInWorld(gentity_t *ent)
;1327:{
line 1328
;1328:	if (!ent->client->pers.cmd.upmove &&
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 4
CNSTI4 0
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 1410
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 0
INDIRP4
CNSTI4 1408
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 0
INDIRP4
CNSTI4 1409
ADDP4
INDIRI1
CVII4 1
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
ADDRLP4 0
INDIRP4
CNSTI4 1400
ADDP4
INDIRI4
ASGNI4
ADDRLP4 8
INDIRI4
CNSTI4 8
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
INDIRI4
CNSTI4 128
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
INDIRI4
CNSTI4 512
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
INDIRI4
CNSTI4 1024
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
INDIRI4
CNSTI4 2048
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
ADDRLP4 8
INDIRI4
CNSTI4 1
BANDI4
ADDRLP4 4
INDIRI4
NEI4 $671
line 1338
;1329:		!ent->client->pers.cmd.forwardmove &&
;1330:		!ent->client->pers.cmd.rightmove &&
;1331:		!(ent->client->pers.cmd.buttons & BUTTON_GESTURE) &&
;1332:		/*!(ent->client->pers.cmd.buttons & BUTTON_FORCEGRIP) &&*/
;1333:		!(ent->client->pers.cmd.buttons & BUTTON_ALT_ATTACK) &&
;1334:		!(ent->client->pers.cmd.buttons & BUTTON_FORCEPOWER) &&
;1335:		!(ent->client->pers.cmd.buttons & BUTTON_FORCE_LIGHTNING) &&
;1336:		!(ent->client->pers.cmd.buttons & BUTTON_FORCE_DRAIN) &&
;1337:		!(ent->client->pers.cmd.buttons & BUTTON_ATTACK))
;1338:	{
line 1339
;1339:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $670
JUMPV
LABELV $671
line 1342
;1340:	}
;1341:
;1342:	return qfalse;
CNSTI4 0
RETI4
LABELV $670
endproc G_ClientIdleInWorld 12 0
lit
align 4
LABELV $679
byte 4 1065353216
byte 4 1065353216
byte 4 1065353216
export G_G2TraceCollide
code
proc G_G2TraceCollide 1104 48
line 1347
;1343:}
;1344:
;1345:#ifdef G2_COLLISION_ENABLED
;1346:qboolean G_G2TraceCollide(trace_t *tr, vec3_t lastValidStart, vec3_t lastValidEnd, vec3_t traceMins, vec3_t traceMaxs)
;1347:{
line 1348
;1348:	if (!g_saberGhoul2Collision.integer)
ADDRGP4 g_saberGhoul2Collision+12
INDIRI4
CNSTI4 0
NEI4 $674
line 1349
;1349:	{
line 1350
;1350:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $673
JUMPV
LABELV $674
line 1353
;1351:	}
;1352:
;1353:	if (tr->entityNum < MAX_CLIENTS)
ADDRFP4 0
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
CNSTI4 32
GEI4 $677
line 1354
;1354:	{ //Hit a client with the normal trace, try the collision trace.
line 1357
;1355:		G2Trace_t		G2Trace;
;1356:		gentity_t		*g2Hit;
;1357:		vec3_t			vIdentity = {1.0f, 1.0f, 1.0f};
ADDRLP4 1036
ADDRGP4 $679
INDIRB
ASGNB 12
line 1359
;1358:		vec3_t			angles;
;1359:		int				tN = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 1360
;1360:		float			fRadius = 0;
ADDRLP4 1032
CNSTF4 0
ASGNF4
line 1362
;1361:
;1362:		if (traceMins[0] ||
ADDRLP4 1060
ADDRFP4 12
INDIRP4
ASGNP4
ADDRLP4 1064
CNSTF4 0
ASGNF4
ADDRLP4 1060
INDIRP4
INDIRF4
ADDRLP4 1064
INDIRF4
NEF4 $686
ADDRLP4 1068
CNSTI4 4
ASGNI4
ADDRLP4 1060
INDIRP4
ADDRLP4 1068
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1064
INDIRF4
NEF4 $686
ADDRLP4 1072
CNSTI4 8
ASGNI4
ADDRLP4 1060
INDIRP4
ADDRLP4 1072
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1064
INDIRF4
NEF4 $686
ADDRLP4 1076
ADDRFP4 16
INDIRP4
ASGNP4
ADDRLP4 1076
INDIRP4
INDIRF4
ADDRLP4 1064
INDIRF4
NEF4 $686
ADDRLP4 1076
INDIRP4
ADDRLP4 1068
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1064
INDIRF4
NEF4 $686
ADDRLP4 1076
INDIRP4
ADDRLP4 1072
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1064
INDIRF4
EQF4 $680
LABELV $686
line 1368
;1363:			traceMins[1] ||
;1364:			traceMins[2] ||
;1365:			traceMaxs[0] ||
;1366:			traceMaxs[1] ||
;1367:			traceMaxs[2])
;1368:		{
line 1369
;1369:			fRadius=(traceMaxs[0]-traceMins[0])/2.0f;
ADDRLP4 1032
ADDRFP4 16
INDIRP4
INDIRF4
ADDRFP4 12
INDIRP4
INDIRF4
SUBF4
CNSTF4 1073741824
DIVF4
ASGNF4
line 1370
;1370:		}
LABELV $680
line 1372
;1371:
;1372:		memset (&G2Trace, 0, sizeof(G2Trace));
ADDRLP4 4
ARGP4
CNSTI4 0
ARGI4
CNSTI4 1024
ARGI4
ADDRGP4 memset
CALLP4
pop
ADDRGP4 $688
JUMPV
LABELV $687
line 1375
;1373:
;1374:		while (tN < MAX_G2_COLLISIONS)
;1375:		{
line 1376
;1376:			G2Trace[tN].mEntityNum = -1;
ADDRLP4 0
INDIRI4
CNSTI4 6
LSHI4
ADDRLP4 4+4
ADDP4
CNSTI4 -1
ASGNI4
line 1377
;1377:			tN++;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1378
;1378:		}
LABELV $688
line 1374
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $687
line 1379
;1379:		g2Hit = &g_entities[tr->entityNum];
ADDRLP4 1028
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 52
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1381
;1380:
;1381:		if (g2Hit && g2Hit->inuse && g2Hit->client && g2Hit->client->ghoul2)
ADDRLP4 1084
CNSTU4 0
ASGNU4
ADDRLP4 1028
INDIRP4
CVPU4 4
ADDRLP4 1084
INDIRU4
EQU4 $691
ADDRLP4 1028
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $691
ADDRLP4 1088
ADDRLP4 1028
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1088
INDIRP4
CVPU4 4
ADDRLP4 1084
INDIRU4
EQU4 $691
ADDRLP4 1088
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1084
INDIRU4
EQU4 $691
line 1382
;1382:		{
line 1383
;1383:			angles[ROLL] = angles[PITCH] = 0;
ADDRLP4 1092
CNSTF4 0
ASGNF4
ADDRLP4 1048
ADDRLP4 1092
INDIRF4
ASGNF4
ADDRLP4 1048+8
ADDRLP4 1092
INDIRF4
ASGNF4
line 1384
;1384:			angles[YAW] = g2Hit->client->ps.viewangles[YAW];
ADDRLP4 1048+4
ADDRLP4 1028
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 1386
;1385:
;1386:			trap_G2API_CollisionDetect ( G2Trace, g2Hit->client->ghoul2, angles, g2Hit->client->ps.origin, level.time, g2Hit->s.number, lastValidStart, lastValidEnd, vIdentity, 0, 2, fRadius );
ADDRLP4 4
ARGP4
ADDRLP4 1100
ADDRLP4 1028
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1100
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
ADDRLP4 1048
ARGP4
ADDRLP4 1100
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRLP4 1028
INDIRP4
INDIRI4
ARGI4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1036
ARGP4
CNSTI4 0
ARGI4
CNSTI4 2
ARGI4
ADDRLP4 1032
INDIRF4
ARGF4
ADDRGP4 trap_G2API_CollisionDetect
CALLV
pop
line 1388
;1387:
;1388:			if (G2Trace[0].mEntityNum != g2Hit->s.number)
ADDRLP4 4+4
INDIRI4
ADDRLP4 1028
INDIRP4
INDIRI4
EQI4 $696
line 1389
;1389:			{
line 1390
;1390:				tr->fraction = 1.0f;
ADDRFP4 0
INDIRP4
CNSTI4 8
ADDP4
CNSTF4 1065353216
ASGNF4
line 1391
;1391:				tr->entityNum = ENTITYNUM_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 52
ADDP4
CNSTI4 1023
ASGNI4
line 1392
;1392:				tr->startsolid = 0;
ADDRFP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 0
ASGNI4
line 1393
;1393:				tr->allsolid = 0;
ADDRFP4 0
INDIRP4
CNSTI4 0
ASGNI4
line 1394
;1394:				return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $673
JUMPV
LABELV $696
line 1397
;1395:			}
;1396:			else
;1397:			{ //The ghoul2 trace result matches, so copy the collision position into the trace endpos and send it back.
line 1398
;1398:				VectorCopy(G2Trace[0].mCollisionPosition, tr->endpos);
ADDRFP4 0
INDIRP4
CNSTI4 12
ADDP4
ADDRLP4 4+20
INDIRB
ASGNB 12
line 1399
;1399:				return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $673
JUMPV
LABELV $691
line 1402
;1400:			}
;1401:		}
;1402:	}
LABELV $677
line 1404
;1403:
;1404:	return qfalse;
CNSTI4 0
RETI4
LABELV $673
endproc G_G2TraceCollide 1104 48
export G_SaberInBackAttack
proc G_SaberInBackAttack 4 0
line 1409
;1405:}
;1406:#endif
;1407:
;1408:qboolean G_SaberInBackAttack(int move)
;1409:{
line 1410
;1410:	switch (move)
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 11
EQI4 $703
ADDRLP4 0
INDIRI4
CNSTI4 12
EQI4 $703
ADDRLP4 0
INDIRI4
CNSTI4 13
EQI4 $703
ADDRGP4 $701
JUMPV
line 1411
;1411:	{
LABELV $703
line 1415
;1412:	case LS_A_BACK:
;1413:	case LS_A_BACK_CR:
;1414:	case LS_A_BACKSTAB:
;1415:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $700
JUMPV
LABELV $701
line 1418
;1416:	}
;1417:
;1418:	return qfalse;
CNSTI4 0
RETI4
LABELV $700
endproc G_SaberInBackAttack 4 0
export CheckSaberDamage
proc CheckSaberDamage 1624 32
line 1425
;1419:}
;1420:
;1421://rww - MP version of the saber damage function. This is where all the things like blocking, triggering a parry,
;1422://triggering a broken parry, doing actual damage, etc. are done for the saber. It doesn't resemble the SP
;1423://version very much, but functionality is (hopefully) about the same.
;1424:qboolean CheckSaberDamage(gentity_t *self, vec3_t saberStart, vec3_t saberEnd, qboolean doInterpolate, int trMask)
;1425:{
line 1433
;1426:	trace_t tr;
;1427:	vec3_t dir;
;1428:	vec3_t saberTrMins, saberTrMaxs;
;1429:#ifdef G2_COLLISION_ENABLED
;1430:	vec3_t lastValidStart;
;1431:	vec3_t lastValidEnd;
;1432:#endif
;1433:	int dmg = 0;
ADDRLP4 1136
CNSTI4 0
ASGNI4
line 1434
;1434:	int attackStr = 0;
ADDRLP4 1168
CNSTI4 0
ASGNI4
line 1435
;1435:	float saberBoxSize = g_saberBoxTraceSize.value;
ADDRLP4 1140
ADDRGP4 g_saberBoxTraceSize+8
INDIRF4
ASGNF4
line 1436
;1436:	qboolean idleDamage = qfalse;
ADDRLP4 1172
CNSTI4 0
ASGNI4
line 1437
;1437:	qboolean didHit = qfalse;
ADDRLP4 1160
CNSTI4 0
ASGNI4
line 1438
;1438:	qboolean sabersClashed = qfalse;
ADDRLP4 1176
CNSTI4 0
ASGNI4
line 1439
;1439:	qboolean unblockable = qfalse;
ADDRLP4 1156
CNSTI4 0
ASGNI4
line 1440
;1440:	qboolean didDefense = qfalse;
ADDRLP4 1188
CNSTI4 0
ASGNI4
line 1441
;1441:	qboolean didOffense = qfalse;
ADDRLP4 1180
CNSTI4 0
ASGNI4
line 1442
;1442:	qboolean saberTraceDone = qfalse;
ADDRLP4 1128
CNSTI4 0
ASGNI4
line 1443
;1443:	qboolean otherUnblockable = qfalse;
ADDRLP4 1164
CNSTI4 0
ASGNI4
line 1444
;1444:	qboolean tryDeflectAgain = qfalse;
ADDRLP4 1184
CNSTI4 0
ASGNI4
line 1448
;1445:
;1446:	gentity_t *otherOwner;
;1447:
;1448:	if (self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1312
ADDP4
INDIRI4
CNSTI4 0
EQI4 $706
line 1449
;1449:	{
line 1450
;1450:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $706
line 1453
;1451:	}
;1452:
;1453:	memset (&tr, 0, sizeof(tr)); //make the compiler happy
ADDRLP4 0
ARGP4
CNSTI4 0
ARGI4
CNSTI4 1080
ARGI4
ADDRGP4 memset
CALLP4
pop
line 1455
;1454:#ifdef G2_COLLISION_ENABLED
;1455:	if (g_saberGhoul2Collision.integer)
ADDRGP4 g_saberGhoul2Collision+12
INDIRI4
CNSTI4 0
EQI4 $708
line 1456
;1456:	{
line 1457
;1457:		VectorSet(saberTrMins, -saberBoxSize*3, -saberBoxSize*3, -saberBoxSize*3);
ADDRLP4 1192
CNSTF4 1077936128
ADDRLP4 1140
INDIRF4
NEGF4
MULF4
ASGNF4
ADDRLP4 1080
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+4
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+8
CNSTF4 1077936128
ADDRLP4 1140
INDIRF4
NEGF4
MULF4
ASGNF4
line 1458
;1458:		VectorSet(saberTrMaxs, saberBoxSize*3, saberBoxSize*3, saberBoxSize*3);
ADDRLP4 1196
CNSTF4 1077936128
ADDRLP4 1140
INDIRF4
MULF4
ASGNF4
ADDRLP4 1092
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1092+4
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1092+8
CNSTF4 1077936128
ADDRLP4 1140
INDIRF4
MULF4
ASGNF4
line 1459
;1459:	}
ADDRGP4 $733
JUMPV
LABELV $708
line 1462
;1460:	else
;1461:#endif
;1462:	if (self->client->ps.fd.saberAnimLevel < FORCE_LEVEL_2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 2
GEI4 $715
line 1463
;1463:	{ //box trace for fast, because it doesn't get updated so often
line 1464
;1464:		VectorSet(saberTrMins, -saberBoxSize, -saberBoxSize, -saberBoxSize);
ADDRLP4 1192
ADDRLP4 1140
INDIRF4
NEGF4
ASGNF4
ADDRLP4 1080
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+4
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+8
ADDRLP4 1140
INDIRF4
NEGF4
ASGNF4
line 1465
;1465:		VectorSet(saberTrMaxs, saberBoxSize, saberBoxSize, saberBoxSize);
ADDRLP4 1092
ADDRLP4 1140
INDIRF4
ASGNF4
ADDRLP4 1092+4
ADDRLP4 1140
INDIRF4
ASGNF4
ADDRLP4 1092+8
ADDRLP4 1140
INDIRF4
ASGNF4
line 1466
;1466:	}
ADDRGP4 $733
JUMPV
LABELV $715
line 1467
;1467:	else if (g_saberAlwaysBoxTrace.integer)
ADDRGP4 g_saberAlwaysBoxTrace+12
INDIRI4
CNSTI4 0
EQI4 $721
line 1468
;1468:	{
line 1469
;1469:		VectorSet(saberTrMins, -saberBoxSize, -saberBoxSize, -saberBoxSize);
ADDRLP4 1192
ADDRLP4 1140
INDIRF4
NEGF4
ASGNF4
ADDRLP4 1080
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+4
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+8
ADDRLP4 1140
INDIRF4
NEGF4
ASGNF4
line 1470
;1470:		VectorSet(saberTrMaxs, saberBoxSize, saberBoxSize, saberBoxSize);
ADDRLP4 1092
ADDRLP4 1140
INDIRF4
ASGNF4
ADDRLP4 1092+4
ADDRLP4 1140
INDIRF4
ASGNF4
ADDRLP4 1092+8
ADDRLP4 1140
INDIRF4
ASGNF4
line 1471
;1471:	}
ADDRGP4 $733
JUMPV
LABELV $721
line 1473
;1472:	else
;1473:	{
line 1474
;1474:		VectorClear(saberTrMins);
ADDRLP4 1192
CNSTF4 0
ASGNF4
ADDRLP4 1080+8
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080+4
ADDRLP4 1192
INDIRF4
ASGNF4
ADDRLP4 1080
ADDRLP4 1192
INDIRF4
ASGNF4
line 1475
;1475:		VectorClear(saberTrMaxs);
ADDRLP4 1196
CNSTF4 0
ASGNF4
ADDRLP4 1092+8
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1092+4
ADDRLP4 1196
INDIRF4
ASGNF4
ADDRLP4 1092
ADDRLP4 1196
INDIRF4
ASGNF4
line 1476
;1476:	}
ADDRGP4 $733
JUMPV
LABELV $732
line 1479
;1477:
;1478:	while (!saberTraceDone)
;1479:	{
line 1480
;1480:		if (doInterpolate)
ADDRFP4 12
INDIRI4
CNSTI4 0
EQI4 $735
line 1481
;1481:		{ //This didn't quite work out like I hoped. But it's better than nothing. Sort of.
line 1483
;1482:			vec3_t oldSaberStart, oldSaberEnd, saberDif, oldSaberDif;
;1483:			int traceTests = 0;
ADDRLP4 1244
CNSTI4 0
ASGNI4
line 1484
;1484:			float trDif = 8;
ADDRLP4 1192
CNSTF4 1090519040
ASGNF4
line 1486
;1485:
;1486:			VectorCopy(self->client->lastSaberBase, oldSaberStart);
ADDRLP4 1196
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
INDIRB
ASGNB 12
line 1487
;1487:			VectorCopy(self->client->lastSaberTip, oldSaberEnd);
ADDRLP4 1208
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1736
ADDP4
INDIRB
ASGNB 12
line 1489
;1488:
;1489:			VectorSubtract(saberStart, saberEnd, saberDif);
ADDRLP4 1248
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1252
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1220
ADDRLP4 1248
INDIRP4
INDIRF4
ADDRLP4 1252
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1256
CNSTI4 4
ASGNI4
ADDRLP4 1220+4
ADDRLP4 1248
INDIRP4
ADDRLP4 1256
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1252
INDIRP4
ADDRLP4 1256
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1260
CNSTI4 8
ASGNI4
ADDRLP4 1220+8
ADDRFP4 4
INDIRP4
ADDRLP4 1260
INDIRI4
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
ADDRLP4 1260
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1490
;1490:			VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif);
ADDRLP4 1232
ADDRLP4 1196
INDIRF4
ADDRLP4 1208
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1232+4
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1208+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1232+8
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1208+8
INDIRF4
SUBF4
ASGNF4
line 1492
;1491:
;1492:			VectorNormalize(saberDif);
ADDRLP4 1220
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1493
;1493:			VectorNormalize(oldSaberDif);
ADDRLP4 1232
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1495
;1494:
;1495:			saberEnd[0] = saberStart[0] - (saberDif[0]*trDif);
ADDRFP4 8
INDIRP4
ADDRFP4 4
INDIRP4
INDIRF4
ADDRLP4 1220
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1496
;1496:			saberEnd[1] = saberStart[1] - (saberDif[1]*trDif);
ADDRLP4 1264
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1264
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1264
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1220+4
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1497
;1497:			saberEnd[2] = saberStart[2] - (saberDif[2]*trDif);
ADDRLP4 1268
CNSTI4 8
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1268
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1268
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1220+8
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1499
;1498:
;1499:			oldSaberEnd[0] = oldSaberStart[0] - (oldSaberDif[0]*trDif);
ADDRLP4 1208
ADDRLP4 1196
INDIRF4
ADDRLP4 1232
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1500
;1500:			oldSaberEnd[1] = oldSaberStart[1] - (oldSaberDif[1]*trDif);
ADDRLP4 1208+4
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1232+4
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1501
;1501:			oldSaberEnd[2] = oldSaberStart[2] - (oldSaberDif[2]*trDif);
ADDRLP4 1208+8
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1232+8
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1503
;1502:
;1503:			trap_Trace(&tr, saberEnd, saberTrMins, saberTrMaxs, saberStart, self->s.number, trMask);
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRFP4 16
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1505
;1504:#ifdef G2_COLLISION_ENABLED
;1505:			VectorCopy(saberEnd, lastValidStart);
ADDRLP4 1104
ADDRFP4 8
INDIRP4
INDIRB
ASGNB 12
line 1506
;1506:			VectorCopy(saberStart, lastValidEnd);
ADDRLP4 1116
ADDRFP4 4
INDIRP4
INDIRB
ASGNB 12
line 1507
;1507:			if (tr.entityNum < MAX_CLIENTS)
ADDRLP4 0+52
INDIRI4
CNSTI4 32
GEI4 $753
line 1508
;1508:			{
line 1509
;1509:				G_G2TraceCollide(&tr, lastValidStart, lastValidEnd, saberTrMins, saberTrMaxs);
ADDRLP4 0
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1116
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRGP4 G_G2TraceCollide
CALLI4
pop
line 1510
;1510:			}
LABELV $753
line 1513
;1511:#endif
;1512:
;1513:			trDif++;
ADDRLP4 1192
ADDRLP4 1192
INDIRF4
CNSTF4 1065353216
ADDF4
ASGNF4
ADDRGP4 $757
JUMPV
LABELV $756
line 1516
;1514:
;1515:			while (tr.fraction == 1.0 && traceTests < 4 && tr.entityNum >= ENTITYNUM_NONE)
;1516:			{
line 1517
;1517:				VectorCopy(self->client->lastSaberBase, oldSaberStart);
ADDRLP4 1196
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
INDIRB
ASGNB 12
line 1518
;1518:				VectorCopy(self->client->lastSaberTip, oldSaberEnd);
ADDRLP4 1208
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1736
ADDP4
INDIRB
ASGNB 12
line 1520
;1519:
;1520:				VectorSubtract(saberStart, saberEnd, saberDif);
ADDRLP4 1272
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1276
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1220
ADDRLP4 1272
INDIRP4
INDIRF4
ADDRLP4 1276
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1280
CNSTI4 4
ASGNI4
ADDRLP4 1220+4
ADDRLP4 1272
INDIRP4
ADDRLP4 1280
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1276
INDIRP4
ADDRLP4 1280
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1284
CNSTI4 8
ASGNI4
ADDRLP4 1220+8
ADDRFP4 4
INDIRP4
ADDRLP4 1284
INDIRI4
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
ADDRLP4 1284
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1521
;1521:				VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif);
ADDRLP4 1232
ADDRLP4 1196
INDIRF4
ADDRLP4 1208
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1232+4
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1208+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1232+8
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1208+8
INDIRF4
SUBF4
ASGNF4
line 1523
;1522:
;1523:				VectorNormalize(saberDif);
ADDRLP4 1220
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1524
;1524:				VectorNormalize(oldSaberDif);
ADDRLP4 1232
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1526
;1525:
;1526:				saberEnd[0] = saberStart[0] - (saberDif[0]*trDif);
ADDRFP4 8
INDIRP4
ADDRFP4 4
INDIRP4
INDIRF4
ADDRLP4 1220
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1527
;1527:				saberEnd[1] = saberStart[1] - (saberDif[1]*trDif);
ADDRLP4 1288
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1288
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1288
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1220+4
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1528
;1528:				saberEnd[2] = saberStart[2] - (saberDif[2]*trDif);
ADDRLP4 1292
CNSTI4 8
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1292
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1292
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1220+8
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1530
;1529:
;1530:				oldSaberEnd[0] = oldSaberStart[0] - (oldSaberDif[0]*trDif);
ADDRLP4 1208
ADDRLP4 1196
INDIRF4
ADDRLP4 1232
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1531
;1531:				oldSaberEnd[1] = oldSaberStart[1] - (oldSaberDif[1]*trDif);
ADDRLP4 1208+4
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1232+4
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1532
;1532:				oldSaberEnd[2] = oldSaberStart[2] - (oldSaberDif[2]*trDif);
ADDRLP4 1208+8
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1232+8
INDIRF4
ADDRLP4 1192
INDIRF4
MULF4
SUBF4
ASGNF4
line 1534
;1533:
;1534:				trap_Trace(&tr, saberEnd, saberTrMins, saberTrMaxs, saberStart, self->s.number, trMask);
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRFP4 16
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1536
;1535:#ifdef G2_COLLISION_ENABLED
;1536:				VectorCopy(saberEnd, lastValidStart);
ADDRLP4 1104
ADDRFP4 8
INDIRP4
INDIRB
ASGNB 12
line 1537
;1537:				VectorCopy(saberStart, lastValidEnd);
ADDRLP4 1116
ADDRFP4 4
INDIRP4
INDIRB
ASGNB 12
line 1538
;1538:				if (tr.entityNum < MAX_CLIENTS)
ADDRLP4 0+52
INDIRI4
CNSTI4 32
GEI4 $777
line 1539
;1539:				{
line 1540
;1540:					G_G2TraceCollide(&tr, lastValidStart, lastValidEnd, saberTrMins, saberTrMaxs);
ADDRLP4 0
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1116
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRGP4 G_G2TraceCollide
CALLI4
pop
line 1541
;1541:				}
LABELV $777
line 1543
;1542:#endif
;1543:				traceTests++;
ADDRLP4 1244
ADDRLP4 1244
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1544
;1544:				trDif += 8;
ADDRLP4 1192
ADDRLP4 1192
INDIRF4
CNSTF4 1090519040
ADDF4
ASGNF4
line 1545
;1545:			}
LABELV $757
line 1515
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $781
ADDRLP4 1244
INDIRI4
CNSTI4 4
GEI4 $781
ADDRLP4 0+52
INDIRI4
CNSTI4 1023
GEI4 $756
LABELV $781
line 1546
;1546:		}
ADDRGP4 $736
JUMPV
LABELV $735
line 1548
;1547:		else
;1548:		{
line 1549
;1549:			trap_Trace(&tr, saberStart, saberTrMins, saberTrMaxs, saberEnd, self->s.number, trMask);
ADDRLP4 0
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRFP4 16
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1551
;1550:#ifdef G2_COLLISION_ENABLED
;1551:			VectorCopy(saberStart, lastValidStart);
ADDRLP4 1104
ADDRFP4 4
INDIRP4
INDIRB
ASGNB 12
line 1552
;1552:			VectorCopy(saberEnd, lastValidEnd);
ADDRLP4 1116
ADDRFP4 8
INDIRP4
INDIRB
ASGNB 12
line 1553
;1553:			if (tr.entityNum < MAX_CLIENTS)
ADDRLP4 0+52
INDIRI4
CNSTI4 32
GEI4 $782
line 1554
;1554:			{
line 1555
;1555:				G_G2TraceCollide(&tr, lastValidStart, lastValidEnd, saberTrMins, saberTrMaxs);
ADDRLP4 0
ARGP4
ADDRLP4 1104
ARGP4
ADDRLP4 1116
ARGP4
ADDRLP4 1080
ARGP4
ADDRLP4 1092
ARGP4
ADDRGP4 G_G2TraceCollide
CALLI4
pop
line 1556
;1556:			}
LABELV $782
line 1558
;1557:#endif
;1558:		}
LABELV $736
line 1560
;1559:
;1560:		saberTraceDone = qtrue;
ADDRLP4 1128
CNSTI4 1
ASGNI4
line 1561
;1561:	}
LABELV $733
line 1478
ADDRLP4 1128
INDIRI4
CNSTI4 0
EQI4 $732
line 1563
;1562:
;1563:	if (SaberAttacking(self) &&
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1192
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 1192
INDIRI4
CNSTI4 0
EQI4 $785
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $785
line 1565
;1564:		self->client->ps.saberAttackWound < level.time)
;1565:	{ //this animation is that of the last attack movement, and so it should do full damage
line 1566
;1566:		qboolean saberInSpecial = BG_SaberInSpecial(self->client->ps.saberMove);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1204
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1196
ADDRLP4 1204
INDIRI4
ASGNI4
line 1567
;1567:		qboolean inBackAttack = G_SaberInBackAttack(self->client->ps.saberMove);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1208
ADDRGP4 G_SaberInBackAttack
CALLI4
ASGNI4
ADDRLP4 1200
ADDRLP4 1208
INDIRI4
ASGNI4
line 1569
;1568:
;1569:		dmg = SABER_HITDAMAGE;
ADDRLP4 1136
CNSTI4 35
ASGNI4
line 1571
;1570:
;1571:		if (self->client->ps.fd.saberAnimLevel == 3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
NEI4 $788
line 1572
;1572:		{
line 1574
;1573:			//new damage-ramping system
;1574:			if (!saberInSpecial && !inBackAttack)
ADDRLP4 1212
CNSTI4 0
ASGNI4
ADDRLP4 1196
INDIRI4
ADDRLP4 1212
INDIRI4
NEI4 $790
ADDRLP4 1200
INDIRI4
ADDRLP4 1212
INDIRI4
NEI4 $790
line 1575
;1575:			{
line 1576
;1576:				dmg = G_GetAttackDamage(self, 2, 120, 0.5f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 120
ARGI4
CNSTF4 1056964608
ARGF4
ADDRLP4 1216
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1216
INDIRI4
ASGNI4
line 1577
;1577:			}
ADDRGP4 $789
JUMPV
LABELV $790
line 1578
;1578:			else if (saberInSpecial &&
ADDRLP4 1196
INDIRI4
CNSTI4 0
EQI4 $792
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 15
NEI4 $792
line 1580
;1579:					 (self->client->ps.saberMove == LS_A_JUMP_T__B_))
;1580:			{
line 1581
;1581:				dmg = G_GetAttackDamage(self, 2, 180, 0.65f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 180
ARGI4
CNSTF4 1059481190
ARGF4
ADDRLP4 1216
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1216
INDIRI4
ASGNI4
line 1582
;1582:			}
ADDRGP4 $789
JUMPV
LABELV $792
line 1583
;1583:			else if (inBackAttack)
ADDRLP4 1200
INDIRI4
CNSTI4 0
EQI4 $794
line 1584
;1584:			{
line 1585
;1585:				dmg = G_GetAttackDamage(self, 2, 30, 0.5f); //can hit multiple times (and almost always does), so..
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 30
ARGI4
CNSTF4 1056964608
ARGF4
ADDRLP4 1216
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1216
INDIRI4
ASGNI4
line 1586
;1586:			}
ADDRGP4 $789
JUMPV
LABELV $794
line 1588
;1587:			else
;1588:			{
line 1589
;1589:				dmg = 100;
ADDRLP4 1136
CNSTI4 100
ASGNI4
line 1590
;1590:			}
line 1591
;1591:		}
ADDRGP4 $789
JUMPV
LABELV $788
line 1592
;1592:		else if (self->client->ps.fd.saberAnimLevel == 2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 2
NEI4 $796
line 1593
;1593:		{
line 1594
;1594:			if (saberInSpecial &&
ADDRLP4 1196
INDIRI4
CNSTI4 0
EQI4 $798
ADDRLP4 1212
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1212
INDIRI4
CNSTI4 16
EQI4 $800
ADDRLP4 1212
INDIRI4
CNSTI4 17
NEI4 $798
LABELV $800
line 1596
;1595:				(self->client->ps.saberMove == LS_A_FLIP_STAB || self->client->ps.saberMove == LS_A_FLIP_SLASH))
;1596:			{ //a well-timed hit with this can do a full 85
line 1597
;1597:				dmg = G_GetAttackDamage(self, 2, 80, 0.5f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 80
ARGI4
CNSTF4 1056964608
ARGF4
ADDRLP4 1216
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1216
INDIRI4
ASGNI4
line 1598
;1598:			}
ADDRGP4 $797
JUMPV
LABELV $798
line 1599
;1599:			else if (inBackAttack)
ADDRLP4 1200
INDIRI4
CNSTI4 0
EQI4 $801
line 1600
;1600:			{
line 1601
;1601:				dmg = G_GetAttackDamage(self, 2, 25, 0.5f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 25
ARGI4
CNSTF4 1056964608
ARGF4
ADDRLP4 1216
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1216
INDIRI4
ASGNI4
line 1602
;1602:			}
ADDRGP4 $797
JUMPV
LABELV $801
line 1604
;1603:			else
;1604:			{
line 1605
;1605:				dmg = 60;
ADDRLP4 1136
CNSTI4 60
ASGNI4
line 1606
;1606:			}
line 1607
;1607:		}
ADDRGP4 $797
JUMPV
LABELV $796
line 1608
;1608:		else if (self->client->ps.fd.saberAnimLevel == 1)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 1
NEI4 $803
line 1609
;1609:		{
line 1610
;1610:			if (saberInSpecial &&
ADDRLP4 1196
INDIRI4
CNSTI4 0
EQI4 $805
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 14
NEI4 $805
line 1612
;1611:				(self->client->ps.saberMove == LS_A_LUNGE))
;1612:			{
line 1613
;1613:				dmg = G_GetAttackDamage(self, 2, SABER_HITDAMAGE-5, 0.3f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 30
ARGI4
CNSTF4 1050253722
ARGF4
ADDRLP4 1212
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1212
INDIRI4
ASGNI4
line 1614
;1614:			}
ADDRGP4 $806
JUMPV
LABELV $805
line 1615
;1615:			else if (inBackAttack)
ADDRLP4 1200
INDIRI4
CNSTI4 0
EQI4 $807
line 1616
;1616:			{
line 1617
;1617:				dmg = G_GetAttackDamage(self, 2, 30, 0.5f);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
CNSTI4 30
ARGI4
CNSTF4 1056964608
ARGF4
ADDRLP4 1212
ADDRGP4 G_GetAttackDamage
CALLI4
ASGNI4
ADDRLP4 1136
ADDRLP4 1212
INDIRI4
ASGNI4
line 1618
;1618:			}
ADDRGP4 $808
JUMPV
LABELV $807
line 1620
;1619:			else
;1620:			{
line 1621
;1621:				dmg = SABER_HITDAMAGE;
ADDRLP4 1136
CNSTI4 35
ASGNI4
line 1622
;1622:			}
LABELV $808
LABELV $806
line 1623
;1623:		}
LABELV $803
LABELV $797
LABELV $789
line 1625
;1624:
;1625:		attackStr = self->client->ps.fd.saberAnimLevel;
ADDRLP4 1168
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
line 1626
;1626:	}
ADDRGP4 $786
JUMPV
LABELV $785
line 1627
;1627:	else if (self->client->ps.saberIdleWound < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $809
line 1628
;1628:	{ //just touching, do minimal damage and only check for it every 200ms (mainly to cut down on network traffic for hit events)
line 1629
;1629:		dmg = SABER_NONATTACK_DAMAGE;
ADDRLP4 1136
CNSTI4 1
ASGNI4
line 1630
;1630:		idleDamage = qtrue;
ADDRLP4 1172
CNSTI4 1
ASGNI4
line 1631
;1631:	}
LABELV $809
LABELV $786
line 1633
;1632:
;1633:	if (BG_SaberInSpecial(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1196
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1196
INDIRI4
CNSTI4 0
EQI4 $812
line 1634
;1634:	{
line 1635
;1635:		qboolean inBackAttack = G_SaberInBackAttack(self->client->ps.saberMove);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1204
ADDRGP4 G_SaberInBackAttack
CALLI4
ASGNI4
ADDRLP4 1200
ADDRLP4 1204
INDIRI4
ASGNI4
line 1637
;1636:
;1637:		unblockable = qtrue;
ADDRLP4 1156
CNSTI4 1
ASGNI4
line 1638
;1638:		self->client->ps.saberBlocked = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1640
;1639:
;1640:		if (!inBackAttack)
ADDRLP4 1200
INDIRI4
CNSTI4 0
NEI4 $814
line 1641
;1641:		{
line 1642
;1642:			if (self->client->ps.saberMove == LS_A_JUMP_T__B_)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 15
NEI4 $816
line 1643
;1643:			{ //do extra damage for special unblockables
line 1644
;1644:				dmg += 5; //This is very tiny, because this move has a huge damage ramp
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CNSTI4 5
ADDI4
ASGNI4
line 1645
;1645:			}
ADDRGP4 $817
JUMPV
LABELV $816
line 1646
;1646:			else if (self->client->ps.saberMove == LS_A_FLIP_STAB || self->client->ps.saberMove == LS_A_FLIP_SLASH)
ADDRLP4 1208
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1208
INDIRI4
CNSTI4 16
EQI4 $820
ADDRLP4 1208
INDIRI4
CNSTI4 17
NEI4 $818
LABELV $820
line 1647
;1647:			{
line 1648
;1648:				dmg += 5; //ditto
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CNSTI4 5
ADDI4
ASGNI4
line 1649
;1649:				if (dmg <= 40 || G_GetAnimPoint(self) <= 0.4f)
ADDRLP4 1136
INDIRI4
CNSTI4 40
LEI4 $823
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1212
ADDRGP4 G_GetAnimPoint
CALLF4
ASGNF4
ADDRLP4 1212
INDIRF4
CNSTF4 1053609165
GTF4 $819
LABELV $823
line 1650
;1650:				{ //sort of a hack, don't want it doing big damage in the off points of the anim
line 1651
;1651:					dmg = 2;
ADDRLP4 1136
CNSTI4 2
ASGNI4
line 1652
;1652:				}
line 1653
;1653:			}
ADDRGP4 $819
JUMPV
LABELV $818
line 1654
;1654:			else if (self->client->ps.saberMove == LS_A_LUNGE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 14
NEI4 $824
line 1655
;1655:			{
line 1656
;1656:				dmg += 2; //and ditto again
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CNSTI4 2
ADDI4
ASGNI4
line 1657
;1657:				if (G_GetAnimPoint(self) <= 0.4f)
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1212
ADDRGP4 G_GetAnimPoint
CALLF4
ASGNF4
ADDRLP4 1212
INDIRF4
CNSTF4 1053609165
GTF4 $825
line 1658
;1658:				{ //same as above
line 1659
;1659:					dmg = 2;
ADDRLP4 1136
CNSTI4 2
ASGNI4
line 1660
;1660:				}
line 1661
;1661:			}
ADDRGP4 $825
JUMPV
LABELV $824
line 1663
;1662:			else
;1663:			{
line 1664
;1664:				dmg += 20;
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CNSTI4 20
ADDI4
ASGNI4
line 1665
;1665:			}
LABELV $825
LABELV $819
LABELV $817
line 1666
;1666:		}
LABELV $814
line 1667
;1667:	}
LABELV $812
line 1669
;1668:
;1669:	if (!dmg)
ADDRLP4 1136
INDIRI4
CNSTI4 0
NEI4 $828
line 1670
;1670:	{
line 1671
;1671:		if (tr.entityNum < MAX_CLIENTS ||
ADDRLP4 0+52
INDIRI4
CNSTI4 32
LTI4 $838
ADDRLP4 1200
CNSTI4 828
ASGNI4
ADDRLP4 1204
CNSTI4 0
ASGNI4
ADDRLP4 1200
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 1204
INDIRI4
EQI4 $830
ADDRLP4 1200
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 1204
INDIRI4
EQI4 $830
LABELV $838
line 1673
;1672:			(g_entities[tr.entityNum].inuse && (g_entities[tr.entityNum].r.contents & CONTENTS_LIGHTSABER)))
;1673:		{
line 1674
;1674:			return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $704
JUMPV
LABELV $830
line 1676
;1675:		}
;1676:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $828
line 1679
;1677:	}
;1678:
;1679:	if (dmg > SABER_NONATTACK_DAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $839
line 1680
;1680:	{
line 1681
;1681:		dmg *= g_saberDamageScale.value;
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CVIF4 4
ADDRGP4 g_saberDamageScale+8
INDIRF4
MULF4
CVFI4 4
ASGNI4
line 1682
;1682:	}
LABELV $839
line 1684
;1683:
;1684:	if (dmg > SABER_NONATTACK_DAMAGE && self->client->ps.isJediMaster)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $842
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
CNSTI4 0
EQI4 $842
line 1685
;1685:	{ //give the Jedi Master more saber attack power
line 1686
;1686:		dmg *= 2;
ADDRLP4 1136
ADDRLP4 1136
INDIRI4
CNSTI4 1
LSHI4
ASGNI4
line 1687
;1687:	}
LABELV $842
line 1689
;1688:
;1689:	VectorSubtract(saberEnd, saberStart, dir);
ADDRLP4 1200
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1204
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1144
ADDRLP4 1200
INDIRP4
INDIRF4
ADDRLP4 1204
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1208
CNSTI4 4
ASGNI4
ADDRLP4 1144+4
ADDRLP4 1200
INDIRP4
ADDRLP4 1208
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1204
INDIRP4
ADDRLP4 1208
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1212
CNSTI4 8
ASGNI4
ADDRLP4 1144+8
ADDRFP4 8
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
INDIRF4
ADDRFP4 4
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1690
;1690:	VectorNormalize(dir);
ADDRLP4 1144
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1696
;1691:
;1692:	//rww - I'm saying || tr.startsolid here, because otherwise your saber tends to skip positions and go through
;1693:	//people, and the compensation traces start in their bbox too. Which results in the saber passing through people
;1694:	//when you visually cut right through them. Which sucks.
;1695:
;1696:	if ((tr.fraction != 1 || tr.startsolid) &&
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $857
ADDRLP4 0+4
INDIRI4
CNSTI4 0
EQI4 $846
LABELV $857
ADDRLP4 1216
CNSTI4 828
ASGNI4
ADDRLP4 1220
CNSTI4 0
ASGNI4
ADDRLP4 1216
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+680
ADDP4
INDIRI4
ADDRLP4 1220
INDIRI4
EQI4 $846
ADDRLP4 1216
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
ADDRLP4 1220
INDIRI4
GTI4 $858
ADDRLP4 1216
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+8
ADDP4
INDIRI4
CNSTI4 33554432
BANDI4
ADDRLP4 1220
INDIRI4
NEI4 $846
LABELV $858
ADDRLP4 0+52
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $846
line 1700
;1697:		g_entities[tr.entityNum].takedamage &&
;1698:		(g_entities[tr.entityNum].health > 0 || !(g_entities[tr.entityNum].s.eFlags & EF_DISINTEGRATION)) &&
;1699:		tr.entityNum != self->s.number)
;1700:	{
line 1703
;1701:		gentity_t *te;
;1702:
;1703:		if (idleDamage &&
ADDRLP4 1172
INDIRI4
CNSTI4 0
EQI4 $859
ADDRLP4 1228
CNSTI4 828
ASGNI4
ADDRLP4 1228
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $859
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1228
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1232
ADDRGP4 OnSameTeam
CALLI4
ASGNI4
ADDRLP4 1236
CNSTI4 0
ASGNI4
ADDRLP4 1232
INDIRI4
ADDRLP4 1236
INDIRI4
EQI4 $859
ADDRGP4 g_friendlySaber+12
INDIRI4
ADDRLP4 1236
INDIRI4
NEI4 $859
line 1707
;1704:			g_entities[tr.entityNum].client &&
;1705:			OnSameTeam(self, &g_entities[tr.entityNum]) &&
;1706:			!g_friendlySaber.integer)
;1707:		{
line 1708
;1708:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $859
line 1711
;1709:		}
;1710:
;1711:		if (g_entities[tr.entityNum].inuse && g_entities[tr.entityNum].client &&
ADDRLP4 1240
CNSTI4 828
ASGNI4
ADDRLP4 1244
CNSTI4 0
ASGNI4
ADDRLP4 1240
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 1244
INDIRI4
EQI4 $865
ADDRLP4 1240
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $865
ADDRLP4 1240
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 1244
INDIRI4
EQI4 $865
ADDRLP4 1240
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $865
line 1714
;1712:			g_entities[tr.entityNum].client->ps.duelInProgress &&
;1713:			g_entities[tr.entityNum].client->ps.duelIndex != self->s.number)
;1714:		{
line 1715
;1715:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $865
line 1718
;1716:		}
;1717:
;1718:		if (g_entities[tr.entityNum].inuse && g_entities[tr.entityNum].client &&
ADDRLP4 1248
CNSTI4 828
ASGNI4
ADDRLP4 1252
CNSTI4 0
ASGNI4
ADDRLP4 1248
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 1252
INDIRI4
EQI4 $875
ADDRLP4 1248
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $875
ADDRLP4 1256
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1256
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 1252
INDIRI4
EQI4 $875
ADDRLP4 1256
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRLP4 1248
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
INDIRI4
EQI4 $875
line 1721
;1719:			self->client->ps.duelInProgress &&
;1720:			self->client->ps.duelIndex != g_entities[tr.entityNum].s.number)
;1721:		{
line 1722
;1722:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $875
line 1725
;1723:		}
;1724:
;1725:		self->client->ps.saberIdleWound = level.time + g_saberDmgDelay_Idle.integer;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_saberDmgDelay_Idle+12
INDIRI4
ADDI4
ASGNI4
line 1727
;1726:
;1727:		didHit = qtrue;
ADDRLP4 1160
CNSTI4 1
ASGNI4
line 1729
;1728:
;1729:		if (g_entities[tr.entityNum].client && !unblockable && WP_SaberCanBlock(&g_entities[tr.entityNum], tr.endpos, 0, MOD_SABER, qfalse, attackStr))
ADDRLP4 1260
CNSTI4 828
ASGNI4
ADDRLP4 1260
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $884
ADDRLP4 1264
CNSTI4 0
ASGNI4
ADDRLP4 1156
INDIRI4
ADDRLP4 1264
INDIRI4
NEI4 $884
ADDRLP4 1260
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1264
INDIRI4
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 1264
INDIRI4
ARGI4
ADDRLP4 1168
INDIRI4
ARGI4
ADDRLP4 1268
ADDRGP4 WP_SaberCanBlock
CALLI4
ASGNI4
ADDRLP4 1268
INDIRI4
CNSTI4 0
EQI4 $884
line 1730
;1730:		{
line 1731
;1731:			te = G_TempEntity( tr.endpos, EV_SABER_BLOCK );
ADDRLP4 0+12
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 1272
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1224
ADDRLP4 1272
INDIRP4
ASGNP4
line 1732
;1732:			if (dmg <= SABER_NONATTACK_DAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 1
GTI4 $891
line 1733
;1733:			{
line 1734
;1734:				self->client->ps.saberIdleWound = level.time + g_saberDmgDelay_Idle.integer;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_saberDmgDelay_Idle+12
INDIRI4
ADDI4
ASGNI4
line 1735
;1735:			}
LABELV $891
line 1736
;1736:			VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1224
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1737
;1737:			VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1224
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1738
;1738:			te->s.eventParm = 1;
ADDRLP4 1224
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1740
;1739:
;1740:			if (dmg > SABER_NONATTACK_DAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $897
line 1741
;1741:			{
line 1742
;1742:				int lockFactor = g_saberLockFactor.integer;
ADDRLP4 1276
ADDRGP4 g_saberLockFactor+12
INDIRI4
ASGNI4
line 1744
;1743:
;1744:				if ((g_entities[tr.entityNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK] - self->client->ps.fd.forcePowerLevel[FP_SABERATTACK]) > 1 &&
ADDRLP4 1280
CNSTI4 1004
ASGNI4
ADDRLP4 1284
CNSTI4 1
ASGNI4
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
ADDRLP4 1280
INDIRI4
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ADDRLP4 1280
INDIRI4
ADDP4
INDIRI4
SUBI4
ADDRLP4 1284
INDIRI4
LEI4 $900
ADDRLP4 1284
INDIRI4
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1288
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1288
INDIRI4
ADDRLP4 1276
INDIRI4
CNSTI4 1
LSHI4
GEI4 $900
line 1746
;1745:					Q_irand(1, 10) < lockFactor*2)
;1746:				{ //Just got blocked by someone with a decently higher attack level, so enter into a lock (where they have the advantage due to a higher attack lev)
line 1747
;1747:					if (!G_ClientIdleInWorld(&g_entities[tr.entityNum]))
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1292
ADDRGP4 G_ClientIdleInWorld
CALLI4
ASGNI4
ADDRLP4 1292
INDIRI4
CNSTI4 0
NEI4 $901
line 1748
;1748:					{
line 1749
;1749:						if (WP_SabersCheckLock(self, &g_entities[tr.entityNum]))
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1296
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1296
INDIRI4
CNSTI4 0
EQI4 $901
line 1750
;1750:						{	
line 1751
;1751:							self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1752
;1752:							g_entities[tr.entityNum].client->ps.saberBlocked = BLOCKED_NONE;
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1753
;1753:							return didHit;
ADDRLP4 1160
INDIRI4
RETI4
ADDRGP4 $704
JUMPV
line 1755
;1754:						}
;1755:					}
line 1756
;1756:				}
LABELV $900
line 1757
;1757:				else if (Q_irand(1, 20) < lockFactor)
CNSTI4 1
ARGI4
CNSTI4 20
ARGI4
ADDRLP4 1292
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1292
INDIRI4
ADDRLP4 1276
INDIRI4
GEI4 $912
line 1758
;1758:				{
line 1759
;1759:					if (!G_ClientIdleInWorld(&g_entities[tr.entityNum]))
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1296
ADDRGP4 G_ClientIdleInWorld
CALLI4
ASGNI4
ADDRLP4 1296
INDIRI4
CNSTI4 0
NEI4 $914
line 1760
;1760:					{
line 1761
;1761:						if (WP_SabersCheckLock(self, &g_entities[tr.entityNum]))
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1300
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1300
INDIRI4
CNSTI4 0
EQI4 $917
line 1762
;1762:						{	
line 1763
;1763:							self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1764
;1764:							g_entities[tr.entityNum].client->ps.saberBlocked = BLOCKED_NONE;
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1765
;1765:							return didHit;
ADDRLP4 1160
INDIRI4
RETI4
ADDRGP4 $704
JUMPV
LABELV $917
line 1767
;1766:						}
;1767:					}
LABELV $914
line 1768
;1768:				}
LABELV $912
LABELV $901
line 1769
;1769:			}
LABELV $897
line 1770
;1770:			otherOwner = &g_entities[tr.entityNum];
ADDRLP4 1132
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1771
;1771:			goto blockStuff;
ADDRGP4 $923
JUMPV
LABELV $884
line 1774
;1772:		}
;1773:		else
;1774:		{
line 1775
;1775:			if (g_entities[tr.entityNum].client && g_entities[tr.entityNum].client->ps.usingATST)
ADDRLP4 1272
CNSTI4 828
ASGNI4
ADDRLP4 1272
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $924
ADDRLP4 1272
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $924
line 1776
;1776:			{
line 1777
;1777:				dmg *= 0.1;
ADDRLP4 1136
CNSTF4 1036831949
ADDRLP4 1136
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1778
;1778:			}
LABELV $924
line 1780
;1779:
;1780:			if (g_entities[tr.entityNum].client && !g_entities[tr.entityNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK])
ADDRLP4 1276
CNSTI4 828
ASGNI4
ADDRLP4 1276
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $930
ADDRLP4 1276
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1004
ADDP4
INDIRI4
CNSTI4 0
NEI4 $930
line 1781
;1781:			{ //not a "jedi", so make them suffer more
line 1782
;1782:				if (dmg > SABER_NONATTACK_DAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $936
line 1783
;1783:				{ //don't bother increasing just for idle touch damage
line 1784
;1784:					dmg *= 1.5;
ADDRLP4 1136
CNSTF4 1069547520
ADDRLP4 1136
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1785
;1785:				}
LABELV $936
line 1786
;1786:			}
LABELV $930
line 1788
;1787:
;1788:			if (g_entities[tr.entityNum].client && g_entities[tr.entityNum].client->ps.weapon == WP_SABER)
ADDRLP4 1280
CNSTI4 828
ASGNI4
ADDRLP4 1280
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $938
ADDRLP4 1280
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
NEI4 $938
line 1789
;1789:			{ //for jedi using the saber, half the damage (this comes with the increased default dmg debounce time)
line 1790
;1790:				if (dmg > SABER_NONATTACK_DAMAGE && !unblockable)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $944
ADDRLP4 1156
INDIRI4
CNSTI4 0
NEI4 $944
line 1791
;1791:				{ //don't reduce damage if it's only 1, or if this is an unblockable attack
line 1792
;1792:					if (dmg == SABER_HITDAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 35
NEI4 $946
line 1793
;1793:					{ //level 1 attack
line 1794
;1794:						dmg *= 0.7;
ADDRLP4 1136
CNSTF4 1060320051
ADDRLP4 1136
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1795
;1795:					}
ADDRGP4 $947
JUMPV
LABELV $946
line 1797
;1796:					else
;1797:					{
line 1798
;1798:						dmg *= 0.5;
ADDRLP4 1136
CNSTF4 1056964608
ADDRLP4 1136
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1799
;1799:					}
LABELV $947
line 1800
;1800:				}
LABELV $944
line 1801
;1801:			}
LABELV $938
line 1803
;1802:
;1803:			G_Damage(&g_entities[tr.entityNum], self, self, dir, tr.endpos, dmg, 0, MOD_SABER);
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1284
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1284
INDIRP4
ARGP4
ADDRLP4 1284
INDIRP4
ARGP4
ADDRLP4 1144
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1136
INDIRI4
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 1805
;1804:
;1805:			te = G_TempEntity( tr.endpos, EV_SABER_HIT );
ADDRLP4 0+12
ARGP4
CNSTI4 27
ARGI4
ADDRLP4 1288
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1224
ADDRLP4 1288
INDIRP4
ASGNP4
line 1807
;1806:
;1807:			VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1224
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1808
;1808:			VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1224
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1810
;1809:			
;1810:			if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1292
ADDRLP4 1224
INDIRP4
ASGNP4
ADDRLP4 1296
CNSTF4 0
ASGNF4
ADDRLP4 1292
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1296
INDIRF4
NEF4 $953
ADDRLP4 1292
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1296
INDIRF4
NEF4 $953
ADDRLP4 1292
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1296
INDIRF4
NEF4 $953
line 1811
;1811:			{ //don't let it play with no direction
line 1812
;1812:				te->s.angles[1] = 1;
ADDRLP4 1224
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 1813
;1813:			}
LABELV $953
line 1815
;1814:
;1815:			if (g_entities[tr.entityNum].client)
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $955
line 1816
;1816:			{
line 1817
;1817:				te->s.eventParm = 1;
ADDRLP4 1224
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1818
;1818:			}
ADDRGP4 $956
JUMPV
LABELV $955
line 1820
;1819:			else
;1820:			{
line 1821
;1821:				te->s.eventParm = 0;
ADDRLP4 1224
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 0
ASGNI4
line 1822
;1822:			}
LABELV $956
line 1824
;1823:
;1824:			self->client->ps.saberAttackWound = level.time + 100;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
ASGNI4
line 1825
;1825:		}
line 1826
;1826:	}
ADDRGP4 $847
JUMPV
LABELV $846
line 1827
;1827:	else if ((tr.fraction != 1 || tr.startsolid) &&
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $970
ADDRLP4 0+4
INDIRI4
CNSTI4 0
EQI4 $960
LABELV $970
ADDRLP4 1224
CNSTI4 828
ASGNI4
ADDRLP4 1224
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
CNSTI4 0
EQI4 $960
ADDRLP4 1224
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $960
line 1830
;1828:		(g_entities[tr.entityNum].r.contents & CONTENTS_LIGHTSABER) &&
;1829:		g_entities[tr.entityNum].r.contents != -1)
;1830:	{ //saber clash
line 1832
;1831:		gentity_t *te;
;1832:		otherOwner = &g_entities[g_entities[tr.entityNum].r.ownerNum];
ADDRLP4 1232
CNSTI4 828
ASGNI4
ADDRLP4 1132
ADDRLP4 1232
INDIRI4
ADDRLP4 1232
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+100
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1834
;1833:
;1834:		if (otherOwner &&
ADDRLP4 1240
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1240
INDIRU4
EQU4 $974
ADDRLP4 1132
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $974
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1240
INDIRU4
EQU4 $974
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1244
ADDRGP4 OnSameTeam
CALLI4
ASGNI4
ADDRLP4 1248
CNSTI4 0
ASGNI4
ADDRLP4 1244
INDIRI4
ADDRLP4 1248
INDIRI4
EQI4 $974
ADDRGP4 g_friendlySaber+12
INDIRI4
ADDRLP4 1248
INDIRI4
NEI4 $974
line 1839
;1835:			otherOwner->inuse &&
;1836:			otherOwner->client &&
;1837:			OnSameTeam(self, otherOwner) &&
;1838:			!g_friendlySaber.integer)
;1839:		{
line 1840
;1840:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $974
line 1843
;1841:		}
;1842:
;1843:		if (otherOwner && otherOwner->client &&
ADDRLP4 1256
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1256
INDIRU4
EQU4 $977
ADDRLP4 1260
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1260
INDIRP4
CVPU4 4
ADDRLP4 1256
INDIRU4
EQU4 $977
ADDRLP4 1260
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $977
ADDRLP4 1260
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $977
line 1846
;1844:			otherOwner->client->ps.duelInProgress &&
;1845:			otherOwner->client->ps.duelIndex != self->s.number)
;1846:		{
line 1847
;1847:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $977
line 1850
;1848:		}
;1849:
;1850:		if (otherOwner && otherOwner->client &&
ADDRLP4 1268
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1268
INDIRU4
EQU4 $979
ADDRLP4 1272
CNSTI4 408
ASGNI4
ADDRLP4 1132
INDIRP4
ADDRLP4 1272
INDIRI4
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1268
INDIRU4
EQU4 $979
ADDRLP4 1276
ADDRFP4 0
INDIRP4
ADDRLP4 1272
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1276
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $979
ADDRLP4 1276
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRLP4 1132
INDIRP4
INDIRI4
EQI4 $979
line 1853
;1851:			self->client->ps.duelInProgress &&
;1852:			self->client->ps.duelIndex != otherOwner->s.number)
;1853:		{
line 1854
;1854:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $979
line 1857
;1855:		}
;1856:
;1857:		didHit = qtrue;
ADDRLP4 1160
CNSTI4 1
ASGNI4
line 1858
;1858:		self->client->ps.saberIdleWound = level.time + g_saberDmgDelay_Idle.integer;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_saberDmgDelay_Idle+12
INDIRI4
ADDI4
ASGNI4
line 1860
;1859:
;1860:		te = G_TempEntity( tr.endpos, EV_SABER_BLOCK );
ADDRLP4 0+12
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 1280
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1228
ADDRLP4 1280
INDIRP4
ASGNP4
line 1861
;1861:		if (dmg <= SABER_NONATTACK_DAMAGE)
ADDRLP4 1136
INDIRI4
CNSTI4 1
GTI4 $984
line 1862
;1862:		{
line 1863
;1863:			self->client->ps.saberIdleWound = level.time + g_saberDmgDelay_Idle.integer;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_saberDmgDelay_Idle+12
INDIRI4
ADDI4
ASGNI4
line 1864
;1864:		}
LABELV $984
line 1866
;1865:
;1866:		VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1228
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1867
;1867:		VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1228
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1868
;1868:		te->s.eventParm = 1;
ADDRLP4 1228
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1870
;1869:
;1870:		sabersClashed = qtrue;
ADDRLP4 1176
CNSTI4 1
ASGNI4
LABELV $923
line 1873
;1871:
;1872:blockStuff:
;1873:		otherUnblockable = qfalse;
ADDRLP4 1164
CNSTI4 0
ASGNI4
line 1875
;1874:
;1875:		if (otherOwner && otherOwner->client && otherOwner->client->ps.saberInFlight)
ADDRLP4 1288
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1288
INDIRU4
EQU4 $990
ADDRLP4 1292
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1292
INDIRP4
CVPU4 4
ADDRLP4 1288
INDIRU4
EQU4 $990
ADDRLP4 1292
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $990
line 1876
;1876:		{
line 1877
;1877:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $704
JUMPV
LABELV $990
line 1880
;1878:		}
;1879:
;1880:		if (dmg > SABER_NONATTACK_DAMAGE && !unblockable && !otherUnblockable)
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $992
ADDRLP4 1296
CNSTI4 0
ASGNI4
ADDRLP4 1156
INDIRI4
ADDRLP4 1296
INDIRI4
NEI4 $992
ADDRLP4 1164
INDIRI4
ADDRLP4 1296
INDIRI4
NEI4 $992
line 1881
;1881:		{
line 1882
;1882:			int lockFactor = g_saberLockFactor.integer;
ADDRLP4 1300
ADDRGP4 g_saberLockFactor+12
INDIRI4
ASGNI4
line 1884
;1883:
;1884:			if (sabersClashed && Q_irand(1, 20) <= lockFactor)
ADDRLP4 1176
INDIRI4
CNSTI4 0
EQI4 $995
CNSTI4 1
ARGI4
CNSTI4 20
ARGI4
ADDRLP4 1304
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1304
INDIRI4
ADDRLP4 1300
INDIRI4
GTI4 $995
line 1885
;1885:			{
line 1886
;1886:				if (!G_ClientIdleInWorld(otherOwner))
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1308
ADDRGP4 G_ClientIdleInWorld
CALLI4
ASGNI4
ADDRLP4 1308
INDIRI4
CNSTI4 0
NEI4 $997
line 1887
;1887:				{
line 1888
;1888:					if (WP_SabersCheckLock(self, otherOwner))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1312
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1312
INDIRI4
CNSTI4 0
EQI4 $999
line 1889
;1889:					{
line 1890
;1890:						self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1891
;1891:						otherOwner->client->ps.saberBlocked = BLOCKED_NONE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1892
;1892:						return didHit;
ADDRLP4 1160
INDIRI4
RETI4
ADDRGP4 $704
JUMPV
LABELV $999
line 1894
;1893:					}
;1894:				}
LABELV $997
line 1895
;1895:			}
LABELV $995
line 1896
;1896:		}
LABELV $992
line 1898
;1897:
;1898:		if (!otherOwner || !otherOwner->client)
ADDRLP4 1304
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1304
INDIRU4
EQU4 $1003
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1304
INDIRU4
NEU4 $1001
LABELV $1003
line 1899
;1899:		{
line 1900
;1900:			return didHit;
ADDRLP4 1160
INDIRI4
RETI4
ADDRGP4 $704
JUMPV
LABELV $1001
line 1903
;1901:		}
;1902:
;1903:		if (BG_SaberInSpecial(otherOwner->client->ps.saberMove))
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1308
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1308
INDIRI4
CNSTI4 0
EQI4 $1004
line 1904
;1904:		{
line 1905
;1905:			otherUnblockable = qtrue;
ADDRLP4 1164
CNSTI4 1
ASGNI4
line 1906
;1906:			otherOwner->client->ps.saberBlocked = 0;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1907
;1907:		}
LABELV $1004
line 1909
;1908:
;1909:		if ( sabersClashed &&
ADDRLP4 1176
INDIRI4
CNSTI4 0
EQI4 $1006
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1006
ADDRLP4 1312
CNSTI4 408
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1312
INDIRI4
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
GEI4 $1006
ADDRLP4 1132
INDIRP4
ADDRLP4 1312
INDIRI4
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1316
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1316
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1320
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1320
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1324
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1324
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1328
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1328
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1332
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1332
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1336
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1336
INDIRI4
CNSTI4 0
NEI4 $1006
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1340
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1344
CNSTI4 0
ASGNI4
ADDRLP4 1340
INDIRI4
ADDRLP4 1344
INDIRI4
NEI4 $1006
ADDRLP4 1156
INDIRI4
ADDRLP4 1344
INDIRI4
NEI4 $1006
line 1920
;1910:			dmg > SABER_NONATTACK_DAMAGE &&
;1911:			 self->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3 &&
;1912:			 !PM_SaberInBounce(otherOwner->client->ps.saberMove) &&
;1913:			 !PM_SaberInParry(self->client->ps.saberMove) &&
;1914:			 !PM_SaberInBrokenParry(self->client->ps.saberMove) &&
;1915:			 !BG_SaberInSpecial(self->client->ps.saberMove) &&
;1916:			 !PM_SaberInBounce(self->client->ps.saberMove) &&
;1917:			 !PM_SaberInDeflect(self->client->ps.saberMove) &&
;1918:			 !PM_SaberInReflect(self->client->ps.saberMove) &&
;1919:			 !unblockable )
;1920:		{
line 1922
;1921:			//if (Q_irand(1, 10) <= 6)
;1922:			if (1) //for now, just always try a deflect. (deflect func can cause bounces too)
line 1923
;1923:			{
line 1924
;1924:				if (!WP_GetSaberDeflectionAngle(self, otherOwner, tr.fraction))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+8
INDIRF4
ARGF4
ADDRLP4 1348
ADDRGP4 WP_GetSaberDeflectionAngle
CALLI4
ASGNI4
ADDRLP4 1348
INDIRI4
CNSTI4 0
NEI4 $1010
line 1925
;1925:				{
line 1926
;1926:					tryDeflectAgain = qtrue; //Failed the deflect, try it again if we can if the guy we're smashing goes into a parry and we don't break it
ADDRLP4 1184
CNSTI4 1
ASGNI4
line 1927
;1927:				}
ADDRGP4 $1009
JUMPV
LABELV $1010
line 1929
;1928:				else
;1929:				{
line 1930
;1930:					self->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1931
;1931:					didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 1932
;1932:				}
line 1933
;1933:			}
ADDRGP4 $1009
JUMPV
LABELV $1008
line 1935
;1934:			else
;1935:			{
line 1936
;1936:				self->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 1937
;1937:				didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 1939
;1938:
;1939:				if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1013
line 1940
;1940:				{
line 1941
;1941:					Com_Printf("Client %i clashed into client %i's saber, did BLOCKED_ATK_BOUNCE\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1016
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 1942
;1942:				}
LABELV $1013
line 1943
;1943:			}
LABELV $1009
line 1944
;1944:		}
LABELV $1006
line 1946
;1945:
;1946:		if ( ((self->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3 && ((tryDeflectAgain && Q_irand(1, 10) <= 3) || (!tryDeflectAgain && Q_irand(1, 10) <= 7))) || (Q_irand(1, 10) <= 1 && otherOwner->client->ps.fd.saberAnimLevel >= FORCE_LEVEL_3))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
GEI4 $1022
ADDRLP4 1184
INDIRI4
CNSTI4 0
EQI4 $1021
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1348
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1348
INDIRI4
CNSTI4 3
LEI4 $1019
LABELV $1021
ADDRLP4 1184
INDIRI4
CNSTI4 0
NEI4 $1022
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1352
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1352
INDIRI4
CNSTI4 7
LEI4 $1019
LABELV $1022
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1356
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1356
INDIRI4
CNSTI4 1
GTI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1017
LABELV $1019
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1360
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1360
INDIRI4
CNSTI4 0
NEI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1364
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1364
INDIRI4
CNSTI4 0
NEI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1368
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1368
INDIRI4
CNSTI4 0
NEI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1372
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1372
INDIRI4
CNSTI4 0
NEI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1376
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1376
INDIRI4
CNSTI4 0
NEI4 $1017
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1380
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1384
CNSTI4 0
ASGNI4
ADDRLP4 1380
INDIRI4
ADDRLP4 1384
INDIRI4
NEI4 $1017
ADDRLP4 1388
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1392
ADDRLP4 1388
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1392
INDIRI4
CNSTI4 2
GTI4 $1023
ADDRLP4 1388
INDIRP4
CNSTI4 1008
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1017
ADDRLP4 1384
INDIRI4
ARGI4
ADDRLP4 1392
INDIRI4
ARGI4
ADDRLP4 1396
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1396
INDIRI4
CNSTI4 0
EQI4 $1017
LABELV $1023
ADDRLP4 1400
CNSTI4 0
ASGNI4
ADDRLP4 1156
INDIRI4
ADDRLP4 1400
INDIRI4
NEI4 $1017
ADDRLP4 1164
INDIRI4
ADDRLP4 1400
INDIRI4
NEI4 $1017
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1017
ADDRLP4 1180
INDIRI4
ADDRLP4 1400
INDIRI4
NEI4 $1017
line 1960
;1947:			&& !PM_SaberInBounce(self->client->ps.saberMove)
;1948:
;1949:			&& !PM_SaberInBrokenParry(otherOwner->client->ps.saberMove)
;1950:			&& !BG_SaberInSpecial(otherOwner->client->ps.saberMove)
;1951:			&& !PM_SaberInBounce(otherOwner->client->ps.saberMove)
;1952:			&& !PM_SaberInDeflect(otherOwner->client->ps.saberMove)
;1953:			&& !PM_SaberInReflect(otherOwner->client->ps.saberMove)
;1954:
;1955:			&& (otherOwner->client->ps.fd.saberAnimLevel > FORCE_LEVEL_2 || ( otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= 3 && Q_irand(0, otherOwner->client->ps.fd.saberAnimLevel) )) 
;1956:			&& !unblockable
;1957:			&& !otherUnblockable
;1958:			&& dmg > SABER_NONATTACK_DAMAGE
;1959:			&& !didOffense) //don't allow the person we're attacking to do this if we're making an unblockable attack
;1960:		{//knockaways can make fast-attacker go into a broken parry anim if the ent is using fast or med. In MP, we also randomly decide this for level 3 attacks.
line 1963
;1961:			//Going to go ahead and let idle damage do simple knockaways. Looks sort of good that way.
;1962:			//turn the parry into a knockaway
;1963:			if (!PM_SaberInParry(otherOwner->client->ps.saberMove))
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1404
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1404
INDIRI4
CNSTI4 0
NEI4 $1024
line 1964
;1964:			{
line 1965
;1965:				WP_SaberBlockNonRandom(otherOwner, tr.endpos, qfalse);
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 1966
;1966:				otherOwner->client->ps.saberMove = BG_KnockawayForParry( otherOwner->client->ps.saberBlocked );
ADDRLP4 1408
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1408
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ARGI4
ADDRLP4 1412
ADDRGP4 BG_KnockawayForParry
CALLI4
ASGNI4
ADDRLP4 1408
INDIRP4
CNSTI4 512
ADDP4
ADDRLP4 1412
INDIRI4
ASGNI4
line 1967
;1967:				otherOwner->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1968
;1968:			}
ADDRGP4 $1025
JUMPV
LABELV $1024
line 1970
;1969:			else
;1970:			{
line 1971
;1971:				otherOwner->client->ps.saberMove = G_KnockawayForParry(otherOwner->client->ps.saberMove); //BG_KnockawayForParry( otherOwner->client->ps.saberBlocked );
ADDRLP4 1408
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 1408
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1412
ADDRGP4 G_KnockawayForParry
CALLI4
ASGNI4
ADDRLP4 1408
INDIRP4
ADDRLP4 1412
INDIRI4
ASGNI4
line 1972
;1972:				otherOwner->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1973
;1973:			}
LABELV $1025
line 1976
;1974:	
;1975:			//make them (me) go into a broken parry
;1976:			self->client->ps.saberMove = BG_BrokenParryForAttack( self->client->ps.saberMove );
ADDRLP4 1408
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 1408
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1412
ADDRGP4 BG_BrokenParryForAttack
CALLI4
ASGNI4
ADDRLP4 1408
INDIRP4
ADDRLP4 1412
INDIRI4
ASGNI4
line 1977
;1977:			self->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 1
ASGNI4
line 1979
;1978:
;1979:			if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1027
line 1980
;1980:			{
line 1981
;1981:				Com_Printf("Client %i sent client %i into a reflected attack with a knockaway\n", otherOwner->s.number, self->s.number);
ADDRGP4 $1030
ARGP4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 1982
;1982:			}
LABELV $1027
line 1984
;1983:
;1984:			didDefense = qtrue;
ADDRLP4 1188
CNSTI4 1
ASGNI4
line 1985
;1985:		}
ADDRGP4 $1018
JUMPV
LABELV $1017
line 1986
;1986:		else if ((self->client->ps.fd.saberAnimLevel > FORCE_LEVEL_2 || unblockable) && //if we're doing a special attack, we can send them into a broken parry too (MP only)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CNSTI4 2
GTI4 $1033
ADDRLP4 1156
INDIRI4
CNSTI4 0
EQI4 $1031
LABELV $1033
ADDRLP4 1404
CNSTI4 408
ASGNI4
ADDRLP4 1408
ADDRLP4 1132
INDIRP4
ADDRLP4 1404
INDIRI4
ADDP4
INDIRP4
CNSTI4 1008
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1412
ADDRFP4 0
INDIRP4
ADDRLP4 1404
INDIRI4
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1408
INDIRI4
ADDRLP4 1412
INDIRI4
LTI4 $1035
ADDRLP4 1408
INDIRI4
ADDRLP4 1412
INDIRI4
NEI4 $1031
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1416
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1416
INDIRI4
CVIF4 4
CNSTF4 1069547520
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
CVIF4 4
MULF4
GEF4 $1035
ADDRLP4 1156
INDIRI4
CNSTI4 0
EQI4 $1031
LABELV $1035
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1420
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1420
INDIRI4
CNSTI4 0
EQI4 $1031
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1424
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1424
INDIRI4
CNSTI4 0
NEI4 $1031
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1428
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1428
INDIRI4
CNSTI4 0
NEI4 $1031
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1432
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1432
INDIRI4
CNSTI4 0
NEI4 $1031
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1436
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1440
CNSTI4 0
ASGNI4
ADDRLP4 1436
INDIRI4
ADDRLP4 1440
INDIRI4
NEI4 $1031
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1031
ADDRLP4 1180
INDIRI4
ADDRLP4 1440
INDIRI4
NEI4 $1031
ADDRLP4 1164
INDIRI4
ADDRLP4 1440
INDIRI4
NEI4 $1031
line 1996
;1987:				 ( otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] < self->client->ps.fd.saberAnimLevel || (otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == self->client->ps.fd.saberAnimLevel && (Q_irand(1, 10) >= otherOwner->client->ps.fd.saberAnimLevel*1.5 || unblockable)) ) &&
;1988:				 PM_SaberInParry(otherOwner->client->ps.saberMove) &&
;1989:				 !PM_SaberInBrokenParry(otherOwner->client->ps.saberMove) &&
;1990:				 !PM_SaberInParry(self->client->ps.saberMove) &&
;1991:				 !PM_SaberInBrokenParry(self->client->ps.saberMove) &&
;1992:				 !PM_SaberInBounce(self->client->ps.saberMove) &&
;1993:				 dmg > SABER_NONATTACK_DAMAGE &&
;1994:				 !didOffense &&
;1995:				 !otherUnblockable)
;1996:		{ //they are in a parry, and we are slamming down on them with a move of equal or greater force than their defense, so send them into a broken parry.. unless they are already in one.
line 1997
;1997:			if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1036
line 1998
;1998:			{
line 1999
;1999:				Com_Printf("Client %i sent client %i into a broken parry\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1039
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2000
;2000:			}
LABELV $1036
line 2002
;2001:
;2002:			otherOwner->client->ps.saberMove = BG_BrokenParryForParry( otherOwner->client->ps.saberMove );
ADDRLP4 1444
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 1444
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1448
ADDRGP4 BG_BrokenParryForParry
CALLI4
ASGNI4
ADDRLP4 1444
INDIRP4
ADDRLP4 1448
INDIRI4
ASGNI4
line 2003
;2003:			otherOwner->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 2005
;2004:
;2005:			didDefense = qtrue;
ADDRLP4 1188
CNSTI4 1
ASGNI4
line 2006
;2006:		}
ADDRGP4 $1032
JUMPV
LABELV $1031
line 2007
;2007:		else if ((self->client->ps.fd.saberAnimLevel > FORCE_LEVEL_2) && //if we're doing a special attack, we can send them into a broken parry too (MP only)
ADDRLP4 1444
CNSTI4 408
ASGNI4
ADDRLP4 1448
CNSTI4 1228
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1444
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1448
INDIRI4
ADDP4
INDIRI4
CNSTI4 2
LEI4 $1040
ADDRLP4 1452
ADDRLP4 1132
INDIRP4
ADDRLP4 1444
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1452
INDIRP4
ADDRLP4 1448
INDIRI4
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1040
ADDRLP4 1452
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1456
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1456
INDIRI4
CNSTI4 0
EQI4 $1040
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1460
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1460
INDIRI4
CNSTI4 0
NEI4 $1040
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1464
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1464
INDIRI4
CNSTI4 0
NEI4 $1040
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1468
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1468
INDIRI4
CNSTI4 0
NEI4 $1040
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1472
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1472
INDIRI4
CNSTI4 0
NEI4 $1040
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1476
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1476
INDIRI4
CNSTI4 0
NEI4 $1040
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1480
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1484
CNSTI4 0
ASGNI4
ADDRLP4 1480
INDIRI4
ADDRLP4 1484
INDIRI4
NEI4 $1040
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1040
ADDRLP4 1180
INDIRI4
ADDRLP4 1484
INDIRI4
NEI4 $1040
ADDRLP4 1156
INDIRI4
ADDRLP4 1484
INDIRI4
NEI4 $1040
line 2020
;2008:				 //( otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] < self->client->ps.fd.saberAnimLevel || (otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == self->client->ps.fd.saberAnimLevel && (Q_irand(1, 10) >= otherOwner->client->ps.fd.saberAnimLevel*3 || unblockable)) ) &&
;2009:				 otherOwner->client->ps.fd.saberAnimLevel >= FORCE_LEVEL_3 &&
;2010:				 PM_SaberInParry(otherOwner->client->ps.saberMove) &&
;2011:				 !PM_SaberInBrokenParry(otherOwner->client->ps.saberMove) &&
;2012:				 !PM_SaberInParry(self->client->ps.saberMove) &&
;2013:				 !PM_SaberInBrokenParry(self->client->ps.saberMove) &&
;2014:				 !PM_SaberInBounce(self->client->ps.saberMove) &&
;2015:				 !PM_SaberInDeflect(self->client->ps.saberMove) &&
;2016:				 !PM_SaberInReflect(self->client->ps.saberMove) &&
;2017:				 dmg > SABER_NONATTACK_DAMAGE &&
;2018:				 !didOffense &&
;2019:				 !unblockable)
;2020:		{ //they are in a parry, and we are slamming down on them with a move of equal or greater force than their defense, so send them into a broken parry.. unless they are already in one.
line 2021
;2021:			if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1042
line 2022
;2022:			{
line 2023
;2023:				Com_Printf("Client %i bounced off of client %i's saber\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1045
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2024
;2024:			}
LABELV $1042
line 2026
;2025:
;2026:			if (!tryDeflectAgain)
ADDRLP4 1184
INDIRI4
CNSTI4 0
NEI4 $1046
line 2027
;2027:			{
line 2028
;2028:				if (!WP_GetSaberDeflectionAngle(self, otherOwner, tr.fraction))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+8
INDIRF4
ARGF4
ADDRLP4 1488
ADDRGP4 WP_GetSaberDeflectionAngle
CALLI4
ASGNI4
ADDRLP4 1488
INDIRI4
CNSTI4 0
NEI4 $1048
line 2029
;2029:				{
line 2030
;2030:					tryDeflectAgain = qtrue;
ADDRLP4 1184
CNSTI4 1
ASGNI4
line 2031
;2031:				}
LABELV $1048
line 2032
;2032:			}
LABELV $1046
line 2034
;2033:
;2034:			didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 2035
;2035:		}
ADDRGP4 $1041
JUMPV
LABELV $1040
line 2036
;2036:		else if (SaberAttacking(otherOwner) && dmg > SABER_NONATTACK_DAMAGE && !BG_SaberInSpecial(otherOwner->client->ps.saberMove) && !didOffense && !otherUnblockable)
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1488
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 1488
INDIRI4
CNSTI4 0
EQI4 $1051
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1051
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1492
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1496
CNSTI4 0
ASGNI4
ADDRLP4 1492
INDIRI4
ADDRLP4 1496
INDIRI4
NEI4 $1051
ADDRLP4 1180
INDIRI4
ADDRLP4 1496
INDIRI4
NEI4 $1051
ADDRLP4 1164
INDIRI4
ADDRLP4 1496
INDIRI4
NEI4 $1051
line 2037
;2037:		{ //they were attacking and our saber hit their saber, make them bounce. But if they're in a special attack, leave them.
line 2038
;2038:			if (!PM_SaberInBounce(self->client->ps.saberMove) &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1500
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1500
INDIRI4
CNSTI4 0
NEI4 $1053
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1504
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1504
INDIRI4
CNSTI4 0
NEI4 $1053
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1508
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1508
INDIRI4
CNSTI4 0
NEI4 $1053
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1512
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1512
INDIRI4
CNSTI4 0
NEI4 $1053
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1516
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1516
INDIRI4
CNSTI4 0
NEI4 $1053
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1520
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1520
INDIRI4
CNSTI4 0
NEI4 $1053
line 2045
;2039:				!PM_SaberInBounce(otherOwner->client->ps.saberMove) &&
;2040:				!PM_SaberInDeflect(self->client->ps.saberMove) &&
;2041:				!PM_SaberInDeflect(otherOwner->client->ps.saberMove) &&
;2042:
;2043:				!PM_SaberInReflect(self->client->ps.saberMove) &&
;2044:				!PM_SaberInReflect(otherOwner->client->ps.saberMove))
;2045:			{
line 2046
;2046:				if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1055
line 2047
;2047:				{
line 2048
;2048:					Com_Printf("Client %i and client %i bounced off of each other's sabers\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1058
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2049
;2049:				}
LABELV $1055
line 2051
;2050:
;2051:				self->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2052
;2052:				otherOwner->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2054
;2053:
;2054:				didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 2055
;2055:			}
LABELV $1053
line 2056
;2056:		}
LABELV $1051
LABELV $1041
LABELV $1032
LABELV $1018
line 2059
;2057:		
;2058:#ifdef G2_COLLISION_ENABLED
;2059:		if (g_saberGhoul2Collision.integer && !didDefense && dmg <= SABER_NONATTACK_DAMAGE && !otherUnblockable) //with perpoly, it looks pretty weird to have clash flares coming off the guy's face and whatnot
ADDRLP4 1500
CNSTI4 0
ASGNI4
ADDRGP4 g_saberGhoul2Collision+12
INDIRI4
ADDRLP4 1500
INDIRI4
EQI4 $1059
ADDRLP4 1188
INDIRI4
ADDRLP4 1500
INDIRI4
NEI4 $1059
ADDRLP4 1136
INDIRI4
CNSTI4 1
GTI4 $1059
ADDRLP4 1164
INDIRI4
ADDRLP4 1500
INDIRI4
NEI4 $1059
line 2060
;2060:		{
line 2061
;2061:			if (!PM_SaberInParry(otherOwner->client->ps.saberMove) &&
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1504
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1504
INDIRI4
CNSTI4 0
NEI4 $1060
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1508
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1508
INDIRI4
CNSTI4 0
NEI4 $1060
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1512
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1512
INDIRI4
CNSTI4 0
NEI4 $1060
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1516
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1516
INDIRI4
CNSTI4 0
NEI4 $1060
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1520
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1520
INDIRI4
CNSTI4 0
NEI4 $1060
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1524
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1524
INDIRI4
CNSTI4 0
NEI4 $1060
line 2067
;2062:				!PM_SaberInBrokenParry(otherOwner->client->ps.saberMove) &&
;2063:				!BG_SaberInSpecial(otherOwner->client->ps.saberMove) &&
;2064:				!PM_SaberInBounce(otherOwner->client->ps.saberMove) &&
;2065:				!PM_SaberInDeflect(otherOwner->client->ps.saberMove) &&
;2066:				!PM_SaberInReflect(otherOwner->client->ps.saberMove))
;2067:			{
line 2068
;2068:				WP_SaberBlockNonRandom(otherOwner, tr.endpos, qfalse);
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 2069
;2069:			}
line 2070
;2070:		}
ADDRGP4 $1060
JUMPV
LABELV $1059
line 2073
;2071:		else 
;2072:#endif
;2073:		if (!didDefense && dmg > SABER_NONATTACK_DAMAGE && !otherUnblockable) //if not more than idle damage, don't even bother blocking.
ADDRLP4 1504
CNSTI4 0
ASGNI4
ADDRLP4 1188
INDIRI4
ADDRLP4 1504
INDIRI4
NEI4 $1065
ADDRLP4 1136
INDIRI4
CNSTI4 1
LEI4 $1065
ADDRLP4 1164
INDIRI4
ADDRLP4 1504
INDIRI4
NEI4 $1065
line 2074
;2074:		{ //block
line 2075
;2075:			if (!PM_SaberInParry(otherOwner->client->ps.saberMove) &&
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1508
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1508
INDIRI4
CNSTI4 0
NEI4 $1067
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1512
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1512
INDIRI4
CNSTI4 0
NEI4 $1067
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1516
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1516
INDIRI4
CNSTI4 0
NEI4 $1067
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1520
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1520
INDIRI4
CNSTI4 0
NEI4 $1067
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1524
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1524
INDIRI4
CNSTI4 0
NEI4 $1067
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1528
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1528
INDIRI4
CNSTI4 0
NEI4 $1067
line 2081
;2076:				!PM_SaberInBrokenParry(otherOwner->client->ps.saberMove) &&
;2077:				!BG_SaberInSpecial(otherOwner->client->ps.saberMove) &&
;2078:				!PM_SaberInBounce(otherOwner->client->ps.saberMove) &&
;2079:				!PM_SaberInDeflect(otherOwner->client->ps.saberMove) &&
;2080:				!PM_SaberInReflect(otherOwner->client->ps.saberMove))
;2081:			{
line 2082
;2082:				qboolean crushTheParry = qfalse;
ADDRLP4 1532
CNSTI4 0
ASGNI4
line 2084
;2083:
;2084:				if (unblockable)
ADDRLP4 1156
INDIRI4
CNSTI4 0
EQI4 $1069
line 2085
;2085:				{ //It's unblockable. So send us into a broken parry immediately.
line 2086
;2086:					crushTheParry = qtrue;
ADDRLP4 1532
CNSTI4 1
ASGNI4
line 2087
;2087:				}
LABELV $1069
line 2089
;2088:
;2089:				if (!SaberAttacking(otherOwner))
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1536
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 1536
INDIRI4
CNSTI4 0
NEI4 $1071
line 2090
;2090:				{
line 2091
;2091:					WP_SaberBlockNonRandom(otherOwner, tr.endpos, qfalse);
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 2092
;2092:				}
ADDRGP4 $1072
JUMPV
LABELV $1071
line 2093
;2093:				else if (self->client->ps.fd.saberAnimLevel > otherOwner->client->ps.fd.saberAnimLevel ||
ADDRLP4 1540
CNSTI4 408
ASGNI4
ADDRLP4 1544
CNSTI4 1228
ASGNI4
ADDRLP4 1548
ADDRFP4 0
INDIRP4
ADDRLP4 1540
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1544
INDIRI4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1552
ADDRLP4 1132
INDIRP4
ADDRLP4 1540
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1544
INDIRI4
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1548
INDIRI4
ADDRLP4 1552
INDIRI4
GTI4 $1076
ADDRLP4 1548
INDIRI4
ADDRLP4 1552
INDIRI4
NEI4 $1074
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1556
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1556
INDIRI4
CNSTI4 2
GTI4 $1074
LABELV $1076
line 2095
;2094:					(self->client->ps.fd.saberAnimLevel == otherOwner->client->ps.fd.saberAnimLevel && Q_irand(1, 10) <= 2))
;2095:				{ //they are attacking, and we managed to make them break
line 2097
;2096:					//Give them a parry, so we can later break it.
;2097:					WP_SaberBlockNonRandom(otherOwner, tr.endpos, qfalse);
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 2098
;2098:					crushTheParry = qtrue;
ADDRLP4 1532
CNSTI4 1
ASGNI4
line 2100
;2099:
;2100:					if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1075
line 2101
;2101:					{
line 2102
;2102:						Com_Printf("Client %i forced client %i into a broken parry with a stronger attack\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1081
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2103
;2103:					}
line 2104
;2104:				}
ADDRGP4 $1075
JUMPV
LABELV $1074
line 2106
;2105:				else
;2106:				{ //They are attacking, so are we, and obviously they have an attack level higher than or equal to ours
line 2107
;2107:					if (self->client->ps.fd.saberAnimLevel == otherOwner->client->ps.fd.saberAnimLevel)
ADDRLP4 1560
CNSTI4 408
ASGNI4
ADDRLP4 1564
CNSTI4 1228
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1560
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1564
INDIRI4
ADDP4
INDIRI4
ADDRLP4 1132
INDIRP4
ADDRLP4 1560
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1564
INDIRI4
ADDP4
INDIRI4
NEI4 $1082
line 2108
;2108:					{ //equal level, try to bounce off each other's sabers
line 2109
;2109:						if (!didOffense &&
ADDRLP4 1180
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1568
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1568
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1572
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1572
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1576
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1576
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1580
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1580
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1584
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1584
INDIRI4
CNSTI4 0
NEI4 $1084
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1588
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1592
CNSTI4 0
ASGNI4
ADDRLP4 1588
INDIRI4
ADDRLP4 1592
INDIRI4
NEI4 $1084
ADDRLP4 1156
INDIRI4
ADDRLP4 1592
INDIRI4
NEI4 $1084
line 2117
;2110:							!PM_SaberInParry(self->client->ps.saberMove) &&
;2111:							!PM_SaberInBrokenParry(self->client->ps.saberMove) &&
;2112:							!BG_SaberInSpecial(self->client->ps.saberMove) &&
;2113:							!PM_SaberInBounce(self->client->ps.saberMove) &&
;2114:							!PM_SaberInDeflect(self->client->ps.saberMove) &&
;2115:							!PM_SaberInReflect(self->client->ps.saberMove) &&
;2116:							!unblockable)
;2117:						{
line 2118
;2118:							self->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2119
;2119:							didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 2120
;2120:						}
LABELV $1084
line 2121
;2121:						if (!didDefense &&
ADDRLP4 1188
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1596
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1596
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1600
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 1600
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1604
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 1604
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1608
ADDRGP4 PM_SaberInBounce
CALLI4
ASGNI4
ADDRLP4 1608
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1612
ADDRGP4 PM_SaberInDeflect
CALLI4
ASGNI4
ADDRLP4 1612
INDIRI4
CNSTI4 0
NEI4 $1086
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 1616
ADDRGP4 PM_SaberInReflect
CALLI4
ASGNI4
ADDRLP4 1620
CNSTI4 0
ASGNI4
ADDRLP4 1616
INDIRI4
ADDRLP4 1620
INDIRI4
NEI4 $1086
ADDRLP4 1156
INDIRI4
ADDRLP4 1620
INDIRI4
NEI4 $1086
line 2129
;2122:							!PM_SaberInParry(otherOwner->client->ps.saberMove) &&
;2123:							!PM_SaberInBrokenParry(otherOwner->client->ps.saberMove) &&
;2124:							!BG_SaberInSpecial(otherOwner->client->ps.saberMove) &&
;2125:							!PM_SaberInBounce(otherOwner->client->ps.saberMove) &&
;2126:							!PM_SaberInDeflect(otherOwner->client->ps.saberMove) &&
;2127:							!PM_SaberInReflect(otherOwner->client->ps.saberMove) &&
;2128:							!unblockable)
;2129:						{
line 2130
;2130:							otherOwner->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2131
;2131:						}
LABELV $1086
line 2132
;2132:						if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1083
line 2133
;2133:						{
line 2134
;2134:							Com_Printf("Equal attack level bounce/deflection for clients %i and %i\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1091
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2135
;2135:						}
line 2136
;2136:					}
ADDRGP4 $1083
JUMPV
LABELV $1082
line 2137
;2137:					else if ((level.time - otherOwner->client->lastSaberStorageTime) < 500 && !unblockable) //make sure the stored saber data is updated
ADDRGP4 level+32
INDIRI4
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1784
ADDP4
INDIRI4
SUBI4
CNSTI4 500
GEI4 $1092
ADDRLP4 1156
INDIRI4
CNSTI4 0
NEI4 $1092
line 2138
;2138:					{ //They are higher, this means they can actually smash us into a broken parry
line 2140
;2139:						//Using reflected anims instead now
;2140:						self->client->ps.saberMove = BG_BrokenParryForAttack(self->client->ps.saberMove);
ADDRLP4 1568
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ASGNP4
ADDRLP4 1568
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1572
ADDRGP4 BG_BrokenParryForAttack
CALLI4
ASGNI4
ADDRLP4 1568
INDIRP4
ADDRLP4 1572
INDIRI4
ASGNI4
line 2141
;2141:						self->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 2143
;2142:
;2143:						if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1095
line 2144
;2144:						{
line 2145
;2145:							Com_Printf("Client %i hit client %i's stronger attack, was forced into a broken parry\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1098
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2146
;2146:						}
LABELV $1095
line 2148
;2147:
;2148:						didOffense = qtrue;
ADDRLP4 1180
CNSTI4 1
ASGNI4
line 2149
;2149:					}
LABELV $1092
LABELV $1083
line 2150
;2150:				}
LABELV $1075
LABELV $1072
line 2152
;2151:
;2152:				if (crushTheParry && PM_SaberInParry(G_GetParryForBlock(otherOwner->client->ps.saberBlocked)))
ADDRLP4 1532
INDIRI4
CNSTI4 0
EQI4 $1099
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ARGI4
ADDRLP4 1560
ADDRGP4 G_GetParryForBlock
CALLI4
ASGNI4
ADDRLP4 1560
INDIRI4
ARGI4
ADDRLP4 1564
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1564
INDIRI4
CNSTI4 0
EQI4 $1099
line 2153
;2153:				{ //This means that the attack actually hit our saber, and we went to block it.
line 2155
;2154:				  //But, one of the above cases says we actually can't. So we will be smashed into a broken parry instead.
;2155:					otherOwner->client->ps.saberMove = BG_BrokenParryForParry( G_GetParryForBlock(otherOwner->client->ps.saberBlocked) );
ADDRLP4 1568
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1568
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ARGI4
ADDRLP4 1572
ADDRGP4 G_GetParryForBlock
CALLI4
ASGNI4
ADDRLP4 1572
INDIRI4
ARGI4
ADDRLP4 1576
ADDRGP4 BG_BrokenParryForParry
CALLI4
ASGNI4
ADDRLP4 1568
INDIRP4
CNSTI4 512
ADDP4
ADDRLP4 1576
INDIRI4
ASGNI4
line 2156
;2156:					otherOwner->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 2158
;2157:
;2158:					if (g_saberDebugPrint.integer)
ADDRGP4 g_saberDebugPrint+12
INDIRI4
CNSTI4 0
EQI4 $1100
line 2159
;2159:					{
line 2160
;2160:						Com_Printf("Client %i broke through %i's parry with a special or stronger attack\n", self->s.number, otherOwner->s.number);
ADDRGP4 $1104
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1132
INDIRP4
INDIRI4
ARGI4
ADDRGP4 Com_Printf
CALLV
pop
line 2161
;2161:					}
line 2162
;2162:				}
ADDRGP4 $1100
JUMPV
LABELV $1099
line 2163
;2163:				else if (PM_SaberInParry(G_GetParryForBlock(otherOwner->client->ps.saberBlocked)) && !didOffense && tryDeflectAgain)
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ARGI4
ADDRLP4 1568
ADDRGP4 G_GetParryForBlock
CALLI4
ASGNI4
ADDRLP4 1568
INDIRI4
ARGI4
ADDRLP4 1572
ADDRGP4 PM_SaberInParry
CALLI4
ASGNI4
ADDRLP4 1576
CNSTI4 0
ASGNI4
ADDRLP4 1572
INDIRI4
ADDRLP4 1576
INDIRI4
EQI4 $1105
ADDRLP4 1180
INDIRI4
ADDRLP4 1576
INDIRI4
NEI4 $1105
ADDRLP4 1184
INDIRI4
ADDRLP4 1576
INDIRI4
EQI4 $1105
line 2164
;2164:				{ //We want to try deflecting again because the other is in the parry and we haven't made any new moves
line 2165
;2165:					int preMove = otherOwner->client->ps.saberMove;
ADDRLP4 1580
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
line 2167
;2166:
;2167:					otherOwner->client->ps.saberMove = G_GetParryForBlock(otherOwner->client->ps.saberBlocked);
ADDRLP4 1584
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1584
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ARGI4
ADDRLP4 1588
ADDRGP4 G_GetParryForBlock
CALLI4
ASGNI4
ADDRLP4 1584
INDIRP4
CNSTI4 512
ADDP4
ADDRLP4 1588
INDIRI4
ASGNI4
line 2168
;2168:					WP_GetSaberDeflectionAngle(self, otherOwner, tr.fraction);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+8
INDIRF4
ARGF4
ADDRGP4 WP_GetSaberDeflectionAngle
CALLI4
pop
line 2169
;2169:					otherOwner->client->ps.saberMove = preMove;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
ADDRLP4 1580
INDIRI4
ASGNI4
line 2170
;2170:				}
LABELV $1105
LABELV $1100
line 2171
;2171:			}
LABELV $1067
line 2172
;2172:		}
LABELV $1065
LABELV $1060
line 2174
;2173:
;2174:		self->client->ps.saberAttackWound = level.time + g_saberDmgDelay_Wound.integer;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRGP4 g_saberDmgDelay_Wound+12
INDIRI4
ADDI4
ASGNI4
line 2175
;2175:	}
LABELV $960
LABELV $847
line 2177
;2176:
;2177:	return didHit;
ADDRLP4 1160
INDIRI4
RETI4
LABELV $704
endproc CheckSaberDamage 1624 32
export CheckThrownSaberDamaged
proc CheckThrownSaberDamaged 1236 32
line 2190
;2178:}
;2179:
;2180:#define MIN_SABER_SLICE_DISTANCE 50
;2181:
;2182:#define MIN_SABER_SLICE_RETURN_DISTANCE 30
;2183:
;2184:#define SABER_THROWN_HIT_DAMAGE 30
;2185:#define SABER_THROWN_RETURN_HIT_DAMAGE 5
;2186:
;2187:void thrownSaberTouch (gentity_t *saberent, gentity_t *other, trace_t *trace);
;2188:
;2189:qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity_t *saberOwner, gentity_t *ent, int dist, int returning)
;2190:{
line 2195
;2191:	vec3_t vecsub;
;2192:	float veclen;
;2193:	gentity_t *te;
;2194:
;2195:	if (saberOwner && saberOwner->client && saberOwner->client->ps.saberAttackWound > level.time)
ADDRLP4 20
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 20
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1111
ADDRLP4 28
ADDRLP4 20
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1111
ADDRLP4 28
INDIRP4
CNSTI4 752
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LEI4 $1111
line 2196
;2196:	{
line 2197
;2197:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1110
JUMPV
LABELV $1111
line 2200
;2198:	}
;2199:
;2200:	if (ent && ent->client && ent->inuse && ent->s.number != saberOwner->s.number &&
ADDRLP4 32
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 36
CNSTU4 0
ASGNU4
ADDRLP4 32
INDIRP4
CVPU4 4
ADDRLP4 36
INDIRU4
EQU4 $1114
ADDRLP4 40
ADDRLP4 32
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
CVPU4 4
ADDRLP4 36
INDIRU4
EQU4 $1114
ADDRLP4 44
CNSTI4 0
ASGNI4
ADDRLP4 32
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
EQI4 $1114
ADDRLP4 32
INDIRP4
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $1114
ADDRLP4 32
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
LEI4 $1114
ADDRLP4 32
INDIRP4
CNSTI4 680
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
EQI4 $1114
ADDRLP4 40
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 48
ADDRGP4 trap_InPVS
CALLI4
ASGNI4
ADDRLP4 52
CNSTI4 0
ASGNI4
ADDRLP4 48
INDIRI4
ADDRLP4 52
INDIRI4
EQI4 $1114
ADDRLP4 56
ADDRFP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
CNSTI4 3
EQI4 $1114
ADDRLP4 56
INDIRP4
CNSTI4 1380
ADDP4
INDIRI4
ADDRLP4 52
INDIRI4
EQI4 $1114
line 2205
;2201:		ent->health > 0 && ent->takedamage &&
;2202:		trap_InPVS(ent->client->ps.origin, saberent->r.currentOrigin) &&
;2203:		ent->client->sess.sessionTeam != TEAM_SPECTATOR &&
;2204:		ent->client->pers.connected)
;2205:	{ //hit a client
line 2206
;2206:		if (ent->inuse && ent->client &&
ADDRLP4 60
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 64
CNSTI4 0
ASGNI4
ADDRLP4 60
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 64
INDIRI4
EQI4 $1116
ADDRLP4 68
ADDRLP4 60
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 68
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1116
ADDRLP4 68
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 64
INDIRI4
EQI4 $1116
ADDRLP4 68
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $1116
line 2209
;2207:			ent->client->ps.duelInProgress &&
;2208:			ent->client->ps.duelIndex != saberOwner->s.number)
;2209:		{
line 2210
;2210:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1110
JUMPV
LABELV $1116
line 2213
;2211:		}
;2212:
;2213:		if (ent->inuse && ent->client &&
ADDRLP4 72
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 76
CNSTI4 0
ASGNI4
ADDRLP4 72
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 76
INDIRI4
EQI4 $1118
ADDRLP4 80
CNSTI4 408
ASGNI4
ADDRLP4 72
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1118
ADDRLP4 84
ADDRFP4 4
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 84
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
ADDRLP4 76
INDIRI4
EQI4 $1118
ADDRLP4 84
INDIRP4
CNSTI4 1296
ADDP4
INDIRI4
ADDRLP4 72
INDIRP4
INDIRI4
EQI4 $1118
line 2216
;2214:			saberOwner->client->ps.duelInProgress &&
;2215:			saberOwner->client->ps.duelIndex != ent->s.number)
;2216:		{
line 2217
;2217:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1110
JUMPV
LABELV $1118
line 2220
;2218:		}
;2219:
;2220:		VectorSubtract(saberent->r.currentOrigin, ent->client->ps.origin, vecsub);
ADDRLP4 88
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 92
ADDRFP4 8
INDIRP4
CNSTI4 408
ADDP4
ASGNP4
ADDRLP4 0
ADDRLP4 88
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
ADDRLP4 92
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 88
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
ADDRLP4 92
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+8
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2221
;2221:		veclen = VectorLength(vecsub);
ADDRLP4 0
ARGP4
ADDRLP4 96
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 96
INDIRF4
ASGNF4
line 2223
;2222:
;2223:		if (veclen < dist)
ADDRLP4 12
INDIRF4
ADDRFP4 12
INDIRI4
CVIF4 4
GEF4 $1115
line 2224
;2224:		{ //within range
line 2227
;2225:			trace_t tr;
;2226:
;2227:			trap_Trace(&tr, saberent->r.currentOrigin, NULL, NULL, ent->client->ps.origin, saberent->s.number, MASK_SHOT);
ADDRLP4 100
ARGP4
ADDRLP4 1180
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1180
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 1184
CNSTP4 0
ASGNP4
ADDRLP4 1184
INDIRP4
ARGP4
ADDRLP4 1184
INDIRP4
ARGP4
ADDRFP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 1180
INDIRP4
INDIRI4
ARGI4
CNSTI4 769
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 2229
;2228:
;2229:			if (tr.fraction == 1 || tr.entityNum == ent->s.number)
ADDRLP4 100+8
INDIRF4
CNSTF4 1065353216
EQF4 $1128
ADDRLP4 100+52
INDIRI4
ADDRFP4 8
INDIRP4
INDIRI4
NEI4 $1115
LABELV $1128
line 2230
;2230:			{ //Slice them
line 2231
;2231:				if (!saberOwner->client->ps.isJediMaster && WP_SaberCanBlock(ent, tr.endpos, 0, MOD_SABER, qfalse, 8))
ADDRLP4 1188
CNSTI4 0
ASGNI4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
ADDRLP4 1188
INDIRI4
NEI4 $1129
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 100+12
ARGP4
ADDRLP4 1188
INDIRI4
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 1188
INDIRI4
ARGI4
CNSTI4 8
ARGI4
ADDRLP4 1192
ADDRGP4 WP_SaberCanBlock
CALLI4
ASGNI4
ADDRLP4 1192
INDIRI4
CNSTI4 0
EQI4 $1129
line 2232
;2232:				{ //they blocked it
line 2233
;2233:					WP_SaberBlockNonRandom(ent, tr.endpos, qfalse);
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 100+12
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 2235
;2234:
;2235:					te = G_TempEntity( tr.endpos, EV_SABER_BLOCK );
ADDRLP4 100+12
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 1196
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 16
ADDRLP4 1196
INDIRP4
ASGNP4
line 2236
;2236:					VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 100+12
INDIRB
ASGNB 12
line 2237
;2237:					VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 100+24
INDIRB
ASGNB 12
line 2238
;2238:					if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1200
ADDRLP4 16
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 0
ASGNF4
ADDRLP4 1200
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $1136
ADDRLP4 1200
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $1136
ADDRLP4 1200
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $1136
line 2239
;2239:					{
line 2240
;2240:						te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 2241
;2241:					}
LABELV $1136
line 2242
;2242:					te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 2244
;2243:
;2244:					if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $1138
line 2245
;2245:					{ //return to owner if blocked
line 2246
;2246:						thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 1208
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1208
INDIRP4
ARGP4
ADDRLP4 1208
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2247
;2247:					}
LABELV $1138
line 2249
;2248:
;2249:					saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 2250
;2250:					return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1110
JUMPV
LABELV $1129
line 2253
;2251:				}
;2252:				else
;2253:				{ //a good hit
line 2256
;2254:					vec3_t dir;
;2255:
;2256:					VectorSubtract(tr.endpos, saberent->r.currentOrigin, dir);
ADDRLP4 1208
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1196
ADDRLP4 100+12
INDIRF4
ADDRLP4 1208
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1196+4
ADDRLP4 100+12+4
INDIRF4
ADDRLP4 1208
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1196+8
ADDRLP4 100+12+8
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2257
;2257:					VectorNormalize(dir);
ADDRLP4 1196
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2259
;2258:
;2259:					if (!dir[0] && !dir[1] && !dir[2])
ADDRLP4 1212
CNSTF4 0
ASGNF4
ADDRLP4 1196
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $1148
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $1148
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $1148
line 2260
;2260:					{
line 2261
;2261:						dir[1] = 1;
ADDRLP4 1196+4
CNSTF4 1065353216
ASGNF4
line 2262
;2262:					}
LABELV $1148
line 2264
;2263:
;2264:					if (saberOwner->client->ps.isJediMaster)
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1153
line 2265
;2265:					{ //2x damage for the Jedi Master
line 2266
;2266:						G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage*2, 0, MOD_SABER);
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1216
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRLP4 1196
ARGP4
ADDRLP4 100+12
ARGP4
ADDRFP4 0
INDIRP4
CNSTI4 688
ADDP4
INDIRI4
CNSTI4 1
LSHI4
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 2267
;2267:					}
ADDRGP4 $1154
JUMPV
LABELV $1153
line 2269
;2268:					else
;2269:					{
line 2270
;2270:						G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage, 0, MOD_SABER);
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1216
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRLP4 1196
ARGP4
ADDRLP4 100+12
ARGP4
ADDRFP4 0
INDIRP4
CNSTI4 688
ADDP4
INDIRI4
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 2271
;2271:					}
LABELV $1154
line 2273
;2272:
;2273:					te = G_TempEntity( tr.endpos, EV_SABER_HIT );
ADDRLP4 100+12
ARGP4
CNSTI4 27
ARGI4
ADDRLP4 1216
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 16
ADDRLP4 1216
INDIRP4
ASGNP4
line 2274
;2274:					VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 100+12
INDIRB
ASGNB 12
line 2275
;2275:					VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 100+24
INDIRB
ASGNB 12
line 2276
;2276:					if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1220
ADDRLP4 16
INDIRP4
ASGNP4
ADDRLP4 1224
CNSTF4 0
ASGNF4
ADDRLP4 1220
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
NEF4 $1160
ADDRLP4 1220
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
NEF4 $1160
ADDRLP4 1220
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
NEF4 $1160
line 2277
;2277:					{
line 2278
;2278:						te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 2279
;2279:					}
LABELV $1160
line 2281
;2280:
;2281:					te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 2283
;2282:
;2283:					if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $1162
line 2284
;2284:					{ //return to owner if blocked
line 2285
;2285:						thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 1228
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1228
INDIRP4
ARGP4
ADDRLP4 1228
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2286
;2286:					}
LABELV $1162
line 2287
;2287:				}
line 2289
;2288:
;2289:				saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 2290
;2290:			}
line 2291
;2291:		}
line 2292
;2292:	}
ADDRGP4 $1115
JUMPV
LABELV $1114
line 2293
;2293:	else if (ent && !ent->client && ent->inuse && ent->takedamage && ent->health > 0 && ent->s.number != saberOwner->s.number &&
ADDRLP4 60
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 64
CNSTU4 0
ASGNU4
ADDRLP4 60
INDIRP4
CVPU4 4
ADDRLP4 64
INDIRU4
EQU4 $1165
ADDRLP4 60
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 64
INDIRU4
NEU4 $1165
ADDRLP4 68
CNSTI4 0
ASGNI4
ADDRLP4 60
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
EQI4 $1165
ADDRLP4 60
INDIRP4
CNSTI4 680
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
EQI4 $1165
ADDRLP4 60
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
LEI4 $1165
ADDRLP4 72
ADDRLP4 60
INDIRP4
INDIRI4
ASGNI4
ADDRLP4 72
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $1165
ADDRLP4 76
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 72
INDIRI4
ADDRLP4 76
INDIRP4
INDIRI4
EQI4 $1165
ADDRLP4 80
CNSTI4 368
ASGNI4
ADDRLP4 60
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
ARGP4
ADDRLP4 76
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
ARGP4
ADDRLP4 84
ADDRGP4 trap_InPVS
CALLI4
ASGNI4
ADDRLP4 84
INDIRI4
CNSTI4 0
EQI4 $1165
line 2295
;2294:		ent->s.number != saberent->s.number && trap_InPVS(ent->r.currentOrigin, saberent->r.currentOrigin))
;2295:	{ //hit a non-client
line 2296
;2296:		VectorSubtract(saberent->r.currentOrigin, ent->r.currentOrigin, vecsub);
ADDRLP4 88
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 92
CNSTI4 368
ASGNI4
ADDRLP4 96
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 0
ADDRLP4 88
INDIRP4
ADDRLP4 92
INDIRI4
ADDP4
INDIRF4
ADDRLP4 96
INDIRP4
ADDRLP4 92
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 100
CNSTI4 372
ASGNI4
ADDRLP4 0+4
ADDRLP4 88
INDIRP4
ADDRLP4 100
INDIRI4
ADDP4
INDIRF4
ADDRLP4 96
INDIRP4
ADDRLP4 100
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 104
CNSTI4 376
ASGNI4
ADDRLP4 0+8
ADDRFP4 0
INDIRP4
ADDRLP4 104
INDIRI4
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
ADDRLP4 104
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2297
;2297:		veclen = VectorLength(vecsub);
ADDRLP4 0
ARGP4
ADDRLP4 108
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 108
INDIRF4
ASGNF4
line 2299
;2298:
;2299:		if (veclen < dist)
ADDRLP4 12
INDIRF4
ADDRFP4 12
INDIRI4
CVIF4 4
GEF4 $1169
line 2300
;2300:		{
line 2303
;2301:			trace_t tr;
;2302:
;2303:			trap_Trace(&tr, saberent->r.currentOrigin, NULL, NULL, ent->r.currentOrigin, saberent->s.number, MASK_SHOT);
ADDRLP4 112
ARGP4
ADDRLP4 1192
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1196
CNSTI4 368
ASGNI4
ADDRLP4 1192
INDIRP4
ADDRLP4 1196
INDIRI4
ADDP4
ARGP4
ADDRLP4 1200
CNSTP4 0
ASGNP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRFP4 8
INDIRP4
ADDRLP4 1196
INDIRI4
ADDP4
ARGP4
ADDRLP4 1192
INDIRP4
INDIRI4
ARGI4
CNSTI4 769
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 2305
;2304:
;2305:			if (tr.fraction == 1 || tr.entityNum == ent->s.number)
ADDRLP4 112+8
INDIRF4
CNSTF4 1065353216
EQF4 $1175
ADDRLP4 112+52
INDIRI4
ADDRFP4 8
INDIRP4
INDIRI4
NEI4 $1171
LABELV $1175
line 2306
;2306:			{
line 2309
;2307:				vec3_t dir;
;2308:
;2309:				VectorSubtract(tr.endpos, saberent->r.currentOrigin, dir);
ADDRLP4 1216
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1204
ADDRLP4 112+12
INDIRF4
ADDRLP4 1216
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1204+4
ADDRLP4 112+12+4
INDIRF4
ADDRLP4 1216
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1204+8
ADDRLP4 112+12+8
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2310
;2310:				VectorNormalize(dir);
ADDRLP4 1204
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2312
;2311:
;2312:				if (ent->s.eType == ET_GRAPPLE)
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRI4
CNSTI4 13
NEI4 $1183
line 2313
;2313:				{ //an animent
line 2314
;2314:					G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 40, 0, MOD_SABER);
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1220
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1220
INDIRP4
ARGP4
ADDRLP4 1220
INDIRP4
ARGP4
ADDRLP4 1204
ARGP4
ADDRLP4 112+12
ARGP4
CNSTI4 40
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 2315
;2315:				}
ADDRGP4 $1184
JUMPV
LABELV $1183
line 2317
;2316:				else
;2317:				{
line 2318
;2318:					G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 5, 0, MOD_SABER);
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1220
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1220
INDIRP4
ARGP4
ADDRLP4 1220
INDIRP4
ARGP4
ADDRLP4 1204
ARGP4
ADDRLP4 112+12
ARGP4
CNSTI4 5
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 2319
;2319:				}
LABELV $1184
line 2321
;2320:
;2321:				te = G_TempEntity( tr.endpos, EV_SABER_HIT );
ADDRLP4 112+12
ARGP4
CNSTI4 27
ARGI4
ADDRLP4 1220
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 16
ADDRLP4 1220
INDIRP4
ASGNP4
line 2322
;2322:				VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 112+12
INDIRB
ASGNB 12
line 2323
;2323:				VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 112+24
INDIRB
ASGNB 12
line 2324
;2324:				if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1224
ADDRLP4 16
INDIRP4
ASGNP4
ADDRLP4 1228
CNSTF4 0
ASGNF4
ADDRLP4 1224
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1228
INDIRF4
NEF4 $1190
ADDRLP4 1224
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1228
INDIRF4
NEF4 $1190
ADDRLP4 1224
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1228
INDIRF4
NEF4 $1190
line 2325
;2325:				{
line 2326
;2326:					te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 2327
;2327:				}
LABELV $1190
line 2329
;2328:
;2329:				te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 2331
;2330:
;2331:				if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $1192
line 2332
;2332:				{ //return to owner if blocked
line 2333
;2333:					thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 1232
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1232
INDIRP4
ARGP4
ADDRLP4 1232
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2334
;2334:				}
LABELV $1192
line 2336
;2335:
;2336:				saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 2337
;2337:			}
LABELV $1171
line 2338
;2338:		}
LABELV $1169
line 2339
;2339:	}
LABELV $1165
LABELV $1115
line 2341
;2340:
;2341:	return qtrue;
CNSTI4 1
RETI4
LABELV $1110
endproc CheckThrownSaberDamaged 1236 32
export saberCheckRadiusDamage
proc saberCheckRadiusDamage 28 20
line 2345
;2342:}
;2343:
;2344:void saberCheckRadiusDamage(gentity_t *saberent, int returning)
;2345:{ //we're going to cheat and damage players within the saber's radius, just for the sake of doing things more "efficiently" (and because the saber entity has no server g2 instance)
line 2346
;2346:	int i = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 2347
;2347:	int dist = 0;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 2349
;2348:	gentity_t *ent;
;2349:	gentity_t *saberOwner = &g_entities[saberent->r.ownerNum];
ADDRLP4 8
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2351
;2350:
;2351:	if (returning && returning != 2)
ADDRLP4 16
ADDRFP4 4
INDIRI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $1196
ADDRLP4 16
INDIRI4
CNSTI4 2
EQI4 $1196
line 2352
;2352:	{
line 2353
;2353:		dist = MIN_SABER_SLICE_RETURN_DISTANCE;
ADDRLP4 12
CNSTI4 30
ASGNI4
line 2354
;2354:	}
ADDRGP4 $1197
JUMPV
LABELV $1196
line 2356
;2355:	else
;2356:	{
line 2357
;2357:		dist = MIN_SABER_SLICE_DISTANCE;
ADDRLP4 12
CNSTI4 50
ASGNI4
line 2358
;2358:	}
LABELV $1197
line 2360
;2359:
;2360:	if (!saberOwner || !saberOwner->client)
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1200
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
NEU4 $1198
LABELV $1200
line 2361
;2361:	{
line 2362
;2362:		return;
ADDRGP4 $1195
JUMPV
LABELV $1198
line 2365
;2363:	}
;2364:
;2365:	if (saberOwner->client->ps.saberAttackWound > level.time)
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LEI4 $1205
line 2366
;2366:	{
line 2367
;2367:		return;
ADDRGP4 $1195
JUMPV
LABELV $1204
line 2371
;2368:	}
;2369:
;2370:	while (i < MAX_GENTITIES)
;2371:	{
line 2372
;2372:		ent = &g_entities[i];
ADDRLP4 4
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2374
;2373:
;2374:		CheckThrownSaberDamaged(saberent, saberOwner, ent, dist, returning);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 8
INDIRP4
ARGP4
ADDRLP4 4
INDIRP4
ARGP4
ADDRLP4 12
INDIRI4
ARGI4
ADDRFP4 4
INDIRI4
ARGI4
ADDRGP4 CheckThrownSaberDamaged
CALLI4
pop
line 2376
;2375:
;2376:		i++;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 2377
;2377:	}
LABELV $1205
line 2370
ADDRLP4 0
INDIRI4
CNSTI4 1024
LTI4 $1204
line 2378
;2378:}
LABELV $1195
endproc saberCheckRadiusDamage 28 20
export saberMoveBack
proc saberMoveBack 28 12
line 2383
;2379:
;2380://#define THROWN_SABER_COMP
;2381:
;2382:void saberMoveBack( gentity_t *ent, qboolean goingBack ) 
;2383:{
line 2386
;2384:	vec3_t		origin, oldOrg;
;2385:
;2386:	ent->s.pos.trType = TR_LINEAR;
ADDRFP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 2
ASGNI4
line 2388
;2387:
;2388:	VectorCopy( ent->r.currentOrigin, oldOrg );
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 2390
;2389:	// get current position
;2390:	BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
ADDRFP4 0
INDIRP4
CNSTI4 12
ADDP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRLP4 0
ARGP4
ADDRGP4 BG_EvaluateTrajectory
CALLV
pop
line 2392
;2391:	//Get current angles?
;2392:	BG_EvaluateTrajectory( &ent->s.apos, level.time, ent->r.currentAngles );
ADDRLP4 24
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 24
INDIRP4
CNSTI4 48
ADDP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRLP4 24
INDIRP4
CNSTI4 380
ADDP4
ARGP4
ADDRGP4 BG_EvaluateTrajectory
CALLV
pop
line 2433
;2393:
;2394:	//compensation test code..
;2395:#ifdef THROWN_SABER_COMP
;2396:	if (!goingBack)
;2397:	{ //acts as a fallback in case touch code fails, keeps saber from going through things between predictions
;2398:		float originalLength = 0;
;2399:		int iCompensationLength = 32;
;2400:		trace_t tr;
;2401:		vec3_t mins, maxs;
;2402:		vec3_t calcComp, compensatedOrigin;
;2403:		VectorSet( mins, -24.0f, -24.0f, -8.0f );
;2404:		VectorSet( maxs, 24.0f, 24.0f, 8.0f );
;2405:
;2406:		VectorSubtract(origin, oldOrg, calcComp);
;2407:		originalLength = VectorLength(calcComp);
;2408:
;2409:		VectorNormalize(calcComp);
;2410:
;2411:		compensatedOrigin[0] = oldOrg[0] + calcComp[0]*(originalLength+iCompensationLength);		
;2412:		compensatedOrigin[1] = oldOrg[1] + calcComp[1]*(originalLength+iCompensationLength);
;2413:		compensatedOrigin[2] = oldOrg[2] + calcComp[2]*(originalLength+iCompensationLength);
;2414:
;2415:		trap_Trace(&tr, oldOrg, mins, maxs, compensatedOrigin, ent->r.ownerNum, MASK_PLAYERSOLID);
;2416:
;2417:		if ((tr.fraction != 1 || tr.startsolid || tr.allsolid) && tr.entityNum != ent->r.ownerNum)
;2418:		{
;2419:			VectorClear(ent->s.pos.trDelta);
;2420:
;2421:			//Unfortunately doing this would defeat the purpose of the compensation. We will have to settle for a jerk on the client.
;2422:			//VectorCopy( origin, ent->r.currentOrigin );
;2423:
;2424:			CheckThrownSaberDamaged(ent, &g_entities[ent->r.ownerNum], &g_entities[tr.entityNum], 256, 0);
;2425:
;2426:			tr.startsolid = 0;
;2427:			thrownSaberTouch(ent, &g_entities[tr.entityNum], &tr);
;2428:			return;
;2429:		}
;2430:	}
;2431:#endif
;2432:
;2433:	VectorCopy( origin, ent->r.currentOrigin );
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 2434
;2434:}
LABELV $1207
endproc saberMoveBack 28 12
export SaberBounceSound
proc SaberBounceSound 4 0
line 2437
;2435:
;2436:void SaberBounceSound( gentity_t *self, gentity_t *other, trace_t *trace )
;2437:{
line 2438
;2438:	VectorCopy(self->r.currentAngles, self->s.apos.trBase);
ADDRLP4 0
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 0
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 0
INDIRP4
CNSTI4 380
ADDP4
INDIRB
ASGNB 12
line 2439
;2439:	self->s.apos.trBase[PITCH] = 90;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTF4 1119092736
ASGNF4
line 2440
;2440:}
LABELV $1210
endproc SaberBounceSound 4 0
export DeadSaberThink
proc DeadSaberThink 0 4
line 2443
;2441:
;2442:void DeadSaberThink(gentity_t *saberent)
;2443:{
line 2444
;2444:	if (saberent->speed < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $1212
line 2445
;2445:	{
line 2446
;2446:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 2447
;2447:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2448
;2448:		return;
ADDRGP4 $1211
JUMPV
LABELV $1212
line 2451
;2449:	}
;2450:
;2451:	G_RunObject(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunObject
CALLV
pop
line 2452
;2452:}
LABELV $1211
endproc DeadSaberThink 0 4
export MakeDeadSaber
proc MakeDeadSaber 52 12
line 2455
;2453:
;2454:void MakeDeadSaber(gentity_t *ent)
;2455:{	//spawn a "dead" saber entity here so it looks like the saber fell out of the air.
line 2461
;2456:	//This entity will remove itself after a very short time period.
;2457:	vec3_t startorg;
;2458:	vec3_t startang;
;2459:	gentity_t *saberent;
;2460:	
;2461:	if (g_gametype.integer == GT_JEDIMASTER)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 2
NEI4 $1217
line 2462
;2462:	{ //never spawn a dead saber in JM, because the only saber on the level is really a world object
line 2463
;2463:		G_Sound(ent, CHAN_AUTO, saberOffSound);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberOffSound
INDIRI4
ARGI4
ADDRGP4 G_Sound
CALLV
pop
line 2464
;2464:		return;
ADDRGP4 $1216
JUMPV
LABELV $1217
line 2467
;2465:	}
;2466:
;2467:	saberent = G_Spawn();
ADDRLP4 28
ADDRGP4 G_Spawn
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 28
INDIRP4
ASGNP4
line 2469
;2468:
;2469:	VectorCopy(ent->r.currentOrigin, startorg);
ADDRLP4 4
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 2470
;2470:	VectorCopy(ent->r.currentAngles, startang);
ADDRLP4 16
ADDRFP4 0
INDIRP4
CNSTI4 380
ADDP4
INDIRB
ASGNB 12
line 2472
;2471:
;2472:	saberent->classname = "deadsaber";
ADDRLP4 0
INDIRP4
CNSTI4 416
ADDP4
ADDRGP4 $1220
ASGNP4
line 2474
;2473:			
;2474:	saberent->r.svFlags = SVF_USE_CURRENT_ORIGIN;
ADDRLP4 0
INDIRP4
CNSTI4 304
ADDP4
CNSTI4 128
ASGNI4
line 2475
;2475:	saberent->r.ownerNum = ent->s.number;
ADDRLP4 0
INDIRP4
CNSTI4 396
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 2477
;2476:
;2477:	saberent->clipmask = MASK_PLAYERSOLID;
ADDRLP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 273
ASGNI4
line 2478
;2478:	saberent->r.contents = CONTENTS_TRIGGER;//0;
ADDRLP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 1024
ASGNI4
line 2480
;2479:
;2480:	VectorSet( saberent->r.mins, -3.0f, -3.0f, -3.0f );
ADDRLP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3225419776
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3225419776
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3225419776
ASGNF4
line 2481
;2481:	VectorSet( saberent->r.maxs, 3.0f, 3.0f, 3.0f );
ADDRLP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1077936128
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1077936128
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1077936128
ASGNF4
line 2483
;2482:
;2483:	saberent->touch = SaberBounceSound;
ADDRLP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberBounceSound
ASGNP4
line 2485
;2484:
;2485:	saberent->think = DeadSaberThink;
ADDRLP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 DeadSaberThink
ASGNP4
line 2486
;2486:	saberent->nextthink = level.time;
ADDRLP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2488
;2487:
;2488:	VectorCopy(startorg, saberent->s.pos.trBase);
ADDRLP4 0
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 2489
;2489:	VectorCopy(startang, saberent->s.apos.trBase);
ADDRLP4 0
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 2491
;2490:
;2491:	VectorCopy(startorg, saberent->s.origin);
ADDRLP4 0
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 2492
;2492:	VectorCopy(startang, saberent->s.angles);
ADDRLP4 0
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 2494
;2493:
;2494:	VectorCopy(startorg, saberent->r.currentOrigin);
ADDRLP4 0
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 2495
;2495:	VectorCopy(startang, saberent->r.currentAngles);
ADDRLP4 0
INDIRP4
CNSTI4 380
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 2497
;2496:
;2497:	saberent->s.apos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 5
ASGNI4
line 2498
;2498:	saberent->s.apos.trDelta[0] = Q_irand(200, 800);
CNSTI4 200
ARGI4
CNSTI4 800
ARGI4
ADDRLP4 32
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 72
ADDP4
ADDRLP4 32
INDIRI4
CVIF4 4
ASGNF4
line 2499
;2499:	saberent->s.apos.trDelta[1] = Q_irand(200, 800);
CNSTI4 200
ARGI4
CNSTI4 800
ARGI4
ADDRLP4 36
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 76
ADDP4
ADDRLP4 36
INDIRI4
CVIF4 4
ASGNF4
line 2500
;2500:	saberent->s.apos.trDelta[2] = Q_irand(200, 800);
CNSTI4 200
ARGI4
CNSTI4 800
ARGI4
ADDRLP4 40
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 80
ADDP4
ADDRLP4 40
INDIRI4
CVIF4 4
ASGNF4
line 2501
;2501:	saberent->s.apos.trTime = level.time-50;
ADDRLP4 0
INDIRP4
CNSTI4 52
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
SUBI4
ASGNI4
line 2503
;2502:
;2503:	saberent->s.pos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 5
ASGNI4
line 2504
;2504:	saberent->s.pos.trTime = level.time-50;
ADDRLP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
SUBI4
ASGNI4
line 2505
;2505:	saberent->s.eFlags = EF_BOUNCE_HALF;
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 32
ASGNI4
line 2506
;2506:	saberent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm");
ADDRGP4 $1224
ARGP4
ADDRLP4 44
ADDRGP4 G_ModelIndex
CALLI4
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 212
ADDP4
ADDRLP4 44
INDIRI4
ASGNI4
line 2507
;2507:	saberent->s.modelGhoul2 = 1;
ADDRLP4 0
INDIRP4
CNSTI4 204
ADDP4
CNSTI4 1
ASGNI4
line 2508
;2508:	saberent->s.g2radius = 20;
ADDRLP4 0
INDIRP4
CNSTI4 208
ADDP4
CNSTI4 20
ASGNI4
line 2510
;2509:
;2510:	saberent->s.eType = ET_MISSILE;
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 3
ASGNI4
line 2511
;2511:	saberent->s.weapon = WP_SABER;
ADDRLP4 0
INDIRP4
CNSTI4 276
ADDP4
CNSTI4 2
ASGNI4
line 2513
;2512:
;2513:	saberent->speed = level.time + 4000;
ADDRLP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 4000
ADDI4
CVIF4 4
ASGNF4
line 2515
;2514:
;2515:	saberent->bounceCount = 12;
ADDRLP4 0
INDIRP4
CNSTI4 716
ADDP4
CNSTI4 12
ASGNI4
line 2518
;2516:
;2517:	//fall off in the direction the real saber was headed
;2518:	VectorCopy(ent->s.pos.trDelta, saberent->s.pos.trDelta);
ADDRLP4 48
CNSTI4 36
ASGNI4
ADDRLP4 0
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
ADDRFP4 0
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
INDIRB
ASGNB 12
line 2520
;2519:
;2520:	saberMoveBack(saberent, qtrue);
ADDRLP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 2521
;2521:	saberent->s.pos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 5
ASGNI4
line 2523
;2522:
;2523:	trap_LinkEntity(saberent);	
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 2524
;2524:}
LABELV $1216
endproc MakeDeadSaber 52 12
export saberBackToOwner
proc saberBackToOwner 48 8
line 2527
;2525:
;2526:void saberBackToOwner(gentity_t *saberent)
;2527:{
line 2528
;2528:	gentity_t *saberOwner = &g_entities[saberent->r.ownerNum];
ADDRLP4 16
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2532
;2529:	vec3_t dir;
;2530:	float ownerLen;
;2531:
;2532:	if (saberent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $1227
line 2533
;2533:	{
line 2534
;2534:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2536
;2535:
;2536:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 2537
;2537:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2538
;2538:		return;
ADDRGP4 $1226
JUMPV
LABELV $1227
line 2541
;2539:	}
;2540:
;2541:	if (!g_entities[saberent->r.ownerNum].inuse ||
ADDRLP4 20
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 20
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1236
ADDRLP4 20
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1236
ADDRLP4 20
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1230
LABELV $1236
line 2544
;2542:		!g_entities[saberent->r.ownerNum].client ||
;2543:		g_entities[saberent->r.ownerNum].client->sess.sessionTeam == TEAM_SPECTATOR)
;2544:	{
line 2545
;2545:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2547
;2546:
;2547:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 2548
;2548:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2549
;2549:		return;
ADDRGP4 $1226
JUMPV
LABELV $1230
line 2552
;2550:	}
;2551:
;2552:	if (g_entities[saberent->r.ownerNum].health < 1 || !g_entities[saberent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK] || !g_entities[saberent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERTHROW])
ADDRLP4 24
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ASGNI4
ADDRLP4 24
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
CNSTI4 1
LTI4 $1244
ADDRLP4 28
CNSTI4 0
ASGNI4
ADDRLP4 24
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1004
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
EQI4 $1244
ADDRLP4 24
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
NEI4 $1238
LABELV $1244
line 2553
;2553:	{ //He's dead, just go back to our normal saber status
line 2554
;2554:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 2555
;2555:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 2556
;2556:		saberent->bolt_Head = 0;
ADDRFP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 2557
;2557:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2559
;2558:
;2559:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2561
;2560:
;2561:		saberent->r.svFlags |= (SVF_NOCLIENT);
ADDRLP4 32
ADDRFP4 0
INDIRP4
CNSTI4 304
ADDP4
ASGNP4
ADDRLP4 32
INDIRP4
ADDRLP4 32
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 2562
;2562:		saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 2563
;2563:		VectorSet( saberent->r.mins, -SABER_BOX_SIZE, -SABER_BOX_SIZE, -SABER_BOX_SIZE );
ADDRFP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3246391296
ASGNF4
line 2564
;2564:		VectorSet( saberent->r.maxs, SABER_BOX_SIZE, SABER_BOX_SIZE, SABER_BOX_SIZE );
ADDRFP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1098907648
ASGNF4
line 2565
;2565:		saberent->s.loopSound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 2567
;2566:
;2567:		g_entities[saberent->r.ownerNum].client->ps.saberInFlight = qfalse;
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 2568
;2568:		g_entities[saberent->r.ownerNum].client->ps.saberThrowDelay = level.time + 500;
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 2569
;2569:		g_entities[saberent->r.ownerNum].client->ps.saberCanThrow = qfalse;
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 2571
;2570:
;2571:		return;
ADDRGP4 $1226
JUMPV
LABELV $1238
line 2574
;2572:	}
;2573:
;2574:	saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 2576
;2575:
;2576:	VectorSubtract(saberent->pos1, saberent->r.currentOrigin, dir);
ADDRLP4 32
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 0
ADDRLP4 32
INDIRP4
CNSTI4 548
ADDP4
INDIRF4
ADDRLP4 32
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 32
INDIRP4
CNSTI4 552
ADDP4
INDIRF4
ADDRLP4 32
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 36
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 0+8
ADDRLP4 36
INDIRP4
CNSTI4 556
ADDP4
INDIRF4
ADDRLP4 36
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2578
;2577:
;2578:	ownerLen = VectorLength(dir);
ADDRLP4 0
ARGP4
ADDRLP4 40
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 40
INDIRF4
ASGNF4
line 2580
;2579:
;2580:	if (saberent->speed < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $1252
line 2581
;2581:	{
line 2582
;2582:		VectorNormalize(dir);
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2584
;2583:
;2584:		saberMoveBack(saberent, qtrue);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 2585
;2585:		VectorCopy(saberent->r.currentOrigin, saberent->s.pos.trBase);
ADDRLP4 44
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 44
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 2587
;2586:
;2587:		if (g_entities[saberent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_3)
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1255
line 2588
;2588:		{ //allow players with high saber throw rank to control the return speed of the saber
line 2589
;2589:			if (g_entities[saberent->r.ownerNum].client->buttons & BUTTON_ATTACK)
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1600
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1258
line 2590
;2590:			{
line 2591
;2591:				VectorScale(dir, 1200, saberent->s.pos.trDelta );
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
CNSTF4 1150681088
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1150681088
ADDRLP4 0+4
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 44
ADDP4
CNSTF4 1150681088
ADDRLP4 0+8
INDIRF4
MULF4
ASGNF4
line 2592
;2592:				saberent->speed = level.time + 50;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
CVIF4 4
ASGNF4
line 2593
;2593:			}
ADDRGP4 $1256
JUMPV
LABELV $1258
line 2595
;2594:			else
;2595:			{
line 2596
;2596:				VectorScale(dir, 700, saberent->s.pos.trDelta );
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
CNSTF4 1143930880
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1143930880
ADDRLP4 0+4
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 44
ADDP4
CNSTF4 1143930880
ADDRLP4 0+8
INDIRF4
MULF4
ASGNF4
line 2597
;2597:				saberent->speed = level.time + 200;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 200
ADDI4
CVIF4 4
ASGNF4
line 2598
;2598:			}
line 2599
;2599:		}
ADDRGP4 $1256
JUMPV
LABELV $1255
line 2601
;2600:		else
;2601:		{
line 2602
;2602:			VectorScale(dir, 700, saberent->s.pos.trDelta );
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
CNSTF4 1143930880
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1143930880
ADDRLP4 0+4
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 44
ADDP4
CNSTF4 1143930880
ADDRLP4 0+8
INDIRF4
MULF4
ASGNF4
line 2603
;2603:			saberent->speed = level.time + 200;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 200
ADDI4
CVIF4 4
ASGNF4
line 2604
;2604:		}
LABELV $1256
line 2605
;2605:		saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2606
;2606:	}
LABELV $1252
line 2608
;2607:
;2608:	if (ownerLen <= 512)
ADDRLP4 12
INDIRF4
CNSTF4 1140850688
GTF4 $1271
line 2609
;2609:	{
line 2610
;2610:		saberent->s.saberInFlight = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 228
ADDP4
CNSTI4 0
ASGNI4
line 2611
;2611:		saberent->s.loopSound = saberHumSound;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
ADDRGP4 saberHumSound
INDIRI4
ASGNI4
line 2612
;2612:	}
LABELV $1271
line 2614
;2613:
;2614:	if (ownerLen <= 32)
ADDRLP4 12
INDIRF4
CNSTF4 1107296256
GTF4 $1273
line 2615
;2615:	{
line 2616
;2616:		saberOwner->client->ps.saberInFlight = qfalse;
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 2617
;2617:		saberOwner->client->ps.saberCanThrow = qfalse;
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 2618
;2618:		saberOwner->client->ps.saberThrowDelay = level.time + 300;
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 2620
;2619:
;2620:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 2622
;2621:
;2622:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 2623
;2623:		saberent->bolt_Head = 0;
ADDRFP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 2624
;2624:		saberent->nextthink = level.time + 50;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
ASGNI4
line 2626
;2625:
;2626:		return;
ADDRGP4 $1226
JUMPV
LABELV $1273
line 2629
;2627:	}
;2628:
;2629:	if (!saberent->s.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 228
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1277
line 2630
;2630:	{
line 2631
;2631:		saberCheckRadiusDamage(saberent, 1);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 2632
;2632:	}
ADDRGP4 $1278
JUMPV
LABELV $1277
line 2634
;2633:	else
;2634:	{
line 2635
;2635:		saberCheckRadiusDamage(saberent, 2);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 2636
;2636:	}
LABELV $1278
line 2638
;2637:
;2638:	saberMoveBack(saberent, qtrue);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 2640
;2639:
;2640:	saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2641
;2641:}
LABELV $1226
endproc saberBackToOwner 48 8
export thrownSaberTouch
proc thrownSaberTouch 44 20
line 2646
;2642:
;2643:void saberFirstThrown(gentity_t *saberent);
;2644:
;2645:void thrownSaberTouch (gentity_t *saberent, gentity_t *other, trace_t *trace)
;2646:{
line 2647
;2647:	gentity_t *hitEnt = other;
ADDRLP4 0
ADDRFP4 4
INDIRP4
ASGNP4
line 2649
;2648:
;2649:	if (other && other->s.number == saberent->r.ownerNum)
ADDRLP4 4
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1281
ADDRLP4 4
INDIRP4
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
NEI4 $1281
line 2650
;2650:	{
line 2651
;2651:		return;
ADDRGP4 $1280
JUMPV
LABELV $1281
line 2653
;2652:	}
;2653:	VectorClear(saberent->s.pos.trDelta);
ADDRLP4 8
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 12
CNSTF4 0
ASGNF4
ADDRLP4 8
INDIRP4
CNSTI4 44
ADDP4
ADDRLP4 12
INDIRF4
ASGNF4
ADDRLP4 8
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 12
INDIRF4
ASGNF4
ADDRLP4 8
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 12
INDIRF4
ASGNF4
line 2654
;2654:	saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2656
;2655:
;2656:	saberent->s.apos.trType = TR_LINEAR;
ADDRFP4 0
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 2
ASGNI4
line 2657
;2657:	saberent->s.apos.trDelta[0] = 0;
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
CNSTF4 0
ASGNF4
line 2658
;2658:	saberent->s.apos.trDelta[1] = 800;
ADDRFP4 0
INDIRP4
CNSTI4 76
ADDP4
CNSTF4 1145569280
ASGNF4
line 2659
;2659:	saberent->s.apos.trDelta[2] = 0;
ADDRFP4 0
INDIRP4
CNSTI4 80
ADDP4
CNSTF4 0
ASGNF4
line 2661
;2660:
;2661:	VectorCopy(saberent->r.currentOrigin, saberent->s.pos.trBase);
ADDRLP4 16
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 16
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 16
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 2663
;2662:
;2663:	saberent->think = saberBackToOwner;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 saberBackToOwner
ASGNP4
line 2664
;2664:	saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2666
;2665:
;2666:	if (other && other->r.ownerNum < MAX_CLIENTS &&
ADDRLP4 20
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 20
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1285
ADDRLP4 28
ADDRLP4 20
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 32
GEI4 $1285
ADDRLP4 32
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 32
INDIRI4
EQI4 $1285
ADDRLP4 36
CNSTI4 828
ADDRLP4 28
INDIRI4
MULI4
ASGNI4
ADDRLP4 36
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1285
ADDRLP4 36
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
EQI4 $1285
line 2670
;2667:		(other->r.contents & CONTENTS_LIGHTSABER) &&
;2668:		g_entities[other->r.ownerNum].client &&
;2669:		g_entities[other->r.ownerNum].inuse)
;2670:	{
line 2671
;2671:		hitEnt = &g_entities[other->r.ownerNum];
ADDRLP4 0
CNSTI4 828
ADDRFP4 4
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2672
;2672:	}
LABELV $1285
line 2674
;2673:
;2674:	CheckThrownSaberDamaged(saberent, &g_entities[saberent->r.ownerNum], hitEnt, 256, 0);
ADDRLP4 40
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
ARGP4
CNSTI4 828
ADDRLP4 40
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 0
INDIRP4
ARGP4
CNSTI4 256
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 CheckThrownSaberDamaged
CALLI4
pop
line 2676
;2675:
;2676:	saberent->speed = 0;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
CNSTF4 0
ASGNF4
line 2677
;2677:}
LABELV $1280
endproc thrownSaberTouch 44 20
export saberFirstThrown
proc saberFirstThrown 1204 28
line 2682
;2678:
;2679:#define SABER_MAX_THROW_DISTANCE 700
;2680:
;2681:void saberFirstThrown(gentity_t *saberent)
;2682:{
line 2685
;2683:	vec3_t		vSub;
;2684:	float		vLen;
;2685:	gentity_t	*saberOwn = &g_entities[saberent->r.ownerNum];
ADDRLP4 0
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2687
;2686:
;2687:	if (saberent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $1290
line 2688
;2688:	{
line 2689
;2689:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2691
;2690:
;2691:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 2692
;2692:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2693
;2693:		return;
ADDRGP4 $1289
JUMPV
LABELV $1290
line 2696
;2694:	}
;2695:
;2696:	if (!saberOwn ||
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1297
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1297
ADDRLP4 28
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $1297
ADDRLP4 28
INDIRP4
CNSTI4 1536
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1293
LABELV $1297
line 2700
;2697:		!saberOwn->inuse ||
;2698:		!saberOwn->client ||
;2699:		saberOwn->client->sess.sessionTeam == TEAM_SPECTATOR)
;2700:	{
line 2701
;2701:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2703
;2702:
;2703:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 2704
;2704:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2705
;2705:		return;
ADDRGP4 $1289
JUMPV
LABELV $1293
line 2708
;2706:	}
;2707:
;2708:	if (saberOwn->health < 1 || !saberOwn->client->ps.fd.forcePowerLevel[FP_SABERATTACK] || !saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW])
ADDRLP4 0
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 1
LTI4 $1302
ADDRLP4 36
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 40
CNSTI4 0
ASGNI4
ADDRLP4 36
INDIRP4
CNSTI4 1004
ADDP4
INDIRI4
ADDRLP4 40
INDIRI4
EQI4 $1302
ADDRLP4 36
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
ADDRLP4 40
INDIRI4
NEI4 $1299
LABELV $1302
line 2709
;2709:	{ //He's dead, just go back to our normal saber status
line 2710
;2710:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 2711
;2711:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 2712
;2712:		saberent->bolt_Head = 0;
ADDRFP4 0
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 2713
;2713:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2715
;2714:
;2715:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 2717
;2716:
;2717:		saberent->r.svFlags |= (SVF_NOCLIENT);
ADDRLP4 44
ADDRFP4 0
INDIRP4
CNSTI4 304
ADDP4
ASGNP4
ADDRLP4 44
INDIRP4
ADDRLP4 44
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 2718
;2718:		saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 2719
;2719:		VectorSet( saberent->r.mins, -SABER_BOX_SIZE, -SABER_BOX_SIZE, -SABER_BOX_SIZE );
ADDRFP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3246391296
ASGNF4
line 2720
;2720:		VectorSet( saberent->r.maxs, SABER_BOX_SIZE, SABER_BOX_SIZE, SABER_BOX_SIZE );
ADDRFP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1098907648
ASGNF4
line 2721
;2721:		saberent->s.loopSound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 2723
;2722:
;2723:		saberOwn->client->ps.saberInFlight = qfalse;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 2724
;2724:		saberOwn->client->ps.saberThrowDelay = level.time + 500;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 2725
;2725:		saberOwn->client->ps.saberCanThrow = qfalse;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 2727
;2726:
;2727:		return;
ADDRGP4 $1289
JUMPV
LABELV $1299
line 2730
;2728:	}
;2729:
;2730:	if ((level.time - saberOwn->client->ps.saberDidThrowTime) > 500)
ADDRGP4 level+32
INDIRI4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 564
ADDP4
INDIRI4
SUBI4
CNSTI4 500
LEI4 $1305
line 2731
;2731:	{
line 2732
;2732:		if (!(saberOwn->client->buttons & BUTTON_ALT_ATTACK))
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1600
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
NEI4 $1308
line 2733
;2733:		{ //If owner releases altattack 500ms or later after throwing saber, it autoreturns
line 2734
;2734:			thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 44
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
ARGP4
ADDRLP4 44
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2735
;2735:			goto runMin;
ADDRGP4 $1310
JUMPV
LABELV $1308
line 2737
;2736:		}
;2737:		else if ((level.time - saberOwn->client->ps.saberDidThrowTime) > 6000)
ADDRGP4 level+32
INDIRI4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 564
ADDP4
INDIRI4
SUBI4
CNSTI4 6000
LEI4 $1311
line 2738
;2738:		{ //if it's out longer than 6 seconds, return it
line 2739
;2739:			thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 44
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
ARGP4
ADDRLP4 44
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2740
;2740:			goto runMin;
ADDRGP4 $1310
JUMPV
LABELV $1311
line 2742
;2741:		}
;2742:	}
LABELV $1305
line 2744
;2743:
;2744:	if (BG_HasYsalamiri(g_gametype.integer, &saberOwn->client->ps))
ADDRGP4 g_gametype+12
INDIRI4
ARGI4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ARGP4
ADDRLP4 44
ADDRGP4 BG_HasYsalamiri
CALLI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 0
EQI4 $1314
line 2745
;2745:	{
line 2746
;2746:		thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 48
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
ARGP4
ADDRLP4 48
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2747
;2747:		goto runMin;
ADDRGP4 $1310
JUMPV
LABELV $1314
line 2750
;2748:	}
;2749:	
;2750:	if (!BG_CanUseFPNow(g_gametype.integer, &saberOwn->client->ps, level.time, FP_SABERTHROW))
ADDRGP4 g_gametype+12
INDIRI4
ARGI4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTI4 17
ARGI4
ADDRLP4 48
ADDRGP4 BG_CanUseFPNow
CALLI4
ASGNI4
ADDRLP4 48
INDIRI4
CNSTI4 0
NEI4 $1317
line 2751
;2751:	{
line 2752
;2752:		thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 52
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 52
INDIRP4
ARGP4
ADDRLP4 52
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2753
;2753:		goto runMin;
ADDRGP4 $1310
JUMPV
LABELV $1317
line 2756
;2754:	}
;2755:
;2756:	VectorSubtract(saberOwn->client->ps.origin, saberent->r.currentOrigin, vSub);
ADDRLP4 52
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
ASGNP4
ADDRLP4 56
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 4
ADDRLP4 52
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
ADDRLP4 56
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 4+4
ADDRLP4 52
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
ADDRLP4 56
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 4+8
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2757
;2757:	vLen = VectorLength(vSub);
ADDRLP4 4
ARGP4
ADDRLP4 60
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 16
ADDRLP4 60
INDIRF4
ASGNF4
line 2759
;2758:
;2759:	if (vLen >= (SABER_MAX_THROW_DISTANCE*saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW]))
ADDRLP4 16
INDIRF4
CNSTI4 700
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
MULI4
CVIF4 4
LTF4 $1323
line 2760
;2760:	{
line 2761
;2761:		thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 64
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 64
INDIRP4
ARGP4
ADDRLP4 64
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 2762
;2762:		goto runMin;
ADDRGP4 $1310
JUMPV
LABELV $1323
line 2765
;2763:	}
;2764:
;2765:	if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_2 &&
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
CNSTI4 2
LTI4 $1325
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $1325
line 2767
;2766:		saberent->speed < level.time)
;2767:	{ //if owner is rank 3 in saber throwing, the saber goes where he points
line 2771
;2768:		vec3_t fwd, traceFrom, traceTo, dir;
;2769:		trace_t tr;
;2770:
;2771:		AngleVectors(saberOwn->client->ps.viewangles, fwd, 0, 0);
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 88
ARGP4
ADDRLP4 1192
CNSTP4 0
ASGNP4
ADDRLP4 1192
INDIRP4
ARGP4
ADDRLP4 1192
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 2773
;2772:
;2773:		VectorCopy(saberOwn->client->ps.origin, traceFrom);
ADDRLP4 100
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2774
;2774:		traceFrom[2] += saberOwn->client->ps.viewheight;
ADDRLP4 100+8
ADDRLP4 100+8
INDIRF4
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 168
ADDP4
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 2776
;2775:
;2776:		VectorCopy(traceFrom, traceTo);
ADDRLP4 76
ADDRLP4 100
INDIRB
ASGNB 12
line 2777
;2777:		traceTo[0] += fwd[0]*4096;
ADDRLP4 76
ADDRLP4 76
INDIRF4
CNSTF4 1166016512
ADDRLP4 88
INDIRF4
MULF4
ADDF4
ASGNF4
line 2778
;2778:		traceTo[1] += fwd[1]*4096;
ADDRLP4 76+4
ADDRLP4 76+4
INDIRF4
CNSTF4 1166016512
ADDRLP4 88+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 2779
;2779:		traceTo[2] += fwd[2]*4096;
ADDRLP4 76+8
ADDRLP4 76+8
INDIRF4
CNSTF4 1166016512
ADDRLP4 88+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2781
;2780:
;2781:		saberMoveBack(saberent, qfalse);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 2782
;2782:		VectorCopy(saberent->r.currentOrigin, saberent->s.pos.trBase);
ADDRLP4 1196
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1196
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 1196
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 2784
;2783:
;2784:		if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_3)
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1333
line 2785
;2785:		{ //if highest saber throw rank, we can direct the saber toward players directly by looking at them
line 2786
;2786:			trap_Trace(&tr, traceFrom, NULL, NULL, traceTo, saberOwn->s.number, MASK_PLAYERSOLID);
ADDRLP4 112
ARGP4
ADDRLP4 100
ARGP4
ADDRLP4 1200
CNSTP4 0
ASGNP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 76
ARGP4
ADDRLP4 0
INDIRP4
INDIRI4
ARGI4
CNSTI4 273
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 2787
;2787:		}
ADDRGP4 $1334
JUMPV
LABELV $1333
line 2789
;2788:		else
;2789:		{
line 2790
;2790:			trap_Trace(&tr, traceFrom, NULL, NULL, traceTo, saberOwn->s.number, MASK_SOLID);
ADDRLP4 112
ARGP4
ADDRLP4 100
ARGP4
ADDRLP4 1200
CNSTP4 0
ASGNP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 1200
INDIRP4
ARGP4
ADDRLP4 76
ARGP4
ADDRLP4 0
INDIRP4
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 2791
;2791:		}
LABELV $1334
line 2793
;2792:
;2793:		VectorSubtract(tr.endpos, saberent->r.currentOrigin, dir);
ADDRLP4 1200
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 64
ADDRLP4 112+12
INDIRF4
ADDRLP4 1200
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 64+4
ADDRLP4 112+12+4
INDIRF4
ADDRLP4 1200
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 64+8
ADDRLP4 112+12+8
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
SUBF4
ASGNF4
line 2795
;2794:
;2795:		VectorNormalize(dir);
ADDRLP4 64
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2797
;2796:
;2797:		VectorScale(dir, 500, saberent->s.pos.trDelta );
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
CNSTF4 1140457472
ADDRLP4 64
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1140457472
ADDRLP4 64+4
INDIRF4
MULF4
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 44
ADDP4
CNSTF4 1140457472
ADDRLP4 64+8
INDIRF4
MULF4
ASGNF4
line 2798
;2798:		saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2800
;2799:
;2800:		if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_3)
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1012
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1345
line 2801
;2801:		{ //we'll treat them to a quicker update rate if their throw rank is high enough
line 2802
;2802:			saberent->speed = level.time + 100;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
CVIF4 4
ASGNF4
line 2803
;2803:		}
ADDRGP4 $1346
JUMPV
LABELV $1345
line 2805
;2804:		else
;2805:		{
line 2806
;2806:			saberent->speed = level.time + 400;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 400
ADDI4
CVIF4 4
ASGNF4
line 2807
;2807:		}
LABELV $1346
line 2808
;2808:	}
LABELV $1325
LABELV $1310
line 2812
;2809:
;2810:runMin:
;2811:
;2812:	saberCheckRadiusDamage(saberent, 0);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 2813
;2813:	G_RunObject(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunObject
CALLV
pop
line 2814
;2814:}
LABELV $1289
endproc saberFirstThrown 1204 28
export WP_SaberPositionUpdate
proc WP_SaberPositionUpdate 568 40
line 2817
;2815:
;2816:void WP_SaberPositionUpdate( gentity_t *self, usercmd_t *ucmd )
;2817:{ //rww - keep the saber position as updated as possible on the server so that we can try to do realistic-looking contact stuff
line 2825
;2818:	mdxaBone_t	boltMatrix;
;2819:	vec3_t properAngles, properOrigin;
;2820:	vec3_t boltAngles, boltOrigin;
;2821:	vec3_t end;
;2822:	vec3_t legAxis[3];
;2823:	vec3_t addVel;
;2824:	vec3_t rawAngles;
;2825:	float fVSpeed = 0;
ADDRLP4 24
CNSTF4 0
ASGNF4
line 2829
;2826:	int f;
;2827:	int torsoAnim;
;2828:	int legsAnim;
;2829:	int returnAfterUpdate = 0;
ADDRLP4 140
CNSTI4 0
ASGNI4
line 2830
;2830:	float animSpeedScale = 1;
ADDRLP4 28
CNSTF4 1065353216
ASGNF4
line 2831
;2831:	qboolean setTorso = qfalse;
ADDRLP4 144
CNSTI4 0
ASGNI4
line 2833
;2832:
;2833:	if (self && self->inuse && self->client)
ADDRLP4 196
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 200
CNSTU4 0
ASGNU4
ADDRLP4 196
INDIRP4
CVPU4 4
ADDRLP4 200
INDIRU4
EQU4 $1350
ADDRLP4 196
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1350
ADDRLP4 196
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 200
INDIRU4
EQU4 $1350
line 2834
;2834:	{
line 2835
;2835:		if (self->client->saberCycleQueue)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1584
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1352
line 2836
;2836:		{
line 2837
;2837:			self->client->ps.fd.saberDrawAnimLevel = self->client->saberCycleQueue;
ADDRLP4 204
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 204
INDIRP4
CNSTI4 1232
ADDP4
ADDRLP4 204
INDIRP4
CNSTI4 1584
ADDP4
INDIRI4
ASGNI4
line 2838
;2838:		}
ADDRGP4 $1353
JUMPV
LABELV $1352
line 2840
;2839:		else
;2840:		{
line 2841
;2841:			self->client->ps.fd.saberDrawAnimLevel = self->client->ps.fd.saberAnimLevel;
ADDRLP4 204
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 204
INDIRP4
CNSTI4 1232
ADDP4
ADDRLP4 204
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ASGNI4
line 2842
;2842:		}
LABELV $1353
line 2843
;2843:	}
LABELV $1350
line 2845
;2844:
;2845:	if (self &&
ADDRLP4 204
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 208
CNSTU4 0
ASGNU4
ADDRLP4 204
INDIRP4
CVPU4 4
ADDRLP4 208
INDIRU4
EQU4 $1354
ADDRLP4 212
CNSTI4 0
ASGNI4
ADDRLP4 204
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
EQI4 $1354
ADDRLP4 216
ADDRLP4 204
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 216
INDIRP4
CVPU4 4
ADDRLP4 208
INDIRU4
EQU4 $1354
ADDRLP4 216
INDIRP4
CNSTI4 1584
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
EQI4 $1354
ADDRLP4 216
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
LEI4 $1356
ADDRLP4 204
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 1
GEI4 $1354
LABELV $1356
line 2850
;2846:		self->inuse &&
;2847:		self->client &&
;2848:		self->client->saberCycleQueue &&
;2849:		(self->client->ps.weaponTime <= 0 || self->health < 1))
;2850:	{ //we cycled attack levels while we were busy, so update now that we aren't (even if that means we're dead)
line 2851
;2851:		self->client->ps.fd.saberAnimLevel = self->client->saberCycleQueue;
ADDRLP4 220
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 220
INDIRP4
CNSTI4 1228
ADDP4
ADDRLP4 220
INDIRP4
CNSTI4 1584
ADDP4
INDIRI4
ASGNI4
line 2852
;2852:		self->client->saberCycleQueue = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1584
ADDP4
CNSTI4 0
ASGNI4
line 2853
;2853:	}
LABELV $1354
line 2855
;2854:
;2855:	if (!self ||
ADDRLP4 220
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 224
CNSTU4 0
ASGNU4
ADDRLP4 220
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $1361
ADDRLP4 228
ADDRLP4 220
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 228
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $1361
ADDRLP4 228
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $1361
ADDRGP4 g2SaberInstance
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
NEU4 $1357
LABELV $1361
line 2859
;2856:		!self->client ||
;2857:		!self->client->ghoul2 ||
;2858:		!g2SaberInstance)
;2859:	{
line 2860
;2860:		return;
ADDRGP4 $1349
JUMPV
LABELV $1357
line 2863
;2861:	}
;2862:
;2863:	if (self->health < 1)
ADDRFP4 0
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 1
GEI4 $1362
line 2864
;2864:	{ //we don't want to waste precious CPU time calculating saber positions for corpses. But we want to avoid the saber ent position lagging on spawn, so..
line 2865
;2865:		gentity_t *mySaber = &g_entities[self->client->ps.saberEntityNum];
ADDRLP4 232
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2868
;2866:
;2867:		//I guess it's good to keep the position updated even when contents are 0
;2868:		if (mySaber && ((mySaber->r.contents & CONTENTS_LIGHTSABER) || mySaber->r.contents == 0) && !self->client->ps.saberInFlight)
ADDRLP4 236
ADDRLP4 232
INDIRP4
ASGNP4
ADDRLP4 236
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1349
ADDRLP4 240
ADDRLP4 236
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
ASGNI4
ADDRLP4 244
CNSTI4 0
ASGNI4
ADDRLP4 240
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 244
INDIRI4
NEI4 $1366
ADDRLP4 240
INDIRI4
ADDRLP4 244
INDIRI4
NEI4 $1349
LABELV $1366
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1349
line 2869
;2869:		{ //Since we haven't got a bolt position, place it on top of the player origin.
line 2870
;2870:			VectorCopy(self->client->ps.origin, mySaber->r.currentOrigin);
ADDRLP4 232
INDIRP4
CNSTI4 368
ADDP4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2871
;2871:		}
line 2872
;2872:		return;
ADDRGP4 $1349
JUMPV
LABELV $1362
line 2875
;2873:	}
;2874:
;2875:	if (self->client->ps.usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1367
line 2876
;2876:	{ //we don't update the server's G2 instance in the case of ATST use, so..
line 2877
;2877:		return;
ADDRGP4 $1349
JUMPV
LABELV $1367
line 2880
;2878:	}
;2879:
;2880:	if (self->client->ps.weapon != WP_SABER ||
ADDRLP4 232
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 236
CNSTI4 2
ASGNI4
ADDRLP4 232
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
ADDRLP4 236
INDIRI4
NEI4 $1372
ADDRLP4 240
ADDRLP4 232
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
ASGNI4
ADDRLP4 240
INDIRI4
CNSTI4 1
EQI4 $1372
ADDRLP4 240
INDIRI4
ADDRLP4 236
INDIRI4
NEI4 $1369
LABELV $1372
line 2883
;2881:		self->client->ps.weaponstate == WEAPON_RAISING ||
;2882:		self->client->ps.weaponstate == WEAPON_DROPPING)
;2883:	{
line 2884
;2884:		returnAfterUpdate = 1;
ADDRLP4 140
CNSTI4 1
ASGNI4
line 2885
;2885:	}
LABELV $1369
line 2887
;2886:
;2887:	if (self->client->ps.saberThrowDelay < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $1373
line 2888
;2888:	{
line 2889
;2889:		self->client->ps.saberCanThrow = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 1
ASGNI4
line 2890
;2890:	}
LABELV $1373
line 2892
;2891:
;2892:	if (self->client->ps.fd.forcePowersActive & (1 << FP_RAGE))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 848
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $1376
line 2893
;2893:	{
line 2894
;2894:		animSpeedScale = 2;
ADDRLP4 28
CNSTF4 1073741824
ASGNF4
line 2895
;2895:	}
LABELV $1376
line 2897
;2896:	
;2897:	torsoAnim = (self->client->ps.torsoAnim & ~ANIM_TOGGLEBIT );
ADDRLP4 92
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
line 2898
;2898:	legsAnim = (self->client->ps.legsAnim & ~ANIM_TOGGLEBIT );
ADDRLP4 120
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
CNSTI4 -2049
BANDI4
ASGNI4
line 2900
;2899:
;2900:	VectorCopy(self->client->ps.origin, properOrigin);
ADDRLP4 96
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2901
;2901:	VectorCopy(self->client->ps.viewangles, properAngles);
ADDRLP4 80
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 2904
;2902:
;2903:	//try to predict the origin based on velocity so it's more like what the client is seeing
;2904:	VectorCopy(self->client->ps.velocity, addVel);
ADDRLP4 108
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRB
ASGNB 12
line 2905
;2905:	VectorNormalize(addVel);
ADDRLP4 108
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2907
;2906:
;2907:	if (self->client->ps.velocity[0] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
CNSTF4 0
GEF4 $1378
line 2908
;2908:	{
line 2909
;2909:		fVSpeed += (-self->client->ps.velocity[0]);
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
NEGF4
ADDF4
ASGNF4
line 2910
;2910:	}
ADDRGP4 $1379
JUMPV
LABELV $1378
line 2912
;2911:	else
;2912:	{
line 2913
;2913:		fVSpeed += self->client->ps.velocity[0];
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
ADDF4
ASGNF4
line 2914
;2914:	}
LABELV $1379
line 2915
;2915:	if (self->client->ps.velocity[1] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
CNSTF4 0
GEF4 $1380
line 2916
;2916:	{
line 2917
;2917:		fVSpeed += (-self->client->ps.velocity[1]);
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
NEGF4
ADDF4
ASGNF4
line 2918
;2918:	}
ADDRGP4 $1381
JUMPV
LABELV $1380
line 2920
;2919:	else
;2920:	{
line 2921
;2921:		fVSpeed += self->client->ps.velocity[1];
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
ADDF4
ASGNF4
line 2922
;2922:	}
LABELV $1381
line 2923
;2923:	if (self->client->ps.velocity[2] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 0
GEF4 $1382
line 2924
;2924:	{
line 2925
;2925:		fVSpeed += (-self->client->ps.velocity[2]);
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
NEGF4
ADDF4
ASGNF4
line 2926
;2926:	}
ADDRGP4 $1383
JUMPV
LABELV $1382
line 2928
;2927:	else
;2928:	{
line 2929
;2929:		fVSpeed += self->client->ps.velocity[2];
ADDRLP4 24
ADDRLP4 24
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
ADDF4
ASGNF4
line 2930
;2930:	}
LABELV $1383
line 2932
;2931:
;2932:	fVSpeed *= 0.08;
ADDRLP4 24
CNSTF4 1034147594
ADDRLP4 24
INDIRF4
MULF4
ASGNF4
line 2934
;2933:
;2934:	properOrigin[0] += addVel[0]*fVSpeed;
ADDRLP4 96
ADDRLP4 96
INDIRF4
ADDRLP4 108
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2935
;2935:	properOrigin[1] += addVel[1]*fVSpeed;
ADDRLP4 96+4
ADDRLP4 96+4
INDIRF4
ADDRLP4 108+4
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2936
;2936:	properOrigin[2] += addVel[2]*fVSpeed;
ADDRLP4 96+8
ADDRLP4 96+8
INDIRF4
ADDRLP4 108+8
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2938
;2937:
;2938:	properAngles[0] = 0;
ADDRLP4 80
CNSTF4 0
ASGNF4
line 2939
;2939:	properAngles[1] = self->client->ps.viewangles[YAW];
ADDRLP4 80+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2940
;2940:	properAngles[2] = 0;
ADDRLP4 80+8
CNSTF4 0
ASGNF4
line 2942
;2941:
;2942:	AnglesToAxis( properAngles, legAxis );
ADDRLP4 80
ARGP4
ADDRLP4 148
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 2943
;2943:	G_G2PlayerAngles( self, legAxis, properAngles );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 148
ARGP4
ADDRLP4 80
ARGP4
ADDRGP4 G_G2PlayerAngles
CALLV
pop
line 2945
;2944:
;2945:	if (returnAfterUpdate)
ADDRLP4 140
INDIRI4
CNSTI4 0
EQI4 $1390
line 2946
;2946:	{ //We don't even need to do GetBoltMatrix if we're only in here to keep the g2 server instance in sync
line 2948
;2947:		//but keep our saber entity in sync too, just copy it over our origin.
;2948:		gentity_t *mySaber = &g_entities[self->client->ps.saberEntityNum];
ADDRLP4 244
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2951
;2949:
;2950:		//I guess it's good to keep the position updated even when contents are 0
;2951:		if (mySaber && ((mySaber->r.contents & CONTENTS_LIGHTSABER) || mySaber->r.contents == 0) && !self->client->ps.saberInFlight)
ADDRLP4 248
ADDRLP4 244
INDIRP4
ASGNP4
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1395
ADDRLP4 252
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
ASGNI4
ADDRLP4 256
CNSTI4 0
ASGNI4
ADDRLP4 252
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 256
INDIRI4
NEI4 $1394
ADDRLP4 252
INDIRI4
ADDRLP4 256
INDIRI4
NEI4 $1395
LABELV $1394
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1395
line 2952
;2952:		{ //Since we haven't got a bolt position, place it on top of the player origin.
line 2953
;2953:			VectorCopy(self->client->ps.origin, mySaber->r.currentOrigin);
ADDRLP4 244
INDIRP4
CNSTI4 368
ADDP4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2954
;2954:		}
line 2956
;2955:
;2956:		goto finalUpdate;
ADDRGP4 $1395
JUMPV
LABELV $1390
line 2959
;2957:	}
;2958:
;2959:	trap_G2API_GetBoltMatrix(self->client->ghoul2, 1, 0, &boltMatrix, properAngles, properOrigin, level.time, NULL, vec3_origin);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 1
ARGI4
CNSTI4 0
ARGI4
ADDRLP4 32
ARGP4
ADDRLP4 80
ARGP4
ADDRLP4 96
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTP4 0
ARGP4
ADDRGP4 vec3_origin
ARGP4
ADDRGP4 trap_G2API_GetBoltMatrix
CALLI4
pop
line 2961
;2960:
;2961:	boltOrigin[0] = boltMatrix.matrix[0][3];
ADDRLP4 0
ADDRLP4 32+12
INDIRF4
ASGNF4
line 2962
;2962:	boltOrigin[1] = boltMatrix.matrix[1][3];
ADDRLP4 0+4
ADDRLP4 32+16+12
INDIRF4
ASGNF4
line 2963
;2963:	boltOrigin[2] = boltMatrix.matrix[2][3];
ADDRLP4 0+8
ADDRLP4 32+32+12
INDIRF4
ASGNF4
line 2965
;2964:
;2965:	boltAngles[0] = -boltMatrix.matrix[0][1];
ADDRLP4 12
ADDRLP4 32+4
INDIRF4
NEGF4
ASGNF4
line 2966
;2966:	boltAngles[1] = -boltMatrix.matrix[1][1];
ADDRLP4 12+4
ADDRLP4 32+16+4
INDIRF4
NEGF4
ASGNF4
line 2967
;2967:	boltAngles[2] = -boltMatrix.matrix[2][1];
ADDRLP4 12+8
ADDRLP4 32+32+4
INDIRF4
NEGF4
ASGNF4
line 2970
;2968:
;2969:	//immediately store these values so we don't have to recalculate this again
;2970:	VectorCopy(boltOrigin, self->client->lastSaberBase_Always);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1772
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 2971
;2971:	VectorCopy(boltOrigin, self->client->lastSaberDir_Always);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1760
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 2972
;2972:	self->client->lastSaberStorageTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1784
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2974
;2973:
;2974:	VectorCopy(boltAngles, rawAngles);
ADDRLP4 184
ADDRLP4 12
INDIRB
ASGNB 12
line 2976
;2975:
;2976:	VectorMA( boltOrigin, 40, boltAngles, end );
ADDRLP4 244
CNSTF4 1109393408
ASGNF4
ADDRLP4 124
ADDRLP4 0
INDIRF4
ADDRLP4 244
INDIRF4
ADDRLP4 12
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 124+4
ADDRLP4 0+4
INDIRF4
ADDRLP4 244
INDIRF4
ADDRLP4 12+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 124+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1109393408
ADDRLP4 12+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2978
;2977:
;2978:	if (self->client->ps.saberEntityNum)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1418
line 2979
;2979:	{
line 2980
;2980:		gentity_t *mySaber = &g_entities[self->client->ps.saberEntityNum];
ADDRLP4 248
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 2983
;2981:
;2982:		//I guess it's good to keep the position updated even when contents are 0
;2983:		if (mySaber && ((mySaber->r.contents & CONTENTS_LIGHTSABER) || mySaber->r.contents == 0) && !self->client->ps.saberInFlight)
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1420
ADDRLP4 256
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
ASGNI4
ADDRLP4 260
CNSTI4 0
ASGNI4
ADDRLP4 256
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 260
INDIRI4
NEI4 $1422
ADDRLP4 256
INDIRI4
ADDRLP4 260
INDIRI4
NEI4 $1420
LABELV $1422
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1420
line 2984
;2984:		{ //place it roughly in the middle of the saber..
line 2985
;2985:			VectorMA( boltOrigin, 20, boltAngles, mySaber->r.currentOrigin );
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 0
INDIRF4
CNSTF4 1101004800
ADDRLP4 12
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 372
ADDP4
ADDRLP4 0+4
INDIRF4
CNSTF4 1101004800
ADDRLP4 12+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 376
ADDP4
ADDRLP4 0+8
INDIRF4
CNSTF4 1101004800
ADDRLP4 12+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2987
;2986:
;2987:			if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1364
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1427
line 2988
;2988:			{
line 2989
;2989:				VectorCopy(boltOrigin, mySaber->r.currentOrigin);
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 2990
;2990:			}
LABELV $1427
line 2991
;2991:		}
LABELV $1420
line 2992
;2992:	}
LABELV $1418
line 2994
;2993:
;2994:	boltAngles[YAW] = self->client->ps.viewangles[YAW];
ADDRLP4 12+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2998
;2995:
;2996:	//G_TestLine(boltOrigin, end, 0x000000ff, 50);
;2997:
;2998:	if (self->client->ps.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1430
line 2999
;2999:	{ //do the thrown-saber stuff
line 3000
;3000:		gentity_t *saberent = &g_entities[self->client->ps.saberEntityNum];
ADDRLP4 248
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 3002
;3001:
;3002:		if (saberent)
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1431
line 3003
;3003:		{
line 3004
;3004:			if (!self->client->ps.saberEntityState)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1434
line 3005
;3005:			{
line 3008
;3006:				vec3_t startorg, startang, dir;
;3007:
;3008:				VectorCopy(boltOrigin, saberent->r.currentOrigin);
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 3010
;3009:
;3010:				VectorCopy(boltOrigin, startorg);
ADDRLP4 264
ADDRLP4 0
INDIRB
ASGNB 12
line 3011
;3011:				VectorCopy(boltAngles, startang);
ADDRLP4 276
ADDRLP4 12
INDIRB
ASGNB 12
line 3017
;3012:
;3013:				//startang[0] = 90;
;3014:				//Instead of this we'll sort of fake it and slowly tilt it down on the client via
;3015:				//a perframe method (which doesn't actually affect where or how the saber hits)
;3016:
;3017:				saberent->r.svFlags &= ~(SVF_NOCLIENT);
ADDRLP4 288
ADDRLP4 248
INDIRP4
CNSTI4 304
ADDP4
ASGNP4
ADDRLP4 288
INDIRP4
ADDRLP4 288
INDIRP4
INDIRI4
CNSTI4 -2
BANDI4
ASGNI4
line 3018
;3018:				VectorCopy(startorg, saberent->s.pos.trBase);
ADDRLP4 248
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 264
INDIRB
ASGNB 12
line 3019
;3019:				VectorCopy(startang, saberent->s.apos.trBase);
ADDRLP4 248
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 276
INDIRB
ASGNB 12
line 3021
;3020:
;3021:				VectorCopy(startorg, saberent->s.origin);
ADDRLP4 248
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 264
INDIRB
ASGNB 12
line 3022
;3022:				VectorCopy(startang, saberent->s.angles);
ADDRLP4 248
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 276
INDIRB
ASGNB 12
line 3024
;3023:
;3024:				saberent->s.saberInFlight = qtrue;
ADDRLP4 248
INDIRP4
CNSTI4 228
ADDP4
CNSTI4 1
ASGNI4
line 3026
;3025:
;3026:				saberent->s.apos.trType = TR_LINEAR;
ADDRLP4 248
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 2
ASGNI4
line 3027
;3027:				saberent->s.apos.trDelta[0] = 0;
ADDRLP4 248
INDIRP4
CNSTI4 72
ADDP4
CNSTF4 0
ASGNF4
line 3028
;3028:				saberent->s.apos.trDelta[1] = 800;
ADDRLP4 248
INDIRP4
CNSTI4 76
ADDP4
CNSTF4 1145569280
ASGNF4
line 3029
;3029:				saberent->s.apos.trDelta[2] = 0;
ADDRLP4 248
INDIRP4
CNSTI4 80
ADDP4
CNSTF4 0
ASGNF4
line 3031
;3030:
;3031:				saberent->s.pos.trType = TR_LINEAR;
ADDRLP4 248
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 2
ASGNI4
line 3032
;3032:				saberent->s.eType = ET_GENERAL;
ADDRLP4 248
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 0
ASGNI4
line 3033
;3033:				saberent->s.eFlags = 0;
ADDRLP4 248
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 0
ASGNI4
line 3034
;3034:				saberent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm");
ADDRGP4 $1224
ARGP4
ADDRLP4 292
ADDRGP4 G_ModelIndex
CALLI4
ASGNI4
ADDRLP4 248
INDIRP4
CNSTI4 212
ADDP4
ADDRLP4 292
INDIRI4
ASGNI4
line 3035
;3035:				saberent->s.modelGhoul2 = 127;
ADDRLP4 248
INDIRP4
CNSTI4 204
ADDP4
CNSTI4 127
ASGNI4
line 3037
;3036:
;3037:				saberent->parent = self;
ADDRLP4 248
INDIRP4
CNSTI4 536
ADDP4
ADDRFP4 0
INDIRP4
ASGNP4
line 3039
;3038:
;3039:				self->client->ps.saberEntityState = 1;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
CNSTI4 1
ASGNI4
line 3042
;3040:
;3041:				//Projectile stuff:
;3042:				AngleVectors(self->client->ps.viewangles, dir, NULL, NULL);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 252
ARGP4
ADDRLP4 296
CNSTP4 0
ASGNP4
ADDRLP4 296
INDIRP4
ARGP4
ADDRLP4 296
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3044
;3043:
;3044:				saberent->nextthink = level.time + FRAMETIME;
ADDRLP4 248
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
ASGNI4
line 3045
;3045:				saberent->think = saberFirstThrown;
ADDRLP4 248
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 saberFirstThrown
ASGNP4
line 3047
;3046:
;3047:				saberent->damage = SABER_THROWN_HIT_DAMAGE;
ADDRLP4 248
INDIRP4
CNSTI4 688
ADDP4
CNSTI4 30
ASGNI4
line 3048
;3048:				saberent->methodOfDeath = MOD_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 704
ADDP4
CNSTI4 3
ASGNI4
line 3049
;3049:				saberent->splashMethodOfDeath = MOD_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 708
ADDP4
CNSTI4 3
ASGNI4
line 3050
;3050:				saberent->s.solid = 2;
ADDRLP4 248
INDIRP4
CNSTI4 248
ADDP4
CNSTI4 2
ASGNI4
line 3051
;3051:				saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 3053
;3052:
;3053:				saberent->bolt_Head = 0;
ADDRLP4 248
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 3055
;3054:
;3055:				VectorSet( saberent->r.mins, -24.0f, -24.0f, -8.0f );
ADDRLP4 248
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3250585600
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3250585600
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3238002688
ASGNF4
line 3056
;3056:				VectorSet( saberent->r.maxs, 24.0f, 24.0f, 8.0f );
ADDRLP4 248
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1103101952
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1103101952
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1090519040
ASGNF4
line 3058
;3057:
;3058:				saberent->s.genericenemyindex = self->s.number+1024;
ADDRLP4 248
INDIRP4
CNSTI4 172
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
CNSTI4 1024
ADDI4
ASGNI4
line 3060
;3059:
;3060:				saberent->touch = thrownSaberTouch;
ADDRLP4 248
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 thrownSaberTouch
ASGNP4
line 3062
;3061:
;3062:				saberent->s.weapon = WP_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 276
ADDP4
CNSTI4 2
ASGNI4
line 3064
;3063:
;3064:				VectorScale(dir, 400, saberent->s.pos.trDelta );
ADDRLP4 248
INDIRP4
CNSTI4 36
ADDP4
CNSTF4 1137180672
ADDRLP4 252
INDIRF4
MULF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 40
ADDP4
CNSTF4 1137180672
ADDRLP4 252+4
INDIRF4
MULF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 44
ADDP4
CNSTF4 1137180672
ADDRLP4 252+8
INDIRF4
MULF4
ASGNF4
line 3065
;3065:				saberent->s.pos.trTime = level.time;
ADDRLP4 248
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 3067
;3066:
;3067:				saberent->s.loopSound = saberSpinSound;
ADDRLP4 248
INDIRP4
CNSTI4 200
ADDP4
ADDRGP4 saberSpinSound
INDIRI4
ASGNI4
line 3069
;3068:
;3069:				self->client->ps.saberDidThrowTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 564
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 3071
;3070:
;3071:				self->client->dangerTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1792
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 3072
;3072:				self->client->ps.eFlags &= ~EF_INVULNERABLE;
ADDRLP4 300
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 108
ADDP4
ASGNP4
ADDRLP4 300
INDIRP4
ADDRLP4 300
INDIRP4
INDIRI4
CNSTI4 -67108865
BANDI4
ASGNI4
line 3073
;3073:				self->client->invulnerableTimer = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1580
ADDP4
CNSTI4 0
ASGNI4
line 3075
;3074:
;3075:				trap_LinkEntity(saberent);
ADDRLP4 248
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 3076
;3076:			}
ADDRGP4 $1431
JUMPV
LABELV $1434
line 3078
;3077:			else
;3078:			{
line 3079
;3079:				VectorCopy(boltOrigin, saberent->pos1);
ADDRLP4 248
INDIRP4
CNSTI4 548
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 3080
;3080:				trap_LinkEntity(saberent);
ADDRLP4 248
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 3082
;3081:
;3082:				if (saberent->bolt_Head == PROPER_THROWN_VALUE)
ADDRLP4 248
INDIRP4
CNSTI4 784
ADDP4
INDIRI4
CNSTI4 999
NEI4 $1431
line 3083
;3083:				{ //return to the owner now, this is a bad state to be in for here..
line 3084
;3084:					saberent->bolt_Head = 0;
ADDRLP4 248
INDIRP4
CNSTI4 784
ADDP4
CNSTI4 0
ASGNI4
line 3085
;3085:					saberent->think = SaberUpdateSelf;
ADDRLP4 248
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 3086
;3086:					saberent->nextthink = level.time;
ADDRLP4 248
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 3087
;3087:					self->client->ps.saberInFlight = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 3088
;3088:					self->client->ps.saberThrowDelay = level.time + 500;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 3089
;3089:					self->client->ps.saberCanThrow = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 3090
;3090:				}
line 3091
;3091:			}
line 3092
;3092:		}
line 3093
;3093:	}
ADDRGP4 $1431
JUMPV
LABELV $1430
line 3094
;3094:	else if (!self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1312
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1446
line 3095
;3095:	{
line 3096
;3096:		gentity_t *saberent = &g_entities[self->client->ps.saberEntityNum];
ADDRLP4 248
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 3098
;3097:
;3098:		if (saberent)
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1448
line 3099
;3099:		{
line 3100
;3100:			saberent->r.svFlags |= (SVF_NOCLIENT);
ADDRLP4 252
ADDRLP4 248
INDIRP4
CNSTI4 304
ADDP4
ASGNP4
ADDRLP4 252
INDIRP4
ADDRLP4 252
INDIRP4
INDIRI4
CNSTI4 1
BORI4
ASGNI4
line 3101
;3101:			saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 3102
;3102:			VectorSet( saberent->r.mins, -SABER_BOX_SIZE, -SABER_BOX_SIZE, -SABER_BOX_SIZE );
ADDRLP4 248
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3246391296
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3246391296
ASGNF4
line 3103
;3103:			VectorSet( saberent->r.maxs, SABER_BOX_SIZE, SABER_BOX_SIZE, SABER_BOX_SIZE );
ADDRLP4 248
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1098907648
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1098907648
ASGNF4
line 3104
;3104:			saberent->s.loopSound = 0;
ADDRLP4 248
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 3105
;3105:		}
LABELV $1448
line 3107
;3106:
;3107:		if (self->client->ps.saberLockTime > level.time && self->client->ps.saberEntityNum)
ADDRLP4 252
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 252
INDIRP4
CNSTI4 524
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LEI4 $1450
ADDRLP4 252
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1450
line 3108
;3108:		{
line 3109
;3109:			if (self->client->ps.saberIdleWound < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $1453
line 3110
;3110:			{
line 3113
;3111:				gentity_t *te;
;3112:				vec3_t dir;
;3113:				te = G_TempEntity( g_entities[self->client->ps.saberEntityNum].r.currentOrigin, EV_SABER_BLOCK );
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+296+72
ADDP4
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 272
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 256
ADDRLP4 272
INDIRP4
ASGNP4
line 3114
;3114:				VectorSet( dir, 0, 1, 0 );
ADDRLP4 260
CNSTF4 0
ASGNF4
ADDRLP4 260+4
CNSTF4 1065353216
ASGNF4
ADDRLP4 260+8
CNSTF4 0
ASGNF4
line 3115
;3115:				VectorCopy(g_entities[self->client->ps.saberEntityNum].r.currentOrigin, te->s.origin);
ADDRLP4 256
INDIRP4
CNSTI4 92
ADDP4
CNSTI4 828
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities+296+72
ADDP4
INDIRB
ASGNB 12
line 3116
;3116:				VectorCopy(dir, te->s.angles);
ADDRLP4 256
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 260
INDIRB
ASGNB 12
line 3117
;3117:				te->s.eventParm = 1;
ADDRLP4 256
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 3119
;3118:
;3119:				self->client->ps.saberIdleWound = level.time + Q_irand(400, 600);
CNSTI4 400
ARGI4
CNSTI4 600
ARGI4
ADDRLP4 276
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRLP4 276
INDIRI4
ADDI4
ASGNI4
line 3120
;3120:			}
LABELV $1453
line 3122
;3121:
;3122:			VectorCopy(boltOrigin, self->client->lastSaberBase);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 3123
;3123:			VectorCopy(end, self->client->lastSaberTip);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1736
ADDP4
ADDRLP4 124
INDIRB
ASGNB 12
line 3124
;3124:			self->client->hasCurrentPosition = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1788
ADDP4
CNSTI4 1
ASGNI4
line 3126
;3125:
;3126:			self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 3128
;3127:
;3128:			goto finalUpdate;
ADDRGP4 $1395
JUMPV
LABELV $1450
line 3131
;3129:		}
;3130:
;3131:		if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1364
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1463
line 3132
;3132:		{
line 3133
;3133:			self->client->ps.saberIdleWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
CNSTI4 0
ASGNI4
line 3134
;3134:			self->client->ps.saberAttackWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
CNSTI4 0
ASGNI4
line 3135
;3135:		}
LABELV $1463
line 3137
;3136:
;3137:		if (self->client->hasCurrentPosition && g_saberInterpolate.integer)
ADDRLP4 256
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1788
ADDP4
INDIRI4
ADDRLP4 256
INDIRI4
EQI4 $1465
ADDRGP4 g_saberInterpolate+12
INDIRI4
ADDRLP4 256
INDIRI4
EQI4 $1465
line 3138
;3138:		{
line 3139
;3139:			if (g_saberInterpolate.integer == 1)
ADDRGP4 g_saberInterpolate+12
INDIRI4
CNSTI4 1
NEI4 $1468
line 3140
;3140:			{
line 3141
;3141:				int trMask = CONTENTS_LIGHTSABER|CONTENTS_BODY;
ADDRLP4 396
CNSTI4 262400
ASGNI4
line 3142
;3142:				int sN = 0;
ADDRLP4 260
CNSTI4 0
ASGNI4
line 3143
;3143:				qboolean gotHit = qfalse;
ADDRLP4 392
CNSTI4 0
ASGNI4
line 3145
;3144:				qboolean clientUnlinked[MAX_CLIENTS];
;3145:				qboolean skipSaberTrace = qfalse;
ADDRLP4 400
CNSTI4 0
ASGNI4
line 3147
;3146:				
;3147:				if (!g_saberTraceSaberFirst.integer)
ADDRGP4 g_saberTraceSaberFirst+12
INDIRI4
CNSTI4 0
NEI4 $1471
line 3148
;3148:				{
line 3149
;3149:					skipSaberTrace = qtrue;
ADDRLP4 400
CNSTI4 1
ASGNI4
line 3150
;3150:				}
ADDRGP4 $1472
JUMPV
LABELV $1471
line 3151
;3151:				else if (g_saberTraceSaberFirst.integer < 2 &&
ADDRGP4 g_saberTraceSaberFirst+12
INDIRI4
CNSTI4 2
GEI4 $1474
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
EQI4 $1474
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1474
line 3154
;3152:					g_gametype.integer != GT_TOURNAMENT &&
;3153:					!self->client->ps.duelInProgress)
;3154:				{ //if value is less than 2, and not in a duel, skip
line 3155
;3155:					skipSaberTrace = qtrue;
ADDRLP4 400
CNSTI4 1
ASGNI4
line 3156
;3156:				}
LABELV $1474
LABELV $1472
line 3158
;3157:
;3158:				if (skipSaberTrace)
ADDRLP4 400
INDIRI4
CNSTI4 0
EQI4 $1481
line 3159
;3159:				{ //skip the saber-contents-only trace and get right to the full trace
line 3160
;3160:					trMask = (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT);
ADDRLP4 396
CNSTI4 262929
ASGNI4
line 3161
;3161:				}
ADDRGP4 $1494
JUMPV
line 3163
;3162:				else
;3163:				{
LABELV $1480
line 3165
;3164:					while (sN < MAX_CLIENTS)
;3165:					{
line 3166
;3166:						if (g_entities[sN].inuse && g_entities[sN].client && g_entities[sN].r.linked && g_entities[sN].health > 0 && (g_entities[sN].r.contents & CONTENTS_BODY))
ADDRLP4 404
CNSTI4 828
ADDRLP4 260
INDIRI4
MULI4
ASGNI4
ADDRLP4 408
CNSTI4 0
ASGNI4
ADDRLP4 404
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 408
INDIRI4
EQI4 $1483
ADDRLP4 404
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1483
ADDRLP4 404
INDIRI4
ADDRGP4 g_entities+296
ADDP4
INDIRI4
ADDRLP4 408
INDIRI4
EQI4 $1483
ADDRLP4 404
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
ADDRLP4 408
INDIRI4
LEI4 $1483
ADDRLP4 404
INDIRI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 256
BANDI4
ADDRLP4 408
INDIRI4
EQI4 $1483
line 3167
;3167:						{ //Take this mask off before the saber trace, because we want to hit the saber first
line 3168
;3168:							g_entities[sN].r.contents &= ~CONTENTS_BODY;
ADDRLP4 412
CNSTI4 828
ADDRLP4 260
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
ASGNP4
ADDRLP4 412
INDIRP4
ADDRLP4 412
INDIRP4
INDIRI4
CNSTI4 -257
BANDI4
ASGNI4
line 3169
;3169:							clientUnlinked[sN] = qtrue;
ADDRLP4 260
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 264
ADDP4
CNSTI4 1
ASGNI4
line 3170
;3170:						}
ADDRGP4 $1484
JUMPV
LABELV $1483
line 3172
;3171:						else
;3172:						{
line 3173
;3173:							clientUnlinked[sN] = qfalse;
ADDRLP4 260
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 264
ADDP4
CNSTI4 0
ASGNI4
line 3174
;3174:						}
LABELV $1484
line 3175
;3175:						sN++;
ADDRLP4 260
ADDRLP4 260
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 3176
;3176:					}
LABELV $1481
line 3164
ADDRLP4 260
INDIRI4
CNSTI4 32
LTI4 $1480
line 3177
;3177:				}
ADDRGP4 $1494
JUMPV
LABELV $1493
line 3180
;3178:
;3179:				while (!gotHit)
;3180:				{
line 3181
;3181:					if (!CheckSaberDamage(self, boltOrigin, end, qfalse, trMask))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 396
INDIRI4
ARGI4
ADDRLP4 404
ADDRGP4 CheckSaberDamage
CALLI4
ASGNI4
ADDRLP4 404
INDIRI4
CNSTI4 0
NEI4 $1496
line 3182
;3182:					{
line 3183
;3183:						if (!CheckSaberDamage(self, boltOrigin, end, qtrue, trMask))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 1
ARGI4
ADDRLP4 396
INDIRI4
ARGI4
ADDRLP4 408
ADDRGP4 CheckSaberDamage
CALLI4
ASGNI4
ADDRLP4 408
INDIRI4
CNSTI4 0
NEI4 $1498
line 3184
;3184:						{
line 3196
;3185:							vec3_t oldSaberStart;
;3186:							vec3_t oldSaberEnd;
;3187:							vec3_t saberAngleNow;
;3188:							vec3_t saberAngleBefore;
;3189:							vec3_t saberMidDir;
;3190:							vec3_t saberMidAngle;
;3191:							vec3_t saberMidPoint;
;3192:							vec3_t saberMidEnd;
;3193:							vec3_t saberSubBase;
;3194:							float deltaX, deltaY, deltaZ;
;3195:
;3196:							VectorCopy(self->client->lastSaberBase, oldSaberStart);
ADDRLP4 436
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
INDIRB
ASGNB 12
line 3197
;3197:							VectorCopy(self->client->lastSaberTip, oldSaberEnd);
ADDRLP4 448
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1736
ADDP4
INDIRB
ASGNB 12
line 3199
;3198:
;3199:							VectorSubtract(oldSaberEnd, oldSaberStart, saberAngleBefore);
ADDRLP4 412
ADDRLP4 448
INDIRF4
ADDRLP4 436
INDIRF4
SUBF4
ASGNF4
ADDRLP4 412+4
ADDRLP4 448+4
INDIRF4
ADDRLP4 436+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 412+8
ADDRLP4 448+8
INDIRF4
ADDRLP4 436+8
INDIRF4
SUBF4
ASGNF4
line 3200
;3200:							vectoangles(saberAngleBefore, saberAngleBefore);
ADDRLP4 412
ARGP4
ADDRLP4 412
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 3202
;3201:
;3202:							VectorSubtract(end, boltOrigin, saberAngleNow);
ADDRLP4 424
ADDRLP4 124
INDIRF4
ADDRLP4 0
INDIRF4
SUBF4
ASGNF4
ADDRLP4 424+4
ADDRLP4 124+4
INDIRF4
ADDRLP4 0+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 424+8
ADDRLP4 124+8
INDIRF4
ADDRLP4 0+8
INDIRF4
SUBF4
ASGNF4
line 3203
;3203:							vectoangles(saberAngleNow, saberAngleNow);
ADDRLP4 424
ARGP4
ADDRLP4 424
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 3205
;3204:
;3205:							deltaX = AngleDelta(saberAngleBefore[0], saberAngleNow[0]);
ADDRLP4 412
INDIRF4
ARGF4
ADDRLP4 424
INDIRF4
ARGF4
ADDRLP4 532
ADDRGP4 AngleDelta
CALLF4
ASGNF4
ADDRLP4 472
ADDRLP4 532
INDIRF4
ASGNF4
line 3206
;3206:							deltaY = AngleDelta(saberAngleBefore[1], saberAngleNow[1]);
ADDRLP4 412+4
INDIRF4
ARGF4
ADDRLP4 424+4
INDIRF4
ARGF4
ADDRLP4 536
ADDRGP4 AngleDelta
CALLF4
ASGNF4
ADDRLP4 476
ADDRLP4 536
INDIRF4
ASGNF4
line 3207
;3207:							deltaZ = AngleDelta(saberAngleBefore[2], saberAngleNow[2]);
ADDRLP4 412+8
INDIRF4
ARGF4
ADDRLP4 424+8
INDIRF4
ARGF4
ADDRLP4 540
ADDRGP4 AngleDelta
CALLF4
ASGNF4
ADDRLP4 480
ADDRLP4 540
INDIRF4
ASGNF4
line 3209
;3208:
;3209:							if ( (deltaX != 0 || deltaY != 0 || deltaZ != 0) && deltaX < 180 && deltaY < 180 && deltaZ < 180 && (BG_SaberInAttack(self->client->ps.saberMove) || PM_SaberInTransition(self->client->ps.saberMove)) )
ADDRLP4 544
CNSTF4 0
ASGNF4
ADDRLP4 472
INDIRF4
ADDRLP4 544
INDIRF4
NEF4 $1519
ADDRLP4 476
INDIRF4
ADDRLP4 544
INDIRF4
NEF4 $1519
ADDRLP4 480
INDIRF4
ADDRLP4 544
INDIRF4
EQF4 $1497
LABELV $1519
ADDRLP4 548
CNSTF4 1127481344
ASGNF4
ADDRLP4 472
INDIRF4
ADDRLP4 548
INDIRF4
GEF4 $1497
ADDRLP4 476
INDIRF4
ADDRLP4 548
INDIRF4
GEF4 $1497
ADDRLP4 480
INDIRF4
ADDRLP4 548
INDIRF4
GEF4 $1497
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 552
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 552
INDIRI4
CNSTI4 0
NEI4 $1520
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 556
ADDRGP4 PM_SaberInTransition
CALLI4
ASGNI4
ADDRLP4 556
INDIRI4
CNSTI4 0
EQI4 $1497
LABELV $1520
line 3210
;3210:							{ //don't go beyond here if we aren't attacking/transitioning or the angle is too large.
line 3212
;3211:							  //and don't bother if the angle is the same
;3212:								saberMidAngle[0] = saberAngleBefore[0] + (deltaX/2);
ADDRLP4 508
ADDRLP4 412
INDIRF4
ADDRLP4 472
INDIRF4
CNSTF4 1073741824
DIVF4
ADDF4
ASGNF4
line 3213
;3213:								saberMidAngle[1] = saberAngleBefore[1] + (deltaY/2);
ADDRLP4 508+4
ADDRLP4 412+4
INDIRF4
ADDRLP4 476
INDIRF4
CNSTF4 1073741824
DIVF4
ADDF4
ASGNF4
line 3214
;3214:								saberMidAngle[2] = saberAngleBefore[2] + (deltaZ/2);
ADDRLP4 508+8
ADDRLP4 412+8
INDIRF4
ADDRLP4 480
INDIRF4
CNSTF4 1073741824
DIVF4
ADDF4
ASGNF4
line 3218
;3215:
;3216:								//Now that I have the angle, I'll just say the base for it is the difference between the two start
;3217:								//points (even though that's quite possibly completely false)
;3218:								VectorSubtract(boltOrigin, oldSaberStart, saberSubBase);
ADDRLP4 484
ADDRLP4 0
INDIRF4
ADDRLP4 436
INDIRF4
SUBF4
ASGNF4
ADDRLP4 484+4
ADDRLP4 0+4
INDIRF4
ADDRLP4 436+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 484+8
ADDRLP4 0+8
INDIRF4
ADDRLP4 436+8
INDIRF4
SUBF4
ASGNF4
line 3219
;3219:								saberMidPoint[0] = boltOrigin[0] + (saberSubBase[0]*0.5);
ADDRLP4 460
ADDRLP4 0
INDIRF4
CNSTF4 1056964608
ADDRLP4 484
INDIRF4
MULF4
ADDF4
ASGNF4
line 3220
;3220:								saberMidPoint[1] = boltOrigin[1] + (saberSubBase[1]*0.5);
ADDRLP4 460+4
ADDRLP4 0+4
INDIRF4
CNSTF4 1056964608
ADDRLP4 484+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3221
;3221:								saberMidPoint[2] = boltOrigin[2] + (saberSubBase[2]*0.5);
ADDRLP4 460+8
ADDRLP4 0+8
INDIRF4
CNSTF4 1056964608
ADDRLP4 484+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3223
;3222:
;3223:								AngleVectors(saberMidAngle, saberMidDir, 0, 0);
ADDRLP4 508
ARGP4
ADDRLP4 496
ARGP4
ADDRLP4 560
CNSTP4 0
ASGNP4
ADDRLP4 560
INDIRP4
ARGP4
ADDRLP4 560
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3224
;3224:								saberMidEnd[0] = saberMidPoint[0] + saberMidDir[0]*40; //40 == saber length
ADDRLP4 520
ADDRLP4 460
INDIRF4
CNSTF4 1109393408
ADDRLP4 496
INDIRF4
MULF4
ADDF4
ASGNF4
line 3225
;3225:								saberMidEnd[1] = saberMidPoint[1] + saberMidDir[1]*40;
ADDRLP4 520+4
ADDRLP4 460+4
INDIRF4
CNSTF4 1109393408
ADDRLP4 496+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 3226
;3226:								saberMidEnd[2] = saberMidPoint[2] + saberMidDir[2]*40;
ADDRLP4 520+8
ADDRLP4 460+8
INDIRF4
CNSTF4 1109393408
ADDRLP4 496+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3251
;3227:
;3228:								//Now that we have the difference points, check from them to both the old position and the new
;3229:								/*
;3230:								if (!CheckSaberDamage(self, saberMidPoint, saberMidEnd, qtrue, trMask)) //this checks between mid and old
;3231:								{ //that didn't hit, so copy the mid over the old and check between the new and mid
;3232:									VectorCopy(saberMidPoint, self->client->lastSaberBase);
;3233:									VectorCopy(saberMidEnd, self->client->lastSaberTip);
;3234:
;3235:									if (CheckSaberDamage(self, boltOrigin, end, qtrue, trMask))
;3236:									{
;3237:										gotHit = qtrue;
;3238:									}
;3239:
;3240:									//Then copy the old oldpoints in back for good measure
;3241:									VectorCopy(oldSaberStart, self->client->lastSaberBase);
;3242:									VectorCopy(oldSaberEnd, self->client->lastSaberTip);
;3243:								}
;3244:								else
;3245:								{
;3246:									gotHit = qtrue;
;3247:								}
;3248:								*/
;3249:								//The above was more aggressive in approach, but it did add way too many traces unfortunately.
;3250:								//I'll just trace straight out and not even trace between positions instead.
;3251:								if (CheckSaberDamage(self, saberMidPoint, saberMidEnd, qfalse, trMask))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 460
ARGP4
ADDRLP4 520
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 396
INDIRI4
ARGI4
ADDRLP4 564
ADDRGP4 CheckSaberDamage
CALLI4
ASGNI4
ADDRLP4 564
INDIRI4
CNSTI4 0
EQI4 $1497
line 3252
;3252:								{
line 3253
;3253:									gotHit = qtrue;
ADDRLP4 392
CNSTI4 1
ASGNI4
line 3254
;3254:								}
line 3255
;3255:							}
line 3256
;3256:						}
ADDRGP4 $1497
JUMPV
LABELV $1498
line 3258
;3257:						else
;3258:						{
line 3259
;3259:							gotHit = qtrue;
ADDRLP4 392
CNSTI4 1
ASGNI4
line 3260
;3260:						}
line 3261
;3261:					}
ADDRGP4 $1497
JUMPV
LABELV $1496
line 3263
;3262:					else
;3263:					{
line 3264
;3264:						gotHit = qtrue;
ADDRLP4 392
CNSTI4 1
ASGNI4
line 3265
;3265:					}
LABELV $1497
line 3267
;3266:
;3267:					if (g_saberTraceSaberFirst.integer)
ADDRGP4 g_saberTraceSaberFirst+12
INDIRI4
CNSTI4 0
EQI4 $1545
line 3268
;3268:					{
line 3269
;3269:						sN = 0;
ADDRLP4 260
CNSTI4 0
ASGNI4
ADDRGP4 $1549
JUMPV
LABELV $1548
line 3271
;3270:						while (sN < MAX_CLIENTS)
;3271:						{
line 3272
;3272:							if (clientUnlinked[sN])
ADDRLP4 260
INDIRI4
CNSTI4 2
LSHI4
ADDRLP4 264
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1551
line 3273
;3273:							{ //Make clients clip properly again.
line 3274
;3274:								if (g_entities[sN].inuse && g_entities[sN].health > 0)
ADDRLP4 408
CNSTI4 828
ADDRLP4 260
INDIRI4
MULI4
ASGNI4
ADDRLP4 412
CNSTI4 0
ASGNI4
ADDRLP4 408
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 412
INDIRI4
EQI4 $1553
ADDRLP4 408
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
ADDRLP4 412
INDIRI4
LEI4 $1553
line 3275
;3275:								{
line 3276
;3276:									g_entities[sN].r.contents |= CONTENTS_BODY;
ADDRLP4 416
CNSTI4 828
ADDRLP4 260
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
ASGNP4
ADDRLP4 416
INDIRP4
ADDRLP4 416
INDIRP4
INDIRI4
CNSTI4 256
BORI4
ASGNI4
line 3277
;3277:								}
LABELV $1553
line 3278
;3278:							}
LABELV $1551
line 3279
;3279:							sN++;
ADDRLP4 260
ADDRLP4 260
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 3280
;3280:						}
LABELV $1549
line 3270
ADDRLP4 260
INDIRI4
CNSTI4 32
LTI4 $1548
line 3281
;3281:					}
LABELV $1545
line 3283
;3282:
;3283:					if (!gotHit)
ADDRLP4 392
INDIRI4
CNSTI4 0
NEI4 $1559
line 3284
;3284:					{
line 3285
;3285:						if (trMask != (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT))
ADDRLP4 396
INDIRI4
CNSTI4 262929
EQI4 $1561
line 3286
;3286:						{
line 3287
;3287:							trMask = (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT);
ADDRLP4 396
CNSTI4 262929
ASGNI4
line 3288
;3288:						}
ADDRGP4 $1562
JUMPV
LABELV $1561
line 3290
;3289:						else
;3290:						{
line 3291
;3291:							gotHit = qtrue; //break out of the loop
ADDRLP4 392
CNSTI4 1
ASGNI4
line 3292
;3292:						}
LABELV $1562
line 3293
;3293:					}
LABELV $1559
line 3294
;3294:				}
LABELV $1494
line 3179
ADDRLP4 392
INDIRI4
CNSTI4 0
EQI4 $1493
line 3295
;3295:			}
ADDRGP4 $1466
JUMPV
LABELV $1468
line 3296
;3296:			else if (g_saberInterpolate.integer) //anything but 0 or 1, use the old plain method.
ADDRGP4 g_saberInterpolate+12
INDIRI4
CNSTI4 0
EQI4 $1466
line 3297
;3297:			{
line 3298
;3298:				if (!CheckSaberDamage(self, boltOrigin, end, qfalse, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT)))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 0
ARGI4
CNSTI4 262929
ARGI4
ADDRLP4 260
ADDRGP4 CheckSaberDamage
CALLI4
ASGNI4
ADDRLP4 260
INDIRI4
CNSTI4 0
NEI4 $1466
line 3299
;3299:				{
line 3300
;3300:					CheckSaberDamage(self, boltOrigin, end, qtrue, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT));
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 1
ARGI4
CNSTI4 262929
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 3301
;3301:				}
line 3302
;3302:			}
line 3303
;3303:		}
ADDRGP4 $1466
JUMPV
LABELV $1465
line 3305
;3304:		else
;3305:		{
line 3306
;3306:			CheckSaberDamage(self, boltOrigin, end, qfalse, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT));
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 0
ARGI4
CNSTI4 262929
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 3307
;3307:		}
LABELV $1466
line 3309
;3308:
;3309:		if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1364
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1568
line 3310
;3310:		{
line 3313
;3311:			vec3_t otherOrg, otherEnd;
;3312:
;3313:			VectorMA( boltOrigin, -12, rawAngles, otherOrg );
ADDRLP4 284
CNSTF4 3242196992
ASGNF4
ADDRLP4 260
ADDRLP4 0
INDIRF4
ADDRLP4 284
INDIRF4
ADDRLP4 184
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 260+4
ADDRLP4 0+4
INDIRF4
ADDRLP4 284
INDIRF4
ADDRLP4 184+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 260+8
ADDRLP4 0+8
INDIRF4
CNSTF4 3242196992
ADDRLP4 184+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3314
;3314:			VectorMA( otherOrg, -40, rawAngles, otherEnd );
ADDRLP4 288
CNSTF4 3256877056
ASGNF4
ADDRLP4 272
ADDRLP4 260
INDIRF4
ADDRLP4 288
INDIRF4
ADDRLP4 184
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 272+4
ADDRLP4 260+4
INDIRF4
ADDRLP4 288
INDIRF4
ADDRLP4 184+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 272+8
ADDRLP4 260+8
INDIRF4
CNSTF4 3256877056
ADDRLP4 184+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3316
;3315:
;3316:			self->client->ps.saberIdleWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 748
ADDP4
CNSTI4 0
ASGNI4
line 3317
;3317:			self->client->ps.saberAttackWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 752
ADDP4
CNSTI4 0
ASGNI4
line 3319
;3318:
;3319:			CheckSaberDamage(self, otherOrg, otherEnd, qfalse, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER|MASK_SHOT));
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 260
ARGP4
ADDRLP4 272
ARGP4
CNSTI4 0
ARGI4
CNSTI4 262929
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 3320
;3320:		}
LABELV $1568
line 3322
;3321:
;3322:		VectorCopy(boltOrigin, self->client->lastSaberBase);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 3323
;3323:		VectorCopy(end, self->client->lastSaberTip);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1736
ADDP4
ADDRLP4 124
INDIRB
ASGNB 12
line 3324
;3324:		self->client->hasCurrentPosition = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1788
ADDP4
CNSTI4 1
ASGNI4
line 3326
;3325:
;3326:		self->client->ps.saberEntityState = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
CNSTI4 0
ASGNI4
line 3327
;3327:	}
LABELV $1446
LABELV $1431
LABELV $1395
line 3329
;3328:finalUpdate:
;3329:	if (self->client->ps.saberLockFrame)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1582
line 3330
;3330:	{
line 3331
;3331:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "model_root", self->client->ps.saberLockFrame, self->client->ps.saberLockFrame+1, BONE_ANIM_OVERRIDE_FREEZE|BONE_ANIM_BLEND, animSpeedScale, level.time, -1, 150);
ADDRLP4 248
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 248
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1584
ARGP4
ADDRLP4 252
ADDRLP4 248
INDIRP4
CNSTI4 532
ADDP4
INDIRI4
ASGNI4
ADDRLP4 252
INDIRI4
ARGI4
ADDRLP4 252
INDIRI4
CNSTI4 1
ADDI4
ARGI4
CNSTI4 200
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTF4 3212836864
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3332
;3332:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "lower_lumbar", self->client->ps.saberLockFrame, self->client->ps.saberLockFrame+1, BONE_ANIM_OVERRIDE_FREEZE|BONE_ANIM_BLEND, animSpeedScale, level.time, -1, 150);
ADDRLP4 256
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 256
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $228
ARGP4
ADDRLP4 260
ADDRLP4 256
INDIRP4
CNSTI4 532
ADDP4
INDIRI4
ASGNI4
ADDRLP4 260
INDIRI4
ARGI4
ADDRLP4 260
INDIRI4
CNSTI4 1
ADDI4
ARGI4
CNSTI4 200
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTF4 3212836864
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3333
;3333:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "Motion", self->client->ps.saberLockFrame, self->client->ps.saberLockFrame+1, BONE_ANIM_OVERRIDE_FREEZE|BONE_ANIM_BLEND, animSpeedScale, level.time, -1, 150);
ADDRLP4 264
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 264
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1587
ARGP4
ADDRLP4 268
ADDRLP4 264
INDIRP4
CNSTI4 532
ADDP4
INDIRI4
ASGNI4
ADDRLP4 268
INDIRI4
ARGI4
ADDRLP4 268
INDIRI4
CNSTI4 1
ADDI4
ARGI4
CNSTI4 200
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTF4 3212836864
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3334
;3334:		return;
ADDRGP4 $1349
JUMPV
LABELV $1582
line 3337
;3335:	}
;3336:
;3337:	if (self->client->ps.legsAnimExecute != legsAnim)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 728
ADDP4
INDIRI4
ADDRLP4 120
INDIRI4
EQI4 $1589
line 3338
;3338:	{
line 3339
;3339:		float animSpeed = 50.0f / bgGlobalAnimations[legsAnim].frameLerp;
ADDRLP4 248
CNSTF4 1112014848
CNSTI4 28
ADDRLP4 120
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+12
ADDP4
INDIRI4
CVIF4 4
DIVF4
ASGNF4
line 3341
;3340:		int aFlags;
;3341:		animSpeedScale = (animSpeed *= animSpeedScale);
ADDRLP4 256
ADDRLP4 248
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
ADDRLP4 248
ADDRLP4 256
INDIRF4
ASGNF4
ADDRLP4 28
ADDRLP4 256
INDIRF4
ASGNF4
line 3343
;3342:
;3343:		if (bgGlobalAnimations[legsAnim].loopFrames != -1)
CNSTI4 28
ADDRLP4 120
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1592
line 3344
;3344:		{
line 3345
;3345:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 252
CNSTI4 16
ASGNI4
line 3346
;3346:		}
ADDRGP4 $1593
JUMPV
LABELV $1592
line 3348
;3347:		else
;3348:		{
line 3349
;3349:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 252
CNSTI4 72
ASGNI4
line 3350
;3350:		}
LABELV $1593
line 3352
;3351:
;3352:		aFlags |= BONE_ANIM_BLEND; //since client defaults to blend. Not sure if this will make much difference if any on server position, but it's here just for the sake of matching them.
ADDRLP4 252
ADDRLP4 252
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 3354
;3353:
;3354:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "model_root", bgGlobalAnimations[legsAnim].firstFrame, bgGlobalAnimations[legsAnim].firstFrame+bgGlobalAnimations[legsAnim].numFrames, aFlags, animSpeedScale, level.time, -1, 150);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1584
ARGP4
ADDRLP4 260
CNSTI4 28
ADDRLP4 120
INDIRI4
MULI4
ASGNI4
ADDRLP4 264
ADDRLP4 260
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
ASGNI4
ADDRLP4 264
INDIRI4
ARGI4
ADDRLP4 264
INDIRI4
ADDRLP4 260
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
ADDI4
ARGI4
ADDRLP4 252
INDIRI4
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTF4 3212836864
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3355
;3355:		self->client->ps.legsAnimExecute = legsAnim;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 728
ADDP4
ADDRLP4 120
INDIRI4
ASGNI4
line 3356
;3356:	}
LABELV $1589
line 3357
;3357:	if (self->client->ps.torsoAnimExecute != torsoAnim)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 732
ADDP4
INDIRI4
ADDRLP4 92
INDIRI4
EQI4 $1597
line 3358
;3358:	{
line 3360
;3359:		int initialFrame;
;3360:		int aFlags = 0;
ADDRLP4 248
CNSTI4 0
ASGNI4
line 3361
;3361:		float animSpeed = 0;
ADDRLP4 252
CNSTF4 0
ASGNF4
line 3363
;3362:
;3363:		f = torsoAnim;
ADDRLP4 136
ADDRLP4 92
INDIRI4
ASGNI4
line 3365
;3364:
;3365:		initialFrame = bgGlobalAnimations[f].firstFrame;
ADDRLP4 256
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
ASGNI4
line 3367
;3366:	
;3367:		BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, f, &animSpeedScale);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1228
ADDP4
INDIRI4
ARGI4
ADDRLP4 136
INDIRI4
ARGI4
ADDRLP4 28
ARGP4
ADDRGP4 BG_SaberStartTransAnim
CALLV
pop
line 3369
;3368:
;3369:		animSpeed = 50.0f / bgGlobalAnimations[f].frameLerp;
ADDRLP4 252
CNSTF4 1112014848
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+12
ADDP4
INDIRI4
CVIF4 4
DIVF4
ASGNF4
line 3370
;3370:		animSpeedScale = (animSpeed *= animSpeedScale);
ADDRLP4 260
ADDRLP4 252
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
ADDRLP4 252
ADDRLP4 260
INDIRF4
ASGNF4
ADDRLP4 28
ADDRLP4 260
INDIRF4
ASGNF4
line 3372
;3371:
;3372:		if (bgGlobalAnimations[f].loopFrames != -1)
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1600
line 3373
;3373:		{
line 3374
;3374:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 248
CNSTI4 16
ASGNI4
line 3375
;3375:		}
ADDRGP4 $1601
JUMPV
LABELV $1600
line 3377
;3376:		else
;3377:		{
line 3378
;3378:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 248
CNSTI4 72
ASGNI4
line 3379
;3379:		}
LABELV $1601
line 3381
;3380:
;3381:		aFlags |= BONE_ANIM_BLEND; //since client defaults to blend. Not sure if this will make much difference if any on client position, but it's here just for the sake of matching them.
ADDRLP4 248
ADDRLP4 248
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 3383
;3382:
;3383:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "lower_lumbar", initialFrame, bgGlobalAnimations[f].firstFrame+bgGlobalAnimations[f].numFrames, aFlags, animSpeedScale, level.time, initialFrame, 150);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $228
ARGP4
ADDRLP4 264
ADDRLP4 256
INDIRI4
ASGNI4
ADDRLP4 264
INDIRI4
ARGI4
ADDRLP4 268
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ASGNI4
ADDRLP4 268
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
ADDRLP4 268
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
ADDI4
ARGI4
ADDRLP4 248
INDIRI4
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
ADDRLP4 264
INDIRI4
CVIF4 4
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3385
;3384:
;3385:		self->client->ps.torsoAnimExecute = torsoAnim;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 732
ADDP4
ADDRLP4 92
INDIRI4
ASGNI4
line 3387
;3386:		
;3387:		setTorso = qtrue;
ADDRLP4 144
CNSTI4 1
ASGNI4
line 3388
;3388:	}
LABELV $1597
line 3390
;3389:
;3390:	if (!BG_FlippingAnim( self->client->ps.legsAnim ) &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 248
ADDRGP4 BG_FlippingAnim
CALLI4
ASGNI4
ADDRLP4 248
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 252
ADDRGP4 BG_FlippingAnim
CALLI4
ASGNI4
ADDRLP4 252
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 256
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 256
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 260
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 260
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 264
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 264
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 268
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 268
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRLP4 272
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 272
INDIRP4
ARGP4
ADDRLP4 272
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 276
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 276
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 280
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 280
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 284
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 284
INDIRI4
CNSTI4 0
NEI4 $1605
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 288
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 292
CNSTI4 0
ASGNI4
ADDRLP4 288
INDIRI4
ADDRLP4 292
INDIRI4
NEI4 $1605
ADDRLP4 144
INDIRI4
ADDRLP4 292
INDIRI4
EQI4 $1605
line 3401
;3391:		!BG_FlippingAnim( self->client->ps.torsoAnim ) &&
;3392:		!BG_SpinningSaberAnim( self->client->ps.legsAnim ) &&
;3393:		!BG_SpinningSaberAnim( self->client->ps.torsoAnim ) &&
;3394:		!BG_InSpecialJump( self->client->ps.legsAnim ) &&
;3395:		!BG_InSpecialJump( self->client->ps.torsoAnim ) &&
;3396:		!BG_InRoll(&self->client->ps, self->client->ps.legsAnim) &&
;3397:		!BG_SaberInSpecial(self->client->ps.saberMove) &&
;3398:		!BG_SaberInSpecialAttack(self->client->ps.legsAnim) &&
;3399:		!BG_SaberInSpecialAttack(self->client->ps.torsoAnim) &&
;3400:		setTorso )
;3401:	{
line 3402
;3402:		float animSpeed = 50.0f / bgGlobalAnimations[torsoAnim].frameLerp;
ADDRLP4 296
CNSTF4 1112014848
CNSTI4 28
ADDRLP4 92
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+12
ADDP4
INDIRI4
CVIF4 4
DIVF4
ASGNF4
line 3404
;3403:		int aFlags;
;3404:		animSpeedScale = (animSpeed *= animSpeedScale);
ADDRLP4 304
ADDRLP4 296
INDIRF4
ADDRLP4 28
INDIRF4
MULF4
ASGNF4
ADDRLP4 296
ADDRLP4 304
INDIRF4
ASGNF4
ADDRLP4 28
ADDRLP4 304
INDIRF4
ASGNF4
line 3406
;3405:
;3406:		if (bgGlobalAnimations[torsoAnim].loopFrames != -1)
CNSTI4 28
ADDRLP4 92
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1608
line 3407
;3407:		{
line 3408
;3408:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 300
CNSTI4 16
ASGNI4
line 3409
;3409:		}
ADDRGP4 $1609
JUMPV
LABELV $1608
line 3411
;3410:		else
;3411:		{
line 3412
;3412:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 300
CNSTI4 72
ASGNI4
line 3413
;3413:		}
LABELV $1609
line 3415
;3414:
;3415:		aFlags |= BONE_ANIM_BLEND; //since client defaults to blend. Not sure if this will make much difference if any on client position, but it's here just for the sake of matching them.
ADDRLP4 300
ADDRLP4 300
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 3417
;3416:
;3417:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "Motion", bgGlobalAnimations[torsoAnim].firstFrame, bgGlobalAnimations[torsoAnim].firstFrame+bgGlobalAnimations[torsoAnim].numFrames, aFlags, animSpeedScale, level.time, -1, 150);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1587
ARGP4
ADDRLP4 308
CNSTI4 28
ADDRLP4 92
INDIRI4
MULI4
ASGNI4
ADDRLP4 312
ADDRLP4 308
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
ASGNI4
ADDRLP4 312
INDIRI4
ARGI4
ADDRLP4 312
INDIRI4
ADDRLP4 308
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
ADDI4
ARGI4
ADDRLP4 300
INDIRI4
ARGI4
ADDRLP4 28
INDIRF4
ARGF4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTF4 3212836864
ARGF4
CNSTI4 150
ARGI4
ADDRGP4 trap_G2API_SetBoneAnim
CALLI4
pop
line 3418
;3418:	}
LABELV $1605
line 3419
;3419:}
LABELV $1349
endproc WP_SaberPositionUpdate 568 40
export WP_MissileBlockForBlock
proc WP_MissileBlockForBlock 4 0
line 3422
;3420:
;3421:int WP_MissileBlockForBlock( int saberBlock )
;3422:{
line 3423
;3423:	switch( saberBlock )
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 4
LTI4 $1614
ADDRLP4 0
INDIRI4
CNSTI4 8
GTI4 $1614
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1621-16
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1621
address $1616
address $1617
address $1618
address $1619
address $1620
code
line 3424
;3424:	{
LABELV $1616
line 3426
;3425:	case BLOCKED_UPPER_RIGHT:
;3426:		return BLOCKED_UPPER_RIGHT_PROJ;
CNSTI4 9
RETI4
ADDRGP4 $1613
JUMPV
line 3427
;3427:		break;
LABELV $1617
line 3429
;3428:	case BLOCKED_UPPER_LEFT:
;3429:		return BLOCKED_UPPER_LEFT_PROJ;
CNSTI4 10
RETI4
ADDRGP4 $1613
JUMPV
line 3430
;3430:		break;
LABELV $1618
line 3432
;3431:	case BLOCKED_LOWER_RIGHT:
;3432:		return BLOCKED_LOWER_RIGHT_PROJ;
CNSTI4 11
RETI4
ADDRGP4 $1613
JUMPV
line 3433
;3433:		break;
LABELV $1619
line 3435
;3434:	case BLOCKED_LOWER_LEFT:
;3435:		return BLOCKED_LOWER_LEFT_PROJ;
CNSTI4 12
RETI4
ADDRGP4 $1613
JUMPV
line 3436
;3436:		break;
LABELV $1620
line 3438
;3437:	case BLOCKED_TOP:
;3438:		return BLOCKED_TOP_PROJ;
CNSTI4 13
RETI4
ADDRGP4 $1613
JUMPV
line 3439
;3439:		break;
LABELV $1614
line 3441
;3440:	}
;3441:	return saberBlock;
ADDRFP4 0
INDIRI4
RETI4
LABELV $1613
endproc WP_MissileBlockForBlock 4 0
lit
align 4
LABELV $1624
byte 4 0
byte 4 0
byte 4 0
export WP_SaberBlockNonRandom
code
proc WP_SaberBlockNonRandom 72 16
line 3445
;3442:}
;3443:
;3444:void WP_SaberBlockNonRandom( gentity_t *self, vec3_t hitloc, qboolean missileBlock )
;3445:{
line 3446
;3446:	vec3_t diff, fwdangles={0,0,0}, right;
ADDRLP4 36
ADDRGP4 $1624
INDIRB
ASGNB 12
line 3451
;3447:	vec3_t clEye;
;3448:	float rightdot;
;3449:	float zdiff;
;3450:
;3451:	VectorCopy(self->client->ps.origin, clEye);
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 3452
;3452:	clEye[2] += self->client->ps.viewheight;
ADDRLP4 12+8
ADDRLP4 12+8
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 168
ADDP4
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 3454
;3453:
;3454:	VectorSubtract( hitloc, clEye, diff );
ADDRLP4 56
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 0
ADDRLP4 56
INDIRP4
INDIRF4
ADDRLP4 12
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 56
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
ADDRLP4 12+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+8
ADDRFP4 4
INDIRP4
CNSTI4 8
ADDP4
INDIRF4
ADDRLP4 12+8
INDIRF4
SUBF4
ASGNF4
line 3455
;3455:	diff[2] = 0;
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 3456
;3456:	VectorNormalize( diff );
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 3458
;3457:
;3458:	fwdangles[1] = self->client->ps.viewangles[1];
ADDRLP4 36+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 3460
;3459:	// Ultimately we might care if the shot was ahead or behind, but for now, just quadrant is fine.
;3460:	AngleVectors( fwdangles, NULL, right, NULL );
ADDRLP4 36
ARGP4
ADDRLP4 60
CNSTP4 0
ASGNP4
ADDRLP4 60
INDIRP4
ARGP4
ADDRLP4 24
ARGP4
ADDRLP4 60
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3462
;3461:
;3462:	rightdot = DotProduct(right, diff);
ADDRLP4 52
ADDRLP4 24
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ADDRLP4 24+4
INDIRF4
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ADDRLP4 24+8
INDIRF4
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 3463
;3463:	zdiff = hitloc[2] - clEye[2];
ADDRLP4 48
ADDRFP4 4
INDIRP4
CNSTI4 8
ADDP4
INDIRF4
ADDRLP4 12+8
INDIRF4
SUBF4
ASGNF4
line 3465
;3464:	
;3465:	if ( zdiff > 0 )
ADDRLP4 48
INDIRF4
CNSTF4 0
LEF4 $1637
line 3466
;3466:	{
line 3467
;3467:		if ( rightdot > 0.3 )
ADDRLP4 52
INDIRF4
CNSTF4 1050253722
LEF4 $1639
line 3468
;3468:		{
line 3469
;3469:			self->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 3470
;3470:		}
ADDRGP4 $1638
JUMPV
LABELV $1639
line 3471
;3471:		else if ( rightdot < -0.3 )
ADDRLP4 52
INDIRF4
CNSTF4 3197737370
GEF4 $1641
line 3472
;3472:		{
line 3473
;3473:			self->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 3474
;3474:		}
ADDRGP4 $1638
JUMPV
LABELV $1641
line 3476
;3475:		else
;3476:		{
line 3477
;3477:			self->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 8
ASGNI4
line 3478
;3478:		}
line 3479
;3479:	}
ADDRGP4 $1638
JUMPV
LABELV $1637
line 3480
;3480:	else if ( zdiff > -20 )//20 )
ADDRLP4 48
INDIRF4
CNSTF4 3248488448
LEF4 $1643
line 3481
;3481:	{
line 3482
;3482:		if ( zdiff < -10 )//30 )
ADDRLP4 48
INDIRF4
CNSTF4 3240099840
GEF4 $1645
line 3483
;3483:		{//hmm, pretty low, but not low enough to use the low block, so we need to duck
line 3485
;3484:			
;3485:		}
LABELV $1645
line 3486
;3486:		if ( rightdot > 0.1 )
ADDRLP4 52
INDIRF4
CNSTF4 1036831949
LEF4 $1647
line 3487
;3487:		{
line 3488
;3488:			self->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 3489
;3489:		}
ADDRGP4 $1644
JUMPV
LABELV $1647
line 3490
;3490:		else if ( rightdot < -0.1 )
ADDRLP4 52
INDIRF4
CNSTF4 3184315597
GEF4 $1649
line 3491
;3491:		{
line 3492
;3492:			self->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 3493
;3493:		}
ADDRGP4 $1644
JUMPV
LABELV $1649
line 3495
;3494:		else
;3495:		{
line 3496
;3496:			self->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 8
ASGNI4
line 3497
;3497:		}
line 3498
;3498:	}
ADDRGP4 $1644
JUMPV
LABELV $1643
line 3500
;3499:	else
;3500:	{
line 3501
;3501:		if ( rightdot >= 0 )
ADDRLP4 52
INDIRF4
CNSTF4 0
LTF4 $1651
line 3502
;3502:		{
line 3503
;3503:			self->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 3504
;3504:		}
ADDRGP4 $1652
JUMPV
LABELV $1651
line 3506
;3505:		else
;3506:		{
line 3507
;3507:			self->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 3508
;3508:		}
LABELV $1652
line 3509
;3509:	}
LABELV $1644
LABELV $1638
line 3511
;3510:
;3511:	if ( missileBlock )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $1653
line 3512
;3512:	{
line 3513
;3513:		self->client->ps.saberBlocked = WP_MissileBlockForBlock( self->client->ps.saberBlocked );
ADDRLP4 64
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
ASGNP4
ADDRLP4 64
INDIRP4
INDIRI4
ARGI4
ADDRLP4 68
ADDRGP4 WP_MissileBlockForBlock
CALLI4
ASGNI4
ADDRLP4 64
INDIRP4
ADDRLP4 68
INDIRI4
ASGNI4
line 3514
;3514:	}
LABELV $1653
line 3515
;3515:}
LABELV $1623
endproc WP_SaberBlockNonRandom 72 16
lit
align 4
LABELV $1656
byte 4 0
byte 4 0
byte 4 0
export WP_SaberBlock
code
proc WP_SaberBlock 80 16
line 3518
;3516:
;3517:void WP_SaberBlock( gentity_t *playerent, vec3_t hitloc, qboolean missileBlock )
;3518:{
line 3519
;3519:	vec3_t diff, fwdangles={0,0,0}, right;
ADDRLP4 24
ADDRGP4 $1656
INDIRB
ASGNB 12
line 3523
;3520:	float rightdot;
;3521:	float zdiff;
;3522:
;3523:	VectorSubtract(hitloc, playerent->client->ps.origin, diff);
ADDRLP4 44
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
ASGNP4
ADDRLP4 0
ADDRLP4 44
INDIRP4
INDIRF4
ADDRLP4 48
INDIRP4
INDIRP4
CNSTI4 20
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+4
ADDRLP4 44
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
ADDRLP4 48
INDIRP4
INDIRP4
CNSTI4 24
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 0+8
ADDRFP4 4
INDIRP4
CNSTI4 8
ADDP4
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
SUBF4
ASGNF4
line 3524
;3524:	VectorNormalize(diff);
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 3526
;3525:
;3526:	fwdangles[1] = playerent->client->ps.viewangles[1];
ADDRLP4 24+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 3528
;3527:	// Ultimately we might care if the shot was ahead or behind, but for now, just quadrant is fine.
;3528:	AngleVectors( fwdangles, NULL, right, NULL );
ADDRLP4 24
ARGP4
ADDRLP4 52
CNSTP4 0
ASGNP4
ADDRLP4 52
INDIRP4
ARGP4
ADDRLP4 12
ARGP4
ADDRLP4 52
INDIRP4
ARGP4
ADDRGP4 AngleVectors
CALLV
pop
line 3530
;3529:
;3530:	rightdot = DotProduct(right, diff) + RandFloat(-0.2f,0.2f);
CNSTF4 3192704205
ARGF4
CNSTF4 1045220557
ARGF4
ADDRLP4 56
ADDRGP4 RandFloat
CALLF4
ASGNF4
ADDRLP4 40
ADDRLP4 12
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ADDRLP4 12+4
INDIRF4
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ADDRLP4 12+8
INDIRF4
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ADDRLP4 56
INDIRF4
ADDF4
ASGNF4
line 3531
;3531:	zdiff = hitloc[2] - playerent->client->ps.origin[2] + Q_irand(-8,8);
CNSTI4 -8
ARGI4
ADDRLP4 60
CNSTI4 8
ASGNI4
ADDRLP4 60
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 36
ADDRFP4 4
INDIRP4
ADDRLP4 60
INDIRI4
ADDP4
INDIRF4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 28
ADDP4
INDIRF4
SUBF4
ADDRLP4 64
INDIRI4
CVIF4 4
ADDF4
ASGNF4
line 3534
;3532:	
;3533:	// Figure out what quadrant the block was in.
;3534:	if (zdiff > 24)
ADDRLP4 36
INDIRF4
CNSTF4 1103101952
LEF4 $1664
line 3535
;3535:	{	// Attack from above
line 3536
;3536:		if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1666
line 3537
;3537:		{
line 3538
;3538:			playerent->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 8
ASGNI4
line 3539
;3539:		}
ADDRGP4 $1665
JUMPV
LABELV $1666
line 3541
;3540:		else
;3541:		{
line 3542
;3542:			playerent->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 3543
;3543:		}
line 3544
;3544:	}
ADDRGP4 $1665
JUMPV
LABELV $1664
line 3545
;3545:	else if (zdiff > 13)
ADDRLP4 36
INDIRF4
CNSTF4 1095761920
LEF4 $1668
line 3546
;3546:	{	// The upper half has three viable blocks...
line 3547
;3547:		if (rightdot > 0.25)
ADDRLP4 40
INDIRF4
CNSTF4 1048576000
LEF4 $1670
line 3548
;3548:		{	// In the right quadrant...
line 3549
;3549:			if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1672
line 3550
;3550:			{
line 3551
;3551:				playerent->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 3552
;3552:			}
ADDRGP4 $1669
JUMPV
LABELV $1672
line 3554
;3553:			else
;3554:			{
line 3555
;3555:				playerent->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 3556
;3556:			}
line 3557
;3557:		}
ADDRGP4 $1669
JUMPV
LABELV $1670
line 3559
;3558:		else
;3559:		{
line 3560
;3560:			switch(Q_irand(0,3))
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 72
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
ADDRLP4 72
INDIRI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
LTI4 $1669
ADDRLP4 68
INDIRI4
CNSTI4 3
GTI4 $1669
ADDRLP4 68
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1680
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1680
address $1677
address $1678
address $1678
address $1679
code
line 3561
;3561:			{
LABELV $1677
line 3563
;3562:			case 0:
;3563:				playerent->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 3564
;3564:				break;
ADDRGP4 $1669
JUMPV
LABELV $1678
line 3567
;3565:			case 1:
;3566:			case 2:
;3567:				playerent->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 3568
;3568:				break;
ADDRGP4 $1669
JUMPV
LABELV $1679
line 3570
;3569:			case 3:
;3570:				playerent->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 8
ASGNI4
line 3571
;3571:				break;
line 3573
;3572:			}
;3573:		}
line 3574
;3574:	}
ADDRGP4 $1669
JUMPV
LABELV $1668
line 3576
;3575:	else
;3576:	{	// The lower half is a bit iffy as far as block coverage.  Pick one of the "low" ones at random.
line 3577
;3577:		if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1681
line 3578
;3578:		{
line 3579
;3579:			playerent->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 3580
;3580:		}
ADDRGP4 $1682
JUMPV
LABELV $1681
line 3582
;3581:		else
;3582:		{
line 3583
;3583:			playerent->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 3584
;3584:		}
LABELV $1682
line 3585
;3585:	}
LABELV $1669
LABELV $1665
line 3587
;3586:
;3587:	if ( missileBlock )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $1683
line 3588
;3588:	{
line 3589
;3589:		playerent->client->ps.saberBlocked = WP_MissileBlockForBlock( playerent->client->ps.saberBlocked );
ADDRLP4 68
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
ASGNP4
ADDRLP4 68
INDIRP4
INDIRI4
ARGI4
ADDRLP4 72
ADDRGP4 WP_MissileBlockForBlock
CALLI4
ASGNI4
ADDRLP4 68
INDIRP4
ADDRLP4 72
INDIRI4
ASGNI4
line 3590
;3590:	}
LABELV $1683
line 3591
;3591:}
LABELV $1655
endproc WP_SaberBlock 80 16
export WP_SaberCanBlock
proc WP_SaberCanBlock 56 16
line 3594
;3592:
;3593:int WP_SaberCanBlock(gentity_t *self, vec3_t point, int dflags, int mod, qboolean projectile, int attackStr)
;3594:{
line 3595
;3595:	qboolean thrownSaber = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 3596
;3596:	float blockFactor = 0;
ADDRLP4 0
CNSTF4 0
ASGNF4
line 3598
;3597:
;3598:	if (!self || !self->client || !point)
ADDRLP4 8
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 12
CNSTU4 0
ASGNU4
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRLP4 12
INDIRU4
EQU4 $1689
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 12
INDIRU4
EQU4 $1689
ADDRFP4 4
INDIRP4
CVPU4 4
ADDRLP4 12
INDIRU4
NEU4 $1686
LABELV $1689
line 3599
;3599:	{
line 3600
;3600:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1686
line 3603
;3601:	}
;3602:
;3603:	if (attackStr == 8)
ADDRFP4 20
INDIRI4
CNSTI4 8
NEI4 $1690
line 3604
;3604:	{
line 3605
;3605:		attackStr = 0;
ADDRFP4 20
CNSTI4 0
ASGNI4
line 3606
;3606:		thrownSaber = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 3607
;3607:	}
LABELV $1690
line 3609
;3608:
;3609:	if (BG_SaberInAttack(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 16
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $1692
line 3610
;3610:	{
line 3611
;3611:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1692
line 3614
;3612:	}
;3613:
;3614:	if (PM_InSaberAnim(self->client->ps.torsoAnim) && !self->client->ps.saberBlocked &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 20
ADDRGP4 PM_InSaberAnim
CALLI4
ASGNI4
ADDRLP4 24
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRI4
ADDRLP4 24
INDIRI4
EQI4 $1694
ADDRLP4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ADDRLP4 24
INDIRI4
NEI4 $1694
ADDRLP4 32
ADDRLP4 28
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 1
EQI4 $1694
ADDRLP4 32
INDIRI4
ADDRLP4 24
INDIRI4
EQI4 $1694
line 3616
;3615:		self->client->ps.saberMove != LS_READY && self->client->ps.saberMove != LS_NONE)
;3616:	{
line 3617
;3617:		if ( self->client->ps.saberMove < LS_PARRY_UP || self->client->ps.saberMove > LS_REFLECT_LL )
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 108
LTI4 $1698
ADDRLP4 36
INDIRI4
CNSTI4 117
LEI4 $1696
LABELV $1698
line 3618
;3618:		{
line 3619
;3619:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1696
line 3621
;3620:		}
;3621:	}
LABELV $1694
line 3623
;3622:
;3623:	if (PM_SaberInBrokenParry(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 36
ADDRGP4 PM_SaberInBrokenParry
CALLI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 0
EQI4 $1699
line 3624
;3624:	{
line 3625
;3625:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1699
line 3628
;3626:	}
;3627:
;3628:	if (self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1312
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1701
line 3629
;3629:	{
line 3630
;3630:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1701
line 3633
;3631:	}
;3632:
;3633:	if (self->client->ps.usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1316
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1703
line 3634
;3634:	{
line 3635
;3635:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1703
line 3638
;3636:	}
;3637:
;3638:	if (self->client->ps.weapon != WP_SABER)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
EQI4 $1705
line 3639
;3639:	{
line 3640
;3640:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1705
line 3643
;3641:	}
;3642:
;3643:	if (self->client->ps.weaponstate == WEAPON_RAISING)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1707
line 3644
;3644:	{
line 3645
;3645:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1707
line 3648
;3646:	}
;3647:
;3648:	if (self->client->ps.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1709
line 3649
;3649:	{
line 3650
;3650:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1709
line 3653
;3651:	}
;3652:
;3653:	if ((self->client->pers.cmd.buttons & BUTTON_ATTACK)/* &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1400
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1711
line 3655
;3654:		(projectile || attackStr == FORCE_LEVEL_3)*/)
;3655:	{ //don't block when the player is trying to slash, if it's a projectile or he's doing a very strong attack
line 3656
;3656:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1711
line 3703
;3657:	}
;3658:
;3659:	//Removed this for now, the new broken parry stuff should handle it. This is how
;3660:	//blocks were decided before the 1.03 patch (as you can see, it was STUPID.. for the most part)
;3661:	/*
;3662:	if (attackStr == FORCE_LEVEL_3)
;3663:	{
;3664:		if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_3)
;3665:		{
;3666:			if (Q_irand(1, 10) < 3)
;3667:			{
;3668:				return 0;
;3669:			}
;3670:		}
;3671:		else
;3672:		{
;3673:			return 0;
;3674:		}
;3675:	}
;3676:
;3677:	if (attackStr == FORCE_LEVEL_2 && Q_irand(1, 10) < 3)
;3678:	{
;3679:		if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_3)
;3680:		{
;3681:			//do nothing for now
;3682:		}
;3683:		else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_2)
;3684:		{
;3685:			if (Q_irand(1, 10) < 5)
;3686:			{
;3687:				return 0;
;3688:			}
;3689:		}
;3690:		else
;3691:		{
;3692:			return 0;
;3693:		}
;3694:	}
;3695:	
;3696:	if (attackStr == FORCE_LEVEL_1 && !self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] &&
;3697:		Q_irand(1, 40) < 3)
;3698:	{ //if I have no defense level at all then I might be unable to block a level 1 attack (but very rarely)
;3699:		return 0;
;3700:	}
;3701:	*/
;3702:
;3703:	if (SaberAttacking(self))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 40
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 0
EQI4 $1713
line 3704
;3704:	{ //attacking, can't block now
line 3705
;3705:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1713
line 3708
;3706:	}
;3707:
;3708:	if (self->client->ps.saberMove != LS_READY &&
ADDRLP4 44
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 44
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 1
EQI4 $1715
ADDRLP4 44
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1715
line 3710
;3709:		!self->client->ps.saberBlocking)
;3710:	{
line 3711
;3711:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1715
line 3714
;3712:	}
;3713:
;3714:	if (self->client->ps.saberBlockTime >= level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 756
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LTI4 $1717
line 3715
;3715:	{
line 3716
;3716:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1717
line 3719
;3717:	}
;3718:
;3719:	if (self->client->ps.forceHandExtend != HANDEXTEND_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1248
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1720
line 3720
;3720:	{
line 3721
;3721:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1720
line 3724
;3722:	}
;3723:
;3724:	if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1008
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1722
line 3725
;3725:	{
line 3727
;3726:#ifdef G2_COLLISION_ENABLED
;3727:		if (g_saberGhoul2Collision.integer)
ADDRGP4 g_saberGhoul2Collision+12
INDIRI4
CNSTI4 0
EQI4 $1724
line 3728
;3728:		{
line 3729
;3729:			blockFactor = 0.3f;
ADDRLP4 0
CNSTF4 1050253722
ASGNF4
line 3730
;3730:		}
ADDRGP4 $1723
JUMPV
LABELV $1724
line 3732
;3731:		else
;3732:		{
line 3733
;3733:			blockFactor = 0.05f;
ADDRLP4 0
CNSTF4 1028443341
ASGNF4
line 3734
;3734:		}
line 3738
;3735:#else
;3736:		blockFactor = 0.05f;
;3737:#endif
;3738:	}
ADDRGP4 $1723
JUMPV
LABELV $1722
line 3739
;3739:	else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1008
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1727
line 3740
;3740:	{
line 3741
;3741:		blockFactor = 0.6f;
ADDRLP4 0
CNSTF4 1058642330
ASGNF4
line 3742
;3742:	}
ADDRGP4 $1728
JUMPV
LABELV $1727
line 3743
;3743:	else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_1)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1008
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1729
line 3744
;3744:	{
line 3745
;3745:		blockFactor = 0.9f;
ADDRLP4 0
CNSTF4 1063675494
ASGNF4
line 3746
;3746:	}
ADDRGP4 $1730
JUMPV
LABELV $1729
line 3748
;3747:	else
;3748:	{ //for now we just don't get to autoblock with no def
line 3749
;3749:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1730
LABELV $1728
LABELV $1723
line 3752
;3750:	}
;3751:
;3752:	if (thrownSaber)
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $1731
line 3753
;3753:	{
line 3754
;3754:		blockFactor -= 0.25f;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1048576000
SUBF4
ASGNF4
line 3755
;3755:	}
LABELV $1731
line 3757
;3756:
;3757:	if (attackStr)
ADDRFP4 20
INDIRI4
CNSTI4 0
EQI4 $1733
line 3758
;3758:	{ //blocking a saber, not a projectile.
line 3759
;3759:		blockFactor -= 0.25f;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1048576000
SUBF4
ASGNF4
line 3760
;3760:	}
LABELV $1733
line 3762
;3761:
;3762:	if (!InFront( point, self->client->ps.origin, self->client->ps.viewangles, blockFactor )) //orig 0.2f
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 48
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 0
INDIRF4
ARGF4
ADDRLP4 52
ADDRGP4 InFront
CALLI4
ASGNI4
ADDRLP4 52
INDIRI4
CNSTI4 0
NEI4 $1735
line 3763
;3763:	{
line 3764
;3764:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1685
JUMPV
LABELV $1735
line 3767
;3765:	}
;3766:
;3767:	if (projectile)
ADDRFP4 16
INDIRI4
CNSTI4 0
EQI4 $1737
line 3768
;3768:	{
line 3769
;3769:		WP_SaberBlockNonRandom(self, point, projectile);
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 16
INDIRI4
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 3770
;3770:	}
LABELV $1737
line 3771
;3771:	return 1;
CNSTI4 1
RETI4
LABELV $1685
endproc WP_SaberCanBlock 56 16
export HasSetSaberOnly
proc HasSetSaberOnly 16 0
line 3775
;3772:}
;3773:
;3774:qboolean HasSetSaberOnly(void)
;3775:{
line 3776
;3776:	int i = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 3777
;3777:	int wDisable = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 3779
;3778:
;3779:	if (g_gametype.integer == GT_JEDIMASTER)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 2
NEI4 $1740
line 3780
;3780:	{ //set to 0 
line 3781
;3781:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1739
JUMPV
LABELV $1740
line 3784
;3782:	}
;3783:
;3784:	if (g_gametype.integer == GT_TOURNAMENT)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $1743
line 3785
;3785:	{
line 3786
;3786:		wDisable = g_duelWeaponDisable.integer;
ADDRLP4 4
ADDRGP4 g_duelWeaponDisable+12
INDIRI4
ASGNI4
line 3787
;3787:	}
ADDRGP4 $1749
JUMPV
LABELV $1743
line 3789
;3788:	else
;3789:	{
line 3790
;3790:		wDisable = g_weaponDisable.integer;
ADDRLP4 4
ADDRGP4 g_weaponDisable+12
INDIRI4
ASGNI4
line 3791
;3791:	}
ADDRGP4 $1749
JUMPV
LABELV $1748
line 3794
;3792:
;3793:	while (i < WP_NUM_WEAPONS)
;3794:	{
line 3795
;3795:		if (!(wDisable & (1 << i)) &&
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDRLP4 0
INDIRI4
LSHI4
BANDI4
ADDRLP4 12
INDIRI4
NEI4 $1751
ADDRLP4 0
INDIRI4
CNSTI4 2
EQI4 $1751
ADDRLP4 0
INDIRI4
ADDRLP4 12
INDIRI4
EQI4 $1751
line 3797
;3796:			i != WP_SABER && i != WP_NONE)
;3797:		{
line 3798
;3798:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1739
JUMPV
LABELV $1751
line 3801
;3799:		}
;3800:
;3801:		i++;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 3802
;3802:	}
LABELV $1749
line 3793
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $1748
line 3804
;3803:
;3804:	return qtrue;
CNSTI4 1
RETI4
LABELV $1739
endproc HasSetSaberOnly 16 0
import animTable
import PM_SaberDeflectionForQuad
import PM_SaberBounceForAttack
import PM_SaberInBounce
import PM_SaberInBrokenParry
import PM_SaberInDeflect
import PM_SaberInTransition
import InFront
import botstates
import floattime
import gLevelFlags
import nodenum
import nodetable
import gLastPrintedIndex
import gWPNum
import gWPArray
import gWPRenderedFrame
import gBotEdit
import gDeactivated
import gWPRenderTime
import gBotChatBuffer
import eFlagBlue
import eFlagRed
import oFlagBlue
import flagBlue
import oFlagRed
import flagRed
import bot_wp_visconnect
import bot_wp_distconnect
import bot_wp_clearweight
import bot_wp_edit
import bot_wp_info
import bot_camp
import bot_attachments
import bot_honorableduelacceptance
import bot_forgimmick
import bot_forcepowers
import ConcatArgs
import GetBestIdleGoal
import GetNearestVisibleWP
import BotIsAChickenWuss
import OrgVisibleBox
import BotWaypointRender
import StandardBotAI
import BotDoChat
import BotUtilizePersonality
import NumBots
import BotResetState
import B_Free
import B_Alloc
import B_TempFree
import B_TempAlloc
import forceJumpStrength
import forceJumpHeight
import g_MaxHolocronCarry
import PM_SetForceJumpZStart
import PM_SetSaberMove
import PM_WeaponLightsaber
import PM_SetAnim
import PM_FinishWeaponChange
import PM_BeginWeaponChange
import PM_ForceLegsAnim
import PM_ContinueLegsAnim
import PM_StartTorsoAnim
import BG_CycleInven
import PM_StepSlideMove
import PM_SlideMove
import PM_AddEvent
import PM_AddTouchEnt
import PM_ClipVelocity
import PM_SaberJumpAttackMove
import PM_SaberFlipOverAttackMove
import PM_SomeoneInFront
import PM_GroundDistance
import PM_GetSaberStance
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 forcePowerNeeded
import c_pmove
import pm_flightfriction
import pm_waterfriction
import pm_friction
import pm_flyaccelerate
import pm_wateraccelerate
import pm_airaccelerate
import pm_accelerate
import pm_wadeScale
import pm_swimScale
import pm_duckScale
import pm_stopspeed
import pml
import trap_ROFF_Purge_Ent
import trap_ROFF_Play
import trap_ROFF_Cache
import trap_ROFF_UpdateEntities
import trap_ROFF_Clean
import trap_SP_GetStringTextString
import trap_SP_Register
import trap_SP_RegisterServer
import trap_SnapVector
import trap_GeneticParentsAndChildSelection
import trap_BotResetWeaponState
import trap_BotFreeWeaponState
import trap_BotAllocWeaponState
import trap_BotLoadWeaponWeights
import trap_BotGetWeaponInfo
import trap_BotChooseBestFightWeapon
import trap_BotAddAvoidSpot
import trap_BotInitMoveState
import trap_BotFreeMoveState
import trap_BotAllocMoveState
import trap_BotPredictVisiblePosition
import trap_BotMovementViewTarget
import trap_BotReachabilityArea
import trap_BotResetLastAvoidReach
import trap_BotResetAvoidReach
import trap_BotMoveInDirection
import trap_BotMoveToGoal
import trap_BotResetMoveState
import trap_BotFreeGoalState
import trap_BotAllocGoalState
import trap_BotMutateGoalFuzzyLogic
import trap_BotSaveGoalFuzzyLogic
import trap_BotInterbreedGoalFuzzyLogic
import trap_BotFreeItemWeights
import trap_BotLoadItemWeights
import trap_BotUpdateEntityItems
import trap_BotInitLevelItems
import trap_BotSetAvoidGoalTime
import trap_BotAvoidGoalTime
import trap_BotGetLevelItemGoal
import trap_BotGetMapLocationGoal
import trap_BotGetNextCampSpotGoal
import trap_BotItemGoalInVisButNotVisible
import trap_BotTouchingGoal
import trap_BotChooseNBGItem
import trap_BotChooseLTGItem
import trap_BotGetSecondGoal
import trap_BotGetTopGoal
import trap_BotGoalName
import trap_BotDumpGoalStack
import trap_BotDumpAvoidGoals
import trap_BotEmptyGoalStack
import trap_BotPopGoal
import trap_BotPushGoal
import trap_BotResetAvoidGoals
import trap_BotRemoveFromAvoidGoals
import trap_BotResetGoalState
import trap_BotSetChatName
import trap_BotSetChatGender
import trap_BotLoadChatFile
import trap_BotReplaceSynonyms
import trap_UnifyWhiteSpaces
import trap_BotMatchVariable
import trap_BotFindMatch
import trap_StringContains
import trap_BotGetChatMessage
import trap_BotEnterChat
import trap_BotChatLength
import trap_BotReplyChat
import trap_BotNumInitialChats
import trap_BotInitialChat
import trap_BotNumConsoleMessages
import trap_BotNextConsoleMessage
import trap_BotRemoveConsoleMessage
import trap_BotQueueConsoleMessage
import trap_BotFreeChatState
import trap_BotAllocChatState
import trap_Characteristic_String
import trap_Characteristic_BInteger
import trap_Characteristic_Integer
import trap_Characteristic_BFloat
import trap_Characteristic_Float
import trap_BotFreeCharacter
import trap_BotLoadCharacter
import trap_EA_ResetInput
import trap_EA_GetInput
import trap_EA_EndRegular
import trap_EA_ForcePower
import trap_EA_Alt_Attack
import trap_EA_View
import trap_EA_Move
import trap_EA_DelayedJump
import trap_EA_Jump
import trap_EA_SelectWeapon
import trap_EA_MoveRight
import trap_EA_MoveLeft
import trap_EA_MoveBack
import trap_EA_MoveForward
import trap_EA_MoveDown
import trap_EA_MoveUp
import trap_EA_Crouch
import trap_EA_Respawn
import trap_EA_Use
import trap_EA_Attack
import trap_EA_Talk
import trap_EA_Gesture
import trap_EA_Action
import trap_EA_Command
import trap_EA_SayTeam
import trap_EA_Say
import trap_AAS_PredictClientMovement
import trap_AAS_Swimming
import trap_AAS_AlternativeRouteGoals
import trap_AAS_PredictRoute
import trap_AAS_EnableRoutingArea
import trap_AAS_AreaTravelTimeToGoalArea
import trap_AAS_AreaReachability
import trap_AAS_IntForBSPEpairKey
import trap_AAS_FloatForBSPEpairKey
import trap_AAS_VectorForBSPEpairKey
import trap_AAS_ValueForBSPEpairKey
import trap_AAS_NextBSPEntity
import trap_AAS_PointContents
import trap_AAS_TraceAreas
import trap_AAS_PointReachabilityAreaIndex
import trap_AAS_PointAreaNum
import trap_AAS_Time
import trap_AAS_PresenceTypeBoundingBox
import trap_AAS_Initialized
import trap_AAS_EntityInfo
import trap_AAS_AreaInfo
import trap_AAS_BBoxAreas
import trap_BotUserCommand
import trap_BotGetServerCommand
import trap_BotGetSnapshotEntity
import trap_BotLibTest
import trap_BotLibUpdateEntity
import trap_BotLibLoadMap
import trap_BotLibStartFrame
import trap_BotLibDefine
import trap_BotLibVarGet
import trap_BotLibVarSet
import trap_BotLibShutdown
import trap_BotLibSetup
import trap_DebugPolygonDelete
import trap_DebugPolygonCreate
import trap_GetEntityToken
import trap_GetUsercmd
import trap_BotFreeClient
import trap_BotAllocateClient
import trap_EntityContact
import trap_EntitiesInBox
import trap_UnlinkEntity
import trap_LinkEntity
import trap_AreasConnected
import trap_AdjustAreaPortalState
import trap_InPVSIgnorePortals
import trap_InPVS
import trap_PointContents
import trap_Trace
import trap_SetBrushModel
import trap_GetServerinfo
import trap_SetUserinfo
import trap_GetUserinfo
import trap_GetConfigstring
import trap_SetConfigstring
import trap_SendServerCommand
import trap_DropClient
import trap_LocateGameData
import trap_Cvar_VariableStringBuffer
import trap_Cvar_VariableValue
import trap_Cvar_VariableIntegerValue
import trap_Cvar_Set
import trap_Cvar_Update
import trap_Cvar_Register
import trap_SendConsoleCommand
import trap_FS_GetFileList
import trap_FS_FCloseFile
import trap_FS_Write
import trap_FS_Read
import trap_FS_FOpenFile
import trap_Args
import trap_Argv
import trap_Argc
import trap_Milliseconds
import trap_Error
import trap_Printf
import g_austrian
import g_saberDebugPrint
import g_saberDmgDelay_Wound
import g_saberDmgDelay_Idle
import g_saberDmgVelocityScale
import g_timeouttospec
import g_forceDodge
import g_dismember
import g_singlePlayer
import g_enableBreath
import g_enableDust
import g_rankings
import pmove_msec
import pmove_fixed
import g_smoothClients
import g_blueteam
import g_redteam
import g_debugUp
import g_debugRight
import g_debugForward
import g_filterBan
import g_banIPs
import g_teamForceBalance
import g_teamAutoJoin
import g_allowVote
import g_blood
import g_doWarmup
import g_warmup
import g_motd
import g_synchronousClients
import g_adaptRespawn
import g_weaponTeamRespawn
import g_weaponRespawn
import g_debugDamage
import g_debugAlloc
import g_debugMove
import g_inactivity
import g_forcerespawn
import g_quadfactor
import g_knockback
import g_speed
import g_gravity
import g_needpass
import g_password
import g_friendlySaber
import g_friendlyFire
import g_saberInterpolate
import g_capturelimit
import g_timelimit
import g_duel_fraglimit
import g_fraglimit
import g_duelWeaponDisable
import g_fraglimitVoteCorrection
import g_allowDuelSuicide
import g_weaponDisable
import g_forcePowerDisable
import g_spawnInvulnerability
import g_forceRegenTime
import g_saberDamageScale
import g_slowmoDuelEnd
import g_logClientInfo
import g_saberBoxTraceSize
import g_saberAlwaysBoxTrace
import g_saberGhoul2Collision
import g_saberTraceSaberFirst
import g_saberLockFactor
import g_saberLocking
import g_privateDuel
import g_forceBasedTeams
import g_maxForceRank
import g_dmflags
import g_autoMapCycle
import g_trueJedi
import g_restarted
import g_maxGameClients
import g_maxclients
import g_cheats
import g_dedicated
import g_gametype
import g_vehicles
import g_vehicleTemplates
import vehicleId
import VehicleTemplateArray_GetTemplateIndexForName
import VehicleTemplateArray_OutputTemplates
import VehicleTemplateArray_InitVehicleTemplateArray
import VehicleArray_OutputVehicles
import VehicleArray_RemoveVehicleForId
import VehicleArray_AddVehicle
import VehicleArray_SetVehicleForId
import VehicleArray_GetVehicleForId
import VehicleArray_InitVehicleArray
import G_SpawnVehicle
import Touch_Vehicle
import VehicleInfo_GetNameForMovementType
import VehicleInfo_GetBitForMovementType
import VehicleInfo_GetNameForWeapon
import VehicleInfo_GetIndexForWeapon
import VehicleInfo_GetBitForWeapon
import VehicleInfo_GetBitForVehicleType
import Vehicle_CopyVehicle
import Vehicle_InitVehicle
import g_entities
import level
import Pickup_Team
import CheckTeamStatus
import TeamplayInfoMessage
import Team_GetLocationMsg
import Team_GetLocation
import SelectSagaSpawnPoint
import SelectCTFSpawnPoint
import Team_FreeEntity
import Team_ReturnFlag
import Team_InitGame
import Team_CheckHurtCarrier
import Team_FragBonuses
import Team_DroppedFlagThink
import AddTeamScore
import TeamColorString
import OtherTeamName
import TeamName
import OtherTeam
import BotAIStartFrame
import BotAIShutdownClient
import BotAISetupClient
import BotAILoadMap
import BotAIShutdown
import BotAISetup
import B_CleanupAlloc
import B_InitAlloc
import InFieldOfVision
import BotOrder
import OrgVisible
import InitSagaMode
import G_ClearClientLog
import G_LogExit
import G_LogWeaponOutput
import G_LogWeaponInit
import G_LogWeaponItem
import G_LogWeaponPowerup
import G_LogWeaponFrag
import G_LogWeaponDeath
import G_LogWeaponKill
import G_LogWeaponDamage
import G_LogWeaponFire
import G_LogWeaponPickup
import Jedi_DodgeEvasion
import ForceTelepathy
import ForceThrow
import ForceSeeing
import ForceTeamForceReplenish
import ForceTeamHeal
import ForceAbsorb
import ForceProtect
import ForceGrip
import ForceRage
import ForceSpeed
import ForceHeal
import ForcePowerUsableOn
import WP_ForcePowersUpdate
import WP_SpawnInitForcePowers
import WP_InitForcePowers
import WP_ForcePowerStop
import G_PreDefSound
import G_RefreshNextMap
import G_DoesMapSupportGametype
import BotInterbreedEndMatch
import Svcmd_BotList_f
import Svcmd_AddBot_f
import G_BotConnect
import G_RemoveQueuedBotBegin
import G_CheckBotSpawn
import G_GetBotInfoByName
import G_GetBotInfoByNumber
import G_InitBots
import UpdateTournamentInfo
import G_WriteSessionData
import G_InitWorldSession
import G_InitSessionData
import G_ReadSessionData
import Svcmd_GameMem_f
import G_InitMemory
import G_Alloc
import Team_CheckDroppedItem
import OnSameTeam
import G_RunClient
import ClientEndFrame
import ClientThink
import G_CheckClientTimeouts
import ClientCommand
import ClientBegin
import ClientDisconnect
import ClientUserinfoChanged
import ClientConnect
import G_GetStripEdString
import G_Error
import G_Printf
import SendScoreboardMessageToAllClients
import G_LogPrintf
import G_RunThink
import CheckTeamLeader
import SetLeader
import FindIntermissionPoint
import gSlowMoDuelTime
import gDoSlowMoDuel
import g_ff_objectives
import DeathmatchScoreboardMessage
import G_SetStats
import MoveClientToIntermission
import BlowDetpacks
import FireWeapon
import G_FilterPacket
import G_ProcessIPBans
import ConsoleCommand
import gJMSaberEnt
import SpotWouldTelefrag
import CalculateRanks
import AddScore
import player_die
import ClientSpawn
import InitBodyQue
import BeginIntermission
import respawn
import CopyToBodyQue
import SelectSpawnPoint
import SetClientViewAngle
import PickTeam
import TeamLeader
import TeamCount
import CheckGauntletAttack
import SnapVectorTowards
import CalcMuzzlePoint
import LogAccuracyHit
import WP_FireGenericBlasterMissile
import WP_FireTurretMissile
import G_CreateExampleAnimEnt
import G_PlayerBecomeATST
import ATST_ManageDamageBoxes
import TeleportPlayer
import trigger_teleporter_touch
import Touch_DoorTrigger
import G_RunMover
import WP_FireBlasterMissile
import G_ExplodeMissile
import G_BounceProjectile
import CreateMissile
import G_RunMissile
import G_ReflectMissile
import gGAvoidDismember
import G_CheckForDismemberment
import ExplodeDeath
import TossClientCubes
import TossClientItems
import TossClientWeapon
import body_die
import G_RadiusDamage
import G_Damage
import CanDamage
import trap_G2API_SetBoneAnim
import trap_G2API_GetGLAName
import trap_G2API_SetBoneAngles
import trap_G2API_CollisionDetect
import trap_G2API_CleanGhoul2Models
import trap_G2API_RemoveGhoul2Model
import trap_G2API_HasGhoul2ModelOnIndex
import trap_G2API_DuplicateGhoul2Instance
import trap_G2API_CopySpecificGhoul2Model
import trap_G2API_CopyGhoul2Instance
import trap_G2API_SetBoltInfo
import trap_G2API_AddBolt
import trap_G2API_InitGhoul2Model
import trap_G2API_GetBoltMatrix_NoRecNoRot
import trap_G2API_GetBoltMatrix_NoReconstruct
import trap_G2API_GetBoltMatrix
import trap_G2_HaveWeGhoul2Models
import trap_G2_SetGhoul2ModelIndexes
import trap_G2_ListModelBones
import trap_G2_ListModelSurfaces
import G_SkinIndex
import BuildShaderStateConfig
import AddRemap
import G_SetOrigin
import G_AddEvent
import G_AddPredictableEvent
import vtos
import tv
import G_RunObject
import G_TouchSolids
import G_TouchTriggers
import G_EntitiesFree
import G_FreeEntity
import G_KillG2Queue
import G_SendG2KillQueue
import TryUse
import G_EntitySound
import G_SoundAtLoc
import G_Sound
import G_MuteSound
import G_ScreenShake
import G_PlayEffect
import G_TempEntity
import G_Spawn
import G_InitGentity
import G_SetAngles
import G_SetMovedir
import G_UseTargets
import G_PickTarget
import G_RadiusList
import G_Find
import G_KillBox
import G_TeamCommand
import G_EffectIndex
import G_SoundIndex
import G_ModelIndex
import SaveRegisteredItems
import RegisterItem
import ClearRegisteredItems
import Touch_Item
import Add_Ammo
import ArmorIndex
import Think_Weapon
import FinishSpawningItem
import G_SpawnItem
import SetRespawn
import LaunchItem
import Drop_Item
import PrecacheItem
import UseHoldableItem
import RespawnItem
import G_RunItem
import G_CheckTeamItems
import ItemUse_MedPack
import ItemUse_Seeker
import ItemUse_Sentry
import ItemUse_Shield
import ItemUse_Binoculars
import G_GetDuelWinner
import Cmd_EngageDuel_f
import Cmd_ToggleSaber_f
import G_ItemUsable
import Cmd_SaberAttackCycle_f
import Cmd_FollowCycle_f
import SetTeam
import BroadcastTeamChange
import StopFollowing
import Cmd_Score_f
import G_NewString
import G_SpawnEntitiesFromString
import G_SpawnVector
import G_SpawnInt
import G_SpawnFloat
import G_SpawnString
import gEscapeTime
import gEscaping
import g2SaberInstance
import precachedKyle
import forcePowerDarkLight
import WeaponAttackAnim
import WeaponReadyAnim
import BG_OutOfMemory
import BG_StringAlloc
import BG_TempFree
import BG_TempAlloc
import BG_AllocUnaligned
import BG_Alloc
import BG_CanUseFPNow
import BG_HasYsalamiri
import BG_GetItemIndexByTag
import BG_ParseAnimationFile
import BG_PlayerTouchesItem
import BG_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
import Pmove
import PM_QuaternionViewAngles
import PM_UpdateViewAngles
import pm
import bgForcePowerCost
import forceMasteryPoints
import forceMasteryLevels
import bgGlobalAnimations
import BGPAFtextLoaded
import forcePowerSorted
import WP_MuzzlePoint
import ammoData
import weaponData
import GetStringForID
import GetIDForString
import Q_irand
import irand
import flrand
import Rand_Init
import Com_Printf
import Com_Error
import Info_NextPair
import Info_Validate
import Info_SetValueForKey_Big
import Info_SetValueForKey
import Info_RemoveKey_big
import Info_RemoveKey
import Info_ValueForKey
import va
import Q_CleanStr
import Q_PrintStrlen
import Q_strcat
import Q_strncpyz
import Q_strrchr
import Q_strupr
import Q_strlwr
import Q_stricmpn
import Q_strncmp
import Q_stricmp
import Q_isalpha
import Q_isupper
import Q_islower
import Q_isprint
import Com_sprintf
import Parse3DMatrix
import Parse2DMatrix
import Parse1DMatrix
import SkipRestOfLine
import SkipBracedSection
import COM_MatchToken
import COM_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 forceSpeedLevels
import FloatSwap
import LongSwap
import ShortSwap
import acos
import fabs
import abs
import tan
import atan2
import cos
import sin
import sqrt
import floor
import ceil
import memcpy
import memset
import memmove
import sscanf
import vsprintf
import _atoi
import atoi
import _atof
import atof
import toupper
import tolower
import strncpy
import strstr
import strchr
import strcmp
import strcpy
import strcat
import strlen
import rand
import srand
import qsort
lit
align 1
LABELV $1587
byte 1 77
byte 1 111
byte 1 116
byte 1 105
byte 1 111
byte 1 110
byte 1 0
align 1
LABELV $1584
byte 1 109
byte 1 111
byte 1 100
byte 1 101
byte 1 108
byte 1 95
byte 1 114
byte 1 111
byte 1 111
byte 1 116
byte 1 0
align 1
LABELV $1224
byte 1 109
byte 1 111
byte 1 100
byte 1 101
byte 1 108
byte 1 115
byte 1 47
byte 1 119
byte 1 101
byte 1 97
byte 1 112
byte 1 111
byte 1 110
byte 1 115
byte 1 50
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 95
byte 1 119
byte 1 46
byte 1 103
byte 1 108
byte 1 109
byte 1 0
align 1
LABELV $1220
byte 1 100
byte 1 101
byte 1 97
byte 1 100
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 0
align 1
LABELV $1104
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 98
byte 1 114
byte 1 111
byte 1 107
byte 1 101
byte 1 32
byte 1 116
byte 1 104
byte 1 114
byte 1 111
byte 1 117
byte 1 103
byte 1 104
byte 1 32
byte 1 37
byte 1 105
byte 1 39
byte 1 115
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 32
byte 1 119
byte 1 105
byte 1 116
byte 1 104
byte 1 32
byte 1 97
byte 1 32
byte 1 115
byte 1 112
byte 1 101
byte 1 99
byte 1 105
byte 1 97
byte 1 108
byte 1 32
byte 1 111
byte 1 114
byte 1 32
byte 1 115
byte 1 116
byte 1 114
byte 1 111
byte 1 110
byte 1 103
byte 1 101
byte 1 114
byte 1 32
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 10
byte 1 0
align 1
LABELV $1098
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 104
byte 1 105
byte 1 116
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 39
byte 1 115
byte 1 32
byte 1 115
byte 1 116
byte 1 114
byte 1 111
byte 1 110
byte 1 103
byte 1 101
byte 1 114
byte 1 32
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 44
byte 1 32
byte 1 119
byte 1 97
byte 1 115
byte 1 32
byte 1 102
byte 1 111
byte 1 114
byte 1 99
byte 1 101
byte 1 100
byte 1 32
byte 1 105
byte 1 110
byte 1 116
byte 1 111
byte 1 32
byte 1 97
byte 1 32
byte 1 98
byte 1 114
byte 1 111
byte 1 107
byte 1 101
byte 1 110
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 10
byte 1 0
align 1
LABELV $1091
byte 1 69
byte 1 113
byte 1 117
byte 1 97
byte 1 108
byte 1 32
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 32
byte 1 108
byte 1 101
byte 1 118
byte 1 101
byte 1 108
byte 1 32
byte 1 98
byte 1 111
byte 1 117
byte 1 110
byte 1 99
byte 1 101
byte 1 47
byte 1 100
byte 1 101
byte 1 102
byte 1 108
byte 1 101
byte 1 99
byte 1 116
byte 1 105
byte 1 111
byte 1 110
byte 1 32
byte 1 102
byte 1 111
byte 1 114
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 115
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 97
byte 1 110
byte 1 100
byte 1 32
byte 1 37
byte 1 105
byte 1 10
byte 1 0
align 1
LABELV $1081
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 102
byte 1 111
byte 1 114
byte 1 99
byte 1 101
byte 1 100
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 105
byte 1 110
byte 1 116
byte 1 111
byte 1 32
byte 1 97
byte 1 32
byte 1 98
byte 1 114
byte 1 111
byte 1 107
byte 1 101
byte 1 110
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 32
byte 1 119
byte 1 105
byte 1 116
byte 1 104
byte 1 32
byte 1 97
byte 1 32
byte 1 115
byte 1 116
byte 1 114
byte 1 111
byte 1 110
byte 1 103
byte 1 101
byte 1 114
byte 1 32
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 10
byte 1 0
align 1
LABELV $1058
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 97
byte 1 110
byte 1 100
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 98
byte 1 111
byte 1 117
byte 1 110
byte 1 99
byte 1 101
byte 1 100
byte 1 32
byte 1 111
byte 1 102
byte 1 102
byte 1 32
byte 1 111
byte 1 102
byte 1 32
byte 1 101
byte 1 97
byte 1 99
byte 1 104
byte 1 32
byte 1 111
byte 1 116
byte 1 104
byte 1 101
byte 1 114
byte 1 39
byte 1 115
byte 1 32
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $1045
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 98
byte 1 111
byte 1 117
byte 1 110
byte 1 99
byte 1 101
byte 1 100
byte 1 32
byte 1 111
byte 1 102
byte 1 102
byte 1 32
byte 1 111
byte 1 102
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 39
byte 1 115
byte 1 32
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 10
byte 1 0
align 1
LABELV $1039
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 115
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 105
byte 1 110
byte 1 116
byte 1 111
byte 1 32
byte 1 97
byte 1 32
byte 1 98
byte 1 114
byte 1 111
byte 1 107
byte 1 101
byte 1 110
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 10
byte 1 0
align 1
LABELV $1030
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 115
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 105
byte 1 110
byte 1 116
byte 1 111
byte 1 32
byte 1 97
byte 1 32
byte 1 114
byte 1 101
byte 1 102
byte 1 108
byte 1 101
byte 1 99
byte 1 116
byte 1 101
byte 1 100
byte 1 32
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 32
byte 1 119
byte 1 105
byte 1 116
byte 1 104
byte 1 32
byte 1 97
byte 1 32
byte 1 107
byte 1 110
byte 1 111
byte 1 99
byte 1 107
byte 1 97
byte 1 119
byte 1 97
byte 1 121
byte 1 10
byte 1 0
align 1
LABELV $1016
byte 1 67
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 32
byte 1 99
byte 1 108
byte 1 97
byte 1 115
byte 1 104
byte 1 101
byte 1 100
byte 1 32
byte 1 105
byte 1 110
byte 1 116
byte 1 111
byte 1 32
byte 1 99
byte 1 108
byte 1 105
byte 1 101
byte 1 110
byte 1 116
byte 1 32
byte 1 37
byte 1 105
byte 1 39
byte 1 115
byte 1 32
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 44
byte 1 32
byte 1 100
byte 1 105
byte 1 100
byte 1 32
byte 1 66
byte 1 76
byte 1 79
byte 1 67
byte 1 75
byte 1 69
byte 1 68
byte 1 95
byte 1 65
byte 1 84
byte 1 75
byte 1 95
byte 1 66
byte 1 79
byte 1 85
byte 1 78
byte 1 67
byte 1 69
byte 1 10
byte 1 0
align 1
LABELV $592
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 118
byte 1 115
byte 1 46
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 100
byte 1 101
byte 1 102
byte 1 108
byte 1 101
byte 1 99
byte 1 116
byte 1 101
byte 1 100
byte 1 32
byte 1 116
byte 1 111
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $563
byte 1 97
byte 1 116
byte 1 116
byte 1 97
byte 1 99
byte 1 107
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 118
byte 1 115
byte 1 46
byte 1 32
byte 1 112
byte 1 97
byte 1 114
byte 1 114
byte 1 121
byte 1 32
byte 1 37
byte 1 115
byte 1 32
byte 1 98
byte 1 111
byte 1 117
byte 1 110
byte 1 99
byte 1 101
byte 1 100
byte 1 32
byte 1 116
byte 1 111
byte 1 32
byte 1 37
byte 1 115
byte 1 10
byte 1 0
align 1
LABELV $230
byte 1 116
byte 1 104
byte 1 111
byte 1 114
byte 1 97
byte 1 99
byte 1 105
byte 1 99
byte 1 0
align 1
LABELV $228
byte 1 108
byte 1 111
byte 1 119
byte 1 101
byte 1 114
byte 1 95
byte 1 108
byte 1 117
byte 1 109
byte 1 98
byte 1 97
byte 1 114
byte 1 0
align 1
LABELV $226
byte 1 117
byte 1 112
byte 1 112
byte 1 101
byte 1 114
byte 1 95
byte 1 108
byte 1 117
byte 1 109
byte 1 98
byte 1 97
byte 1 114
byte 1 0
align 1
LABELV $137
byte 1 115
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 47
byte 1 119
byte 1 101
byte 1 97
byte 1 112
byte 1 111
byte 1 110
byte 1 115
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 104
byte 1 117
byte 1 109
byte 1 49
byte 1 46
byte 1 119
byte 1 97
byte 1 118
byte 1 0
align 1
LABELV $136
byte 1 115
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 47
byte 1 119
byte 1 101
byte 1 97
byte 1 112
byte 1 111
byte 1 110
byte 1 115
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 111
byte 1 110
byte 1 46
byte 1 119
byte 1 97
byte 1 118
byte 1 0
align 1
LABELV $135
byte 1 115
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 47
byte 1 119
byte 1 101
byte 1 97
byte 1 112
byte 1 111
byte 1 110
byte 1 115
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 111
byte 1 102
byte 1 102
byte 1 113
byte 1 117
byte 1 105
byte 1 99
byte 1 107
byte 1 46
byte 1 119
byte 1 97
byte 1 118
byte 1 0
align 1
LABELV $134
byte 1 115
byte 1 111
byte 1 117
byte 1 110
byte 1 100
byte 1 47
byte 1 119
byte 1 101
byte 1 97
byte 1 112
byte 1 111
byte 1 110
byte 1 115
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 47
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 115
byte 1 112
byte 1 105
byte 1 110
byte 1 46
byte 1 119
byte 1 97
byte 1 118
byte 1 0
align 1
LABELV $132
byte 1 108
byte 1 105
byte 1 103
byte 1 104
byte 1 116
byte 1 115
byte 1 97
byte 1 98
byte 1 101
byte 1 114
byte 1 0
