etqw-sdk/base/script/maps/island.script

844 lines
28 KiB
Plaintext
Raw Permalink Normal View History

2008-05-29 00:00:00 +00:00
#define OBJECTIVE_ISLAND_BUILD_GENERATOR 0
#define OBJECTIVE_ISLAND_DESTROY_DOOR 1
#define OBJECTIVE_ISLAND_TRANSMIT_DATA 2
/*
#define BOT_ACTION_GROUP_GDFBASE 0
#define BOT_ACTION_GROUP_STROGGBASE 1
#define BOT_ACTION_GROUP_FORWARDSPAWN1 2
#define BOT_ACTION_GROUP_BUNKERHATCH 4
#define BOT_ACTION_GROUP_BUNKERTOPLEVEL 5
#define BOT_ACTION_GROUP_BUILDGENERATOR 6
#define BOT_ACTION_GROUP_FORWARDSPAWN2 7
#define BOT_ACTION_GROUP_GDFTOWER 8
#define BOT_ACTION_GROUP_DATABUNKERSUPPORT 9
#define BOT_ACTION_GROUP_DESTROYDOOR 10
#define BOT_ACTION_GROUP_TRANSMITDATA 11
*/
/* route id's
0 - start
1 - vault
*/
// First part (Generator)
#define ISLAND_GDF_CONSTRUCT_GENERATOR 0
#define ISLAND_GDF_SUPPORT_CONSTRUCT_GENERATOR 1
#define ISLAND_GDF_DEPLOY_CONSTRUCT_GENERATOR 2 // start at beginning
#define ISLAND_STROGG_DEFEND_CONSTRUCT_GENERATOR 3
#define ISLAND_STROGG_DEPLOY_CONSTRUCT_GENERATOR 4
#define ISLAND_GDF_DESTROY_BUNKERHATCH 5
#define ISLAND_STROGG_DEFEND_BUNKERHATCH 6 // add more of these
#define ISLAND_BOTH_BUNKERHATCH_TOPLEVEL 7
#define ISLAND_GDF_FORWARDSPAWN_1 8
#define ISLAND_STROGG_FORWARDSPAWN_1 9
// Second part (2nd forward spawn + keycard bunker)
#define ISLAND_GDF_DESTROY_VAULTDOOR 10
#define ISLAND_GDF_SUPPORT_VAULTDOOR 11
#define ISLAND_GDF_DEPLOY_VAULTDOOR 12
#define ISLAND_STROGG_DEFEND_VAULTDOOR 13
#define ISLAND_STROGG_DEPLOY_VAULTDOOR 14
#define ISLAND_GDF_FORWARDSPAWN_2 15
#define ISLAND_STROGG_FORWARDSPAWN_2 16
// Third part (keycard bunker + observatory)
#define ISLAND_GDF_DELIVER_DATADISC 17
#define ISLAND_GDF_SUPPORT_DATADISC 18
#define ISLAND_STROGG_DEFEND_DATADISC 19
#define ISLAND_STROGG_DEPLOY_DATADISC 20
// Towers
#define ISLAND_TOWER_1 21
#define ISLAND_STROGG_DEPLOY_FINAL 22
// Delivery
#define ISLAND_STROGG_DEFEND_OBSERVATORY 23
#define ISLAND_GDF_DELIVER_OBSERVATORY 24
#define ISLAND_GDF_STEAL_DATADISC 25
#define ISLAND_GDF_DEPLOY_DATADISC 26
// Misc
#define ISLAND_TOWER_ACTIVE 27
#define ISLAND_ISLAND_FS_NODES 28
object mapObject_Island : mapObject_Default {
void preinit();
void InitObjectives();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void OnTimeLimitHit();
void OnGeneratorBuilt();
void OnDoorDestroyed();
void OnDataTransmitted();
void OnGuardTower1Built();
void OnGuardTower1Destroyed();
boolean guardTower1Built;
void OnBunkerHatchDestroyed();
void OnConstructionComplete( entity obj );
void OnDestructionComplete( entity obj );
void StartFirstObjective();
void RaiseTowers();
vector GetGDFBasePosition() { return '-7680 -9480 930'; }
entity GetSpectateEntity();
//
// Spawn masters
//
entity gdfBaseSpawn;
entity gdfOutpostSpawn;
entity gdfForwardSpawn;
entity stroggBaseSpawn;
entity stroggGeneratorSpawn;
entity stroggObservatorySpawn;
entity gdfVaultSpawn;
//
// Territories
//
entity gdfBaseTerritory;
entity stroggBaseTerritory;
entity observatoryTerritory;
entity outpostTerritory;
//
// Objectives
//
entity objective1;
entity objective1Arrow1;
entity objective1Arrow2;
entity objective2;
entity objective2Arrow1;
entity objective2Arrow2;
entity objective3;
entity objective3Arrow1;
entity objective3Arrow2;
entity vaultBlowout;
entity vaultSteam;
entity vaultLight;
entity vaultSparks1;
entity vaultSparks2;
entity final;
entity endCameraA;
entity endCameraB;
void VaultEffectsThread();
void FinalEffectsThread();
entity sewerDoor1;
entity sewerDoor2;
entity keycardBunkerDoor1;
entity keycardBunkerDoor2;
entity vaultStart;
entity vaultBroken;
entity platypusSpawn;
entity generatorConstruction;
entity vaultDestroy;
entity dataDiscItem;
entity genspeaker;
entity tower1;
entity tower2;
entity tower3;
entity tower1clip;
entity tower2clip;
entity tower3clip;
entity guardTower1;
entity guardTower1Construction;
entity bunkerHatch;
entity noplantHatch;
entity noplantVaultdoor;
entity vault_stroggshield_1;
entity vault_stroggshield_2;
entity vault_stroggshield_trigger_hurt_1;
entity vault_stroggshield_trigger_hurt_2;
entity vault_stroggshield_light_1;
entity vault_stroggshield_light_2;
entity gdfBeachSpawn;
float mainObjectiveIndex;
// Bot Functions
void OnSpawnCaptured( string actionName );
void OnSpawnLiberated( string actionName );
void OnCarryableItemStolen( string actionName );
void OnCarryableItemReturned( string actionName );
void DelayedBotSpawnThread();
void DelayedRearSpawnThread();
// Bot Obstacles
entity bot_bunkerhatch;
entity bot_keycardbunker1;
entity bot_keycardbunker2;
entity bot_sewerdoor;
entity bot_vaultdoor;
cvar debug_script;
}
mapObject_Base Island_MapScript() {
return new mapObject_Island;
}
void mapObject_Island::preinit() {
}
void mapObject_Island::InitObjectives() {
gameRules.setWinningTeam( stroggTeam );
gdfTeam.SetRespawnWait( 20 );
stroggTeam.SetRespawnWait( 30 );
gdfTeam.InitRespawnTimeChange();
stroggTeam.InitRespawnTimeChange();
CreateRespawnTimeThread( gdfTeam );
// Disable hatch reachabilities -Xian
sys.enableBotReachability( "xian_bot_reachability_2", 2, false );
sys.enableBotReachability( "xian_bot_reachability_8", 2, false );
//
// Set up the spawn points
//
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
gdfBaseSpawn.setGameTeam( gdfTeam );
gdfOutpostSpawn = worldspawn.getEntityKey( "script_gdf_outpost_spawn" );
gdfOutpostSpawn.setGameTeam( $null_entity );
gdfOutpostSpawn.vSetActive( false );
gdfForwardSpawn = worldspawn.getEntityKey( "script_gdf_capturable_spawn" );
gdfForwardSpawn.vSetActive( false );
gdfVaultSpawn = worldspawn.getEntityKey( "script_gdf_vault_spawn" );
gdfVaultSpawn.setGameTeam( $null_entity );
gdfVaultSpawn.vSetActive( false );
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
stroggBaseSpawn.setGameTeam( stroggTeam );
stroggGeneratorSpawn = worldspawn.getEntityKey( "script_strogg_generator_spawn" );
stroggGeneratorSpawn.setGameTeam( stroggTeam );
stroggGeneratorSpawn.vSetActive( true );
stroggObservatorySpawn = worldspawn.getEntityKey( "script_strogg_observatory_spawn" );
stroggObservatorySpawn.setGameTeam( stroggTeam );
stroggObservatorySpawn.vSetActive( false );
platypusSpawn = worldspawn.getEntityKey( "script_spawn_platypus" );
platypusSpawn.vOnUnDeploy();
//
// Set up Towers
//
tower1 = worldspawn.getEntityKey( "script_tower1" );
tower2 = worldspawn.getEntityKey( "script_tower2" );
tower3 = worldspawn.getEntityKey( "script_tower3" );
tower1clip = worldspawn.getEntityKey( "script_tower1_clip" );
tower2clip = worldspawn.getEntityKey( "script_tower2_clip" );
tower3clip = worldspawn.getEntityKey( "script_tower3_clip" );
//
// Get Speakers
//
genspeaker = worldspawn.getEntityKey( "script_generator_speaker" );
//
// Set up the territories
//
gdfBaseTerritory = worldspawn.getEntityKey( "script_gdf_base_territory" );
stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );
observatoryTerritory = worldspawn.getEntityKey( "script_observatory_territory" );
outpostTerritory = worldspawn.getEntityKey( "script_outpost_territory" );
gdfBaseTerritory.setGameTeam( gdfTeam );
gdfBaseTerritory.setActive( true );
stroggBaseTerritory.setGameTeam( stroggTeam );
stroggBaseTerritory.setActive( false );
observatoryTerritory.setGameTeam( stroggTeam );
observatoryTerritory.setActive( false );
outpostTerritory.setGameTeam( stroggTeam );
outpostTerritory.setActive( true );
//
// Set up tower clips
//
tower1clip.hide();
tower1clip.forceDisableClip();
tower2clip.hide();
tower2clip.forceDisableClip();
tower3clip.hide();
tower3clip.forceDisableClip();
//
// Set up the objectives
//
objective1 = worldspawn.getEntityKey( "script_obj1_marker" );
objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" );
objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" );
objective2 = worldspawn.getEntityKey( "script_obj2_marker" );
objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" );
objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" );
objective3 = worldspawn.getEntityKey( "script_obj3_marker" );
objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_arrow1" );
objective3Arrow2 = worldspawn.getEntityKey( "script_obj3_arrow2" );
objective1.vStartObjective();
objective1Arrow1.vStartObjective();
objective1Arrow2.vStartObjective();
objective2.vStartObjective();
objective3.vStartObjective();
dataDiscItem = worldspawn.getEntityKey( "script_keycard" );
generatorConstruction = worldspawn.getEntityKey( "script_generator_materials" );
vaultDestroy = worldspawn.getEntityKey( "script_vault_doors" );
guardTower1 = worldspawn.getEntityKey( "script_guard_tower_1_object" );
guardTower1Construction = worldspawn.getEntityKey( "script_guard_tower_1" );
bunkerHatch = worldspawn.getEntityKey( "script_bunker_hatch" );
noplantHatch = worldspawn.getEntityKey( "script_noplant_hatch" );
noplantVaultdoor = worldspawn.getEntityKey( "script_noplant_vaultdoor" );
gdfBeachSpawn = worldspawn.getEntityKey( "script_gdf_beach_capturable_spawn" );
vaultBlowout = worldspawn.getEntityKey( "script_vault_blowout" );
vaultSteam = worldspawn.getEntityKey( "script_vault_steam" );
vaultLight = worldspawn.getEntityKey( "script_vault_light" );
vaultSparks1 = worldspawn.getEntityKey( "script_vault_sparks1" );
vaultSparks2 = worldspawn.getEntityKey( "script_vault_sparks2" );
final = worldspawn.getEntityKey( "script_final" );
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
//storageRoomDoor = worldspawn.getEntityKey( "script_storage_room_door" );
//storageRoomDoor.setTakesDamage( 0 );
// Set up the objectives
mainObjectiveIndex = OBJECTIVE_ISLAND_BUILD_GENERATOR;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
keycardBunkerDoor1 = worldspawn.getEntityKey( "script_keycard_bunker_door_1" );
keycardBunkerDoor2 = worldspawn.getEntityKey( "script_keycard_bunker_door_2" );
sewerDoor1 = worldspawn.getEntityKey( "script_sewer_door_1" );
sewerDoor2 = worldspawn.getEntityKey( "script_sewer_door_2" );
vaultStart = worldspawn.getEntityKey( "script_vault_start" );
vaultBroken = worldspawn.getEntityKey( "script_vault_broken" );
vault_stroggshield_1 = worldspawn.getEntityKey( "script_vault_stroggshield_1" );
vault_stroggshield_2 = worldspawn.getEntityKey( "script_vault_stroggshield_2" );
vault_stroggshield_trigger_hurt_1 = worldspawn.getEntityKey( "script_vault_stroggshield_trigger_hurt_1" );
vault_stroggshield_trigger_hurt_2 = worldspawn.getEntityKey( "script_vault_stroggshield_trigger_hurt_2" );
vault_stroggshield_light_1 = worldspawn.getEntityKey( "script_vault_stroggshield_light_1" );
vault_stroggshield_light_2 = worldspawn.getEntityKey( "script_vault_stroggshield_light_2" );
gameRules.setEndGameCamera( endCameraB );
bunkerHatch.vCreateMission();
guardTower1Built = false;
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
CreateDeployTasks();
thread StartFirstObjective();
// Set up Bot Obstacles
bot_bunkerhatch = worldspawn.getEntityKey( "script_bot_bunkerhatch_obstacle" );
bot_keycardbunker1 = worldspawn.getEntityKey( "script_bot_keycardbunker_obstacle_1" );
bot_keycardbunker2 = worldspawn.getEntityKey( "script_bot_keycardbunker_obstacle_2" );
bot_sewerdoor = worldspawn.getEntityKey( "script_bot_sewerdoor_obstacle" );
bot_vaultdoor = worldspawn.getEntityKey( "script_bot_vaultdoor_obstacle" );
// Set up Bots for first objective
objManager.setAttackingTeam( GDF );
objManager.setPrimaryTeamAction( GDF, "bag_buildgenerator_build_1" );
objManager.setPrimaryTeamAction( STROGG, "bag_buildgenerator_build_1" );
objManager.setSecondaryTeamAction( GDF, "bag_bunkerhatch_plant_1" );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setBotCriticalClass( STROGG, NOCLASS );
thread DelayedBotSpawnThread();
objManager.setBotSightDist( 3000.0f );
objManager.activateBotActionGroup( ISLAND_GDF_CONSTRUCT_GENERATOR );
objManager.activateBotActionGroup( ISLAND_GDF_SUPPORT_CONSTRUCT_GENERATOR );
objManager.activateBotActionGroup( ISLAND_GDF_DEPLOY_CONSTRUCT_GENERATOR );
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_CONSTRUCT_GENERATOR );
objManager.activateBotActionGroup( ISLAND_STROGG_DEPLOY_CONSTRUCT_GENERATOR );
objManager.activateBotActionGroup( ISLAND_GDF_DESTROY_BUNKERHATCH );
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_BUNKERHATCH );
objManager.activateBotActionGroup( ISLAND_ISLAND_FS_NODES );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawn( STROGG, false );
objManager.setTeamUseRearSpawnPercentage( STROGG, 25 );
objManager.setTeamUseRearSpawn( GDF, false );
thread DelayedRearSpawnThread();
}
void mapObject_Island::DelayedBotSpawnThread() {
sys.wait( 10.0f );
objManager.setTeamNeededClass( GDF, ENGINEER, COVERTOPS, 3, false, true );
objManager.setTeamNeededClass( STROGG, ENGINEER, COVERTOPS, 2, false, true );
}
void mapObject_Island::DelayedRearSpawnThread() {
sys.wait( 30.0f );
objManager.setTeamUseRearSpawn( STROGG, true );
}
void mapObject_Island::StartFirstObjective() {
genspeaker.turnOff();
sys.wait( 5.f );
objManager.SetObjectiveEntity( generatorConstruction, mainObjectiveIndex );
CreateInitialTimedMission( generatorConstruction );
generatorConstruction.vCreateMission();
}
void mapObject_Island::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_ISLAND_BUILD_GENERATOR ) {
OnGeneratorBuilt();
}
if ( index == OBJECTIVE_ISLAND_DESTROY_DOOR ) {
OnDoorDestroyed();
}
if ( index == OBJECTIVE_ISLAND_TRANSMIT_DATA ) {
OnDataTransmitted();
}
}
handle mapObject_Island::GetObjectiveMessage( float index ) {
if ( index == OBJECTIVE_ISLAND_BUILD_GENERATOR ) {
return sys.localizeString( "maps/island/obj_constructed" );
}
if ( index == OBJECTIVE_ISLAND_DESTROY_DOOR ) {
return sys.localizeString( "maps/island/obj_destroyed" );
}
if ( index == OBJECTIVE_ISLAND_TRANSMIT_DATA ) {
return sys.localizeString( "maps/island/obj_transmitted" );
}
return g_locStr_BadObjective;
}
void mapObject_Island::OnConstructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Built();
}
}
void mapObject_Island::OnDestructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Destroyed();
} else if ( obj == bunkerHatch ) {
OnBunkerHatchDestroyed();
}
}
void mapObject_Island::OnGuardTower1Built() {
guardTower1Built = true;
objManager.deactivateBotActionGroup( ISLAND_TOWER_1 );
guardTower1Construction.vCompleteMission();
if ( mainObjectiveIndex > OBJECTIVE_ISLAND_BUILD_GENERATOR ) {
guardTower1.vCreateMission();
objManager.activateBotActionGroup( ISLAND_TOWER_ACTIVE );
}
}
void mapObject_Island::OnGuardTower1Destroyed() {
guardTower1Built = false;
guardTower1.vCompleteMission();
if ( mainObjectiveIndex > OBJECTIVE_ISLAND_BUILD_GENERATOR ) {
objManager.activateBotActionGroup( ISLAND_TOWER_1 );
guardTower1Construction.vCreateMission();
objManager.deactivateBotActionGroup( ISLAND_TOWER_ACTIVE );
}
}
void mapObject_Island::OnBunkerHatchDestroyed() {
bot_bunkerhatch.activate( bot_bunkerhatch );
noplantHatch.remove();
bunkerHatch.vCompleteMission();
objManager.deactivateBotActionGroup( ISLAND_GDF_DESTROY_BUNKERHATCH );
objManager.activateBotActionGroup( ISLAND_BOTH_BUNKERHATCH_TOPLEVEL );
// Enable Bot Reachability
//sys.enableBotReachability( "xian_bot_reachability_2", 2, true );
//sys.enableBotReachability( "xian_bot_reachability_8", 2, true );
// Enable new path to generator
objManager.enableRoute( "bjames_bunkerhatch_route" );
}
void mapObject_Island::OnGeneratorBuilt() {
genspeaker.turnOn();
thread RaiseTowers();
mainObjectiveIndex = OBJECTIVE_ISLAND_DESTROY_DOOR;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
stroggGeneratorSpawn.setGameTeam( $null_entity );
stroggGeneratorSpawn.vSetActive( false );
stroggObservatorySpawn.vSetActive( true );
gdfOutpostSpawn.setGameTeam( gdfTeam );
gdfOutpostSpawn.vSetActive( true );
gdfForwardSpawn.vSetActive( true );
outpostTerritory.setGameTeam( gdfTeam );
gdfBaseTerritory.setActive( false );
stroggBaseTerritory.setActive( true );
outpostTerritory.setActive( true );
objective1.vFinishObjective();
objective1Arrow1.vFinishObjective();
objective1Arrow2.vFinishObjective();
objective2Arrow1.vStartObjective();
objective2Arrow2.vStartObjective();
// Setup Bots for second objective
if ( debug_script.getBoolValue() ) {
sys.print( "***** GENERATOR BUILT! *****\n" );
}
objManager.deactivateBotActionGroup( ISLAND_GDF_CONSTRUCT_GENERATOR );
objManager.deactivateBotActionGroup( ISLAND_GDF_SUPPORT_CONSTRUCT_GENERATOR );
objManager.deactivateBotActionGroup( ISLAND_GDF_DEPLOY_CONSTRUCT_GENERATOR );
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEFEND_CONSTRUCT_GENERATOR );
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEPLOY_CONSTRUCT_GENERATOR );
objManager.deactivateBotActionGroup( ISLAND_GDF_DESTROY_BUNKERHATCH );
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEFEND_BUNKERHATCH );
objManager.killBotActionGroup( ISLAND_BOTH_BUNKERHATCH_TOPLEVEL );
objManager.killBotActionGroup( ISLAND_GDF_FORWARDSPAWN_1 );
objManager.killBotActionGroup( ISLAND_STROGG_FORWARDSPAWN_1 );
objManager.activateBotActionGroup( ISLAND_GDF_DESTROY_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_GDF_SUPPORT_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_GDF_DEPLOY_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_STROGG_DEPLOY_FINAL );
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_STROGG_DEPLOY_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_GDF_FORWARDSPAWN_2 );
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.setPrimaryTeamAction( GDF, "bag_vaultdoor_bomb" );
objManager.setPrimaryTeamAction( STROGG, "bag_vaultdoor_bomb" );
objManager.setSecondaryTeamAction( GDF, "bag_gdftower_objective_1" );
objManager.setBotCriticalClass( GDF, SOLDIER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, true );
objManager.clearTeamBotBoundEntities( GDF );
objManager.setTeamUseRearSpawn( STROGG, true );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( STROGG, 30 );
objManager.setTeamUseRearSpawn( GDF, false );
objManager.setBotTeamRetreatTime( STROGG, 15 );
objManager.SetObjectiveEntity( $null_entity, -1 );
generatorConstruction.vCompleteMission();
StopTimedMission();
objManager.SetObjectiveEntity( vaultDestroy, mainObjectiveIndex );
CreateInitialTimedMission( vaultDestroy );
bunkerHatch.vFreeMission();
if ( !guardTower1Built ) {
guardTower1Construction.vCreateMission();
objManager.activateBotActionGroup( ISLAND_TOWER_1 );
}
if ( guardTower1Built ) {
guardTower1.vCreateMission();
objManager.activateBotActionGroup( ISLAND_TOWER_ACTIVE );
}
gdfBeachSpawn.vSetActive( false );
gdfBeachSpawn.setGameTeam( gdfTeam );
vaultDestroy.vCreateMission();
gdfTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
}
void mapObject_Island::RaiseTowers() {
// turn on towers - then open doors
sys.wait( 10.f );
tower1.vOnDeploy();
sys.wait( 10.f );
tower2.vOnDeploy();
sys.wait( 10.f );
tower3.vOnDeploy();
// open the doors to the keycard bunker
keycardBunkerDoor1.activate( keycardBunkerDoor1 );
bot_keycardbunker1.activate( bot_keycardbunker1 );
keycardBunkerDoor2.activate( keycardBunkerDoor2 );
bot_keycardbunker2.activate( bot_keycardbunker2 );
sewerDoor1.activate( sewerDoor1 );
sewerDoor2.activate( sewerDoor2 );
bot_sewerdoor.activate( bot_sewerdoor );
objManager.enableNode( "vaultnode" );
// Enable tower clip brushes
tower1clip.show();
tower1clip.forceEnableClip();
tower2clip.show();
tower2clip.forceEnableClip();
tower3clip.show();
tower3clip.forceEnableClip();
}
void mapObject_Island::VaultEffectsThread() {
vaultBlowout.vTriggerParticleEffect( 1 );
vaultSteam.vTriggerParticleEffect( 1 );
sys.wait( 0.4f );
vaultSparks1.vTriggerParticleEffect( 1 );
vaultLight.vTriggerParticleEffect( 1 );
sys.wait( 1.0f );
vaultSparks2.vTriggerParticleEffect( 1 );
}
void mapObject_Island::OnDoorDestroyed() {
objManager.SetObjectiveEntity( $null_entity, -1 );
vaultDestroy.vCompleteMission();
StopTimedMission();
bot_vaultdoor.activate( bot_vaultdoor );
noplantVaultdoor.remove();
observatoryTerritory.setGameTeam( gdfTeam );
stroggObservatorySpawn.setGameTeam( $null_entity );
observatoryTerritory.setActive( true );
mainObjectiveIndex = OBJECTIVE_ISLAND_TRANSMIT_DATA;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
objective2.vFinishObjective();
objective2Arrow1.vFinishObjective();
objective2Arrow2.vFinishObjective();
objective3Arrow1.vStartObjective();
objective3Arrow2.vStartObjective();
thread VaultEffectsThread();
vaultStart.remove();
vaultBroken.show();
vault_stroggshield_1.remove();
vault_stroggshield_2.remove();
vault_stroggshield_trigger_hurt_1.remove();
vault_stroggshield_trigger_hurt_2.remove();
vault_stroggshield_light_1.remove();
vault_stroggshield_light_2.remove();
platypusSpawn.vOnDeploy();
if ( debug_script.getBoolValue() ) {
sys.print( "***** VAULT DOOR DESTROYED! *****\n" );
}
if ( !guardTower1Built ) {
guardTower1Construction.vCreateMission();
objManager.activateBotActionGroup( ISLAND_TOWER_1 );
}
if ( guardTower1Built ) {
guardTower1.vCreateMission();
objManager.activateBotActionGroup( ISLAND_TOWER_ACTIVE );
}
objManager.clearTeamBotBoundEntities( GDF );
// Setup Bots for third objective
objManager.deactivateBotActionGroup( ISLAND_GDF_DESTROY_VAULTDOOR );
//objManager.deactivateBotActionGroup( GDF_SUPPORT_VAULTDOOR );
//objManager.deactivateBotActionGroup( ISLAND_GDF_DEPLOY_VAULTDOOR );
//objManager.deactivateBotActionGroup( STROGG_DEFEND_VAULTDOOR );
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEPLOY_VAULTDOOR );
//objManager.deactivateBotActionGroup( ISLAND_TOWER_ACTIVE );
objManager.deactivateBotActionGroup( ISLAND_GDF_FORWARDSPAWN_2 );
//objManager.activateBotActionGroup( GDF_DELIVER_DATADISC );
objManager.activateBotActionGroup( ISLAND_GDF_STEAL_DATADISC );
objManager.activateBotActionGroup( ISLAND_GDF_DELIVER_DATADISC );
objManager.activateBotActionGroup( ISLAND_GDF_SUPPORT_DATADISC );
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_DATADISC );
objManager.activateBotActionGroup( ISLAND_STROGG_DEPLOY_DATADISC );
objManager.activateBotActionGroup( ISLAND_GDF_DEPLOY_DATADISC );
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.setPrimaryTeamAction( GDF, "bag_transmitdata_start" );
objManager.setPrimaryTeamAction( STROGG, "bag_transmitdata_start" );
//objManager.setSecondaryTeamAction( GDF, "bag_gdftower_objective_1" );
//objManager.setSecondaryTeamAction( STROGG, "bag_gdftower_objective_1" );
objManager.setBotCriticalClass( GDF, NOCLASS );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.gameIsOnFinalObjective();
objManager.SetObjectiveEntity( dataDiscItem, mainObjectiveIndex );
gdfForwardSpawn.vSetActive( false );
gdfForwardSpawn.setGameTeam( gdfTeam );
gdfVaultSpawn.setGameTeam( gdfTeam );
gdfVaultSpawn.vSetActive( true );
gdfTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
}
void mapObject_Island::FinalEffectsThread() {
final.vTriggerParticleEffect( 1 );
}
void mapObject_Island::OnDataTransmitted() {
objective3.vFinishObjective();
objective3Arrow1.vFinishObjective();
objective3Arrow2.vFinishObjective();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.PlaySound( worldspawn.getKey( "snd_gdfwin_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdfwin_gdf" ), gdfTeam );
thread FinalEffectsThread();
gameRules.setEndGameCamera( endCameraA );
gameRules.setWinningTeam( gdfTeam );
gameRules.endGame();
}
void mapObject_Island::OnTimeLimitHit() {
FinishTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_gdf" ), gdfTeam );
}
// MBJ - Bot Forward Spawn Actions
void mapObject_Island::OnSpawnCaptured( string actionName ) {
if ( actionName == "bag_forwardspawn1_objective" ) {
objManager.activateBotActionGroup( ISLAND_GDF_FORWARDSPAWN_1 );
objManager.deactivateBotActionGroup( ISLAND_STROGG_FORWARDSPAWN_1 );
objManager.deactivateBotActionGroup( ISLAND_ISLAND_FS_NODES );
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawn( GDF, true );
objManager.setTeamUseRearSpawnPercentage( GDF, 25 );
}
if ( actionName == "bag_forwardspawn2_objective" ) {
gdfTeam.setTeamRearSpawn( gdfOutpostSpawn );
objManager.setTeamUseRearSpawn( GDF, true );
objManager.setTeamUseRearSpawnPercentage( GDF, 50 );
//objManager.activateBotActionGroup( GDF_ISLAND_FORWARDSPAWN_1 );
//objManager.deactivateBotActionGroup( STROGG_ISLAND_FORWARDSPAWN_1 );
}
}
void mapObject_Island::OnSpawnLiberated( string actionName ) {
if ( actionName == "bag_forwardspawn1_objective" ) {
objManager.activateBotActionGroup( ISLAND_STROGG_FORWARDSPAWN_1 );
objManager.activateBotActionGroup( ISLAND_ISLAND_FS_NODES );
objManager.deactivateBotActionGroup( ISLAND_GDF_FORWARDSPAWN_1 );
objManager.setTeamUseRearSpawn( GDF, false );
}
if ( actionName == "bag_forwardspawn2_objective" ) {
objManager.setTeamUseRearSpawn( GDF, false );
//objManager.activateBotActionGroup( STROGG_ISLAND_FORWARDSPAWN_1 );
//objManager.deactivateBotActionGroup( GDF_ISLAND_FORWARDSPAWN_1 );
}
}
// MBJ - Carryable Item Actions
void mapObject_Island::OnCarryableItemStolen( string actionName ) {
if ( debug_script.getBoolValue() ) {
sys.print( "***** DATA DISC TAKEN *****\n" );
}
if( actionName == "bag_transmitdata_start" ) {
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_OBSERVATORY );
objManager.activateBotActionGroup( ISLAND_GDF_DELIVER_DATADISC );
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEFEND_VAULTDOOR );
objManager.deactivateBotActionGroup( ISLAND_GDF_STEAL_DATADISC );
}
}
void mapObject_Island::OnCarryableItemReturned( string actionName ) {
if ( debug_script.getBoolValue() ) {
sys.print( "***** DATA DISC RETURNED *****\n" );
}
if( actionName == "bag_transmitdata_start" ) {
objManager.deactivateBotActionGroup( ISLAND_STROGG_DEFEND_OBSERVATORY );
objManager.deactivateBotActionGroup( ISLAND_GDF_DELIVER_DATADISC );
objManager.activateBotActionGroup( ISLAND_STROGG_DEFEND_VAULTDOOR );
objManager.activateBotActionGroup( ISLAND_GDF_STEAL_DATADISC );
}
}
entity mapObject_Island::GetSpectateEntity() {
if ( !generatorConstruction.vIsObjectiveComplete() ) {
return generatorConstruction.vGetSpectateEntity();
}
if ( vaultDestroy != $null_entity ) {
return vaultDestroy.vGetSpectateEntity();
}
if ( dataDiscItem != $null_entity ) {
return dataDiscItem.vGetSpectateEntity();
}
return $null_entity;
}