1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\flagsys_shared;
5 #using scripts\shared\weapons_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\killstreaks_shared;
8 #using scripts\shared\abilities\gadgets\_gadget_armor;
10 #insert scripts\shared\shared.gsh;
12 #precache( "material", "damage_feedback" );
13 #precache( "material", "damage_feedback_flak" );
14 #precache( "material", "damage_feedback_tac" );
15 #precache( "material", "damage_feedback_armor" );
16 #precache( "material", "damage_feedback_glow_orange" );
18 #namespace damagefeedback;
35 if ( !SessionModeIsMultiplayerGame() )
37 self.hud_damagefeedback = newdamageindicatorhudelem(
self);
38 self.hud_damagefeedback.horzAlign =
"center";
39 self.hud_damagefeedback.vertAlign =
"middle";
40 self.hud_damagefeedback.x = -11;
41 self.hud_damagefeedback.y = -11;
42 self.hud_damagefeedback.alpha = 0;
43 self.hud_damagefeedback.archived =
true;
44 self.hud_damagefeedback setShader(
"damage_feedback", 22, 44 );
46 self.hud_damagefeedback_additional = newdamageindicatorhudelem(
self);
47 self.hud_damagefeedback_additional.horzAlign =
"center";
48 self.hud_damagefeedback_additional.vertAlign =
"middle";
49 self.hud_damagefeedback_additional.x = -12;
50 self.hud_damagefeedback_additional.y = -12;
51 self.hud_damagefeedback_additional.alpha = 0;
52 self.hud_damagefeedback_additional.archived =
true;
53 self.hud_damagefeedback_additional setShader(
"damage_feedback", 24, 48 );
59 if ( !isdefined( mod ) )
65 case "MOD_GRENADE_SPLASH":
66 case "MOD_HIT_BY_OBJECT":
67 case "MOD_MELEE_ASSASSINATE":
69 case "MOD_MELEE_WEAPON_BUTT":
76 function update( mod, inflictor, perkFeedback, weapon, victim, psOffsetTime, sHitLoc )
78 if ( !isPlayer(
self ) )
83 if (isDefined(weapon) &&
IS_TRUE(weapon.nohitmarker) )
86 if ( !isDefined(
self.lastHitMarkerTime ) )
88 self.lastHitMarkerTimes = [];
89 self.lastHitMarkerTime = 0;
90 self.lastHitMarkerOffsetTime = 0;
93 if ( isdefined( psOffsetTime ) )
95 victim_id = victim GetEntityNumber();
97 if ( !IsDefined(
self.lastHitMarkerTimes[ victim_id ] ) )
99 self.lastHitMarkerTimes[ victim_id ] = 0;
102 if (
self.lastHitMarkerTime == GetTime() )
104 if (
self.lastHitMarkerTimes[ victim_id ] === psOffsetTime )
107 self.lastHitMarkerOffsetTime = psOffsetTime;
108 self.lastHitMarkerTimes[ victim_id ] = psOffsetTime;
112 if (
self.lastHitMarkerTime == GetTime() )
116 self.lastHitMarkerTime = GetTime();
117 hitAlias = undefined;
121 if ( isdefined( victim ) && isdefined( victim.victimSoundMod ) )
123 switch( victim.victimSoundMod )
125 case "safeguard_robot":
126 hitAlias =
"mpl_hit_alert_escort";
129 hitAlias =
"mpl_hit_alert";
133 else if ( isdefined( inflictor ) && isdefined( inflictor.soundMod ))
136 switch ( inflictor.soundMod )
139 if( isdefined( victim ) &&
IS_TRUE( victim.isAiClone ) )
141 hitAlias =
"mpl_hit_alert_clone";
145 hitAlias =
"mpl_hit_alert_armor";
147 else if( isdefined( victim ) && isPlayer( victim ) && isDefined( victim.carryObject ) && isDefined( victim.carryObject.hitSound ) && isDefined( perkfeedback ) && ( perkfeedback ==
"armor" ) )
149 hitAlias = victim.carryObject.hitSound;
151 else if ( mod ==
"MOD_BURNED" )
153 hitAlias =
"mpl_hit_alert_burn";
157 hitAlias =
"mpl_hit_alert";
162 hitAlias =
"mpl_hit_alert_heatwave";
166 hitAlias =
"mpl_hit_alert_air";
170 hitAlias =
"mpl_hit_alert_hpm";
174 hitAlias =
"mpl_hit_alert_taser_spike";
182 hitAlias =
"mpl_hit_alert_firefly";
186 hitAlias =
"mpl_hit_alert_air";
190 hitAlias =
"mpl_hit_alert_air";
194 hitAlias =
"mpl_hit_heli_gunner";
198 hitAlias =
"mpl_hit_alert";
202 else if ( mod ==
"MOD_BURNED" )
204 hitAlias =
"mpl_hit_alert_burn";
208 hitAlias =
"mpl_hit_alert";
212 if( isdefined( victim ) &&
IS_TRUE( victim.isAiClone ) )
214 self PlayHitMarker( hitAlias );
219 if ( isdefined(level.growing_hitmarker) && isdefined(victim) && isplayer(victim) )
223 self PlayHitMarker( hitAlias, damageStage, perkFeedback,
damage_feedback_get_dead( victim, mod, weapon, damageStage ) );
225 if ( isdefined( perkFeedback ) )
227 if ( isDefined(
self.hud_damagefeedback_additional ) )
229 switch( perkFeedback )
232 self.hud_damagefeedback_additional setShader(
"damage_feedback_flak", 24, 48 );
235 self.hud_damagefeedback_additional setShader(
"damage_feedback_tac", 24, 48 );
238 self.hud_damagefeedback_additional setShader(
"damage_feedback_armor", 24, 48 );
241 self.hud_damagefeedback_additional.alpha = 1;
242 self.hud_damagefeedback_additional fadeovertime(1);
243 self.hud_damagefeedback_additional.alpha = 0;
248 if (isDefined(
self.hud_damagefeedback))
250 self.hud_damagefeedback setShader(
"damage_feedback", 24, 48 );
254 if (isDefined(
self.hud_damagefeedback) && isdefined(level.growing_hitmarker) && isdefined(victim) && isplayer(victim) )
258 else if ( isDefined(
self.hud_damagefeedback))
260 self.hud_damagefeedback.x = -12;
261 self.hud_damagefeedback.y = -12;
262 self.hud_damagefeedback.alpha = 1;
263 self.hud_damagefeedback fadeOverTime(1);
264 self.hud_damagefeedback.alpha = 0;
270 if( isDefined( victim.laststand) && victim.laststand )
272 else if ( (victim.health/victim.maxhealth) > .74 )
274 else if ( (victim.health/victim.maxhealth) > .49 )
276 else if ( (victim.health/victim.maxhealth) > .24 )
278 else if ( (victim.health) > 0 )
286 return ( stage == 5 && (mod ==
"MOD_BULLET" || mod ==
"MOD_RIFLE_BULLET" || mod ==
"MOD_PISTOL_BULLET" || mod ==
"MOD_HEAD_SHOT") && (isdefined(weapon.isheroweapon) && !weapon.isheroweapon) && !
killstreaks::is_killstreak_weapon( weapon ) && !( weapon.name ===
"siegebot_gun_turret" ) && !( weapon.name ===
"siegebot_launcher_turret" ) );
291 if ( isdefined(
self.hud_damagefeedback ) )
295 self.hud_damagefeedback.x = -11 + (-1 * (stage));
296 self.hud_damagefeedback.y = -11 + (-1 * (stage));
297 size_x = 22 + (2 * (stage) );
299 self.hud_damagefeedback setShader(
"damage_feedback", size_x, size_y );
303 self.hud_damagefeedback setShader(
"damage_feedback_glow_orange", size_x, size_y );
308 self.hud_damagefeedback setShader(
"damage_feedback", size_x, size_y );
309 self.hud_damagefeedback.alpha = 1;
310 self.hud_damagefeedback fadeOverTime(1);
311 self.hud_damagefeedback.alpha = 0;
318 self notify(
"kill_hitmarker_fade");
319 self endon (
"kill_hitmarker_fade");
320 self endon (
"disconnect");
321 self.hud_damagefeedback.alpha = 1;
323 self.hud_damagefeedback fadeOverTime(0.3);
324 self.hud_damagefeedback.alpha = 0;
329 if ( !IsPlayer(
self ) )
332 self PlayLocalSound( sound );
334 if ( IsDefined(
self.hud_damagefeedback ) )
336 self.hud_damagefeedback setShader( icon, 24, 48 );
337 self.hud_damagefeedback.alpha = 1;
338 self.hud_damagefeedback fadeOverTime(1);
339 self.hud_damagefeedback.alpha = 0;
342 if ( isDefined(
self.hud_damagefeedback_additional ) )
344 if ( !IsDefined( additional_icon ) )
346 self.hud_damagefeedback_additional.alpha = 0;
350 self.hud_damagefeedback_additional setShader( additional_icon, 24, 48 );
351 self.hud_damagefeedback_additional.alpha = 1;
352 self.hud_damagefeedback_additional fadeOverTime(1);
353 self.hud_damagefeedback_additional.alpha = 0;
360 if ( !isPlayer(
self ) )
363 if ( !isdefined(hitEnt) )
366 if ( !isPlayer( hitEnt ) )
370 if ( !isdefined(
self.directionalHitArray ) )
372 self.directionalHitArray = [];
373 hitEntNum = hitEnt getEntityNumber();
374 self.directionalHitArray[hitEntNum] = 1;
379 hitEntNum = hitEnt getEntityNumber();
380 self.directionalHitArray[hitEntNum] = 1;
386 self endon (
"disconnect");
393 for ( i = 0; i < 32; i++ )
395 if (isdefined (
self.directionalHitArray[i]) &&
self.directionalHitArray[i] != 0 )
397 entBitArray0 += value;
403 for ( i = 33; i < 64; i++ )
405 if (isdefined (
self.directionalHitArray[i]) &&
self.directionalHitArray[i] != 0 )
407 entBitArray1 += value;
416 self directionalHitIndicator( entBitArray0, entBitArray1 );
418 self.directionalHitArray = undefined;
425 if ( !isdefined( weapon ) )
431 if ( level.allowHitMarkers == 0 )
434 if ( level.allowHitMarkers == 1 )
436 if ( isdefined( sMeansOfDeath ) && isdefined( iDamage ) )
453 if (
"Smoke Grenade" == weapon.offhandClass )
455 if ( sMeansOfDeath ==
"MOD_GRENADE_SPLASH" )
458 else if ( iDamage == 1 )