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

334 lines
9.3 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\mp_chasm_precache::main();
maps\createart\mp_chasm_art::main();
maps\mp\mp_chasm_fx::main();
level thread maps\mp\_movers::main();
maps\mp\_movers::script_mover_add_parameters( "falling_elevator", "delay_till_trigger=1" );
maps\mp\_movers::script_mover_add_parameters( "falling_elevator_cables", "delay_till_trigger=1" );
maps\mp\_movers::script_mover_add_parameters( "elevator_drop_1", "move_time=.7;accel_time=.7" );
maps\mp\_movers::script_mover_add_parameters( "elevator_drop_2", "move_time=1.2;accel_time=1.2;name=elevator_end" );
maps\mp\_load::main();
thread maps\mp\_fx::func_glass_handler();
maps\mp\_compass::setupminimap( "compass_map_mp_chasm" );
setdvar( "r_lightGridEnableTweaks", 1 );
setdvar( "r_lightGridIntensity", 1.33 );
maps\mp\_utility::setdvar_cg_ng( "r_specularColorScale", 2.5, 5 );
game["attackers"] = "allies";
game["defenders"] = "axis";
if ( level.gametype == "sd" || level.gametype == "sr" )
{
level.srkillcamoverrideposition = [];
level.srkillcamoverrideposition["_b"] = ( 384, 278, 1716 );
}
level thread falling_elevator();
level thread setupbus();
level thread initextracollision();
}
initextracollision()
{
var_0 = spawn( "trigger_radius", ( -2304, -3072, 512 ), 0, 1024, 2048 );
var_0.radius = 1024;
var_0.height = 2048;
var_0.angles = ( 0, 0, 0 );
var_0.targetname = "remote_heli_range";
var_1 = getent( "clip256x256x8", "targetname" );
var_2 = spawn( "script_model", ( -1216, 2112, 1376 ) );
var_2.angles = ( 0, 0, 0 );
var_2 clonebrushmodeltoscriptmodel( var_1 );
var_3 = spawn( "script_model", ( -2304, -936, 1492 ) );
var_3 setmodel( "placeable_barrier" );
var_3.angles = ( 0, 0, 12 );
var_4 = getent( "clip32x32x32", "targetname" );
var_5 = spawn( "script_model", ( -1438, -1424, 1030 ) );
var_5.angles = ( 0, 0, 0 );
var_5 clonebrushmodeltoscriptmodel( var_4 );
}
setupbus()
{
var_0 = getent( "falling_bus", "targetname" );
var_1 = getent( "bus_collision", "targetname" );
var_0.collision = var_1;
var_2 = getentarray( "falling_bus_parts", "targetname" );
foreach ( var_4 in var_2 )
var_4 linkto( var_0 );
var_0.unresolved_collision_func = maps\mp\_movers::unresolved_collision_void;
var_0 thread explosive_damage_watch( var_0, "bus_start_fall" );
if ( isdefined( var_1 ) )
{
var_1 linkto( var_0 );
var_0 thread explosive_damage_watch( var_1, "bus_start_fall" );
}
var_6 = var_0;
var_6.keyframes = [];
var_7 = var_6.target;
var_8 = 0;
while ( isdefined( var_7 ) )
{
var_9 = common_scripts\utility::getstruct( var_7, "targetname" );
if ( isdefined( var_9 ) )
{
var_6.keyframes[var_8] = var_9;
var_8++;
var_7 = var_9.target;
continue;
}
break;
}
if ( var_6.keyframes.size > 2 )
{
var_6.keyframes[1].script_duration = 0.75;
var_6.keyframes[1].script_accel = 0.75;
var_6.keyframes[1].script_decel = 0;
var_6.keyframes[1].shakemag = 0.5;
var_6.keyframes[1].shakeduration = 1.5;
var_6.keyframes[1].shakedistance = 1000;
var_6.keyframes[2].script_duration = 4.0;
var_6.keyframes[2].script_accel = 0.0;
var_6.keyframes[2].script_decel = 0;
}
var_0.pathblocker = getent( "pathBlocker", "targetname" );
wait 0.05;
var_0.pathblocker elevatorclearpath();
var_0 thread moverdomove( "bus_start_fall" );
}
moverdomove( var_0 )
{
level endon( "game_ended" );
self waittill( var_0, var_1 );
self playsound( "scn_bus_groan" );
self.pathblocker elevatorblockpath();
busslidingeffect();
self.collision killlinkedentities( var_1 );
for ( var_2 = 1; var_2 < self.keyframes.size; var_2++ )
{
var_3 = self.keyframes[var_2];
self moveto( var_3.origin, var_3.script_duration, var_3.script_accel, var_3.script_decel );
self rotateto( var_3.angles, var_3.script_duration, var_3.script_accel, var_3.script_decel );
if ( isdefined( var_3.shakemag ) )
earthquake( var_3.shakemag, var_3.shakeduration, self.origin, var_3.shakedistance );
self waittill( "movedone" );
}
var_4 = self.origin + ( 0, 0, 2000 );
earthquake( 0.25, 0.5, var_4, 3000 );
stopfxontag( common_scripts\utility::getfx( "vfx_bus_fall_dust" ), self.busdust, "tag_origin" );
self.busdust delete();
playsoundatpos( var_4, "scn_bus_crash" );
}
busslidingeffect()
{
var_0 = getent( "busDustEffect2", "targetname" );
var_0 setmodel( "tag_origin" );
var_0 linkto( self );
playfxontag( common_scripts\utility::getfx( "vfx_bus_fall_dust" ), var_0, "tag_origin" );
self.busdust = var_0;
var_1 = getent( "busDustEffect", "targetname" );
if ( isdefined( var_1 ) )
{
playfx( common_scripts\utility::getfx( "vfx_bus_scrape_dust" ), var_1.origin, anglestoforward( var_1.angles ) );
var_1 playsound( "scn_bus_slide" );
}
}
killlinkedentities( var_0 )
{
var_1 = self getlinkedchildren();
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.owner ) )
var_3 dodamage( 1000, self.origin, var_0, self, "MOD_CRUSH" );
}
}
falling_elevator()
{
var_0 = getent( "falling_elevator", "targetname" );
var_1 = getent( "falling_elevator_cables", "targetname" );
var_2 = getent( "elevatorBlockPaths1", "targetname" );
var_2 elevatorblockpath();
if ( !isdefined( var_0 ) || !isdefined( var_1 ) )
return;
while ( !isdefined( var_0.linked_ents ) )
wait 0.05;
var_0.state = 1;
var_0 thread falling_elevator_cables( var_1 );
var_0 thread explosive_damage_watch( var_0, "next_stage" );
foreach ( var_4 in var_0.linked_ents )
var_0 thread explosive_damage_watch( var_4, "next_stage" );
var_6 = var_1.origin;
wait 0.05;
var_7 = getent( "elevatorBlockPaths2", "targetname" );
var_7 elevatorclearpath();
var_7 setcontents( 0 );
var_0.dusteffect = getentarray( "dustEffect", "targetname" );
foreach ( var_4 in var_0.dusteffect )
var_4 linkto( var_1 );
var_0.sparkeffect = getentarray( "sparkEffect", "targetname" );
foreach ( var_4 in var_0.sparkeffect )
var_4 linkto( var_1 );
for (;;)
{
var_0 waittill( "next_stage", var_12 );
if ( var_0.moving )
continue;
var_0.state++;
var_0 notify( "trigger" );
if ( isdefined( var_1 ) )
var_1 notify( "trigger" );
if ( var_0.state == 2 )
{
var_0 playsoundonmovingent( "scn_elevator_fall_move" );
var_1 notify( "stop_watching_cable" );
var_2 elevatorclearpath();
var_2 setcontents( 0 );
foreach ( var_4 in var_0.dusteffect )
playfx( common_scripts\utility::getfx( "vfx_elevator_fall_dust" ), var_4.origin );
}
else if ( var_0.state == 3 )
{
playsoundatpos( var_6, "scn_elevator_fall_cable_snap" );
var_7 setcontents( 1 );
var_7 elevatorblockpath();
foreach ( var_4 in var_0.sparkeffect )
playfx( common_scripts\utility::getfx( "vfx_spark_drip_child" ), var_4.origin );
var_0 killlinkedentities( var_12 );
}
var_0 waittill( "move_end" );
if ( var_0.state == 2 )
{
playsoundatpos( var_6, "scn_elevator_fall_cable_stress" );
playfx( common_scripts\utility::getfx( "vfx_elevator_shaft_dust" ), var_0.origin );
earthquake( 0.5, 1.5, var_0.origin, 1000 );
continue;
}
if ( var_0.state == 3 )
{
var_0 playsoundonmovingent( "scn_elevator_fall_crash" );
earthquake( 0.75, 1.5, var_0.origin, 1000 );
var_2 setcontents( 1 );
var_2 elevatorblockpath();
}
}
}
explosive_damage_watch( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "explosive_damage";
var_0 setcandamage( 1 );
for (;;)
{
var_0.health = 1000000;
var_0 waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
if ( !is_explosive( var_6 ) )
continue;
self notify( var_1, var_3 );
}
}
falling_elevator_cables( var_0 )
{
var_0 endon( "stop_watching_cable" );
var_1 = 1000000;
var_0 setcandamage( 1 );
var_0.health = var_1;
var_0.fake_health = 50;
for (;;)
{
var_0 waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
if ( var_0.moving || self.state == 2 && !is_explosive( var_6 ) )
{
var_0.health = var_0.health + var_2;
continue;
}
if ( var_0.health > var_1 - var_0.fake_health )
continue;
self notify( "next_stage" );
break;
}
}
is_explosive( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
var_0 = tolower( var_0 );
switch ( var_0 )
{
case "splash":
case "mod_explosive":
case "mod_projectile_splash":
case "mod_grenade_splash":
return 1;
default:
return 0;
}
return 0;
}
elevatorclearpath()
{
self connectpaths();
self hide();
}
elevatorblockpath()
{
self show();
self disconnectpaths();
}