Script:Files:script/maps/quarry.script

From Mod Wiki
Revision as of 10:20, 5 November 2007 by Wizz (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
#define OBJECTIVE_QUARRY_DESTROY_JAMMER        0
#define OBJECTIVE_QUARRY_DELIVER_PODS        1

// Bot Objectives

#define QUARRY_STROGG_DESTROY_JAMMER                0
#define QUARRY_STROGG_SUPPORT_JAMMER                1
#define QUARRY_STROGG_DEPLOY_JAMMER                    2

#define QUARRY_GDF_DEFEND_JAMMER                     3
#define QUARRY_GDF_DEPLOY_JAMMER                    4

#define QUARRY_STROGG_FORWARDSPAWN_1                5
#define QUARRY_GDF_ATTACK_FORWARDSPAWN_1            6
#define QUARRY_GDF_DEFEND_FORWARDSPAWN_1            7
#define QUARRY_STROGG_ATTACK_FORWARDSPAWN_1            8
#define QUARRY_STROGG_DEFEND_FORWARDSPAWN_1            9

#define QUARRY_STROGG_DEPLOY_POD                    10
#define QUARRY_GDF_DEFEND_BASE                        11
#define QUARRY_STROGG_ATTACK_GDF                    12
#define QUARRY_GDF_DEPLOY_BASE                        13
#define QUARRY_STROGG_FINAL_OBJECTIVE                14

#define QUARRY_STROGG_ATTACK_BARRACKS_POD            15 // Cell 1
#define QUARRY_GDF_DEFEND_BARRACKS_POD                16 // Cell 1

#define QUARRY_STROGG_ATTACK_WAREHOUSE_POD            20 // Cell 2
#define    QUARRY_GDF_DEFEND_WAREHOUSE_POD                21 // Cell 2

#define QUARRY_STROGG_ATTACK_OFFICE_POD                25 // Cell 3
#define QUARRY_GDF_DEFEND_OFFICE_POD                26 // Cell 3

#define QUARRY_GDF_CONSTRUCT_TOWER                    27 // Guard Tower
#define QUARRY_STROGG_DESTROY_TOWER                    28

#define QUARRY_CELL_OBJ_1                            35 // Cell 1 Take Action
#define    QUARRY_CELL_OBJ_2                            36 // Cell 2 Take Action
#define QUARRY_CELL_OBJ_3                            37 // Cell 3 Take Action

#include "script/maps/quarry/final.script"

object mapObject_Quarry : mapObject_Default {
    void            preinit();

    void            InitObjectives();
    void            StartFirstObjective(); // MBJ

    void            CompleteObjective( float index, entity p );
    handle            GetObjectiveMessage( float index );

    void            OnTimeLimitHit();
    void            OnJammerDestroyed();
    void            OnPodsDelivered();

    void            OnGuardTower1Built();
    void            OnGuardTower1Destroyed();
    boolean            guardTower1Built;

    void            OnConstructionComplete( entity obj );
    void            OnDestructionComplete( entity obj );

    void            DeliverPodThread();

    void            JammerDestroyThread();

    // ANDREW

    void            ShipExplodeThread();

    vector            GetGDFBasePosition() { return '6220 -12700 2420'; }

    //
    // Spawn masters
    //
    entity            quarryworks_strogg_spawn;
    entity            warehouse_gdf_spawn;
    entity            railyard_capturable_spawn;
    entity            gdf_main_base;
    entity             strogg_main_base;

    //
    // Territories
    //
    entity            gdfBaseTerritory;
    entity            warehouseTerritory;
    entity            quarryworksTerritory;
    entity            gateTerritory;
    entity            stroggBaseTerritory;

    //
    // Objectives
    //
    entity            objective1Arrow1;
    entity            objective1Arrow2;
    entity            objective2Arrow1;
    entity            objective2Arrow2;

    entity            objective1Marker;
    entity            objective2Marker;

    entity            carryable1;
    entity            carryable2;
    entity            carryable3;

    entity            finalObjectiveTrigger;

    entity             jammer; // MBJ
    entity            jammerEffectsIdle; // MBJ
    entity            jammerEffectsShutdown; // MBJ
    entity            generatorDestroyed; // MBJ

    entity            guardTower1;
    entity            guardTower1Construction;

    entity            noplant_generator;

    float            mainObjectiveIndex; // MBJ

    // ANDREW

    //entity		ship_sparks_1;
    entity            ship_sparks_2;
    entity            ship_sparks_3;

    entity            ship_explode_1;
    entity            ship_explode_2;
    entity            ship_explode_3;
    entity            ship_explode_4;
    entity            ship_explode_5;
    entity            ship_explode_6;
    entity            ship_explode_final;
    entity            ship_smoke;
    entity            ship_blowout;

    entity            ship_light;

    entity            ship_fire1;
    entity            ship_fire2;

    entity             endCameraA;
    entity            endCameraB;

    // Bot Functions
    void             OnSpawnCaptured( string actionName );
    void             OnSpawnLiberated( string actionName );
    void             OnCarryableItemStolen( string actionName );
    void             OnCarryableItemReturned( string actionName );
    void            DelayedBotSpawnThread();
    void            DelayedRearSpawnThread();

    cvar             debug_script;
}

mapObject_Base Quarry_MapScript() {
    return new mapObject_Quarry;
}

void mapObject_Quarry::preinit() {
}

void mapObject_Quarry::InitObjectives() {
    gameRules.setWinningTeam( gdfTeam );

    // Modified GDF Respawn Time (added 10 seconds) MBJ
    gdfTeam.SetRespawnWait( 30 );
    stroggTeam.SetRespawnWait( 20 );
    CreateRespawnTimeThread( stroggTeam );

    //
    // Set up the spawn points
    //

    quarryworks_strogg_spawn = worldspawn.getEntityKey( "script_quarryworks_strogg_spawn" );
    warehouse_gdf_spawn = worldspawn.getEntityKey( "script_warehouse_spawn" );
    railyard_capturable_spawn = worldspawn.getEntityKey( "script_railyard_capturable_spawn" );
    gdf_main_base = worldspawn.getEntityKey( "script_gdf_base_spawnmaster" );
    strogg_main_base = worldspawn.getEntityKey( "script_strogg_base_spawnmaster" );

    quarryworks_strogg_spawn.setGameTeam( $null_entity );
    quarryworks_strogg_spawn.vSetActive( false );
    warehouse_gdf_spawn.setGameTeam( gdfTeam );
    warehouse_gdf_spawn.vSetActive( true );
    railyard_capturable_spawn.setGameTeam( $null_entity );
    railyard_capturable_spawn.vSetActive( true );

    //
    // Set up the territories
    //

    gdfBaseTerritory = worldspawn.getEntityKey( "script_gdf_base_territory" );
    warehouseTerritory = worldspawn.getEntityKey( "script_warehouse_territory" );
    quarryworksTerritory = worldspawn.getEntityKey( "script_quarry_territory" );
    gateTerritory = worldspawn.getEntityKey( "script_gate_territory" );
    stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );

    gdfBaseTerritory.setActive( false );
    warehouseTerritory.setActive( false );
    quarryworksTerritory.setActive( true );
    gateTerritory.setActive( false );
    stroggBaseTerritory.setActive( true );

    //
    // Set up the objectives
    //

    objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" );
    objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" );
    objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" );
    objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" );

    objective1Marker = worldspawn.getEntityKey( "script_obj1_marker" );
    objective2Marker = worldspawn.getEntityKey( "script_obj2_marker" );

    objective1Arrow1.setGameTeam( gdfTeam );
    objective1Arrow2.setGameTeam( gdfTeam );
    objective2Arrow1.setGameTeam( gdfTeam );
    objective2Arrow2.setGameTeam( gdfTeam );

    objective1Arrow1.vStartObjective();
    objective1Arrow2.vStartObjective();

    objective1Marker.vStartObjective();
    objective2Marker.vStartObjective();

    guardTower1                = worldspawn.getEntityKey( "script_guard_tower_1_object" );
    guardTower1Construction    = worldspawn.getEntityKey( "script_guard_tower_1" );

    carryable1        = worldspawn.getEntityKey( "script_carryable_item_caller_1" );
    carryable2        = worldspawn.getEntityKey( "script_carryable_item_caller_2" );
    carryable3        = worldspawn.getEntityKey( "script_carryable_item_caller_3" );

    // ANDREW

    //ship_sparks_1		= worldspawn.getEntityKey( "script_ship_sparks_1" );
    ship_sparks_2        = worldspawn.getEntityKey( "script_ship_sparks_2" );
    ship_sparks_3        = worldspawn.getEntityKey( "script_ship_sparks_3" );

    ship_explode_1        = worldspawn.getEntityKey( "script_ship_explode_1" );
    ship_explode_2        = worldspawn.getEntityKey( "script_ship_explode_2" );
    ship_explode_3        = worldspawn.getEntityKey( "script_ship_explode_3" );
    ship_explode_4        = worldspawn.getEntityKey( "script_ship_explode_4" );
    ship_explode_5        = worldspawn.getEntityKey( "script_ship_explode_5" );
    ship_explode_6        = worldspawn.getEntityKey( "script_ship_explode_6" );
    ship_explode_final    = worldspawn.getEntityKey( "script_ship_explode_final" );

    ship_smoke        = worldspawn.getEntityKey( "script_ship_smoke" );
    ship_blowout        = worldspawn.getEntityKey( "script_ship_blowout" );
    ship_light        = worldspawn.getEntityKey( "script_ship_light" );

    ship_fire1        = worldspawn.getEntityKey( "script_ship_fire1" );
    ship_fire2        = worldspawn.getEntityKey( "script_ship_fire2" );

    endCameraA        = worldspawn.getEntityKey( "script_placement_camera_a" );
    endCameraB        = worldspawn.getEntityKey( "script_placement_camera_b" );

    finalObjectiveTrigger = worldspawn.getEntityKey( "script_final_objective_trigger" );

    jammer            = worldspawn.getEntityKey( "script_jammer" ); // MBJ

    noplant_generator        = worldspawn.getEntityKey( "script_noplant_generator" );

    // MBJ ADDED BELOW

    jammerEffectsIdle        = worldspawn.getEntityKey( "script_jammer_effects_idle" );
    jammerEffectsShutdown    = worldspawn.getEntityKey( "script_jammer_effects_shutdown" );

    generatorDestroyed        = worldspawn.getEntityKey( "script_generator_destroyed" );

    CreateDeployTasks();

    generatorDestroyed.hide();
    generatorDestroyed.forceDisableClip();

    // MBJ ADDED ABOVE

    mainObjectiveIndex = OBJECTIVE_QUARRY_DESTROY_JAMMER;

    objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex );

    gameRules.setEndGameCamera( endCameraB );

    thread StartFirstObjective();

    guardTower1Built = false;
}

