1327 lines
35 KiB
Plaintext
1327 lines
35 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
|
|
}
|
|
|
|
hurtgen_style()
|
|
{
|
|
var_0 = getentarray( "mortar", "targetname" );
|
|
var_1 = -1;
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
var_0[var_2] setup_mortar_terrain();
|
|
|
|
if ( !isdefined( level.mortar ) )
|
|
common_scripts\utility::error( "level.mortar not defined. define in level script" );
|
|
|
|
level waittill( "start_mortars" );
|
|
|
|
for (;;)
|
|
{
|
|
wait( 1 + randomfloat( 2 ) );
|
|
var_3 = randomint( var_0.size );
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
var_4 = ( var_2 + var_3 ) % var_0.size;
|
|
var_5 = distance( level.player getorigin(), var_0[var_4].origin );
|
|
var_6 = undefined;
|
|
|
|
if ( isdefined( level.foley ) )
|
|
var_6 = distance( level.foley.origin, var_0[var_4].origin );
|
|
else
|
|
var_6 = 360;
|
|
|
|
if ( var_5 < 1600 && var_5 > 400 && var_6 > 350 && var_4 != var_1 )
|
|
{
|
|
var_0[var_4] activate_mortar( 400, 300, 25, undefined, undefined, undefined, 0 );
|
|
var_1 = var_4;
|
|
|
|
if ( var_5 < 500 )
|
|
maps\_shellshock::main( 4 );
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
railyard_style( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 7;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 2200;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 300;
|
|
|
|
if ( !isdefined( level.istopbarrage ) )
|
|
level.istopbarrage = 0;
|
|
|
|
if ( !isdefined( var_9 ) )
|
|
var_9 = 0;
|
|
|
|
var_11 = getentarray( "mortar", "targetname" );
|
|
var_12 = -1;
|
|
|
|
for ( var_13 = 0; var_13 < var_11.size; var_13++ )
|
|
{
|
|
if ( isdefined( var_11[var_13].target ) && var_9 == 0 )
|
|
var_11[var_13] setup_mortar_terrain();
|
|
}
|
|
|
|
if ( !isdefined( level.mortar ) )
|
|
common_scripts\utility::error( "level.mortar not defined. define in level script" );
|
|
|
|
if ( isdefined( level.mortar_notify ) )
|
|
level waittill( level.mortar_notify );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.istopbarrage != 0 )
|
|
wait 1;
|
|
|
|
while ( level.istopbarrage == 0 )
|
|
{
|
|
if ( isdefined( var_10 ) )
|
|
wait( var_10 + ( randomfloat( var_0 ) + randomfloat( var_0 ) ) );
|
|
else
|
|
wait( randomfloat( var_0 ) + randomfloat( var_0 ) );
|
|
|
|
var_14 = randomint( var_11.size );
|
|
|
|
for ( var_13 = 0; var_13 < var_11.size; var_13++ )
|
|
{
|
|
var_15 = ( var_13 + var_14 ) % var_11.size;
|
|
var_16 = distance( level.player getorigin(), var_11[var_15].origin );
|
|
|
|
if ( var_16 < var_1 && var_16 > var_2 && var_15 != var_12 )
|
|
{
|
|
var_11[var_15] activate_mortar( var_3, var_4, var_5, var_6, var_7, var_8, 0 );
|
|
var_12 = var_15;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
script_mortargroup_style()
|
|
{
|
|
var_0 = [];
|
|
var_1 = [];
|
|
level.mortars = [];
|
|
var_2 = getentarray( "script_model", "classname" );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
if ( isdefined( var_2[var_3].script_mortargroup ) )
|
|
{
|
|
if ( !isdefined( level.mortars[var_2[var_3].script_mortargroup] ) )
|
|
level.mortars[var_2[var_3].script_mortargroup] = [];
|
|
|
|
var_4 = spawnstruct();
|
|
var_4.origin = var_2[var_3].origin;
|
|
var_4.angles = var_2[var_3].angles;
|
|
|
|
if ( isdefined( var_2[var_3].targetname ) )
|
|
var_4.targetname = var_2[var_3].targetname;
|
|
|
|
if ( isdefined( var_2[var_3].target ) )
|
|
var_4.target = var_2[var_3].target;
|
|
|
|
level.mortars[var_2[var_3].script_mortargroup][level.mortars[var_2[var_3].script_mortargroup].size] = var_4;
|
|
var_2[var_3] delete();
|
|
}
|
|
}
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_0[var_3] hide();
|
|
var_0[var_3].has_terrain = 0;
|
|
}
|
|
|
|
if ( !isdefined( level.mortar ) )
|
|
level.mortar = loadfx( "fx/explosions/artilleryExp_dirt_brown" );
|
|
|
|
var_5 = common_scripts\utility::array_combine( getentarray( "trigger_multiple", "classname" ), getentarray( "trigger_radius", "classname" ) );
|
|
|
|
for ( var_3 = 0; var_3 < var_5.size; var_3++ )
|
|
{
|
|
if ( isdefined( var_5[var_3].script_mortargroup ) )
|
|
{
|
|
if ( !isdefined( level.mortars[var_5[var_3].script_mortargroup] ) )
|
|
level.mortars[var_5[var_3].script_mortargroup] = [];
|
|
|
|
var_1[var_1.size] = var_5[var_3];
|
|
}
|
|
}
|
|
|
|
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
|
|
{
|
|
var_1[var_3].mortargroup = 0;
|
|
var_1[var_3] thread script_mortargroup_mortar_group();
|
|
}
|
|
|
|
var_6 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "mortarzone", var_7 );
|
|
|
|
if ( isdefined( var_6 ) )
|
|
var_6 notify( "wait again" );
|
|
|
|
level.mortarzone = var_7.script_mortargroup;
|
|
var_7 thread script_mortargroup_mortarzone();
|
|
var_6 = var_7;
|
|
}
|
|
}
|
|
|
|
script_mortargroup_mortarzone()
|
|
{
|
|
var_0 = [];
|
|
var_1 = gettime();
|
|
var_2 = 0;
|
|
|
|
if ( isdefined( self.script_timer ) )
|
|
{
|
|
level notify( "timed barrage" );
|
|
var_1 = gettime() + self.script_timer * 1000;
|
|
var_2 = 1;
|
|
}
|
|
|
|
if ( isdefined( self.script_radius ) )
|
|
var_3 = self.script_radius;
|
|
else
|
|
var_3 = 0;
|
|
|
|
if ( isdefined( self.script_delay_min ) && isdefined( self.script_delay_max ) )
|
|
var_4 = 1;
|
|
else
|
|
var_4 = 0;
|
|
|
|
var_5 = 0;
|
|
var_6 = 2;
|
|
var_7 = 4;
|
|
var_8 = 0;
|
|
|
|
while ( level.mortars[self.script_mortargroup].size > 0 && level.mortarzone == self.script_mortargroup || var_2 )
|
|
{
|
|
if ( var_4 )
|
|
wait( randomfloat( self.script_delay_max - self.script_delay_min ) + self.script_delay_min );
|
|
else if ( var_8 )
|
|
{
|
|
if ( var_5 < var_7 )
|
|
{
|
|
wait( randomfloat( 0.5 ) );
|
|
var_5++;
|
|
}
|
|
else
|
|
{
|
|
var_5 = 0;
|
|
var_7 = 2 + randomint( 4 );
|
|
var_8 = 0;
|
|
continue;
|
|
}
|
|
}
|
|
else if ( var_5 < var_6 )
|
|
{
|
|
var_9 = randomfloat( 2 ) + 1;
|
|
wait( var_9 );
|
|
var_5++;
|
|
}
|
|
else
|
|
{
|
|
var_5 = 0;
|
|
var_8 = 1;
|
|
var_6 = randomint( 2 ) + 3;
|
|
continue;
|
|
}
|
|
|
|
var_10 = [];
|
|
var_11 = randomint( level.mortars[self.script_mortargroup].size );
|
|
|
|
if ( randomint( 100 ) < 75 )
|
|
{
|
|
var_12 = anglestoforward( level.player.angles );
|
|
var_13 = [];
|
|
|
|
for ( var_14 = 0; var_14 < level.mortars[self.script_mortargroup].size; var_14++ )
|
|
{
|
|
if ( var_3 > 0 && distance( level.player.origin, level.mortars[self.script_mortargroup][var_14].origin ) > var_3 )
|
|
continue;
|
|
|
|
if ( is_lastblast( level.mortars[self.script_mortargroup][var_14], var_0 ) )
|
|
continue;
|
|
|
|
var_15 = vectornormalize( level.mortars[self.script_mortargroup][var_14].origin - level.player.origin );
|
|
|
|
if ( vectordot( var_12, var_15 ) > 0.3 )
|
|
var_13[var_13.size] = var_14;
|
|
}
|
|
|
|
if ( var_13.size > 0 )
|
|
var_11 = var_13[randomint( var_13.size )];
|
|
}
|
|
|
|
if ( var_0.size > 3 )
|
|
var_0 = [];
|
|
|
|
var_0[var_0.size] = level.mortars[self.script_mortargroup][var_11];
|
|
level.mortars[self.script_mortargroup][var_11] thread script_mortargroup_domortar();
|
|
|
|
if ( var_2 && gettime() > var_1 )
|
|
{
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_16 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_16 ) )
|
|
{
|
|
var_16 notify( "trigger" );
|
|
level notify( "timed barrage finished" );
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
is_lastblast( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( var_0 == var_1[var_2] )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
script_mortargroup_domortar()
|
|
{
|
|
if ( isdefined( self.targetname ) && isdefined( level.mortarthread[self.targetname] ) )
|
|
level thread [[ level.mortarthread[self.targetname] ]]( self );
|
|
else
|
|
thread activate_mortar( undefined, undefined, undefined, undefined, undefined, undefined, 1 );
|
|
|
|
self waittill( "mortar" );
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 notify( "trigger" );
|
|
}
|
|
}
|
|
|
|
script_mortargroup_mortar_group()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger" );
|
|
|
|
if ( isdefined( level.mortarzone ) && level.mortarzone == self.script_mortargroup )
|
|
continue;
|
|
|
|
level notify( "mortarzone", self );
|
|
self waittill( "wait again" );
|
|
}
|
|
}
|
|
|
|
trigger_targeted()
|
|
{
|
|
level.mortartrigger = getentarray( "mortartrigger", "targetname" );
|
|
level.mortars = getentarray( "script_origin", "classname" );
|
|
|
|
for ( var_0 = 0; var_0 < level.mortars.size; var_0++ )
|
|
{
|
|
if ( isdefined( level.mortars[var_0].script_mortargroup ) )
|
|
level.mortars[var_0] setup_mortar_terrain();
|
|
}
|
|
|
|
level.lastmortar = -1;
|
|
|
|
if ( !isdefined( level.mortar ) )
|
|
common_scripts\utility::error( "level.mortar not defined. define in level script" );
|
|
|
|
for ( var_0 = 0; var_0 < level.mortartrigger.size; var_0++ )
|
|
thread trigger_targeted_mortars( var_0 );
|
|
}
|
|
|
|
trigger_targeted_mortars( var_0 )
|
|
{
|
|
var_1 = getentarray( level.mortartrigger[var_0].target, "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( level.mortartrigger[var_0] ) )
|
|
{
|
|
var_2 = randomint( var_1.size );
|
|
|
|
while ( var_2 == level.lastmortar )
|
|
{
|
|
var_2 = randomint( var_1.size );
|
|
wait 0.1;
|
|
}
|
|
|
|
var_1[var_2] activate_mortar( undefined, undefined, undefined, undefined, undefined, undefined, 0 );
|
|
level.lastmortar = var_2;
|
|
}
|
|
|
|
wait( randomfloat( 3 ) + randomfloat( 4 ) );
|
|
}
|
|
}
|
|
|
|
bunker_style_mortar()
|
|
{
|
|
var_0 = [];
|
|
var_1 = undefined;
|
|
var_2 = [];
|
|
var_3 = common_scripts\utility::getstructarray( "mortar_bunker", "targetname" );
|
|
var_4 = getentarray( "mortar_bunker", "targetname" );
|
|
|
|
if ( isdefined( var_4 ) && var_4.size > 0 )
|
|
var_1 = maps\_utility::array_merge( var_3, var_4 );
|
|
else
|
|
var_1 = var_3;
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
if ( !isdefined( var_1[var_5].script_mortargroup ) )
|
|
continue;
|
|
|
|
var_6 = -1;
|
|
var_7 = int( var_1[var_5].script_mortargroup );
|
|
|
|
for ( var_8 = 0; var_8 < var_0.size; var_8++ )
|
|
{
|
|
if ( var_7 != var_2[var_8] )
|
|
continue;
|
|
|
|
var_6 = var_8;
|
|
break;
|
|
}
|
|
|
|
if ( var_6 == -1 )
|
|
{
|
|
var_0[var_0.size] = [];
|
|
var_2[var_2.size] = var_7;
|
|
var_6 = var_0.size - 1;
|
|
}
|
|
|
|
var_0[var_6][var_0[var_6].size] = var_1[var_5];
|
|
}
|
|
|
|
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
|
|
thread bunker_style_mortar_think( var_0[var_5], var_3 );
|
|
|
|
wait 0.05;
|
|
common_scripts\utility::array_thread( getentarray( "mortar_on", "targetname" ), ::bunker_style_mortar_trigger, "on" );
|
|
common_scripts\utility::array_thread( getentarray( "mortar_off", "targetname" ), ::bunker_style_mortar_trigger, "off" );
|
|
}
|
|
|
|
bunker_style_mortar_think( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
if ( isdefined( level.mortarmininterval ) )
|
|
var_2 = level.mortarmininterval;
|
|
else
|
|
var_2 = 4;
|
|
|
|
if ( isdefined( level.mortarmaxinterval ) )
|
|
var_3 = level.mortarmaxinterval;
|
|
else
|
|
var_3 = 6;
|
|
|
|
var_4 = int( var_0[0].script_mortargroup );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "start_mortars " + var_4 );
|
|
thread bunker_style_mortar_activate( var_0, var_2, var_3, var_4, var_1 );
|
|
}
|
|
}
|
|
|
|
bunker_style_mortar_activate( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level endon( "start_mortars " + var_3 );
|
|
level endon( "stop_mortars " + var_3 );
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
var_5 = common_scripts\utility::getclosest( level.player.origin, var_4 );
|
|
|
|
if ( !isdefined( level.mortarnoincomingsound ) )
|
|
common_scripts\utility::play_sound_in_space( "mortar_incoming_bunker", var_5.origin );
|
|
|
|
var_5 = common_scripts\utility::getclosest( level.player.origin, var_4 );
|
|
thread common_scripts\utility::play_sound_in_space( "exp_artillery_underground", var_5.origin );
|
|
common_scripts\utility::array_thread( var_0, ::bunker_style_mortar_explode );
|
|
|
|
if ( !isdefined( level.mortarnoquake ) )
|
|
{
|
|
if ( common_scripts\utility::cointoss() )
|
|
earthquake( 0.2, 1.5, var_5.origin, 1250 );
|
|
else
|
|
earthquake( 0.35, 2.75, var_5.origin, 1250 );
|
|
}
|
|
|
|
level notify( "mortar_hit" );
|
|
wait( randomfloatrange( var_1, var_2 ) );
|
|
var_0 = common_scripts\utility::array_removeundefined( var_0 );
|
|
}
|
|
}
|
|
|
|
bunker_style_mortar_explode( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
if ( isdefined( level.mortarwithinfov ) && mortar_within_player_fov( level.mortarwithinfov ) == 0 )
|
|
return;
|
|
|
|
if ( isdefined( level.mortar_min_dist ) )
|
|
var_2 = level.mortar_min_dist;
|
|
else
|
|
var_2 = 1024;
|
|
|
|
var_3 = var_2 * var_2;
|
|
var_4 = distancesquared( level.player.origin, self.origin );
|
|
|
|
if ( var_4 > var_3 )
|
|
return;
|
|
|
|
if ( isdefined( self.classname ) && self.classname == "trigger_radius" )
|
|
{
|
|
if ( !level.player istouching( self ) && distance( level.player.origin, self.origin ) < level.mortardamagetriggerdist )
|
|
{
|
|
radiusdamage( self.origin, self.radius, 500, 500 );
|
|
self delete();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
playfx( level._effect["mortar"][self.script_fxid], self.origin );
|
|
|
|
if ( var_4 < 262144 )
|
|
thread common_scripts\utility::play_sound_in_space( "emt_single_ceiling_debris", self.origin );
|
|
}
|
|
}
|
|
|
|
bog_style_mortar()
|
|
{
|
|
var_0 = [];
|
|
var_1 = [];
|
|
var_2 = maps\_utility::getstructarray_delete( "mortar", "targetname" );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
if ( !isdefined( var_2[var_3].script_mortargroup ) )
|
|
continue;
|
|
|
|
var_4 = -1;
|
|
var_5 = int( var_2[var_3].script_mortargroup );
|
|
|
|
for ( var_6 = 0; var_6 < var_0.size; var_6++ )
|
|
{
|
|
if ( var_5 != var_1[var_6] )
|
|
continue;
|
|
|
|
var_4 = var_6;
|
|
break;
|
|
}
|
|
|
|
if ( var_4 == -1 )
|
|
{
|
|
var_0[var_0.size] = [];
|
|
var_1[var_1.size] = var_5;
|
|
var_4 = var_0.size - 1;
|
|
}
|
|
|
|
var_0[var_4][var_0[var_4].size] = var_2[var_3];
|
|
}
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
thread bog_style_mortar_think( var_0[var_3] );
|
|
|
|
wait 0.05;
|
|
common_scripts\utility::array_thread( getentarray( "mortar_on", "targetname" ), ::bog_style_mortar_trigger, "on" );
|
|
common_scripts\utility::array_thread( getentarray( "mortar_off", "targetname" ), ::bog_style_mortar_trigger, "off" );
|
|
}
|
|
|
|
bog_style_mortar_think( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
if ( isdefined( level.mortarmininterval ) )
|
|
var_2 = level.mortarmininterval;
|
|
else
|
|
var_2 = 0.5;
|
|
|
|
if ( isdefined( level.mortarmaxinterval ) )
|
|
var_3 = level.mortarmaxinterval;
|
|
else
|
|
var_3 = 3;
|
|
|
|
var_1 = int( var_0[0].script_mortargroup );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "start_mortars " + var_1 );
|
|
level thread bog_style_mortar_activate( var_0, var_1, var_2, var_3 );
|
|
|
|
if ( isdefined( level.bogmortarsgoonce ) )
|
|
return;
|
|
}
|
|
}
|
|
|
|
bog_style_mortar_activate( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "start_mortars " + var_1 );
|
|
level endon( "stop_mortars " + var_1 );
|
|
|
|
if ( isdefined( level.mortar_min_dist ) )
|
|
var_4 = level.mortar_min_dist;
|
|
else
|
|
var_4 = 300;
|
|
|
|
var_5 = spawn( "trigger_radius", ( 0, 0, 0 ), 0, var_4, 256 );
|
|
thread bog_style_mortar_cleanup( var_5, var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
var_6 = randomint( var_0.size );
|
|
|
|
if ( isdefined( var_0[var_6].cooldown ) )
|
|
continue;
|
|
|
|
var_7 = distance( level.player.origin, var_0[var_6].origin );
|
|
|
|
if ( var_7 < var_4 )
|
|
continue;
|
|
|
|
if ( isdefined( level.mortarexcluders ) && level.mortarexcluders.size > 0 )
|
|
{
|
|
var_5.origin = var_0[var_6].origin;
|
|
|
|
if ( mortars_too_close( level.mortarexcluders, var_5 ) )
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( level.nomaxmortardist ) && var_7 > 1000 )
|
|
continue;
|
|
|
|
if ( isdefined( level.mortar_max_dist ) && var_7 > level.mortar_max_dist )
|
|
continue;
|
|
|
|
if ( isdefined( level.mortarwithinfov ) && var_0[var_6] mortar_within_player_fov( level.mortarwithinfov ) == 0 )
|
|
continue;
|
|
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( level.nomortars ) && level.nomortars == 1 )
|
|
return;
|
|
|
|
var_0[var_6] thread bog_style_mortar_explode();
|
|
wait( var_2 + randomfloat( var_3 - var_2 ) );
|
|
}
|
|
}
|
|
|
|
bog_style_mortar_cleanup( var_0, var_1 )
|
|
{
|
|
level waittill( "stop_mortars " + var_1 );
|
|
var_0 delete();
|
|
}
|
|
|
|
mortars_too_close( var_0, var_1 )
|
|
{
|
|
foreach ( var_3 in level.mortarexcluders )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
if ( var_3 istouching( var_1 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
mortar_within_player_fov( var_0 )
|
|
{
|
|
var_1 = level.player geteye();
|
|
var_2 = ( 0, 0, 0 );
|
|
|
|
if ( isdefined( level.playermortarfovoffset ) )
|
|
var_2 = level.playermortarfovoffset;
|
|
|
|
var_3 = common_scripts\utility::within_fov( var_1, level.player getplayerangles() + var_2, self.origin, var_0 );
|
|
return var_3;
|
|
}
|
|
|
|
bog_style_mortar_explode( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.mortardamageradius ) )
|
|
level.mortardamageradius = 250;
|
|
|
|
if ( !isdefined( level.mortarearthquakeradius ) )
|
|
level.mortarearthquakeradius = 1250;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
thread bog_style_mortar_cooldown();
|
|
|
|
if ( !var_0 )
|
|
common_scripts\utility::play_sound_in_space( level.scr_sound["mortar"]["incomming"] );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
thread common_scripts\utility::play_sound_in_space( var_1 );
|
|
else
|
|
thread common_scripts\utility::play_sound_in_space( level.scr_sound["mortar"][self.script_fxid] );
|
|
|
|
setplayerignoreradiusdamage( 1 );
|
|
radiusdamage( self.origin, level.mortardamageradius, 150, 50 );
|
|
setplayerignoreradiusdamage( 0 );
|
|
playfx( level._effect["mortar"][self.script_fxid], self.origin );
|
|
|
|
if ( isdefined( level.alwaysquake ) )
|
|
earthquake( 0.3, 1, level.player.origin, 2000 );
|
|
|
|
if ( getdvarint( "bog_camerashake" ) > 0 )
|
|
{
|
|
if ( level.player getcurrentweapon() == "dragunov" && level.player playerads() > 0.8 )
|
|
return;
|
|
|
|
earthquake( 0.25, 0.75, self.origin, level.mortarearthquakeradius );
|
|
}
|
|
}
|
|
|
|
bog_style_mortar_cooldown()
|
|
{
|
|
self.cooldown = 1;
|
|
wait( 3 + randomfloat( 2 ) );
|
|
self.cooldown = undefined;
|
|
}
|
|
|
|
bog_style_mortar_trigger( var_0 )
|
|
{
|
|
self waittill( "trigger" );
|
|
|
|
if ( var_0 == "on" )
|
|
bog_style_mortar_on( self.script_mortargroup );
|
|
else if ( var_0 == "off" )
|
|
bog_style_mortar_off( self.script_mortargroup );
|
|
}
|
|
|
|
bog_style_mortar_on( var_0 )
|
|
{
|
|
level notify( "start_mortars " + var_0 );
|
|
}
|
|
|
|
bog_style_mortar_off( var_0 )
|
|
{
|
|
level notify( "stop_mortars " + var_0 );
|
|
}
|
|
|
|
bunker_style_mortar_on( var_0 )
|
|
{
|
|
if ( !isdefined( level.mortardamagetriggerdist ) )
|
|
level.mortardamagetriggerdist = 512;
|
|
|
|
if ( !isdefined( level.mortarwithinfov ) )
|
|
level.mortarwithinfov = cos( 35 );
|
|
|
|
level notify( "start_mortars " + var_0 );
|
|
}
|
|
|
|
bunker_style_mortar_off( var_0 )
|
|
{
|
|
level waittill( "mortar_hit" );
|
|
level notify( "stop_mortars " + var_0 );
|
|
}
|
|
|
|
bunker_style_mortar_off_nowait( var_0 )
|
|
{
|
|
level notify( "stop_mortars " + var_0 );
|
|
}
|
|
|
|
bunker_style_mortar_trigger( var_0 )
|
|
{
|
|
self waittill( "trigger" );
|
|
|
|
if ( var_0 == "on" )
|
|
bunker_style_mortar_on( self.script_mortargroup );
|
|
else if ( var_0 == "off" )
|
|
bunker_style_mortar_off( self.script_mortargroup );
|
|
}
|
|
|
|
burnville_style_mortar()
|
|
{
|
|
level endon( "stop falling mortars" );
|
|
setup_mortar_terrain();
|
|
wait( randomfloat( 0.5 ) + randomfloat( 0.5 ) );
|
|
|
|
for (;;)
|
|
{
|
|
if ( distance( level.player getorigin(), self.origin ) < 600 )
|
|
{
|
|
activate_mortar( undefined, undefined, undefined, undefined, undefined, undefined, 0 );
|
|
break;
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
|
|
wait( 7 + randomfloat( 20 ) );
|
|
|
|
for (;;)
|
|
{
|
|
if ( distance( level.player getorigin(), self.origin ) < 1200 && distance( level.player getorigin(), self.origin ) > 400 )
|
|
{
|
|
activate_mortar( undefined, undefined, undefined, undefined, undefined, undefined, 0 );
|
|
wait( 3 + randomfloat( 14 ) );
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
setup_mortar_terrain()
|
|
{
|
|
self.has_terrain = 0;
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
self.terrain = getentarray( self.target, "targetname" );
|
|
self.has_terrain = 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( !isdefined( self.terrain ) )
|
|
{
|
|
|
|
}
|
|
|
|
if ( isdefined( self.script_hidden ) )
|
|
{
|
|
if ( isdefined( self.script_hidden ) )
|
|
self.hidden_terrain = getent( self.script_hidden, "targetname" );
|
|
else if ( isdefined( self.terrain ) && isdefined( self.terrain[0].target ) )
|
|
self.hidden_terrain = getent( self.terrain[0].target, "targetname" );
|
|
|
|
if ( isdefined( self.hidden_terrain ) )
|
|
self.hidden_terrain hide();
|
|
}
|
|
else if ( isdefined( self.has_terrain ) )
|
|
{
|
|
if ( isdefined( self.terrain ) && isdefined( self.terrain[0].target ) )
|
|
self.hidden_terrain = getent( self.terrain[0].target, "targetname" );
|
|
|
|
if ( isdefined( self.hidden_terrain ) )
|
|
self.hidden_terrain hide();
|
|
}
|
|
}
|
|
|
|
activate_mortar( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
incoming_sound( undefined, var_6 );
|
|
level notify( "mortar" );
|
|
self notify( "mortar" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 256;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 400;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 25;
|
|
|
|
radiusdamage( self.origin, var_0, var_1, var_2 );
|
|
|
|
if ( isdefined( self.has_terrain ) && self.has_terrain == 1 && isdefined( self.terrain ) )
|
|
{
|
|
for ( var_7 = 0; var_7 < self.terrain.size; var_7++ )
|
|
{
|
|
if ( isdefined( self.terrain[var_7] ) )
|
|
self.terrain[var_7] delete();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.hidden_terrain ) )
|
|
self.hidden_terrain show();
|
|
|
|
self.has_terrain = 0;
|
|
mortar_boom( self.origin, var_3, var_4, var_5, undefined, var_6 );
|
|
}
|
|
|
|
mortar_boom( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0.15;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 2;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 850;
|
|
|
|
thread mortar_sound( var_5 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
playfx( var_4, var_0 );
|
|
else
|
|
playfx( level.mortar, var_0 );
|
|
|
|
earthquake( var_1, var_2, var_0, var_3 );
|
|
|
|
if ( isdefined( level.playermortar ) )
|
|
return;
|
|
|
|
if ( distance( level.player.origin, var_0 ) > 300 )
|
|
return;
|
|
|
|
level.playermortar = 1;
|
|
level notify( "shell shock player", var_2 * 4 );
|
|
maps\_shellshock::main( var_2 * 4 );
|
|
}
|
|
|
|
mortar_sound( var_0 )
|
|
{
|
|
if ( !isdefined( level.mortar_last_sound ) )
|
|
level.mortar_last_sound = -1;
|
|
|
|
for ( var_1 = randomint( 3 ) + 1; var_1 == level.mortar_last_sound; var_1 = randomint( 3 ) + 1 )
|
|
{
|
|
|
|
}
|
|
|
|
level.mortar_last_sound = var_1;
|
|
|
|
if ( !var_0 )
|
|
self playsound( "mortar_explosion" + var_1 );
|
|
else
|
|
common_scripts\utility::play_sound_in_space( "mortar_explosion" + var_1, self.origin );
|
|
}
|
|
|
|
incoming_sound( var_0, var_1 )
|
|
{
|
|
var_2 = gettime();
|
|
|
|
if ( !isdefined( level.lastmortarincomingtime ) )
|
|
level.lastmortarincomingtime = var_2;
|
|
else if ( var_2 - level.lastmortarincomingtime < 1000 )
|
|
{
|
|
wait 1;
|
|
return;
|
|
}
|
|
else
|
|
level.lastmortarincomingtime = var_2;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = randomint( 3 ) + 1;
|
|
|
|
if ( var_0 == 1 )
|
|
{
|
|
if ( var_1 )
|
|
thread common_scripts\utility::play_sound_in_space( "mortar_incoming1", self.origin );
|
|
else
|
|
self playsound( "mortar_incoming1" );
|
|
|
|
wait 0.82;
|
|
}
|
|
else if ( var_0 == 2 )
|
|
{
|
|
if ( var_1 )
|
|
thread common_scripts\utility::play_sound_in_space( "mortar_incoming2", self.origin );
|
|
else
|
|
self playsound( "mortar_incoming2" );
|
|
|
|
wait 0.42;
|
|
}
|
|
else
|
|
{
|
|
if ( var_1 )
|
|
thread common_scripts\utility::play_sound_in_space( "mortar_incoming3", self.origin );
|
|
else
|
|
self playsound( "mortar_incoming3" );
|
|
|
|
wait 1.3;
|
|
}
|
|
}
|
|
|
|
generic_style_init()
|
|
{
|
|
level._explosion_imaxrange = [];
|
|
level._explosion_iminrange = [];
|
|
level._explosion_iblastradius = [];
|
|
level._explosion_idamagemax = [];
|
|
level._explosion_idamagemin = [];
|
|
level._explosion_fquakepower = [];
|
|
level._explosion_iquaketime = [];
|
|
level._explosion_iquakeradius = [];
|
|
}
|
|
|
|
generic_style_setradius( var_0, var_1, var_2 )
|
|
{
|
|
level._explosion_iminrange[var_0] = var_1;
|
|
level._explosion_imaxrange[var_0] = var_2;
|
|
}
|
|
|
|
generic_style_setdamage( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level._explosion_iblastradius[var_0] = var_1;
|
|
level._explosion_idamagemin[var_0] = var_2;
|
|
level._explosion_idamagemax[var_0] = var_3;
|
|
}
|
|
|
|
generic_style_setquake( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level._explosion_fquakepower[var_0] = var_1;
|
|
level._explosion_iquaketime[var_0] = var_2;
|
|
level._explosion_iquakeradius[var_0] = var_3;
|
|
}
|
|
|
|
generic_style( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_7 = -1;
|
|
var_8 = var_5;
|
|
var_9 = var_4;
|
|
generic_style_setradius( var_0, 300, 2200 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 7;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = 0;
|
|
|
|
if ( isdefined( level.explosion_stopnotify ) && isdefined( level.explosion_stopnotify[var_0] ) )
|
|
level endon( level.explosion_stopnotify[var_0] );
|
|
|
|
if ( !isdefined( level.bstopbarrage ) || !isdefined( level.bstopbarrage[var_0] ) )
|
|
level.bstopbarrage[var_0] = 0;
|
|
|
|
var_10 = getentarray( var_0, "targetname" );
|
|
|
|
for ( var_11 = 0; var_11 < var_10.size; var_11++ )
|
|
{
|
|
if ( isdefined( var_10[var_11].target ) && !var_6 )
|
|
var_10[var_11] setup_mortar_terrain();
|
|
}
|
|
|
|
if ( isdefined( level.explosion_startnotify ) && isdefined( level.explosion_startnotify[var_0] ) )
|
|
level waittill( level.explosion_startnotify[var_0] );
|
|
|
|
for (;;)
|
|
{
|
|
while ( !level.bstopbarrage[var_0] )
|
|
{
|
|
for ( var_12 = 0; var_12 < var_2; var_12++ )
|
|
{
|
|
if ( !isdefined( var_5 ) )
|
|
var_8 = level._explosion_imaxrange[var_0];
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_9 = level._explosion_iminrange[var_0];
|
|
|
|
var_13 = randomint( var_10.size );
|
|
|
|
for ( var_11 = 0; var_11 < var_10.size; var_11++ )
|
|
{
|
|
var_14 = ( var_11 + var_13 ) % var_10.size;
|
|
var_15 = distance( level.player getorigin(), var_10[var_14].origin );
|
|
|
|
if ( var_15 < var_8 && var_15 > var_9 && var_14 != var_7 )
|
|
{
|
|
var_10[var_14].iminrange = var_9;
|
|
var_10[var_14] explosion_activate( var_0 );
|
|
var_7 = var_14;
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_7 = -1;
|
|
|
|
if ( isdefined( level.explosion_delay ) && isdefined( level.explosion_delay[var_0] ) )
|
|
{
|
|
wait( level.explosion_delay[var_0] );
|
|
continue;
|
|
}
|
|
|
|
wait( randomfloat( var_1 ) + randomfloat( var_1 ) );
|
|
}
|
|
|
|
if ( isdefined( level.explosion_barrage_delay ) && isdefined( level.explosion_barrage_delay[var_0] ) )
|
|
{
|
|
wait( level.explosion_barrage_delay[var_0] );
|
|
continue;
|
|
}
|
|
|
|
wait( randomfloat( var_3 ) + randomfloat( var_3 ) );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
explosion_activate( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
generic_style_setdamage( var_0, 256, 25, 400 );
|
|
generic_style_setquake( var_0, 0.15, 2, 850 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = level._explosion_iblastradius[var_0];
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = level._explosion_idamagemin[var_0];
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = level._explosion_idamagemax[var_0];
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = level._explosion_fquakepower[var_0];
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = level._explosion_iquaketime[var_0];
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = level._explosion_iquakeradius[var_0];
|
|
|
|
explosion_incoming( var_0 );
|
|
level notify( "explosion", var_0 );
|
|
var_7 = 1;
|
|
var_8 = undefined;
|
|
var_9 = self;
|
|
|
|
if ( isdefined( self.iminrange ) && distance( level.player.origin, self.origin ) < self.iminrange )
|
|
{
|
|
var_10 = getentarray( var_0, "targetname" );
|
|
|
|
for ( var_11 = 0; var_11 < var_10.size; var_11++ )
|
|
{
|
|
var_12 = distance( level.player getorigin(), var_10[var_11].origin );
|
|
|
|
if ( var_12 > self.iminrange )
|
|
{
|
|
if ( !isdefined( var_8 ) || var_12 < var_8 )
|
|
{
|
|
var_8 = var_12;
|
|
var_9 = var_10[var_11];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_8 ) )
|
|
var_7 = 0;
|
|
}
|
|
|
|
if ( var_7 )
|
|
radiusdamage( var_9.origin, var_1, var_3, var_2 );
|
|
|
|
if ( isdefined( var_9.has_terrain ) && var_9.has_terrain == 1 && isdefined( var_9.terrain ) )
|
|
{
|
|
for ( var_13 = 0; var_13 < var_9.terrain.size; var_13++ )
|
|
{
|
|
if ( isdefined( var_9.terrain[var_13] ) )
|
|
var_9.terrain[var_13] delete();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_9.hidden_terrain ) )
|
|
var_9.hidden_terrain show();
|
|
|
|
var_9.has_terrain = 0;
|
|
var_9 explosion_boom( var_0, var_4, var_5, var_6 );
|
|
}
|
|
|
|
explosion_boom( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0.15;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 2;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 850;
|
|
|
|
explosion_sound( var_0 );
|
|
var_4 = self.origin;
|
|
playfx( level._effect[var_0], var_4 );
|
|
earthquake( var_1, var_2, var_4, var_3 );
|
|
|
|
if ( distance( level.player.origin, var_4 ) > 300 )
|
|
return;
|
|
|
|
level.playermortar = 1;
|
|
level notify( "shell shock player", var_2 * 4 );
|
|
maps\_shellshock::main( var_2 * 4 );
|
|
}
|
|
|
|
explosion_sound( var_0 )
|
|
{
|
|
if ( !isdefined( level._explosion_last_sound ) )
|
|
level._explosion_last_sound = 0;
|
|
|
|
for ( var_1 = randomint( 3 ) + 1; var_1 == level._explosion_last_sound; var_1 = randomint( 3 ) + 1 )
|
|
{
|
|
|
|
}
|
|
|
|
level._explosion_last_sound = var_1;
|
|
|
|
if ( level._effecttype[var_0] == "mortar" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_explosion1" );
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_explosion2" );
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_explosion3" );
|
|
break;
|
|
}
|
|
}
|
|
else if ( level._effecttype[var_0] == "artillery" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_explosion4" );
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_explosion5" );
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_explosion1" );
|
|
break;
|
|
}
|
|
}
|
|
else if ( level._effecttype[var_0] == "bomb" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_explosion1" );
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_explosion4" );
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_explosion5" );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
explosion_incoming( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level._explosion_last_incoming ) )
|
|
level._explosion_last_incoming = -1;
|
|
|
|
for ( var_1 = randomint( 4 ) + 1; var_1 == level._explosion_last_incoming; var_1 = randomint( 4 ) + 1 )
|
|
{
|
|
|
|
}
|
|
|
|
level._explosion_last_incoming = var_1;
|
|
|
|
if ( level._effecttype[var_0] == "mortar" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_incoming1" );
|
|
wait 0.82;
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_incoming2" );
|
|
wait 0.42;
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_incoming3" );
|
|
wait 1.3;
|
|
break;
|
|
default:
|
|
wait 1.75;
|
|
break;
|
|
}
|
|
}
|
|
else if ( level._effecttype[var_0] == "artillery" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_incoming4" );
|
|
wait 0.82;
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_incoming4_new" );
|
|
wait 0.42;
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_incoming1_new" );
|
|
wait 1.3;
|
|
break;
|
|
default:
|
|
wait 1.75;
|
|
break;
|
|
}
|
|
}
|
|
else if ( level._effecttype[var_0] == "bomb" )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self playsound( "mortar_incoming2_new" );
|
|
wait 1.75;
|
|
break;
|
|
case 2:
|
|
self playsound( "mortar_incoming3_new" );
|
|
wait 1.75;
|
|
break;
|
|
case 3:
|
|
self playsound( "mortar_incoming4_new" );
|
|
wait 1.75;
|
|
break;
|
|
default:
|
|
wait 1.75;
|
|
break;
|
|
}
|
|
}
|
|
}
|