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

654 lines
17 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\mp_pirate_precache::main();
maps\createart\mp_pirate_art::main();
maps\mp\mp_pirate_fx::main();
maps\mp\_load::main();
maps\mp\_compass::setupminimap( "compass_map_mp_pirate" );
setdvar( "r_lightGridEnableTweaks", 1 );
setdvar( "r_lightGridIntensity", 1.33 );
maps\mp\_utility::setdvar_cg_ng( "r_specularColorScale", 2.8, 14 );
maps\mp\_utility::setdvar_cg_ng( "sm_sunShadowScale", 0.5, 1 );
game["attackers"] = "allies";
game["defenders"] = "axis";
game["allies_outfit"] = "urban";
game["axis_outfit"] = "woodland";
thread setuplevelkillstreak();
thread maps\mp\_dlcalienegg::setupeggformap( "alienEasterEgg" );
var_0 = setupdestructible( "destruction_tower" );
var_0 thread towercollapse( 9 );
var_1 = setupdestructible( "destruction_window" );
var_1 thread windowcollapse( 5 );
thread bellssetup( "churchbell" );
if ( maps\mp\_utility::is_gen4() )
{
game["thermal_vision"] = "thermal_mp";
setthermalbodymaterial( "thermalbody_snowlevel" );
visionsetthermal( game["thermal_vision"] );
}
thread setupconvos();
}
setuplevelkillstreak()
{
level._effect["cannon_impact"] = loadfx( "vfx/moments/mp_pirate/vfx_exp_can_impact" );
level._effect["random_mortars_trail"] = loadfx( "vfx/moments/mp_pirate/vfx_cannon_trail" );
level._effect["cannon_muzzleflash"] = loadfx( "vfx/moments/mp_pirate/vfx_cannon_blast" );
level._effect["ship_wake"] = loadfx( "vfx/moments/mp_pirate/vfx_ghost_boat_wake" );
var_0 = spawnstruct();
var_0.crateweight = 85;
var_0.cratehint = &"MP_PIRATE_CANNONS_USE";
var_0.debugname = "Cannon Barrage";
var_0.id = "pirate_cannons";
var_0.weaponname = "warhawk_mortar_mp";
var_0.splashname = "used_pirate_cannons";
var_0.sourceents = "ship_cannons";
var_0.targetstructs = "cannon_target";
var_0.launchdelay = 12;
var_0.projectileperloop = 12;
var_0.delaybetweenvolleys = 6;
var_0.model = "pirateship_cannon_ball_iw6";
var_0.launchsfxarray = [ "cannon_fire_1", "cannon_fire_2", "cannon_fire_3", "cannon_fire_4", "cannon_fire_5", "cannon_fire_6", "cannon_fire_7", "cannon_fire_8", "cannon_fire_9", "cannon_fire_10" ];
var_0.launchsfxstartid = 0;
var_0.launchvfx = "cannon_muzzleflash";
var_0.launchdelaymin = 1.0;
var_0.launchdelaymax = 1.5;
var_0.launchairtimemin = 2;
var_0.launchairtimemax = 3;
var_0.strikeduration = 35;
var_0.incomingsfx = "cannon_ball_incoming";
var_0.trailvfx = "random_mortars_trail";
var_0.impactsfx = "cannon_ball_impact";
var_0.impactvfx = "cannon_impact";
shipsetup( "cannon_ship" );
maps\mp\killstreaks\_mortarstrike::createmortar( var_0 );
level.mapcustomkillstreakfunc = ::customkillstreakfunc;
level.mapcustomcratefunc = ::customcratefunc;
level.mapcustombotkillstreakfunc = ::custombotkillstreakfunc;
maps\mp\mp_pirate_ghost::init();
}
customkillstreakfunc()
{
maps\mp\killstreaks\_mortarstrike::mortarcustomkillstreakfunc();
level.killstreakfuncs["pirate_cannons"] = ::tryusepirateship;
maps\mp\mp_pirate_ghost::customkillstreakfunc();
}
customcratefunc()
{
maps\mp\killstreaks\_mortarstrike::mortarcustomcratefunc();
maps\mp\mp_pirate_ghost::customcratefunc();
}
custombotkillstreakfunc()
{
maps\mp\killstreaks\_mortarstrike::mortarcustombotkillstreakfunc();
maps\mp\mp_pirate_ghost::cusombotkillstreakfunc();
}
setupdestructible( var_0 )
{
var_1 = getentarray( var_0 + "_before", "targetname" );
var_2 = getentarray( var_0 + "_after", "targetname" );
foreach ( var_4 in var_2 )
var_4 clearpath();
var_6 = getentarray( var_0 + "_anim", "targetname" );
foreach ( var_8 in var_6 )
var_8 hide();
var_10 = spawnstruct();
var_10.postcollapse = var_2;
var_10.precollapse = var_1;
var_10.animmodels = var_6;
return var_10;
}
windowcollapse( var_0 )
{
level waittill( "mortar_killstreak_start" );
if ( var_0 > 0.775 )
{
var_0 = randomfloatrange( var_0, var_0 + 5 );
wait( var_0 - 0.775 );
}
common_scripts\utility::exploder( 2 );
wait 0.775;
foreach ( var_2 in self.precollapse )
var_2 clearpath();
var_4 = 4.0;
foreach ( var_6 in self.animmodels )
{
var_6 show();
var_7 = var_6.script_noteworthy;
if ( isdefined( var_7 ) )
var_6 scriptmodelplayanim( var_7 );
}
wait 1.5;
var_9 = self.postcollapse[0].origin;
foreach ( var_11 in self.postcollapse )
{
if ( isdefined( var_11.clip ) )
{
var_9 = var_11.clip.origin;
break;
}
}
earthquake( 0.1, 0.5, var_9, 150 );
wait( var_4 - 1.5 );
foreach ( var_14 in self.postcollapse )
var_14 blockpath();
foreach ( var_6 in self.animmodels )
var_6 hide();
}
towercollapse( var_0 )
{
level waittill( "mortar_killstreak_start" );
if ( var_0 > 0 )
{
var_0 = randomfloatrange( var_0, var_0 + 5 );
wait( var_0 - 0 );
}
common_scripts\utility::exploder( 1 );
foreach ( var_2 in self.precollapse )
var_2 clearpath();
var_4 = 9;
foreach ( var_6 in self.animmodels )
{
var_6 show();
var_7 = var_6.script_noteworthy;
if ( isdefined( var_7 ) )
var_6 scriptmodelplayanim( var_7 );
}
playsoundatpos( self.precollapse[0].origin, "scn_pirate_tower_collapse" );
wait 1.5;
var_9 = self.postcollapse[0].origin;
foreach ( var_11 in self.postcollapse )
{
if ( isdefined( var_11.clip ) )
{
var_9 = var_11.clip.origin;
break;
}
}
earthquake( 0.25, 0.5, var_9, 300 );
wait( var_4 - 1.5 );
foreach ( var_6 in self.animmodels )
var_6 hide();
foreach ( var_16 in self.postcollapse )
var_16 blockpath();
}
playrumble( var_0 )
{
foreach ( var_2 in level.players )
var_2 playrumbleonentity( var_0 );
}
clearpath()
{
self hide();
self notsolid();
if ( isdefined( self.target ) )
{
var_0 = getent( self.target, "targetname" );
self.clip = var_0;
var_0 connectpaths();
var_0 notsolid();
var_0 hide();
}
}
blockpath()
{
self show();
self solid();
if ( isdefined( self.clip ) )
{
self.clip show();
self.clip solid();
self.clip disconnectpaths();
}
}
crushallobjects( var_0, var_1 )
{
var_2 = var_1 * var_1;
crushobjects( var_0, var_2, "death", level.turrets );
crushobjects( var_0, var_2, "death", level.placedims );
crushobjects( var_0, var_2, "death", level.uplinks );
crushobjects( var_0, var_2, "detonateExplosive", level.mines );
foreach ( var_4 in level.deployable_box )
crushobjects( var_0, var_2, "death", var_4 );
}
crushobjects( var_0, var_1, var_2, var_3 )
{
foreach ( var_5 in var_3 )
{
if ( distancesquared( var_0, var_5.origin ) < var_1 )
var_5 notify( var_2 );
}
}
tryusepirateship( var_0, var_1 )
{
if ( maps\mp\killstreaks\_mortarstrike::tryusemortars( var_0, var_1 ) )
{
thread shiprun( "cannon_ship", "shipPathStart" );
return 1;
}
return 0;
}
shiprun( var_0, var_1 )
{
var_2 = getent( var_0, "targetname" );
var_3 = getentarray( "ship_bits", "targetname" );
foreach ( var_5 in var_3 )
{
var_5 show();
var_5 linkto( var_2 );
}
var_2 thread shipbarrageplaymusic();
var_2 thread shipvo();
var_7 = common_scripts\utility::getstruct( var_1, "targetname" );
var_2.origin = var_7.origin;
var_2.angles = var_7.angles;
playfxontag( common_scripts\utility::getfx( "ship_wake" ), var_2.waketag, "tag_origin" );
for ( var_8 = var_7.target; isdefined( var_8 ); var_8 = var_2 shipmove( var_8, 300 ) )
{
}
var_2 stopsounds();
stopfxontag( common_scripts\utility::getfx( "ship_wake" ), var_2.waketag, "tag_origin" );
var_3 = getentarray( "ship_bits", "targetname" );
foreach ( var_5 in var_3 )
var_5 hide();
}
shipsetup( var_0 )
{
var_1 = getent( var_0, "targetname" );
var_2 = anglestoforward( var_1.angles );
var_3 = 350 * anglestoright( var_1.angles );
var_4 = getentarray( "ship_bits", "targetname" );
var_5 = var_4[0];
for ( var_6 = 0; var_6 < 5; var_6++ )
{
var_7 = "tag_cannon_" + ( var_6 + 1 );
var_8 = spawn( "script_model", var_5 gettagorigin( var_7 ) );
var_8.angles = var_5 gettagangles( var_7 );
var_8 setmodel( "tag_origin" );
var_8 linkto( var_1 );
var_8.targetname = "ship_cannons";
}
var_1.cannons = var_1 getlinkedchildren();
var_9 = spawn( "script_model", var_5 gettagorigin( "tag_wake" ) + ( 0, 0, 85 ) );
var_9.angles = var_1.angles + ( -90, 0, 0 );
var_9 setmodel( "tag_origin" );
var_9 linkto( var_1 );
var_1.waketag = var_9;
foreach ( var_11 in var_4 )
var_11 hide();
}
shipmove( var_0, var_1 )
{
var_2 = common_scripts\utility::getstruct( var_0, "targetname" );
if ( isdefined( var_2 ) )
{
if ( !isdefined( var_2.movetime ) )
var_2.movetime = distance2d( var_2.origin, self.origin ) / var_1;
self moveto( var_2.origin, var_2.movetime, 0, 0 );
self rotateto( var_2.angles, var_2.movetime, 0, 0 );
wait( var_2.movetime );
return var_2.target;
}
return undefined;
}
shipbarrageplaymusic()
{
level endon( "game_ended" );
self.waketag playsoundonmovingent( "mus_dead_man_chest_01" );
level waittill( "mortar_killstreak_end" );
self stopsounds();
wait 0.05;
self.waketag playsoundonmovingent( "mus_dead_man_chest_02" );
}
shipvo()
{
wait 7.5;
thread shipvoplaylines();
level waittill( "mortar_volleyFinished" );
wait( randomfloatrange( 3.0, 3.5 ) );
thread shipvoplaylines();
}
shipvoplaylines()
{
thread shipvoplayoneline( "mp_pirate_cpt_attack" );
wait( randomfloatrange( 1.0, 1.5 ) );
if ( randomint( 2 ) == 0 )
{
thread shipvoplayoneline( "mp_pirate_prt1_attack" );
wait( randomfloatrange( 0.5, 1.0 ) );
thread shipvoplayoneline( "mp_pirate_prt2_attack" );
}
else
{
thread shipvoplayoneline( "mp_pirate_prt2_attack" );
wait( randomfloatrange( 0.5, 1.0 ) );
thread shipvoplayoneline( "mp_pirate_prt1_attack" );
}
}
shipvoplayoneline( var_0, var_1 )
{
var_2 = self.cannons[randomint( self.cannons.size )];
var_2 playsoundonmovingent( var_0 );
}
bellssetup( var_0 )
{
var_1 = getentarray( var_0, "targetname" );
if ( var_1.size <= 0 )
return;
common_scripts\utility::array_thread( var_1, ::bellsdetecthit );
}
bellsdetecthit()
{
self setcandamage( 1 );
self.is_swaying = 0;
var_0 = "pir_big_bell";
if ( isdefined( self.script_noteworthy ) && maps\mp\_utility::isstrstart( self.script_noteworthy, "pir_bell_" ) )
var_0 = self.script_noteworthy;
for (;;)
{
self waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
if ( !isdefined( var_2 ) || !isplayer( var_2 ) )
continue;
var_6 = var_2 getcurrentweapon();
if ( var_5 == "MOD_IMPACT" || var_5 == "MOD_PROJECTILE" || var_5 == "MOD_PROJECTILE_SPLASH" || var_5 == "MOD_GRENADE" || var_5 == "MOD_GRENADE_SPLASH" || var_5 == "MOD_MELEE" || isdefined( var_6 ) && weaponclass( var_6 ) == "sniper" )
{
self playsound( var_0 );
if ( !self.is_swaying )
thread bellshitsway( var_2 );
wait 0.5;
}
}
}
bellshitsway( var_0 )
{
level endon( "game_ended" );
var_1 = anglestoright( self.angles );
var_2 = vectornormalize( var_0.origin - self.origin );
var_3 = vectordot( var_1, var_2 ) * 2.0;
if ( var_3 > 0.0 )
var_3 = max( 0.3, var_3 );
else
var_3 = min( -0.3, var_3 );
self.is_swaying = 1;
self rotateroll( 15 * var_3, 1.0, 0, 0.5 );
wait 1;
self rotateroll( -25 * var_3, 2.0, 0.5, 0.5 );
wait 2;
self rotateroll( 15 * var_3, 1.5, 0.5, 0.5 );
wait 1.5;
self rotateroll( -5 * var_3, 1.0, 0.5, 0.5 );
wait 1.0;
self.is_swaying = 0;
}
setupgrog( var_0 )
{
level endon( "game_ended" );
level._effect["pirate_test2"] = loadfx( "fx/fire/molotov_bottle_fire" );
level waittill( "match_ending_soon", var_1 );
var_2 = maps\mp\gametypes\_gamelogic::gettimeremaining() * 0.001 - 30.0;
if ( var_1 == "score" )
{
if ( maps\mp\_utility::gettimelimit() <= 0 )
var_2 = 60;
}
else
var_2 = min( var_2, 30 );
if ( var_2 > 0 )
wait( var_2 );
var_3 = getent( var_0, "targetname" );
if ( isdefined( var_3 ) )
{
var_4 = maps\mp\gametypes\_gameobjects::createuseobject( "neutral", var_3, [ var_3 ], ( 0, 0, 0 ) );
var_4.id = "use";
var_4 maps\mp\gametypes\_gameobjects::setusetime( 4 );
var_4 maps\mp\gametypes\_gameobjects::setusetext( &"MP_PIRATE_GROG_USING" );
var_4 maps\mp\gametypes\_gameobjects::setusehinttext( &"MP_PIRATE_GROG_USE" );
var_4 maps\mp\gametypes\_gameobjects::setvisibleteam( "any" );
var_4 maps\mp\gametypes\_gameobjects::allowuse( "any" );
var_4.onuse = ::grogonuse;
var_4.onbeginuse = ::grogonbeginuse;
var_4.onenduse = ::grogonenduse;
var_4.uses = 3;
}
}
grogonuse( var_0 )
{
if ( !isdefined( var_0.grogtriggered ) )
{
var_0 thread grogupdate();
self.uses--;
if ( self.uses == 0 )
grogmakeunusable();
}
else
var_0 shellshock( "concussion_grenade_mp", 5 );
}
grogonbeginuse( var_0 )
{
}
grogonenduse( var_0, var_1, var_2 )
{
if ( isplayer( var_1 ) )
var_1 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
}
grogmakeunusable()
{
maps\mp\gametypes\_gameobjects::disableobject();
maps\mp\gametypes\_gameobjects::deleteuseobject();
}
grogwaitforuse()
{
level endon( "game_ended" );
for (;;)
{
self waittill( "trigger", var_0 );
var_0 thread grogupdate( self );
}
}
grogupdate( var_0 )
{
level endon( "game_ended" );
self endon( "grogStop" );
if ( isdefined( self.grogtriggered ) )
return;
self.grogtriggered = 1;
if ( !maps\mp\_utility::_hasperk( "specialty_lightweight" ) )
{
self.grogperk = 1;
maps\mp\_utility::giveperk( "specialty_lightweight", 0 );
}
thread grogtimer( 20 );
while ( isdefined( self ) && maps\mp\_utility::isreallyalive( self ) )
{
var_1 = lengthsquared( self getvelocity() );
if ( var_1 > 13225 )
{
if ( !isdefined( self.grogged ) )
{
self.grogged = 1;
playfxontag( common_scripts\utility::getfx( "pirate_test2" ), self, "j_mainroot" );
}
}
else if ( isdefined( self.grogged ) )
grogstopfx();
wait 0.25;
}
grogcleanup();
}
grogcleanup()
{
if ( isdefined( self ) )
{
self.grogtriggered = undefined;
if ( isdefined( self.grogperk ) )
{
self.grogperk = undefined;
maps\mp\_utility::_unsetperk( "specialty_lightweight" );
}
grogstopfx();
}
}
grogtimer( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
self endon( "death" );
wait( var_0 );
self notify( "grogStop" );
grogcleanup();
}
grogstopfx()
{
self.grogged = undefined;
stopfxontag( common_scripts\utility::getfx( "pirate_test2" ), self, "j_mainroot" );
}
setupconvos()
{
level.convolocs = [ "convo_dock_3", "convo_dock_3", "convo_tavern_1", "convo_voodoo_1", "convo_brothel_1" ];
level.convovos = [ "mp_pirate_vo_docked", "mp_pirate_vo_docked", "mp_pirate_vo_tavern", "mp_pirate_vo_voodoo", "mp_pirate_vo_brothel" ];
level endon( "game_ended" );
convoplayone( 60, 120 );
convoplayone( 240, 360 );
convoplayone( 240, 360 );
}
convoplayone( var_0, var_1 )
{
var_2 = randomintrange( var_0, var_1 );
wait( var_2 );
for ( var_3 = randomint( level.convolocs.size ); level.convolocs[var_3] == ""; var_3 = randomint( level.convolocs.size ) )
{
}
var_4 = common_scripts\utility::getstruct( level.convolocs[var_3], "targetname" );
playsoundatpos( var_4.origin, level.convovos[var_3] );
level.convolocs[var_3] = "";
}
jailvo()
{
level endon( "game_ended" );
var_0 = [ "mp_pirate_prs_jail_1", "mp_pirate_prs_jail_2", "mp_pirate_prs_jail_3", "mp_pirate_prs_jail_4", "mp_pirate_prs_jail_5" ];
var_1 = common_scripts\utility::getstruct( "convo_jail_1", "targetname" );
var_2 = spawn( "script_origin", var_1.origin );
for (;;)
{
var_3 = randomfloatrange( 120, 180 );
wait( var_3 );
var_4 = randomint( var_0.size );
var_2 playsound( var_0[var_4] );
}
}