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

 

 

Leave a comment