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

784 lines
27 KiB
Plaintext
Raw Permalink Normal View History

2008-05-29 00:00:00 +00:00
#define OBJECTIVE_ARK_DESTROY_JAMMER 0
#define OBJECTIVE_ARK_DESTROY_ENTRANCE 1
#define OBJECTIVE_ARK_DESTROY_RESEARCH 2
// Base deployables
#define ARK_STROGG_DEPLOY_BASE 0
#define ARK_GDF_DEPLOY_BASE 1
// First Objective - Destroy Jammer
#define ARK_OBJECTIVE_GENERATOR 2
#define ARK_STROGG_ATTACK_GENERATOR 3
#define ARK_STROGG_DEPLOY_OUTSIDE_TOWN 4
#define ARK_GDF_DEFEND_GENERATOR 5
#define ARK_GDF_DEPLOY_TOWN 6
// Second Objective - Construct Mining Laser
#define ARK_OBJECTIVE_LASER 7
#define ARK_STROGG_ATTACK_LASER 8
#define ARK_STROGG_DEPLOY_TOWN 9
#define ARK_GDF_DEFEND_LASER 10
#define ARK_GDF_DEPLOY_ISLET 11
// Third Objective - Destroy DNA Scanner
#define ARK_OBJECTIVE_SCANNER 12
#define ARK_STROGG_ATTACK_SCANNER 13
#define ARK_STROGG_DEPLOY_ISLET 14
#define ARK_GDF_DEFEND_SCANNER 15
#define ARK_GDF_DEPLOY_BIODOME 16
// Forward Spawn - Science Facility
#define ARK_OBJECTIVE_FACILITY_SPAWN 17
#define ARK_STROGG_ATTACK_FACILITY_SPAWN 18
#define ARK_STROGG_DEFEND_FACILITY_SPAWN 19
#define ARK_GDF_ATTACK_FACILITY_SPAWN 20
#define ARK_GDF_DEFEND_FACILITY_SPAWN 21
// Forced Secondary Objectives
#define ARK_GDF_PRIORITY_MINE_GENERATOR 22
#define ARK_GDF_PRIORITY_MINE_LASER 23
#define ARK_GDF_PRIORITY_BIODOME_DEPLOY 24
#define ARK_GDF_PRIORITY_ISLET_DEPLOY 25
object mapObject_Ark : mapObject_Default {
void destroy();
void InitObjectives();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void OnMiningLaserDeployed( entity other );
void OnMiningLaserConstructed( entity other );
void StartFirstObjective();
void NeededClassFirstObjective();
void OnTimeLimitHit();
void OnDestroyJammer();
void OnEntranceDestroyed();
void OnResearchDestroyed();
vector GetGDFBasePosition() { return '3020 2850 890'; }
void ZapporCallThread();
void JammerDestroyThread();
void EntranceEffectsThread();
void ResearchEffectsThread();
void OnSpawnCaptured( string actionName );
void OnSpawnLiberated( string actionName );
//void RandomBotactionTestThread();
entity GetSpectateEntity();
entity labequipment_destroyed;
entity dnaTubeStrogg1;
entity dnaTubeStrogg2;
entity outpostTerritory;
entity stroggBaseTerritory;
entity biodomesTerritory;
entity estuaryTerritory;
entity gdfBaseSpawnMaster;
entity stroggBaseSpawnMaster;
entity estuarySpawnMaster;
entity gdfDomesSpawnMaster;
entity stroggDomesSpawn;
entity churchSpawnMaster;
entity jammerSpawnMaster;
entity objective1Marker;
entity objective2Marker;
entity objective3Marker;
entity objective1Arrow1;
entity objective1Arrow2;
entity objective2Arrow1;
entity objective2Arrow2;
entity objective2Arrow3;
entity objective3Arrow1;
entity objective3Arrow2;
entity biodomesMainEntrance;
entity biodomesSideEntrance;
entity labEquipment;
entity zapporCaller;
entity entrance_smoke;
entity tube_water_1;
entity tube_water_2;
entity tube_water_3;
entity tube_water_4;
entity tube_water_5;
entity tube_water_floor_1;
entity tube_water_floor_2;
entity tube_water_floor_3;
entity tube_water_floor_4;
entity tube_water_floor_5;
entity tube_glass_1;
entity tube_glass_2;
entity tube_glass_3;
entity tube_glass_4;
entity dnaTubelight01;
entity dnaTubelight02;
entity dnaTubelight03;
entity dnaTubelight04;
entity jammer;
entity jammerEffectsIdle;
entity jammerEffectsShutdown;
entity generatorDestroyed;
entity biodomeDoorMelted;
entity biodomeDoorMeltedSide;
entity biodomeDoorExplosion;
entity noplant_generator;
entity noplant_dna_equipment;
entity endCameraA;
entity endCameraB;
//bot stuff
void SetupBotsObjectiveOne();
void SetupBotsObjectiveTwo();
void SetupBotsObjectiveThree();
entity botBiodomedoor1;
entity botBiodomedoor2;
cvar debug_script;
}
mapObject_Base Ark_MapScript() {
return new mapObject_Ark;
}
void mapObject_Ark::destroy() {
}
void mapObject_Ark::InitObjectives() {
outpostTerritory = worldspawn.getEntityKey( "script_outpost_territory" );
stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );
biodomesTerritory = worldspawn.getEntityKey( "script_biodomes_territory" );
estuaryTerritory = worldspawn.getEntityKey( "script_estuary_territory" );
gdfBaseSpawnMaster = worldspawn.getEntityKey( "script_gdf_base_spawn" );
stroggBaseSpawnMaster = worldspawn.getEntityKey( "script_strogg_base_spawn" );
estuarySpawnMaster = worldspawn.getEntityKey( "script_estuary_spawn" );
gdfDomesSpawnMaster = worldspawn.getEntityKey( "script_gdf_domes_spawn" );
churchSpawnMaster = worldspawn.getEntityKey( "script_church_spawnmaster") ;
jammerSpawnMaster = worldspawn.getEntityKey( "script_jammer_spawnmaster" );
objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" );
objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" );
objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" );
objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" );
objective2Arrow3 = worldspawn.getEntityKey( "script_obj2_arrow3" );
objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_arrow1" );
objective3Arrow2 = worldspawn.getEntityKey( "script_obj3_arrow2" );
objective1Marker = worldspawn.getEntityKey( "script_obj1_marker" );
objective2Marker = worldspawn.getEntityKey( "script_obj2_marker" );
objective3Marker = worldspawn.getEntityKey( "script_obj3_marker" );
entrance_smoke = worldspawn.getEntityKey( "script_entrance_smoke" );
tube_water_1 = worldspawn.getEntityKey( "script_tube_water_1" );
tube_water_2 = worldspawn.getEntityKey( "script_tube_water_2" );
tube_water_3 = worldspawn.getEntityKey( "script_tube_water_3" );
tube_water_4 = worldspawn.getEntityKey( "script_tube_water_4" );
tube_water_5 = worldspawn.getEntityKey( "script_tube_water_5" );
tube_water_floor_1 = worldspawn.getEntityKey( "script_tube_water_floor_1" );
tube_water_floor_2 = worldspawn.getEntityKey( "script_tube_water_floor_2" );
tube_water_floor_3 = worldspawn.getEntityKey( "script_tube_water_floor_3" );
tube_water_floor_4 = worldspawn.getEntityKey( "script_tube_water_floor_4" );
tube_water_floor_5 = worldspawn.getEntityKey( "script_tube_water_floor_5" );
tube_glass_1 = worldspawn.getEntityKey( "script_tube_glass_1" );
tube_glass_2 = worldspawn.getEntityKey( "script_tube_glass_2" );
tube_glass_3 = worldspawn.getEntityKey( "script_tube_glass_3" );
tube_glass_4 = worldspawn.getEntityKey( "script_tube_glass_4" );
dnaTubelight01 = worldspawn.getEntityKey( "script_dna_tubelight01" );
dnaTubelight02 = worldspawn.getEntityKey( "script_dna_tubelight02" );
dnaTubelight03 = worldspawn.getEntityKey( "script_dna_tubelight03" );
dnaTubelight04 = worldspawn.getEntityKey( "script_dna_tubelight04" );
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
biodomesMainEntrance = worldspawn.getEntityKey( "script_biodome_entrance" );
biodomesSideEntrance = worldspawn.getEntityKey( "script_biodomes_side_entrance_explosion" );
labEquipment = worldspawn.getEntityKey( "script_lab_equipment" );
dnaTubeStrogg1 = worldspawn.getEntityKey( "script_dna_tube_strogg_1" );
dnaTubeStrogg2 = worldspawn.getEntityKey( "script_dna_tube_strogg_2" );
zapporCaller = worldspawn.getEntityKey( "script_zappor_caller" );
jammer = worldspawn.getEntityKey( "script_jammer" );
jammerEffectsIdle = worldspawn.getEntityKey( "script_jammer_effects_idle" );
jammerEffectsShutdown = worldspawn.getEntityKey( "script_jammer_effects_shutdown" );
generatorDestroyed = worldspawn.getEntityKey( "script_generator_destroyed" );
biodomeDoorMelted = worldspawn.getEntityKey( "script_biodome_melted_door" );
biodomeDoorMeltedSide = worldspawn.getEntityKey( "script_biodome_melted_door_side" );
biodomeDoorMelted.hide();
biodomeDoorMeltedSide.hide();
biodomeDoorExplosion = worldspawn.getEntityKey( "script_biodomedoorexplosion" );
noplant_generator = worldspawn.getEntityKey( "script_noplant_generator" );
noplant_dna_equipment = worldspawn.getEntityKey( "script_noplant_dna_equipment" );
//bot stuff
botBiodomedoor1 = worldspawn.getEntityKey( "script_bot_biodome_door_1" );
botBiodomedoor2 = worldspawn.getEntityKey( "script_bot_biodome_door_2" );
// end bot stuff
labequipment_destroyed = worldspawn.getEntityKey( "script_labequipment_destroyed" );
stroggDomesSpawn = worldspawn.getEntityKey( "script_strogg_domes_spawn" );
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
CreateDeployTasks();
gameRules.setWinningTeam( gdfTeam );
gdfTeam.SetRespawnWait( 20 );
stroggTeam.SetRespawnWait( 20 );
gdfTeam.InitRespawnTimeChange();
stroggTeam.InitRespawnTimeChange();
CreateRespawnTimeThread( stroggTeam );
stroggDomesSpawn.setGameTeam( stroggTeam );
stroggDomesSpawn.vSetActive( false );
stroggBaseTerritory.setActive( true );
outpostTerritory.setActive( true );
biodomesTerritory.setActive( false );
estuaryTerritory.setActive( false );
estuarySpawnMaster.setGameTeam( $null_entity );
gdfDomesSpawnMaster.setGameTeam( $null_entity );
churchSpawnMaster.setGameTeam( gdfTeam );
jammerSpawnMaster.setGameTeam ( $null_entity );
jammerSpawnMaster.vSetActive( false );
objective1Arrow1.setGameTeam( stroggTeam );
objective1Arrow2.setGameTeam( stroggTeam );
objective2Arrow1.setGameTeam( stroggTeam );
objective2Arrow2.setGameTeam( stroggTeam );
objective2Arrow3.setGameTeam( stroggTeam );
objective3Arrow1.setGameTeam( stroggTeam );
objective3Arrow2.setGameTeam( stroggTeam );
objective1Arrow1.vStartObjective();
objective1Arrow2.vStartObjective();
objective1Marker.vStartObjective();
objective2Marker.vFinishObjective();
objective3Marker.vFinishObjective();
biodomesMainEntrance.setTakesDamage( 0 );
labEquipment.setTakesDamage( 0 );
generatorDestroyed.hide();
generatorDestroyed.forceDisableClip();
labequipment_destroyed.hide();
objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_JAMMER );
objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_JAMMER );
gameRules.setEndGameCamera( endCameraB );
thread StartFirstObjective();
SetupBotsObjectiveOne();
}
// ----------------------------------------------------------------------
// BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE JAMMING GENERATOR
// ----------------------------------------------------------------------
void mapObject_Ark::SetupBotsObjectiveOne() {
if ( debug_script.getBoolValue() ) {
sys.print( "***** BOTS SETUP FOR GENERATOR OBJECTIVE *****\n" );
}
objManager.setAttackingTeam( STROGG );
objManager.setBotSightDist( 3000.0f );
objManager.killBotAction( "strogg_camp_75" ); // broken mine action
objManager.activateBotActionGroup( ARK_OBJECTIVE_GENERATOR );
objManager.activateBotActionGroup( ARK_STROGG_ATTACK_GENERATOR );
objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_OUTSIDE_TOWN );
objManager.activateBotActionGroup( ARK_GDF_DEFEND_GENERATOR );
objManager.activateBotActionGroup( ARK_GDF_DEPLOY_TOWN );
objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_BASE );
objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_GENERATOR );
objManager.activateBotActionGroup( ARK_GDF_PRIORITY_ISLET_DEPLOY );
objManager.deactivateBotActionGroup ( ARK_GDF_DEFEND_LASER ); // Xian :: Not needed in stage 1
objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_generator_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_destroy_generator_1" );
objManager.setSecondaryTeamAction( GDF, "gdf_generator_mine_priority_1" );
objManager.setSecondaryTeamAction( GDF, "islet_gdf_deploy_1" );
objManager.setBotCriticalClass( STROGG, SOLDIER );
objManager.setBotCriticalClass( GDF, ENGINEER );
thread NeededClassFirstObjective ();
//objManager.setTeamUseRearSpawn( GDF, false );
//gdfTeam.setTeamRearSpawn( churchSpawnMaster );
gdfTeam.setTeamRearSpawn ( gdfBaseSpawnMaster );
objManager.setTeamUseRearSpawn( GDF, true );
objManager.setTeamUseRearSpawnPercentage (GDF, 50);
objManager.setTeamUseRearSpawn( STROGG, true );
stroggTeam.setTeamRearSpawn( stroggBaseSpawnMaster );
}
void mapObject_Ark::NeededClassFirstObjective() {
sys.wait (10);
if ( debug_script.getBoolValue() ) {
sys.print( "***** SET UP CLASSES NEEDED FOR FIRST OBJECTIVE *****\n" );
}
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true );
}
// ----------------------------------------------------------------------
void mapObject_Ark::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_ARK_DESTROY_JAMMER ) {
OnDestroyJammer();
} else if ( index == OBJECTIVE_ARK_DESTROY_ENTRANCE ) {
OnEntranceDestroyed();
} else if ( index == OBJECTIVE_ARK_DESTROY_RESEARCH ) {
OnResearchDestroyed();
}
}
void mapObject_Ark::OnMiningLaserDeployed( entity other ) {
other.vCreateMission();
CreateInitialTimedMission( other );
objManager.SetObjectiveEntity( other, OBJECTIVE_ARK_DESTROY_ENTRANCE );
objManager.activateBotActionGroup( ARK_OBJECTIVE_LASER );
objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER );
}
// ----------------------------------------------------------------------
// MINING LASER CONSTRUCTED - DOOR NOT DESTROYED YET
// ----------------------------------------------------------------------
void mapObject_Ark::OnMiningLaserConstructed( entity other ) {
other.vCompleteMission();
StopTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.killBotActionGroup( ARK_OBJECTIVE_LASER );
objManager.killBotActionGroup( ARK_STROGG_DEPLOY_TOWN );
objManager.killBotActionGroup( ARK_STROGG_ATTACK_LASER );
objManager.killBotActionGroup( ARK_GDF_DEFEND_LASER );
objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER );
objManager.setBotTeamRetreatTime( GDF, 10 );
}
handle mapObject_Ark::GetObjectiveMessage( float index ) {
if ( index == OBJECTIVE_ARK_DESTROY_JAMMER ) {
return sys.localizeString( "maps/ark/obj_destroy_jammer" );
}
if ( index == OBJECTIVE_ARK_DESTROY_ENTRANCE ) {
return sys.localizeString( "maps/ark/obj_destroy_ent" );
}
if ( index == OBJECTIVE_ARK_DESTROY_RESEARCH ) {
return sys.localizeString( "maps/ark/obj_destroy_lab" );
}
return g_locStr_BadObjective;
}
void mapObject_Ark::ZapporCallThread() {
sys.wait( 15.f );
zapporCaller.vOnDeploy();
}
void mapObject_Ark::JammerDestroyThread() {
generatorDestroyed.show();
sys.wait( 0.5f );
generatorDestroyed.forceEnableClip();
}
void mapObject_Ark::OnDestroyJammer() {
objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_ENTRANCE );
objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_ENTRANCE );
thread JammerDestroyThread();
jammerEffectsIdle.remove();
jammerEffectsShutdown.vTriggerParticleEffect( 1 );
thread ZapporCallThread();
jammerSpawnMaster.setGameTeam ( stroggTeam );
jammerSpawnMaster.vSetActive( true );
outpostTerritory.setGameTeam( stroggTeam );
churchSpawnMaster.setGameTeam( $null_entity );
churchSpawnMaster.vSetActive( false );
stroggBaseTerritory.setActive( false );
outpostTerritory.setActive( true );
estuaryTerritory.setActive( true );
objective1Arrow1.vFinishObjective();
objective1Arrow2.vFinishObjective();
objective2Arrow1.vStartObjective();
objective2Arrow2.vStartObjective();
objective2Arrow3.vStartObjective();
objective1Marker.vFinishObjective();
objective2Marker.vStartObjective();
biodomesMainEntrance.setTakesDamage( 1 );
objManager.SetObjectiveEntity( $null_entity, -1 );
noplant_generator.remove();
jammer.vCompleteMission();
StopTimedMission();
stroggTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
SetupBotsObjectiveTwo();
}
// ----------------------------------------------------------------------
// BOT OBJECTIVE: CONSTRUCT THE MINING LASER
// ----------------------------------------------------------------------
void mapObject_Ark::SetupBotsObjectiveTwo() {
if ( debug_script.getBoolValue() ) {
sys.print( "***** BOTS SETUP FOR LASER OBJECTIVE *****\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.killBotActionGroup( ARK_OBJECTIVE_GENERATOR );
objManager.killBotActionGroup( ARK_STROGG_ATTACK_GENERATOR );
objManager.killBotActionGroup( ARK_STROGG_DEPLOY_OUTSIDE_TOWN );
objManager.killBotActionGroup( ARK_STROGG_DEPLOY_BASE );
objManager.killBotActionGroup( ARK_GDF_DEFEND_GENERATOR );
objManager.killBotActionGroup( ARK_GDF_DEPLOY_TOWN );
objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_GENERATOR );
//objManager.activateBotActionGroup( ARK_OBJECTIVE_LASER );
objManager.activateBotActionGroup( ARK_STROGG_ATTACK_LASER );
objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_TOWN );
objManager.activateBotActionGroup( ARK_GDF_DEFEND_LASER );
objManager.activateBotActionGroup( ARK_GDF_DEPLOY_ISLET );
//objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER );
objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BASE );
//objManager.activateBotActionGroup( ARK_GDF_PRIORITY_BIODOME_DEPLOY );
objManager.setPrimaryTeamAction( STROGG, "strogg_construct_laser_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_construct_laser_1" );
objManager.setSecondaryTeamAction( GDF, "gdf_priority_mine_laser_1" );
objManager.setSecondaryTeamAction( GDF, "secondary_gdf_deploy_biodome_1" );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, true, true );
gdfTeam.setTeamRearSpawn( gdfBaseSpawnMaster );
objManager.setTeamUseRearSpawn( GDF, true );
stroggTeam.setTeamRearSpawn( stroggBaseSpawnMaster );
objManager.setTeamUseRearSpawn( STROGG, true );
objManager.clearTeamBotBoundEntities( STROGG );
objManager.setBotTeamRetreatTime( GDF, 10 );
}
// ----------------------------------------------------------------------
void mapObject_Ark::EntranceEffectsThread() {
sys.wait( 0.5f );
entrance_smoke.vTriggerParticleEffect( 1 );
biodomesSideEntrance.vTriggerParticleEffect( 1 );
}
void mapObject_Ark::OnEntranceDestroyed() {
objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_RESEARCH );
objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_RESEARCH );
estuaryTerritory.setGameTeam( stroggTeam );
estuarySpawnMaster.setGameTeam( stroggTeam );
gdfDomesSpawnMaster.setGameTeam( gdfTeam );
stroggDomesSpawn.vSetActive( true );
outpostTerritory.setActive( false );
biodomesTerritory.setActive( true );
estuaryTerritory.setActive( true );
objective2Arrow3.vFinishObjective();
objective3Arrow1.vStartObjective();
objective3Arrow2.vStartObjective();
objective2Marker.vFinishObjective();
objective3Marker.vStartObjective();
labEquipment.setTakesDamage( 1 );
objManager.SetObjectiveEntity( labEquipment, OBJECTIVE_ARK_DESTROY_RESEARCH );
labEquipment.vCreateMission();
CreateInitialTimedMission( labEquipment );
thread EntranceEffectsThread();
biodomeDoorMelted.show();
biodomeDoorMeltedSide.show();
biodomeDoorExplosion.vTriggerParticleEffect( 1 );
botBiodomedoor1.activate(botBiodomedoor1);
botBiodomedoor2.activate(botBiodomedoor2);
objManager.enableNode( "BioDomeDoorNode" );
stroggTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
SetupBotsObjectiveThree();
FreeWorldTask( medicDeployTask );
FreeWorldTask( fieldopsDeployTask );
FreeWorldTask( engineerDeployTask );
}
// ----------------------------------------------------------------------
// BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE RESEARCH MATERIALS
// ----------------------------------------------------------------------
void mapObject_Ark::SetupBotsObjectiveThree() {
if ( debug_script.getBoolValue() ) {
sys.print( "***** BOTS SETUP FOR RESEARCH MATERIALS OBJECTIVE *****\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
//objManager.killBotActionGroup( ARK_STROGG_ATTACK_LASER );
//objManager.killBotActionGroup( ARK_GDF_DEFEND_LASER );
objManager.killBotActionGroup( ARK_GDF_DEPLOY_ISLET );
//objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER );
objManager.killBotActionGroup( ARK_GDF_PRIORITY_ISLET_DEPLOY );
objManager.activateBotActionGroup( ARK_OBJECTIVE_FACILITY_SPAWN ); //Strogg forward spawn gubbins
objManager.activateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BIODOME );
objManager.activateBotActionGroup( ARK_OBJECTIVE_SCANNER );
objManager.activateBotActionGroup( ARK_STROGG_ATTACK_SCANNER );
objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_ISLET );
objManager.activateBotActionGroup( ARK_GDF_DEFEND_SCANNER );
objManager.setBotCriticalClass( STROGG, SOLDIER );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true );
objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_scanner_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_destroy_scanner_1" );
//objManager.setSecondaryTeamAction( GDF, "xxx" );
objManager.setSecondaryTeamAction( STROGG, "strogg_forwardspawn_1" );
objManager.setTeamUseRearSpawn( GDF, false );
gdfTeam.setTeamRearSpawn( gdfBaseSpawnMaster );
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( jammerSpawnMaster );
objManager.teamSuicideIfNotNearAction( "strogg_destroy_scanner_1", 4096.0f, GDF );
objManager.setTeamAttacksDeployables( GDF, false );
objManager.setTeamAttacksDeployables( STROGG, false );
}
// ----------------------------------------------------------------------
void mapObject_Ark::ResearchEffectsThread() {
tube_water_1.vTriggerParticleEffect( 1 );
tube_glass_3.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
tube_water_4.vTriggerParticleEffect( 1 );
tube_glass_1.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
tube_water_3.vTriggerParticleEffect( 1 );
sys.wait( 0.1f );
tube_water_2.vTriggerParticleEffect( 1 );
tube_glass_2.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
tube_water_5.vTriggerParticleEffect( 1 );
tube_glass_4.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
tube_water_floor_1.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
tube_water_floor_4.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
tube_water_floor_3.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
tube_water_floor_2.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
tube_water_floor_5.vTriggerParticleEffect( 1 );
}
void mapObject_Ark::OnResearchDestroyed() {
objective3Marker.vFinishObjective();
gameRules.setEndGameCamera( endCameraA );
gameRules.setWinningTeam( stroggTeam );
gameRules.endGame();
objManager.SetObjectiveEntity( $null_entity, -1 );
thread ResearchEffectsThread();
labequipment_destroyed.show();
dnaTubelight01.remove();
dnaTubelight02.remove();
dnaTubelight03.remove();
dnaTubelight04.remove();
dnaTubeStrogg1.vStartObjective();
dnaTubeStrogg2.vStartObjective();
labEquipment.vCompleteMission();
StopTimedMission();
}
void mapObject_Ark::StartFirstObjective() {
sys.wait( 5.f );
objManager.SetObjectiveEntity( jammer, OBJECTIVE_ARK_DESTROY_JAMMER );
jammer.vCreateMission();
CreateInitialTimedMission( jammer );
}
void mapObject_Ark::OnTimeLimitHit() {
FinishTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam );
}
// ----------------------------------------------------------------------
// Bot Forward Spawn Actions
// ----------------------------------------------------------------------
void mapObject_Ark::OnSpawnCaptured( string actionName ) {
if( actionName == "strogg_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "***** STROGG CAPTURED FACILITY SPAWN *****\n" );
}
objManager.deactivateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN );
objManager.deactivateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN );
objManager.deactivateBotActionGroup( ARK_GDF_DEPLOY_BIODOME );
objManager.activateBotActionGroup( ARK_GDF_ATTACK_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_STROGG_DEFEND_FACILITY_SPAWN );
}
}
void mapObject_Ark::OnSpawnLiberated( string actionName ) {
if( actionName == "strogg_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "***** STROGG LOST FACILITY SPAWN *****\n" );
}
objManager.deactivateBotActionGroup( ARK_GDF_ATTACK_FACILITY_SPAWN );
objManager.deactivateBotActionGroup( ARK_STROGG_DEFEND_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN );
objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BIODOME );
}
}
entity mapObject_Ark::GetSpectateEntity() {
if ( jammer != $null_entity ) {
return jammer.vGetSpectateEntity();
}
entity miningLaserMaterials = G_FindMiningLaserMaterials();
if ( miningLaserMaterials == $null_entity ) {
return $null_entity;
}
if ( !miningLaserMaterials.vIsObjectiveComplete() ) {
return miningLaserMaterials.vGetSpectateEntity();
}
if ( labEquipment != $null_entity ) {
return labEquipment.vGetSpectateEntity();
}
return $null_entity;
}
object strogg_test_subject {
boolean activated;
void preinit() {
playCycle( ANIMCHANNEL_ALL, getKey( "anim" ) );
}
void syncFields() {
syncBroadcast( "activated" );
syncCallback( "activated", "OnActivated" );
}
void OnActivated() {
playAnim( ANIMCHANNEL_ALL, getKey( "slump_anim" ) );
}
void vStartObjective() {
activated = true;
OnActivated();
}
}