Files
Recompilable-gscs-for-BO2-z…/patch_mp/maps/mp/mp_studio.gsc
2020-06-13 01:37:00 -07:00

383 lines
10 KiB
Plaintext

//checked includes changed to match cerberus output
#include maps/mp/_tacticalinsertion;
#include maps/mp/gametypes/_weaponobjects;
#include maps/mp/mp_studio_amb;
#include maps/mp/_compass;
#include maps/mp/_load;
#include maps/mp/mp_studio_fx;
#include maps/mp/_utility;
main() //checked matches cerberus output
{
level.levelspawndvars = ::levelspawndvars;
maps/mp/mp_studio_fx::main();
maps/mp/_load::main();
maps/mp/_compass::setupminimap( "compass_map_mp_studio" );
maps/mp/mp_studio_amb::main();
setdvar( "compassmaxrange", "2100" );
game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A";
game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B";
game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C";
game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D";
game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E";
game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A";
game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B";
game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C";
game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D";
game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E";
level.destructible_callbacks[ "remove_streamers" ] = ::death_streamer_think;
alleytrigger = getent( "alleyTrigger", "targetname" );
windowtrigger = getent( "triggerwindowTarget", "targetname" );
target7 = getent( "trailerTarget_Window", "targetname" );
target8 = getent( "alleyTarget_Cover", "targetname" );
target9 = getent( "alleyTarget_Path", "targetname" );
targetlight1_off = getent( "steelBuildingTargetLight1_off", "targetname" );
targetlight1_on = getent( "steelBuildingTargetLight1_on", "targetname" );
targetlight2_off = getent( "steelBuildingTargetLight2_off", "targetname" );
targetlight2_on = getent( "steelBuildingTargetLight2_on", "targetname" );
level.const_fx_exploder_red_light_1 = 1001;
level.const_fx_exploder_red_light_2 = 1002;
speaker1 = getent( "loudspeaker1", "targetname" );
speaker2 = getent( "loudspeaker2", "targetname" );
targetlight1_on hide();
targetlight2_on hide();
target8 setcandamage( 1 );
target9 setcandamage( 1 );
target8 thread damagetarget( 2 );
target9 thread damagetarget( 2 );
target7 thread movetarget( 7, ( 57, 23, 0 ), 3 );
target8 thread movetarget( 1, 240, 10 );
target9 thread movetarget( 1, 130, 8,6 );
alleytrigger thread triggercheck( target9 );
windowtrigger thread triggercheck( target7 );
}
levelspawndvars( reset_dvars ) //checked matches cerberus output
{
ss = level.spawnsystem;
ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "1900", reset_dvars );
}
triggercheck( target ) //checked changed to match cerberus output
{
self endon( "game_ended" );
while ( 1 )
{
self waittill( "trigger", player );
distance = distance( target.origin, self.origin );
if ( distance <= 90 )
{
target notify( "targetStopMoving" );
while ( isDefined( player ) && player istouching( self ) && distance <= 90 )
{
if ( distancesquared( target.origin, target.railpoints[ 0 ] ) < distancesquared( player.origin, target.railpoints[ 0 ] ) )
{
target.preferrednextpos = 0;
}
else
{
target.preferrednextpos = 1;
}
wait 0.25;
}
}
}
}
damagetarget( dir ) //checked changed to match cerberus output
{
self endon( "game_ended" );
while ( 1 )
{
self waittill( "damage", damage, attacker, direction );
switch( dir )
{
case 1:
self rotateroll( self.angles[ 1 ] + 90, 0,1 );
wait 0.2;
self rotateroll( self.angles[ 1 ] - 90, 0,1 );
wait 0.2;
self playsound( "amb_target_flip" );
break;
case 2:
rotation = 1;
if ( isDefined( attacker ) && isplayer( attacker ) )
{
yaw = get2dyaw( attacker.origin, self.origin );
if ( attacker.angles[ 1 ] > yaw )
{
rotation = -1;
}
}
self rotateyaw( self.angles[ 2 ] + ( 180 * rotation ), 0,3 );
self playsound( "amb_target_twirl" );
self waittill( "rotatedone" );
break;
case 3:
self rotatepitch( self.angles[ 1 ] + 90, 0,1 );
wait 0.2;
self rotatepitch( self.angles[ 1 ] - 90, 0,1 );
wait 0.2;
self playsound( "amb_target_flip" );
break;
case 4:
self rotateroll( self.angles[ 1 ] - 90, 0,1 );
wait 0.2;
self rotateroll( self.angles[ 1 ] + 90, 0,1 );
wait 0.2;
self playsound( "amb_target_flip" );
break;
case 5:
self rotatepitch( self.angles[ 1 ] - 90, 0,1 );
wait 0.2;
self rotatepitch( self.angles[ 1 ] + 90, 0,1 );
wait 0.2;
self playsound( "amb_target_flip" );
break;
}
}
}
damagetargetlights( light_on, light_off, speaker, alias, exploderhandle ) //checked matches cerberus output
{
self endon( "game_ended" );
while ( 1 )
{
self waittill( "damage" );
speaker playsound( alias );
exploder( exploderhandle );
light_off hide();
light_on show();
wait 0.5;
exploder_stop( exploderhandle );
light_off show();
light_on hide();
}
}
movetarget( dir, dis, speed ) //checked matches cerberus output
{
self endon( "game_ended" );
keepmoving = 1;
self thread movement_process();
startpos = self.origin;
farpos = self.origin;
sound = spawn( "script_origin", self.origin );
sound linkto( self );
sound playloopsound( "amb_target_chain" );
switch( dir )
{
case 1:
farpos = self.origin + ( 0, dis, 0 );
break;
case 2:
farpos = self.origin - ( 0, dis, 0 );
break;
case 3:
farpos = self.origin + ( dis, 0, 0 );
break;
case 4:
farpos = self.origin - ( dis, 0, 0 );
break;
case 5:
farpos = self.origin + ( 0, 0, dis );
break;
case 6:
farpos = self.origin - ( 0, 0, dis );
break;
case 7:
farpos = self.origin - dis;
break;
}
self.railpoints = [];
self.railpoints[ 0 ] = startpos;
self.railpoints[ 1 ] = farpos;
self.preferrednextpos = 1;
self.playertrigger = 0;
while ( 1 )
{
nextpos = self.railpoints[ self.preferrednextpos ];
if ( self.preferrednextpos == 0 )
{
self.preferrednextpos = 1;
}
else
{
self.preferrednextpos = 0;
}
self moveto( nextpos, speed );
self waittill_either( "movedone", "targetStopMoving" );
self playsound( "amb_target_stop" );
}
}
rotatetarget( dir, deg, speed, pausetime ) //checked changed to match cerberus output
{
self endon( "game_ended" );
while ( 1 )
{
switch( dir )
{
case 1:
self rotateyaw( self.angles[ 2 ] + deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
self rotateyaw( self.angles[ 2 ] - deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
break;
case 2:
self rotateyaw( self.angles[ 2 ] - deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
self rotateyaw( self.angles[ 2 ] + deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
break;
case 3:
self rotateroll( self.angles[ 0 ] + deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
self rotateroll( self.angles[ 0 ] - deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
break;
case 4:
self rotateroll( self.angles[ 0 ] - deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
self rotateroll( self.angles[ 0 ] + deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
break;
case 5:
self rotateroll( self.angles[ 1 ] + deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
self rotateroll( self.angles[ 1 ] - deg, speed );
self playsound( "amb_target_rotate" );
wait pausetime;
break;
case 6:
self rotatepitch( self.angles[ 1 ] - deg, speed );
wait pausetime;
self rotatepitch( self.angles[ 1 ] + deg, speed );
wait pausetime;
break;
case 7:
self rotateto( ( self.angles[ 0 ] + 90, self.angles[ 1 ] - 90, self.angles[ 2 ] + 45 ), speed );
wait pausetime;
self rotateto( ( self.angles[ 0 ] - 90, self.angles[ 1 ] + 90, self.angles[ 2 ] - 45 ), speed );
wait pausetime;
}
}
}
movement_process() //checked partially changed to match cerberus output see info.md
{
for ( ;; )
{
entities = getdamageableentarray( self.origin, 50 );
i = 0;
while ( i < entities.size )
{
if ( isDefined( entity.targetname ) || entity.targetname == "alleyTarget_Cover" && entity.targetname == "alleyTarget_Path" )
{
i++;
continue;
}
if ( isplayer( entity ) )
{
i++;
continue;
}
if ( !entity istouching( self ) )
{
i++;
continue;
}
if ( isDefined( entity.classname ) && entity.classname == "grenade" )
{
if ( !isDefined( entity.name ) )
{
i++;
continue;
}
if ( !isDefined( entity.owner ) )
{
i++;
continue;
}
if ( entity.name == "satchel_charge_mp" )
{
if ( entity.origin[ 2 ] > ( self.origin[ 2 ] + 5 ) )
{
i++;
continue;
}
}
watcher = entity.owner getwatcherforweapon( entity.name );
if ( !isDefined( watcher ) )
{
i++;
continue;
}
watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( entity, 0, undefined );
}
if ( isDefined( entity.targetname ) )
{
if ( entity.targetname == "riotshield_mp" )
{
entity dodamage( 1, self.origin + ( 0, 0, 1 ), self, self, 0, "MOD_CRUSH" );
i++;
continue;
}
}
if ( isDefined( entity.model ) && entity.model == "t6_wpn_tac_insert_world" )
{
entity thread maps/mp/_tacticalinsertion::fizzle();
}
i++;
}
wait 0.25;
}
}
getwatcherforweapon( weapname ) //checked partially changed to match cerberus output see info.md
{
if ( !isDefined( self ) )
{
return undefined;
}
if ( !isplayer( self ) )
{
return undefined;
}
i = 0;
while ( i < self.weaponobjectwatcherarray.size )
{
if ( self.weaponobjectwatcherarray[ i ].weapon != weapname )
{
i++;
continue;
}
return self.weaponobjectwatcherarray[ i ];
i++;
}
return undefined;
}
death_streamer_think( notifytype, attacker ) //checked changed to match cerberus output
{
streamers = getentarray( "airconditioner_streamer", "targetname" );
for ( i = 0; i < streamers.size; i++ )
{
streamer = streamers[ i ];
if ( distancesquared( streamer.origin, self.origin ) < 2500 )
{
streamer delete();
}
}
}