844 lines
28 KiB
Plaintext
844 lines
28 KiB
Plaintext
#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;
|
|
}
|