// Added by MBJ

void mapObject_Quarry::StartFirstObjective() {
    sys.wait( 5.f );

    // Set up Bots for first objective

    objManager.setAttackingTeam( STROGG );
    objManager.setPrimaryTeamAction( GDF, "obj_strogg_jammer" );
    objManager.setPrimaryTeamAction( STROGG, "obj_strogg_jammer" );
    objManager.setBotCriticalClass( GDF, ENGINEER );
    objManager.setBotCriticalClass( STROGG, SOLDIER );

    thread DelayedBotSpawnThread();

    objManager.setBotSightDist( 3000.0f );
    objManager.setTeamUseRearSpawn( GDF, false );
    gdfTeam.setTeamRearSpawn( gdf_main_base );
    objManager.setTeamUseRearSpawnPercentage( GDF, 25 );
    objManager.activateBotActionGroup( QUARRY_STROGG_DESTROY_JAMMER );
    objManager.activateBotActionGroup( QUARRY_STROGG_SUPPORT_JAMMER );
    objManager.activateBotActionGroup( QUARRY_STROGG_DEPLOY_JAMMER );
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_JAMMER );
    objManager.activateBotActionGroup( QUARRY_GDF_DEPLOY_JAMMER );
    objManager.activateBotActionGroup( QUARRY_STROGG_FORWARDSPAWN_1 );
    objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_FORWARDSPAWN_1 );
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_FORWARDSPAWN_1 );
    objManager.SetObjectiveEntity( jammer, mainObjectiveIndex );
    jammer.vCreateMission();
    CreateInitialTimedMission( jammer );

    thread DelayedRearSpawnThread();
}

