iw6-scripts/maps/mp/killstreaks/_gas_airstrike.gsc
2024-02-13 13:20:49 +01:00

175 lines
5.5 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
precachelocationselector( "map_artillery_selector" );
var_0 = spawnstruct();
var_0.modelnames = [];
var_0.modelnames["allies"] = "vehicle_mig29_desert";
var_0.modelnames["axis"] = "vehicle_mig29_desert";
var_0.inboundsfx = "veh_mig29_dist_loop";
var_0.compassiconfriendly = "compass_objpoint_airstrike_friendly";
var_0.compassiconenemy = "compass_objpoint_airstrike_busy";
var_0.speed = 5000;
var_0.halfdistance = 15000;
var_0.heightrange = 500;
var_0.outboundflightanim = "airstrike_mp_roll";
var_0.onattackdelegate = ::dropbombs;
var_0.onflybycompletedelegate = ::cleanupflyby;
var_0.choosedirection = 1;
var_0.selectlocationvo = "KS_hqr_airstrike";
var_0.inboundvo = "KS_ast_inbound";
var_0.bombmodel = "projectile_cbu97_clusterbomb";
var_0.numbombs = 3;
var_0.distancebetweenbombs = 350;
var_0.effectradius = 200;
var_0.effectheight = 120;
var_0.effectvfx = loadfx( "fx/smoke/poisonous_gas_linger_medium_thick_killer_instant" );
var_0.effectmindelay = 0.25;
var_0.effectmaxdelay = 0.5;
var_0.effectlifespan = 13;
var_0.effectcheckfrequency = 1.0;
var_0.effectdamage = 10;
var_0.obitweapon = "gas_strike_mp";
var_0.killcamoffset = ( 0, 0, 60 );
level.planeconfigs["gas_airstrike"] = var_0;
level.killstreakfuncs["gas_airstrike"] = ::onuse;
}
onuse( var_0, var_1 )
{
var_2 = maps\mp\_utility::getotherteam( self.team );
if ( isdefined( level.numgasstrikeactive ) )
{
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
else
{
var_3 = maps\mp\killstreaks\_plane::selectairstrikelocation( var_0, "gas_airstrike", ::dostrike );
return isdefined( var_3 ) && var_3;
}
}
dostrike( var_0, var_1, var_2, var_3 )
{
level.numgasstrikeactive = 0;
wait 1;
var_4 = maps\mp\killstreaks\_plane::getplaneflyheight();
var_5 = anglestoforward( ( 0, var_2, 0 ) );
dooneflyby( var_3, var_0, var_1, var_5, var_4 );
self waittill( "gas_airstrike_flyby_complete" );
}
dooneflyby( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = level.planeconfigs[var_0];
var_6 = maps\mp\killstreaks\_plane::getflightpath( var_2, var_3, var_5.halfdistance, 1, var_4, var_5.speed, 0, var_0 );
level thread maps\mp\killstreaks\_plane::doflyby( var_1, self, var_1, var_6["startPoint"] + ( 0, 0, randomint( var_5.heightrange ) ), var_6["endPoint"] + ( 0, 0, randomint( var_5.heightrange ) ), var_6["attackTime"], var_6["flyTime"], var_3, var_0 );
}
cleanupflyby( var_0, var_1, var_2 )
{
var_0 notify( "gas_airstrike_flyby_complete" );
}
dropbombs( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "death" );
wait( var_2 );
var_5 = level.planeconfigs[var_4];
var_6 = var_5.numbombs;
var_7 = var_5.distancebetweenbombs / var_5.speed;
while ( var_6 > 0 )
{
thread droponebomb( var_3, var_4 );
var_6--;
wait( var_7 );
}
}
droponebomb( var_0, var_1 )
{
level.numgasstrikeactive++;
var_2 = self;
var_3 = level.planeconfigs[var_1];
var_4 = anglestoforward( var_2.angles );
var_5 = spawnbomb( var_3.bombmodel, var_2.origin, var_2.angles );
var_5 movegravity( var_4 * ( var_3.speed / 1.5 ), 3.0 );
var_6 = spawn( "script_model", var_5.origin );
var_6 setmodel( "tag_origin" );
var_6.origin = var_5.origin;
var_6.angles = var_5.angles;
var_5 setmodel( "tag_origin" );
wait 0.1;
var_7 = var_6.origin;
var_8 = var_6.angles;
if ( level.splitscreen )
playfxontag( level.airstrikessfx, var_6, "tag_origin" );
else
playfxontag( level.airstrikefx, var_6, "tag_origin" );
wait 1.0;
var_9 = bullettrace( var_6.origin, var_6.origin + ( 0, 0, -1000000.0 ), 0, undefined );
var_10 = var_9["position"];
var_5 onbombimpact( var_0, var_10, var_1 );
var_6 delete();
var_5 delete();
level.numgasstrikeactive--;
if ( level.numgasstrikeactive == 0 )
level.numgasstrikeactive = undefined;
}
spawnbomb( var_0, var_1, var_2 )
{
var_3 = spawn( "script_model", var_1 );
var_3.angles = var_2;
var_3 setmodel( var_0 );
return var_3;
}
onbombimpact( var_0, var_1, var_2 )
{
var_3 = level.planeconfigs[var_2];
var_4 = spawn( "trigger_radius", var_1, 0, var_3.effectradius, var_3.effectheight );
var_4.owner = var_0;
var_5 = var_3.effectradius;
var_6 = spawnfx( var_3.effectvfx, var_1 );
triggerfx( var_6 );
wait( randomfloatrange( var_3.effectmindelay, var_3.effectmaxdelay ) );
var_7 = var_3.effectlifespan;
var_8 = spawn( "script_model", var_1 + var_3.killcamoffset );
var_8 linkto( var_4 );
for ( self.killcament = var_8; var_7 > 0.0; var_7 = var_7 - var_3.effectcheckfrequency )
{
foreach ( var_10 in level.characters )
var_10 applygaseffect( var_0, var_1, var_4, self, var_3.effectdamage );
wait( var_3.effectcheckfrequency );
}
self.killcament delete();
var_4 delete();
var_6 delete();
}
applygaseffect( var_0, var_1, var_2, var_3, var_4 )
{
if ( var_0 maps\mp\_utility::isenemy( self ) && isalive( self ) && self istouching( var_2 ) )
{
var_3 radiusdamage( self.origin, 1, var_4, var_4, var_0, "MOD_RIFLE_BULLET", "gas_strike_mp" );
if ( !maps\mp\_utility::isusingremote() )
{
var_5 = maps\mp\perks\_perkfunctions::applystunresistence( 2.0 );
self shellshock( "default", var_5 );
}
}
}