IL-GSC/AW/PC/maps/_gameskill.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

2486 lines
55 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: _gameskill.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 111
* Decompile Time: 1702 ms
* Timestamp: 4/22/2024 2:21:06 AM
*******************************************************************/
//Function Number: 1
setskill(param_00)
{
if(!isdefined(level.script))
{
level.script = tolower(getdvar("mapname"));
}
if(!isdefined(param_00) || param_00 == 0)
{
if(isdefined(level.gameskill))
{
return;
}
if(!isdefined(level.custom_player_attacker))
{
level.custom_player_attacker = ::return_false;
}
level.global_damage_func_ads = ::empty_kill_func;
level.global_damage_func = ::empty_kill_func;
level.global_kill_func = ::empty_kill_func;
maps\_utility::set_console_status();
foreach(var_02 in level.players)
{
var_02 maps\_utility::ent_flag_init("player_has_red_flashing_overlay");
var_02 maps\_utility::ent_flag_init("player_is_invulnerable");
var_02 maps\_utility::ent_flag_init("player_zero_attacker_accuracy");
var_02 maps\_utility::ent_flag_init("player_no_auto_blur");
var_02 maps\_utility::ent_flag_init("near_death_vision_enabled");
var_02 maps\_utility::ent_flag_set("near_death_vision_enabled");
var_02.gs = spawnstruct();
var_02 init_screeneffect_vars();
var_02.a = spawnstruct();
var_02.damage_functions = [];
var_02 maps\_player_stats::init_stats();
var_02 maps\_utility::ent_flag_init("global_hint_in_use");
var_02.pers = [];
if(!isdefined(var_02.baseignorerandombulletdamage))
{
var_02.baseignorerandombulletdamage = 0;
}
var_02.disabledweapon = 0;
var_02.disabledweaponswitch = 0;
var_02.disabledusability = 0;
}
level.difficultytype[0] = "easy";
level.difficultytype[1] = "normal";
level.difficultytype[2] = "hardened";
level.difficultytype[3] = "veteran";
level.difficultystring["easy"] = &"GAMESKILL_EASY";
level.difficultystring["normal"] = &"GAMESKILL_NORMAL";
level.difficultystring["hardened"] = &"GAMESKILL_HARDENED";
level.difficultystring["veteran"] = &"GAMESKILL_VETERAN";
thread gameskill_change_monitor();
}
setdvarifuninitialized("autodifficulty_playerDeathTimer",0);
anim.run_accuracy = 0.5;
anim.walk_accuracy = 0.8;
setdvar("autodifficulty_frac",0);
level.difficultysettings_frac_data_points = [];
foreach(var_02 in level.players)
{
var_02 init_take_cover_warnings();
var_02 thread increment_take_cover_warnings_on_death();
}
level.mg42badplace_mintime = 8;
level.mg42badplace_maxtime = 16;
level.difficultysettings["playerGrenadeBaseTime"]["easy"] = 40000;
level.difficultysettings["playerGrenadeBaseTime"]["normal"] = 35000;
level.difficultysettings["playerGrenadeBaseTime"]["hardened"] = 25000;
level.difficultysettings["playerGrenadeBaseTime"]["veteran"] = 25000;
level.difficultysettings["playerGrenadeRangeTime"]["easy"] = 20000;
level.difficultysettings["playerGrenadeRangeTime"]["normal"] = 15000;
level.difficultysettings["playerGrenadeRangeTime"]["hardened"] = 10000;
level.difficultysettings["playerGrenadeRangeTime"]["veteran"] = 10000;
level.difficultysettings["playerDoubleGrenadeTime"]["easy"] = 3600000;
level.difficultysettings["playerDoubleGrenadeTime"]["normal"] = 150000;
level.difficultysettings["playerDoubleGrenadeTime"]["hardened"] = 90000;
level.difficultysettings["playerDoubleGrenadeTime"]["veteran"] = 90000;
level.difficultysettings["double_grenades_allowed"]["easy"] = 0;
level.difficultysettings["double_grenades_allowed"]["normal"] = 1;
level.difficultysettings["double_grenades_allowed"]["hardened"] = 1;
level.difficultysettings["double_grenades_allowed"]["veteran"] = 1;
level.difficultysettings["threatbias"]["easy"] = 100;
level.difficultysettings["threatbias"]["normal"] = 150;
level.difficultysettings["threatbias"]["hardened"] = 200;
level.difficultysettings["threatbias"]["veteran"] = 400;
level.difficultysettings["base_enemy_accuracy"]["easy"] = 0.9;
level.difficultysettings["base_enemy_accuracy"]["normal"] = 1;
level.difficultysettings["base_enemy_accuracy"]["hardened"] = 1.15;
level.difficultysettings["base_enemy_accuracy"]["veteran"] = 1.15;
level.difficultysettings["accuracyDistScale"]["easy"] = 1;
level.difficultysettings["accuracyDistScale"]["normal"] = 1;
level.difficultysettings["accuracyDistScale"]["hardened"] = 0.6;
level.difficultysettings["accuracyDistScale"]["veteran"] = 0.8;
level.difficultysettings["min_sniper_burst_delay_time"]["easy"] = 3;
level.difficultysettings["min_sniper_burst_delay_time"]["normal"] = 2;
level.difficultysettings["min_sniper_burst_delay_time"]["hardened"] = 1.5;
level.difficultysettings["min_sniper_burst_delay_time"]["veteran"] = 1.1;
level.difficultysettings["max_sniper_burst_delay_time"]["easy"] = 4;
level.difficultysettings["max_sniper_burst_delay_time"]["normal"] = 3;
level.difficultysettings["max_sniper_burst_delay_time"]["hardened"] = 2;
level.difficultysettings["max_sniper_burst_delay_time"]["veteran"] = 1.5;
level.difficultysettings["dog_health"]["easy"] = 0.25;
level.difficultysettings["dog_health"]["normal"] = 0.75;
level.difficultysettings["dog_health"]["hardened"] = 1;
level.difficultysettings["dog_health"]["veteran"] = 1;
level.difficultysettings["dog_presstime"]["easy"] = 415;
level.difficultysettings["dog_presstime"]["normal"] = 375;
level.difficultysettings["dog_presstime"]["hardened"] = 250;
level.difficultysettings["dog_presstime"]["veteran"] = 225;
level.difficultysettings["dog_hits_before_kill"]["easy"] = 2;
level.difficultysettings["dog_hits_before_kill"]["normal"] = 1;
level.difficultysettings["dog_hits_before_kill"]["hardened"] = 0;
level.difficultysettings["dog_hits_before_kill"]["veteran"] = 0;
level.difficultysettings["pain_test"]["easy"] = ::always_pain;
level.difficultysettings["pain_test"]["normal"] = ::always_pain;
level.difficultysettings["pain_test"]["hardened"] = ::pain_protection;
level.difficultysettings["pain_test"]["veteran"] = ::pain_protection;
level.difficultysettings["missTimeConstant"]["easy"] = 1;
level.difficultysettings["missTimeConstant"]["normal"] = 0.05;
level.difficultysettings["missTimeConstant"]["hardened"] = 0;
level.difficultysettings["missTimeConstant"]["veteran"] = 0;
level.difficultysettings["missTimeDistanceFactor"]["easy"] = 0.0008;
level.difficultysettings["missTimeDistanceFactor"]["normal"] = 0.0001;
level.difficultysettings["missTimeDistanceFactor"]["hardened"] = 5E-05;
level.difficultysettings["missTimeDistanceFactor"]["veteran"] = 0;
level.difficultysettings["flashbangedInvulFactor"]["easy"] = 0.25;
level.difficultysettings["flashbangedInvulFactor"]["normal"] = 0;
level.difficultysettings["flashbangedInvulFactor"]["hardened"] = 0;
level.difficultysettings["flashbangedInvulFactor"]["veteran"] = 0;
level.difficultysettings["player_criticalBulletDamageDist"]["easy"] = 0;
level.difficultysettings["player_criticalBulletDamageDist"]["normal"] = 0;
level.difficultysettings["player_criticalBulletDamageDist"]["hardened"] = 0;
level.difficultysettings["player_criticalBulletDamageDist"]["veteran"] = 0;
level.difficultysettings["player_deathInvulnerableTime"]["easy"] = 4000;
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 600;
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 100;
level.difficultysettings["invulTime_preShield"]["easy"] = 0.6;
level.difficultysettings["invulTime_preShield"]["normal"] = 0.5;
level.difficultysettings["invulTime_preShield"]["hardened"] = 0.3;
level.difficultysettings["invulTime_preShield"]["veteran"] = 0;
level.difficultysettings["invulTime_onShield"]["easy"] = 1.6;
level.difficultysettings["invulTime_onShield"]["normal"] = 1;
level.difficultysettings["invulTime_onShield"]["hardened"] = 0.5;
level.difficultysettings["invulTime_onShield"]["veteran"] = 0.25;
level.difficultysettings["invulTime_postShield"]["easy"] = 0.5;
level.difficultysettings["invulTime_postShield"]["normal"] = 0.4;
level.difficultysettings["invulTime_postShield"]["hardened"] = 0.3;
level.difficultysettings["invulTime_postShield"]["veteran"] = 0;
level.difficultysettings["playerHealth_RegularRegenDelay"]["easy"] = 4000;
level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 4000;
level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 3000;
level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 1200;
level.difficultysettings["worthyDamageRatio"]["easy"] = 0;
level.difficultysettings["worthyDamageRatio"]["normal"] = 0.1;
level.difficultysettings["worthyDamageRatio"]["hardened"] = 0.3;
level.difficultysettings["worthyDamageRatio"]["veteran"] = 0.3;
level.difficultysettings["playerDifficultyHealth"]["easy"] = 475;
level.difficultysettings["playerDifficultyHealth"]["normal"] = 275;
level.difficultysettings["playerDifficultyHealth"]["hardened"] = 165;
level.difficultysettings["playerDifficultyHealth"]["veteran"] = 115;
level.difficultysettings["longRegenTime"]["easy"] = 5000;
level.difficultysettings["longRegenTime"]["normal"] = 5000;
level.difficultysettings["longRegenTime"]["hardened"] = 3200;
level.difficultysettings["longRegenTime"]["veteran"] = 3200;
level.difficultysettings["healthOverlayCutoff"]["easy"] = 0.02;
level.difficultysettings["healthOverlayCutoff"]["normal"] = 0.02;
level.difficultysettings["healthOverlayCutoff"]["hardened"] = 0.02;
level.difficultysettings["healthOverlayCutoff"]["veteran"] = 0.02;
level.difficultysettings["health_regenRate"]["easy"] = 0.02;
level.difficultysettings["health_regenRate"]["normal"] = 0.02;
level.difficultysettings["health_regenRate"]["hardened"] = 0.02;
level.difficultysettings["health_regenRate"]["veteran"] = 0.02;
level.difficultysettings["explosivePlantTime"]["easy"] = 10;
level.difficultysettings["explosivePlantTime"]["normal"] = 10;
level.difficultysettings["explosivePlantTime"]["hardened"] = 5;
level.difficultysettings["explosivePlantTime"]["veteran"] = 5;
level.difficultysettings["player_downed_buffer_time"]["normal"] = 2;
level.difficultysettings["player_downed_buffer_time"]["hardened"] = 1.5;
level.difficultysettings["player_downed_buffer_time"]["veteran"] = 0;
level.lastplayersighted = 0;
setsaveddvar("player_meleeDamageMultiplier",0.2666667);
if(isdefined(level.custom_gameskill_func))
{
[[ level.custom_gameskill_func ]]();
}
if(coop_with_one_player_downed())
{
make_remaining_player_a_little_stronger();
}
updategameskill();
updatealldifficulty();
setdvar("autodifficulty_original_setting",level.gameskill);
}
//Function Number: 2
init_screeneffect_vars()
{
self.gs.screeneffect = [];
var_00 = ["bottom","left","right"];
var_01 = ["bloodsplat","dirt"];
foreach(var_03 in var_01)
{
foreach(var_05 in var_00)
{
self.gs.screeneffect[var_03][var_05] = 0;
self.gs.screeneffect[var_03 + "_count"][var_05] = 0;
}
}
}
//Function Number: 3
coop_player_in_special_ops_survival()
{
setsaveddvar("player_meleeDamageMultiplier",0.26);
}
//Function Number: 4
solo_player_in_special_ops()
{
if(!maps\_utility::is_survival())
{
setsaveddvar("player_deathInvulnerableToMelee","1");
setsaveddvar("ai_accuracy_attackercountDecrease","0.6");
}
level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 2000;
level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 2000;
level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 900;
if(!maps\_utility::is_survival())
{
level.difficultysettings["invulTime_onShield"]["normal"] = 2.5;
}
else
{
level.difficultysettings["invulTime_onShield"]["normal"] = 1.5;
}
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 3000;
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1300;
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 800;
level.difficultysettings["longRegenTime"]["normal"] = 4500;
level.difficultysettings["longRegenTime"]["hardened"] = 4500;
level.difficultysettings["longRegenTime"]["veteran"] = 4500;
level.difficultysettings["playerDifficultyHealth"]["normal"] = 350;
level.difficultysettings["playerDifficultyHealth"]["hardened"] = 205;
level.difficultysettings["playerDifficultyHealth"]["veteran"] = 205;
if(!maps\_utility::is_survival())
{
setsaveddvar("player_meleeDamageMultiplier",0.5);
return;
}
setsaveddvar("player_meleeDamageMultiplier",0.26);
}
//Function Number: 5
solo_player_in_coop_gameskill_settings()
{
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1200;
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 200;
var_00 = 1.35;
level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00);
level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00);
level.difficultysettings["playerDifficultyHealth"]["veteran"] = int(138);
}
//Function Number: 6
make_remaining_player_a_little_stronger()
{
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1000;
var_00 = 1.25;
level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00);
level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00);
}
//Function Number: 7
updatealldifficulty()
{
setglobaldifficulty();
for(var_00 = 0;var_00 < level.players.size;var_00++)
{
level.players[var_00] setdifficulty();
}
}
//Function Number: 8
setdifficulty()
{
set_difficulty_from_locked_settings();
}
//Function Number: 9
setglobaldifficulty()
{
var_00 = ::get_locked_difficulty_val_global;
var_01 = get_skill_from_index(level.gameskill);
anim.dog_health = [[ var_00 ]]("dog_health",level.gameskill);
anim.pain_test = level.difficultysettings["pain_test"][var_01];
level.explosiveplanttime = level.difficultysettings["explosivePlantTime"][var_01];
anim.min_sniper_burst_delay_time = [[ var_00 ]]("min_sniper_burst_delay_time",level.gameskill);
anim.max_sniper_burst_delay_time = [[ var_00 ]]("max_sniper_burst_delay_time",level.gameskill);
setsaveddvar("ai_accuracyDistScale",[[ var_00 ]]("accuracyDistScale",level.gameskill));
if(maps\_utility::laststand_enabled())
{
level.player_downed_death_buffer_time = level.difficultysettings["player_downed_buffer_time"][var_01];
}
maps\_mgturret::setdifficulty();
}
//Function Number: 10
updategameskill()
{
foreach(var_01 in level.players)
{
if(maps\_utility::is_survival())
{
var_01.gameskill = 1;
continue;
}
var_01.gameskill = var_01 maps\_utility::get_player_gameskill();
}
level.gameskill = level.player.gameskill;
if(maps\_utility::is_coop() && level.player2.gameskill > level.gameskill)
{
level.gameskill = level.player2.gameskill;
}
level.specops_reward_gameskill = level.player.gameskill;
if(maps\_utility::is_coop() && level.player2.gameskill < level.specops_reward_gameskill)
{
level.specops_reward_gameskill = level.player2.gameskill;
}
if(isdefined(level.forcedgameskill))
{
level.gameskill = level.forcedgameskill;
}
return level.gameskill;
}
//Function Number: 11
gameskill_change_monitor()
{
var_00 = level.gameskill;
for(;;)
{
if(!isdefined(var_00))
{
wait(1);
var_00 = level.gameskill;
continue;
}
if(var_00 != updategameskill())
{
var_00 = level.gameskill;
updatealldifficulty();
}
wait(1);
}
}
//Function Number: 12
get_skill_from_index(param_00)
{
return level.difficultytype[param_00];
}
//Function Number: 13
aa_should_start_fresh()
{
return level.gameskill == getdvarint("autodifficulty_original_setting");
}
//Function Number: 14
apply_difficulty_frac_with_func(param_00,param_01)
{
self.gs.invultime_preshield = [[ param_00 ]]("invulTime_preShield",param_01);
self.gs.invultime_onshield = [[ param_00 ]]("invulTime_onShield",param_01);
self.gs.invultime_postshield = [[ param_00 ]]("invulTime_postShield",param_01);
self.gs.playerhealth_regularregendelay = [[ param_00 ]]("playerHealth_RegularRegenDelay",param_01);
self.gs.worthydamageratio = [[ param_00 ]]("worthyDamageRatio",param_01);
self.threatbias = int([[ param_00 ]]("threatbias",param_01));
self.gs.longregentime = [[ param_00 ]]("longRegenTime",param_01);
self.gs.healthoverlaycutoff = [[ param_00 ]]("healthOverlayCutoff",param_01);
self.gs.regenrate = [[ param_00 ]]("health_regenRate",param_01);
self.gs.player_attacker_accuracy = [[ param_00 ]]("base_enemy_accuracy",param_01);
update_player_attacker_accuracy();
self.gs.playergrenadebasetime = int([[ param_00 ]]("playerGrenadeBaseTime",param_01));
self.gs.playergrenaderangetime = int([[ param_00 ]]("playerGrenadeRangeTime",param_01));
self.gs.playerdoublegrenadetime = int([[ param_00 ]]("playerDoubleGrenadeTime",param_01));
self.gs.min_sniper_burst_delay_time = [[ param_00 ]]("min_sniper_burst_delay_time",param_01);
self.gs.max_sniper_burst_delay_time = [[ param_00 ]]("max_sniper_burst_delay_time",param_01);
self.gs.dog_presstime = [[ param_00 ]]("dog_presstime",param_01);
self.deathinvulnerabletime = int([[ param_00 ]]("player_deathInvulnerableTime",param_01));
self.criticalbulletdamagedist = int([[ param_00 ]]("player_criticalBulletDamageDist",param_01));
self.damagemultiplier = 100 / [[ param_00 ]]("playerDifficultyHealth",param_01);
}
//Function Number: 15
update_player_attacker_accuracy()
{
if(maps\_utility::ent_flag("player_zero_attacker_accuracy"))
{
return;
}
self.ignorerandombulletdamage = self.baseignorerandombulletdamage;
self.attackeraccuracy = self.gs.player_attacker_accuracy;
}
//Function Number: 16
apply_difficulty_step_with_func(param_00,param_01)
{
self.gs.misstimeconstant = [[ param_00 ]]("missTimeConstant",param_01);
self.gs.misstimedistancefactor = [[ param_00 ]]("missTimeDistanceFactor",param_01);
self.gs.dog_hits_before_kill = [[ param_00 ]]("dog_hits_before_kill",param_01);
self.gs.double_grenades_allowed = [[ param_00 ]]("double_grenades_allowed",param_01);
}
//Function Number: 17
set_difficulty_from_locked_settings()
{
apply_difficulty_frac_with_func(::get_locked_difficulty_val_player,1);
apply_difficulty_step_with_func(::get_locked_difficulty_step_val_player,1);
}
//Function Number: 18
get_locked_difficulty_step_val_player(param_00,param_01)
{
return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)];
}
//Function Number: 19
get_locked_difficulty_step_val_global(param_00,param_01)
{
return level.difficultysettings[param_00][get_skill_from_index(level.gameskill)];
}
//Function Number: 20
get_blended_difficulty(param_00,param_01)
{
var_02 = level.difficultysettings_frac_data_points[param_00];
var_03 = 1;
while(var_03 < var_02.size)
{
var_04 = var_02[var_03]["frac"];
var_05 = var_02[var_03]["val"];
if(param_01 <= var_04)
{
var_06 = var_02[var_03 - 1]["frac"];
var_07 = var_02[var_03 - 1]["val"];
var_08 = var_04 - var_06;
var_09 = var_05 - var_07;
var_0A = param_01 - var_06;
var_0B = var_0A / var_08;
return var_07 + var_0B * var_09;
}
var_09++;
}
return var_08[var_08.size - 1]["val"];
}
//Function Number: 21
getcurrentdifficultysetting(param_00)
{
return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)];
}
//Function Number: 22
getratio(param_00,param_01,param_02)
{
return level.difficultysettings[param_00][level.difficultytype[param_01]] * 100 - getdvarint("autodifficulty_frac") + level.difficultysettings[param_00][level.difficultytype[param_02]] * getdvarint("autodifficulty_frac") * 0.01;
}
//Function Number: 23
get_locked_difficulty_val_player(param_00,param_01)
{
return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)];
}
//Function Number: 24
get_locked_difficulty_val_global(param_00,param_01)
{
return level.difficultysettings[param_00][get_skill_from_index(level.gameskill)];
}
//Function Number: 25
always_pain()
{
return 0;
}
//Function Number: 26
pain_protection()
{
if(!pain_protection_check())
{
return 0;
}
return randomint(100) > 25;
}
//Function Number: 27
pain_protection_check()
{
if(!isalive(self.enemy))
{
return 0;
}
if(!isplayer(self.enemy))
{
return 0;
}
if(!isalive(level.painai) || level.painai.script != "pain")
{
level.painai = self;
}
if(self == level.painai)
{
return 0;
}
if(self.damageweapon != "none" && weaponisboltaction(self.damageweapon))
{
return 0;
}
return 1;
}
//Function Number: 28
set_accuracy_based_on_situation()
{
if(animscripts\combat_utility::issniper() && isalive(self.enemy))
{
setsniperaccuracy();
return;
}
if(isplayer(self.enemy))
{
resetmissdebouncetime();
if(self.a.misstime > gettime())
{
self.accuracy = 0;
return;
}
}
if(self.script == "move")
{
if(animscripts\utility::iscqbwalkingorfacingenemy())
{
self.accuracy = level.walk_accuracy * self.baseaccuracy;
}
else
{
self.accuracy = level.run_accuracy * self.baseaccuracy;
}
return;
}
self.accuracy = self.baseaccuracy;
if(isdefined(self.isrambo) && isdefined(self.ramboaccuracymult))
{
self.accuracy = self.accuracy * self.ramboaccuracymult;
}
}
//Function Number: 29
setsniperaccuracy()
{
if(!isdefined(self.snipershotcount))
{
self.snipershotcount = 0;
self.sniperhitcount = 0;
}
self.snipershotcount++;
var_00 = level.gameskill;
if(isplayer(self.enemy))
{
var_00 = self.enemy.gameskill;
}
if(shouldforcesnipermissshot())
{
self.accuracy = 0;
if(var_00 > 0 || self.snipershotcount > 1)
{
self.lastmissedenemy = self.enemy;
}
return;
}
self.accuracy = 1 + 1 * self.sniperhitcount * self.baseaccuracy;
self.sniperhitcount++;
if(var_00 < 1 && self.sniperhitcount == 1)
{
self.lastmissedenemy = undefined;
}
}
//Function Number: 30
shouldforcesnipermissshot()
{
if(isdefined(self.neverforcesnipermissenemy) && self.neverforcesnipermissenemy)
{
return 0;
}
if(self.team == "allies")
{
return 0;
}
if(isdefined(self.lastmissedenemy) && self.enemy == self.lastmissedenemy)
{
return 0;
}
if(distancesquared(self.origin,self.enemy.origin) > 250000)
{
return 0;
}
return 1;
}
//Function Number: 31
shotsafterplayerbecomesinvul()
{
return 1 + randomfloat(4);
}
//Function Number: 32
didsomethingotherthanshooting()
{
self.a.misstimedebounce = 0;
}
//Function Number: 33
resetaccuracyandpause()
{
resetmisstime();
}
//Function Number: 34
waittimeifplayerishit()
{
var_00 = 0;
waittillframeend;
if(!isalive(self.enemy))
{
return var_00;
}
if(!isplayer(self.enemy))
{
return var_00;
}
if(self.enemy maps\_utility::ent_flag("player_is_invulnerable"))
{
var_00 = 0.3 + randomfloat(0.4);
}
return var_00;
}
//Function Number: 35
print3d_time(param_00,param_01,param_02,param_03)
{
param_03 = param_03 * 20;
for(var_04 = 0;var_04 < param_03;var_04++)
{
wait(0.05);
}
}
//Function Number: 36
resetmisstime()
{
if(!self isbadguy())
{
return;
}
if(self.weapon == "none")
{
return;
}
if(!animscripts\weaponlist::usingautomaticweapon() && !animscripts\weaponlist::usingsemiautoweapon())
{
self.misstime = 0;
return;
}
if(!isalive(self.enemy))
{
return;
}
if(!isplayer(self.enemy))
{
self.accuracy = self.baseaccuracy;
return;
}
var_00 = distance(self.enemy.origin,self.origin);
setmisstime(self.enemy.gs.misstimeconstant + var_00 * self.enemy.gs.misstimedistancefactor);
}
//Function Number: 37
resetmissdebouncetime()
{
self.a.misstimedebounce = gettime() + 3000;
}
//Function Number: 38
setmisstime(param_00)
{
if(self.a.misstimedebounce > gettime())
{
return;
}
if(param_00 > 0)
{
self.accuracy = 0;
}
param_00 = param_00 * 1000;
self.a.misstime = gettime() + param_00;
self.a.accuracygrowthmultiplier = 1;
}
//Function Number: 39
player_aim_debug()
{
self endon("death");
self notify("playeraim");
self endon("playeraim");
for(;;)
{
var_00 = (0,1,0);
if(self.a.misstime > gettime())
{
var_00 = (1,0,0);
}
wait(0.05);
}
}
//Function Number: 40
screen_effect_on_open_bottom(param_00,param_01,param_02)
{
var_03 = randomfloatrange(-15,15);
var_04 = randomfloatrange(-15,15);
self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01));
self.y = 100 + var_04;
self moveovertime(0.08);
self.y = 0 + var_04;
self.x = self.x + var_03;
if(isdefined(param_02))
{
return;
}
screen_effect_fade();
}
//Function Number: 41
screen_effect_on_open_side(param_00,param_01,param_02)
{
var_03 = 1;
if(param_02)
{
var_03 = -1;
}
var_04 = randomfloatrange(-15,15);
var_05 = randomfloatrange(-15,15);
self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01));
self.x = 1000 * var_03 + var_04;
self moveovertime(0.1);
self.x = 0 + var_04;
self.y = self.y + var_05;
screen_effect_fade();
}
//Function Number: 42
screen_effect_fade()
{
self endon("death");
var_00 = gettime();
var_01 = 1;
var_02 = 0.05;
self.alpha = 0;
self fadeovertime(var_02);
self.alpha = 1;
wait(var_02);
maps\_utility::wait_for_buffer_time_to_pass(var_00,2);
self fadeovertime(var_01);
self.alpha = 0;
wait(var_01);
self destroy();
}
//Function Number: 43
screen_detailed_alpha()
{
var_00 = 0.2;
self.alpha = 0.7;
self fadeovertime(var_00);
self.alpha = 0;
wait(var_00);
self destroy();
}
//Function Number: 44
grenade_dirt_on_screen(param_00)
{
}
//Function Number: 45
blood_splat_on_screen(param_00)
{
}
//Function Number: 46
display_screen_effect(param_00,param_01,param_02,param_03,param_04)
{
if(!isalive(self))
{
return;
}
if(isdefined(self.is_controlling_uav))
{
return;
}
var_05 = gettime();
if(self.gs.screeneffect[param_00][param_01] == var_05)
{
return;
}
if(self.gs.screeneffect[param_00 + "_count"][param_01] == 1)
{
return;
}
self.gs.screeneffect[param_00 + "_count"][param_01]++;
self.gs.screeneffect[param_00][param_01] = var_05;
self endon("death");
switch(param_01)
{
case "bottom":
var_06 = int(640);
var_07 = int(480);
if(param_00 == "dirt")
{
var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,1);
var_08 thread screen_effect_on_open_bottom(param_00,param_04,1);
var_08 screen_detailed_alpha();
}
else
{
var_08 = maps\_hud_util::create_client_overlay_custom_size(param_03,0);
var_08 screen_effect_on_open_bottom(param_00,param_04);
}
if(isdefined(param_03))
{
var_09 = maps\_hud_util::create_client_overlay_custom_size(param_03,0);
var_09 screen_effect_on_open_bottom(param_00,param_04);
}
break;
case "left":
var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1);
var_08 screen_effect_on_open_side(param_00,param_04,1);
break;
case "right":
var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1);
var_08 screen_effect_on_open_side(param_00,param_04,0);
break;
default:
break;
}
self.gs.screeneffect[param_00 + "_count"][param_01]--;
}
//Function Number: 47
playerhurtcheck()
{
var_00 = ::maps\_utility::dirt_on_screen_from_position;
var_01 = ::maps\_utility::bloodsplateffect;
var_02 = [];
var_02["MOD_GRENADE"] = var_00;
var_02["MOD_GRENADE_SPLASH"] = var_00;
var_02["MOD_PROJECTILE"] = var_00;
var_02["MOD_PROJECTILE_SPLASH"] = var_00;
var_02["MOD_EXPLOSIVE"] = var_00;
var_02["MOD_PISTOL_BULLET"] = var_01;
var_02["MOD_RIFLE_BULLET"] = var_01;
var_02["MOD_EXPLOSIVE_BULLET"] = var_01;
self.hurtagain = 0;
for(;;)
{
self waittill("damage",var_03,var_04,var_05,var_06,var_07);
self.hurtagain = 1;
self.damagepoint = var_06;
self.damageattacker = var_04;
var_08 = undefined;
if(isdefined(self.mods_override))
{
var_08 = self.mods_override[var_07];
}
if(!isdefined(var_08) && isdefined(var_02[var_07]))
{
var_08 = var_02[var_07];
}
if(isdefined(var_08))
{
waittillframeend;
[[ var_08 ]](var_06);
}
}
}
//Function Number: 48
player_health_packets()
{
self.player_health_packets = 3;
}
//Function Number: 49
playerhealthregeninit()
{
wait(0.05);
level.strings["take_cover"] = spawnstruct();
level.strings["take_cover"].text = &"GAME_GET_TO_COVER";
level.strings["get_back_up"] = spawnstruct();
level.strings["get_back_up"].text = &"GAME_LAST_STAND_GET_BACK_UP";
}
//Function Number: 50
playerhealthregen()
{
if(level.currentgen)
{
thread healthoverlaycg();
}
else
{
thread healthoverlay();
}
var_00 = 1;
var_01 = 0;
thread player_health_packets();
var_02 = 0;
var_03 = 0;
thread playerbreathingsound(self.maxhealth * 0.35);
var_04 = 0;
var_05 = 0;
var_06 = 0;
var_07 = 1;
thread playerhurtcheck();
self.bolthit = 0;
for(;;)
{
wait(0.05);
waittillframeend;
if(maps\_utility::laststand_enabled())
{
if(isdefined(level.laststand_player_func))
{
self thread [[ level.laststand_player_func ]]();
}
}
if(self.health == self.maxhealth)
{
if(maps\_utility::ent_flag("player_has_red_flashing_overlay"))
{
player_recovers_from_red_flashing();
}
var_07 = 1;
var_03 = 0;
var_02 = 0;
continue;
}
if(self.health <= 0)
{
return;
}
var_08 = var_02;
var_09 = self.health / self.maxhealth;
if(var_09 <= self.gs.healthoverlaycutoff && self.player_health_packets > 1)
{
var_02 = 1;
if(!var_08)
{
var_05 = gettime();
if(maps\_utility::ent_flag("near_death_vision_enabled"))
{
if(isusinghdr())
{
thread blurview(2,2);
}
else
{
thread blurview(3.6,2);
}
thread soundscripts\_audio::set_deathsdoor();
self painvisionon();
}
maps\_utility::ent_flag_set("player_has_red_flashing_overlay");
var_03 = 1;
}
}
if(self.hurtagain)
{
var_05 = gettime();
self.hurtagain = 0;
}
if(self.health / self.maxhealth >= var_00)
{
if(gettime() - var_05 < self.gs.playerhealth_regularregendelay)
{
continue;
}
if(var_02)
{
var_06 = var_09;
if(gettime() > var_05 + self.gs.longregentime)
{
var_06 = var_06 + self.gs.regenrate;
}
if(var_06 >= 1)
{
reducetakecoverwarnings();
}
}
else
{
var_06 = 1;
}
if(var_06 > 1)
{
var_06 = 1;
}
if(var_06 <= 0)
{
return;
}
self setnormalhealth(var_06);
var_00 = self.health / self.maxhealth;
continue;
}
var_00 = var_07;
var_0A = self.gs.worthydamageratio;
if(self.attackercount == 1)
{
var_0A = var_0A * 3;
}
var_0B = var_00 - var_09 >= var_0A;
if(self.health <= 1)
{
self setnormalhealth(2 / self.maxhealth);
var_0B = 1;
}
var_00 = self.health / self.maxhealth;
self notify("hit_again");
var_01 = 0;
var_05 = gettime();
if(isusinghdr())
{
thread blurview(2,0.8);
}
else
{
thread blurview(3,0.8);
}
if(!var_0B)
{
continue;
}
if(maps\_utility::ent_flag("player_is_invulnerable"))
{
continue;
}
maps\_utility::ent_flag_set("player_is_invulnerable");
level notify("player_becoming_invulnerable");
if(var_03)
{
var_04 = self.gs.invultime_onshield;
var_03 = 0;
}
else if(var_02)
{
var_04 = self.gs.invultime_postshield;
}
else
{
var_04 = self.gs.invultime_preshield;
}
var_07 = self.health / self.maxhealth;
thread playerinvul(var_04);
}
}
//Function Number: 51
reducetakecoverwarnings()
{
if(!take_cover_warnings_enabled())
{
return;
}
if(isalive(self))
{
var_00 = self getlocalplayerprofiledata("takeCoverWarnings");
if(var_00 > 0)
{
var_00--;
self setlocalplayerprofiledata("takeCoverWarnings",var_00);
}
}
}
//Function Number: 52
playerinvul(param_00)
{
if(isdefined(self.flashendtime) && self.flashendtime > gettime())
{
param_00 = param_00 * getcurrentdifficultysetting("flashbangedInvulFactor");
}
if(param_00 > 0)
{
if(!isdefined(self.noplayerinvul))
{
self.attackeraccuracy = 0;
}
self.ignorerandombulletdamage = 1;
wait(param_00);
}
update_player_attacker_accuracy();
maps\_utility::ent_flag_clear("player_is_invulnerable");
}
//Function Number: 53
default_door_node_flashbang_frequency()
{
if(self.team == "allies")
{
self.doorflashchance = 0.6;
}
if(self isbadguy())
{
if(level.gameskill >= 2)
{
self.doorflashchance = 0.8;
return;
}
self.doorflashchance = 0.6;
}
}
//Function Number: 54
grenadeawareness()
{
if(self.team == "allies")
{
self.grenadeawareness = 0.9;
return;
}
if(self isbadguy())
{
if(level.gameskill >= 2)
{
if(randomint(100) < 33)
{
self.grenadeawareness = 0.2;
return;
}
self.grenadeawareness = 0.5;
return;
}
if(randomint(100) < 33)
{
self.grenadeawareness = 0;
return;
}
self.grenadeawareness = 0.2;
return;
}
}
//Function Number: 55
blurview(param_00,param_01)
{
if(maps\_utility::ent_flag("player_no_auto_blur"))
{
return;
}
self notify("blurview_stop");
self endon("blurview_stop");
self setblurforplayer(param_00,0);
wait(0.05);
self setblurforplayer(0,param_01);
}
//Function Number: 56
playerbreathingsound(param_00)
{
wait(2);
for(;;)
{
wait(0.2);
if(self.health <= 0)
{
return;
}
var_01 = self.health / self.maxhealth;
if(var_01 > self.gs.healthoverlaycutoff)
{
continue;
}
if(isdefined(self.disable_breathing_sound) && self.disable_breathing_sound)
{
continue;
}
if(isdefined(level.gameskill_breath_func))
{
[[ level.gameskill_breath_func ]]("breathing_hurt");
}
else
{
var_02 = "breathing_hurt";
if(soundexists(var_02))
{
self playlocalsound(var_02);
}
}
var_03 = 0.1;
if(isdefined(level.player.gs.custombreathingtime))
{
var_03 = level.player.gs.custombreathingtime;
}
wait(var_03 + randomfloat(0.8));
}
}
//Function Number: 57
healthoverlay()
{
self endon("noHealthOverlay");
var_00 = newclienthudelem(self);
var_00.x = 0;
var_00.y = 0;
if(issplitscreen())
{
var_00 setshader("fullscreen_lit_bloodsplat_01",640,960);
if(self == level.players[0])
{
var_00.y = var_00.y - 120;
}
}
else
{
var_00 setshader("fullscreen_lit_bloodsplat_01",640,480);
}
var_00.splatter = 1;
var_00.alignx = "left";
var_00.aligny = "top";
var_00.sort = 1;
var_00.foreground = 0;
var_00.horzalign = "fullscreen";
var_00.vertalign = "fullscreen";
var_00.enablehudlighting = 1;
var_00.color = (0,0,0);
var_00.alpha = 0;
thread healthoverlay_remove(var_00);
thread take_cover_warning_loop();
var_01 = 0;
var_02 = 0.05;
var_03 = 0.3;
var_04 = 0;
while(isalive(self))
{
wait(var_02);
if(self.maxhealth > self.health)
{
var_04 = 1 - self.health / self.maxhealth * 0.5;
}
else
{
var_04 = 0;
}
var_05 = var_04;
var_05 = clamp(var_05,0,1);
if(var_01 > var_05)
{
if(isdefined(self.exo_stim_active) && self.exo_stim_active)
{
var_01 = 0;
}
else
{
var_01 = var_01 - var_03 * var_02;
}
}
if(var_01 < var_05)
{
var_01 = var_05;
}
var_00.color = (var_01,0,0);
if(var_01 == 0)
{
var_00.alpha = 0;
continue;
}
var_00.alpha = 1;
}
thread healthoverlay_drips(var_00);
}
//Function Number: 58
healthoverlaycg()
{
self endon("noHealthOverlay");
var_00 = newclienthudelem(self);
var_00.x = 0;
var_00.y = 0;
if(issplitscreen())
{
var_00 setshader("vfx_blood_screen_overlay",640,960);
if(self == level.players[0])
{
var_00.y = var_00.y - 120;
}
}
else
{
var_00 setshader("vfx_blood_screen_overlay",640,480);
}
var_00.splatter = 1;
var_00.alignx = "left";
var_00.aligny = "top";
var_00.sort = 1;
var_00.foreground = 0;
var_00.horzalign = "fullscreen";
var_00.vertalign = "fullscreen";
var_00.alpha = 0;
var_00.enablehudlighting = 1;
thread healthoverlay_remove(var_00);
thread take_cover_warning_loop();
var_01 = 0;
var_02 = 0.05;
var_03 = 0.3;
while(isalive(self))
{
wait(var_02);
var_04 = 1 - self.health / self.maxhealth;
var_05 = var_04 * var_04 * 1.2;
var_05 = clamp(var_05,0,1);
if(var_01 > var_05)
{
var_01 = var_01 - var_03 * var_02;
}
if(var_01 < var_05)
{
var_01 = var_05;
}
var_00.alpha = var_01;
}
}
//Function Number: 59
healthoverlay_drips(param_00)
{
self endon("noHealthOverlay");
var_01 = 0;
var_02 = 0;
for(var_01 = 0;var_01 < 80;var_01++)
{
var_03 = var_02 / 80;
param_00.color = (255,var_03,0);
var_02 = var_02 + 1;
wait 0.05;
}
}
//Function Number: 60
take_cover_warning_loop()
{
while(isalive(self))
{
maps\_utility::ent_flag_wait("player_has_red_flashing_overlay");
take_cover_warning();
}
}
//Function Number: 61
add_hudelm_position_internal(param_00)
{
if(level.console)
{
self.fontscale = 2;
}
else
{
self.fontscale = 1.6;
}
self.x = 0;
self.y = -36;
self.alignx = "center";
self.aligny = "bottom";
self.horzalign = "center";
self.vertalign = "middle";
if(!isdefined(self.background))
{
return;
}
self.background.x = 0;
self.background.y = -40;
self.background.alignx = "center";
self.background.aligny = "middle";
self.background.horzalign = "center";
self.background.vertalign = "middle";
if(level.console)
{
self.background setshader("popmenu_bg",650,52);
}
else
{
self.background setshader("popmenu_bg",650,42);
}
self.background.alpha = 0.5;
}
//Function Number: 62
create_warning_elem()
{
var_00 = newclienthudelem(self);
var_00 add_hudelm_position_internal();
thread destroy_warning_elem_when_hit_again(var_00);
var_00 thread destroy_warning_elem_when_mission_failed();
if(maps\_utility::is_player_down(self))
{
var_00 settext(level.strings["get_back_up"].text);
}
else
{
var_00 settext(level.strings["take_cover"].text);
}
var_00.fontscale = 2;
var_00.alpha = 1;
var_00.color = (1,0.9,0.9);
var_00.sort = 1;
var_00.foreground = 1;
return var_00;
}
//Function Number: 63
waittillplayerishitagain()
{
self endon("hit_again");
self endon("player_downed");
self waittill("damage");
}
//Function Number: 64
destroy_warning_elem_when_hit_again(param_00)
{
param_00 endon("being_destroyed");
waittillplayerishitagain();
var_01 = !isalive(self);
param_00 thread destroy_warning_elem(var_01);
}
//Function Number: 65
destroy_warning_elem_when_mission_failed()
{
self endon("being_destroyed");
common_scripts\utility::flag_wait("missionfailed");
thread destroy_warning_elem(1);
}
//Function Number: 66
destroy_warning_elem(param_00)
{
self notify("being_destroyed");
self.beingdestroyed = 1;
if(param_00)
{
self fadeovertime(0.5);
self.alpha = 0;
wait(0.5);
}
self notify("death");
self destroy();
}
//Function Number: 67
may_change_cover_warning_alpha(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(isdefined(param_00.beingdestroyed))
{
return 0;
}
return 1;
}
//Function Number: 68
fontscaler(param_00,param_01)
{
self endon("death");
param_00 = param_00 * 2;
var_02 = param_00 - self.fontscale;
self changefontscaleovertime(param_01);
self.fontscale = self.fontscale + var_02;
}
//Function Number: 69
fadefunc(param_00,param_01,param_02,param_03)
{
var_04 = 0.8;
var_05 = 0.5;
var_06 = var_04 * 0.1;
var_07 = var_04 * 0.1 + param_01 * 0.2;
var_08 = var_04 * 0.1 + param_01 * 0.1;
var_09 = var_04 * 0.3;
var_0A = var_04 - var_06 - var_07 - var_08 - var_09;
if(var_0A < 0)
{
var_0A = 0;
}
var_0B = 0.8 + param_01 * 0.1;
var_0C = 0.5 + param_01 * 0.3;
if(may_change_cover_warning_alpha(param_00))
{
if(!param_03)
{
param_00 fadeovertime(var_06);
param_00.alpha = param_02 * 1;
}
}
if(isdefined(param_00))
{
param_00 thread fontscaler(1,var_06);
}
wait(var_06 + var_07);
if(may_change_cover_warning_alpha(param_00))
{
if(!param_03)
{
param_00 fadeovertime(var_08);
param_00.alpha = param_02 * var_0B;
}
}
wait(var_08);
if(may_change_cover_warning_alpha(param_00))
{
if(!param_03)
{
param_00 fadeovertime(var_09);
param_00.alpha = param_02 * var_0C;
}
}
if(isdefined(param_00))
{
param_00 thread fontscaler(0.9,var_09);
}
wait(var_09);
wait(var_0A);
}
//Function Number: 70
take_cover_warnings_enabled()
{
if(isdefined(level.cover_warnings_disabled))
{
return 0;
}
if(isdefined(self.underwater) && self.underwater == 1)
{
return 0;
}
if(isdefined(self.vehicle))
{
return 0;
}
return 1;
}
//Function Number: 71
should_show_cover_warning()
{
if(!isalive(self))
{
return 0;
}
if(self islinked())
{
return 0;
}
if(self.ignoreme)
{
return 0;
}
if(level.missionfailed)
{
return 0;
}
if(!take_cover_warnings_enabled())
{
return 0;
}
if(self.gameskill > 0 && !maps\_load::map_is_early_in_the_game())
{
return 0;
}
var_00 = self getlocalplayerprofiledata("takeCoverWarnings");
if(var_00 <= 3)
{
return 0;
}
return 1;
}
//Function Number: 72
take_cover_warning()
{
self endon("hit_again");
self endon("damage");
var_00 = undefined;
if(should_show_cover_warning())
{
var_00 = create_warning_elem();
}
var_01 = gettime() + self.gs.longregentime;
fadefunc(var_00,1,1,0);
while(gettime() < var_01 && isalive(self) && maps\_utility::ent_flag("player_has_red_flashing_overlay"))
{
fadefunc(var_00,0.9,1,0);
}
if(isalive(self))
{
fadefunc(var_00,0.65,0.8,0);
}
if(may_change_cover_warning_alpha(var_00))
{
var_00 fadeovertime(1);
var_00.alpha = 0;
}
fadefunc(var_00,0,0.6,1);
wait(0.5);
self notify("take_cover_done");
self notify("hit_again");
}
//Function Number: 73
player_recovers_from_red_flashing()
{
maps\_utility::ent_flag_clear("player_has_red_flashing_overlay");
if(maps\_utility::ent_flag("near_death_vision_enabled"))
{
self painvisionoff();
thread soundscripts\_audio::restore_after_deathsdoor();
}
if(!isdefined(self.disable_breathing_sound) || !self.disable_breathing_sound)
{
if(isdefined(level.gameskill_breath_func))
{
[[ level.gameskill_breath_func ]]("breathing_better");
}
else
{
var_00 = "breathing_better";
if(soundexists(var_00))
{
self playlocalsound(var_00);
}
}
}
self notify("take_cover_done");
}
//Function Number: 74
healthoverlay_remove(param_00)
{
self waittill("noHealthOverlay");
param_00 destroy();
}
//Function Number: 75
resetskill()
{
waittillframeend;
setskill(1);
}
//Function Number: 76
init_take_cover_warnings()
{
var_00 = isdefined(level.ispregameplaylevel) && level.ispregameplaylevel;
if(self getlocalplayerprofiledata("takeCoverWarnings") == -1 || var_00)
{
self setlocalplayerprofiledata("takeCoverWarnings",9);
}
}
//Function Number: 77
increment_take_cover_warnings_on_death()
{
self notify("new_cover_on_death_thread");
self endon("new_cover_on_death_thread");
self waittill("death");
if(!maps\_utility::ent_flag("player_has_red_flashing_overlay"))
{
return;
}
if(!take_cover_warnings_enabled())
{
return;
}
var_00 = self getlocalplayerprofiledata("takeCoverWarnings");
if(var_00 < 10)
{
self setlocalplayerprofiledata("takeCoverWarnings",var_00 + 1);
}
}
//Function Number: 78
auto_adjust_difficulty_player_positioner()
{
var_00 = self.origin;
wait(5);
if(autospot_is_close_to_player(var_00))
{
level.autoadjust_playerspots[level.autoadjust_playerspots.size] = var_00;
}
}
//Function Number: 79
autospot_is_close_to_player(param_00)
{
return distancesquared(self.origin,param_00) < 19600;
}
//Function Number: 80
auto_adjust_difficulty_player_movement_check()
{
level.autoadjust_playerspots = [];
level.player.movedrecently = 1;
wait(1);
for(;;)
{
level.player thread auto_adjust_difficulty_player_positioner();
level.player.movedrecently = 1;
var_00 = [];
var_01 = level.autoadjust_playerspots.size - 5;
if(var_01 < 0)
{
var_01 = 0;
}
for(var_02 = var_01;var_02 < level.autoadjust_playerspots.size;var_02++)
{
if(!level.player autospot_is_close_to_player(level.autoadjust_playerspots[var_02]))
{
continue;
}
var_00[var_00.size] = level.autoadjust_playerspots[var_02];
level.player.movedrecently = 0;
}
level.autoadjust_playerspots = var_00;
wait(1);
}
}
//Function Number: 81
auto_adjust_difficulty_track_player_death()
{
level.player waittill("death");
var_00 = getdvarint("autodifficulty_playerDeathTimer");
var_00 = var_00 - 60;
setdvar("autodifficulty_playerDeathTimer",var_00);
}
//Function Number: 82
auto_adjust_difficulty_track_player_shots()
{
var_00 = gettime();
for(;;)
{
if(level.player attackbuttonpressed())
{
var_00 = gettime();
}
level.timebetweenshots = gettime() - var_00;
wait(0.05);
}
}
//Function Number: 83
hud_debug_add_frac(param_00,param_01)
{
hud_debug_add_display(param_00,param_01 * 100,1);
}
//Function Number: 84
hud_debug_add(param_00,param_01)
{
hud_debug_add_display(param_00,param_01,0);
}
//Function Number: 85
hud_debug_clear()
{
level.hudnum = 0;
if(isdefined(level.huddebugnum))
{
for(var_00 = 0;var_00 < level.huddebugnum.size;var_00++)
{
level.huddebugnum[var_00] destroy();
}
}
level.huddebugnum = [];
}
//Function Number: 86
hud_debug_add_message(param_00)
{
if(!isdefined(level.hudmsgshare))
{
level.hudmsgshare = [];
}
if(!isdefined(level.hudmsgshare[param_00]))
{
var_01 = newhudelem();
var_01.x = level.debugleft;
var_01.y = level.debugheight + level.hudnum * 15;
var_01.foreground = 1;
var_01.sort = 100;
var_01.alpha = 1;
var_01.alignx = "left";
var_01.horzalign = "left";
var_01.fontscale = 1;
var_01 settext(param_00);
level.hudmsgshare[param_00] = 1;
}
}
//Function Number: 87
hud_debug_add_display(param_00,param_01,param_02)
{
hud_debug_add_message(param_00);
param_01 = int(param_01);
var_03 = 0;
if(param_01 < 0)
{
var_03 = 1;
param_01 = param_01 * -1;
}
var_04 = 0;
var_05 = 0;
var_06 = 0;
var_07 = 0;
while(param_01 >= 10000)
{
param_01 = param_01 - 10000;
}
while(param_01 >= 1000)
{
param_01 = param_01 - 1000;
var_04++;
}
while(param_01 >= 100)
{
param_01 = param_01 - 100;
var_05++;
}
while(param_01 >= 10)
{
param_01 = param_01 - 10;
var_06++;
}
while(param_01 >= 1)
{
param_01 = param_01 - 1;
var_07++;
}
var_08 = 0;
var_09 = 10;
if(var_04 > 0)
{
hud_debug_add_num(var_04,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_05,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_06,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_07,var_08);
var_08 = var_08 + var_09;
}
else if(var_05 > 0 || param_02)
{
hud_debug_add_num(var_05,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_06,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_07,var_08);
var_08 = var_08 + var_09;
}
else if(var_06 > 0)
{
hud_debug_add_num(var_06,var_08);
var_08 = var_08 + var_09;
hud_debug_add_num(var_07,var_08);
var_08 = var_08 + var_09;
}
else
{
hud_debug_add_num(var_07,var_08);
var_08 = var_08 + var_09;
}
if(param_02)
{
var_0A = newhudelem();
var_0A.x = 204.5;
var_0A.y = level.debugheight + level.hudnum * 15;
var_0A.foreground = 1;
var_0A.sort = 100;
var_0A.alpha = 1;
var_0A.alignx = "left";
var_0A.horzalign = "left";
var_0A.fontscale = 1;
var_0A settext(".");
level.huddebugnum[level.huddebugnum.size] = var_0A;
}
if(var_03)
{
var_0B = newhudelem();
var_0B.x = 195.5;
var_0B.y = level.debugheight + level.hudnum * 15;
var_0B.foreground = 1;
var_0B.sort = 100;
var_0B.alpha = 1;
var_0B.alignx = "left";
var_0B.horzalign = "left";
var_0B.fontscale = 1;
var_0B settext(" - ");
level.huddebugnum[level.hudnum] = var_0B;
}
level.hudnum++;
}
//Function Number: 88
hud_debug_add_string(param_00,param_01)
{
hud_debug_add_message(param_00);
hud_debug_add_second_string(param_01,0);
level.hudnum++;
}
//Function Number: 89
hud_debug_add_num(param_00,param_01)
{
var_02 = newhudelem();
var_02.x = 200 + param_01 * 0.65;
var_02.y = level.debugheight + level.hudnum * 15;
var_02.foreground = 1;
var_02.sort = 100;
var_02.alpha = 1;
var_02.alignx = "left";
var_02.horzalign = "left";
var_02.fontscale = 1;
var_02 settext(param_00 + "");
level.huddebugnum[level.huddebugnum.size] = var_02;
}
//Function Number: 90
hud_debug_add_second_string(param_00,param_01)
{
var_02 = newhudelem();
var_02.x = 200 + param_01 * 0.65;
var_02.y = level.debugheight + level.hudnum * 15;
var_02.foreground = 1;
var_02.sort = 100;
var_02.alpha = 1;
var_02.alignx = "left";
var_02.horzalign = "left";
var_02.fontscale = 1;
var_02 settext(param_00);
level.huddebugnum[level.huddebugnum.size] = var_02;
}
//Function Number: 91
aa_init_stats()
{
level.sp_stat_tracking_func = ::auto_adjust_new_zone;
setdvar("aa_player_kills","0");
setdvar("aa_enemy_deaths","0");
setdvar("aa_enemy_damage_taken","0");
setdvar("aa_player_damage_taken","0");
setdvar("aa_player_damage_dealt","0");
setdvar("aa_ads_damage_dealt","0");
setdvar("aa_time_tracking","0");
setdvar("aa_deaths","0");
setdvar("player_cheated",0);
level.auto_adjust_results = [];
thread aa_time_tracking();
thread aa_player_health_tracking();
thread aa_player_ads_tracking();
common_scripts\utility::flag_set("auto_adjust_initialized");
common_scripts\utility::flag_init("aa_main_" + level.script);
common_scripts\utility::flag_set("aa_main_" + level.script);
}
//Function Number: 92
command_used(param_00)
{
var_01 = getkeybinding(param_00);
if(var_01["count"] <= 0)
{
return 0;
}
for(var_02 = 1;var_02 < var_01["count"] + 1;var_02++)
{
if(self buttonpressed(var_01["key" + var_02]))
{
return 1;
}
}
return 0;
}
//Function Number: 93
aa_time_tracking()
{
waittillframeend;
wait(0.2);
}
//Function Number: 94
aa_player_ads_tracking()
{
level.player endon("death");
level.player_ads_time = 0;
for(;;)
{
if(level.player maps\_utility::isads())
{
level.player_ads_time = gettime();
while(level.player maps\_utility::isads())
{
wait(0.05);
}
continue;
}
wait(0.05);
}
}
//Function Number: 95
aa_player_health_tracking()
{
for(;;)
{
level.player waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06);
aa_add_event("aa_player_damage_taken",var_00);
if(!isalive(level.player))
{
aa_add_event("aa_deaths",1);
return;
}
}
}
//Function Number: 96
auto_adjust_new_zone(param_00)
{
if(!isdefined(level.auto_adjust_flags))
{
level.auto_adjust_flags = [];
}
common_scripts\utility::flag_wait("auto_adjust_initialized");
level.auto_adjust_results[param_00] = [];
level.auto_adjust_flags[param_00] = 0;
common_scripts\utility::flag_wait(param_00);
if(getdvar("aa_zone" + param_00) == "")
{
setdvar("aa_zone" + param_00,"on");
level.auto_adjust_flags[param_00] = 1;
aa_update_flags();
setdvar("start_time" + param_00,getdvar("aa_time_tracking"));
setdvar("starting_player_kills" + param_00,getdvar("aa_player_kills"));
setdvar("starting_deaths" + param_00,getdvar("aa_deaths"));
setdvar("starting_ads_damage_dealt" + param_00,getdvar("aa_ads_damage_dealt"));
setdvar("starting_player_damage_dealt" + param_00,getdvar("aa_player_damage_dealt"));
setdvar("starting_player_damage_taken" + param_00,getdvar("aa_player_damage_taken"));
setdvar("starting_enemy_damage_taken" + param_00,getdvar("aa_enemy_damage_taken"));
setdvar("starting_enemy_deaths" + param_00,getdvar("aa_enemy_deaths"));
}
else if(getdvar("aa_zone" + param_00) == "done")
{
return;
}
common_scripts\utility::flag_waitopen(param_00);
auto_adust_zone_complete(param_00);
}
//Function Number: 97
auto_adust_zone_complete(param_00)
{
setdvar("aa_zone" + param_00,"done");
var_01 = getdvarfloat("start_time" + param_00);
var_02 = getdvarint("starting_player_kills" + param_00);
var_03 = getdvarint("aa_enemy_deaths" + param_00);
var_04 = getdvarint("aa_enemy_damage_taken" + param_00);
var_05 = getdvarint("aa_player_damage_taken" + param_00);
var_06 = getdvarint("aa_player_damage_dealt" + param_00);
var_07 = getdvarint("aa_ads_damage_dealt" + param_00);
var_08 = getdvarint("aa_deaths" + param_00);
level.auto_adjust_flags[param_00] = 0;
aa_update_flags();
var_09 = getdvarfloat("aa_time_tracking") - var_01;
var_0A = getdvarint("aa_player_kills") - var_02;
var_0B = getdvarint("aa_enemy_deaths") - var_03;
var_0C = 0;
if(var_0B > 0)
{
var_0C = var_0A / var_0B;
var_0C = var_0C * 100;
var_0C = int(var_0C);
}
var_0D = getdvarint("aa_enemy_damage_taken") - var_04;
var_0E = getdvarint("aa_player_damage_dealt") - var_06;
var_0F = 0;
var_10 = 0;
if(var_0D > 0 && var_09 > 0)
{
var_0F = var_0E / var_0D;
var_0F = var_0F * 100;
var_0F = int(var_0F);
var_10 = var_0E / var_09;
var_10 = var_10 * 60;
var_10 = int(var_10);
}
var_11 = getdvarint("aa_ads_damage_dealt") - var_07;
var_12 = 0;
if(var_0E > 0)
{
var_12 = var_11 / var_0E;
var_12 = var_12 * 100;
var_12 = int(var_12);
}
var_13 = getdvarint("aa_player_damage_taken") - var_05;
var_14 = 0;
if(var_09 > 0)
{
var_14 = var_13 / var_09;
}
var_15 = var_14 * 60;
var_15 = int(var_15);
var_16 = getdvarint("aa_deaths") - var_08;
var_17 = [];
var_17["player_damage_taken_per_minute"] = var_15;
var_17["player_damage_dealt_per_minute"] = var_10;
var_17["minutes"] = var_09 / 60;
var_17["deaths"] = var_16;
var_17["gameskill"] = level.gameskill;
level.auto_adjust_results[param_00] = var_17;
var_18 = "Completed AA sequence: ";
var_18 = var_18 + level.script + "/" + param_00;
var_19 = getarraykeys(var_17);
for(var_1A = 0;var_1A < var_19.size;var_1A++)
{
var_18 = var_18 + ", " + var_19[var_1A] + ": " + var_17[var_19[var_1A]];
}
logstring(var_18);
}
//Function Number: 98
aa_print_vals(param_00,param_01)
{
logstring(param_00 + ": " + param_01[param_00]);
}
//Function Number: 99
aa_update_flags()
{
}
//Function Number: 100
aa_add_event(param_00,param_01)
{
var_02 = getdvarint(param_00);
setdvar(param_00,var_02 + param_01);
}
//Function Number: 101
aa_add_event_float(param_00,param_01)
{
var_02 = getdvarfloat(param_00);
setdvar(param_00,var_02 + param_01);
}
//Function Number: 102
return_false(param_00)
{
return 0;
}
//Function Number: 103
player_attacker(param_00)
{
if([[ level.custom_player_attacker ]](param_00))
{
return 1;
}
if(isplayer(param_00))
{
return 1;
}
if(!isdefined(param_00.car_damage_owner_recorder))
{
return 0;
}
return param_00 player_did_most_damage();
}
//Function Number: 104
player_did_most_damage()
{
return self.player_damage * 1.75 > self.non_player_damage;
}
//Function Number: 105
empty_kill_func(param_00,param_01,param_02)
{
}
//Function Number: 106
auto_adjust_enemy_died(param_00,param_01,param_02,param_03)
{
aa_add_event("aa_enemy_deaths",1);
if(!isdefined(param_01))
{
return;
}
if(!player_attacker(param_01))
{
return;
}
[[ level.global_kill_func ]](param_02,self.damagelocation,param_03);
aa_add_event("aa_player_kills",1);
}
//Function Number: 107
auto_adjust_enemy_death_detection(param_00,param_01,param_02,param_03,param_04,param_05)
{
if(!isalive(self) || self.delayeddeath)
{
auto_adjust_enemy_died(param_00,param_01,param_04,param_03);
return;
}
if(!player_attacker(param_01))
{
return;
}
aa_player_attacks_enemy_with_ads(param_00,param_04,param_03);
}
//Function Number: 108
aa_player_attacks_enemy_with_ads(param_00,param_01,param_02)
{
aa_add_event("aa_player_damage_dealt",param_00);
if(!level.player maps\_utility::isads())
{
[[ level.global_damage_func ]](param_01,self.damagelocation,param_02);
return 0;
}
if(!bullet_attack(param_01))
{
[[ level.global_damage_func ]](param_01,self.damagelocation,param_02);
return 0;
}
[[ level.global_damage_func_ads ]](param_01,self.damagelocation,param_02);
aa_add_event("aa_ads_damage_dealt",param_00);
return 1;
}
//Function Number: 109
bullet_attack(param_00)
{
if(param_00 == "MOD_PISTOL_BULLET")
{
return 1;
}
return param_00 == "MOD_RIFLE_BULLET";
}
//Function Number: 110
add_fractional_data_point(param_00,param_01,param_02)
{
if(!isdefined(level.difficultysettings_frac_data_points[param_00]))
{
level.difficultysettings_frac_data_points[param_00] = [];
}
var_03 = [];
var_03["frac"] = param_01;
var_03["val"] = param_02;
level.difficultysettings_frac_data_points[param_00][level.difficultysettings_frac_data_points[param_00].size] = var_03;
}
//Function Number: 111
coop_with_one_player_downed()
{
return maps\_utility::is_coop() && maps\_utility::get_players_healthy().size == 1;
}