void mapObject_Quarry::DelayedBotSpawnThread() {
    sys.wait( 10.0f );
    objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, true );
    objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, true, true );
    objManager.setTeamNeededClass( STROGG, FIELDOPS, NOCLASS, 2, false, true );
    objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
}

void mapObject_Quarry::DelayedRearSpawnThread() {
    sys.wait( 30.0f );
    objManager.setTeamUseRearSpawn( GDF, true );
}

void mapObject_Quarry::CompleteObjective( float index, entity p ) {
    if ( index == OBJECTIVE_QUARRY_DESTROY_JAMMER ) {
        OnJammerDestroyed();
    }
    if ( index == OBJECTIVE_QUARRY_DELIVER_PODS ) {
        OnPodsDelivered();
    }
}

handle mapObject_Quarry::GetObjectiveMessage( float index ) {
    if ( index == OBJECTIVE_QUARRY_DESTROY_JAMMER ) {
        return sys.localizeString( "maps/quarry/obj_destroyed_jammer" );
    }
    if ( index == OBJECTIVE_QUARRY_DELIVER_PODS ) {
        return sys.localizeString( "maps/quarry/obj_constructed_relay" );
    }
    return g_locStr_BadObjective;
}

void mapObject_Quarry::OnConstructionComplete( entity obj ) {
    if ( obj == guardTower1Construction ) {
        OnGuardTower1Built();
    }
}

