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 15
;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:extern bot_state_t *botstates[MAX_CLIENTS];
;8:extern qboolean InFront( vec3_t spot, vec3_t from, vec3_t fromAngles, float threshHold );
;9:
;10:int saberSpinSound = 0;
;11:int saberOffSound = 0;
;12:int saberOnSound = 0;
;13:int saberHumSound = 0;
;14:
;15:float RandFloat(float min, float max) {
line 16
;16:	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 $83
endproc RandFloat 8 0
export SaberUpdateSelf
proc SaberUpdateSelf 20 4
line 20
;17:}
;18:
;19:void SaberUpdateSelf(gentity_t *ent)
;20:{
line 21
;21:	if (ent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $85
line 22
;22:	{
line 23
;23:		ent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 24
;24:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 25
;25:		return;
ADDRGP4 $84
JUMPV
LABELV $85
line 28
;26:	}
;27:
;28:	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 $94
ADDRLP4 0
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $94
ADDRLP4 0
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $88
LABELV $94
line 31
;29:		!g_entities[ent->r.ownerNum].client ||
;30:		g_entities[ent->r.ownerNum].client->sess.sessionTeam == TEAM_SPECTATOR)
;31:	{
line 32
;32:		ent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 33
;33:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 34
;34:		return;
ADDRGP4 $84
JUMPV
LABELV $88
line 37
;35:	}
;36:
;37:	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 $96
ADDRLP4 4
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
ADDRLP4 8
INDIRI4
LEI4 $96
line 38
;38:	{ //let The Master take care of us now (we'll get treated like a missile until we return)
line 39
;39:		ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 40
;40:		return;
ADDRGP4 $84
JUMPV
LABELV $96
line 43
;41:	}
;42:
;43:	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 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $101
line 44
;44:	{
line 45
;45:		ent->r.contents = 0;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 0
ASGNI4
line 46
;46:		ent->clipmask = 0;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 0
ASGNI4
line 47
;47:	}
ADDRGP4 $102
JUMPV
LABELV $101
line 48
;48:	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 $114
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 $114
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+676
ADDP4
INDIRI4
CNSTI4 1
LTI4 $114
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1300
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $114
ADDRLP4 12
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 992
ADDP4
INDIRI4
ADDRLP4 16
INDIRI4
NEI4 $104
LABELV $114
line 54
;49:		(g_entities[ent->r.ownerNum].client->ps.pm_flags & PMF_FOLLOW) ||
;50:		g_entities[ent->r.ownerNum].health < 1 ||
;51:		g_entities[ent->r.ownerNum].client->ps.saberHolstered ||
;52:		!g_entities[ent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK]/* ||
;53:		!g_entities[ent->r.ownerNum].client->ps.fd.forcePowerLevel[FP_SABERTHROW]*/)
;54:	{
line 55
;55:		ent->r.contents = 0;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 0
ASGNI4
line 56
;56:		ent->clipmask = 0;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 0
ASGNI4
line 57
;57:	}
ADDRGP4 $105
JUMPV
LABELV $104
line 59
;58:	else
;59:	{
line 60
;60:		ent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 61
;61:		ent->clipmask = MASK_PLAYERSOLID | CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 262417
ASGNI4
line 62
;62:	}
LABELV $105
LABELV $102
line 64
;63:
;64:	trap_LinkEntity(ent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 66
;65:
;66:	ent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 67
;67:}
LABELV $84
endproc SaberUpdateSelf 20 4
export SaberGotHit
proc SaberGotHit 12 0
line 70
;68:
;69:void SaberGotHit( gentity_t *self, gentity_t *other, trace_t *trace )
;70:{
line 71
;71:	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 73
;72:
;73:	if (!own || !own->client)
ADDRLP4 8
CNSTU4 0
ASGNU4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
EQU4 $119
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 8
INDIRU4
NEU4 $117
LABELV $119
line 74
;74:	{
line 75
;75:		return;
LABELV $117
line 79
;76:	}
;77:
;78:	//Do something here..? Was handling projectiles here, but instead they're now handled in their own functions.
;79:}
LABELV $116
endproc SaberGotHit 12 0
export WP_SaberInitBladeData
proc WP_SaberInitBladeData 32 4
line 82
;80:
;81:void WP_SaberInitBladeData( gentity_t *ent )
;82:{
line 87
;83:	gentity_t *saberent;
;84:
;85:	//We do not want the client to have any real knowledge of the entity whatsoever. It will only
;86:	//ever be used on the server.
;87:	saberent = G_Spawn();
ADDRLP4 4
ADDRGP4 G_Spawn
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 4
INDIRP4
ASGNP4
line 88
;88:	ent->client->ps.saberEntityNum = saberent->s.number;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
ADDRLP4 0
INDIRP4
INDIRI4
ASGNI4
line 89
;89:	saberent->classname = "lightsaber";
ADDRLP4 0
INDIRP4
CNSTI4 416
ADDP4
ADDRGP4 $121
ASGNP4
line 91
;90:			
;91:	saberent->r.svFlags = SVF_USE_CURRENT_ORIGIN;
ADDRLP4 0
INDIRP4
CNSTI4 304
ADDP4
CNSTI4 128
ASGNI4
line 92
;92:	saberent->r.ownerNum = ent->s.number;
ADDRLP4 0
INDIRP4
CNSTI4 396
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 94
;93:
;94:	saberent->clipmask = MASK_PLAYERSOLID | CONTENTS_LIGHTSABER;
ADDRLP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 262417
ASGNI4
line 95
;95:	saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 97
;96:
;97:	VectorSet( saberent->r.mins, -8.0f, -8.0f, -8.0f );
ADDRLP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3238002688
ASGNF4
line 98
;98:	VectorSet( saberent->r.maxs, 8.0f, 8.0f, 8.0f );
ADDRLP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRLP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1090519040
ASGNF4
line 100
;99:
;100:	saberent->mass = 10;
ADDRLP4 0
INDIRP4
CNSTI4 624
ADDP4
CNSTF4 1092616192
ASGNF4
line 102
;101:
;102:	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 103
;103:	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 105
;104:
;105:	saberent->touch = SaberGotHit;
ADDRLP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 107
;106:
;107:	saberent->think = SaberUpdateSelf;
ADDRLP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 108
;108:	saberent->nextthink = level.time + 50;
ADDRLP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
ASGNI4
line 110
;109:
;110:	saberSpinSound = G_SoundIndex("sound/weapons/saber/saberspin.wav");
ADDRGP4 $123
ARGP4
ADDRLP4 16
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberSpinSound
ADDRLP4 16
INDIRI4
ASGNI4
line 111
;111:	saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav");
ADDRGP4 $124
ARGP4
ADDRLP4 20
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberOffSound
ADDRLP4 20
INDIRI4
ASGNI4
line 112
;112:	saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav");
ADDRGP4 $125
ARGP4
ADDRLP4 24
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberOnSound
ADDRLP4 24
INDIRI4
ASGNI4
line 113
;113:	saberHumSound = G_SoundIndex("sound/weapons/saber/saberhum1.wav");
ADDRGP4 $126
ARGP4
ADDRLP4 28
ADDRGP4 G_SoundIndex
CALLI4
ASGNI4
ADDRGP4 saberHumSound
ADDRLP4 28
INDIRI4
ASGNI4
line 114
;114:}
LABELV $120
endproc WP_SaberInitBladeData 32 4
export G_G2ClientSpineAngles
proc G_G2ClientSpineAngles 168 36
line 176
;115:
;116:#if 0
;117:static void G_SwingAngles( float destination, float swingTolerance, float clampTolerance,
;118:					float speed, float *angle, qboolean *swinging ) {
;119:	float	swing;
;120:	float	move;
;121:	float	scale;
;122:
;123:	if ( !*swinging ) {
;124:		// see if a swing should be started
;125:		swing = AngleSubtract( *angle, destination );
;126:		if ( swing > swingTolerance || swing < -swingTolerance ) {
;127:			*swinging = qtrue;
;128:		}
;129:	}
;130:
;131:	if ( !*swinging ) {
;132:		return;
;133:	}
;134:	
;135:	// modify the speed depending on the delta
;136:	// so it doesn't seem so linear
;137:	swing = AngleSubtract( destination, *angle );
;138:	scale = fabs( swing );
;139:	if ( scale < swingTolerance * 0.5 ) {
;140:		scale = 0.5;
;141:	} else if ( scale < swingTolerance ) {
;142:		scale = 1.0;
;143:	} else {
;144:		scale = 2.0;
;145:	}
;146:
;147:	// swing towards the destination angle
;148:	if ( swing >= 0 ) {
;149:		move = FRAMETIME * scale * speed;
;150:		if ( move >= swing ) {
;151:			move = swing;
;152:			*swinging = qfalse;
;153:		}
;154:		*angle = AngleMod( *angle + move );
;155:	} else if ( swing < 0 ) {
;156:		move = FRAMETIME * scale * -speed;
;157:		if ( move <= swing ) {
;158:			move = swing;
;159:			*swinging = qfalse;
;160:		}
;161:		*angle = AngleMod( *angle + move );
;162:	}
;163:
;164:	// clamp to no more than tolerance
;165:	swing = AngleSubtract( destination, *angle );
;166:	if ( swing > clampTolerance ) {
;167:		*angle = AngleMod( destination - (clampTolerance - 1) );
;168:	} else if ( swing < -clampTolerance ) {
;169:		*angle = AngleMod( destination + (clampTolerance - 1) );
;170:	}
;171:}
;172:#endif
;173:
;174://NOTE: If C` is modified this function should be modified as well (and vice versa)
;175:void G_G2ClientSpineAngles( gentity_t *ent, vec3_t viewAngles, const vec3_t angles, vec3_t thoracicAngles, vec3_t ulAngles, vec3_t llAngles )
;176:{
line 177
;177:	int ang = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 179
;178:
;179:	VectorClear(ulAngles);
ADDRLP4 4
ADDRFP4 16
INDIRP4
ASGNP4
ADDRLP4 8
CNSTF4 0
ASGNF4
ADDRLP4 4
INDIRP4
CNSTI4 8
ADDP4
ADDRLP4 8
INDIRF4
ASGNF4
ADDRLP4 4
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 8
INDIRF4
ASGNF4
ADDRLP4 4
INDIRP4
ADDRLP4 8
INDIRF4
ASGNF4
line 180
;180:	VectorClear(llAngles);
ADDRLP4 12
ADDRFP4 20
INDIRP4
ASGNP4
ADDRLP4 16
CNSTF4 0
ASGNF4
ADDRLP4 12
INDIRP4
CNSTI4 8
ADDP4
ADDRLP4 16
INDIRF4
ASGNF4
ADDRLP4 12
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 16
INDIRF4
ASGNF4
ADDRLP4 12
INDIRP4
ADDRLP4 16
INDIRF4
ASGNF4
line 182
;181:
;182:	viewAngles[YAW] = AngleDelta( ent->client->ps.viewangles[YAW], angles[YAW] );
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ARGF4
ADDRLP4 20
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 20
INDIRI4
ADDP4
INDIRF4
ARGF4
ADDRLP4 24
ADDRGP4 AngleDelta
CALLF4
ASGNF4
ADDRFP4 4
INDIRP4
ADDRLP4 20
INDIRI4
ADDP4
ADDRLP4 24
INDIRF4
ASGNF4
line 184
;183:
;184:	if ( !BG_FlippingAnim( ent->client->ps.legsAnim ) &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 28
ADDRGP4 BG_FlippingAnim
CALLI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 32
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 36
ADDRGP4 BG_SpinningSaberAnim
CALLI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 40
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 44
ADDRGP4 BG_InSpecialJump
CALLI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 0
NEI4 $128
ADDRLP4 48
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 48
INDIRP4
ARGP4
ADDRLP4 48
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 52
ADDRGP4 BG_InRoll
CALLI4
ASGNI4
ADDRLP4 52
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 56
ADDRGP4 BG_SaberInSpecial
CALLI4
ASGNI4
ADDRLP4 56
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 100
ADDP4
INDIRI4
ARGI4
ADDRLP4 60
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 60
INDIRI4
CNSTI4 0
NEI4 $128
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 92
ADDP4
INDIRI4
ARGI4
ADDRLP4 64
ADDRGP4 BG_SaberInSpecialAttack
CALLI4
ASGNI4
ADDRLP4 64
INDIRI4
CNSTI4 0
NEI4 $128
line 193
;185:		!BG_SpinningSaberAnim( ent->client->ps.legsAnim ) &&
;186:		!BG_SpinningSaberAnim( ent->client->ps.torsoAnim ) &&
;187:		!BG_InSpecialJump( ent->client->ps.legsAnim ) &&
;188:		!BG_InSpecialJump( ent->client->ps.torsoAnim ) &&
;189:		!BG_InRoll(&ent->client->ps, ent->client->ps.legsAnim) &&
;190:		!BG_SaberInSpecial(ent->client->ps.saberMove) &&
;191:		!BG_SaberInSpecialAttack(ent->client->ps.torsoAnim) &&
;192:		!BG_SaberInSpecialAttack(ent->client->ps.legsAnim) )
;193:	{
line 198
;194:		//adjust for motion offset
;195:		mdxaBone_t	boltMatrix;
;196:		vec3_t		motionFwd, motionAngles;
;197:
;198:		trap_G2API_GetBoltMatrix_NoReconstruct( ent->client->ghoul2, 0, ent->bolt_Motion, &boltMatrix, vec3_origin, ent->client->ps.origin, level.time, /*cgs.gameModels*/0, vec3_origin);
ADDRLP4 140
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 144
ADDRLP4 140
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 144
INDIRP4
CNSTI4 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 140
INDIRP4
CNSTI4 808
ADDP4
INDIRI4
ARGI4
ADDRLP4 80
ARGP4
ADDRLP4 148
ADDRGP4 vec3_origin
ASGNP4
ADDRLP4 148
INDIRP4
ARGP4
ADDRLP4 144
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRGP4 level+32
INDIRI4
ARGI4
CNSTP4 0
ARGP4
ADDRLP4 148
INDIRP4
ARGP4
ADDRGP4 trap_G2API_GetBoltMatrix_NoReconstruct
CALLI4
pop
line 209
;199:		//trap_G2API_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_X, motionFwd );
;200:		//POSITIVE_X:
;201:		/*
;202:		motionFwd[0] = boltMatrix.matrix[0][0];
;203:		motionFwd[1] = boltMatrix.matrix[1][0];
;204:		motionFwd[2] = boltMatrix.matrix[2][0];
;205:		*/
;206:		
;207:
;208:		//NEGATIVE_Y:
;209:		motionFwd[0] = -boltMatrix.matrix[0][1];
ADDRLP4 128
ADDRLP4 80+4
INDIRF4
NEGF4
ASGNF4
line 210
;210:		motionFwd[1] = -boltMatrix.matrix[1][1];
ADDRLP4 128+4
ADDRLP4 80+16+4
INDIRF4
NEGF4
ASGNF4
line 211
;211:		motionFwd[2] = -boltMatrix.matrix[2][1];
ADDRLP4 128+8
ADDRLP4 80+32+4
INDIRF4
NEGF4
ASGNF4
line 213
;212:
;213:		vectoangles( motionFwd, motionAngles );
ADDRLP4 128
ARGP4
ADDRLP4 68
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 214
;214:		for ( ang = 0; ang < 3; ang++ )
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $138
line 215
;215:		{
line 216
;216:			viewAngles[ang] = AngleNormalize180( viewAngles[ang] - AngleNormalize180( motionAngles[ang] ) );
ADDRLP4 152
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ASGNI4
ADDRLP4 152
INDIRI4
ADDRLP4 68
ADDP4
INDIRF4
ARGF4
ADDRLP4 156
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 160
ADDRLP4 152
INDIRI4
ADDRFP4 4
INDIRP4
ADDP4
ASGNP4
ADDRLP4 160
INDIRP4
INDIRF4
ADDRLP4 156
INDIRF4
SUBF4
ARGF4
ADDRLP4 164
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 160
INDIRP4
ADDRLP4 164
INDIRF4
ASGNF4
line 217
;217:		}
LABELV $139
line 214
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $138
line 219
;218:
;219:		if (viewAngles[YAW] < -90)
ADDRFP4 4
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 3266576384
GEF4 $142
line 220
;220:		{
line 221
;221:			viewAngles[YAW] += 360;
ADDRLP4 152
ADDRFP4 4
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRF4
CNSTF4 1135869952
ADDF4
ASGNF4
line 222
;222:		}
LABELV $142
line 224
;223:
;224:		viewAngles[YAW] -= 90;
ADDRLP4 152
ADDRFP4 4
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 152
INDIRP4
ADDRLP4 152
INDIRP4
INDIRF4
CNSTF4 1119092736
SUBF4
ASGNF4
line 225
;225:	}
LABELV $128
line 228
;226:	//distribute the angles differently up the spine
;227:	//NOTE: each of these distributions must add up to 1.0f
;228:	thoracicAngles[PITCH] = 0;//viewAngles[PITCH]*0.20f;
ADDRFP4 12
INDIRP4
CNSTF4 0
ASGNF4
line 229
;229:	llAngles[PITCH] = 0;//viewAngles[PITCH]*0.40f;
ADDRFP4 20
INDIRP4
CNSTF4 0
ASGNF4
line 230
;230:	ulAngles[PITCH] = 0;//viewAngles[PITCH]*0.40f;
ADDRFP4 16
INDIRP4
CNSTF4 0
ASGNF4
line 232
;231:
;232:	thoracicAngles[YAW] = viewAngles[YAW]*0.20f - (viewAngles[PITCH]*(viewAngles[YAW]*.020f));
ADDRLP4 68
CNSTI4 4
ASGNI4
ADDRLP4 72
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 76
ADDRLP4 72
INDIRP4
ADDRLP4 68
INDIRI4
ADDP4
INDIRF4
ASGNF4
ADDRFP4 12
INDIRP4
ADDRLP4 68
INDIRI4
ADDP4
CNSTF4 1045220557
ADDRLP4 76
INDIRF4
MULF4
ADDRLP4 72
INDIRP4
INDIRF4
CNSTF4 1017370378
ADDRLP4 76
INDIRF4
MULF4
MULF4
SUBF4
ASGNF4
line 233
;233:	ulAngles[YAW] = viewAngles[YAW]*0.25f - (viewAngles[PITCH]*(viewAngles[YAW]*.0005f));
ADDRLP4 80
CNSTI4 4
ASGNI4
ADDRLP4 84
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 88
ADDRLP4 84
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
INDIRF4
ASGNF4
ADDRFP4 16
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
CNSTF4 1048576000
ADDRLP4 88
INDIRF4
MULF4
ADDRLP4 84
INDIRP4
INDIRF4
CNSTF4 973279855
ADDRLP4 88
INDIRF4
MULF4
MULF4
SUBF4
ASGNF4
line 234
;234:	llAngles[YAW] = viewAngles[YAW]*0.25f - (viewAngles[PITCH]*(viewAngles[YAW]*.0005f));
ADDRLP4 92
CNSTI4 4
ASGNI4
ADDRLP4 96
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 100
ADDRLP4 96
INDIRP4
ADDRLP4 92
INDIRI4
ADDP4
INDIRF4
ASGNF4
ADDRFP4 20
INDIRP4
ADDRLP4 92
INDIRI4
ADDP4
CNSTF4 1048576000
ADDRLP4 100
INDIRF4
MULF4
ADDRLP4 96
INDIRP4
INDIRF4
CNSTF4 973279855
ADDRLP4 100
INDIRF4
MULF4
MULF4
SUBF4
ASGNF4
line 236
;235:
;236:	if (thoracicAngles[YAW] > 20)
ADDRFP4 12
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 1101004800
LEF4 $144
line 237
;237:	{
line 238
;238:		thoracicAngles[YAW] = 20;
ADDRFP4 12
INDIRP4
CNSTI4 4
ADDP4
CNSTF4 1101004800
ASGNF4
line 239
;239:	}
LABELV $144
line 240
;240:	if (ulAngles[YAW] > 20)
ADDRFP4 16
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 1101004800
LEF4 $146
line 241
;241:	{
line 242
;242:		ulAngles[YAW] = 20;
ADDRFP4 16
INDIRP4
CNSTI4 4
ADDP4
CNSTF4 1101004800
ASGNF4
line 243
;243:	}
LABELV $146
line 244
;244:	if (llAngles[YAW] > 20)
ADDRFP4 20
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 1101004800
LEF4 $148
line 245
;245:	{
line 246
;246:		llAngles[YAW] = 20;
ADDRFP4 20
INDIRP4
CNSTI4 4
ADDP4
CNSTF4 1101004800
ASGNF4
line 247
;247:	}
LABELV $148
line 249
;248:
;249:	thoracicAngles[ROLL] = viewAngles[ROLL]*0.20f;
ADDRLP4 104
CNSTI4 8
ASGNI4
ADDRFP4 12
INDIRP4
ADDRLP4 104
INDIRI4
ADDP4
CNSTF4 1045220557
ADDRFP4 4
INDIRP4
ADDRLP4 104
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 250
;250:	ulAngles[ROLL] = viewAngles[ROLL]*0.35f;
ADDRLP4 108
CNSTI4 8
ASGNI4
ADDRFP4 16
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
CNSTF4 1051931443
ADDRFP4 4
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 251
;251:	llAngles[ROLL] = viewAngles[ROLL]*0.45f;
ADDRLP4 112
CNSTI4 8
ASGNI4
ADDRFP4 20
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
CNSTF4 1055286886
ADDRFP4 4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRF4
MULF4
ASGNF4
line 253
;252:
;253:	for ( ang = 0; ang < 3; ang++ )
ADDRLP4 0
CNSTI4 0
ASGNI4
LABELV $150
line 254
;254:	{
line 255
;255:		if (ulAngles[ang] < 0)
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRFP4 16
INDIRP4
ADDP4
INDIRF4
CNSTF4 0
GEF4 $154
line 256
;256:		{
line 257
;257:			ulAngles[ang] += 360;
ADDRLP4 116
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRFP4 16
INDIRP4
ADDP4
ASGNP4
ADDRLP4 116
INDIRP4
ADDRLP4 116
INDIRP4
INDIRF4
CNSTF4 1135869952
ADDF4
ASGNF4
line 258
;258:		}
LABELV $154
line 259
;259:	}
LABELV $151
line 253
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $150
line 268
;260:
;261:	//thoracic is added modified again by neckAngle calculations, so don't set it until then
;262://	BG_G2SetBoneAngles( cent, cent->gent, cent->gent->upperLumbarBone, ulAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, cgs.model_draw); 
;263://	BG_G2SetBoneAngles( cent, cent->gent, cent->gent->lowerLumbarBone, llAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, cgs.model_draw); 
;264:
;265://	trap_G2API_SetBoneAngles(cent->ghoul2, 0, "upper_lumbar", ulAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, cgs.gameModels, 0, cg.time); 
;266://	trap_G2API_SetBoneAngles(cent->ghoul2, 0, "lower_lumbar", llAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, cgs.gameModels, 0, cg.time); 
;267://	trap_G2API_SetBoneAngles(cent->ghoul2, 0, "thoracic", thoracicAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, cgs.gameModels, 0, cg.time); 
;268:}
LABELV $127
endproc G_G2ClientSpineAngles 168 36
data
align 4
LABELV $157
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 $158
byte 4 0
byte 4 0
byte 4 0
export G_G2PlayerAngles
code
proc G_G2PlayerAngles 232 44
line 270
;269:
;270:void G_G2PlayerAngles( gentity_t *ent, vec3_t legs[3], vec3_t legsAngles){
line 278
;271:	vec3_t		torsoAngles, headAngles;
;272:	float		dest;
;273:	static	int	movementOffsets[8] = { 0, 22, 45, -22, 0, 22, -45, -22 };
;274:	vec3_t		velocity;
;275:	float		speed;
;276:	int			dir;
;277:	vec3_t		velPos, velAng;
;278:	int			adddir = 0;
ADDRLP4 140
CNSTI4 0
ASGNI4
line 280
;279:	float		dif;
;280:	float		degrees_negative = 0;
ADDRLP4 132
CNSTF4 0
ASGNF4
line 281
;281:	float		degrees_positive = 0;
ADDRLP4 136
CNSTF4 0
ASGNF4
line 282
;282:	qboolean	yawing = qfalse;
ADDRLP4 144
CNSTI4 0
ASGNI4
line 283
;283:	vec3_t		ulAngles, llAngles, viewAngles, angles, thoracicAngles = {0,0,0};
ADDRLP4 72
ADDRGP4 $158
INDIRB
ASGNB 12
line 287
;284:	//float		pitchViewAng;
;285:	//float		yawViewAng;
;286:
;287:	VectorCopy( ent->client->ps.viewangles, headAngles );
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 288
;288:	headAngles[YAW] = AngleMod( headAngles[YAW] );
ADDRLP4 12+4
INDIRF4
ARGF4
ADDRLP4 152
ADDRGP4 AngleMod
CALLF4
ASGNF4
ADDRLP4 12+4
ADDRLP4 152
INDIRF4
ASGNF4
line 289
;289:	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 290
;290:	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 295
;291:
;292:	// --------- yaw -------------
;293:
;294:	// allow yaw to drift a bit
;295:	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 550
NEI4 $165
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 $163
LABELV $165
line 297
;296:			( ent->s.torsoAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[ent->s.weapon]  ) 
;297:	{
line 303
;298:		// if not standing still, always point all in the same direction
;299:		/*cent->pe.torso.yawing = qtrue;	// always center
;300:		cent->pe.torso.pitching = qtrue;	// always center
;301:		cent->pe.legs.yawing = qtrue;	// always center
;302:		*/
;303:		yawing = qtrue;
ADDRLP4 144
CNSTI4 1
ASGNI4
line 304
;304:	}
LABELV $163
line 307
;305:
;306:	// adjust legs for movement dir
;307:	dir = ent->s.angles2[YAW];
ADDRLP4 84
ADDRFP4 0
INDIRP4
CNSTI4 132
ADDP4
INDIRF4
CVFI4 4
ASGNI4
line 308
;308:	if ( dir < 0 || dir > 7 ) {
ADDRLP4 84
INDIRI4
CNSTI4 0
LTI4 $168
ADDRLP4 84
INDIRI4
CNSTI4 7
LEI4 $166
LABELV $168
line 309
;309:		return;
ADDRGP4 $156
JUMPV
LABELV $166
line 312
;310:	}
;311:
;312:	torsoAngles[YAW] = headAngles[YAW] + 0.25 * movementOffsets[ dir ];
ADDRLP4 0+4
ADDRLP4 12+4
INDIRF4
CNSTF4 1048576000
ADDRLP4 84
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $157
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
ASGNF4
line 317
;313:
;314:	// --------- pitch -------------
;315:
;316:	// only show a fraction of the pitch angle in the torso
;317:	if ( headAngles[PITCH] > 180 ) {
ADDRLP4 12
INDIRF4
CNSTF4 1127481344
LEF4 $171
line 318
;318:		dest = (-360 + headAngles[PITCH]) * 0.75;
ADDRLP4 148
CNSTF4 1061158912
ADDRLP4 12
INDIRF4
CNSTF4 3283353600
ADDF4
MULF4
ASGNF4
line 319
;319:	} else {
ADDRGP4 $172
JUMPV
LABELV $171
line 320
;320:		dest = headAngles[PITCH] * 0.75;
ADDRLP4 148
CNSTF4 1061158912
ADDRLP4 12
INDIRF4
MULF4
ASGNF4
line 321
;321:	}
LABELV $172
line 327
;322:
;323:	//G_SwingAngles call disabled, at least for now. It isn't necessary on the server.
;324://	pitchViewAng = ent->client->ps.viewangles[PITCH];
;325://	G_SwingAngles( dest, 15, 30, 0.1, &pitchViewAng, &yawing );
;326:
;327:	torsoAngles[PITCH] = ent->client->ps.viewangles[PITCH];
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRF4
ASGNF4
line 333
;328:
;329:	// --------- roll -------------
;330:
;331:
;332:	// lean towards the direction of travel
;333:	VectorCopy( ent->s.pos.trDelta, velocity );
ADDRLP4 24
ADDRFP4 0
INDIRP4
CNSTI4 36
ADDP4
INDIRB
ASGNB 12
line 334
;334:	speed = VectorNormalize( velocity );
ADDRLP4 24
ARGP4
ADDRLP4 180
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 112
ADDRLP4 180
INDIRF4
ASGNF4
line 358
;335:
;336:	/*
;337:	speed_desired = ent->client->ps.speed/4;
;338:
;339:	if (!speed)
;340:	{
;341:		speed_dif = 0;
;342:	}
;343:	else
;344:	{
;345:		speed_dif = (speed/speed_desired);
;346:	}
;347:
;348:	if (speed_dif > 1)
;349:	{
;350:		speed_dif = 1;
;351:	}
;352:	else if (speed_dif < 0)
;353:	{
;354:		speed_dif = 0;
;355:	}
;356:	*/
;357:
;358:	if ( speed ) {
ADDRLP4 112
INDIRF4
CNSTF4 0
EQF4 $173
line 362
;359:		vec3_t	axis[3];
;360:		float	side;
;361:
;362:		speed *= 0.05;
ADDRLP4 112
CNSTF4 1028443341
ADDRLP4 112
INDIRF4
MULF4
ASGNF4
line 364
;363:
;364:		AnglesToAxis( legsAngles, axis );
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 184
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 365
;365:		side = speed * DotProduct( velocity, axis[1] );
ADDRLP4 220
ADDRLP4 112
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 366
;366:		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 368
;367:
;368:		side = speed * DotProduct( velocity, axis[0] );
ADDRLP4 220
ADDRLP4 112
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 369
;369:		legsAngles[PITCH] += side;
ADDRLP4 228
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 228
INDIRP4
ADDRLP4 228
INDIRP4
INDIRF4
ADDRLP4 220
INDIRF4
ADDF4
ASGNF4
line 370
;370:	}
LABELV $173
line 373
;371:
;372:	//rww - crazy velocity-based leg angle calculation
;373:	legsAngles[YAW] = headAngles[YAW];
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ADDRLP4 12+4
INDIRF4
ASGNF4
line 374
;374:	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 375
;375:	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 376
;376:	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 378
;377:
;378:	if (ent->client->ps.groundEntityNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 84
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $191
line 379
;379:	{ //off the ground, no direction-based leg angles
line 380
;380:		VectorCopy(ent->client->ps.origin, velPos);
ADDRLP4 36
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 381
;381:	}
LABELV $191
line 383
;382:
;383:	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 385
;384:
;385:	if (!VectorCompare(velAng, vec3_origin))
ADDRLP4 48
ARGP4
ADDRGP4 vec3_origin
ARGP4
ADDRLP4 188
ADDRGP4 VectorCompare
CALLI4
ASGNI4
ADDRLP4 188
INDIRI4
CNSTI4 0
NEI4 $197
line 386
;386:	{
line 387
;387:		vectoangles(velAng, velAng);
ADDRLP4 48
ARGP4
ADDRLP4 48
ARGP4
ADDRGP4 vectoangles
CALLV
pop
line 389
;388:
;389:		if (velAng[YAW] <= legsAngles[YAW])
ADDRLP4 48+4
INDIRF4
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
GTF4 $199
line 390
;390:		{
line 391
;391:			degrees_negative = (legsAngles[YAW] - velAng[YAW]);
ADDRLP4 132
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
ADDRLP4 48+4
INDIRF4
SUBF4
ASGNF4
line 392
;392:			degrees_positive = (360 - legsAngles[YAW]) + velAng[YAW];
ADDRLP4 136
CNSTF4 1135869952
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
SUBF4
ADDRLP4 48+4
INDIRF4
ADDF4
ASGNF4
line 393
;393:		}
ADDRGP4 $200
JUMPV
LABELV $199
line 395
;394:		else
;395:		{
line 396
;396:			degrees_negative = legsAngles[YAW] + (360 - velAng[YAW]);
ADDRLP4 132
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
CNSTF4 1135869952
ADDRLP4 48+4
INDIRF4
SUBF4
ADDF4
ASGNF4
line 397
;397:			degrees_positive = (velAng[YAW] - legsAngles[YAW]);
ADDRLP4 136
ADDRLP4 48+4
INDIRF4
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 398
;398:		}
LABELV $200
line 400
;399:
;400:		if (degrees_negative < degrees_positive)
ADDRLP4 132
INDIRF4
ADDRLP4 136
INDIRF4
GEF4 $206
line 401
;401:		{
line 402
;402:			dif = degrees_negative;
ADDRLP4 116
ADDRLP4 132
INDIRF4
ASGNF4
line 403
;403:			adddir = 0;
ADDRLP4 140
CNSTI4 0
ASGNI4
line 404
;404:		}
ADDRGP4 $207
JUMPV
LABELV $206
line 406
;405:		else
;406:		{
line 407
;407:			dif = degrees_positive;
ADDRLP4 116
ADDRLP4 136
INDIRF4
ASGNF4
line 408
;408:			adddir = 1;
ADDRLP4 140
CNSTI4 1
ASGNI4
line 409
;409:		}
LABELV $207
line 411
;410:
;411:		if (dif > 90)
ADDRLP4 116
INDIRF4
CNSTF4 1119092736
LEF4 $208
line 412
;412:		{
line 413
;413:			dif = (180 - dif);
ADDRLP4 116
CNSTF4 1127481344
ADDRLP4 116
INDIRF4
SUBF4
ASGNF4
line 414
;414:		}
LABELV $208
line 416
;415:
;416:		if (dif > 60)
ADDRLP4 116
INDIRF4
CNSTF4 1114636288
LEF4 $210
line 417
;417:		{
line 418
;418:			dif = 60;
ADDRLP4 116
CNSTF4 1114636288
ASGNF4
line 419
;419:		}
LABELV $210
line 422
;420:
;421:		//Slight hack for when playing is running backward
;422:		if (dir == 3 || dir == 5)
ADDRLP4 84
INDIRI4
CNSTI4 3
EQI4 $214
ADDRLP4 84
INDIRI4
CNSTI4 5
NEI4 $212
LABELV $214
line 423
;423:		{
line 424
;424:			dif = -dif;
ADDRLP4 116
ADDRLP4 116
INDIRF4
NEGF4
ASGNF4
line 425
;425:		}
LABELV $212
line 427
;426:
;427:		if (adddir)
ADDRLP4 140
INDIRI4
CNSTI4 0
EQI4 $215
line 428
;428:		{
line 429
;429:			legsAngles[YAW] -= dif;
ADDRLP4 196
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 196
INDIRP4
ADDRLP4 196
INDIRP4
INDIRF4
ADDRLP4 116
INDIRF4
SUBF4
ASGNF4
line 430
;430:		}
ADDRGP4 $216
JUMPV
LABELV $215
line 432
;431:		else
;432:		{
line 433
;433:			legsAngles[YAW] += dif;
ADDRLP4 196
ADDRFP4 8
INDIRP4
CNSTI4 4
ADDP4
ASGNP4
ADDRLP4 196
INDIRP4
ADDRLP4 196
INDIRP4
INDIRF4
ADDRLP4 116
INDIRF4
ADDF4
ASGNF4
line 434
;434:		}
LABELV $216
line 435
;435:	}
LABELV $197
line 441
;436:
;437:	//G_SwingAngles call disabled, at least for now. It isn't necessary on the server.
;438://	yawViewAng = ent->client->ps.viewangles[YAW];
;439://	G_SwingAngles( legsAngles[YAW], 40, 90, /*cg_swingSpeed.value*/ 0.3, &yawViewAng, &yawing );
;440:
;441:	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 443
;442:
;443:	legsAngles[ROLL] = 0;
ADDRFP4 8
INDIRP4
CNSTI4 8
ADDP4
CNSTF4 0
ASGNF4
line 444
;444:	torsoAngles[ROLL] = 0;
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 447
;445:
;446:	// pull the angles back out of the hierarchial chain
;447:	AnglesSubtract( headAngles, torsoAngles, headAngles );
ADDRLP4 12
ARGP4
ADDRLP4 0
ARGP4
ADDRLP4 12
ARGP4
ADDRGP4 AnglesSubtract
CALLV
pop
line 448
;448:	AnglesSubtract( torsoAngles, legsAngles, torsoAngles );
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 0
ARGP4
ADDRGP4 AnglesSubtract
CALLV
pop
line 449
;449:	AnglesToAxis( legsAngles, legs );
ADDRFP4 8
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 454
;450:	// we assume that model 0 is the player model.
;451:
;452://	trap_G2API_SetBoneAngles(ent->client->ghoul2, 0, "upper_lumbar", torsoAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); 
;453:
;454:	VectorCopy( ent->client->ps.viewangles, viewAngles );
ADDRLP4 60
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 456
;455:
;456:	if (viewAngles[PITCH] > 290)
ADDRLP4 60
INDIRF4
CNSTF4 1133576192
LEF4 $218
line 457
;457:	{ //keep the same general range as lerpAngles on the client so we can use the same spine correction
line 458
;458:		viewAngles[PITCH] -= 360;
ADDRLP4 60
ADDRLP4 60
INDIRF4
CNSTF4 1135869952
SUBF4
ASGNF4
line 459
;459:	}
LABELV $218
line 461
;460:
;461:	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 462
;462:	viewAngles[PITCH] *= 0.5;
ADDRLP4 60
CNSTF4 1056964608
ADDRLP4 60
INDIRF4
MULF4
ASGNF4
line 464
;463:
;464:	VectorCopy( ent->client->ps.viewangles, angles );
ADDRLP4 120
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 465
;465:	angles[PITCH] = 0;
ADDRLP4 120
CNSTF4 0
ASGNF4
line 467
;466:
;467:	G_G2ClientSpineAngles(ent, viewAngles, angles, thoracicAngles, ulAngles, llAngles);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 60
ARGP4
ADDRLP4 120
ARGP4
ADDRLP4 72
ARGP4
ADDRLP4 88
ARGP4
ADDRLP4 100
ARGP4
ADDRGP4 G_G2ClientSpineAngles
CALLV
pop
line 469
;468:
;469:	ulAngles[YAW] += torsoAngles[YAW]*0.3;
ADDRLP4 88+4
ADDRLP4 88+4
INDIRF4
CNSTF4 1050253722
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 470
;470:	llAngles[YAW] += torsoAngles[YAW]*0.3;
ADDRLP4 100+4
ADDRLP4 100+4
INDIRF4
CNSTF4 1050253722
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 471
;471:	thoracicAngles[YAW] += torsoAngles[YAW]*0.4;
ADDRLP4 72+4
ADDRLP4 72+4
INDIRF4
CNSTF4 1053609165
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 473
;472:
;473:	ulAngles[PITCH] = torsoAngles[PITCH]*0.3;
ADDRLP4 88
CNSTF4 1050253722
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 474
;474:	llAngles[PITCH] = torsoAngles[PITCH]*0.3;
ADDRLP4 100
CNSTF4 1050253722
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 475
;475:	thoracicAngles[PITCH] = torsoAngles[PITCH]*0.4;
ADDRLP4 72
CNSTF4 1053609165
ADDRLP4 0
INDIRF4
MULF4
ASGNF4
line 477
;476:
;477:	ulAngles[ROLL] += torsoAngles[ROLL]*0.3;
ADDRLP4 88+8
ADDRLP4 88+8
INDIRF4
CNSTF4 1050253722
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 478
;478:	llAngles[ROLL] += torsoAngles[ROLL]*0.3;
ADDRLP4 100+8
ADDRLP4 100+8
INDIRF4
CNSTF4 1050253722
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 479
;479:	thoracicAngles[ROLL] += torsoAngles[ROLL]*0.4;
ADDRLP4 72+8
ADDRLP4 72+8
INDIRF4
CNSTF4 1053609165
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 481
;480:
;481:	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 1716
ADDP4
INDIRP4
ARGP4
ADDRLP4 196
CNSTI4 0
ASGNI4
ADDRLP4 196
INDIRI4
ARGI4
ADDRGP4 $234
ARGP4
ADDRLP4 88
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 482
;482:	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 1716
ADDP4
INDIRP4
ARGP4
ADDRLP4 200
CNSTI4 0
ASGNI4
ADDRLP4 200
INDIRI4
ARGI4
ADDRGP4 $236
ARGP4
ADDRLP4 100
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 483
;483:	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 1716
ADDP4
INDIRP4
ARGP4
ADDRLP4 204
CNSTI4 0
ASGNI4
ADDRLP4 204
INDIRI4
ARGI4
ADDRGP4 $238
ARGP4
ADDRLP4 72
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 486
;484:
;485:	//trap_G2API_SetBoneAngles(ent->client->ghoul2, 0, "cranium", headAngles, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, NULL, 0, level.time); 
;486:}
LABELV $156
endproc G_G2PlayerAngles 232 44
export SaberAttacking
proc SaberAttacking 4 4
line 489
;487:
;488:qboolean SaberAttacking(gentity_t *self)
;489:{
line 496
;490:	/*
;491:	if (self->client->ps.torsoAnim == self->client->ps.saberAttackSequence)
;492:	{
;493:		return qtrue;
;494:	}
;495:	*/
;496:	if (BG_SaberInAttack(self->client->ps.saberMove))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ARGI4
ADDRLP4 0
ADDRGP4 BG_SaberInAttack
CALLI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $241
line 497
;497:	{
line 498
;498:		return qtrue;
CNSTI4 1
RETI4
ADDRGP4 $240
JUMPV
LABELV $241
line 501
;499:	}
;500:
;501:	return qfalse;
CNSTI4 0
RETI4
LABELV $240
endproc SaberAttacking 4 4
export WP_SabersCheckLock2
proc WP_SabersCheckLock2 1688 28
line 524
;502:}
;503:
;504:typedef enum
;505:{
;506:	LOCK_FIRST = 0,
;507:	LOCK_TOP = LOCK_FIRST,
;508:	LOCK_DIAG_TR,
;509:	LOCK_DIAG_TL,
;510:	LOCK_DIAG_BR,
;511:	LOCK_DIAG_BL,
;512:	LOCK_R,
;513:	LOCK_L,
;514:	LOCK_RANDOM
;515:} sabersLockMode_t;
;516:
;517:#define LOCK_IDEAL_DIST_TOP 32.0f
;518:#define LOCK_IDEAL_DIST_CIRCLE 48.0f
;519:
;520:#define SABER_HITDAMAGE 35
;521:void WP_SaberBlockNonRandom( gentity_t *self, vec3_t hitloc, qboolean missileBlock );
;522:
;523:qboolean WP_SabersCheckLock2( gentity_t *attacker, gentity_t *defender, sabersLockMode_t lockMode )
;524:{
line 526
;525://	animation_t *anim;
;526:	int		attAnim, defAnim = 0;
ADDRLP4 1508
CNSTI4 0
ASGNI4
line 527
;527:	float	attStart = 0.5f;
ADDRLP4 1532
CNSTF4 1056964608
ASGNF4
line 528
;528:	float	idealDist = 48.0f;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 532
;529:	vec3_t	attAngles, defAngles, defDir;
;530:	vec3_t	newOrg;
;531:	vec3_t	attDir;
;532:	float	diff = 0;
ADDRLP4 376
CNSTF4 0
ASGNF4
line 537
;533:	trace_t trace;
;534:	pmove_t		pmv;
;535:
;536:	//MATCH ANIMS
;537:	if ( lockMode == LOCK_RANDOM )
ADDRFP4 8
INDIRI4
CNSTI4 7
NEI4 $245
line 538
;538:	{
line 539
;539:		lockMode = (sabersLockMode_t)Q_irand( (int)LOCK_FIRST, (int)(LOCK_RANDOM)-1 );
CNSTI4 0
ARGI4
CNSTI4 6
ARGI4
ADDRLP4 1536
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRFP4 8
ADDRLP4 1536
INDIRI4
ASGNI4
line 540
;540:	}
LABELV $245
line 541
;541:	switch ( lockMode )
ADDRLP4 1536
ADDRFP4 8
INDIRI4
ASGNI4
ADDRLP4 1536
INDIRI4
CNSTI4 0
LTI4 $247
ADDRLP4 1536
INDIRI4
CNSTI4 6
GTI4 $247
ADDRLP4 1536
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $257
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $257
address $250
address $251
address $252
address $253
address $254
address $255
address $256
code
line 542
;542:	{
LABELV $250
line 544
;543:	case LOCK_TOP:
;544:		attAnim = BOTH_BF2LOCK;
ADDRLP4 1528
CNSTI4 538
ASGNI4
line 545
;545:		defAnim = BOTH_BF1LOCK;
ADDRLP4 1508
CNSTI4 541
ASGNI4
line 546
;546:		attStart = 0.5f;
ADDRLP4 1532
CNSTF4 1056964608
ASGNF4
line 547
;547:		idealDist = LOCK_IDEAL_DIST_TOP;
ADDRLP4 1524
CNSTF4 1107296256
ASGNF4
line 548
;548:		break;
ADDRGP4 $248
JUMPV
LABELV $251
line 550
;549:	case LOCK_DIAG_TR:
;550:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 549
ASGNI4
line 551
;551:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 548
ASGNI4
line 552
;552:		attStart = 0.5f;
ADDRLP4 1532
CNSTF4 1056964608
ASGNF4
line 553
;553:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 554
;554:		break;
ADDRGP4 $248
JUMPV
LABELV $252
line 556
;555:	case LOCK_DIAG_TL:
;556:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 548
ASGNI4
line 557
;557:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 549
ASGNI4
line 558
;558:		attStart = 0.5f;
ADDRLP4 1532
CNSTF4 1056964608
ASGNF4
line 559
;559:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 560
;560:		break;
ADDRGP4 $248
JUMPV
LABELV $253
line 562
;561:	case LOCK_DIAG_BR:
;562:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 548
ASGNI4
line 563
;563:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 549
ASGNI4
line 564
;564:		attStart = 0.85f;
ADDRLP4 1532
CNSTF4 1062836634
ASGNF4
line 565
;565:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 566
;566:		break;
ADDRGP4 $248
JUMPV
LABELV $254
line 568
;567:	case LOCK_DIAG_BL:
;568:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 549
ASGNI4
line 569
;569:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 548
ASGNI4
line 570
;570:		attStart = 0.85f;
ADDRLP4 1532
CNSTF4 1062836634
ASGNF4
line 571
;571:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 572
;572:		break;
ADDRGP4 $248
JUMPV
LABELV $255
line 574
;573:	case LOCK_R:
;574:		attAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 549
ASGNI4
line 575
;575:		defAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 548
ASGNI4
line 576
;576:		attStart = 0.75f;
ADDRLP4 1532
CNSTF4 1061158912
ASGNF4
line 577
;577:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 578
;578:		break;
ADDRGP4 $248
JUMPV
LABELV $256
line 580
;579:	case LOCK_L:
;580:		attAnim = BOTH_CWCIRCLELOCK;
ADDRLP4 1528
CNSTI4 548
ASGNI4
line 581
;581:		defAnim = BOTH_CCWCIRCLELOCK;
ADDRLP4 1508
CNSTI4 549
ASGNI4
line 582
;582:		attStart = 0.75f;
ADDRLP4 1532
CNSTF4 1061158912
ASGNF4
line 583
;583:		idealDist = LOCK_IDEAL_DIST_CIRCLE;
ADDRLP4 1524
CNSTF4 1111490560
ASGNF4
line 584
;584:		break;
ADDRGP4 $248
JUMPV
LABELV $247
line 586
;585:	default:
;586:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $244
JUMPV
line 587
;587:		break;
LABELV $248
line 590
;588:	}
;589:
;590:	memset (&pmv, 0, sizeof(pmv));
ADDRLP4 0
ARGP4
CNSTI4 0
ARGI4
CNSTI4 376
ARGI4
ADDRGP4 memset
CALLP4
pop
line 591
;591:	pmv.ps = &attacker->client->ps;
ADDRLP4 0
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
line 592
;592:	pmv.animations = bgGlobalAnimations;
ADDRLP4 0+224
ADDRGP4 bgGlobalAnimations
ASGNP4
line 593
;593:	pmv.cmd = attacker->client->pers.cmd;
ADDRLP4 0+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1372
ADDP4
INDIRB
ASGNB 28
line 594
;594:	pmv.trace = trap_Trace;
ADDRLP4 0+240
ADDRGP4 trap_Trace
ASGNP4
line 595
;595:	pmv.pointcontents = trap_PointContents;
ADDRLP4 0+244
ADDRGP4 trap_PointContents
ASGNP4
line 596
;596:	pmv.gametype = g_gametype.integer;
ADDRLP4 0+220
ADDRGP4 g_gametype+12
INDIRI4
ASGNI4
line 599
;597:
;598:	//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)
;599:	pm = &pmv;
ADDRGP4 pm
ADDRLP4 0
ASGNP4
line 600
;600:	PM_SetAnim(SETANIM_BOTH, attAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1544
CNSTI4 3
ASGNI4
ADDRLP4 1544
INDIRI4
ARGI4
ADDRLP4 1528
INDIRI4
ARGI4
ADDRLP4 1544
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 601
;601:	attacker->client->ps.saberLockFrame = bgGlobalAnimations[attAnim].firstFrame+(bgGlobalAnimations[attAnim].numFrames*0.5);
ADDRLP4 1548
CNSTI4 28
ADDRLP4 1528
INDIRI4
MULI4
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
ADDRLP4 1548
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1056964608
ADDRLP4 1548
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
CVFI4 4
ASGNI4
line 603
;602:
;603:	pmv.ps = &defender->client->ps;
ADDRLP4 0
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
line 604
;604:	pmv.animations = bgGlobalAnimations;
ADDRLP4 0+224
ADDRGP4 bgGlobalAnimations
ASGNP4
line 605
;605:	pmv.cmd = defender->client->pers.cmd;
ADDRLP4 0+4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1372
ADDP4
INDIRB
ASGNB 28
line 607
;606:
;607:	pm = &pmv;
ADDRGP4 pm
ADDRLP4 0
ASGNP4
line 608
;608:	PM_SetAnim(SETANIM_BOTH, defAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
ADDRLP4 1552
CNSTI4 3
ASGNI4
ADDRLP4 1552
INDIRI4
ARGI4
ADDRLP4 1508
INDIRI4
ARGI4
ADDRLP4 1552
INDIRI4
ARGI4
CNSTI4 0
ARGI4
ADDRGP4 PM_SetAnim
CALLV
pop
line 609
;609:	defender->client->ps.saberLockFrame = bgGlobalAnimations[defAnim].firstFrame+(bgGlobalAnimations[defAnim].numFrames*0.5);
ADDRLP4 1556
CNSTI4 28
ADDRLP4 1508
INDIRI4
MULI4
ASGNI4
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
ADDRLP4 1556
INDIRI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
CVIF4 4
CNSTF4 1056964608
ADDRLP4 1556
INDIRI4
ADDRGP4 bgGlobalAnimations+4
ADDP4
INDIRI4
CVIF4 4
MULF4
ADDF4
CVFI4 4
ASGNI4
line 611
;610:
;611:	attacker->client->ps.saberLockHits = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 536
ADDP4
CNSTI4 0
ASGNI4
line 612
;612:	defender->client->ps.saberLockHits = 0;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 536
ADDP4
CNSTI4 0
ASGNI4
line 614
;613:
;614:	attacker->client->ps.saberLockAdvance = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 540
ADDP4
CNSTI4 0
ASGNI4
line 615
;615:	defender->client->ps.saberLockAdvance = qfalse;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 540
ADDP4
CNSTI4 0
ASGNI4
line 617
;616:
;617:	VectorClear( attacker->client->ps.velocity );
ADDRLP4 1560
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1564
CNSTF4 0
ASGNF4
ADDRLP4 1560
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1564
INDIRF4
ASGNF4
ADDRLP4 1560
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1564
INDIRF4
ASGNF4
ADDRLP4 1560
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1564
INDIRF4
ASGNF4
line 618
;618:	VectorClear( defender->client->ps.velocity );
ADDRLP4 1568
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1572
CNSTF4 0
ASGNF4
ADDRLP4 1568
INDIRP4
CNSTI4 40
ADDP4
ADDRLP4 1572
INDIRF4
ASGNF4
ADDRLP4 1568
INDIRP4
CNSTI4 36
ADDP4
ADDRLP4 1572
INDIRF4
ASGNF4
ADDRLP4 1568
INDIRP4
CNSTI4 32
ADDP4
ADDRLP4 1572
INDIRF4
ASGNF4
line 619
;619:	attacker->client->ps.saberLockTime = defender->client->ps.saberLockTime = level.time + 10000;
ADDRLP4 1576
CNSTI4 408
ASGNI4
ADDRLP4 1580
CNSTI4 524
ASGNI4
ADDRLP4 1584
ADDRGP4 level+32
INDIRI4
CNSTI4 10000
ADDI4
ASGNI4
ADDRFP4 4
INDIRP4
ADDRLP4 1576
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1580
INDIRI4
ADDP4
ADDRLP4 1584
INDIRI4
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1576
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1580
INDIRI4
ADDP4
ADDRLP4 1584
INDIRI4
ASGNI4
line 620
;620:	attacker->client->ps.saberLockEnemy = defender->s.number;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 528
ADDP4
ADDRFP4 4
INDIRP4
INDIRI4
ASGNI4
line 621
;621:	defender->client->ps.saberLockEnemy = attacker->s.number;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 528
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 622
;622:	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 1588
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1592
CNSTI4 408
ASGNI4
ADDRLP4 1596
CNSTI4 44
ASGNI4
ADDRFP4 4
INDIRP4
ADDRLP4 1592
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1596
INDIRI4
ADDP4
ADDRLP4 1588
INDIRI4
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 1592
INDIRI4
ADDP4
INDIRP4
ADDRLP4 1596
INDIRI4
ADDP4
ADDRLP4 1588
INDIRI4
ASGNI4
line 624
;623:
;624:	VectorSubtract( defender->r.currentOrigin, attacker->r.currentOrigin, defDir );
ADDRLP4 1600
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1604
CNSTI4 368
ASGNI4
ADDRLP4 1608
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 380
ADDRLP4 1600
INDIRP4
ADDRLP4 1604
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1608
INDIRP4
ADDRLP4 1604
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1612
CNSTI4 372
ASGNI4
ADDRLP4 380+4
ADDRLP4 1600
INDIRP4
ADDRLP4 1612
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1608
INDIRP4
ADDRLP4 1612
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1616
CNSTI4 376
ASGNI4
ADDRLP4 380+8
ADDRFP4 4
INDIRP4
ADDRLP4 1616
INDIRI4
ADDP4
INDIRF4
ADDRFP4 0
INDIRP4
ADDRLP4 1616
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 625
;625:	VectorCopy( attacker->client->ps.viewangles, attAngles );
ADDRLP4 1496
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 626
;626:	attAngles[YAW] = vectoyaw( defDir );
ADDRLP4 380
ARGP4
ADDRLP4 1620
ADDRGP4 vectoyaw
CALLF4
ASGNF4
ADDRLP4 1496+4
ADDRLP4 1620
INDIRF4
ASGNF4
line 627
;627:	SetClientViewAngle( attacker, attAngles );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1496
ARGP4
ADDRGP4 SetClientViewAngle
CALLV
pop
line 628
;628:	defAngles[PITCH] = attAngles[PITCH]*-1;
ADDRLP4 1512
CNSTF4 3212836864
ADDRLP4 1496
INDIRF4
MULF4
ASGNF4
line 629
;629:	defAngles[YAW] = AngleNormalize180( attAngles[YAW] + 180);
ADDRLP4 1496+4
INDIRF4
CNSTF4 1127481344
ADDF4
ARGF4
ADDRLP4 1624
ADDRGP4 AngleNormalize180
CALLF4
ASGNF4
ADDRLP4 1512+4
ADDRLP4 1624
INDIRF4
ASGNF4
line 630
;630:	defAngles[ROLL] = 0;
ADDRLP4 1512+8
CNSTF4 0
ASGNF4
line 631
;631:	SetClientViewAngle( defender, defAngles );
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 1512
ARGP4
ADDRGP4 SetClientViewAngle
CALLV
pop
line 634
;632:	
;633:	//MATCH POSITIONS
;634:	diff = VectorNormalize( defDir ) - idealDist;//diff will be the total error in dist
ADDRLP4 380
ARGP4
ADDRLP4 1628
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 376
ADDRLP4 1628
INDIRF4
ADDRLP4 1524
INDIRF4
SUBF4
ASGNF4
line 636
;635:	//try to move attacker half the diff towards the defender
;636:	VectorMA( attacker->r.currentOrigin, diff*0.5f, defDir, newOrg );
ADDRLP4 1632
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1636
CNSTF4 1056964608
ADDRLP4 376
INDIRF4
MULF4
ASGNF4
ADDRLP4 392
ADDRLP4 1632
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
ADDRLP4 380
INDIRF4
ADDRLP4 1636
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 392+4
ADDRLP4 1632
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
ADDRLP4 380+4
INDIRF4
ADDRLP4 1636
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 392+8
ADDRFP4 0
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
ADDRLP4 380+8
INDIRF4
CNSTF4 1056964608
ADDRLP4 376
INDIRF4
MULF4
MULF4
ADDF4
ASGNF4
line 638
;637:
;638:	trap_Trace( &trace, attacker->r.currentOrigin, attacker->r.mins, attacker->r.maxs, newOrg, attacker->s.number, attacker->clipmask );
ADDRLP4 416
ARGP4
ADDRLP4 1640
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1640
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 1640
INDIRP4
CNSTI4 316
ADDP4
ARGP4
ADDRLP4 1640
INDIRP4
CNSTI4 328
ADDP4
ARGP4
ADDRLP4 392
ARGP4
ADDRLP4 1640
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1640
INDIRP4
CNSTI4 508
ADDP4
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 639
;639:	if ( !trace.startsolid && !trace.allsolid )
ADDRLP4 1644
CNSTI4 0
ASGNI4
ADDRLP4 416+4
INDIRI4
ADDRLP4 1644
INDIRI4
NEI4 $279
ADDRLP4 416
INDIRI4
ADDRLP4 1644
INDIRI4
NEI4 $279
line 640
;640:	{
line 641
;641:		G_SetOrigin( attacker, trace.endpos );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 416+12
ARGP4
ADDRGP4 G_SetOrigin
CALLV
pop
line 642
;642:		trap_LinkEntity( attacker );
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 643
;643:	}
LABELV $279
line 645
;644:	//now get the defender's dist and do it for him too
;645:	VectorSubtract( attacker->r.currentOrigin, defender->r.currentOrigin, attDir );
ADDRLP4 1648
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1652
CNSTI4 368
ASGNI4
ADDRLP4 1656
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 404
ADDRLP4 1648
INDIRP4
ADDRLP4 1652
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1656
INDIRP4
ADDRLP4 1652
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1660
CNSTI4 372
ASGNI4
ADDRLP4 404+4
ADDRLP4 1648
INDIRP4
ADDRLP4 1660
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1656
INDIRP4
ADDRLP4 1660
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1664
CNSTI4 376
ASGNI4
ADDRLP4 404+8
ADDRFP4 0
INDIRP4
ADDRLP4 1664
INDIRI4
ADDP4
INDIRF4
ADDRFP4 4
INDIRP4
ADDRLP4 1664
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 646
;646:	diff = VectorNormalize( attDir ) - idealDist;//diff will be the total error in dist
ADDRLP4 404
ARGP4
ADDRLP4 1668
ADDRGP4 VectorNormalize
CALLF4
ASGNF4
ADDRLP4 376
ADDRLP4 1668
INDIRF4
ADDRLP4 1524
INDIRF4
SUBF4
ASGNF4
line 648
;647:	//try to move defender all of the remaining diff towards the attacker
;648:	VectorMA( defender->r.currentOrigin, diff, attDir, newOrg );
ADDRLP4 1672
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 392
ADDRLP4 1672
INDIRP4
CNSTI4 368
ADDP4
INDIRF4
ADDRLP4 404
INDIRF4
ADDRLP4 376
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 392+4
ADDRLP4 1672
INDIRP4
CNSTI4 372
ADDP4
INDIRF4
ADDRLP4 404+4
INDIRF4
ADDRLP4 376
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 392+8
ADDRFP4 4
INDIRP4
CNSTI4 376
ADDP4
INDIRF4
ADDRLP4 404+8
INDIRF4
ADDRLP4 376
INDIRF4
MULF4
ADDF4
ASGNF4
line 649
;649:	trap_Trace( &trace, defender->r.currentOrigin, defender->r.mins, defender->r.maxs, newOrg, defender->s.number, defender->clipmask );
ADDRLP4 416
ARGP4
ADDRLP4 1680
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1680
INDIRP4
CNSTI4 368
ADDP4
ARGP4
ADDRLP4 1680
INDIRP4
CNSTI4 316
ADDP4
ARGP4
ADDRLP4 1680
INDIRP4
CNSTI4 328
ADDP4
ARGP4
ADDRLP4 392
ARGP4
ADDRLP4 1680
INDIRP4
INDIRI4
ARGI4
ADDRLP4 1680
INDIRP4
CNSTI4 508
ADDP4
INDIRI4
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 650
;650:	if ( !trace.startsolid && !trace.allsolid )
ADDRLP4 1684
CNSTI4 0
ASGNI4
ADDRLP4 416+4
INDIRI4
ADDRLP4 1684
INDIRI4
NEI4 $289
ADDRLP4 416
INDIRI4
ADDRLP4 1684
INDIRI4
NEI4 $289
line 651
;651:	{
line 652
;652:		G_SetOrigin( defender, trace.endpos );
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 416+12
ARGP4
ADDRGP4 G_SetOrigin
CALLV
pop
line 653
;653:		trap_LinkEntity( defender );
ADDRFP4 4
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 654
;654:	}
LABELV $289
line 657
;655:
;656:	//DONE!
;657:	return qtrue;
CNSTI4 1
RETI4
LABELV $244
endproc WP_SabersCheckLock2 1688 28
export WP_SabersCheckLock
proc WP_SabersCheckLock 240 16
line 661
;658:}
;659:
;660:qboolean WP_SabersCheckLock( gentity_t *ent1, gentity_t *ent2 )
;661:{
line 663
;662:	float dist;
;663:	qboolean	ent1BlockingPlayer = qfalse;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 664
;664:	qboolean	ent2BlockingPlayer = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 666
;665:
;666:	if (!g_saberLocking.integer)
ADDRGP4 g_saberLocking+12
INDIRI4
CNSTI4 0
NEI4 $294
line 667
;667:	{
line 668
;668:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $294
line 671
;669:	}
;670:
;671:	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 $299
ADDRFP4 4
INDIRP4
ADDRLP4 12
INDIRI4
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 16
INDIRU4
NEU4 $297
LABELV $299
line 672
;672:	{
line 673
;673:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $297
line 676
;674:	}
;675:
;676:	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 1292
ASGNI4
ADDRLP4 36
CNSTI4 0
ASGNI4
ADDRLP4 28
INDIRP4
ADDRLP4 32
INDIRI4
ADDP4
INDIRI4
ADDRLP4 36
INDIRI4
EQI4 $304
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 $304
ADDRLP4 48
CNSTI4 1284
ASGNI4
ADDRLP4 28
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
INDIRI4
ADDRLP4 40
INDIRP4
INDIRI4
NEI4 $304
ADDRLP4 44
INDIRP4
ADDRLP4 48
INDIRI4
ADDP4
INDIRI4
ADDRLP4 20
INDIRP4
INDIRI4
EQI4 $300
LABELV $304
line 680
;677:		!ent2->client->ps.duelInProgress ||
;678:		ent1->client->ps.duelIndex != ent2->s.number ||
;679:		ent2->client->ps.duelIndex != ent1->s.number)
;680:	{ //only allow saber locking if two players are dueling with each other directly
line 681
;681:		if (g_gametype.integer != GT_TOURNAMENT)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
EQI4 $305
line 682
;682:		{
line 683
;683:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $305
line 685
;684:		}
;685:	}
LABELV $300
line 687
;686:
;687:	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 $308
line 688
;688:	{
line 689
;689:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $308
line 691
;690:	}
;691:	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 $312
ADDRFP4 4
INDIRP4
ADDRLP4 60
INDIRI4
ADDP4
INDIRP4
ADDRLP4 64
INDIRI4
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
NEI4 $310
LABELV $312
line 693
;692:		ent2->client->ps.groundEntityNum == ENTITYNUM_NONE )
;693:	{
line 694
;694:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $310
line 696
;695:	}
;696:	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 697
;697:	if ( dist < 64 || dist > 6400 )//( dist < 128 || dist > 2304 )
ADDRLP4 8
INDIRF4
CNSTF4 1115684864
LTF4 $315
ADDRLP4 8
INDIRF4
CNSTF4 1170735104
LEF4 $313
LABELV $315
line 698
;698:	{//between 8 and 80 from each other//was 16 and 48
line 699
;699:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $313
line 702
;700:	}
;701:
;702:	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 $316
line 703
;703:	{
line 704
;704:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $316
line 706
;705:	}
;706:	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 $318
line 707
;707:	{
line 708
;708:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $318
line 711
;709:	}
;710:
;711:	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 $320
line 712
;712:	{
line 713
;713:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $320
line 715
;714:	}
;715:	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 $322
line 716
;716:	{
line 717
;717:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $322
line 720
;718:	}
;719:
;720:	if (ent1->client->ps.forceHandExtend != HANDEXTEND_NONE ||
ADDRLP4 108
CNSTI4 408
ASGNI4
ADDRLP4 112
CNSTI4 1236
ASGNI4
ADDRLP4 116
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRI4
ADDRLP4 116
INDIRI4
NEI4 $326
ADDRFP4 4
INDIRP4
ADDRLP4 108
INDIRI4
ADDP4
INDIRP4
ADDRLP4 112
INDIRI4
ADDP4
INDIRI4
ADDRLP4 116
INDIRI4
EQI4 $324
LABELV $326
line 722
;721:		ent2->client->ps.forceHandExtend != HANDEXTEND_NONE)
;722:	{
line 723
;723:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $324
line 726
;724:	}
;725:
;726:	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 $329
ADDRFP4 4
INDIRP4
ADDRLP4 120
INDIRI4
ADDP4
INDIRP4
ADDRLP4 124
INDIRI4
ADDP4
INDIRI4
ADDRLP4 128
INDIRI4
BANDI4
ADDRLP4 132
INDIRI4
EQI4 $327
LABELV $329
line 728
;727:		(ent2->client->ps.pm_flags & PMF_DUCKED))
;728:	{
line 729
;729:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $327
line 736
;730:	}
;731://	if ( !InFOV( ent1, ent2, 40, 180 ) || !InFOV( ent2, ent1, 40, 180 ) )
;732://	{
;733://		return qfalse;
;734://	}
;735:
;736:	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 $330
line 737
;737:	{
line 738
;738:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $330
line 740
;739:	}
;740:	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 $332
line 741
;741:	{
line 742
;742:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $332
line 746
;743:	}
;744:
;745:	//T to B lock
;746:	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 126
EQI4 $339
ADDRLP4 168
INDIRI4
CNSTI4 203
EQI4 $339
ADDRLP4 168
INDIRI4
CNSTI4 280
EQI4 $339
ADDRLP4 168
INDIRI4
CNSTI4 357
EQI4 $339
ADDRLP4 168
INDIRI4
CNSTI4 434
NEI4 $334
LABELV $339
line 751
;747:		ent1->client->ps.torsoAnim == BOTH_A2_T__B_ ||
;748:		ent1->client->ps.torsoAnim == BOTH_A3_T__B_ ||
;749:		ent1->client->ps.torsoAnim == BOTH_A4_T__B_ ||
;750:		ent1->client->ps.torsoAnim == BOTH_A5_T__B_ )
;751:	{//ent1 is attacking top-down
line 756
;752:		/*
;753:		if ( ent2->client->ps.torsoAnim == BOTH_P1_S1_T_ ||
;754:			ent2->client->ps.torsoAnim == BOTH_K1_S1_T_ )
;755:		*/
;756:		{//ent2 is blocking at top
line 757
;757:			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 $293
JUMPV
LABELV $334
line 762
;758:		}
;759:		//return qfalse;
;760:	}
;761:
;762:	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 126
EQI4 $345
ADDRLP4 172
INDIRI4
CNSTI4 203
EQI4 $345
ADDRLP4 172
INDIRI4
CNSTI4 280
EQI4 $345
ADDRLP4 172
INDIRI4
CNSTI4 357
EQI4 $345
ADDRLP4 172
INDIRI4
CNSTI4 434
NEI4 $340
LABELV $345
line 767
;763:		ent2->client->ps.torsoAnim == BOTH_A2_T__B_ ||
;764:		ent2->client->ps.torsoAnim == BOTH_A3_T__B_ ||
;765:		ent2->client->ps.torsoAnim == BOTH_A4_T__B_ ||
;766:		ent2->client->ps.torsoAnim == BOTH_A5_T__B_ )
;767:	{//ent2 is attacking top-down
line 772
;768:		/*
;769:		if ( ent1->client->ps.torsoAnim == BOTH_P1_S1_T_ ||
;770:			ent1->client->ps.torsoAnim == BOTH_K1_S1_T_ )
;771:		*/
;772:		{//ent1 is blocking at top
line 773
;773:			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 $293
JUMPV
LABELV $340
line 778
;774:		}
;775:		//return qfalse;
;776:	}
;777:
;778:	if ( ent1->s.number == 0 &&
ADDRLP4 176
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 180
CNSTI4 0
ASGNI4
ADDRLP4 176
INDIRP4
INDIRI4
ADDRLP4 180
INDIRI4
NEI4 $346
ADDRLP4 184
ADDRLP4 176
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 184
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 2
NEI4 $346
ADDRLP4 184
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 180
INDIRI4
GTI4 $346
line 780
;779:		ent1->client->ps.saberBlocking == BLK_WIDE && ent1->client->ps.weaponTime <= 0 )
;780:	{
line 781
;781:		ent1BlockingPlayer = qtrue;
ADDRLP4 0
CNSTI4 1
ASGNI4
line 782
;782:	}
LABELV $346
line 783
;783:	if ( ent2->s.number == 0 &&
ADDRLP4 188
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 192
CNSTI4 0
ASGNI4
ADDRLP4 188
INDIRP4
INDIRI4
ADDRLP4 192
INDIRI4
NEI4 $348
ADDRLP4 196
ADDRLP4 188
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 196
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 2
NEI4 $348
ADDRLP4 196
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 192
INDIRI4
GTI4 $348
line 785
;784:		ent2->client->ps.saberBlocking == BLK_WIDE && ent2->client->ps.weaponTime <= 0 )
;785:	{
line 786
;786:		ent2BlockingPlayer = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 787
;787:	}
LABELV $348
line 790
;788:
;789:	//TR to BL lock
;790:	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 132
EQI4 $355
ADDRLP4 200
INDIRI4
CNSTI4 209
EQI4 $355
ADDRLP4 200
INDIRI4
CNSTI4 286
EQI4 $355
ADDRLP4 200
INDIRI4
CNSTI4 363
EQI4 $355
ADDRLP4 200
INDIRI4
CNSTI4 440
NEI4 $350
LABELV $355
line 795
;791:		ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;792:		ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;793:		ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;794:		ent1->client->ps.torsoAnim == BOTH_A5_TR_BL )
;795:	{//ent1 is attacking diagonally
line 796
;796:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $356
line 797
;797:		{//player will block this anyway
line 798
;798:			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 $293
JUMPV
LABELV $356
line 800
;799:		}
;800:		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 132
EQI4 $364
ADDRLP4 204
INDIRI4
CNSTI4 209
EQI4 $364
ADDRLP4 204
INDIRI4
CNSTI4 286
EQI4 $364
ADDRLP4 204
INDIRI4
CNSTI4 363
EQI4 $364
ADDRLP4 204
INDIRI4
CNSTI4 440
EQI4 $364
ADDRLP4 204
INDIRI4
CNSTI4 513
NEI4 $358
LABELV $364
line 806
;801:			ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;802:			ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;803:			ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;804:			ent2->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;805:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TL )
;806:		{//ent2 is attacking in the opposite diagonal
line 807
;807:			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 $293
JUMPV
LABELV $358
line 809
;808:		}
;809:		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 130
EQI4 $371
ADDRLP4 208
INDIRI4
CNSTI4 207
EQI4 $371
ADDRLP4 208
INDIRI4
CNSTI4 284
EQI4 $371
ADDRLP4 208
INDIRI4
CNSTI4 361
EQI4 $371
ADDRLP4 208
INDIRI4
CNSTI4 438
EQI4 $371
ADDRLP4 208
INDIRI4
CNSTI4 514
NEI4 $365
LABELV $371
line 815
;810:			ent2->client->ps.torsoAnim == BOTH_A2_BR_TL ||
;811:			ent2->client->ps.torsoAnim == BOTH_A3_BR_TL ||
;812:			ent2->client->ps.torsoAnim == BOTH_A4_BR_TL ||
;813:			ent2->client->ps.torsoAnim == BOTH_A5_BR_TL ||
;814:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BL )
;815:		{//ent2 is attacking in the opposite diagonal
line 816
;816:			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 $293
JUMPV
LABELV $365
line 818
;817:		}
;818:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $350
line 821
;819:	}
;820:
;821:	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 132
EQI4 $377
ADDRLP4 204
INDIRI4
CNSTI4 209
EQI4 $377
ADDRLP4 204
INDIRI4
CNSTI4 286
EQI4 $377
ADDRLP4 204
INDIRI4
CNSTI4 363
EQI4 $377
ADDRLP4 204
INDIRI4
CNSTI4 440
NEI4 $372
LABELV $377
line 826
;822:		ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;823:		ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;824:		ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;825:		ent2->client->ps.torsoAnim == BOTH_A5_TR_BL )
;826:	{//ent2 is attacking diagonally
line 827
;827:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $378
line 828
;828:		{//player will block this anyway
line 829
;829:			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 $293
JUMPV
LABELV $378
line 831
;830:		}
;831:		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 132
EQI4 $386
ADDRLP4 208
INDIRI4
CNSTI4 209
EQI4 $386
ADDRLP4 208
INDIRI4
CNSTI4 286
EQI4 $386
ADDRLP4 208
INDIRI4
CNSTI4 363
EQI4 $386
ADDRLP4 208
INDIRI4
CNSTI4 440
EQI4 $386
ADDRLP4 208
INDIRI4
CNSTI4 513
NEI4 $380
LABELV $386
line 837
;832:			ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;833:			ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;834:			ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;835:			ent1->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;836:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TL )
;837:		{//ent1 is attacking in the opposite diagonal
line 838
;838:			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 $293
JUMPV
LABELV $380
line 840
;839:		}
;840:		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 130
EQI4 $393
ADDRLP4 212
INDIRI4
CNSTI4 207
EQI4 $393
ADDRLP4 212
INDIRI4
CNSTI4 284
EQI4 $393
ADDRLP4 212
INDIRI4
CNSTI4 361
EQI4 $393
ADDRLP4 212
INDIRI4
CNSTI4 438
EQI4 $393
ADDRLP4 212
INDIRI4
CNSTI4 514
NEI4 $387
LABELV $393
line 846
;841:			ent1->client->ps.torsoAnim == BOTH_A2_BR_TL ||
;842:			ent1->client->ps.torsoAnim == BOTH_A3_BR_TL ||
;843:			ent1->client->ps.torsoAnim == BOTH_A4_BR_TL ||
;844:			ent1->client->ps.torsoAnim == BOTH_A5_BR_TL ||
;845:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BL )
;846:		{//ent1 is attacking in the opposite diagonal
line 847
;847:			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 $293
JUMPV
LABELV $387
line 849
;848:		}
;849:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $372
line 853
;850:	}
;851:
;852:	//TL to BR lock
;853:	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 129
EQI4 $399
ADDRLP4 208
INDIRI4
CNSTI4 206
EQI4 $399
ADDRLP4 208
INDIRI4
CNSTI4 283
EQI4 $399
ADDRLP4 208
INDIRI4
CNSTI4 360
EQI4 $399
ADDRLP4 208
INDIRI4
CNSTI4 437
NEI4 $394
LABELV $399
line 858
;854:		ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;855:		ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;856:		ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;857:		ent1->client->ps.torsoAnim == BOTH_A5_TL_BR )
;858:	{//ent1 is attacking diagonally
line 859
;859:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $400
line 860
;860:		{//player will block this anyway
line 861
;861:			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 $293
JUMPV
LABELV $400
line 863
;862:		}
;863:		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 129
EQI4 $408
ADDRLP4 212
INDIRI4
CNSTI4 206
EQI4 $408
ADDRLP4 212
INDIRI4
CNSTI4 283
EQI4 $408
ADDRLP4 212
INDIRI4
CNSTI4 360
EQI4 $408
ADDRLP4 212
INDIRI4
CNSTI4 437
EQI4 $408
ADDRLP4 212
INDIRI4
CNSTI4 512
NEI4 $402
LABELV $408
line 869
;864:			ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;865:			ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;866:			ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;867:			ent2->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;868:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TR )
;869:		{//ent2 is attacking in the opposite diagonal
line 870
;870:			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 $293
JUMPV
LABELV $402
line 872
;871:		}
;872:		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 131
EQI4 $415
ADDRLP4 216
INDIRI4
CNSTI4 208
EQI4 $415
ADDRLP4 216
INDIRI4
CNSTI4 285
EQI4 $415
ADDRLP4 216
INDIRI4
CNSTI4 362
EQI4 $415
ADDRLP4 216
INDIRI4
CNSTI4 439
EQI4 $415
ADDRLP4 216
INDIRI4
CNSTI4 515
NEI4 $409
LABELV $415
line 878
;873:			ent2->client->ps.torsoAnim == BOTH_A2_BL_TR ||
;874:			ent2->client->ps.torsoAnim == BOTH_A3_BL_TR ||
;875:			ent2->client->ps.torsoAnim == BOTH_A4_BL_TR ||
;876:			ent2->client->ps.torsoAnim == BOTH_A5_BL_TR ||
;877:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BR )
;878:		{//ent2 is attacking in the opposite diagonal
line 879
;879:			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 $293
JUMPV
LABELV $409
line 881
;880:		}
;881:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $394
line 884
;882:	}
;883:
;884:	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 129
EQI4 $421
ADDRLP4 212
INDIRI4
CNSTI4 206
EQI4 $421
ADDRLP4 212
INDIRI4
CNSTI4 283
EQI4 $421
ADDRLP4 212
INDIRI4
CNSTI4 360
EQI4 $421
ADDRLP4 212
INDIRI4
CNSTI4 437
NEI4 $416
LABELV $421
line 889
;885:		ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;886:		ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;887:		ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;888:		ent2->client->ps.torsoAnim == BOTH_A5_TL_BR )
;889:	{//ent2 is attacking diagonally
line 890
;890:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $422
line 891
;891:		{//player will block this anyway
line 892
;892:			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 $293
JUMPV
LABELV $422
line 894
;893:		}
;894:		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 129
EQI4 $430
ADDRLP4 216
INDIRI4
CNSTI4 206
EQI4 $430
ADDRLP4 216
INDIRI4
CNSTI4 283
EQI4 $430
ADDRLP4 216
INDIRI4
CNSTI4 360
EQI4 $430
ADDRLP4 216
INDIRI4
CNSTI4 437
EQI4 $430
ADDRLP4 216
INDIRI4
CNSTI4 512
NEI4 $424
LABELV $430
line 900
;895:			ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;896:			ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;897:			ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;898:			ent1->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;899:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TR )
;900:		{//ent1 is attacking in the opposite diagonal
line 901
;901:			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 $293
JUMPV
LABELV $424
line 903
;902:		}
;903:		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 131
EQI4 $437
ADDRLP4 220
INDIRI4
CNSTI4 208
EQI4 $437
ADDRLP4 220
INDIRI4
CNSTI4 285
EQI4 $437
ADDRLP4 220
INDIRI4
CNSTI4 362
EQI4 $437
ADDRLP4 220
INDIRI4
CNSTI4 439
EQI4 $437
ADDRLP4 220
INDIRI4
CNSTI4 515
NEI4 $431
LABELV $437
line 909
;904:			ent1->client->ps.torsoAnim == BOTH_A2_BL_TR ||
;905:			ent1->client->ps.torsoAnim == BOTH_A3_BL_TR ||
;906:			ent1->client->ps.torsoAnim == BOTH_A4_BL_TR ||
;907:			ent1->client->ps.torsoAnim == BOTH_A5_BL_TR ||
;908:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BR )
;909:		{//ent1 is attacking in the opposite diagonal
line 910
;910:			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 $293
JUMPV
LABELV $431
line 912
;911:		}
;912:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $416
line 915
;913:	}
;914:	//L to R lock
;915:	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 127
EQI4 $443
ADDRLP4 216
INDIRI4
CNSTI4 204
EQI4 $443
ADDRLP4 216
INDIRI4
CNSTI4 281
EQI4 $443
ADDRLP4 216
INDIRI4
CNSTI4 358
EQI4 $443
ADDRLP4 216
INDIRI4
CNSTI4 435
NEI4 $438
LABELV $443
line 920
;916:		ent1->client->ps.torsoAnim == BOTH_A2__L__R ||
;917:		ent1->client->ps.torsoAnim == BOTH_A3__L__R ||
;918:		ent1->client->ps.torsoAnim == BOTH_A4__L__R ||
;919:		ent1->client->ps.torsoAnim == BOTH_A5__L__R )
;920:	{//ent1 is attacking l to r
line 921
;921:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $444
line 922
;922:		{//player will block this anyway
line 923
;923:			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 $293
JUMPV
LABELV $444
line 925
;924:		}
;925:		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 129
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 206
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 283
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 360
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 437
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 512
EQI4 $453
ADDRLP4 220
INDIRI4
CNSTI4 514
NEI4 $446
LABELV $453
line 932
;926:			ent2->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;927:			ent2->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;928:			ent2->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;929:			ent2->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;930:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TR ||
;931:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BL )
;932:		{//ent2 is attacking or blocking on the r
line 933
;933:			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 $293
JUMPV
LABELV $446
line 935
;934:		}
;935:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $438
line 937
;936:	}
;937:	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 127
EQI4 $459
ADDRLP4 220
INDIRI4
CNSTI4 204
EQI4 $459
ADDRLP4 220
INDIRI4
CNSTI4 281
EQI4 $459
ADDRLP4 220
INDIRI4
CNSTI4 358
EQI4 $459
ADDRLP4 220
INDIRI4
CNSTI4 435
NEI4 $454
LABELV $459
line 942
;938:		ent2->client->ps.torsoAnim == BOTH_A2__L__R ||
;939:		ent2->client->ps.torsoAnim == BOTH_A3__L__R ||
;940:		ent2->client->ps.torsoAnim == BOTH_A4__L__R ||
;941:		ent2->client->ps.torsoAnim == BOTH_A5__L__R )
;942:	{//ent2 is attacking l to r
line 943
;943:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $460
line 944
;944:		{//player will block this anyway
line 945
;945:			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 $293
JUMPV
LABELV $460
line 947
;946:		}
;947:		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 129
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 206
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 283
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 360
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 437
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 512
EQI4 $469
ADDRLP4 224
INDIRI4
CNSTI4 514
NEI4 $462
LABELV $469
line 954
;948:			ent1->client->ps.torsoAnim == BOTH_A2_TL_BR ||
;949:			ent1->client->ps.torsoAnim == BOTH_A3_TL_BR ||
;950:			ent1->client->ps.torsoAnim == BOTH_A4_TL_BR ||
;951:			ent1->client->ps.torsoAnim == BOTH_A5_TL_BR ||
;952:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TR ||
;953:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BL )
;954:		{//ent1 is attacking or blocking on the r
line 955
;955:			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 $293
JUMPV
LABELV $462
line 957
;956:		}
;957:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $454
line 960
;958:	}
;959:	//R to L lock
;960:	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 128
EQI4 $475
ADDRLP4 224
INDIRI4
CNSTI4 205
EQI4 $475
ADDRLP4 224
INDIRI4
CNSTI4 282
EQI4 $475
ADDRLP4 224
INDIRI4
CNSTI4 359
EQI4 $475
ADDRLP4 224
INDIRI4
CNSTI4 436
NEI4 $470
LABELV $475
line 965
;961:		ent1->client->ps.torsoAnim == BOTH_A2__R__L ||
;962:		ent1->client->ps.torsoAnim == BOTH_A3__R__L ||
;963:		ent1->client->ps.torsoAnim == BOTH_A4__R__L ||
;964:		ent1->client->ps.torsoAnim == BOTH_A5__R__L )
;965:	{//ent1 is attacking r to l
line 966
;966:		if ( ent2BlockingPlayer )
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $476
line 967
;967:		{//player will block this anyway
line 968
;968:			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 $293
JUMPV
LABELV $476
line 970
;969:		}
;970:		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 132
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 209
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 286
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 363
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 440
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 513
EQI4 $485
ADDRLP4 228
INDIRI4
CNSTI4 515
NEI4 $478
LABELV $485
line 977
;971:			ent2->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;972:			ent2->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;973:			ent2->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;974:			ent2->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;975:			ent2->client->ps.torsoAnim == BOTH_P1_S1_TL ||
;976:			ent2->client->ps.torsoAnim == BOTH_P1_S1_BR )
;977:		{//ent2 is attacking or blocking on the l
line 978
;978:			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 $293
JUMPV
LABELV $478
line 980
;979:		}
;980:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $470
line 982
;981:	}
;982:	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 128
EQI4 $491
ADDRLP4 228
INDIRI4
CNSTI4 205
EQI4 $491
ADDRLP4 228
INDIRI4
CNSTI4 282
EQI4 $491
ADDRLP4 228
INDIRI4
CNSTI4 359
EQI4 $491
ADDRLP4 228
INDIRI4
CNSTI4 436
NEI4 $486
LABELV $491
line 987
;983:		ent2->client->ps.torsoAnim == BOTH_A2__R__L ||
;984:		ent2->client->ps.torsoAnim == BOTH_A3__R__L ||
;985:		ent2->client->ps.torsoAnim == BOTH_A4__R__L ||
;986:		ent2->client->ps.torsoAnim == BOTH_A5__R__L )
;987:	{//ent2 is attacking r to l
line 988
;988:		if ( ent1BlockingPlayer )
ADDRLP4 0
INDIRI4
CNSTI4 0
EQI4 $492
line 989
;989:		{//player will block this anyway
line 990
;990:			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 $293
JUMPV
LABELV $492
line 992
;991:		}
;992:		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 132
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 209
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 286
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 363
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 440
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 513
EQI4 $501
ADDRLP4 232
INDIRI4
CNSTI4 515
NEI4 $494
LABELV $501
line 999
;993:			ent1->client->ps.torsoAnim == BOTH_A2_TR_BL ||
;994:			ent1->client->ps.torsoAnim == BOTH_A3_TR_BL ||
;995:			ent1->client->ps.torsoAnim == BOTH_A4_TR_BL ||
;996:			ent1->client->ps.torsoAnim == BOTH_A5_TR_BL ||
;997:			ent1->client->ps.torsoAnim == BOTH_P1_S1_TL ||
;998:			ent1->client->ps.torsoAnim == BOTH_P1_S1_BR )
;999:		{//ent1 is attacking or blocking on the l
line 1000
;1000:			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 $293
JUMPV
LABELV $494
line 1002
;1001:		}
;1002:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $293
JUMPV
LABELV $486
line 1004
;1003:	}
;1004:	if ( !Q_irand( 0, 10 ) )
CNSTI4 0
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 232
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 232
INDIRI4
CNSTI4 0
NEI4 $502
line 1005
;1005:	{
line 1006
;1006:		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 $293
JUMPV
LABELV $502
line 1008
;1007:	}
;1008:	return qfalse;
CNSTI4 0
RETI4
LABELV $293
endproc WP_SabersCheckLock 240 16
export CheckSaberDamage
proc CheckSaberDamage 1240 32
line 1012
;1009:}
;1010:
;1011:qboolean CheckSaberDamage(gentity_t *self, vec3_t saberStart, vec3_t saberEnd, qboolean doInterpolate)
;1012:{
line 1015
;1013:	trace_t tr;
;1014:	vec3_t dir;
;1015:	int dmg = 0;
ADDRLP4 1080
CNSTI4 0
ASGNI4
line 1016
;1016:	int attackStr = 0;
ADDRLP4 1100
CNSTI4 0
ASGNI4
line 1017
;1017:	qboolean idleDamage = qfalse;
ADDRLP4 1104
CNSTI4 0
ASGNI4
line 1018
;1018:	qboolean didHit = qfalse;
ADDRLP4 1096
CNSTI4 0
ASGNI4
line 1020
;1019:
;1020:	if (self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1300
ADDP4
INDIRI4
CNSTI4 0
EQI4 $505
line 1021
;1021:	{
line 1022
;1022:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $505
line 1025
;1023:	}
;1024:
;1025:	if (doInterpolate)
ADDRFP4 12
INDIRI4
CNSTI4 0
EQI4 $507
line 1026
;1026:	{ //This didn't quite work out like I hoped. But it's better than nothing. Sort of.
line 1028
;1027:		vec3_t oldSaberStart, oldSaberEnd, saberDif, oldSaberDif;
;1028:		int traceTests = 0;
ADDRLP4 1160
CNSTI4 0
ASGNI4
line 1029
;1029:		float trDif = 8;
ADDRLP4 1108
CNSTF4 1090519040
ASGNF4
line 1031
;1030:
;1031:		VectorCopy(self->client->lastSaberBase, oldSaberStart);
ADDRLP4 1112
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRB
ASGNB 12
line 1032
;1032:		VectorCopy(self->client->lastSaberTip, oldSaberEnd);
ADDRLP4 1124
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1720
ADDP4
INDIRB
ASGNB 12
line 1034
;1033:
;1034:		VectorSubtract(saberStart, saberEnd, saberDif);
ADDRLP4 1164
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1168
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1136
ADDRLP4 1164
INDIRP4
INDIRF4
ADDRLP4 1168
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1172
CNSTI4 4
ASGNI4
ADDRLP4 1136+4
ADDRLP4 1164
INDIRP4
ADDRLP4 1172
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1168
INDIRP4
ADDRLP4 1172
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1176
CNSTI4 8
ASGNI4
ADDRLP4 1136+8
ADDRFP4 4
INDIRP4
ADDRLP4 1176
INDIRI4
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
ADDRLP4 1176
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1035
;1035:		VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif);
ADDRLP4 1148
ADDRLP4 1112
INDIRF4
ADDRLP4 1124
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1148+4
ADDRLP4 1112+4
INDIRF4
ADDRLP4 1124+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1148+8
ADDRLP4 1112+8
INDIRF4
ADDRLP4 1124+8
INDIRF4
SUBF4
ASGNF4
line 1037
;1036:
;1037:		VectorNormalize(saberDif);
ADDRLP4 1136
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1038
;1038:		VectorNormalize(oldSaberDif);
ADDRLP4 1148
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1040
;1039:
;1040:		saberEnd[0] = saberStart[0] - (saberDif[0]*trDif);
ADDRFP4 8
INDIRP4
ADDRFP4 4
INDIRP4
INDIRF4
ADDRLP4 1136
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1041
;1041:		saberEnd[1] = saberStart[1] - (saberDif[1]*trDif);
ADDRLP4 1180
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1180
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1180
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1136+4
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1042
;1042:		saberEnd[2] = saberStart[2] - (saberDif[2]*trDif);
ADDRLP4 1184
CNSTI4 8
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1184
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1184
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1136+8
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1044
;1043:
;1044:		oldSaberEnd[0] = oldSaberStart[0] - (oldSaberDif[0]*trDif);
ADDRLP4 1124
ADDRLP4 1112
INDIRF4
ADDRLP4 1148
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1045
;1045:		oldSaberEnd[1] = oldSaberStart[1] - (oldSaberDif[1]*trDif);
ADDRLP4 1124+4
ADDRLP4 1112+4
INDIRF4
ADDRLP4 1148+4
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1046
;1046:		oldSaberEnd[2] = oldSaberStart[2] - (oldSaberDif[2]*trDif);
ADDRLP4 1124+8
ADDRLP4 1112+8
INDIRF4
ADDRLP4 1148+8
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1050
;1047:
;1048:		//G_TestLine(oldSaberEnd, saberEnd, 0x0000ff, 50);
;1049:
;1050:		trap_Trace(&tr, saberEnd, NULL, NULL, saberStart, self->s.number, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER));
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1188
CNSTP4 0
ASGNP4
ADDRLP4 1188
INDIRP4
ARGP4
ADDRLP4 1188
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
CNSTI4 262417
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1052
;1051:
;1052:		trDif++;
ADDRLP4 1108
ADDRLP4 1108
INDIRF4
CNSTF4 1065353216
ADDF4
ASGNF4
ADDRGP4 $526
JUMPV
LABELV $525
line 1055
;1053:
;1054:		while (tr.fraction == 1.0 && traceTests < 4 && tr.entityNum >= ENTITYNUM_NONE)
;1055:		{
line 1056
;1056:			VectorCopy(self->client->lastSaberBase, oldSaberStart);
ADDRLP4 1112
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
INDIRB
ASGNB 12
line 1057
;1057:			VectorCopy(self->client->lastSaberTip, oldSaberEnd);
ADDRLP4 1124
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1720
ADDP4
INDIRB
ASGNB 12
line 1059
;1058:
;1059:			VectorSubtract(saberStart, saberEnd, saberDif);
ADDRLP4 1192
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1196
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1136
ADDRLP4 1192
INDIRP4
INDIRF4
ADDRLP4 1196
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1200
CNSTI4 4
ASGNI4
ADDRLP4 1136+4
ADDRLP4 1192
INDIRP4
ADDRLP4 1200
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1196
INDIRP4
ADDRLP4 1200
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1204
CNSTI4 8
ASGNI4
ADDRLP4 1136+8
ADDRFP4 4
INDIRP4
ADDRLP4 1204
INDIRI4
ADDP4
INDIRF4
ADDRFP4 8
INDIRP4
ADDRLP4 1204
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1060
;1060:			VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif);
ADDRLP4 1148
ADDRLP4 1112
INDIRF4
ADDRLP4 1124
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1148+4
ADDRLP4 1112+4
INDIRF4
ADDRLP4 1124+4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1148+8
ADDRLP4 1112+8
INDIRF4
ADDRLP4 1124+8
INDIRF4
SUBF4
ASGNF4
line 1062
;1061:
;1062:			VectorNormalize(saberDif);
ADDRLP4 1136
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1063
;1063:			VectorNormalize(oldSaberDif);
ADDRLP4 1148
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1065
;1064:
;1065:			saberEnd[0] = saberStart[0] - (saberDif[0]*trDif);
ADDRFP4 8
INDIRP4
ADDRFP4 4
INDIRP4
INDIRF4
ADDRLP4 1136
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1066
;1066:			saberEnd[1] = saberStart[1] - (saberDif[1]*trDif);
ADDRLP4 1208
CNSTI4 4
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1208
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1208
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1136+4
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1067
;1067:			saberEnd[2] = saberStart[2] - (saberDif[2]*trDif);
ADDRLP4 1212
CNSTI4 8
ASGNI4
ADDRFP4 8
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
ADDRFP4 4
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1136+8
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1069
;1068:
;1069:			oldSaberEnd[0] = oldSaberStart[0] - (oldSaberDif[0]*trDif);
ADDRLP4 1124
ADDRLP4 1112
INDIRF4
ADDRLP4 1148
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1070
;1070:			oldSaberEnd[1] = oldSaberStart[1] - (oldSaberDif[1]*trDif);
ADDRLP4 1124+4
ADDRLP4 1112+4
INDIRF4
ADDRLP4 1148+4
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1071
;1071:			oldSaberEnd[2] = oldSaberStart[2] - (oldSaberDif[2]*trDif);
ADDRLP4 1124+8
ADDRLP4 1112+8
INDIRF4
ADDRLP4 1148+8
INDIRF4
ADDRLP4 1108
INDIRF4
MULF4
SUBF4
ASGNF4
line 1075
;1072:
;1073:			//G_TestLine(oldSaberEnd, saberEnd, 0x0000ff, 50);
;1074:
;1075:			trap_Trace(&tr, saberEnd, NULL, NULL, saberStart, self->s.number, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER));
ADDRLP4 0
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRLP4 1216
CNSTP4 0
ASGNP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRLP4 1216
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
CNSTI4 262417
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1077
;1076:
;1077:			traceTests++;
ADDRLP4 1160
ADDRLP4 1160
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1078
;1078:			trDif += 8;
ADDRLP4 1108
ADDRLP4 1108
INDIRF4
CNSTF4 1090519040
ADDF4
ASGNF4
line 1079
;1079:		}
LABELV $526
line 1054
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $547
ADDRLP4 1160
INDIRI4
CNSTI4 4
GEI4 $547
ADDRLP4 0+52
INDIRI4
CNSTI4 1023
GEI4 $525
LABELV $547
line 1080
;1080:	}
ADDRGP4 $508
JUMPV
LABELV $507
line 1082
;1081:	else
;1082:	{
line 1083
;1083:		trap_Trace(&tr, saberStart, NULL, NULL, saberEnd, self->s.number, (MASK_PLAYERSOLID|CONTENTS_LIGHTSABER));
ADDRLP4 0
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 1108
CNSTP4 0
ASGNP4
ADDRLP4 1108
INDIRP4
ARGP4
ADDRLP4 1108
INDIRP4
ARGP4
ADDRFP4 8
INDIRP4
ARGP4
ADDRFP4 0
INDIRP4
INDIRI4
ARGI4
CNSTI4 262417
ARGI4
ADDRGP4 trap_Trace
CALLV
pop
line 1084
;1084:	}
LABELV $508
line 1086
;1085:
;1086:	if (SaberAttacking(self) &&
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1108
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 1108
INDIRI4
CNSTI4 0
EQI4 $548
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $548
line 1088
;1087:		self->client->ps.saberAttackWound < level.time)
;1088:	{ //this animation is that of the last attack movement, and so it should do full damage
line 1089
;1089:		dmg = SABER_HITDAMAGE;//*self->client->ps.fd.saberAnimLevel;
ADDRLP4 1080
CNSTI4 35
ASGNI4
line 1091
;1090:
;1091:		if (self->client->ps.fd.saberAnimLevel == 3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 3
NEI4 $551
line 1092
;1092:		{
line 1093
;1093:			dmg = 100;
ADDRLP4 1080
CNSTI4 100
ASGNI4
line 1094
;1094:		}
ADDRGP4 $552
JUMPV
LABELV $551
line 1095
;1095:		else if (self->client->ps.fd.saberAnimLevel == 2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 2
NEI4 $553
line 1096
;1096:		{
line 1097
;1097:			dmg = 60;
ADDRLP4 1080
CNSTI4 60
ASGNI4
line 1098
;1098:		}
LABELV $553
LABELV $552
line 1100
;1099:
;1100:		attackStr = self->client->ps.fd.saberAnimLevel;
ADDRLP4 1100
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
ASGNI4
line 1101
;1101:	}
ADDRGP4 $549
JUMPV
LABELV $548
line 1102
;1102:	else if (self->client->ps.saberIdleWound < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 736
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $555
line 1103
;1103:	{ //just touching, do minimal damage and only check for it every 200ms (mainly to cut down on network traffic for hit events)
line 1104
;1104:		dmg = 5;
ADDRLP4 1080
CNSTI4 5
ASGNI4
line 1105
;1105:		self->client->ps.saberIdleWound = level.time + 200;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 736
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 200
ADDI4
ASGNI4
line 1106
;1106:		idleDamage = qtrue;
ADDRLP4 1104
CNSTI4 1
ASGNI4
line 1107
;1107:	}
LABELV $555
LABELV $549
line 1109
;1108:
;1109:	if (!dmg)
ADDRLP4 1080
INDIRI4
CNSTI4 0
NEI4 $559
line 1110
;1110:	{
line 1111
;1111:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $559
line 1114
;1112:	}
;1113:
;1114:	if (dmg > 5 && self->client->ps.isJediMaster)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $561
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
CNSTI4 0
EQI4 $561
line 1115
;1115:	{ //give the Jedi Master more saber attack power
line 1116
;1116:		dmg *= 2;
ADDRLP4 1080
ADDRLP4 1080
INDIRI4
CNSTI4 1
LSHI4
ASGNI4
line 1117
;1117:	}
LABELV $561
line 1119
;1118:
;1119:	VectorSubtract(saberEnd, saberStart, dir);
ADDRLP4 1112
ADDRFP4 8
INDIRP4
ASGNP4
ADDRLP4 1116
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 1084
ADDRLP4 1112
INDIRP4
INDIRF4
ADDRLP4 1116
INDIRP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1120
CNSTI4 4
ASGNI4
ADDRLP4 1084+4
ADDRLP4 1112
INDIRP4
ADDRLP4 1120
INDIRI4
ADDP4
INDIRF4
ADDRLP4 1116
INDIRP4
ADDRLP4 1120
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
ADDRLP4 1124
CNSTI4 8
ASGNI4
ADDRLP4 1084+8
ADDRFP4 8
INDIRP4
ADDRLP4 1124
INDIRI4
ADDP4
INDIRF4
ADDRFP4 4
INDIRP4
ADDRLP4 1124
INDIRI4
ADDP4
INDIRF4
SUBF4
ASGNF4
line 1120
;1120:	VectorNormalize(dir);
ADDRLP4 1084
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1126
;1121:
;1122:	//rww - I'm saying || tr.startsolid here, because otherwise your saber tends to skip positions and go through
;1123:	//people, and the compensation traces start in their bbox too. Which results in the saber passing through people
;1124:	//when you visually cut right through them. Which sucks.
;1125:
;1126:	if ((tr.fraction != 1 || tr.startsolid) &&
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $572
ADDRLP4 0+4
INDIRI4
CNSTI4 0
EQI4 $565
LABELV $572
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+680
ADDP4
INDIRI4
CNSTI4 0
EQI4 $565
ADDRLP4 0+52
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $565
line 1131
;1127:		/*(!g_entities[tr.entityNum].client || !g_entities[tr.entityNum].client->ps.usingATST) &&*/
;1128:		//g_entities[tr.entityNum].client &&
;1129:		g_entities[tr.entityNum].takedamage &&
;1130:		tr.entityNum != self->s.number)
;1131:	{
line 1133
;1132:		gentity_t *te;
;1133:		qboolean unblockable = qfalse;
ADDRLP4 1132
CNSTI4 0
ASGNI4
line 1135
;1134:
;1135:		if (idleDamage &&
ADDRLP4 1104
INDIRI4
CNSTI4 0
EQI4 $573
ADDRLP4 1136
CNSTI4 828
ASGNI4
ADDRLP4 1136
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $573
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1136
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 1140
ADDRGP4 OnSameTeam
CALLI4
ASGNI4
ADDRLP4 1144
CNSTI4 0
ASGNI4
ADDRLP4 1140
INDIRI4
ADDRLP4 1144
INDIRI4
EQI4 $573
ADDRGP4 g_friendlySaber+12
INDIRI4
ADDRLP4 1144
INDIRI4
NEI4 $573
line 1139
;1136:			g_entities[tr.entityNum].client &&
;1137:			OnSameTeam(self, &g_entities[tr.entityNum]) &&
;1138:			!g_friendlySaber.integer)
;1139:		{
line 1140
;1140:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $573
line 1143
;1141:		}
;1142:
;1143:		if (g_entities[tr.entityNum].inuse && g_entities[tr.entityNum].client &&
ADDRLP4 1148
CNSTI4 828
ASGNI4
ADDRLP4 1152
CNSTI4 0
ASGNI4
ADDRLP4 1148
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 1152
INDIRI4
EQI4 $579
ADDRLP4 1148
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $579
ADDRLP4 1148
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
ADDRLP4 1152
INDIRI4
EQI4 $579
ADDRLP4 1148
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $579
line 1146
;1144:			g_entities[tr.entityNum].client->ps.duelInProgress &&
;1145:			g_entities[tr.entityNum].client->ps.duelIndex != self->s.number)
;1146:		{
line 1147
;1147:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $579
line 1150
;1148:		}
;1149:
;1150:		if (g_entities[tr.entityNum].inuse && g_entities[tr.entityNum].client &&
ADDRLP4 1156
CNSTI4 828
ASGNI4
ADDRLP4 1160
CNSTI4 0
ASGNI4
ADDRLP4 1156
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 1160
INDIRI4
EQI4 $589
ADDRLP4 1156
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $589
ADDRLP4 1164
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1164
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
ADDRLP4 1160
INDIRI4
EQI4 $589
ADDRLP4 1164
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRLP4 1156
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
INDIRI4
EQI4 $589
line 1153
;1151:			self->client->ps.duelInProgress &&
;1152:			self->client->ps.duelIndex != g_entities[tr.entityNum].s.number)
;1153:		{
line 1154
;1154:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $589
line 1157
;1155:		}
;1156:
;1157:		didHit = qtrue;
ADDRLP4 1096
CNSTI4 1
ASGNI4
line 1159
;1158:
;1159:		if (self->client->ps.saberMove == LS_A_BACK ||
ADDRLP4 1168
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 1168
INDIRI4
CNSTI4 12
EQI4 $600
ADDRLP4 1168
INDIRI4
CNSTI4 13
EQI4 $600
ADDRLP4 1168
INDIRI4
CNSTI4 11
EQI4 $600
ADDRLP4 1168
INDIRI4
CNSTI4 15
NEI4 $596
LABELV $600
line 1163
;1160:			self->client->ps.saberMove == LS_A_BACK_CR ||
;1161:			self->client->ps.saberMove == LS_A_BACKSTAB ||
;1162:			self->client->ps.saberMove == LS_A_JUMP_T__B_)
;1163:		{
line 1164
;1164:			unblockable = qtrue;
ADDRLP4 1132
CNSTI4 1
ASGNI4
line 1165
;1165:			if (self->client->ps.saberMove == LS_A_JUMP_T__B_)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 15
NEI4 $601
line 1166
;1166:			{ //do extra damage for special unblockables
line 1167
;1167:				dmg += 40;
ADDRLP4 1080
ADDRLP4 1080
INDIRI4
CNSTI4 40
ADDI4
ASGNI4
line 1168
;1168:			}
ADDRGP4 $602
JUMPV
LABELV $601
line 1170
;1169:			else
;1170:			{
line 1171
;1171:				dmg += 20;
ADDRLP4 1080
ADDRLP4 1080
INDIRI4
CNSTI4 20
ADDI4
ASGNI4
line 1172
;1172:			}
LABELV $602
line 1173
;1173:		}
LABELV $596
line 1175
;1174:
;1175:		if (g_entities[tr.entityNum].client && !unblockable && WP_SaberCanBlock(&g_entities[tr.entityNum], tr.endpos, 0, MOD_SABER, qfalse, attackStr))
ADDRLP4 1172
CNSTI4 828
ASGNI4
ADDRLP4 1172
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $603
ADDRLP4 1176
CNSTI4 0
ASGNI4
ADDRLP4 1132
INDIRI4
ADDRLP4 1176
INDIRI4
NEI4 $603
ADDRLP4 1172
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1176
INDIRI4
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 1176
INDIRI4
ARGI4
ADDRLP4 1100
INDIRI4
ARGI4
ADDRLP4 1180
ADDRGP4 WP_SaberCanBlock
CALLI4
ASGNI4
ADDRLP4 1180
INDIRI4
CNSTI4 0
EQI4 $603
line 1176
;1176:		{
line 1177
;1177:			te = G_TempEntity( tr.endpos, EV_SABER_BLOCK );
ADDRLP4 0+12
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 1184
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1128
ADDRLP4 1184
INDIRP4
ASGNP4
line 1178
;1178:			VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1128
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1179
;1179:			VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1128
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1180
;1180:			te->s.eventParm = 1;
ADDRLP4 1128
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1182
;1181:
;1182:			if (dmg > 5)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $612
line 1183
;1183:			{
line 1184
;1184:				if ((g_entities[tr.entityNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK] - self->client->ps.fd.forcePowerLevel[FP_SABERATTACK]) > 1 &&
ADDRLP4 1188
CNSTI4 992
ASGNI4
ADDRLP4 1192
CNSTI4 1
ASGNI4
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
ADDRLP4 1188
INDIRI4
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ADDRLP4 1188
INDIRI4
ADDP4
INDIRI4
SUBI4
ADDRLP4 1192
INDIRI4
LEI4 $614
ADDRLP4 1192
INDIRI4
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1196
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1196
INDIRI4
CNSTI4 9
GEI4 $614
line 1186
;1185:					Q_irand(1, 10) < 9) //used to be < 7
;1186:				{ //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 1187
;1187:					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 1200
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1200
INDIRI4
CNSTI4 0
EQI4 $615
line 1188
;1188:					{	
line 1189
;1189:						self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1190
;1190:						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 1191
;1191:						return didHit;
ADDRLP4 1096
INDIRI4
RETI4
ADDRGP4 $504
JUMPV
line 1193
;1192:					}
;1193:				}
LABELV $614
line 1194
;1194:				else if (Q_irand(1, 10) < 3)
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1200
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1200
INDIRI4
CNSTI4 3
GEI4 $623
line 1195
;1195:				{ //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 1196
;1196:					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 1204
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1204
INDIRI4
CNSTI4 0
EQI4 $625
line 1197
;1197:					{	
line 1198
;1198:						self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1199
;1199:						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 1200
;1200:						return didHit;
ADDRLP4 1096
INDIRI4
RETI4
ADDRGP4 $504
JUMPV
LABELV $625
line 1202
;1201:					}
;1202:				}
LABELV $623
LABELV $615
line 1203
;1203:			}
LABELV $612
line 1206
;1204:
;1205:			//our attack was blocked, so bounce back?
;1206:			if (dmg > 5)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $630
line 1207
;1207:			{
line 1208
;1208:				self->client->ps.weaponTime = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 1209
;1209:				self->client->ps.weaponstate = WEAPON_READY;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 1210
;1210:				self->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 1212
;1211:
;1212:				self->client->ps.saberBlockTime = level.time + (350 - (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND]*100));//300;
ADDRLP4 1188
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1188
INDIRP4
CNSTI4 744
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 350
CNSTI4 100
ADDRLP4 1188
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
MULI4
SUBI4
ADDI4
ASGNI4
line 1213
;1213:			}
LABELV $630
line 1214
;1214:			self->client->ps.saberAttackWound = level.time + 300;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 1216
;1215:
;1216:			if (self->client->ps.fd.saberAnimLevel >= FORCE_LEVEL_3 && dmg > 5 && g_entities[tr.entityNum].client->ps.saberMove != LS_READY && g_entities[tr.entityNum].client->ps.saberMove != LS_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 3
LTI4 $566
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $566
ADDRLP4 1188
CNSTI4 828
ASGNI4
ADDRLP4 1192
CNSTI4 512
ASGNI4
ADDRLP4 1188
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
ADDRLP4 1192
INDIRI4
ADDP4
INDIRI4
CNSTI4 1
EQI4 $566
ADDRLP4 1188
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
ADDRLP4 1192
INDIRI4
ADDP4
INDIRI4
CNSTI4 0
EQI4 $566
line 1217
;1217:			{
line 1218
;1218:				g_entities[tr.entityNum].client->ps.weaponTime = 0;
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 1219
;1219:				g_entities[tr.entityNum].client->ps.weaponstate = WEAPON_READY;
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 1220
;1220:				g_entities[tr.entityNum].client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 1222
;1221:
;1222:				g_entities[tr.entityNum].client->ps.saberBlockTime = level.time + (350 - (g_entities[tr.entityNum].client->ps.fd.forcePowerLevel[FP_SABERDEFEND]*100));//300;
ADDRLP4 1196
CNSTI4 828
ASGNI4
ADDRLP4 1196
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 744
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 350
CNSTI4 100
ADDRLP4 1196
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
MULI4
SUBI4
ADDI4
ASGNI4
line 1223
;1223:			}
line 1245
;1224:
;1225:			//NOTE: Actual blocking is handled in WP_SaberCanBlock
;1226:			/*
;1227:			if (dmg > 5)
;1228:			{ //play block anim on other person
;1229:				gentity_t *otherhit = &g_entities[tr.entityNum];
;1230:
;1231:				if (otherhit && otherhit->client)
;1232:				{
;1233:				//	WP_SaberBlockNonRandom(otherhit, tr.endpos, qfalse);
;1234:
;1235:					otherhit->client->ps.weaponTime = 0;
;1236:					otherhit->client->ps.weaponstate = WEAPON_READY;
;1237:					otherhit->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
;1238:
;1239:					self->client->ps.saberBlockTime = level.time + 300;
;1240:
;1241:					otherhit->client->ps.saberAttackWound = level.time + 300;
;1242:				}
;1243:			}
;1244:			*/
;1245:		}
ADDRGP4 $566
JUMPV
LABELV $603
line 1247
;1246:		else
;1247:		{
line 1248
;1248:			if (g_entities[tr.entityNum].client && g_entities[tr.entityNum].client->ps.usingATST)
ADDRLP4 1184
CNSTI4 828
ASGNI4
ADDRLP4 1184
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $651
ADDRLP4 1184
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $651
line 1249
;1249:			{
line 1250
;1250:				dmg *= 0.1;
ADDRLP4 1080
CNSTF4 1036831949
ADDRLP4 1080
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1251
;1251:			}
LABELV $651
line 1253
;1252:
;1253:			if (g_entities[tr.entityNum].client && !g_entities[tr.entityNum].client->ps.fd.forcePowerLevel[FP_SABERATTACK])
ADDRLP4 1188
CNSTI4 828
ASGNI4
ADDRLP4 1188
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $657
ADDRLP4 1188
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 992
ADDP4
INDIRI4
CNSTI4 0
NEI4 $657
line 1254
;1254:			{ //not a "jedi", so make them suffer more
line 1255
;1255:				if (dmg > 5)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $663
line 1256
;1256:				{ //don't bother increasing just for idle touch damage
line 1257
;1257:					dmg *= 1.5;
ADDRLP4 1080
CNSTF4 1069547520
ADDRLP4 1080
INDIRI4
CVIF4 4
MULF4
CVFI4 4
ASGNI4
line 1258
;1258:				}
LABELV $663
line 1259
;1259:			}
LABELV $657
line 1261
;1260:
;1261:			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 1192
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1192
INDIRP4
ARGP4
ADDRLP4 1192
INDIRP4
ARGP4
ADDRLP4 1084
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1080
INDIRI4
ARGI4
CNSTI4 0
ARGI4
CNSTI4 3
ARGI4
ADDRGP4 G_Damage
CALLV
pop
line 1263
;1262:
;1263:			te = G_TempEntity( tr.endpos, EV_SABER_HIT );
ADDRLP4 0+12
ARGP4
CNSTI4 27
ARGI4
ADDRLP4 1196
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1128
ADDRLP4 1196
INDIRP4
ASGNP4
line 1264
;1264:			VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1128
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1265
;1265:			VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1128
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1267
;1266:			
;1267:			if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1200
ADDRLP4 1128
INDIRP4
ASGNP4
ADDRLP4 1204
CNSTF4 0
ASGNF4
ADDRLP4 1200
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $670
ADDRLP4 1200
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $670
ADDRLP4 1200
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $670
line 1268
;1268:			{ //don't let it play with no direction
line 1269
;1269:				te->s.angles[1] = 1;
ADDRLP4 1128
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 1270
;1270:			}
LABELV $670
line 1272
;1271:
;1272:			if (g_entities[tr.entityNum].client)
CNSTI4 828
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $672
line 1273
;1273:			{
line 1274
;1274:				te->s.eventParm = 1;
ADDRLP4 1128
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1275
;1275:			}
ADDRGP4 $673
JUMPV
LABELV $672
line 1277
;1276:			else
;1277:			{
line 1278
;1278:				te->s.eventParm = 0;
ADDRLP4 1128
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 0
ASGNI4
line 1279
;1279:			}
LABELV $673
line 1281
;1280:
;1281:			self->client->ps.saberAttackWound = level.time + 100;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
ASGNI4
line 1282
;1282:		}
line 1283
;1283:	}
ADDRGP4 $566
JUMPV
LABELV $565
line 1284
;1284:	else if ((tr.fraction != 1 || tr.startsolid) &&
ADDRLP4 0+8
INDIRF4
CNSTF4 1065353216
NEF4 $687
ADDRLP4 0+4
INDIRI4
CNSTI4 0
EQI4 $677
LABELV $687
ADDRLP4 1128
CNSTI4 828
ASGNI4
ADDRLP4 1128
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
CNSTI4 0
EQI4 $677
ADDRLP4 1128
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+44
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $677
line 1287
;1285:		(g_entities[tr.entityNum].r.contents & CONTENTS_LIGHTSABER) &&
;1286:		g_entities[tr.entityNum].r.contents != -1)
;1287:	{ //saber clash
line 1289
;1288:		gentity_t *te;
;1289:		gentity_t *otherOwner = &g_entities[g_entities[tr.entityNum].r.ownerNum];
ADDRLP4 1140
CNSTI4 828
ASGNI4
ADDRLP4 1132
ADDRLP4 1140
INDIRI4
ADDRLP4 1140
INDIRI4
ADDRLP4 0+52
INDIRI4
MULI4
ADDRGP4 g_entities+296+100
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1291
;1290:
;1291:		if (otherOwner &&
ADDRLP4 1148
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1148
INDIRU4
EQU4 $691
ADDRLP4 1132
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $691
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1148
INDIRU4
EQU4 $691
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1152
ADDRGP4 OnSameTeam
CALLI4
ASGNI4
ADDRLP4 1156
CNSTI4 0
ASGNI4
ADDRLP4 1152
INDIRI4
ADDRLP4 1156
INDIRI4
EQI4 $691
ADDRGP4 g_friendlySaber+12
INDIRI4
ADDRLP4 1156
INDIRI4
NEI4 $691
line 1296
;1292:			otherOwner->inuse &&
;1293:			otherOwner->client &&
;1294:			OnSameTeam(self, otherOwner) &&
;1295:			!g_friendlySaber.integer)
;1296:		{
line 1297
;1297:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $691
line 1300
;1298:		}
;1299:
;1300:		if (otherOwner && otherOwner->client &&
ADDRLP4 1164
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1164
INDIRU4
EQU4 $694
ADDRLP4 1168
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1168
INDIRP4
CVPU4 4
ADDRLP4 1164
INDIRU4
EQU4 $694
ADDRLP4 1168
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
CNSTI4 0
EQI4 $694
ADDRLP4 1168
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
INDIRI4
EQI4 $694
line 1303
;1301:			otherOwner->client->ps.duelInProgress &&
;1302:			otherOwner->client->ps.duelIndex != self->s.number)
;1303:		{
line 1304
;1304:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $694
line 1307
;1305:		}
;1306:
;1307:		if (otherOwner && otherOwner->client &&
ADDRLP4 1176
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1176
INDIRU4
EQU4 $696
ADDRLP4 1180
CNSTI4 408
ASGNI4
ADDRLP4 1132
INDIRP4
ADDRLP4 1180
INDIRI4
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1176
INDIRU4
EQU4 $696
ADDRLP4 1184
ADDRFP4 0
INDIRP4
ADDRLP4 1180
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1184
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
CNSTI4 0
EQI4 $696
ADDRLP4 1184
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRLP4 1132
INDIRP4
INDIRI4
EQI4 $696
line 1310
;1308:			self->client->ps.duelInProgress &&
;1309:			self->client->ps.duelIndex != otherOwner->s.number)
;1310:		{
line 1311
;1311:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $696
line 1314
;1312:		}
;1313:
;1314:		didHit = qtrue;
ADDRLP4 1096
CNSTI4 1
ASGNI4
line 1316
;1315:
;1316:		te = G_TempEntity( tr.endpos, EV_SABER_BLOCK );
ADDRLP4 0+12
ARGP4
CNSTI4 28
ARGI4
ADDRLP4 1188
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 1136
ADDRLP4 1188
INDIRP4
ASGNP4
line 1318
;1317:
;1318:		VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 1136
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 0+12
INDIRB
ASGNB 12
line 1319
;1319:		VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 1136
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 0+24
INDIRB
ASGNB 12
line 1320
;1320:		te->s.eventParm = 1;
ADDRLP4 1136
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1324
;1321:
;1322:		//WP_SaberBlockNonRandom(self, tr.endpos, qfalse);
;1323:
;1324:		if (otherOwner && otherOwner->client && otherOwner->client->ps.saberInFlight)
ADDRLP4 1196
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1196
INDIRU4
EQU4 $701
ADDRLP4 1200
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1200
INDIRP4
CVPU4 4
ADDRLP4 1196
INDIRU4
EQU4 $701
ADDRLP4 1200
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $701
line 1325
;1325:		{
line 1326
;1326:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $504
JUMPV
LABELV $701
line 1329
;1327:		}
;1328:
;1329:		if (self->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 3
GEI4 $703
line 1330
;1330:		{
line 1331
;1331:			self->client->ps.weaponTime = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 1332
;1332:			self->client->ps.weaponstate = WEAPON_READY;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 1333
;1333:			self->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 1334
;1334:			self->client->ps.saberBlockTime = level.time + (350 - (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND]*100));//300;
ADDRLP4 1204
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1204
INDIRP4
CNSTI4 744
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 350
CNSTI4 100
ADDRLP4 1204
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
MULI4
SUBI4
ADDI4
ASGNI4
line 1336
;1335:
;1336:			if (otherOwner && otherOwner->client)
ADDRLP4 1212
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1212
INDIRU4
EQU4 $704
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 1212
INDIRU4
EQU4 $704
line 1337
;1337:			{
line 1338
;1338:				if (otherOwner->client->ps.weaponTime < 1 || otherOwner->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3)
ADDRLP4 1216
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1216
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 1
LTI4 $710
ADDRLP4 1216
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 3
GEI4 $704
LABELV $710
line 1339
;1339:				{
line 1340
;1340:					WP_SaberCanBlock(otherOwner, tr.endpos, 0, MOD_SABER, qfalse, 1);
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1220
CNSTI4 0
ASGNI4
ADDRLP4 1220
INDIRI4
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 1220
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRGP4 WP_SaberCanBlock
CALLI4
pop
line 1341
;1341:				}
line 1342
;1342:			}
line 1343
;1343:		}
ADDRGP4 $704
JUMPV
LABELV $703
line 1344
;1344:		else if (otherOwner && otherOwner->client && otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] <= self->client->ps.fd.saberAnimLevel)
ADDRLP4 1208
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1208
INDIRU4
EQU4 $712
ADDRLP4 1212
CNSTI4 408
ASGNI4
ADDRLP4 1216
ADDRLP4 1132
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1216
INDIRP4
CVPU4 4
ADDRLP4 1208
INDIRU4
EQU4 $712
ADDRLP4 1216
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
ADDRLP4 1212
INDIRI4
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
GTI4 $712
line 1345
;1345:		{ //block
line 1346
;1346:			if (otherOwner->client->ps.weaponTime < 1 || otherOwner->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3)
ADDRLP4 1220
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1220
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
CNSTI4 1
LTI4 $716
ADDRLP4 1220
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
CNSTI4 3
GEI4 $714
LABELV $716
line 1347
;1347:			{
line 1348
;1348:				if (WP_SaberCanBlock(otherOwner, tr.endpos, 0, MOD_SABER, qfalse, 1) && dmg > 5)
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 0+12
ARGP4
ADDRLP4 1224
CNSTI4 0
ASGNI4
ADDRLP4 1224
INDIRI4
ARGI4
CNSTI4 3
ARGI4
ADDRLP4 1224
INDIRI4
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 1228
ADDRGP4 WP_SaberCanBlock
CALLI4
ASGNI4
ADDRLP4 1228
INDIRI4
CNSTI4 0
EQI4 $717
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $717
line 1349
;1349:				{
line 1350
;1350:					otherOwner->client->ps.weaponTime = 0;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 1351
;1351:					otherOwner->client->ps.weaponstate = WEAPON_READY;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 1352
;1352:					otherOwner->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 1353
;1353:					otherOwner->client->ps.saberBlockTime = level.time + (350 - (otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND]*100));//300;
ADDRLP4 1232
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1232
INDIRP4
CNSTI4 744
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 350
CNSTI4 100
ADDRLP4 1232
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
MULI4
SUBI4
ADDI4
ASGNI4
line 1354
;1354:				}
LABELV $717
line 1355
;1355:			}
LABELV $714
line 1356
;1356:		}
LABELV $712
LABELV $704
line 1358
;1357:
;1358:		self->client->ps.saberAttackWound = level.time + 300;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 1360
;1359:
;1360:		if (dmg > 5)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $722
line 1361
;1361:		{
line 1362
;1362:			if (Q_irand(1, 10) < 9) //used to be < 7
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 1220
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 1220
INDIRI4
CNSTI4 9
GEI4 $724
line 1363
;1363:			{
line 1364
;1364:				if (WP_SabersCheckLock(self, otherOwner))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 1132
INDIRP4
ARGP4
ADDRLP4 1224
ADDRGP4 WP_SabersCheckLock
CALLI4
ASGNI4
ADDRLP4 1224
INDIRI4
CNSTI4 0
EQI4 $726
line 1365
;1365:				{
line 1366
;1366:					self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1367
;1367:					otherOwner->client->ps.saberBlocked = BLOCKED_NONE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 1368
;1368:					return didHit;
ADDRLP4 1096
INDIRI4
RETI4
ADDRGP4 $504
JUMPV
LABELV $726
line 1370
;1369:				}
;1370:			}
LABELV $724
line 1371
;1371:		}
LABELV $722
line 1373
;1372:
;1373:		if (dmg > 5)
ADDRLP4 1080
INDIRI4
CNSTI4 5
LEI4 $728
line 1374
;1374:		{ //we clashed into this person's saber while attacking, so make them feel it too
line 1375
;1375:			if (otherOwner && otherOwner->client && otherOwner->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] <= self->client->ps.fd.saberAnimLevel)
ADDRLP4 1224
CNSTU4 0
ASGNU4
ADDRLP4 1132
INDIRP4
CVPU4 4
ADDRLP4 1224
INDIRU4
EQU4 $730
ADDRLP4 1228
CNSTI4 408
ASGNI4
ADDRLP4 1232
ADDRLP4 1132
INDIRP4
ADDRLP4 1228
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1232
INDIRP4
CVPU4 4
ADDRLP4 1224
INDIRU4
EQU4 $730
ADDRLP4 1232
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
ADDRFP4 0
INDIRP4
ADDRLP4 1228
INDIRI4
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
GTI4 $730
line 1376
;1376:			{
line 1379
;1377:			//	WP_SaberBlockNonRandom(otherOwner, tr.endpos, qfalse);
;1378:
;1379:				otherOwner->client->ps.weaponTime = 0;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 44
ADDP4
CNSTI4 0
ASGNI4
line 1380
;1380:				otherOwner->client->ps.weaponstate = WEAPON_READY;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
CNSTI4 0
ASGNI4
line 1381
;1381:				otherOwner->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 2
ASGNI4
line 1383
;1382:
;1383:				self->client->ps.saberBlockTime = level.time + (350 - (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND]*100));//300;
ADDRLP4 1236
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 1236
INDIRP4
CNSTI4 744
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 350
CNSTI4 100
ADDRLP4 1236
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
MULI4
SUBI4
ADDI4
ASGNI4
line 1385
;1384:
;1385:				otherOwner->client->ps.saberAttackWound = level.time + 300;
ADDRLP4 1132
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 300
ADDI4
ASGNI4
line 1386
;1386:			}
LABELV $730
line 1387
;1387:		}
LABELV $728
line 1388
;1388:	}
LABELV $677
LABELV $566
line 1390
;1389:
;1390:	return didHit;
ADDRLP4 1096
INDIRI4
RETI4
LABELV $504
endproc CheckSaberDamage 1240 32
export CheckThrownSaberDamaged
proc CheckThrownSaberDamaged 1240 32
line 1403
;1391:}
;1392:
;1393:#define MIN_SABER_SLICE_DISTANCE 50
;1394:
;1395:#define MIN_SABER_SLICE_RETURN_DISTANCE 30
;1396:
;1397:#define SABER_THROWN_HIT_DAMAGE 30
;1398:#define SABER_THROWN_RETURN_HIT_DAMAGE 5
;1399:
;1400:void thrownSaberTouch (gentity_t *saberent, gentity_t *other, trace_t *trace);
;1401:
;1402:qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity_t *saberOwner, gentity_t *ent, int dist, int returning)
;1403:{
line 1408
;1404:	vec3_t vecsub;
;1405:	float veclen;
;1406:	gentity_t *te;
;1407:
;1408:	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 $735
ADDRLP4 28
ADDRLP4 20
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $735
ADDRLP4 28
INDIRP4
CNSTI4 740
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LEI4 $735
line 1409
;1409:	{
line 1410
;1410:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $734
JUMPV
LABELV $735
line 1413
;1411:	}
;1412:
;1413:	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 $738
ADDRLP4 40
ADDRLP4 32
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 40
INDIRP4
CVPU4 4
ADDRLP4 36
INDIRU4
EQU4 $738
ADDRLP4 44
CNSTI4 0
ASGNI4
ADDRLP4 32
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
EQI4 $738
ADDRLP4 32
INDIRP4
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $738
ADDRLP4 32
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
LEI4 $738
ADDRLP4 32
INDIRP4
CNSTI4 680
ADDP4
INDIRI4
ADDRLP4 44
INDIRI4
EQI4 $738
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 $738
ADDRLP4 56
ADDRFP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
EQI4 $738
ADDRLP4 56
INDIRP4
CNSTI4 1368
ADDP4
INDIRI4
ADDRLP4 52
INDIRI4
EQI4 $738
line 1418
;1414:		ent->health > 0 && ent->takedamage &&
;1415:		trap_InPVS(ent->client->ps.origin, saberent->r.currentOrigin) &&
;1416:		ent->client->sess.sessionTeam != TEAM_SPECTATOR &&
;1417:		ent->client->pers.connected)
;1418:	{
line 1419
;1419:		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 $740
ADDRLP4 68
ADDRLP4 60
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 68
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $740
ADDRLP4 68
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
ADDRLP4 64
INDIRI4
EQI4 $740
ADDRLP4 68
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $740
line 1422
;1420:			ent->client->ps.duelInProgress &&
;1421:			ent->client->ps.duelIndex != saberOwner->s.number)
;1422:		{
line 1423
;1423:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $734
JUMPV
LABELV $740
line 1426
;1424:		}
;1425:
;1426:		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 $742
ADDRLP4 80
CNSTI4 408
ASGNI4
ADDRLP4 72
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $742
ADDRLP4 84
ADDRFP4 4
INDIRP4
ADDRLP4 80
INDIRI4
ADDP4
INDIRP4
ASGNP4
ADDRLP4 84
INDIRP4
CNSTI4 1292
ADDP4
INDIRI4
ADDRLP4 76
INDIRI4
EQI4 $742
ADDRLP4 84
INDIRP4
CNSTI4 1284
ADDP4
INDIRI4
ADDRLP4 72
INDIRP4
INDIRI4
EQI4 $742
line 1429
;1427:			saberOwner->client->ps.duelInProgress &&
;1428:			saberOwner->client->ps.duelIndex != ent->s.number)
;1429:		{
line 1430
;1430:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $734
JUMPV
LABELV $742
line 1433
;1431:		}
;1432:
;1433:		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 1434
;1434:		veclen = VectorLength(vecsub);
ADDRLP4 0
ARGP4
ADDRLP4 96
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 96
INDIRF4
ASGNF4
line 1436
;1435:
;1436:		if (veclen < dist)
ADDRLP4 12
INDIRF4
ADDRFP4 12
INDIRI4
CVIF4 4
GEF4 $739
line 1437
;1437:		{
line 1440
;1438:			trace_t tr;
;1439:
;1440:			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 1454
;1441:
;1442:			/*
;1443:			if (tr.startsolid || tr.allsolid)
;1444:			{
;1445:				if (!returning)
;1446:				{ //return to owner if startsolid
;1447:					thrownSaberTouch(saberent, saberent, NULL);
;1448:				}
;1449:
;1450:				return qfalse;
;1451:			}
;1452:			*/
;1453:
;1454:			if (tr.fraction == 1 || tr.entityNum == ent->s.number)
ADDRLP4 100+8
INDIRF4
CNSTF4 1065353216
EQF4 $752
ADDRLP4 100+52
INDIRI4
ADDRFP4 8
INDIRP4
INDIRI4
NEI4 $739
LABELV $752
line 1455
;1455:			{ //Slice them
line 1456
;1456:				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 $753
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 $753
line 1457
;1457:				{
line 1458
;1458:					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 1459
;1459:					VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 100+12
INDIRB
ASGNB 12
line 1460
;1460:					VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 100+24
INDIRB
ASGNB 12
line 1461
;1461:					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 $759
ADDRLP4 1200
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $759
ADDRLP4 1200
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1204
INDIRF4
NEF4 $759
line 1462
;1462:					{
line 1463
;1463:						te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 1464
;1464:					}
LABELV $759
line 1465
;1465:					te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1467
;1466:
;1467:					if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $761
line 1468
;1468:					{ //return to owner if blocked
line 1469
;1469:						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 1470
;1470:					}
LABELV $761
line 1472
;1471:
;1472:					saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 1473
;1473:					return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $734
JUMPV
LABELV $753
line 1476
;1474:				}
;1475:				else
;1476:				{
line 1479
;1477:					vec3_t dir;
;1478:
;1479:					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 1480
;1480:					VectorNormalize(dir);
ADDRLP4 1196
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1482
;1481:
;1482:					if (!dir[0] && !dir[1] && !dir[2])
ADDRLP4 1212
CNSTF4 0
ASGNF4
ADDRLP4 1196
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $771
ADDRLP4 1196+4
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $771
ADDRLP4 1196+8
INDIRF4
ADDRLP4 1212
INDIRF4
NEF4 $771
line 1483
;1483:					{
line 1484
;1484:						dir[1] = 1;
ADDRLP4 1196+4
CNSTF4 1065353216
ASGNF4
line 1485
;1485:					}
LABELV $771
line 1487
;1486:
;1487:					if (saberOwner->client->ps.isJediMaster)
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 604
ADDP4
INDIRI4
CNSTI4 0
EQI4 $776
line 1488
;1488:					{ //2x damage for the Jedi Master
line 1489
;1489:						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 1490
;1490:					}
ADDRGP4 $777
JUMPV
LABELV $776
line 1492
;1491:					else
;1492:					{
line 1493
;1493:						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 1494
;1494:					}
LABELV $777
line 1496
;1495:
;1496:					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 1497
;1497:					VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 100+12
INDIRB
ASGNB 12
line 1498
;1498:					VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 100+24
INDIRB
ASGNB 12
line 1499
;1499:					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 $783
ADDRLP4 1220
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
NEF4 $783
ADDRLP4 1220
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1224
INDIRF4
NEF4 $783
line 1500
;1500:					{
line 1501
;1501:						te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 1502
;1502:					}
LABELV $783
line 1504
;1503:
;1504:					te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1506
;1505:
;1506:					if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $785
line 1507
;1507:					{ //return to owner if blocked
line 1508
;1508:						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 1509
;1509:					}
LABELV $785
line 1510
;1510:				}
line 1512
;1511:
;1512:				saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 1513
;1513:			}
line 1514
;1514:		}
line 1515
;1515:	}
ADDRGP4 $739
JUMPV
LABELV $738
line 1516
;1516:	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 $788
ADDRLP4 60
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 64
INDIRU4
NEU4 $788
ADDRLP4 68
CNSTI4 0
ASGNI4
ADDRLP4 60
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
EQI4 $788
ADDRLP4 60
INDIRP4
CNSTI4 680
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
EQI4 $788
ADDRLP4 60
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
ADDRLP4 68
INDIRI4
LEI4 $788
ADDRLP4 72
ADDRLP4 60
INDIRP4
INDIRI4
ASGNI4
ADDRLP4 72
INDIRI4
ADDRFP4 4
INDIRP4
INDIRI4
EQI4 $788
ADDRLP4 76
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 72
INDIRI4
ADDRLP4 76
INDIRP4
INDIRI4
EQI4 $788
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 $788
line 1518
;1517:		ent->s.number != saberent->s.number && trap_InPVS(ent->r.currentOrigin, saberent->r.currentOrigin))
;1518:	{
line 1519
;1519:		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 1520
;1520:		veclen = VectorLength(vecsub);
ADDRLP4 0
ARGP4
ADDRLP4 108
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 108
INDIRF4
ASGNF4
line 1522
;1521:
;1522:		if (veclen < dist)
ADDRLP4 12
INDIRF4
ADDRFP4 12
INDIRI4
CVIF4 4
GEF4 $792
line 1523
;1523:		{
line 1526
;1524:			trace_t tr;
;1525:
;1526:			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 1528
;1527:
;1528:			if (tr.fraction == 1 || tr.entityNum == ent->s.number)
ADDRLP4 112+8
INDIRF4
CNSTF4 1065353216
EQF4 $798
ADDRLP4 112+52
INDIRI4
ADDRFP4 8
INDIRP4
INDIRI4
NEI4 $794
LABELV $798
line 1529
;1529:			{
line 1532
;1530:				vec3_t dir;
;1531:
;1532:				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 1533
;1533:				VectorNormalize(dir);
ADDRLP4 1204
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1535
;1534:
;1535:				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 1537
;1536:
;1537:				te = G_TempEntity( tr.endpos, EV_SABER_HIT );
ADDRLP4 112+12
ARGP4
CNSTI4 27
ARGI4
ADDRLP4 1224
ADDRGP4 G_TempEntity
CALLP4
ASGNP4
ADDRLP4 16
ADDRLP4 1224
INDIRP4
ASGNP4
line 1538
;1538:				VectorCopy(tr.endpos, te->s.origin);
ADDRLP4 16
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 112+12
INDIRB
ASGNB 12
line 1539
;1539:				VectorCopy(tr.plane.normal, te->s.angles);
ADDRLP4 16
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 112+24
INDIRB
ASGNB 12
line 1540
;1540:				if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
ADDRLP4 1228
ADDRLP4 16
INDIRP4
ASGNP4
ADDRLP4 1232
CNSTF4 0
ASGNF4
ADDRLP4 1228
INDIRP4
CNSTI4 116
ADDP4
INDIRF4
ADDRLP4 1232
INDIRF4
NEF4 $810
ADDRLP4 1228
INDIRP4
CNSTI4 120
ADDP4
INDIRF4
ADDRLP4 1232
INDIRF4
NEF4 $810
ADDRLP4 1228
INDIRP4
CNSTI4 124
ADDP4
INDIRF4
ADDRLP4 1232
INDIRF4
NEF4 $810
line 1541
;1541:				{
line 1542
;1542:					te->s.angles[1] = 1;
ADDRLP4 16
INDIRP4
CNSTI4 120
ADDP4
CNSTF4 1065353216
ASGNF4
line 1543
;1543:				}
LABELV $810
line 1545
;1544:
;1545:				te->s.eventParm = 1;
ADDRLP4 16
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 1547
;1546:
;1547:				if (!returning)
ADDRFP4 16
INDIRI4
CNSTI4 0
NEI4 $812
line 1548
;1548:				{ //return to owner if blocked
line 1549
;1549:					thrownSaberTouch(saberent, saberent, NULL);
ADDRLP4 1236
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 1236
INDIRP4
ARGP4
ADDRLP4 1236
INDIRP4
ARGP4
CNSTP4 0
ARGP4
ADDRGP4 thrownSaberTouch
CALLV
pop
line 1550
;1550:				}
LABELV $812
line 1552
;1551:
;1552:				saberOwner->client->ps.saberAttackWound = level.time + 500;
ADDRFP4 4
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 500
ADDI4
ASGNI4
line 1553
;1553:			}
LABELV $794
line 1554
;1554:		}
LABELV $792
line 1555
;1555:	}
LABELV $788
LABELV $739
line 1557
;1556:
;1557:	return qtrue;
CNSTI4 1
RETI4
LABELV $734
endproc CheckThrownSaberDamaged 1240 32
export saberCheckRadiusDamage
proc saberCheckRadiusDamage 28 20
line 1561
;1558:}
;1559:
;1560:void saberCheckRadiusDamage(gentity_t *saberent, int returning)
;1561:{ //we're going to cheat and damage players within the saber's radius, just for the sake of doing things more "efficiently"
line 1562
;1562:	int i = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 1563
;1563:	int dist = 0;
ADDRLP4 12
CNSTI4 0
ASGNI4
line 1565
;1564:	gentity_t *ent;
;1565:	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 1567
;1566:
;1567:	if (returning && returning != 2)
ADDRLP4 16
ADDRFP4 4
INDIRI4
ASGNI4
ADDRLP4 16
INDIRI4
CNSTI4 0
EQI4 $816
ADDRLP4 16
INDIRI4
CNSTI4 2
EQI4 $816
line 1568
;1568:	{
line 1569
;1569:		dist = MIN_SABER_SLICE_RETURN_DISTANCE;
ADDRLP4 12
CNSTI4 30
ASGNI4
line 1570
;1570:	}
ADDRGP4 $817
JUMPV
LABELV $816
line 1572
;1571:	else
;1572:	{
line 1573
;1573:		dist = MIN_SABER_SLICE_DISTANCE;
ADDRLP4 12
CNSTI4 50
ASGNI4
line 1574
;1574:	}
LABELV $817
line 1576
;1575:
;1576:	if (!saberOwner || !saberOwner->client)
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 8
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $820
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
NEU4 $818
LABELV $820
line 1577
;1577:	{
line 1578
;1578:		return;
ADDRGP4 $815
JUMPV
LABELV $818
line 1581
;1579:	}
;1580:
;1581:	if (saberOwner->client->ps.saberAttackWound > level.time)
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LEI4 $825
line 1582
;1582:	{
line 1583
;1583:		return;
ADDRGP4 $815
JUMPV
LABELV $824
line 1587
;1584:	}
;1585:
;1586:	while (i < /*MAX_CLIENTS*/MAX_GENTITIES)
;1587:	{
line 1588
;1588:		ent = &g_entities[i];
ADDRLP4 4
CNSTI4 828
ADDRLP4 0
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1590
;1589:
;1590:		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 1592
;1591:
;1592:		i++;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 1593
;1593:	}
LABELV $825
line 1586
ADDRLP4 0
INDIRI4
CNSTI4 1024
LTI4 $824
line 1594
;1594:}
LABELV $815
endproc saberCheckRadiusDamage 28 20
export saberMoveBack
proc saberMoveBack 28 12
line 1599
;1595:
;1596://#define THROWN_SABER_COMP
;1597:
;1598:void saberMoveBack( gentity_t *ent, qboolean goingBack ) 
;1599:{
line 1602
;1600:	vec3_t		origin, oldOrg;
;1601:
;1602:	ent->s.pos.trType = TR_LINEAR;
ADDRFP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 2
ASGNI4
line 1604
;1603:
;1604:	VectorCopy( ent->r.currentOrigin, oldOrg );
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 1606
;1605:	// get current position
;1606:	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 1608
;1607:	//Get current angles?
;1608:	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 1649
;1609:
;1610:	//compensation test code..
;1611:#ifdef THROWN_SABER_COMP
;1612:	if (!goingBack)
;1613:	{ //acts as a fallback in case touch code fails, keeps saber from going through things between predictions
;1614:		float originalLength = 0;
;1615:		int iCompensationLength = 32;
;1616:		trace_t tr;
;1617:		vec3_t mins, maxs;
;1618:		vec3_t calcComp, compensatedOrigin;
;1619:		VectorSet( mins, -24.0f, -24.0f, -8.0f );
;1620:		VectorSet( maxs, 24.0f, 24.0f, 8.0f );
;1621:
;1622:		VectorSubtract(origin, oldOrg, calcComp);
;1623:		originalLength = VectorLength(calcComp);
;1624:
;1625:		VectorNormalize(calcComp);
;1626:
;1627:		compensatedOrigin[0] = oldOrg[0] + calcComp[0]*(originalLength+iCompensationLength);		
;1628:		compensatedOrigin[1] = oldOrg[1] + calcComp[1]*(originalLength+iCompensationLength);
;1629:		compensatedOrigin[2] = oldOrg[2] + calcComp[2]*(originalLength+iCompensationLength);
;1630:
;1631:		trap_Trace(&tr, oldOrg, mins, maxs, compensatedOrigin, ent->r.ownerNum, MASK_PLAYERSOLID);
;1632:
;1633:		if ((tr.fraction != 1 || tr.startsolid || tr.allsolid) && tr.entityNum != ent->r.ownerNum)
;1634:		{
;1635:			VectorClear(ent->s.pos.trDelta);
;1636:
;1637:			//Unfortunately doing this would defeat the purpose of the compensation. We will have to settle for a jerk on the client.
;1638:			//VectorCopy( origin, ent->r.currentOrigin );
;1639:
;1640:			CheckThrownSaberDamaged(ent, &g_entities[ent->r.ownerNum], &g_entities[tr.entityNum], 256, 0);
;1641:
;1642:			tr.startsolid = 0;
;1643:			thrownSaberTouch(ent, &g_entities[tr.entityNum], &tr);
;1644:			return;
;1645:		}
;1646:	}
;1647:#endif
;1648:
;1649:	VectorCopy( origin, ent->r.currentOrigin );
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 0
INDIRB
ASGNB 12
line 1650
;1650:}
LABELV $827
endproc saberMoveBack 28 12
export SaberBounceSound
proc SaberBounceSound 4 0
line 1653
;1651:
;1652:void SaberBounceSound( gentity_t *self, gentity_t *other, trace_t *trace )
;1653:{
line 1654
;1654:	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 1655
;1655:	self->s.apos.trBase[PITCH] = 90;
ADDRFP4 0
INDIRP4
CNSTI4 60
ADDP4
CNSTF4 1119092736
ASGNF4
line 1656
;1656:}
LABELV $830
endproc SaberBounceSound 4 0
export DeadSaberThink
proc DeadSaberThink 0 4
line 1659
;1657:
;1658:void DeadSaberThink(gentity_t *saberent)
;1659:{
line 1660
;1660:	if (saberent->speed < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $832
line 1661
;1661:	{
line 1662
;1662:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 1663
;1663:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1664
;1664:		return;
ADDRGP4 $831
JUMPV
LABELV $832
line 1667
;1665:	}
;1666:
;1667:	G_RunObject(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunObject
CALLV
pop
line 1668
;1668:}
LABELV $831
endproc DeadSaberThink 0 4
export MakeDeadSaber
proc MakeDeadSaber 52 12
line 1671
;1669:
;1670:void MakeDeadSaber(gentity_t *ent)
;1671:{	//spawn a "dead" saber entity here so it looks like the saber fell out of the air.
line 1677
;1672:	//This entity will remove itself after a very short time period.
;1673:	vec3_t startorg;
;1674:	vec3_t startang;
;1675:	gentity_t *saberent;
;1676:	
;1677:	if (g_gametype.integer == GT_JEDIMASTER)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 2
NEI4 $837
line 1678
;1678:	{ //never spawn a dead saber in JM, because the only saber on the level is really a world object
line 1679
;1679:		G_Sound(ent, CHAN_AUTO, saberOffSound);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberOffSound
INDIRI4
ARGI4
ADDRGP4 G_Sound
CALLV
pop
line 1680
;1680:		return;
ADDRGP4 $836
JUMPV
LABELV $837
line 1683
;1681:	}
;1682:
;1683:	saberent = G_Spawn();
ADDRLP4 28
ADDRGP4 G_Spawn
CALLP4
ASGNP4
ADDRLP4 0
ADDRLP4 28
INDIRP4
ASGNP4
line 1685
;1684:
;1685:	VectorCopy(ent->r.currentOrigin, startorg);
ADDRLP4 4
ADDRFP4 0
INDIRP4
CNSTI4 368
ADDP4
INDIRB
ASGNB 12
line 1686
;1686:	VectorCopy(ent->r.currentAngles, startang);
ADDRLP4 16
ADDRFP4 0
INDIRP4
CNSTI4 380
ADDP4
INDIRB
ASGNB 12
line 1688
;1687:
;1688:	saberent->classname = "deadsaber";
ADDRLP4 0
INDIRP4
CNSTI4 416
ADDP4
ADDRGP4 $840
ASGNP4
line 1690
;1689:			
;1690:	saberent->r.svFlags = SVF_USE_CURRENT_ORIGIN;
ADDRLP4 0
INDIRP4
CNSTI4 304
ADDP4
CNSTI4 128
ASGNI4
line 1691
;1691:	saberent->r.ownerNum = ent->s.number;
ADDRLP4 0
INDIRP4
CNSTI4 396
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
ASGNI4
line 1693
;1692:
;1693:	saberent->clipmask = MASK_PLAYERSOLID;
ADDRLP4 0
INDIRP4
CNSTI4 508
ADDP4
CNSTI4 273
ASGNI4
line 1694
;1694:	saberent->r.contents = CONTENTS_TRIGGER;//0;
ADDRLP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 1024
ASGNI4
line 1696
;1695:
;1696:	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 1697
;1697:	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 1701
;1698:
;1699:	//saberent->mass = 10;
;1700:
;1701:	saberent->touch = SaberBounceSound;
ADDRLP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberBounceSound
ASGNP4
line 1703
;1702:
;1703:	saberent->think = DeadSaberThink;
ADDRLP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 DeadSaberThink
ASGNP4
line 1704
;1704:	saberent->nextthink = level.time;
ADDRLP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1706
;1705:
;1706:	VectorCopy(startorg, saberent->s.pos.trBase);
ADDRLP4 0
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 1707
;1707:	VectorCopy(startang, saberent->s.apos.trBase);
ADDRLP4 0
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 1709
;1708:
;1709:	VectorCopy(startorg, saberent->s.origin);
ADDRLP4 0
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 1710
;1710:	VectorCopy(startang, saberent->s.angles);
ADDRLP4 0
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 1712
;1711:
;1712:	VectorCopy(startorg, saberent->r.currentOrigin);
ADDRLP4 0
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 4
INDIRB
ASGNB 12
line 1713
;1713:	VectorCopy(startang, saberent->r.currentAngles);
ADDRLP4 0
INDIRP4
CNSTI4 380
ADDP4
ADDRLP4 16
INDIRB
ASGNB 12
line 1715
;1714:
;1715:	saberent->s.apos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 5
ASGNI4
line 1716
;1716:	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 1717
;1717:	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 1718
;1718:	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 1719
;1719:	saberent->s.apos.trTime = level.time-50;
ADDRLP4 0
INDIRP4
CNSTI4 52
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
SUBI4
ASGNI4
line 1721
;1720:
;1721:	saberent->s.pos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 5
ASGNI4
line 1722
;1722:	saberent->s.pos.trTime = level.time-50;
ADDRLP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
SUBI4
ASGNI4
line 1723
;1723:	saberent->s.eFlags = EF_BOUNCE_HALF;
ADDRLP4 0
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 32
ASGNI4
line 1724
;1724:	saberent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm");
ADDRGP4 $844
ARGP4
ADDRLP4 44
ADDRGP4 G_ModelIndex
CALLI4
ASGNI4
ADDRLP4 0
INDIRP4
CNSTI4 212
ADDP4
ADDRLP4 44
INDIRI4
ASGNI4
line 1725
;1725:	saberent->s.modelGhoul2 = 1;
ADDRLP4 0
INDIRP4
CNSTI4 204
ADDP4
CNSTI4 1
ASGNI4
line 1726
;1726:	saberent->s.g2radius = 20;
ADDRLP4 0
INDIRP4
CNSTI4 208
ADDP4
CNSTI4 20
ASGNI4
line 1728
;1727:
;1728:	saberent->s.eType = ET_MISSILE;
ADDRLP4 0
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 3
ASGNI4
line 1729
;1729:	saberent->s.weapon = WP_SABER;
ADDRLP4 0
INDIRP4
CNSTI4 276
ADDP4
CNSTI4 2
ASGNI4
line 1731
;1730:
;1731:	saberent->speed = level.time + 4000;
ADDRLP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 4000
ADDI4
CVIF4 4
ASGNF4
line 1733
;1732:
;1733:	saberent->bounceCount = 12;
ADDRLP4 0
INDIRP4
CNSTI4 716
ADDP4
CNSTI4 12
ASGNI4
line 1736
;1734:
;1735:	//fall off in the direction the real saber was headed
;1736:	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 1738
;1737:
;1738:	saberMoveBack(saberent, qtrue);
ADDRLP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 1739
;1739:	saberent->s.pos.trType = TR_GRAVITY;
ADDRLP4 0
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 5
ASGNI4
line 1741
;1740:
;1741:	trap_LinkEntity(saberent);	
ADDRLP4 0
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 1742
;1742:}
LABELV $836
endproc MakeDeadSaber 52 12
export saberBackToOwner
proc saberBackToOwner 48 8
line 1745
;1743:
;1744:void saberBackToOwner(gentity_t *saberent)
;1745:{
line 1746
;1746:	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 1750
;1747:	vec3_t dir;
;1748:	float ownerLen;
;1749:
;1750:	if (saberent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $847
line 1751
;1751:	{
line 1752
;1752:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1754
;1753:
;1754:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 1755
;1755:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1756
;1756:		return;
ADDRGP4 $846
JUMPV
LABELV $847
line 1759
;1757:	}
;1758:
;1759:	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 $856
ADDRLP4 20
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $856
ADDRLP4 20
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $850
LABELV $856
line 1762
;1760:		!g_entities[saberent->r.ownerNum].client ||
;1761:		g_entities[saberent->r.ownerNum].client->sess.sessionTeam == TEAM_SPECTATOR)
;1762:	{
line 1763
;1763:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1765
;1764:
;1765:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 1766
;1766:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1767
;1767:		return;
ADDRGP4 $846
JUMPV
LABELV $850
line 1770
;1768:	}
;1769:
;1770:	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 $864
ADDRLP4 28
CNSTI4 0
ASGNI4
ADDRLP4 24
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 992
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
EQI4 $864
ADDRLP4 24
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CNSTI4 1000
ADDP4
INDIRI4
ADDRLP4 28
INDIRI4
NEI4 $858
LABELV $864
line 1771
;1771:	{ //He's dead, just go back to our normal saber status
line 1772
;1772:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 1773
;1773:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 1774
;1774:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1776
;1775:
;1776:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1778
;1777:
;1778:		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 1779
;1779:		saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 1780
;1780:		VectorSet( saberent->r.mins, -8.0f, -8.0f, -8.0f );
ADDRFP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3238002688
ASGNF4
line 1781
;1781:		VectorSet( saberent->r.maxs, 8.0f, 8.0f, 8.0f );
ADDRFP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1090519040
ASGNF4
line 1782
;1782:		saberent->s.loopSound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 1784
;1783:
;1784:		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 1785
;1785:		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 1786
;1786:		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 1788
;1787:
;1788:		return;
ADDRGP4 $846
JUMPV
LABELV $858
line 1791
;1789:	}
;1790:
;1791:	saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 1795
;1792:
;1793:	//saberent->s.apos.trDelta[1] = 0;
;1794:
;1795:	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 1797
;1796:
;1797:	ownerLen = VectorLength(dir);
ADDRLP4 0
ARGP4
ADDRLP4 40
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 12
ADDRLP4 40
INDIRF4
ASGNF4
line 1799
;1798:
;1799:	if (saberent->speed < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $872
line 1800
;1800:	{
line 1801
;1801:		VectorNormalize(dir);
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 1803
;1802:
;1803:		saberMoveBack(saberent, qtrue);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 1804
;1804:		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 1806
;1805:
;1806:		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 1000
ADDP4
INDIRI4
CNSTI4 3
LTI4 $875
line 1807
;1807:		{ //allow players with high saber throw rank to control the return speed of the saber
line 1808
;1808:			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 1584
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $878
line 1809
;1809:			{
line 1810
;1810:				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 1811
;1811:				saberent->speed = level.time + 50;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
CVIF4 4
ASGNF4
line 1812
;1812:			}
ADDRGP4 $876
JUMPV
LABELV $878
line 1814
;1813:			else
;1814:			{
line 1815
;1815:				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 1816
;1816:				saberent->speed = level.time + 200;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 200
ADDI4
CVIF4 4
ASGNF4
line 1817
;1817:			}
line 1818
;1818:		}
ADDRGP4 $876
JUMPV
LABELV $875
line 1820
;1819:		else
;1820:		{
line 1821
;1821:			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 1822
;1822:			saberent->speed = level.time + 200;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 200
ADDI4
CVIF4 4
ASGNF4
line 1823
;1823:		}
LABELV $876
line 1824
;1824:		saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1825
;1825:	}
LABELV $872
line 1827
;1826:
;1827:	if (ownerLen <= 512)
ADDRLP4 12
INDIRF4
CNSTF4 1140850688
GTF4 $891
line 1828
;1828:	{
line 1829
;1829:		saberent->s.saberInFlight = qfalse;
ADDRFP4 0
INDIRP4
CNSTI4 228
ADDP4
CNSTI4 0
ASGNI4
line 1830
;1830:		saberent->s.loopSound = saberHumSound;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
ADDRGP4 saberHumSound
INDIRI4
ASGNI4
line 1831
;1831:	}
LABELV $891
line 1833
;1832:
;1833:	if (ownerLen <= 32)
ADDRLP4 12
INDIRF4
CNSTF4 1107296256
GTF4 $893
line 1834
;1834:	{
line 1835
;1835:		saberOwner->client->ps.saberInFlight = qfalse;
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 1836
;1836:		saberOwner->client->ps.saberCanThrow = qfalse;
ADDRLP4 16
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 1837
;1837:		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 1839
;1838:
;1839:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 1841
;1840:
;1841:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 1842
;1842:		saberent->nextthink = level.time + 50;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 50
ADDI4
ASGNI4
line 1844
;1843:
;1844:		return;
ADDRGP4 $846
JUMPV
LABELV $893
line 1847
;1845:	}
;1846:
;1847:	if (!saberent->s.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 228
ADDP4
INDIRI4
CNSTI4 0
NEI4 $897
line 1848
;1848:	{
line 1849
;1849:		saberCheckRadiusDamage(saberent, 1);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 1850
;1850:	}
ADDRGP4 $898
JUMPV
LABELV $897
line 1852
;1851:	else
;1852:	{
line 1853
;1853:		saberCheckRadiusDamage(saberent, 2);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 2
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 1854
;1854:	}
LABELV $898
line 1856
;1855:
;1856:	saberMoveBack(saberent, qtrue);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 1859
;1857:	//G_RunObject(saberent);
;1858:
;1859:	saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1860
;1860:}
LABELV $846
endproc saberBackToOwner 48 8
export thrownSaberTouch
proc thrownSaberTouch 44 20
line 1865
;1861:
;1862:void saberFirstThrown(gentity_t *saberent);
;1863:
;1864:void thrownSaberTouch (gentity_t *saberent, gentity_t *other, trace_t *trace)
;1865:{
line 1866
;1866:	gentity_t *hitEnt = other;
ADDRLP4 0
ADDRFP4 4
INDIRP4
ASGNP4
line 1868
;1867:
;1868:	if (other && other->s.number == saberent->r.ownerNum)
ADDRLP4 4
ADDRFP4 4
INDIRP4
ASGNP4
ADDRLP4 4
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $901
ADDRLP4 4
INDIRP4
INDIRI4
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
NEI4 $901
line 1869
;1869:	{
line 1870
;1870:		return;
ADDRGP4 $900
JUMPV
LABELV $901
line 1872
;1871:	}
;1872:	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 1873
;1873:	saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1875
;1874:
;1875:	saberent->s.apos.trType = TR_LINEAR;
ADDRFP4 0
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 2
ASGNI4
line 1876
;1876:	saberent->s.apos.trDelta[0] = 0;
ADDRFP4 0
INDIRP4
CNSTI4 72
ADDP4
CNSTF4 0
ASGNF4
line 1877
;1877:	saberent->s.apos.trDelta[1] = 800;
ADDRFP4 0
INDIRP4
CNSTI4 76
ADDP4
CNSTF4 1145569280
ASGNF4
line 1878
;1878:	saberent->s.apos.trDelta[2] = 0;
ADDRFP4 0
INDIRP4
CNSTI4 80
ADDP4
CNSTF4 0
ASGNF4
line 1880
;1879:
;1880:	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 1884
;1881:
;1882:	//saberent->damage = SABER_THROWN_RETURN_HIT_DAMAGE;
;1883:
;1884:	saberent->think = saberBackToOwner;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 saberBackToOwner
ASGNP4
line 1885
;1885:	saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1888
;1886:
;1887:	//saberCheckRadiusDamage(saberent, 2);
;1888:	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 $905
ADDRLP4 28
ADDRLP4 20
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
ASGNI4
ADDRLP4 28
INDIRI4
CNSTI4 32
GEI4 $905
ADDRLP4 32
CNSTI4 0
ASGNI4
ADDRLP4 20
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 32
INDIRI4
EQI4 $905
ADDRLP4 36
CNSTI4 828
ADDRLP4 28
INDIRI4
MULI4
ASGNI4
ADDRLP4 36
INDIRI4
ADDRGP4 g_entities+408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $905
ADDRLP4 36
INDIRI4
ADDRGP4 g_entities+412
ADDP4
INDIRI4
ADDRLP4 32
INDIRI4
EQI4 $905
line 1892
;1889:		(other->r.contents & CONTENTS_LIGHTSABER) &&
;1890:		g_entities[other->r.ownerNum].client &&
;1891:		g_entities[other->r.ownerNum].inuse)
;1892:	{
line 1893
;1893:		hitEnt = &g_entities[other->r.ownerNum];
ADDRLP4 0
CNSTI4 828
ADDRFP4 4
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
MULI4
ADDRGP4 g_entities
ADDP4
ASGNP4
line 1894
;1894:	}
LABELV $905
line 1896
;1895:
;1896:	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 1898
;1897:
;1898:	saberent->speed = 0;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
CNSTF4 0
ASGNF4
line 1899
;1899:}
LABELV $900
endproc thrownSaberTouch 44 20
export saberFirstThrown
proc saberFirstThrown 1204 28
line 1904
;1900:
;1901:#define SABER_MAX_THROW_DISTANCE 700
;1902:
;1903:void saberFirstThrown(gentity_t *saberent)
;1904:{
line 1907
;1905:	vec3_t		vSub;
;1906:	float		vLen;
;1907:	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 1909
;1908:
;1909:	if (saberent->r.ownerNum == ENTITYNUM_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 396
ADDP4
INDIRI4
CNSTI4 1023
NEI4 $910
line 1910
;1910:	{
line 1911
;1911:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1913
;1912:
;1913:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 1914
;1914:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1915
;1915:		return;
ADDRGP4 $909
JUMPV
LABELV $910
line 1918
;1916:	}
;1917:
;1918:	if (!saberOwn ||
ADDRLP4 24
CNSTU4 0
ASGNU4
ADDRLP4 0
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $917
ADDRLP4 0
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $917
ADDRLP4 28
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CVPU4 4
ADDRLP4 24
INDIRU4
EQU4 $917
ADDRLP4 28
INDIRP4
CNSTI4 1520
ADDP4
INDIRI4
CNSTI4 3
NEI4 $913
LABELV $917
line 1922
;1919:		!saberOwn->inuse ||
;1920:		!saberOwn->client ||
;1921:		saberOwn->client->sess.sessionTeam == TEAM_SPECTATOR)
;1922:	{
line 1923
;1923:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1925
;1924:
;1925:		saberent->think = G_FreeEntity;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 G_FreeEntity
ASGNP4
line 1926
;1926:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1927
;1927:		return;
ADDRGP4 $909
JUMPV
LABELV $913
line 1930
;1928:	}
;1929:
;1930:	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 $922
ADDRLP4 36
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 40
CNSTI4 0
ASGNI4
ADDRLP4 36
INDIRP4
CNSTI4 992
ADDP4
INDIRI4
ADDRLP4 40
INDIRI4
EQI4 $922
ADDRLP4 36
INDIRP4
CNSTI4 1000
ADDP4
INDIRI4
ADDRLP4 40
INDIRI4
NEI4 $919
LABELV $922
line 1931
;1931:	{ //He's dead, just go back to our normal saber status
line 1932
;1932:		saberent->touch = SaberGotHit;
ADDRFP4 0
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 SaberGotHit
ASGNP4
line 1933
;1933:		saberent->think = SaberUpdateSelf;
ADDRFP4 0
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 SaberUpdateSelf
ASGNP4
line 1934
;1934:		saberent->nextthink = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 1936
;1935:
;1936:		MakeDeadSaber(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 MakeDeadSaber
CALLV
pop
line 1938
;1937:
;1938:		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 1939
;1939:		saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRFP4 0
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 1940
;1940:		VectorSet( saberent->r.mins, -8.0f, -8.0f, -8.0f );
ADDRFP4 0
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3238002688
ASGNF4
line 1941
;1941:		VectorSet( saberent->r.maxs, 8.0f, 8.0f, 8.0f );
ADDRFP4 0
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRFP4 0
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1090519040
ASGNF4
line 1942
;1942:		saberent->s.loopSound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 1944
;1943:
;1944:		saberOwn->client->ps.saberInFlight = qfalse;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
CNSTI4 0
ASGNI4
line 1945
;1945:		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 1946
;1946:		saberOwn->client->ps.saberCanThrow = qfalse;
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 0
ASGNI4
line 1948
;1947:
;1948:		return;
ADDRGP4 $909
JUMPV
LABELV $919
line 1951
;1949:	}
;1950:
;1951:	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 $925
line 1952
;1952:	{
line 1953
;1953:		if (!(saberOwn->client->buttons & BUTTON_ALT_ATTACK))
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1584
ADDP4
INDIRI4
CNSTI4 128
BANDI4
CNSTI4 0
NEI4 $928
line 1954
;1954:		{ //If owner releases altattack 500ms or later after throwing saber, it autoreturns
line 1955
;1955:			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 1956
;1956:			goto runMin;
ADDRGP4 $930
JUMPV
LABELV $928
line 1958
;1957:		}
;1958:		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 $931
line 1959
;1959:		{ //if it's out longer than 6 seconds, return it
line 1960
;1960:			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 1961
;1961:			goto runMin;
ADDRGP4 $930
JUMPV
LABELV $931
line 1963
;1962:		}
;1963:	}
LABELV $925
line 1965
;1964:
;1965:	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 $934
line 1966
;1966:	{
line 1967
;1967:		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 1968
;1968:		goto runMin;
ADDRGP4 $930
JUMPV
LABELV $934
line 1971
;1969:	}
;1970:	
;1971:	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 $937
line 1972
;1972:	{
line 1973
;1973:		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 1974
;1974:		goto runMin;
ADDRGP4 $930
JUMPV
LABELV $937
line 1977
;1975:	}
;1976:
;1977:	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 1978
;1978:	vLen = VectorLength(vSub);
ADDRLP4 4
ARGP4
ADDRLP4 60
ADDRGP4 VectorLength
CALLF4
ASGNF4
ADDRLP4 16
ADDRLP4 60
INDIRF4
ASGNF4
line 1980
;1979:
;1980:	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 1000
ADDP4
INDIRI4
MULI4
CVIF4 4
LTF4 $943
line 1981
;1981:	{
line 1982
;1982:		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 1983
;1983:		goto runMin;
ADDRGP4 $930
JUMPV
LABELV $943
line 1986
;1984:	}
;1985:
;1986:	if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_2 &&
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1000
ADDP4
INDIRI4
CNSTI4 2
LTI4 $945
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
INDIRF4
ADDRGP4 level+32
INDIRI4
CVIF4 4
GEF4 $945
line 1988
;1987:		saberent->speed < level.time)
;1988:	{ //if owner is rank 3 in saber throwing, the saber goes where he points
line 1992
;1989:		vec3_t fwd, traceFrom, traceTo, dir;
;1990:		trace_t tr;
;1991:
;1992:		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 1994
;1993:
;1994:		VectorCopy(saberOwn->client->ps.origin, traceFrom);
ADDRLP4 100
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 1995
;1995:		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 1997
;1996:
;1997:		VectorCopy(traceFrom, traceTo);
ADDRLP4 76
ADDRLP4 100
INDIRB
ASGNB 12
line 1998
;1998:		traceTo[0] += fwd[0]*4096;
ADDRLP4 76
ADDRLP4 76
INDIRF4
CNSTF4 1166016512
ADDRLP4 88
INDIRF4
MULF4
ADDF4
ASGNF4
line 1999
;1999:		traceTo[1] += fwd[1]*4096;
ADDRLP4 76+4
ADDRLP4 76+4
INDIRF4
CNSTF4 1166016512
ADDRLP4 88+4
INDIRF4
MULF4
ADDF4
ASGNF4
line 2000
;2000:		traceTo[2] += fwd[2]*4096;
ADDRLP4 76+8
ADDRLP4 76+8
INDIRF4
CNSTF4 1166016512
ADDRLP4 88+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2002
;2001:
;2002:		saberMoveBack(saberent, qfalse);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberMoveBack
CALLV
pop
line 2003
;2003:		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 2005
;2004:
;2005:		if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_3)
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1000
ADDP4
INDIRI4
CNSTI4 3
LTI4 $953
line 2006
;2006:		{ //if highest saber throw rank, we can direct the saber toward players directly by looking at them
line 2007
;2007:			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 2008
;2008:		}
ADDRGP4 $954
JUMPV
LABELV $953
line 2010
;2009:		else
;2010:		{
line 2011
;2011:			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 2012
;2012:		}
LABELV $954
line 2017
;2013:
;2014:		//G_TestLine(traceFrom, tr.endpos, 0x000000ff, 100);
;2015:
;2016:		//if (tr.fraction != 1)
;2017:		{
line 2018
;2018:			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 2020
;2019:
;2020:			VectorNormalize(dir);
ADDRLP4 64
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2022
;2021:
;2022:			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 2023
;2023:			saberent->s.pos.trTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2025
;2024:
;2025:			if (saberOwn->client->ps.fd.forcePowerLevel[FP_SABERTHROW] >= FORCE_LEVEL_3)
ADDRLP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1000
ADDP4
INDIRI4
CNSTI4 3
LTI4 $965
line 2026
;2026:			{ //we'll treat them to a quicker update rate if their throw rank is high enough
line 2027
;2027:				saberent->speed = level.time + 100;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
CVIF4 4
ASGNF4
line 2028
;2028:			}
ADDRGP4 $966
JUMPV
LABELV $965
line 2030
;2029:			else
;2030:			{
line 2031
;2031:				saberent->speed = level.time + 400;
ADDRFP4 0
INDIRP4
CNSTI4 608
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 400
ADDI4
CVIF4 4
ASGNF4
line 2032
;2032:			}
LABELV $966
line 2033
;2033:		}
line 2034
;2034:	}
LABELV $945
LABELV $930
line 2038
;2035:
;2036:runMin:
;2037:
;2038:	saberCheckRadiusDamage(saberent, 0);
ADDRFP4 0
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 saberCheckRadiusDamage
CALLV
pop
line 2039
;2039:	G_RunObject(saberent);
ADDRFP4 0
INDIRP4
ARGP4
ADDRGP4 G_RunObject
CALLV
pop
line 2040
;2040:}
LABELV $909
endproc saberFirstThrown 1204 28
export WP_SaberPositionUpdate
proc WP_SaberPositionUpdate 316 40
line 2043
;2041:
;2042:void WP_SaberPositionUpdate( gentity_t *self, usercmd_t *ucmd )
;2043:{ //rww - keep the saber position as updated as possible on the server so that we can try to do realistic-looking contact stuff
line 2051
;2044:	mdxaBone_t	boltMatrix;
;2045:	vec3_t properAngles, properOrigin;
;2046:	vec3_t boltAngles, boltOrigin;
;2047:	vec3_t end;
;2048:	vec3_t legAxis[3];
;2049:	vec3_t addVel;
;2050:	vec3_t rawAngles;
;2051:	float fVSpeed = 0;
ADDRLP4 24
CNSTF4 0
ASGNF4
line 2055
;2052:	int f;
;2053:	int torsoAnim;
;2054:	int legsAnim;
;2055:	int returnAfterUpdate = 0;
ADDRLP4 140
CNSTI4 0
ASGNI4
line 2056
;2056:	float animSpeedScale = 1;
ADDRLP4 28
CNSTF4 1065353216
ASGNF4
line 2057
;2057:	qboolean setTorso = qfalse;
ADDRLP4 144
CNSTI4 0
ASGNI4
line 2059
;2058:
;2059:	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 $970
ADDRLP4 196
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
CNSTI4 0
EQI4 $970
ADDRLP4 196
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 200
INDIRU4
EQU4 $970
line 2060
;2060:	{
line 2061
;2061:		if (self->client->saberCycleQueue)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1568
ADDP4
INDIRI4
CNSTI4 0
EQI4 $972
line 2062
;2062:		{
line 2063
;2063:			self->client->ps.fd.saberDrawAnimLevel = self->client->saberCycleQueue;
ADDRLP4 204
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 204
INDIRP4
CNSTI4 1220
ADDP4
ADDRLP4 204
INDIRP4
CNSTI4 1568
ADDP4
INDIRI4
ASGNI4
line 2064
;2064:		}
ADDRGP4 $973
JUMPV
LABELV $972
line 2066
;2065:		else
;2066:		{
line 2067
;2067:			self->client->ps.fd.saberDrawAnimLevel = self->client->ps.fd.saberAnimLevel;
ADDRLP4 204
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 204
INDIRP4
CNSTI4 1220
ADDP4
ADDRLP4 204
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
ASGNI4
line 2068
;2068:		}
LABELV $973
line 2069
;2069:	}
LABELV $970
line 2071
;2070:
;2071:	if (self &&
ADDRLP4 204
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 208
CNSTU4 0
ASGNU4
ADDRLP4 204
INDIRP4
CVPU4 4
ADDRLP4 208
INDIRU4
EQU4 $974
ADDRLP4 212
CNSTI4 0
ASGNI4
ADDRLP4 204
INDIRP4
CNSTI4 412
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
EQI4 $974
ADDRLP4 216
ADDRLP4 204
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 216
INDIRP4
CVPU4 4
ADDRLP4 208
INDIRU4
EQU4 $974
ADDRLP4 216
INDIRP4
CNSTI4 1568
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
EQI4 $974
ADDRLP4 216
INDIRP4
CNSTI4 44
ADDP4
INDIRI4
ADDRLP4 212
INDIRI4
LEI4 $976
ADDRLP4 204
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 1
GEI4 $974
LABELV $976
line 2076
;2072:		self->inuse &&
;2073:		self->client &&
;2074:		self->client->saberCycleQueue &&
;2075:		(self->client->ps.weaponTime <= 0 || self->health < 1))
;2076:	{ //we cycled attack levels while we were busy, so update now that we aren't (even if that means we're dead)
line 2077
;2077:		self->client->ps.fd.saberAnimLevel = self->client->saberCycleQueue;
ADDRLP4 220
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 220
INDIRP4
CNSTI4 1216
ADDP4
ADDRLP4 220
INDIRP4
CNSTI4 1568
ADDP4
INDIRI4
ASGNI4
line 2078
;2078:		self->client->saberCycleQueue = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1568
ADDP4
CNSTI4 0
ASGNI4
line 2079
;2079:	}
LABELV $974
line 2081
;2080:
;2081:	if (!self ||
ADDRLP4 220
ADDRFP4 0
INDIRP4
ASGNP4
ADDRLP4 224
CNSTU4 0
ASGNU4
ADDRLP4 220
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $982
ADDRLP4 228
ADDRLP4 220
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 228
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $982
ADDRLP4 228
INDIRP4
CNSTI4 1716
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $982
ADDRGP4 g2SaberInstance
INDIRP4
CVPU4 4
ADDRLP4 224
INDIRU4
EQU4 $982
ADDRLP4 220
INDIRP4
CNSTI4 676
ADDP4
INDIRI4
CNSTI4 1
GEI4 $977
LABELV $982
line 2086
;2082:		!self->client ||
;2083:		!self->client->ghoul2 ||
;2084:		!g2SaberInstance ||
;2085:		self->health < 1)
;2086:	{
line 2087
;2087:		return;
ADDRGP4 $969
JUMPV
LABELV $977
line 2090
;2088:	}
;2089:
;2090:	if (self->client->ps.usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $983
line 2091
;2091:	{ //we don't update the server's G2 instance in the case of ATST use, so..
line 2092
;2092:		return;
ADDRGP4 $969
JUMPV
LABELV $983
line 2095
;2093:	}
;2094:
;2095:	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 $988
ADDRLP4 240
ADDRLP4 232
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
ASGNI4
ADDRLP4 240
INDIRI4
CNSTI4 1
EQI4 $988
ADDRLP4 240
INDIRI4
ADDRLP4 236
INDIRI4
NEI4 $985
LABELV $988
line 2098
;2096:		self->client->ps.weaponstate == WEAPON_RAISING ||
;2097:		self->client->ps.weaponstate == WEAPON_DROPPING)
;2098:	{
line 2099
;2099:		returnAfterUpdate = 1;
ADDRLP4 140
CNSTI4 1
ASGNI4
line 2101
;2100:		//return;
;2101:	}
LABELV $985
line 2103
;2102:
;2103:	if (self->client->ps.saberThrowDelay < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 556
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $989
line 2104
;2104:	{
line 2105
;2105:		self->client->ps.saberCanThrow = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 560
ADDP4
CNSTI4 1
ASGNI4
line 2106
;2106:	}
LABELV $989
line 2108
;2107:
;2108:	if (self->client->ps.fd.forcePowersActive & (1 << FP_RAGE))
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 836
ADDP4
INDIRI4
CNSTI4 256
BANDI4
CNSTI4 0
EQI4 $992
line 2109
;2109:	{
line 2110
;2110:		animSpeedScale = 2;
ADDRLP4 28
CNSTF4 1073741824
ASGNF4
line 2111
;2111:	}
LABELV $992
line 2113
;2112:	
;2113:	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 2114
;2114:	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 2116
;2115:
;2116:	VectorCopy(self->client->ps.origin, properOrigin);
ADDRLP4 96
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2117
;2117:	VectorCopy(self->client->ps.viewangles, properAngles);
ADDRLP4 80
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 156
ADDP4
INDIRB
ASGNB 12
line 2120
;2118:
;2119:	//try to predict the origin based on velocity so it's more like what the client is seeing
;2120:	VectorCopy(self->client->ps.velocity, addVel);
ADDRLP4 108
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRB
ASGNB 12
line 2121
;2121:	VectorNormalize(addVel);
ADDRLP4 108
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2123
;2122:
;2123:	if (self->client->ps.velocity[0] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 32
ADDP4
INDIRF4
CNSTF4 0
GEF4 $994
line 2124
;2124:	{
line 2125
;2125:		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 2126
;2126:	}
ADDRGP4 $995
JUMPV
LABELV $994
line 2128
;2127:	else
;2128:	{
line 2129
;2129:		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 2130
;2130:	}
LABELV $995
line 2131
;2131:	if (self->client->ps.velocity[1] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 36
ADDP4
INDIRF4
CNSTF4 0
GEF4 $996
line 2132
;2132:	{
line 2133
;2133:		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 2134
;2134:	}
ADDRGP4 $997
JUMPV
LABELV $996
line 2136
;2135:	else
;2136:	{
line 2137
;2137:		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 2138
;2138:	}
LABELV $997
line 2139
;2139:	if (self->client->ps.velocity[2] < 0)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 40
ADDP4
INDIRF4
CNSTF4 0
GEF4 $998
line 2140
;2140:	{
line 2141
;2141:		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 2142
;2142:	}
ADDRGP4 $999
JUMPV
LABELV $998
line 2144
;2143:	else
;2144:	{
line 2145
;2145:		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 2146
;2146:	}
LABELV $999
line 2148
;2147:
;2148:	fVSpeed *= 0.08;
ADDRLP4 24
CNSTF4 1034147594
ADDRLP4 24
INDIRF4
MULF4
ASGNF4
line 2150
;2149:
;2150:	properOrigin[0] += addVel[0]*fVSpeed;
ADDRLP4 96
ADDRLP4 96
INDIRF4
ADDRLP4 108
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2151
;2151:	properOrigin[1] += addVel[1]*fVSpeed;
ADDRLP4 96+4
ADDRLP4 96+4
INDIRF4
ADDRLP4 108+4
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2152
;2152:	properOrigin[2] += addVel[2]*fVSpeed;
ADDRLP4 96+8
ADDRLP4 96+8
INDIRF4
ADDRLP4 108+8
INDIRF4
ADDRLP4 24
INDIRF4
MULF4
ADDF4
ASGNF4
line 2154
;2153:
;2154:	properAngles[0] = 0;
ADDRLP4 80
CNSTF4 0
ASGNF4
line 2155
;2155:	properAngles[1] = self->client->ps.viewangles[YAW];
ADDRLP4 80+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2156
;2156:	properAngles[2] = 0;
ADDRLP4 80+8
CNSTF4 0
ASGNF4
line 2158
;2157:
;2158:	AnglesToAxis( properAngles, legAxis );
ADDRLP4 80
ARGP4
ADDRLP4 148
ARGP4
ADDRGP4 AnglesToAxis
CALLV
pop
line 2159
;2159:	G_G2PlayerAngles( self, legAxis, properAngles );
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 148
ARGP4
ADDRLP4 80
ARGP4
ADDRGP4 G_G2PlayerAngles
CALLV
pop
line 2161
;2160:
;2161:	if (returnAfterUpdate)
ADDRLP4 140
INDIRI4
CNSTI4 0
EQI4 $1006
line 2162
;2162:	{ //We don't even need to do GetBoltMatrix if we're only in here to keep the g2 server instance in sync
line 2163
;2163:		goto finalUpdate;
ADDRGP4 $1008
JUMPV
LABELV $1006
line 2166
;2164:	}
;2165:
;2166:	trap_G2API_GetBoltMatrix(self->client->ghoul2, 1, 0, &boltMatrix, properAngles, properOrigin, level.time, NULL, vec3_origin);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1716
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 2168
;2167:
;2168:	boltOrigin[0] = boltMatrix.matrix[0][3];
ADDRLP4 12
ADDRLP4 32+12
INDIRF4
ASGNF4
line 2169
;2169:	boltOrigin[1] = boltMatrix.matrix[1][3];
ADDRLP4 12+4
ADDRLP4 32+16+12
INDIRF4
ASGNF4
line 2170
;2170:	boltOrigin[2] = boltMatrix.matrix[2][3];
ADDRLP4 12+8
ADDRLP4 32+32+12
INDIRF4
ASGNF4
line 2172
;2171:
;2172:	boltAngles[0] = -boltMatrix.matrix[0][1];
ADDRLP4 0
ADDRLP4 32+4
INDIRF4
NEGF4
ASGNF4
line 2173
;2173:	boltAngles[1] = -boltMatrix.matrix[1][1];
ADDRLP4 0+4
ADDRLP4 32+16+4
INDIRF4
NEGF4
ASGNF4
line 2174
;2174:	boltAngles[2] = -boltMatrix.matrix[2][1];
ADDRLP4 0+8
ADDRLP4 32+32+4
INDIRF4
NEGF4
ASGNF4
line 2176
;2175:
;2176:	VectorCopy(boltAngles, rawAngles);
ADDRLP4 184
ADDRLP4 0
INDIRB
ASGNB 12
line 2178
;2177:
;2178:	VectorMA( boltOrigin, 40, boltAngles, end );
ADDRLP4 244
CNSTF4 1109393408
ASGNF4
ADDRLP4 124
ADDRLP4 12
INDIRF4
ADDRLP4 244
INDIRF4
ADDRLP4 0
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 124+4
ADDRLP4 12+4
INDIRF4
ADDRLP4 244
INDIRF4
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 124+8
ADDRLP4 12+8
INDIRF4
CNSTF4 1109393408
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2180
;2179:
;2180:	if (self->client->ps.saberEntityNum)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1030
line 2181
;2181:	{
line 2182
;2182:		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 2184
;2183:
;2184:		if (mySaber && (mySaber->r.contents & CONTENTS_LIGHTSABER) && !self->client->ps.saberInFlight)
ADDRLP4 252
ADDRLP4 248
INDIRP4
ASGNP4
ADDRLP4 252
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1032
ADDRLP4 256
CNSTI4 0
ASGNI4
ADDRLP4 252
INDIRP4
CNSTI4 340
ADDP4
INDIRI4
CNSTI4 262144
BANDI4
ADDRLP4 256
INDIRI4
EQI4 $1032
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
ADDRLP4 256
INDIRI4
NEI4 $1032
line 2185
;2185:		{ //place it roughly in the middle of the saber..
line 2186
;2186:			VectorMA( boltOrigin, 20, boltAngles, mySaber->r.currentOrigin );
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 12
INDIRF4
CNSTF4 1101004800
ADDRLP4 0
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 372
ADDP4
ADDRLP4 12+4
INDIRF4
CNSTF4 1101004800
ADDRLP4 0+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 376
ADDP4
ADDRLP4 12+8
INDIRF4
CNSTF4 1101004800
ADDRLP4 0+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2188
;2187:
;2188:			if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1352
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1038
line 2189
;2189:			{
line 2190
;2190:				VectorCopy(boltOrigin, mySaber->r.currentOrigin);
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 12
INDIRB
ASGNB 12
line 2191
;2191:			}
LABELV $1038
line 2193
;2192:			//VectorCopy(/*boltOrigin*/end, mySaber->r.currentOrigin);
;2193:		}
LABELV $1032
line 2194
;2194:	}
LABELV $1030
line 2196
;2195:
;2196:	boltAngles[YAW] = self->client->ps.viewangles[YAW];
ADDRLP4 0+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2200
;2197:
;2198:	//G_TestLine(boltOrigin, end, 0x000000ff, 50);
;2199:
;2200:	if (self->client->ps.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1041
line 2201
;2201:	{ //do the thrown-saber stuff
line 2202
;2202:		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 2204
;2203:
;2204:		if (saberent)
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1042
line 2205
;2205:		{
line 2206
;2206:			if (!self->client->ps.saberEntityState)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1045
line 2207
;2207:			{
line 2210
;2208:				vec3_t startorg, startang, dir;
;2209:
;2210:				VectorCopy(boltOrigin, saberent->r.currentOrigin);
ADDRLP4 248
INDIRP4
CNSTI4 368
ADDP4
ADDRLP4 12
INDIRB
ASGNB 12
line 2212
;2211:
;2212:				VectorCopy(boltOrigin, startorg);
ADDRLP4 264
ADDRLP4 12
INDIRB
ASGNB 12
line 2213
;2213:				VectorCopy(boltAngles, startang);
ADDRLP4 276
ADDRLP4 0
INDIRB
ASGNB 12
line 2219
;2214:
;2215:				//startang[0] = 90;
;2216:				//Instead of this we'll sort of fake it and slowly tilt it down on the client via
;2217:				//a perframe method
;2218:
;2219:				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 2220
;2220:				VectorCopy(startorg, saberent->s.pos.trBase);
ADDRLP4 248
INDIRP4
CNSTI4 24
ADDP4
ADDRLP4 264
INDIRB
ASGNB 12
line 2221
;2221:				VectorCopy(startang, saberent->s.apos.trBase);
ADDRLP4 248
INDIRP4
CNSTI4 60
ADDP4
ADDRLP4 276
INDIRB
ASGNB 12
line 2223
;2222:
;2223:				VectorCopy(startorg, saberent->s.origin);
ADDRLP4 248
INDIRP4
CNSTI4 92
ADDP4
ADDRLP4 264
INDIRB
ASGNB 12
line 2224
;2224:				VectorCopy(startang, saberent->s.angles);
ADDRLP4 248
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 276
INDIRB
ASGNB 12
line 2226
;2225:
;2226:				saberent->s.saberInFlight = qtrue;
ADDRLP4 248
INDIRP4
CNSTI4 228
ADDP4
CNSTI4 1
ASGNI4
line 2228
;2227:
;2228:				saberent->s.apos.trType = TR_LINEAR;
ADDRLP4 248
INDIRP4
CNSTI4 48
ADDP4
CNSTI4 2
ASGNI4
line 2229
;2229:				saberent->s.apos.trDelta[0] = 0;
ADDRLP4 248
INDIRP4
CNSTI4 72
ADDP4
CNSTF4 0
ASGNF4
line 2230
;2230:				saberent->s.apos.trDelta[1] = 800;
ADDRLP4 248
INDIRP4
CNSTI4 76
ADDP4
CNSTF4 1145569280
ASGNF4
line 2231
;2231:				saberent->s.apos.trDelta[2] = 0;
ADDRLP4 248
INDIRP4
CNSTI4 80
ADDP4
CNSTF4 0
ASGNF4
line 2233
;2232:
;2233:				saberent->s.pos.trType = TR_LINEAR;
ADDRLP4 248
INDIRP4
CNSTI4 12
ADDP4
CNSTI4 2
ASGNI4
line 2234
;2234:				saberent->s.eType = ET_GENERAL;
ADDRLP4 248
INDIRP4
CNSTI4 4
ADDP4
CNSTI4 0
ASGNI4
line 2235
;2235:				saberent->s.eFlags = 0;
ADDRLP4 248
INDIRP4
CNSTI4 8
ADDP4
CNSTI4 0
ASGNI4
line 2236
;2236:				saberent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm");
ADDRGP4 $844
ARGP4
ADDRLP4 292
ADDRGP4 G_ModelIndex
CALLI4
ASGNI4
ADDRLP4 248
INDIRP4
CNSTI4 212
ADDP4
ADDRLP4 292
INDIRI4
ASGNI4
line 2237
;2237:				saberent->s.modelGhoul2 = 127;
ADDRLP4 248
INDIRP4
CNSTI4 204
ADDP4
CNSTI4 127
ASGNI4
line 2239
;2238:
;2239:				saberent->parent = self;
ADDRLP4 248
INDIRP4
CNSTI4 536
ADDP4
ADDRFP4 0
INDIRP4
ASGNP4
line 2241
;2240:
;2241:				self->client->ps.saberEntityState = 1;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
CNSTI4 1
ASGNI4
line 2244
;2242:
;2243:				//Projectile stuff:
;2244:				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 2246
;2245:
;2246:				saberent->nextthink = level.time + FRAMETIME;
ADDRLP4 248
INDIRP4
CNSTI4 632
ADDP4
ADDRGP4 level+32
INDIRI4
CNSTI4 100
ADDI4
ASGNI4
line 2247
;2247:				saberent->think = saberFirstThrown;//G_RunObject;
ADDRLP4 248
INDIRP4
CNSTI4 636
ADDP4
ADDRGP4 saberFirstThrown
ASGNP4
line 2249
;2248:
;2249:				saberent->damage = SABER_THROWN_HIT_DAMAGE;
ADDRLP4 248
INDIRP4
CNSTI4 688
ADDP4
CNSTI4 30
ASGNI4
line 2250
;2250:				saberent->methodOfDeath = MOD_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 704
ADDP4
CNSTI4 3
ASGNI4
line 2251
;2251:				saberent->splashMethodOfDeath = MOD_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 708
ADDP4
CNSTI4 3
ASGNI4
line 2252
;2252:				saberent->s.solid = 2;
ADDRLP4 248
INDIRP4
CNSTI4 248
ADDP4
CNSTI4 2
ASGNI4
line 2253
;2253:				saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 2255
;2254:
;2255:				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 2256
;2256:				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 2258
;2257:
;2258:				saberent->s.genericenemyindex = self->s.number+1024;
ADDRLP4 248
INDIRP4
CNSTI4 172
ADDP4
ADDRFP4 0
INDIRP4
INDIRI4
CNSTI4 1024
ADDI4
ASGNI4
line 2260
;2259:
;2260:				saberent->touch = thrownSaberTouch;
ADDRLP4 248
INDIRP4
CNSTI4 648
ADDP4
ADDRGP4 thrownSaberTouch
ASGNP4
line 2262
;2261:
;2262:				saberent->s.weapon = WP_SABER;
ADDRLP4 248
INDIRP4
CNSTI4 276
ADDP4
CNSTI4 2
ASGNI4
line 2264
;2263:
;2264:				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 2265
;2265:				saberent->s.pos.trTime = level.time;
ADDRLP4 248
INDIRP4
CNSTI4 16
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2267
;2266:
;2267:				saberent->s.loopSound = saberSpinSound;
ADDRLP4 248
INDIRP4
CNSTI4 200
ADDP4
ADDRGP4 saberSpinSound
INDIRI4
ASGNI4
line 2269
;2268:
;2269:				self->client->ps.saberDidThrowTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 564
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2271
;2270:
;2271:				self->client->dangerTime = level.time;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1748
ADDP4
ADDRGP4 level+32
INDIRI4
ASGNI4
line 2272
;2272:				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 2273
;2273:				self->client->invulnerableTimer = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1564
ADDP4
CNSTI4 0
ASGNI4
line 2275
;2274:
;2275:				trap_LinkEntity(saberent);
ADDRLP4 248
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 2276
;2276:			}
ADDRGP4 $1042
JUMPV
LABELV $1045
line 2278
;2277:			else
;2278:			{
line 2279
;2279:				VectorCopy(boltOrigin, saberent->pos1);
ADDRLP4 248
INDIRP4
CNSTI4 548
ADDP4
ADDRLP4 12
INDIRB
ASGNB 12
line 2280
;2280:				trap_LinkEntity(saberent);
ADDRLP4 248
INDIRP4
ARGP4
ADDRGP4 trap_LinkEntity
CALLV
pop
line 2281
;2281:			}
line 2282
;2282:		}
line 2283
;2283:	}
ADDRGP4 $1042
JUMPV
LABELV $1041
line 2284
;2284:	else if (!self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1300
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1053
line 2285
;2285:	{
line 2286
;2286:		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 2288
;2287:
;2288:		if (saberent)
ADDRLP4 248
INDIRP4
CVPU4 4
CNSTU4 0
EQU4 $1055
line 2289
;2289:		{
line 2290
;2290:			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 2291
;2291:			saberent->r.contents = CONTENTS_LIGHTSABER;
ADDRLP4 248
INDIRP4
CNSTI4 340
ADDP4
CNSTI4 262144
ASGNI4
line 2292
;2292:			VectorSet( saberent->r.mins, -8.0f, -8.0f, -8.0f );
ADDRLP4 248
INDIRP4
CNSTI4 316
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 320
ADDP4
CNSTF4 3238002688
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 324
ADDP4
CNSTF4 3238002688
ASGNF4
line 2293
;2293:			VectorSet( saberent->r.maxs, 8.0f, 8.0f, 8.0f );
ADDRLP4 248
INDIRP4
CNSTI4 328
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 332
ADDP4
CNSTF4 1090519040
ASGNF4
ADDRLP4 248
INDIRP4
CNSTI4 336
ADDP4
CNSTF4 1090519040
ASGNF4
line 2294
;2294:			saberent->s.loopSound = 0;
ADDRLP4 248
INDIRP4
CNSTI4 200
ADDP4
CNSTI4 0
ASGNI4
line 2295
;2295:		}
LABELV $1055
line 2297
;2296:
;2297:		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 $1057
ADDRLP4 252
INDIRP4
CNSTI4 544
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1057
line 2298
;2298:		{
line 2299
;2299:			if (self->client->ps.saberIdleWound < level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 736
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
GEI4 $1060
line 2300
;2300:			{
line 2303
;2301:				gentity_t *te;
;2302:				vec3_t dir;
;2303:				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 2304
;2304:				VectorSet( dir, 0, 1, 0 );
ADDRLP4 260
CNSTF4 0
ASGNF4
ADDRLP4 260+4
CNSTF4 1065353216
ASGNF4
ADDRLP4 260+8
CNSTF4 0
ASGNF4
line 2305
;2305:				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 2306
;2306:				VectorCopy(dir, te->s.angles);
ADDRLP4 256
INDIRP4
CNSTI4 116
ADDP4
ADDRLP4 260
INDIRB
ASGNB 12
line 2307
;2307:				te->s.eventParm = 1;
ADDRLP4 256
INDIRP4
CNSTI4 256
ADDP4
CNSTI4 1
ASGNI4
line 2309
;2308:
;2309:				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 736
ADDP4
ADDRGP4 level+32
INDIRI4
ADDRLP4 276
INDIRI4
ADDI4
ASGNI4
line 2310
;2310:			}
LABELV $1060
line 2312
;2311:
;2312:			VectorCopy(boltOrigin, self->client->lastSaberBase);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
ADDRLP4 12
INDIRB
ASGNB 12
line 2313
;2313:			VectorCopy(end, self->client->lastSaberTip);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1720
ADDP4
ADDRLP4 124
INDIRB
ASGNB 12
line 2314
;2314:			self->client->hasCurrentPosition = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1744
ADDP4
CNSTI4 1
ASGNI4
line 2316
;2315:
;2316:			self->client->ps.saberBlocked = BLOCKED_NONE;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 0
ASGNI4
line 2318
;2317:
;2318:			goto finalUpdate;
ADDRGP4 $1008
JUMPV
LABELV $1057
line 2321
;2319:		}
;2320:
;2321:		if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1352
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1070
line 2322
;2322:		{
line 2323
;2323:			self->client->ps.saberIdleWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 736
ADDP4
CNSTI4 0
ASGNI4
line 2324
;2324:			self->client->ps.saberAttackWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
CNSTI4 0
ASGNI4
line 2325
;2325:		}
LABELV $1070
line 2327
;2326:
;2327:		if (self->client->hasCurrentPosition && g_saberInterpolate.integer)
ADDRLP4 256
CNSTI4 0
ASGNI4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1744
ADDP4
INDIRI4
ADDRLP4 256
INDIRI4
EQI4 $1072
ADDRGP4 g_saberInterpolate+12
INDIRI4
ADDRLP4 256
INDIRI4
EQI4 $1072
line 2328
;2328:		{
line 2329
;2329:			if (!CheckSaberDamage(self, boltOrigin, end, qfalse))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 12
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 0
ARGI4
ADDRLP4 260
ADDRGP4 CheckSaberDamage
CALLI4
ASGNI4
ADDRLP4 260
INDIRI4
CNSTI4 0
NEI4 $1073
line 2330
;2330:			{
line 2331
;2331:				CheckSaberDamage(self, boltOrigin, end, qtrue);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 12
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 1
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 2332
;2332:			}
line 2333
;2333:		}
ADDRGP4 $1073
JUMPV
LABELV $1072
line 2335
;2334:		else
;2335:		{
line 2336
;2336:			CheckSaberDamage(self, boltOrigin, end, qfalse);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 12
ARGP4
ADDRLP4 124
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 2337
;2337:		}
LABELV $1073
line 2339
;2338:
;2339:		if (self->client->ps.dualBlade)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1352
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1077
line 2340
;2340:		{
line 2343
;2341:			vec3_t otherOrg, otherEnd;
;2342:
;2343:			VectorMA( boltOrigin, -12, rawAngles, otherOrg );
ADDRLP4 284
CNSTF4 3242196992
ASGNF4
ADDRLP4 260
ADDRLP4 12
INDIRF4
ADDRLP4 284
INDIRF4
ADDRLP4 184
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 260+4
ADDRLP4 12+4
INDIRF4
ADDRLP4 284
INDIRF4
ADDRLP4 184+4
INDIRF4
MULF4
ADDF4
ASGNF4
ADDRLP4 260+8
ADDRLP4 12+8
INDIRF4
CNSTF4 3242196992
ADDRLP4 184+8
INDIRF4
MULF4
ADDF4
ASGNF4
line 2344
;2344:			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 2346
;2345:
;2346:			self->client->ps.saberIdleWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 736
ADDP4
CNSTI4 0
ASGNI4
line 2347
;2347:			self->client->ps.saberAttackWound = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 740
ADDP4
CNSTI4 0
ASGNI4
line 2349
;2348:
;2349:			CheckSaberDamage(self, otherOrg, otherEnd, qfalse);
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 260
ARGP4
ADDRLP4 272
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 CheckSaberDamage
CALLI4
pop
line 2350
;2350:		}
LABELV $1077
line 2352
;2351:
;2352:		VectorCopy(boltOrigin, self->client->lastSaberBase);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1732
ADDP4
ADDRLP4 12
INDIRB
ASGNB 12
line 2353
;2353:		VectorCopy(end, self->client->lastSaberTip);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1720
ADDP4
ADDRLP4 124
INDIRB
ASGNB 12
line 2354
;2354:		self->client->hasCurrentPosition = qtrue;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1744
ADDP4
CNSTI4 1
ASGNI4
line 2356
;2355:
;2356:		self->client->ps.saberEntityState = 0;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 552
ADDP4
CNSTI4 0
ASGNI4
line 2357
;2357:	}
LABELV $1053
LABELV $1042
LABELV $1008
line 2359
;2358:finalUpdate:
;2359:	if (self->client->ps.saberLockFrame)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 532
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1091
line 2360
;2360:	{
line 2361
;2361:		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 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1093
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 2362
;2362:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "upper_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 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $234
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 2363
;2363:		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 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1096
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 2364
;2364:		return;
ADDRGP4 $969
JUMPV
LABELV $1091
line 2367
;2365:	}
;2366:
;2367:	if (self->client->ps.legsAnimExecute != legsAnim)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 716
ADDP4
INDIRI4
ADDRLP4 120
INDIRI4
EQI4 $1098
line 2368
;2368:	{
line 2369
;2369:		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 2371
;2370:		int aFlags;
;2371:		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 2373
;2372:
;2373:		if (bgGlobalAnimations[legsAnim].loopFrames != -1)
CNSTI4 28
ADDRLP4 120
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1101
line 2374
;2374:		{
line 2375
;2375:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 252
CNSTI4 16
ASGNI4
line 2376
;2376:		}
ADDRGP4 $1102
JUMPV
LABELV $1101
line 2378
;2377:		else
;2378:		{
line 2379
;2379:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 252
CNSTI4 72
ASGNI4
line 2380
;2380:		}
LABELV $1102
line 2382
;2381:
;2382:		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 252
ADDRLP4 252
INDIRI4
CNSTI4 128
BORI4
ASGNI4
line 2384
;2383:
;2384:		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 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1093
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 2385
;2385:		self->client->ps.legsAnimExecute = legsAnim;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 716
ADDP4
ADDRLP4 120
INDIRI4
ASGNI4
line 2386
;2386:	}
LABELV $1098
line 2387
;2387:	if (self->client->ps.torsoAnimExecute != torsoAnim)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 720
ADDP4
INDIRI4
ADDRLP4 92
INDIRI4
EQI4 $1106
line 2388
;2388:	{
line 2390
;2389:		int initialFrame;
;2390:		int aFlags = 0;
ADDRLP4 248
CNSTI4 0
ASGNI4
line 2391
;2391:		float animSpeed = 0;
ADDRLP4 252
CNSTF4 0
ASGNF4
line 2393
;2392:
;2393:		f = torsoAnim;
ADDRLP4 136
ADDRLP4 92
INDIRI4
ASGNI4
line 2395
;2394:
;2395:		initialFrame = bgGlobalAnimations[f].firstFrame;
ADDRLP4 256
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations
ADDP4
INDIRI4
ASGNI4
line 2408
;2396:	
;2397:		/*
;2398:		if (bgGlobalAnimations[f].numFrames > 20)
;2399:		{
;2400:			initialFrame += 6;
;2401:		}
;2402:		else if (bgGlobalAnimations[f].numFrames > 3)
;2403:		{ //HACK: Force it a couple frames into the animation so it doesn't lag behind the client visual position as much..
;2404:			initialFrame += 2;
;2405:		}
;2406:		*/
;2407:
;2408:		BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, f, &animSpeedScale);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1216
ADDP4
INDIRI4
ARGI4
ADDRLP4 136
INDIRI4
ARGI4
ADDRLP4 28
ARGP4
ADDRGP4 BG_SaberStartTransAnim
CALLV
pop
line 2410
;2409:
;2410:		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 2411
;2411:		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 2413
;2412:
;2413:		if (bgGlobalAnimations[f].loopFrames != -1)
CNSTI4 28
ADDRLP4 136
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1109
line 2414
;2414:		{
line 2415
;2415:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 248
CNSTI4 16
ASGNI4
line 2416
;2416:		}
ADDRGP4 $1110
JUMPV
LABELV $1109
line 2418
;2417:		else
;2418:		{
line 2419
;2419:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 248
CNSTI4 72
ASGNI4
line 2420
;2420:		}
LABELV $1110
line 2422
;2421:
;2422:		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 2424
;2423:
;2424:		trap_G2API_SetBoneAnim(self->client->ghoul2, 0, "upper_lumbar", initialFrame, bgGlobalAnimations[f].firstFrame+bgGlobalAnimations[f].numFrames, aFlags, animSpeedScale, level.time, initialFrame, 150);
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $234
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 2426
;2425:
;2426:		self->client->ps.torsoAnimExecute = torsoAnim;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 720
ADDP4
ADDRLP4 92
INDIRI4
ASGNI4
line 2428
;2427:		
;2428:		setTorso = qtrue;
ADDRLP4 144
CNSTI4 1
ASGNI4
line 2429
;2429:	}
LABELV $1106
line 2431
;2430:
;2431:	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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
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 $1114
ADDRLP4 144
INDIRI4
ADDRLP4 292
INDIRI4
EQI4 $1114
line 2442
;2432:		!BG_FlippingAnim( self->client->ps.torsoAnim ) &&
;2433:		!BG_SpinningSaberAnim( self->client->ps.legsAnim ) &&
;2434:		!BG_SpinningSaberAnim( self->client->ps.torsoAnim ) &&
;2435:		!BG_InSpecialJump( self->client->ps.legsAnim ) &&
;2436:		!BG_InSpecialJump( self->client->ps.torsoAnim ) &&
;2437:		!BG_InRoll(&self->client->ps, self->client->ps.legsAnim) &&
;2438:		!BG_SaberInSpecial(self->client->ps.saberMove) &&
;2439:		!BG_SaberInSpecialAttack(self->client->ps.legsAnim) &&
;2440:		!BG_SaberInSpecialAttack(self->client->ps.torsoAnim) &&
;2441:		setTorso )
;2442:	{
line 2443
;2443:		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 2445
;2444:		int aFlags;
;2445:		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 2447
;2446:
;2447:		if (bgGlobalAnimations[torsoAnim].loopFrames != -1)
CNSTI4 28
ADDRLP4 92
INDIRI4
MULI4
ADDRGP4 bgGlobalAnimations+8
ADDP4
INDIRI4
CNSTI4 -1
EQI4 $1117
line 2448
;2448:		{
line 2449
;2449:			aFlags = BONE_ANIM_OVERRIDE_LOOP;
ADDRLP4 300
CNSTI4 16
ASGNI4
line 2450
;2450:		}
ADDRGP4 $1118
JUMPV
LABELV $1117
line 2452
;2451:		else
;2452:		{
line 2453
;2453:			aFlags = BONE_ANIM_OVERRIDE_FREEZE;
ADDRLP4 300
CNSTI4 72
ASGNI4
line 2454
;2454:		}
LABELV $1118
line 2456
;2455:
;2456:		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 2458
;2457:
;2458:		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 1716
ADDP4
INDIRP4
ARGP4
CNSTI4 0
ARGI4
ADDRGP4 $1096
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 2459
;2459:	}
LABELV $1114
line 2460
;2460:}
LABELV $969
endproc WP_SaberPositionUpdate 316 40
export WP_MissileBlockForBlock
proc WP_MissileBlockForBlock 4 0
line 2463
;2461:
;2462:int WP_MissileBlockForBlock( int saberBlock )
;2463:{
line 2464
;2464:	switch( saberBlock )
ADDRLP4 0
ADDRFP4 0
INDIRI4
ASGNI4
ADDRLP4 0
INDIRI4
CNSTI4 3
LTI4 $1123
ADDRLP4 0
INDIRI4
CNSTI4 7
GTI4 $1123
ADDRLP4 0
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1130-12
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1130
address $1125
address $1126
address $1127
address $1128
address $1129
code
line 2465
;2465:	{
LABELV $1125
line 2467
;2466:	case BLOCKED_UPPER_RIGHT:
;2467:		return BLOCKED_UPPER_RIGHT_PROJ;
CNSTI4 8
RETI4
ADDRGP4 $1122
JUMPV
line 2468
;2468:		break;
LABELV $1126
line 2470
;2469:	case BLOCKED_UPPER_LEFT:
;2470:		return BLOCKED_UPPER_LEFT_PROJ;
CNSTI4 9
RETI4
ADDRGP4 $1122
JUMPV
line 2471
;2471:		break;
LABELV $1127
line 2473
;2472:	case BLOCKED_LOWER_RIGHT:
;2473:		return BLOCKED_LOWER_RIGHT_PROJ;
CNSTI4 10
RETI4
ADDRGP4 $1122
JUMPV
line 2474
;2474:		break;
LABELV $1128
line 2476
;2475:	case BLOCKED_LOWER_LEFT:
;2476:		return BLOCKED_LOWER_LEFT_PROJ;
CNSTI4 11
RETI4
ADDRGP4 $1122
JUMPV
line 2477
;2477:		break;
LABELV $1129
line 2479
;2478:	case BLOCKED_TOP:
;2479:		return BLOCKED_TOP_PROJ;
CNSTI4 12
RETI4
ADDRGP4 $1122
JUMPV
line 2480
;2480:		break;
LABELV $1123
line 2482
;2481:	}
;2482:	return saberBlock;
ADDRFP4 0
INDIRI4
RETI4
LABELV $1122
endproc WP_MissileBlockForBlock 4 0
lit
align 4
LABELV $1133
byte 4 0
byte 4 0
byte 4 0
export WP_SaberBlockNonRandom
code
proc WP_SaberBlockNonRandom 72 16
line 2486
;2483:}
;2484:
;2485:void WP_SaberBlockNonRandom( gentity_t *self, vec3_t hitloc, qboolean missileBlock )
;2486:{
line 2487
;2487:	vec3_t diff, fwdangles={0,0,0}, right;
ADDRLP4 36
ADDRGP4 $1133
INDIRB
ASGNB 12
line 2492
;2488:	vec3_t clEye;
;2489:	float rightdot;
;2490:	float zdiff;
;2491:
;2492:	VectorCopy(self->client->ps.origin, clEye);
ADDRLP4 12
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 20
ADDP4
INDIRB
ASGNB 12
line 2493
;2493:	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 2495
;2494:
;2495:	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 2496
;2496:	diff[2] = 0;
ADDRLP4 0+8
CNSTF4 0
ASGNF4
line 2497
;2497:	VectorNormalize( diff );
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2499
;2498:
;2499:	fwdangles[1] = self->client->ps.viewangles[1];
ADDRLP4 36+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2501
;2500:	// Ultimately we might care if the shot was ahead or behind, but for now, just quadrant is fine.
;2501:	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 2503
;2502:
;2503:	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 2504
;2504:	zdiff = hitloc[2] - clEye[2];
ADDRLP4 48
ADDRFP4 4
INDIRP4
CNSTI4 8
ADDP4
INDIRF4
ADDRLP4 12+8
INDIRF4
SUBF4
ASGNF4
line 2507
;2505:	
;2506:	//FIXME: take torsoAngles into account?
;2507:	if ( zdiff > 0 )//40 )
ADDRLP4 48
INDIRF4
CNSTF4 0
LEF4 $1146
line 2508
;2508:	{
line 2509
;2509:		if ( rightdot > 0.3 )
ADDRLP4 52
INDIRF4
CNSTF4 1050253722
LEF4 $1148
line 2510
;2510:		{
line 2511
;2511:			self->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2512
;2512:		}
ADDRGP4 $1147
JUMPV
LABELV $1148
line 2513
;2513:		else if ( rightdot < -0.3 )
ADDRLP4 52
INDIRF4
CNSTF4 3197737370
GEF4 $1150
line 2514
;2514:		{
line 2515
;2515:			self->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 2516
;2516:		}
ADDRGP4 $1147
JUMPV
LABELV $1150
line 2518
;2517:		else
;2518:		{
line 2519
;2519:			self->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 2520
;2520:		}
line 2521
;2521:	}
ADDRGP4 $1147
JUMPV
LABELV $1146
line 2522
;2522:	else if ( zdiff > -20 )//20 )
ADDRLP4 48
INDIRF4
CNSTF4 3248488448
LEF4 $1152
line 2523
;2523:	{
line 2524
;2524:		if ( zdiff < -10 )//30 )
ADDRLP4 48
INDIRF4
CNSTF4 3240099840
GEF4 $1154
line 2525
;2525:		{//hmm, pretty low, but not low enough to use the low block, so we need to duck
line 2527
;2526:			//NPC should duck, but NPC should never get here
;2527:		}
LABELV $1154
line 2528
;2528:		if ( rightdot > 0.1 )
ADDRLP4 52
INDIRF4
CNSTF4 1036831949
LEF4 $1156
line 2529
;2529:		{
line 2530
;2530:			self->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2531
;2531:		}
ADDRGP4 $1153
JUMPV
LABELV $1156
line 2532
;2532:		else if ( rightdot < -0.1 )
ADDRLP4 52
INDIRF4
CNSTF4 3184315597
GEF4 $1158
line 2533
;2533:		{
line 2534
;2534:			self->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 2535
;2535:		}
ADDRGP4 $1153
JUMPV
LABELV $1158
line 2537
;2536:		else
;2537:		{//FIXME: this looks really weird if the shot is too low!
line 2538
;2538:			self->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 2539
;2539:		}
line 2540
;2540:	}
ADDRGP4 $1153
JUMPV
LABELV $1152
line 2542
;2541:	else
;2542:	{
line 2543
;2543:		if ( rightdot >= 0 )
ADDRLP4 52
INDIRF4
CNSTF4 0
LTF4 $1160
line 2544
;2544:		{
line 2545
;2545:			self->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 2546
;2546:		}
ADDRGP4 $1161
JUMPV
LABELV $1160
line 2548
;2547:		else
;2548:		{
line 2549
;2549:			self->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 2550
;2550:		}
LABELV $1161
line 2551
;2551:	}
LABELV $1153
LABELV $1147
line 2580
;2552:
;2553:	/*
;2554:	if ( !self->s.number )
;2555:	{
;2556:		gi.Printf( "EyeZ: %4.2f  HitZ: %4.2f  zdiff: %4.2f  rdot: %4.2f\n", self->client->renderInfo.eyePoint[2], hitloc[2], zdiff, rightdot );
;2557:		switch ( self->client->ps.saberBlocked )
;2558:		{
;2559:		case BLOCKED_TOP:
;2560:			gi.Printf( "BLOCKED_TOP\n" );
;2561:			break;
;2562:		case BLOCKED_UPPER_RIGHT:
;2563:			gi.Printf( "BLOCKED_UPPER_RIGHT\n" );
;2564:			break;
;2565:		case BLOCKED_UPPER_LEFT:
;2566:			gi.Printf( "BLOCKED_UPPER_LEFT\n" );
;2567:			break;
;2568:		case BLOCKED_LOWER_RIGHT:
;2569:			gi.Printf( "BLOCKED_LOWER_RIGHT\n" );
;2570:			break;
;2571:		case BLOCKED_LOWER_LEFT:
;2572:			gi.Printf( "BLOCKED_LOWER_LEFT\n" );
;2573:			break;
;2574:		default:
;2575:			break;
;2576:		}
;2577:	}
;2578:	*/
;2579:
;2580:	if ( missileBlock )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $1162
line 2581
;2581:	{
line 2582
;2582:		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 2587
;2583:		//if ( !self->s.number )
;2584:		//{
;2585:			//G_DynaMixEvent( DM_BLOCK );
;2586:		//}
;2587:	}
LABELV $1162
line 2589
;2588:	else
;2589:	{
line 2594
;2590:		//if ( !self->s.number )
;2591:		//{
;2592:			//G_DynaMixEvent( DM_PARRY );
;2593:		//}
;2594:	}
LABELV $1163
line 2595
;2595:}
LABELV $1132
endproc WP_SaberBlockNonRandom 72 16
lit
align 4
LABELV $1165
byte 4 0
byte 4 0
byte 4 0
export WP_SaberBlock
code
proc WP_SaberBlock 80 16
line 2598
;2596:
;2597:void WP_SaberBlock( gentity_t *playerent, vec3_t hitloc, qboolean missileBlock )
;2598:{
line 2600
;2599:	//gentity_t *playerent;
;2600:	vec3_t diff, fwdangles={0,0,0}, right;
ADDRLP4 24
ADDRGP4 $1165
INDIRB
ASGNB 12
line 2620
;2601:	float rightdot;
;2602:	float zdiff;
;2603:
;2604:	/*
;2605:	if (saber && saber->owner)
;2606:	{
;2607:		playerent = saber->owner;
;2608:		if (!playerent->client)
;2609:		{
;2610:			return;
;2611:		}
;2612:	}
;2613:	else
;2614:	{	// Bad entity passed.
;2615:		return;
;2616:	}
;2617:	*/
;2618:	//I don't see what the point of this was anyway, saber isn't used anywhere in the function.
;2619:
;2620:	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 2621
;2621:	VectorNormalize(diff);
ADDRLP4 0
ARGP4
ADDRGP4 VectorNormalize
CALLF4
pop
line 2623
;2622:
;2623:	fwdangles[1] = playerent->client->ps.viewangles[1];
ADDRLP4 24+4
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 160
ADDP4
INDIRF4
ASGNF4
line 2625
;2624:	// Ultimately we might care if the shot was ahead or behind, but for now, just quadrant is fine.
;2625:	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 2627
;2626:
;2627:	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 2628
;2628:	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 2631
;2629:	
;2630:	// Figure out what quadrant the block was in.
;2631:	if (zdiff > 24)
ADDRLP4 36
INDIRF4
CNSTF4 1103101952
LEF4 $1173
line 2632
;2632:	{	// Attack from above
line 2633
;2633:		if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1175
line 2634
;2634:		{
line 2635
;2635:			playerent->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 2636
;2636:		}
ADDRGP4 $1174
JUMPV
LABELV $1175
line 2638
;2637:		else
;2638:		{
line 2639
;2639:			playerent->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 2640
;2640:		}
line 2641
;2641:	}
ADDRGP4 $1174
JUMPV
LABELV $1173
line 2642
;2642:	else if (zdiff > 13)
ADDRLP4 36
INDIRF4
CNSTF4 1095761920
LEF4 $1177
line 2643
;2643:	{	// The upper half has three viable blocks...
line 2644
;2644:		if (rightdot > 0.25)
ADDRLP4 40
INDIRF4
CNSTF4 1048576000
LEF4 $1179
line 2645
;2645:		{	// In the right quadrant...
line 2646
;2646:			if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1181
line 2647
;2647:			{
line 2648
;2648:				playerent->client->ps.saberBlocked = BLOCKED_UPPER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 4
ASGNI4
line 2649
;2649:			}
ADDRGP4 $1178
JUMPV
LABELV $1181
line 2651
;2650:			else
;2651:			{
line 2652
;2652:				playerent->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 2653
;2653:			}
line 2654
;2654:		}
ADDRGP4 $1178
JUMPV
LABELV $1179
line 2656
;2655:		else
;2656:		{
line 2657
;2657:			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 $1178
ADDRLP4 68
INDIRI4
CNSTI4 3
GTI4 $1178
ADDRLP4 68
INDIRI4
CNSTI4 2
LSHI4
ADDRGP4 $1189
ADDP4
INDIRP4
JUMPV
lit
align 4
LABELV $1189
address $1186
address $1187
address $1187
address $1188
code
line 2658
;2658:			{
LABELV $1186
line 2660
;2659:			case 0:
;2660:				playerent->client->ps.saberBlocked = BLOCKED_UPPER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 3
ASGNI4
line 2661
;2661:				break;
ADDRGP4 $1178
JUMPV
LABELV $1187
line 2664
;2662:			case 1:
;2663:			case 2:
;2664:				playerent->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 2665
;2665:				break;
ADDRGP4 $1178
JUMPV
LABELV $1188
line 2667
;2666:			case 3:
;2667:				playerent->client->ps.saberBlocked = BLOCKED_TOP;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 7
ASGNI4
line 2668
;2668:				break;
line 2670
;2669:			}
;2670:		}
line 2671
;2671:	}
ADDRGP4 $1178
JUMPV
LABELV $1177
line 2673
;2672:	else
;2673:	{	// The lower half is a bit iffy as far as block coverage.  Pick one of the "low" ones at random.
line 2674
;2674:		if (Q_irand(0,1))
CNSTI4 0
ARGI4
CNSTI4 1
ARGI4
ADDRLP4 68
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 68
INDIRI4
CNSTI4 0
EQI4 $1190
line 2675
;2675:		{
line 2676
;2676:			playerent->client->ps.saberBlocked = BLOCKED_LOWER_RIGHT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 5
ASGNI4
line 2677
;2677:		}
ADDRGP4 $1191
JUMPV
LABELV $1190
line 2679
;2678:		else
;2679:		{
line 2680
;2680:			playerent->client->ps.saberBlocked = BLOCKED_LOWER_LEFT;
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 520
ADDP4
CNSTI4 6
ASGNI4
line 2681
;2681:		}
LABELV $1191
line 2682
;2682:	}
LABELV $1178
LABELV $1174
line 2684
;2683:
;2684:	if ( missileBlock )
ADDRFP4 8
INDIRI4
CNSTI4 0
EQI4 $1192
line 2685
;2685:	{
line 2686
;2686:		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 2687
;2687:	}
LABELV $1192
line 2688
;2688:}
LABELV $1164
endproc WP_SaberBlock 80 16
export WP_SaberCanBlock
proc WP_SaberCanBlock 64 16
line 2691
;2689:
;2690:int WP_SaberCanBlock(gentity_t *self, vec3_t point, int dflags, int mod, qboolean projectile, int attackStr)
;2691:{
line 2692
;2692:	qboolean thrownSaber = qfalse;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 2693
;2693:	float blockFactor = 0;
ADDRLP4 0
CNSTF4 0
ASGNF4
line 2695
;2694:
;2695:	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 $1198
ADDRLP4 8
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CVPU4 4
ADDRLP4 12
INDIRU4
EQU4 $1198
ADDRFP4 4
INDIRP4
CVPU4 4
ADDRLP4 12
INDIRU4
NEU4 $1195
LABELV $1198
line 2696
;2696:	{
line 2697
;2697:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1195
line 2700
;2698:	}
;2699:
;2700:	if (attackStr == 8)
ADDRFP4 20
INDIRI4
CNSTI4 8
NEI4 $1199
line 2701
;2701:	{
line 2702
;2702:		attackStr = 0;
ADDRFP4 20
CNSTI4 0
ASGNI4
line 2703
;2703:		thrownSaber = qtrue;
ADDRLP4 4
CNSTI4 1
ASGNI4
line 2704
;2704:	}
LABELV $1199
line 2706
;2705:
;2706:	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 $1201
line 2707
;2707:	{
line 2708
;2708:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1201
line 2711
;2709:	}
;2710:
;2711:	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 $1203
ADDRLP4 28
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 28
INDIRP4
CNSTI4 520
ADDP4
INDIRI4
ADDRLP4 24
INDIRI4
NEI4 $1203
ADDRLP4 32
ADDRLP4 28
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
ASGNI4
ADDRLP4 32
INDIRI4
CNSTI4 1
EQI4 $1203
ADDRLP4 32
INDIRI4
ADDRLP4 24
INDIRI4
EQI4 $1203
line 2713
;2712:		self->client->ps.saberMove != LS_READY && self->client->ps.saberMove != LS_NONE)
;2713:	{
line 2714
;2714:		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 $1207
ADDRLP4 36
INDIRI4
CNSTI4 117
LEI4 $1205
LABELV $1207
line 2715
;2715:		{
line 2716
;2716:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1205
line 2718
;2717:		}
;2718:	}
LABELV $1203
line 2720
;2719:
;2720:	if (self->client->ps.saberHolstered)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1300
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1208
line 2721
;2721:	{
line 2722
;2722:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1208
line 2725
;2723:	}
;2724:
;2725:	if (self->client->ps.usingATST)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1304
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1210
line 2726
;2726:	{
line 2727
;2727:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1210
line 2730
;2728:	}
;2729:
;2730:	if (self->client->ps.weapon != WP_SABER)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 148
ADDP4
INDIRI4
CNSTI4 2
EQI4 $1212
line 2731
;2731:	{
line 2732
;2732:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1212
line 2735
;2733:	}
;2734:
;2735:	if (self->client->ps.weaponstate == WEAPON_RAISING)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 152
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1214
line 2736
;2736:	{
line 2737
;2737:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1214
line 2740
;2738:	}
;2739:
;2740:	if (self->client->ps.saberInFlight)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 504
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1216
line 2741
;2741:	{
line 2742
;2742:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1216
line 2745
;2743:	}
;2744:
;2745:	if ((self->client->pers.cmd.buttons & BUTTON_ATTACK)/* &&
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1388
ADDP4
INDIRI4
CNSTI4 1
BANDI4
CNSTI4 0
EQI4 $1218
line 2747
;2746:		(projectile || attackStr == FORCE_LEVEL_3)*/)
;2747:	{ //don't block when the player is trying to slash, if it's a projectile or he's doing a very strong attack
line 2748
;2748:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1218
line 2751
;2749:	}
;2750:
;2751:	if (attackStr == FORCE_LEVEL_3)
ADDRFP4 20
INDIRI4
CNSTI4 3
NEI4 $1220
line 2752
;2752:	{
line 2753
;2753:		if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1222
line 2754
;2754:		{
line 2755
;2755:			if (Q_irand(1, 10) < 3)
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 36
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 3
GEI4 $1223
line 2756
;2756:			{
line 2757
;2757:				return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
line 2759
;2758:			}
;2759:		}
LABELV $1222
line 2761
;2760:		else
;2761:		{
line 2762
;2762:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1223
line 2764
;2763:		}
;2764:	}
LABELV $1220
line 2766
;2765:
;2766:	if (attackStr == FORCE_LEVEL_2 && Q_irand(1, 10) < 3)
ADDRFP4 20
INDIRI4
CNSTI4 2
NEI4 $1226
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 36
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 36
INDIRI4
CNSTI4 3
GEI4 $1226
line 2767
;2767:	{
line 2768
;2768:		if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 3
LTI4 $1228
line 2769
;2769:		{
line 2771
;2770:			//do nothing for now
;2771:		}
ADDRGP4 $1229
JUMPV
LABELV $1228
line 2772
;2772:		else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] >= FORCE_LEVEL_2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 2
LTI4 $1230
line 2773
;2773:		{
line 2774
;2774:			if (Q_irand(1, 10) < 5)
CNSTI4 1
ARGI4
CNSTI4 10
ARGI4
ADDRLP4 40
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 40
INDIRI4
CNSTI4 5
GEI4 $1231
line 2775
;2775:			{
line 2776
;2776:				return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
line 2778
;2777:			}
;2778:		}
LABELV $1230
line 2780
;2779:		else
;2780:		{
line 2781
;2781:			return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1231
LABELV $1229
line 2783
;2782:		}
;2783:	}
LABELV $1226
line 2785
;2784:	
;2785:	if (attackStr == FORCE_LEVEL_1 && !self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] &&
ADDRLP4 40
CNSTI4 1
ASGNI4
ADDRFP4 20
INDIRI4
ADDRLP4 40
INDIRI4
NEI4 $1234
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1234
ADDRLP4 40
INDIRI4
ARGI4
CNSTI4 40
ARGI4
ADDRLP4 44
ADDRGP4 Q_irand
CALLI4
ASGNI4
ADDRLP4 44
INDIRI4
CNSTI4 3
GEI4 $1234
line 2787
;2786:		Q_irand(1, 40) < 3)
;2787:	{ //if I have no defense level at all then I might be unable to block a level 1 attack (but very rarely)
line 2788
;2788:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1234
line 2791
;2789:	}
;2790:
;2791:	if (SaberAttacking(self))
ADDRFP4 0
INDIRP4
ARGP4
ADDRLP4 48
ADDRGP4 SaberAttacking
CALLI4
ASGNI4
ADDRLP4 48
INDIRI4
CNSTI4 0
EQI4 $1236
line 2792
;2792:	{ //attacking, can't block now
line 2795
;2793:
;2794:		//FIXME: Do a "saber box" check here to see if the enemy saber hit this guy's saber
;2795:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1236
line 2798
;2796:	}
;2797:
;2798:	if (self->client->ps.saberMove != LS_READY &&
ADDRLP4 52
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 52
INDIRP4
CNSTI4 512
ADDP4
INDIRI4
CNSTI4 1
EQI4 $1238
ADDRLP4 52
INDIRP4
CNSTI4 516
ADDP4
INDIRI4
CNSTI4 0
NEI4 $1238
line 2800
;2799:		!self->client->ps.saberBlocking)
;2800:	{
line 2801
;2801:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1238
line 2804
;2802:	}
;2803:
;2804:	if (self->client->ps.saberBlockTime >= level.time)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 744
ADDP4
INDIRI4
ADDRGP4 level+32
INDIRI4
LTI4 $1240
line 2805
;2805:	{
line 2806
;2806:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1240
line 2809
;2807:	}
;2808:
;2809:	if (self->client->ps.forceHandExtend != HANDEXTEND_NONE)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 1236
ADDP4
INDIRI4
CNSTI4 0
EQI4 $1243
line 2810
;2810:	{
line 2811
;2811:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1243
line 2814
;2812:	}
;2813:
;2814:	if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_3)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 3
NEI4 $1245
line 2815
;2815:	{
line 2816
;2816:		blockFactor = 0.05f;
ADDRLP4 0
CNSTF4 1028443341
ASGNF4
line 2817
;2817:	}
ADDRGP4 $1246
JUMPV
LABELV $1245
line 2818
;2818:	else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_2)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 2
NEI4 $1247
line 2819
;2819:	{
line 2820
;2820:		blockFactor = 0.6f;
ADDRLP4 0
CNSTF4 1058642330
ASGNF4
line 2821
;2821:	}
ADDRGP4 $1248
JUMPV
LABELV $1247
line 2822
;2822:	else if (self->client->ps.fd.forcePowerLevel[FP_SABERDEFEND] == FORCE_LEVEL_1)
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
CNSTI4 996
ADDP4
INDIRI4
CNSTI4 1
NEI4 $1249
line 2823
;2823:	{
line 2824
;2824:		blockFactor = 0.9f;
ADDRLP4 0
CNSTF4 1063675494
ASGNF4
line 2825
;2825:	}
ADDRGP4 $1250
JUMPV
LABELV $1249
line 2827
;2826:	else
;2827:	{ //for now we just don't get to autoblock with no def
line 2828
;2828:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1250
LABELV $1248
LABELV $1246
line 2831
;2829:	}
;2830:
;2831:	if (thrownSaber)
ADDRLP4 4
INDIRI4
CNSTI4 0
EQI4 $1251
line 2832
;2832:	{
line 2833
;2833:		blockFactor -= 0.25f;
ADDRLP4 0
ADDRLP4 0
INDIRF4
CNSTF4 1048576000
SUBF4
ASGNF4
line 2834
;2834:	}
LABELV $1251
line 2836
;2835:
;2836:	if (!InFront( point, self->client->ps.origin, self->client->ps.viewangles, blockFactor )) //orig 0.2f
ADDRFP4 4
INDIRP4
ARGP4
ADDRLP4 56
ADDRFP4 0
INDIRP4
CNSTI4 408
ADDP4
INDIRP4
ASGNP4
ADDRLP4 56
INDIRP4
CNSTI4 20
ADDP4
ARGP4
ADDRLP4 56
INDIRP4
CNSTI4 156
ADDP4
ARGP4
ADDRLP4 0
INDIRF4
ARGF4
ADDRLP4 60
ADDRGP4 InFront
CALLI4
ASGNI4
ADDRLP4 60
INDIRI4
CNSTI4 0
NEI4 $1253
line 2837
;2837:	{
line 2838
;2838:		return 0;
CNSTI4 0
RETI4
ADDRGP4 $1194
JUMPV
LABELV $1253
line 2841
;2839:	}
;2840:
;2841:	WP_SaberBlockNonRandom(self, point, projectile);
ADDRFP4 0
INDIRP4
ARGP4
ADDRFP4 4
INDIRP4
ARGP4
ADDRFP4 16
INDIRI4
ARGI4
ADDRGP4 WP_SaberBlockNonRandom
CALLV
pop
line 2842
;2842:	return 1;
CNSTI4 1
RETI4
LABELV $1194
endproc WP_SaberCanBlock 64 16
export HasSetSaberOnly
proc HasSetSaberOnly 16 0
line 2846
;2843:}
;2844:
;2845:qboolean HasSetSaberOnly(void)
;2846:{
line 2847
;2847:	int i = 0;
ADDRLP4 0
CNSTI4 0
ASGNI4
line 2848
;2848:	int wDisable = 0;
ADDRLP4 4
CNSTI4 0
ASGNI4
line 2850
;2849:
;2850:	if (g_gametype.integer == GT_JEDIMASTER)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 2
NEI4 $1256
line 2851
;2851:	{ //set to 0 
line 2852
;2852:		return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1255
JUMPV
LABELV $1256
line 2855
;2853:	}
;2854:
;2855:	if (g_gametype.integer == GT_TOURNAMENT)
ADDRGP4 g_gametype+12
INDIRI4
CNSTI4 3
NEI4 $1259
line 2856
;2856:	{
line 2857
;2857:		wDisable = g_duelWeaponDisable.integer;
ADDRLP4 4
ADDRGP4 g_duelWeaponDisable+12
INDIRI4
ASGNI4
line 2858
;2858:	}
ADDRGP4 $1265
JUMPV
LABELV $1259
line 2860
;2859:	else
;2860:	{
line 2861
;2861:		wDisable = g_weaponDisable.integer;
ADDRLP4 4
ADDRGP4 g_weaponDisable+12
INDIRI4
ASGNI4
line 2862
;2862:	}
ADDRGP4 $1265
JUMPV
LABELV $1264
line 2865
;2863:
;2864:	while (i < WP_NUM_WEAPONS)
;2865:	{
line 2866
;2866:		if (!(wDisable & (1 << i)) &&
ADDRLP4 12
CNSTI4 0
ASGNI4
ADDRLP4 4
INDIRI4
CNSTI4 1
ADDRLP4 0
INDIRI4
LSHI4
BANDI4
ADDRLP4 12
INDIRI4
NEI4 $1267
ADDRLP4 0
INDIRI4
CNSTI4 2
EQI4 $1267
ADDRLP4 0
INDIRI4
ADDRLP4 12
INDIRI4
EQI4 $1267
line 2868
;2867:			i != WP_SABER && i != WP_NONE)
;2868:		{
line 2869
;2869:			return qfalse;
CNSTI4 0
RETI4
ADDRGP4 $1255
JUMPV
LABELV $1267
line 2872
;2870:		}
;2871:
;2872:		i++;
ADDRLP4 0
ADDRLP4 0
INDIRI4
CNSTI4 1
ADDI4
ASGNI4
line 2873
;2873:	}
LABELV $1265
line 2864
ADDRLP4 0
INDIRI4
CNSTI4 16
LTI4 $1264
line 2875
;2874:
;2875:	return qtrue;
CNSTI4 1
RETI4
LABELV $1255
endproc HasSetSaberOnly 16 0
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_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_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_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_timeouttospec
import g_forceDodge
import g_dismember
import g_singlePlayer
import g_enableBreath
import g_enableDust
import g_rankings
import pmove_msec
import pmove_fixed
import g_smoothClients
import g_blueteam
import g_redteam
import g_debugUp
import g_debugRight
import g_debugForward
import g_filterBan
import g_banIPs
import g_teamForceBalance
import g_teamAutoJoin
import g_allowVote
import g_blood
import g_doWarmup
import g_warmup
import g_motd
import g_synchronousClients
import g_adaptRespawn
import g_weaponTeamRespawn
import g_weaponRespawn
import g_debugDamage
import g_debugAlloc
import g_debugMove
import g_inactivity
import g_forcerespawn
import g_quadfactor
import g_knockback
import g_speed
import g_gravity
import g_needpass
import g_password
import g_friendlySaber
import g_friendlyFire
import g_saberInterpolate
import g_capturelimit
import g_timelimit
import g_duel_fraglimit
import g_fraglimit
import g_duelWeaponDisable
import g_weaponDisable
import g_forcePowerDisable
import g_spawnInvulnerability
import g_forceRegenTime
import g_saberLocking
import g_privateDuel
import g_forceBasedTeams
import g_maxForceRank
import g_dmflags
import g_autoMapCycle
import g_restarted
import g_maxGameClients
import g_maxclients
import g_cheats
import g_dedicated
import g_gametype
import g_entities
import level
import Pickup_Team
import CheckTeamStatus
import TeamplayInfoMessage
import Team_GetLocationMsg
import Team_GetLocation
import SelectSagaSpawnPoint
import SelectCTFSpawnPoint
import Team_FreeEntity
import Team_ReturnFlag
import Team_InitGame
import Team_CheckHurtCarrier
import Team_FragBonuses
import Team_DroppedFlagThink
import AddTeamScore
import TeamColorString
import OtherTeamName
import TeamName
import OtherTeam
import BotAIStartFrame
import BotAIShutdownClient
import BotAISetupClient
import BotAILoadMap
import BotAIShutdown
import BotAISetup
import B_CleanupAlloc
import B_InitAlloc
import InFieldOfVision
import BotOrder
import OrgVisible
import InitSagaMode
import G_ClearClientLog
import G_LogExit
import G_LogWeaponOutput
import G_LogWeaponInit
import G_LogWeaponItem
import G_LogWeaponPowerup
import G_LogWeaponFrag
import G_LogWeaponDeath
import G_LogWeaponKill
import G_LogWeaponDamage
import G_LogWeaponFire
import G_LogWeaponPickup
import Jedi_DodgeEvasion
import ForceTelepathy
import ForceThrow
import ForceSeeing
import ForceTeamForceReplenish
import ForceTeamHeal
import ForceAbsorb
import ForceProtect
import ForceGrip
import ForceRage
import ForceSpeed
import ForceHeal
import ForcePowerUsableOn
import WP_ForcePowersUpdate
import WP_SpawnInitForcePowers
import WP_InitForcePowers
import WP_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 g_ff_objectives
import DeathmatchScoreboardMessage
import G_SetStats
import MoveClientToIntermission
import BlowDetpacks
import FireWeapon
import G_FilterPacket
import G_ProcessIPBans
import ConsoleCommand
import gJMSaberEnt
import SpotWouldTelefrag
import CalculateRanks
import AddScore
import player_die
import ClientSpawn
import InitBodyQue
import BeginIntermission
import respawn
import CopyToBodyQue
import SelectSpawnPoint
import SetClientViewAngle
import PickTeam
import TeamLeader
import TeamCount
import CheckGauntletAttack
import SnapVectorTowards
import CalcMuzzlePoint
import LogAccuracyHit
import WP_FireGenericBlasterMissile
import WP_FireTurretMissile
import G_PlayerBecomeATST
import ATST_ManageDamageBoxes
import TeleportPlayer
import trigger_teleporter_touch
import Touch_DoorTrigger
import G_RunMover
import WP_FireBlasterMissile
import G_ExplodeMissile
import G_BounceProjectile
import CreateMissile
import G_RunMissile
import G_ReflectMissile
import ExplodeDeath
import TossClientCubes
import TossClientItems
import TossClientWeapon
import body_die
import G_RadiusDamage
import G_Damage
import CanDamage
import trap_G2API_SetBoneAnim
import trap_G2API_GetGLAName
import trap_G2API_SetBoneAngles
import trap_G2API_CleanGhoul2Models
import trap_G2API_RemoveGhoul2Model
import trap_G2API_HasGhoul2ModelOnIndex
import trap_G2API_DuplicateGhoul2Instance
import trap_G2API_CopySpecificGhoul2Model
import trap_G2API_CopyGhoul2Instance
import trap_G2API_SetBoltInfo
import trap_G2API_AddBolt
import trap_G2API_InitGhoul2Model
import trap_G2API_GetBoltMatrix_NoReconstruct
import trap_G2API_GetBoltMatrix
import trap_G2_HaveWeGhoul2Models
import trap_G2_SetGhoul2ModelIndexes
import trap_G2_ListModelBones
import trap_G2_ListModelSurfaces
import G_SkinIndex
import BuildShaderStateConfig
import AddRemap
import G_SetOrigin
import G_AddEvent
import G_AddPredictableEvent
import vtos
import tv
import G_RunObject
import G_TouchSolids
import G_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 g2SaberInstance
import precachedKyle
import forcePowerDarkLight
import WeaponAttackAnim
import WeaponReadyAnim
import BG_OutOfMemory
import BG_StringAlloc
import BG_TempFree
import BG_TempAlloc
import BG_AllocUnaligned
import BG_Alloc
import BG_CanUseFPNow
import BG_HasYsalamiri
import BG_GetItemIndexByTag
import BG_ParseAnimationFile
import BG_PlayerTouchesItem
import BG_G2PlayerAngles
import BG_PlayerStateToEntityStateExtraPolate
import BG_PlayerStateToEntityState
import BG_TouchJumpPad
import BG_AddPredictableEventToPlayerstate
import BG_EvaluateTrajectoryDelta
import BG_EvaluateTrajectory
import BG_ForcePowerDrain
import BG_SaberStartTransAnim
import BG_InDeathAnim
import BG_InRoll
import BG_SaberInSpecialAttack
import BG_SpinningSaberAnim
import BG_FlippingAnim
import BG_SaberInIdle
import BG_SaberInSpecial
import BG_SaberInAttack
import BG_DirectFlippingAnim
import BG_InSaberStandAnim
import BG_InSpecialJump
import BG_LegalizedForcePowers
import saberMoveData
import BG_CanItemBeGrabbed
import BG_FindItemForHoldable
import BG_FindItemForPowerup
import BG_FindItemForWeapon
import BG_FindItem
import vectoyaw
import bg_numItems
import bg_itemlist
import Pmove
import PM_UpdateViewAngles
import pm
import bgForcePowerCost
import forceMasteryPoints
import forceMasteryLevels
import bgGlobalAnimations
import BGPAFtextLoaded
import forcePowerSorted
import WP_MuzzlePoint
import ammoData
import weaponData
import GetStringForID
import GetIDForString
import Q_irand
import irand
import flrand
import Rand_Init
import Com_Printf
import Com_Error
import Info_NextPair
import Info_Validate
import Info_SetValueForKey_Big
import Info_SetValueForKey
import Info_RemoveKey_big
import Info_RemoveKey
import Info_ValueForKey
import va
import Q_CleanStr
import Q_PrintStrlen
import Q_strcat
import Q_strncpyz
import Q_strrchr
import Q_strupr
import Q_strlwr
import Q_stricmpn
import Q_strncmp
import Q_stricmp
import Q_isalpha
import Q_isupper
import Q_islower
import Q_isprint
import Com_sprintf
import Parse3DMatrix
import Parse2DMatrix
import Parse1DMatrix
import SkipRestOfLine
import SkipBracedSection
import COM_MatchToken
import COM_ParseWarning
import COM_ParseError
import COM_Compress
import COM_ParseExt
import COM_Parse
import SkipWhitespace
import COM_GetCurrentParseLine
import COM_BeginParseSession
import COM_DefaultExtension
import COM_StripExtension
import COM_SkipPath
import Com_Clamp
import PerpendicularVector
import AngleVectors
import MatrixMultiply
import MakeNormalVectors
import RotateAroundDirection
import RotatePointAroundVector
import ProjectPointOnPlane
import PlaneFromPoints
import AngleDelta
import AngleNormalize180
import AngleNormalize360
import AnglesSubtract
import AngleSubtract
import LerpAngle
import AngleMod
import BoxOnPlaneSide
import SetPlaneSignbits
import AxisCopy
import AxisClear
import AnglesToAxis
import vectoangles
import Q_crandom
import Q_random
import Q_rand
import Q_acos
import Q_log2
import VectorRotate
import Vector4Scale
import VectorNormalize2
import VectorNormalize
import CrossProduct
import VectorInverse
import VectorNormalizeFast
import DistanceSquared
import Distance
import VectorLengthSquared
import VectorLength
import VectorCompare
import AddPointToBounds
import ClearBounds
import RadiusFromBounds
import NormalizeColor
import ColorBytes4
import ColorBytes3
import _VectorMA
import _VectorScale
import _VectorCopy
import _VectorAdd
import _VectorSubtract
import _DotProduct
import ByteToDir
import DirToByte
import powf
import ClampShort
import ClampChar
import Q_rsqrt
import Q_fabs
import axisDefault
import vec3_origin
import g_color_table
import colorDkBlue
import colorLtBlue
import colorDkGrey
import colorMdGrey
import colorLtGrey
import colorWhite
import colorCyan
import colorMagenta
import colorYellow
import colorBlue
import colorGreen
import colorRed
import colorBlack
import colorTable
import bytedirs
import Com_Memcpy
import Com_Memset
import Hunk_Alloc
import forceSpeedLevels
import FloatSwap
import LongSwap
import ShortSwap
import acos
import fabs
import abs
import tan
import atan2
import cos
import sin
import sqrt
import floor
import ceil
import memcpy
import memset
import memmove
import sscanf
import vsprintf
import _atoi
import atoi
import _atof
import atof
import toupper
import tolower
import strncpy
import strstr
import strchr
import strcmp
import strcpy
import strcat
import strlen
import rand
import srand
import qsort
lit
align 1
LABELV $1096
char 1 77
char 1 111
char 1 116
char 1 105
char 1 111
char 1 110
char 1 0
align 1
LABELV $1093
char 1 109
char 1 111
char 1 100
char 1 101
char 1 108
char 1 95
char 1 114
char 1 111
char 1 111
char 1 116
char 1 0
align 1
LABELV $844
char 1 109
char 1 111
char 1 100
char 1 101
char 1 108
char 1 115
char 1 47
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 115
char 1 50
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 95
char 1 119
char 1 46
char 1 103
char 1 108
char 1 109
char 1 0
align 1
LABELV $840
char 1 100
char 1 101
char 1 97
char 1 100
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 0
align 1
LABELV $238
char 1 116
char 1 104
char 1 111
char 1 114
char 1 97
char 1 99
char 1 105
char 1 99
char 1 0
align 1
LABELV $236
char 1 108
char 1 111
char 1 119
char 1 101
char 1 114
char 1 95
char 1 108
char 1 117
char 1 109
char 1 98
char 1 97
char 1 114
char 1 0
align 1
LABELV $234
char 1 117
char 1 112
char 1 112
char 1 101
char 1 114
char 1 95
char 1 108
char 1 117
char 1 109
char 1 98
char 1 97
char 1 114
char 1 0
align 1
LABELV $126
char 1 115
char 1 111
char 1 117
char 1 110
char 1 100
char 1 47
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 115
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 104
char 1 117
char 1 109
char 1 49
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $125
char 1 115
char 1 111
char 1 117
char 1 110
char 1 100
char 1 47
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 115
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 111
char 1 110
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $124
char 1 115
char 1 111
char 1 117
char 1 110
char 1 100
char 1 47
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 115
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 111
char 1 102
char 1 102
char 1 113
char 1 117
char 1 105
char 1 99
char 1 107
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $123
char 1 115
char 1 111
char 1 117
char 1 110
char 1 100
char 1 47
char 1 119
char 1 101
char 1 97
char 1 112
char 1 111
char 1 110
char 1 115
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 47
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 115
char 1 112
char 1 105
char 1 110
char 1 46
char 1 119
char 1 97
char 1 118
char 1 0
align 1
LABELV $121
char 1 108
char 1 105
char 1 103
char 1 104
char 1 116
char 1 115
char 1 97
char 1 98
char 1 101
char 1 114
char 1 0
