mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
383 lines
10 KiB
Plaintext
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();
|
|
}
|
|
}
|
|
}
|
|
|