void mapObject_Quarry::OnDestructionComplete( entity obj ) {
    if ( obj == guardTower1Construction ) {
        OnGuardTower1Destroyed();
    }
}

void mapObject_Quarry::OnGuardTower1Built() {
    guardTower1Built = true;
    guardTower1Construction.vCompleteMission();
    objManager.deactivateBotActionGroup( QUARRY_GDF_CONSTRUCT_TOWER );
    if ( mainObjectiveIndex == OBJECTIVE_QUARRY_DELIVER_PODS ) {
        guardTower1.vCreateMission();
        objManager.activateBotActionGroup( QUARRY_STROGG_DESTROY_TOWER );
    }
}

void mapObject_Quarry::OnGuardTower1Destroyed() {
    guardTower1Built = false;
    guardTower1.vCompleteMission();
    objManager.deactivateBotActionGroup( QUARRY_STROGG_DESTROY_TOWER );
    if ( mainObjectiveIndex == OBJECTIVE_QUARRY_DELIVER_PODS ) {
        guardTower1Construction.vCreateMission();
        objManager.activateBotActionGroup( QUARRY_GDF_CONSTRUCT_TOWER );
    }
}

void mapObject_Quarry::JammerDestroyThread() {
    generatorDestroyed.show();
    sys.wait( 0.5f );
    generatorDestroyed.forceEnableClip();
}

void mapObject_Quarry::OnJammerDestroyed() {

    objManager.SetObjectiveEntity( $null_entity, -1 );

    mainObjectiveIndex = OBJECTIVE_QUARRY_DELIVER_PODS;

    objManager.setNextObjective( gdfTeam, mainObjectiveIndex ); // MBJ
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex ); // MBJ
    jammer.vCompleteMission(); // MBJ
    StopTimedMission(); // MBJ

    // MBJ ADDED BELOW

    thread JammerDestroyThread();
    noplant_generator.remove();

    jammerEffectsIdle.remove();
    jammerEffectsShutdown.vTriggerParticleEffect( 1 );

    // MBJ ADDED ABOVE

    quarryworksTerritory.setGameTeam( stroggTeam );

    quarryworks_strogg_spawn.setGameTeam( stroggTeam );
    quarryworks_strogg_spawn.vSetActive( true );

    railyard_capturable_spawn.vSetActive( false );
    railyard_capturable_spawn.setGameTeam( stroggTeam );

    warehouse_gdf_spawn.setGameTeam( $null_entity );
    warehouse_gdf_spawn.vSetActive( false );

    gdfBaseTerritory.setActive( true );
    warehouseTerritory.setActive( true );
    quarryworksTerritory.setActive( false );
    gateTerritory.setActive( true );
    stroggBaseTerritory.setActive( false );

    if ( !guardTower1Built ) {
        guardTower1Construction.vCreateMission();
    }

    if ( guardTower1Built ) {
        guardTower1.vCreateMission();
    }

    objective1Arrow1.vFinishObjective();
    objective1Arrow2.vFinishObjective();
    objective1Marker.vFinishObjective();

    objective2Arrow1.vStartObjective();
    objective2Arrow2.vStartObjective();

    // Set up bots for end

    objManager.setBotCriticalClass( GDF, ENGINEER );
    objManager.setBotCriticalClass( STROGG, FIELDOPS );
    objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, false, true );
    objManager.setTeamNeededClass( STROGG, FIELDOPS, NOCLASS, 3, true, true );
    objManager.setBotSightDist( 3000.0f );
    objManager.setTeamUseRearSpawn( GDF, false );
    objManager.setTeamUseRearSpawn( STROGG, true );
    stroggTeam.setTeamRearSpawn( strogg_main_base );
    objManager.setTeamUseRearSpawnPercentage( STROGG, 30 );
    objManager.setBotTeamRetreatTime( GDF, 10 );

    // Kill the previous bot action groups

    objManager.killBotActionGroup( QUARRY_STROGG_DESTROY_JAMMER );
    objManager.killBotActionGroup( QUARRY_STROGG_SUPPORT_JAMMER );
    objManager.killBotActionGroup( QUARRY_STROGG_DEPLOY_JAMMER );
    objManager.killBotActionGroup( QUARRY_GDF_DEFEND_JAMMER );
    objManager.killBotActionGroup( QUARRY_GDF_DEPLOY_JAMMER );
    objManager.killBotActionGroup( QUARRY_STROGG_FORWARDSPAWN_1 );
    objManager.killBotActionGroup( QUARRY_GDF_ATTACK_FORWARDSPAWN_1 );
    objManager.killBotActionGroup( QUARRY_STROGG_DEFEND_FORWARDSPAWN_1 );
    objManager.killBotActionGroup( QUARRY_STROGG_ATTACK_FORWARDSPAWN_1 );
    objManager.killBotActionGroup( QUARRY_GDF_DEFEND_FORWARDSPAWN_1 );

    // Turn on the final bot action groups

    objManager.activateBotActionGroup( QUARRY_STROGG_DEPLOY_POD );
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_BASE );
    objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_GDF );
    objManager.activateBotActionGroup( QUARRY_GDF_DEPLOY_BASE );
    objManager.activateBotActionGroup( QUARRY_STROGG_FINAL_OBJECTIVE );

    if ( !guardTower1Built ) {
        objManager.activateBotActionGroup( QUARRY_GDF_CONSTRUCT_TOWER );
    } else {
        objManager.activateBotActionGroup( QUARRY_STROGG_DESTROY_TOWER );
    }

    thread DeliverPodThread();

    stroggTeam.SetRespawnWait( 20 );
    ResetRespawnTimeThread();
}

