Kilo-Niner Script
#include common_scripts\utility;
#include maps\_utility;
#include maps\_anim;
#include maps\_hud_util;
#include maps\_vehicle;
main()
{
maps\_blackhawk::main(“vehicle_blackhawk”);
maps\_load::main();
//PRECASHESTRINGS
precacheString( &”DUO_INTRO_LINE_1″ );
precacheString( &”DUO_INTRO_LINE_2″ );
precacheString( &”DUO_INTRO_LINE_3″ );
precacheString( &”DUO_INTRO_LINE_4″ );
precacheString( &”DUO_OBJECTIVE_1″ );
precacheString( &”DUO_OBJECTIVE_2″ );
precacheString( &”DUO_OBJECTIVE_3″ );
precacheString( &”DUO_OBJECTIVE_4″ );
precacheString( &”DUO_OBJECTIVE_5″ );
precacheString( &”DUO_OBJECTIVE_6″ );
precacheString( &”DUO_END_1″ );
precacheString( &”DUO_END_2″ );
precacheString( &”DUO_END_3″ );
precacheString( &”DUO_END_4″ );
precacheString( &”DUO_DIA_INTRO_1″ );
precacheString( &”DUO_DIA_INTRO_2″ );
precacheString( &”DUO_DIA_INTRO_3″ );
precacheString( &”DUO_DIA_INTRO_4″ );
precacheString( &”DUO_QUEST_1″ );
precacheString( &”DUO_QUEST_2″ );
precacheString( &”DUO_QUEST_3″ );
precacheString( &”DUO_QUEST_4″ );
precacheString( &”DUO_QUEST_5″ );
precacheString( &”DUO_QUEST_6″ );
precacheString( &”DUO_CHATTER_1″ );
precacheString( &”DUO_CHATTER_2″ );
precacheString( &”DUO_CHATTER_3″ );
precacheString( &”DUO_CHATTER_4″ );
precacheString( &”DUO_CHATTER_5″ );
precacheString( &”DUO_HUMOR_1″ );
//PLAYER LOADOUT
level.player takeallweapons();
level.player giveWeapon( “USP_silencer” );
level.player giveWeapon( “m4m203_silencer_reflex” );
level.player givemaxammo( “m4m203_silencer_reflex” );
level.player giveWeapon( “fraggrenade” );
level.player giveWeapon( “flash_grenade” );
level.player switchtoWeapon( “m4m203_silencer_reflex” );
level.player setOffhandSecondaryClass( “flash” );
rope = getent(“rope”, “targetname”);
rope hide();
heli = spawn(“script_model”, (-464, 1888, 1000));
heli setmodel(“vehicle_blackhawk_sas”);
//FOG FX
//setExpFog(100, 2500, 0.67, 0.556, 0.39, 0); //FOG – this is more like a dust
//LEVEL INTRO
thread level_intro();
//DOG NO DAMAGE
thread ally_nodamage();
//DOG MINE LOGIC
thread dog_mine_logic();
//MINEFIELD
thread minefields();
thread dog_follow();
}
//Dog follow
dog_follow() //before minefield
{
self endon(“test”);
doggie = getEnt(“ally”, “targetname”);
wait(1);
while(1)
{
doggie setGoalPos(level.player.origin);
wait(1.5);
}
}
dog_follow2() //after minefield
{
doggie = getEnt(“ally”, “targetname”);
while(1)
{
doggie setGoalPos(level.player getOrigin());
wait(1.5);
}
}
//end DOG follow
//INTRO CODE
level_intro()
{
level.player freezecontrols( true );
lines = [];
lines[ lines.size ] = &”DUO_INTRO_LINE_1″;
lines[ “date” ] = &”DUO_INTRO_LINE_2″;
lines[ lines.size ] = &”DUO_INTRO_LINE_3″;
lines[ lines.size ] = &”DUO_INTRO_LINE_4″;
level.intro_offset = ( -1 );
wait_time = 3.0;
thread introscreen_generic_fade_in( “black”, wait_time, 4.0 );
wait( 0.1 );
level.player freezecontrols( false );
maps\_introscreen::introscreen_feed_lines( lines );
wait( wait_time );
thread escape_shellshock();
thread intro_chatter();
}
intro_chatter()
{
wait(6);
lines3 = [];
lines3[ lines3.size ] = &”DUO_DIA_INTRO_3″;
maps\_introscreen::introscreen_feed_lines( lines3 );
thread obj1();
}
introscreen_generic_fade_in( shader, time, fade_time )//NOT MY CODE
{
introblack = newHudElem();
introblack.x = 0;
introblack.y = 0;
introblack.horzAlign = “fullscreen”;
introblack.vertAlign = “fullscreen”;
introblack.foreground = true;
introblack setShader(shader, 640, 480);
wait time;
// Fade out black
introblack fadeOverTime( fade_time );
introblack.alpha = 0;
}
//END INTRO CODE
//DOG and TROOPS TAKE NO DAMAGE
ally_nodamage()
{
allyteam = getentarray(“ally”, “targetname”);
for(i=0;i <allyteam.size; i++)
allyteam[i] thread maps\_utility::magic_bullet_shield();
}
support_nodamage()
{
allyteam = getentarray(“friendly”, “targetname”);
for(i=0;i <allyteam.size; i++)
allyteam[i] thread maps\_utility::magic_bullet_shield();
}
//END TAKE NO DAMAGE
//DOG MINE CODE
dog_mine_logic()
{
//there are 4 dog walking triggers
//delete the trigger after the player goes through
//as triggers are no longer needed
thread dog_mine_1();
thread dog_mine_2();
thread dog_mine_3();
thread dog_mine_4();
}
dog_mine_1()
{
mine1 = getent(“mine1”, “targetname”);
mine1 waittill(“trigger”);
self notify(“test”);
dogmine1 = getent(“ally”, “targetname”);
dogmine1 setGoalNode(getNode(“spot1”, “targetname”));
mine1 delete();
}
dog_mine_2()
{
mine2 = getent(“mine2”, “targetname”);
mine2 waittill(“trigger”);
dogmine2 = getent(“ally”, “targetname”);
dogmine2 setGoalNode(getNode(“spot2”, “targetname”));
mine2 delete();
}
dog_mine_3()
{
mine3 = getent(“mine3”, “targetname”);
mine3 waittill(“trigger”);
dogmine3 = getent(“ally”, “targetname”);
dogmine3 setGoalNode(getNode(“spot3”, “targetname”));
mine3 delete();
}
dog_mine_4()
{
mine4 = getent(“mine4”, “targetname”);
mine4 waittill(“trigger”);
mine4 delete();
dogmine4 = getent(“ally”, “targetname”);
dogmine4 setGoalNode(getNode(“spot4”, “targetname”));
wait(5);
thread dog_follow2();
}
//END DOG MINE CODE
//OBJECTIVES CODE
obj1() //CLEAR CRASH SITE
{
objective_add(1,”active”,&”DUO_OBJECTIVE_1″,getent(“obj1″,”targetname”).origin);
objective_current(1);
//ENEMY WAVE COUNTER LOGIC
while(1)
{
enemy_wave = getentarray(“waveOne”, “targetname”); //MAKES AN ARRAY OF ENEMIES
if(enemy_wave.size == 0) //SIZES THE NEWLY MADE ARRAY
{
break; //BREAK OUT OF THE WHILE LOOP AS WAVE1 ENEMIES ARE ALL DEAD
}
wait(.5); //WAIT BEFORE GOING THROUGH THE LOOP AGAIN
}
objective_state(1,”done”);
wait (2);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_1″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(6);
thread obj2();
}
obj2() //REACH MINEFIELD
{
objt2 = getent(“obj2”, “targetname”);
objective_add(2, “active”,&”DUO_OBJECTIVE_2″,getent(“obj2″,”targetname”).origin);
objective_current(2);
objt2 waittill(“trigger”);
self notify(“test”);
wait(1);
objective_state(2, “done”);
objt2 delete();
autosave_by_name(“Objective 2 Complete”);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_2″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(3);
thread obj3();
}
obj3() //GO THROUGH MINEFIELD
{
objt3 = getent(“obj3”, “targetname”);
objective_add(3, “active”, &”DUO_OBJECTIVE_3″, getent(“obj3”, “targetname”).origin);
objective_current(3);
objt3 waittill(“trigger”);
objective_state(3, “done”);
objt3 delete();
wait(3);
autosave_by_name(“Objective 3 Complete”);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_3″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(5);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_4″;
maps\_introscreen::introscreen_feed_lines( lines );
thread obj4();
wave2 = getentarray(“waveTwo”, “targetname”);
for(i=0; i<wave2.size; i++)
wave2[i] Stalingradspawn();
wait(15);
wave3 = getentarray(“waveThree”, “targetname”);
for(i=0; i<wave3.size; i++)
wave3[i] Stalingradspawn();
}
obj4() //DISABLE RADIO TOWER
{
objt4 = getent(“obj4”, “targetname”);
objective_add(4, “active”, &”DUO_OBJECTIVE_4″, getent(“obj4”, “targetname”).origin);
objective_current(4);
objt4 waittill(“trigger”);
objective_state(4, “done”);
objt4 delete();
doorway = getent(“door”, “targetname”);
doorway delete();
wait(3);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_5″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(3);
thread obj5();
//spawn waveFour
autosave_by_name(“Objective 4 Complete”);
badcover = getentarray(“firstcover”, “targetname”);
for(i=0; i< badcover.size; i++)
badcover[i] delete();
//Enemies at LZ
wave4 = getentarray(“waveFour”, “targetname”);
for(i=0; i<wave4.size; i++)
wave4[i] Stalingradspawn();
}
obj5() //DISABLE AA
{
objt5 = getent(“obj5”, “targetname”);
objective_add(5, “active”, &”DUO_OBJECTIVE_5″, getent(“obj5”, “targetname”).origin);
objective_current(5);
objt5 waittill(“trigger”);
objective_state(5, “done”);
objt5 delete();
wait(2);
//NEXT OBJECTIVE DIA
lines = [];
lines[ lines.size ] = &”DUO_QUEST_6″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(2);
thread obj6();
thread radio_chatter();
//spawn waveFive
wait(5);
wave5 = getentarray(“waveFive”, “targetname”);
for(i=0; i<wave5.size; i++)
wave5[i] Stalingradspawn();
autosave_by_name(“Objective 6 Complete”);
endgate = getent(“finalgate”, “targetname”);
endgate delete();
//heli = spawn(“script_model”, (-464, 1888, 1000));
//heli setmodel(“vehicle_blackhawk_sas”);
rope = getent(“rope”, “targetname”);
rope show();
support_nodamage();
}
obj6() //RETURN FOR EVAC
{
objt6 = getent(“obj6”, “targetname”);
objective_add(6, “active”, &”DUO_OBJECTIVE_6″, getent(“obj6”, “targetname”).origin);
objective_current(6);
objt6 waittill(“trigger”);
objective_state(6, “done”);
objt6 delete();
thread missionend();
}
//END OBJECTIVES CODE
//RADIO CHATTER
radio_chatter()
{
//CHATTER
lines = [];
lines[ lines.size ] = &”DUO_CHATTER_1″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(4);
//CHATTER
lines = [];
lines[ lines.size ] = &”DUO_CHATTER_2″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(4);
//CHATTER
lines = [];
lines[ lines.size ] = &”DUO_CHATTER_3″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(4);
//CHATTER
lines = [];
lines[ lines.size ] = &”DUO_CHATTER_4″;
maps\_introscreen::introscreen_feed_lines( lines );
wait(4);
//CHATTER
lines = [];
lines[ lines.size ] = &”DUO_CHATTER_5″;
maps\_introscreen::introscreen_feed_lines( lines );
}
//END RADIO CHATTER
//LEVEL COMPLETE & CREDITS
missionend()
{
fade_wait_time = 10.0;
fade_time = 2.5;
thread credits_generic_fade_in( “black”, fade_wait_time, fade_time );
wait( fade_time );
elines = [];
elines[ elines.size ] = &”DUO_END_1″;
elines[ elines.size ] = &”DUO_END_2″;
maps\_introscreen::introscreen_feed_lines( elines );
wait( 5.0 );
changelevel( “” ); //LOADS MAIN MENU
}
// Borrowed from “Weapons Free” by Carlos Pineda
credits_generic_fade_in( shader, time, fade_time )
{
introblack = newHudElem();
introblack.x = 0;
introblack.y = 0;
introblack.horzAlign = “fullscreen”;
introblack.vertAlign = “fullscreen”;
introblack.foreground = true;
introblack setShader(shader, 640, 480);
introblack.alpha = 0;
introblack fadeOverTime( fade_time );
introblack.alpha = 1;
wait( time );
}
//END LEVEL COMPLETE & CREDITS
//SINGLE PLAYER MINEFIELD
minefields()
{
minefields = getentarray(“minefield”, “targetname”);
if (minefields.size > 0)
{
level._effect[“mine_explosion”] = loadfx (“explosions/grenadeExp_dirt”);
}
for(i = 0; i < minefields.size; i++)
{
minefields[i] thread minefield_think();
}
}
minefield_think()
{
while (1)
{
self waittill (“trigger”,other);
if(isPlayer(other))
other thread minefield_kill(self);
}
}
minefield_kill(trigger)
{
if(isDefined(self.minefield))
return;
self.minefield = true;
self playsound (“minefield_click”);
wait(.5);
wait(randomFloat(.5));
if(isdefined(self) && self istouching(trigger))
{
origin = self getorigin();
range = 300;
maxdamage = 2000;
mindamage = 50;
self playsound(“explo_mine”);
playfx(level._effect[“mine_explosion”], origin);
radiusDamage(origin, range, maxdamage, mindamage);
}
self.minefield = undefined;
}
//END MINEFIELD
// —————————————————————————-
// Shellshock sequence borrowed and modified from Cargoship
// —————————————————————————-
escape_shellshock()
{
thread escape_shellshock_vision();
thread escape_shellshock_heartbeat();
level.player PlayRumbleOnEntity( “tank_rumble” );
level thread notify_delay(“stop_heartbeat_sound”, 18);
}
blur_overlay( target, time )
{
setblur( target, time );
}
exp_fade_overlay( target_alpha, fade_time )
{
self notify(“exp_fade_overlay”);
self endon(“exp_fade_overlay”);
fade_steps = 4;
step_angle = 90 / fade_steps;
current_angle = 0;
step_time = fade_time / fade_steps;
current_alpha = self.alpha;
alpha_dif = current_alpha – target_alpha;
for ( i=0; i<fade_steps; i++ )
{
current_angle += step_angle;
self fadeOverTime( step_time );
if ( target_alpha > current_alpha )
{
fraction = 1 – cos( current_angle );
self.alpha = current_alpha – alpha_dif * fraction;
}
else
{
fraction = sin( current_angle );
self.alpha = current_alpha – alpha_dif * fraction;
}
wait step_time;
}
}
create_overlay_element( shader_name, start_alpha )
{
overlay = newHudElem();
overlay.x = 0;
overlay.y = 0;
overlay setshader ( shader_name, 640, 480);
overlay.alignX = “left”;
overlay.alignY = “top”;
overlay.horzAlign = “fullscreen”;
overlay.vertAlign = “fullscreen”;
overlay.alpha = start_alpha;
return overlay;
}
stairwell_shellshock_vision()
{
black_overlay = create_overlay_element( “black”, 0 );
//blinking
black_overlay delayThread(1.5, ::exp_fade_overlay, 1, .5 );
black_overlay delayThread(2.25, ::exp_fade_overlay, 0, .5 );
//blurring
delayThread(.75, ::blur_overlay, 4.8, .5);
delayThread(1.25, ::blur_overlay, 0, 4);
//breathing sounds
level.player delayThread(1.5, ::play_sound_on_entity, “breathing_hurt_start”);
level.player delayThread(2.5, ::play_sound_on_entity, “breathing_hurt”);
black_overlay destroy();
}
escape_shellshock_vision()
{
black_overlay = create_overlay_element( “black”, 0 );
//blinking
black_overlay delayThread(1.5, ::exp_fade_overlay, 1, .5 );
black_overlay delayThread(2.25, ::exp_fade_overlay, 0, .5 );
black_overlay delayThread(3, ::exp_fade_overlay, .5, .25 );
black_overlay delayThread(3.25, ::exp_fade_overlay, 0, .25 );
black_overlay delayThread(5, ::exp_fade_overlay, 1, .5 );
black_overlay delayThread(6, ::exp_fade_overlay, 0, .5 );
black_overlay delayThread(10, ::exp_fade_overlay, 1, .5 );
black_overlay delayThread(10.75, ::exp_fade_overlay, 0, .5 );
black_overlay delayThread(13, ::exp_fade_overlay, 1, .5 );
black_overlay delayThread(13.75, ::exp_fade_overlay, 0, .5 );
//blurring
delayThread(.75, ::blur_overlay, 4.8, .5);
delayThread(1.25, ::blur_overlay, 0, 4);
delayThread(7.25, ::blur_overlay, 4.8, 2);
delayThread(9.25, ::blur_overlay, 0, 2);
delayThread(13, ::blur_overlay, 7.2, 1);
delayThread(14, ::blur_overlay, 0, 1);
//breathing sounds
level.player delayThread(1.5, ::play_sound_on_entity, “breathing_hurt_start”);
level.player delayThread(2.5, ::play_sound_on_entity, “breathing_hurt”);
level.player delayThread(4, ::play_sound_on_entity, “breathing_hurt”);
level.player delayThread(5, ::play_sound_on_entity, “breathing_hurt”);
level.player delayThread(8.5, ::play_sound_on_entity, “breathing_hurt”);
level.player delayThread(11, ::play_sound_on_entity, “breathing_hurt”);
level.player delayThread(13, ::play_sound_on_entity, “breathing_better”);
level.player delayThread(16, ::play_sound_on_entity, “breathing_better”);
level.player delayThread(21, ::play_sound_on_entity, “breathing_better”);
level.player delayThread(24, ::play_sound_on_entity, “breathing_better”);
black_overlay destroy();
}
escape_shellshock_heartbeat()
{
level endon(“stop_heartbeat_sound”);
interval = -.5;
while(1)
{
level.player play_sound_on_entity(“breathing_heartbeat”);
if(interval > 0)
wait interval;
interval += .1;
}
}
//END SHELLSHOCK