Files
IL-GSC/MW3/PC/SP/maps/_leak.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

236 lines
5.4 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_leak.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 11
* Decompile Time: 136 ms
* Timestamp: 10/27/2023 2:20:09 AM
*******************************************************************/
//Function Number: 1
main()
{
var_00 = getentarray("leaking","targetname");
if(!var_00.size)
{
return;
}
var_00 thread precachefx();
var_00 thread methodsinit();
common_scripts\utility::array_thread(var_00,::leak_setup);
}
//Function Number: 2
leak_setup()
{
switch(self.script_noteworthy)
{
case "barrel_oil":
leak_barrel_setup();
break;
case "barrel_acid":
leak_barrel_setup();
break;
case "barrel_sludge":
leak_barrel_setup();
break;
case "barrel_water":
leak_barrel_setup();
break;
}
thread leak_think();
}
//Function Number: 3
leak_barrel_setup()
{
self.a = self.origin;
self.up = anglestoup(self.angles);
var_00 = anglestoup((0,90,0));
self.org = self.a + self.up * 22;
self.a = self.a + self.up * 1.5;
self.b = self.a + self.up * 41.4;
self.volume = 25861.65;
self.curvol = self.volume;
var_01 = vectordot(self.up,var_00);
var_02 = self.b;
if(var_01 < 0)
{
var_02 = self.a;
}
var_01 = abs(1 - abs(var_01));
self.lowz = physicstrace(self.org,self.org + (0,0,-80))[2];
self.highz = var_02[2] + var_01 * 14;
}
//Function Number: 4
leak_think()
{
self setcandamage(1);
self endon("drained");
for(;;)
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04);
if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT")
{
continue;
}
var_03 = self [[ level._leak_methods[var_04] ]](var_03,var_04);
if(!isdefined(var_03))
{
continue;
}
thread leak_drain(var_03);
}
}
//Function Number: 5
leak_drain(param_00)
{
var_01 = pointonsegmentnearesttopoint(self.a,self.b,param_00);
var_02 = undefined;
if(var_01 == self.a)
{
var_02 = self.up * -1;
}
else if(var_01 == self.b)
{
var_02 = self.up;
}
else
{
var_02 = vectorfromlinetopoint(self.a,self.b,param_00);
}
var_03 = param_00[2] - self.lowz;
if(var_03 < 0.02)
{
var_03 = 0;
}
var_04 = var_03 / self.highz - self.lowz * self.volume;
if(self.curvol > var_04)
{
while(self.curvol > var_04)
{
playfx(level._effect["leak_interactive_leak"][self.script_noteworthy],param_00,var_02);
self.curvol = self.curvol - 100;
wait 0.1;
}
playfx(level._effect["leak_interactive_drain"][self.script_noteworthy],param_00,var_02);
}
if(self.curvol / self.volume <= 0.05)
{
self notify("drained");
}
}
//Function Number: 6
methodsinit()
{
level._leak_methods = [];
level._leak_methods["MOD_UNKNOWN"] = ::leak_calc_splash;
level._leak_methods["MOD_PISTOL_BULLET"] = ::leak_calc_ballistic;
level._leak_methods["MOD_RIFLE_BULLET"] = ::leak_calc_ballistic;
level._leak_methods["MOD_GRENADE"] = ::leak_calc_splash;
level._leak_methods["MOD_GRENADE_SPLASH"] = ::leak_calc_splash;
level._leak_methods["MOD_PROJECTILE"] = ::leak_calc_splash;
level._leak_methods["MOD_PROJECTILE_SPLASH"] = ::leak_calc_splash;
level._leak_methods["MOD_MELEE"] = ::leak_calc_nofx;
level._leak_methods["MOD_HEAD_SHOT"] = ::leak_calc_nofx;
level._leak_methods["MOD_CRUSH"] = ::leak_calc_nofx;
level._leak_methods["MOD_TELEFRAG"] = ::leak_calc_nofx;
level._leak_methods["MOD_FALLING"] = ::leak_calc_nofx;
level._leak_methods["MOD_SUICIDE"] = ::leak_calc_nofx;
level._leak_methods["MOD_TRIGGER_HURT"] = ::leak_calc_splash;
level._leak_methods["MOD_EXPLOSIVE"] = ::leak_calc_splash;
level._leak_methods["MOD_IMPACT"] = ::leak_calc_nofx;
}
//Function Number: 7
leak_calc_ballistic(param_00,param_01)
{
return param_00;
}
//Function Number: 8
leak_calc_splash(param_00,param_01)
{
var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00));
param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00);
return param_00 + var_02 * 4;
}
//Function Number: 9
leak_calc_nofx(param_00,param_01)
{
return undefined;
}
//Function Number: 10
leak_calc_assert(param_00,param_01)
{
}
//Function Number: 11
precachefx()
{
for(var_00 = 0;var_00 < self.size;var_00++)
{
if(self[var_00].script_noteworthy != "barrel_oil")
{
continue;
}
level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak");
level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain");
break;
}
for(var_00 = 0;var_00 < self.size;var_00++)
{
if(self[var_00].script_noteworthy != "barrel_acid")
{
continue;
}
level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak");
level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain");
break;
}
for(var_00 = 0;var_00 < self.size;var_00++)
{
if(self[var_00].script_noteworthy != "barrel_water")
{
continue;
}
level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak");
level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain");
break;
}
for(var_00 = 0;var_00 < self.size;var_00++)
{
if(self[var_00].script_noteworthy != "barrel_sludge")
{
continue;
}
level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak");
level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain");
break;
}
}