// ANDREW

void mapObject_Quarry::ShipExplodeThread() {
    ship_light.vTriggerParticleEffect( 1 );

    sys.wait( 2.5f );
    //ship_sparks_1.vTriggerParticleEffect( 1 );

    sys.wait( 2.0f );
    ship_sparks_3.vTriggerParticleEffect( 1 );

    sys.wait( 0.6f );
    ship_sparks_2.vTriggerParticleEffect( 1 );
    ship_explode_1.vTriggerParticleEffect( 1 );

    sys.wait( 0.2f );
    ship_sparks_3.vTriggerParticleEffect( 1 );

    sys.wait( 1.4f );
    //ship_sparks_1.vTriggerParticleEffect( 1 );

    sys.wait( 1.1f );
    ship_explode_2.vTriggerParticleEffect( 1 );
    ship_explode_3.vTriggerParticleEffect( 1 );

    sys.wait( 1.3f );
    ship_explode_4.vTriggerParticleEffect( 1 );

    sys.wait( 0.8f );
    ship_blowout.vTriggerParticleEffect( 1 );
    ship_explode_5.vTriggerParticleEffect( 1 );

    sys.wait( 0.6f );
    ship_explode_6.vTriggerParticleEffect( 1 );

    sys.wait( 0.5f );
    ship_smoke.vTriggerParticleEffect( 1 );
    ship_explode_final.vTriggerParticleEffect( 1 );
}

void mapObject_Quarry::OnPodsDelivered() {
    StopTimedMission();
    finalObjectiveTrigger.vCompleteMission();

    objective2Arrow1.vFinishObjective();
    objective2Arrow2.vFinishObjective();
    objective2Marker.vFinishObjective();

    // MBJ

    objManager.SetObjectiveEntity( $null_entity, -1 );
    objManager.PlaySound( worldspawn.getKey( "snd_stroggwin_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_stroggwin_gdf" ), gdfTeam );

    //ANDREW

    thread ShipExplodeThread();
    ship_fire1.remove();
    ship_fire2.remove();

    gameRules.setWinningTeam( stroggTeam );
    gameRules.setEndGameCamera( endCameraA );


    gameRules.endGame();
}

void mapObject_Quarry::DeliverPodThread() {
    sys.wait( 5.0f );
    //sys.wait( 1.0f );			// Xian

    objManager.PlaySound( worldspawn.getKey( "snd_autodestruct_start_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_autodestruct_start_gdf" ), gdfTeam );

    // wait before triggering the carryables to come flying in (staggered to look cooler)
    sys.wait( 38.0f ); // ADAM ADJUSTMENTS
    //sys.wait( 2.0f ); // Xian adjustments for testing

    objManager.SetObjectiveEntity( finalObjectiveTrigger, mainObjectiveIndex );
    finalObjectiveTrigger.vCreateMission();
    CreateInitialTimedMission( finalObjectiveTrigger );

    carryable1.vOnDeploy();
    objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_BARRACKS_POD );        // Xian
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_BARRACKS_POD );        // Cell 1
    objManager.activateBotActionGroup( QUARRY_CELL_OBJ_1 );                        // Cell 1 Take Action

    sys.wait( 30.0f );
    //sys.wait( 2.0f );
    carryable2.vOnDeploy();
    objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_WAREHOUSE_POD );    // Cell 2
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_WAREHOUSE_POD );        // Cell 2
    objManager.activateBotActionGroup( QUARRY_CELL_OBJ_2 );                        // Cell 2 Take Action

    sys.wait( 30.0f );
    //sys.wait( 2.0f );
    carryable3.vOnDeploy();
    objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_OFFICE_POD );        // Cell 3
    objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_OFFICE_POD );            // Cell 3
    objManager.activateBotActionGroup( QUARRY_CELL_OBJ_3 );                        // Cell 3 Take Action
}

// Added by MBJ

void mapObject_Quarry::OnTimeLimitHit() {
    FinishTimedMission();

    objManager.SetObjectiveEntity( $null_entity, -1 );

    objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam );
}

// MBJ - Bot Forward Spawn Actions

void mapObject_Quarry::OnSpawnCaptured( string actionName ) {
    if ( actionName == "strogg_forwardspawn_1" ) {
        objManager.activateBotActionGroup( QUARRY_GDF_ATTACK_FORWARDSPAWN_1 );
        objManager.activateBotActionGroup( QUARRY_STROGG_DEFEND_FORWARDSPAWN_1 );
        objManager.deactivateBotActionGroup( QUARRY_STROGG_ATTACK_FORWARDSPAWN_1 );
        objManager.deactivateBotActionGroup( QUARRY_GDF_DEFEND_FORWARDSPAWN_1 );
        stroggTeam.setTeamRearSpawn( strogg_main_base );
        objManager.setTeamUseRearSpawn( STROGG, true );
    }
}

void mapObject_Quarry::OnSpawnLiberated( string actionName ) {
    if ( actionName == "strogg_forwardspawn_1" ) {
        objManager.deactivateBotActionGroup( QUARRY_GDF_ATTACK_FORWARDSPAWN_1 );
        objManager.deactivateBotActionGroup( QUARRY_STROGG_DEFEND_FORWARDSPAWN_1 );
        objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_FORWARDSPAWN_1 );
        objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_FORWARDSPAWN_1 );
        objManager.setTeamUseRearSpawn( STROGG, false );
    }
}

// MBJ - Carryable Item Actions

void mapObject_Quarry::OnCarryableItemStolen( string actionName ) {
    if( actionName == "obj_strogg_cell1" ) {
        objManager.deactivateBotActionGroup( QUARRY_STROGG_ATTACK_BARRACKS_POD );
        objManager.deactivateBotActionGroup( QUARRY_GDF_DEFEND_BARRACKS_POD );
    }
    if( actionName == "obj_strogg_cell2" ) {
        objManager.deactivateBotActionGroup( QUARRY_STROGG_ATTACK_WAREHOUSE_POD );
        objManager.deactivateBotActionGroup( QUARRY_GDF_DEFEND_WAREHOUSE_POD );
    }
    if( actionName == "obj_strogg_cell3" ) {
        objManager.deactivateBotActionGroup( QUARRY_STROGG_ATTACK_OFFICE_POD );
//		objManager.deactivateBotActionGroup( QUARRY_GDF_DEFEND_OFFICE_POD );
    }
}

void mapObject_Quarry::OnCarryableItemReturned( string actionName ) {
    if( actionName == "obj_strogg_cell1" ) {
        objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_BARRACKS_POD );
        objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_BARRACKS_POD );
    }
    if( actionName == "obj_strogg_cell2" ) {
        objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_WAREHOUSE_POD );
        objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_WAREHOUSE_POD );
    }
    if( actionName == "obj_strogg_cell3" ) {
        objManager.activateBotActionGroup( QUARRY_STROGG_ATTACK_OFFICE_POD );
        objManager.activateBotActionGroup( QUARRY_GDF_DEFEND_OFFICE_POD );
    }
}