cod4-sdk/raw/maps/killhouse_code.gsc
2008-01-19 00:00:00 +00:00

2654 lines
No EOL
68 KiB
Text
Raw Blame History

#include common_scripts\utility;
#include maps\_utility;
#include maps\_anim;
#include maps\_debug;
#include maps\killhouse;
#include maps\killhouse_anim;
#include maps\_hud_util;
new_look_training_setup()
{
aim_down_target = getEnt( "aim_down_target", "targetname" );
aim_up_target = getEnt( "aim_up_target", "targetname" );
aim_down_target rotateto ( aim_down_target.angles + (0,0,-90), .25, 0, 0 );
aim_up_target rotateto ( aim_down_target.angles + (0,0,90), .25, 0, 0 );
}
new_look_wait_for_target( up, down)
{
self setCanDamage( true );
self rotateto ( self.angles + (0,0,up), .25, 0, 0 );
self playSound( "killhouse_target_up" );
while ( 1 )
{
self waittill ( "damage", amount, attacker, direction_vec, point, cause );
if ( isADS() )
break;
else
{
if ( level.Xenon )
thread keyHint( "ads_360" );
else
thread keyHint( "ads" );
}
}
self playSound( "killhouse_buzzer" );
self playSound( "killhouse_target_up" );
self rotateto ( self.angles + (0,0,down), .25, 0, 0 );
}
rope_obj()
{
level endon ( "starting_cargoship_obj" );
setObjectiveString( "obj_price", &"KILLHOUSE_SLIDE_DOWN_THE_ROPE" );
top_of_rope = getent( "top_of_rope", "targetname" );
setObjectiveLocation( "obj_price", top_of_rope );
}
level_scripted_unloadnode()
{
while(1)
{
self waittill ("trigger",helicopter );
helicopter vehicle_detachfrompath();
helicopter setspeed( 20,20 );
helicopter vehicle_land();
//helicopter notify ("unload");
//helicopter waittill ("unloaded");
//ai = getnonridingai();
//helicopter thread maps\_vehicle::vehicle_load_ai( ai ); // -Nate. I changed this comment just incase you decide to enable uncomment.
//helicopter notify ("load",ai);
//helicopter waittill ("loaded");
wait 10;
helicopter vehicle_resumepath();
}
}
ambient_trucks()
{
trigger = getent ( "se_truck_trigger", "targetname" );
while ( 1 )
{
//trigger notify ( "trigger" );
group = randomint( 8 );
vehicles = maps\_vehicle::create_vehicle_from_spawngroup_and_gopath( group );
for ( i = 0; i < vehicles.size; i++ )
{
speed = randomintrange ( 30, 50 );
vehicles [ i ] setspeed ( speed, 30, 30 );
}
wait ( randomintrange ( 3, 6 ) );
}
}
delay_objective_after_intro()
{
registerObjective( "obj_rifle", &"KILLHOUSE_PICK_UP_A_RIFLE_FROM", getEnt( "obj_rifle_ammo", "targetname" ) );
wait 3;
setObjectiveState( "obj_rifle", "current" );
}
waters_think()
{
level.waters = getent("waters", "script_noteworthy");
assert( isDefined( level.waters ) );
level.waters.animname = "gaz";
level.waters.disablearrivals = true;
level.waters.disableexits = true;
level.waters.lastSpeakTime = 0;
level.waters.lastNagTime = 0;
level.waters.speaking = false;
//level.waters pushplayer( true );
}
newcastle_think()
{
flag_wait ( "spawn_frags" );
spawner = getent("nwc", "script_noteworthy");
assert( isDefined( spawner ) );
level.newcastle = spawner spawn_ai();
level.newcastle.animname = "nwc";
level.newcastle.disablearrivals = true;
level.newcastle.disableexits = true;
level.newcastle.lastSpeakTime = 0;
level.newcastle.lastNagTime = 0;
level.newcastle.speaking = false;
//level.newcastle pushplayer( true );
}
mac_think()
{
level.mac = getent("mac", "script_noteworthy");
assert( isDefined( level.mac ) );
level.mac.animname = "mac";
level.mac.disablearrivals = true;
level.mac.disableexits = true;
level.mac.lastSpeakTime = 0;
level.mac.lastNagTime = 0;
level.mac.speaking = false;
//level.mac pushplayer( true );
}
price_think()
{
level.price = getent("price", "script_noteworthy");
assert( isDefined( level.price ) );
level.price.animname = "price";
level.price.disablearrivals = true;
level.price.disableexits = true;
level.price.lastSpeakTime = 0;
level.price.lastNagTime = 0;
level.price.speaking = false;
level.price pushplayer( true );
}
clear_hints_on_flag( msg )
{
flag_wait ( msg );
clear_hints();
}
generic_compass_hint_reminder( msg, time )
{
thread clear_hints_on_flag( msg );
level endon ( msg );
wait time;
compass_hint();
wait 2;
timePassed = 6;
for ( ;; )
{
if ( timePassed > 20.0 )
{
thread compass_reminder();
RefreshHudCompass();
timePassed = 0;
}
timePassed += 0.05;
wait ( 0.05 );
}
}
objective_hints( completion_flag )
{
level endon ( "mission failed" );
level endon ( "navigationTraining_end" );
level endon ( "reveal_dialog_starting" );
compass_hint();
wait 2;
if ( level.Console )
{
if ( level.Xenon )
keyHint( "objectives", 6.0);
else
hint( &"KILLHOUSE_HINT_CHECK_OBJECTIVES_SCORES_PS3", 6 );
}
else
{
keyHint( "objectives_pc", 6.0);
}
//level.marine1.lastNagTime = getTime();
timePassed = 16;
for ( ;; )
{
//if( distance( level.player.origin, level.marine1.origin ) < 512 )
// level.marine1 nagPlayer( "squadwaiting", 15.0 );
if ( !flag( completion_flag ) && timePassed > 20.0 )
{
//hint( &"KILLHOUSE_HINT_OBJECTIVE_REMINDER", 6.0 );
thread compass_reminder();
RefreshHudCompass();
//wait( 0.5 );
//thread hint( &"KILLHOUSE_HINT_OBJECTIVE_REMINDER2", 10.0 );
timePassed = 0;
}
timePassed += 0.05;
wait ( 0.05 );
}
}
add_hint_background( double_line )
{
if ( isdefined ( double_line ) )
level.hintbackground = createIcon( "popmenu_bg", 650, 50 );
else
level.hintbackground = createIcon( "popmenu_bg", 650, 30 );
level.hintbackground.hidewheninmenu = true;
level.hintbackground setPoint( "TOP", undefined, 0, 105 );
level.hintbackground.alpha = .5;
level.hintbackground.sort = 0;
}
compass_hint( text, timeOut )
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
level endon ( "clearing_hints" );
double_line = true;
add_hint_background( double_line );
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 110 );
level.hintElem.sort = 0.5;
level.hintElem setText( &"KILLHOUSE_HINT_OBJECTIVE_MARKER" );
level.iconElem = createIcon( "objective", 32, 32 );
level.iconElem.hidewheninmenu = true;
//level.iconElem setPoint( "CENTER", "CENTER", 0, -60 );
level.iconElem setPoint( "TOP", undefined, 0, 155 );
wait 5;
level.iconElem setPoint( "CENTER", "BOTTOM", 0, -20, 1.0 );
level.iconElem scaleovertime(1, 20, 20);
wait .85;
level.iconElem fadeovertime(.15);
level.iconElem.alpha = 0;
wait .5;
level.hintElem fadeovertime(.5);
level.hintElem.alpha = 0;
clear_hints();
}
compass_reminder()
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
level endon ( "clearing_hints" );
double_line = true;
add_hint_background( double_line );
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 110 );
level.hintElem.sort = 0.5;
level.hintElem setText( &"KILLHOUSE_HINT_OBJECTIVE_REMINDER" );
level.iconElem = createIcon( "objective", 32, 32 );
level.iconElem.hidewheninmenu = true;
//level.iconElem setPoint( "CENTER", "CENTER", 0, -60 );
level.iconElem setPoint( "TOP", undefined, 0, 155 );
wait 5;
//setObjectiveLocation( "obj_enter_range", getEnt( "rifle_range_obj", "targetname" ) );
level.iconElem setPoint( "CENTER", "BOTTOM", 0, -20, 1.0 );
level.iconElem scaleovertime(1, 20, 20);
wait .85;
level.iconElem fadeovertime(.15);
level.iconElem.alpha = 0;
wait 2;
level.hintElem fadeovertime(.5);
level.hintElem.alpha = 0;
clear_hints();
}
move_gaz_once_player_past()
{
flag_wait ( "past_gaz" );
//level.waters walk_to ( getnode ( "stationone_node", "script_noteworthy" ) );
temp = getnode ( "stationone_node", "script_noteworthy" );
node = spawn( "script_origin", temp.origin + (0,12,0) );
node.angles = temp.angles;
level.waters.ref_node = node;
node anim_generic_reach_and_arrive( level.waters, "killhouse_gaz_idle_arrive" );
level.waters.ref_node thread anim_loop_solo( level.waters, "killhouse_gaz_idleB", undefined, "stop_loop" );
flag_set( "gaz_in_idle_position" );
}
move_gaz_fake()
{
temp = getnode ( "stationone_node", "script_noteworthy" );
node = spawn( "script_origin", temp.origin + (0,12,0) );
node.angles = temp.angles;
level.waters.ref_node = node;
level.waters.ref_node thread anim_loop_solo( level.waters, "killhouse_gaz_idleB", undefined, "stop_loop" );
flag_set( "gaz_in_idle_position" );
}
fail_on_damage()
{
while ( 1 )
{
self waittill ( "damage", damage, attacker, parm1, parm2, damageType );
if ( attacker == level.player )
maps\_friendlyfire::missionfail();
}
}
fail_if_friendlies_in_line_of_fire()
{
grenade = true;
flash = true;
level endon ( "okay_if_friendlies_in_line_of_fire" );
while ( true )
{
msg = level.player waittill_any_return( "weapon_fired", "player_flash", "player_frag" );
if ( !isdefined(msg) )
break;
if ( msg == "weapon_fired" )
{
weap = level.player getCurrentWeapon();
//ignore if melee
if ( weap == "c4" )
continue;
}
if ( msg == "player_frag" && isdefined( grenade ) )
{
if ( ! level.player isthrowinggrenade() )
continue;//no ammo
wait 1;
//continue;
}
if ( msg == "player_flash" && isdefined( flash ) )
{
if ( ! level.player isthrowinggrenade() )
continue;
wait 1;
//continue;
}
allies = getaiarray( "allies" );
for ( i = 0; i < allies.size; i++ )
{
qBool = within_fov( level.player.origin, level.player.angles, allies[ i ].origin, cos( 25 ) );
dist = distance ( level.player.origin, allies[ i ].origin );
if ( ( qBool ) && ( dist < 1000 ) )
{
level notify ( "mission failed" );
setDvar("ui_deadquote", &"KILLHOUSE_FIRED_NEAR_FRIENDLY");
maps\_utility::missionFailedWrapper();
}
}
}
}
setup_player_action_notifies()
{
wait 1;
// level.player notifyOnCommand( "player_gun", "+attack" );
level.player notifyOnCommand( "player_frag", "+frag" );
level.player notifyOnCommand( "player_flash", "-smoke" );
}
vision_trigger( vision_file )
{
while ( 1 )
{
self waittill ( "trigger" );
set_vision_set( vision_file, 1 );
while ( level.player istouching ( self ) )
wait .1;
}
}
flashed_hud_elem()
{
while ( 1 )
{
if ( level.player isFlashed() )
level notify ( "flashed" );
else
level notify ( "not_flashed" );
wait .2;
}
}
flashed_debug()
{
while ( 1 )
{
level waittill ( "flashed" );
flashed = maps\_hud_util::get_countdown_hud();
flashed.y = 130;
flashed setText( &"KILLHOUSE_YOUR_TIME" );
//flashed.label = &"KILLHOUSE_YOUR_TIME";
level waittill ( "not_flashed" );
flashed destroy();
}
}
flag_when_lowered( flag )
{
level.targets_hit = 0;
targetDummies = getTargetDummies( "rifle" );
numRaised = targetDummies.size;
while ( level.targets_hit < numRaised )
wait ( 0.05 );
flag_set ( flag );
}
ADS_shoot_dialog()
{
wait .4;
if ( !flag( "ADS_targets_shot" ) )
{
if( level.Console )
thread keyHint( "attack" );
else
thread keyHint( "pc_attack" );
//Now. Shoot - each - target, while aiming down the sights.
level.waters execDialog( "shooteachtarget" );
}
flag_set( "ADS_shoot_dialog" );
}
deck_start()
{
deck_start = getent( "deck_start", "targetname" );
level.player setOrigin( deck_start.origin );
level.player setPlayerAngles( deck_start.angles );
level.player giveWeapon("g36c");
level.player giveWeapon("mp5");
level.player switchtoWeapon("mp5");
flag_set ( "start_deck" );
}
deck_training()
{
deck_targets = getentarray( "deck_target", "script_noteworthy" );
array_thread( deck_targets, ::cargoship_targets );
flag_wait ( "start_deck" );
registerObjective( "obj_deck", &"KILLHOUSE_COMPLETE_THE_DECK_MOCKUP", getent( "area_two_one", "targetname" ) );
setObjectiveState( "obj_deck", "current" );
one = getent( "area_two_one", "targetname" );
two = getent( "area_two_two", "targetname" );
three = getent( "area_two_three", "targetname" );
four = getent( "area_two_four", "targetname" );
five = getent( "area_two_five", "targetname" );
finish = getent( "area_two_finish", "targetname" );
first_time = true;
while ( 1 )
{
one waittill ( "trigger" );
thread add_dialogue_line( "price", "Get ready..." );
wait 2;
thread add_dialogue_line( "price", "Go go go!!" );
thread accuracy_bonus();
thread startTimer( 60 );
if ( isdefined ( level.IW_best ) )
level.IW_best destroy();
thread autosave_by_name( "starting_deck_attack" );
one pop_up_and_wait();
level.price thread execDialog( "position2" ); //Position 2 go!
setObjectiveLocation( "obj_deck", two );
two pop_up_and_wait();
level.price thread execDialog( "position3" ); //Go to Position 3!
setObjectiveLocation( "obj_deck", three );
three pop_up_and_wait();
level.price thread execDialog( "position4" ); //Position 4!
setObjectiveLocation( "obj_deck", four );
four pop_up_and_wait();
thread add_dialogue_line( "price", "Position five go!!" );
setObjectiveLocation( "obj_deck", five );
five pop_up_and_wait();
thread add_dialogue_line( "price", "Final position go!!" );
setObjectiveLocation( "obj_deck", finish );
finish waittill ( "trigger" );
level notify ( "test_cleared" );
killTimer( 15.85, true );
setObjectiveState( "obj_deck", "done" );
thread add_dialogue_line( "price", "Not bad, but not that good either." );
thread add_dialogue_line( "price", "Go back to position one if you want try for a better time." );
thread add_dialogue_line( "price", "Otherwise come over to the monitors for a debrief." );
if ( first_time )
thread debrief();
first_time = false;
}
}
get_randomized_targets()
{
tokens = strtok( self.script_linkto, " " );
targets = [];
for ( i=0; i < tokens.size; i++ )
{
token = tokens[ i ];
target = getent( token, "script_linkname" );
if ( isdefined( target ) )
{
targets = add_to_array( targets, target );
continue;
}
}
targets = array_randomize( targets );
return targets;
}
pop_up_and_wait()
{
self waittill ( "trigger" );
deck_targets = self get_randomized_targets();
targets_needed = 0;
level.targets_hit = 0;
friendlies_up = [];
j = 0;
for ( i = 0; targets_needed < 3; i++ )
{
wait randomfloatrange (.25, .4);
deck_targets[ i ] notify ( "pop_up" );
if ( deck_targets[ i ].targetname == "hostile" )
targets_needed++;
else
{
friendlies_up[ j ] = deck_targets[ i ];
j++;
}
}
//level.price thread execDialog( "hittargets" ); //Hit the targets!
while ( level.targets_hit != targets_needed )
wait ( .05 );
if ( friendlies_up.size > 0 )
{
for ( k = 0; k < friendlies_up.size; k++ )
friendlies_up[ k ] notify ( "pop_down" );
}
}
jumpoff_monitor()
{
level endon ( "starting_rope" );
self waittill ( "trigger" );
level notify ( "mission failed" );
if ( flag ( "activate_rope" ) )
setDvar("ui_deadquote", &"KILLHOUSE_SHIP_JUMPED_OFF");
else
setDvar("ui_deadquote", &"KILLHOUSE_SHIP_JUMPED_TOO_EARLY");
maps\_utility::missionFailedWrapper();
}
flashbang_ammo_monitor ( flash_volumes )
{
level endon ( "test_cleared" );
level.volumes_flashed = 0;
while ( 1 )
{
level.player waittill ( "grenade_fire", grenade, weaponName );
grenade waittill ( "death" );
waittillframeend;
flashes_needed = flash_volumes.size - level.volumes_flashed;
if ( ( level.player GetWeaponAmmoStock( "flash_grenade" ) ) < flashes_needed )
{
level notify ( "mission failed" );
setDvar("ui_deadquote", &"KILLHOUSE_SHIP_OUT_OF_FLASH");
maps\_utility::missionFailedWrapper();
}
}
}
check_if_in_volume( tracker, volume )
{
self waittill ( "death" );
if ( tracker istouching ( volume ) )
{
volume notify ( "flashed" );
level.volumes_flashed++;
}
}
track_grenade_origin( tracker, volume )
{
self endon ( "death" );
volume endon ( "flashed" );
while ( 1 )
{
tracker.origin = self.origin;
wait .05;
}
}
flash_dialog_three( volume )
{
level endon ( "clear_course" );
volume endon ( "flashed" );
self waittill ( "trigger" );
say_first_dialog = true;
while( 1 )
{
if ( ! ( level.player istouching ( self ) ) )
{
if ( say_first_dialog )
{
level.price thread execDialog( "3" ); //3
level.price thread execDialog( "goback" ); //Go back!
say_first_dialog = false;
}
else
{
level.price thread execDialog( "position3" ); //go to 3
//level.price thread execDialog( "followarrows" ); //Follow the arrows on the floor.
say_first_dialog = true;
}
}
else
{
level.price thread execDialog( "flashthrudoor" ); //Flashbang through the door!
thread keyHint( "flash" );
}
//thread add_dialogue_line( "price", "Flash the room!!" );
wait 5;
}
}
flash_dialog_six( volume )
{
level endon ( "clear_course" );
volume endon ( "flashed" );
self waittill ( "trigger" );
say_first_dialog = true;
while( 1 )
{
if ( ! ( level.player istouching ( self ) ) )
{
if ( say_first_dialog )
{
level.price thread execDialog( "goback" ); //Go back!
say_first_dialog = false;
}
else
{
level.price thread execDialog( "6go" ); //Six go!
say_first_dialog = true;
}
}
else
{
level.price thread execDialog( "flashthrudoor" ); //Flashbang through the door!
thread keyHint( "flash" );
}
//thread add_dialogue_line( "price", "Flash the room!!" );
wait 5;
}
}
wait_till_flashed( volume )
{
volume endon ( "flashed" );
assert ( isdefined ( volume ) );
while ( 1 )
{
level.player waittill ( "grenade_fire", grenade, weaponName );
if ( weaponname == "flash_grenade" )
{
tracker = spawn ("script_origin", (0,0,0));
grenade thread track_grenade_origin( tracker, volume );
grenade thread check_if_in_volume( tracker, volume );
}
}
}
wait_till_pos_cleared( skip_trigger )
{
level endon ( "clear_course" );
if ( !isdefined ( skip_trigger ) )
self waittill ( "trigger" );
level.targets_hit = 0;
if ( isdefined ( self.target ) )
{
targets = getentarray( self.target, "targetname" );
for ( i = 0; i < targets.size; i++ )
targets[ i ] notify ( "pop_up" );
level.price thread execDialog( "hittargets" ); //Hit the targets!
time_waited = 0;
while ( level.targets_hit != targets.size )
{
if ( time_waited > 5 )
{
if ( ! level.player istouching ( self ) )
{
go_back = [];
go_back[ 0 ] = "missgoback";
go_back[ 1 ] = "passgoback";
go_back[ 2 ] = "goback";
selection = go_back[ randomint( go_back.size ) ];
level.price thread execDialog( selection );
time_waited = 0;
}
else
{
if ( level.targets_hit > 0 )
{
dialog = [];
dialog[ 0 ] = "shoottarget";
dialog[ 1 ] = "remainingtarg";
dialog[ 2 ] = "hitother";
selection = dialog[ randomint( dialog.size ) ];
level.price thread execDialog( selection );
//thread add_dialogue_line( "price", "Shoot the other target." );
//thread add_dialogue_line( "price", "Shoot the remaining targets." );
//thread add_dialogue_line( "price", "Hit other targets." );
}
else
{
level.price thread execDialog( "hittargets" ); //Hit the targets!
}
time_waited = 0;
}
}
time_waited += 0.05;
wait ( .05 );
}
}
return;
}
rope()
{
top_of_rope_trigger = getent( "top_of_rope_trigger", "targetname" );
top_of_rope_trigger trigger_off();
top_of_rope = getent( "top_of_rope", "targetname" );
bottom_of_rope = getent( "bottom_of_rope", "targetname" );
while ( 1 )
{
flag_wait ( "activate_rope" );
top_of_rope_trigger trigger_on();
top_of_rope_trigger setHintString (&"KILLHOUSE_USE_ROPE");
top_of_rope_trigger waittill ( "trigger" );
level notify ( "starting_rope" );
level.player DisableWeapons();
tag_origin = spawn("script_model", top_of_rope.origin + (0,0,-60) );
tag_origin.angles = top_of_rope.angles;
tag_origin setmodel("tag_origin");
//lerp_player_view_to_tag( tag, lerptime, fraction, right_arc, left_arc, top_arc, bottom_arc )
tag_origin lerp_player_view_to_tag( "tag_origin", .2, .2, 45, 45, 30, 30 );
rope_time = 1.5;
tag_origin moveto ( bottom_of_rope.origin + (0,0,-60), rope_time, 1, .2 );
wait rope_time;
tag_origin delete();
level.player EnableWeapons();
top_of_rope_trigger trigger_off();
}
}
fail_if_damage_waiter()
{
self endon ( "pop_down" );
self waittill ( "damage", amount, attacker, direction_vec, point, cause );
setDvar("ui_deadquote", &"KILLHOUSE_HIT_FRIENDLY");
maps\_utility::missionFailedWrapper();
}
// ****** Get the timer started ****** //
startTimer( timelimit )
{
// destroy any previous timer just in case ****** //
clear_timer_elems();
// destroy timer and thread if objectives completed within limit ****** //
level endon ( "kill_timer" );
level.hudTimerIndex = 20;
level.start_time = gettime();
// Timer size and positioning ****** //
level.timer = maps\_hud_util::get_countdown_hud();
level.timer.label = &"KILLHOUSE_YOUR_TIME";
level.timer settenthstimerUp( .05 );
// Wait until timer expired
wait ( timelimit );
//flag_set ( "timer_expired" );
// Get rid of HUD element and fail the mission
level.timer destroy();
level thread mission_failed_out_of_time();
}
dialog_sprint_reminders()
{
level endon ( "sprinted" );
while ( 1 )
{
wait 8;
level.price thread execDialog( "sprint" );
//thread add_dialogue_line( "price", "Sprint to the finish!" );//new
}
}
mission_failed_out_of_time()
{
level.player endon ( "death" );
level endon ( "kill_timer" );
dialog = [];
dialog[ 0 ] = "startover"; //
dialog[ 1 ] = "doitagain"; //
dialog[ 2 ] = "tooslow"; //
selection = dialog[ randomint( dialog.size ) ];
level.price thread execDialog( selection );
failures = getdvarint( "killhouse_too_slow" );
setdvar( "killhouse_too_slow", ( failures + 1 ) );
level notify ( "mission failed" );
if( !flag( "at_finish" ) )
setDvar("ui_deadquote", &"KILLHOUSE_SHIP_TOO_SLOW");
else
setDvar("ui_deadquote", &"KILLHOUSE_SHIP_DIDNT_SPRINT");
maps\_utility::missionFailedWrapper();
}
clear_timer_elems()
{
if (isdefined (level.timer))
level.timer destroy();
if (isdefined (level.bonus))
level.bonus destroy();
if (isdefined (level.label))
level.label destroy();
if (isdefined (level.IW_best) )
level.IW_best destroy();
if (isdefined (level.recommended_label) )
level.recommended_label destroy();
if (isdefined (level.recommended_label2) )
level.recommended_label2 destroy();
if (isdefined (level.recommended) )
level.recommended destroy();
}
killTimer( best_time, deck )
{
level notify ( "kill_timer" );
clear_timer_elems();
time = ( ( gettime() - level.start_time ) / 1000 );
level.timer = maps\_hud_util::get_countdown_hud();
level.timer.label = &"KILLHOUSE_YOUR_FINAL_TIME";
level waittill ( "accuracy_bonus" );
final_time = time - level.bonus_time;
//iprintlnbold ( "time: " + time );
level.timer setValue ( final_time );
level.IW_best = maps\_hud_util::get_countdown_hud();
level.IW_best.y = 115;
level.IW_best.label = &"KILLHOUSE_IW_BEST_TIME";
level.IW_best setValue ( best_time );
level.recommended_label = maps\_hud_util::get_countdown_hud();
level.recommended_label.label = &"KILLHOUSE_RECOMMENDED_LABEL";
level.recommended_label.y = 145;
level.recommended_label2 = maps\_hud_util::get_countdown_hud();
level.recommended_label2.label = &"KILLHOUSE_RECOMMENDED_LABEL2";
level.recommended_label2.y = 160;
level.recommended = maps\_hud_util::get_countdown_hud();
level.recommended.y = 180;
if ( final_time > 40 )
{
setdvar ( "recommended_gameskill", "0" );
level.recommended.label = &"KILLHOUSE_RECOMMENDED_EASY";
}
else if ( final_time > 26 )
{
setdvar ( "recommended_gameskill", "1" );
level.recommended.label = &"KILLHOUSE_RECOMMENDED_NORMAL";
}
else if ( final_time > 20 )
{
setdvar ( "recommended_gameskill", "2" );
level.recommended.label = &"KILLHOUSE_RECOMMENDED_HARD";
}
else
{
setdvar ( "recommended_gameskill", "3" );
level.recommended.label = &"KILLHOUSE_RECOMMENDED_VETERAN";
}
if( final_time < 20.0 )
maps\_utility::giveachievement_wrapper( "NEW_SQUADRON_RECORD" );
return final_time;
}
accuracy_bonus()
{
guns = level.player GetWeaponsListPrimaries();
gun0 = level.player GetWeaponAmmoStock( guns[0] );
gun1 = level.player GetWeaponAmmoStock( guns[1] );
gunc0 = level.player GetWeaponAmmoClip( guns[0] );
gunc1 = level.player GetWeaponAmmoClip( guns[1] );
starting_ammo = gun0 + gun1 + gunc0 + gunc1;
//iprintlnbold ( "starting_ammo " + starting_ammo );
level waittill ( "test_cleared" );
gun0 = level.player GetWeaponAmmoStock( guns[0] );
gun1 = level.player GetWeaponAmmoStock( guns[1] );
gunc0 = level.player GetWeaponAmmoClip( guns[0] );
gunc1 = level.player GetWeaponAmmoClip( guns[1] );
ending_ammo = gun0 + gun1 + gunc0 + gunc1;
//iprintlnbold ( "ending_ammo " + ending_ammo );
used = starting_ammo - ending_ammo;
//iprintlnbold ( "ammo used: " + used );
allowed_shots = 20;
if ( used > allowed_shots )
excess_ammo = ( used - allowed_shots );
else
excess_ammo = 0;
level.bonus = maps\_hud_util::get_countdown_hud();
level.bonus.y = 85;
level.bonus_time = ( ( 15 - excess_ammo ) * .2 );
if ( level.bonus_time <= 0 )
{
level.bonus.label = &"KILLHOUSE_ACCURACY_BONUS_ZERO";
level.bonus_time = 0;
}
else
{
level.bonus.label = &"KILLHOUSE_ACCURACY_BONUS";
level.bonus setValue ( level.bonus_time );
}
level notify ( "accuracy_bonus" );
}
nagPlayer( nagAnim, minNagTime )
{
if ( self.speaking )
return false;
time = getTime();
if ( time - self.lastSpeakTime < 1.0 )
return false;
if ( time - self.lastNagTime < (minNagTime * 1000) )
return false;
self execDialog( nagAnim );
self.lastNagTime = self.lastSpeakTime;
return true;
}
scoldPlayer( scoldAnim )
{
if ( self.speaking )
return false;
self execDialog( scoldAnim );
return true;
}
execDialog( dialogAnim )
{
//assert( !self.speaking );
self.speaking = true;
//self anim_single_solo( self, dialogAnim );
self anim_single_queue( self, dialogAnim );
self.speaking = false;
self.lastSpeakTime = getTime();
}
actionNodeThink( actionNode )
{
assert( isDefined( actionNode.script_noteworthy ) );
switch( actionNode.script_noteworthy )
{
case "ammo_node":
wait ( 2.0 );
println( self.buddyID + " leaving" );
break;
}
}
getFreeActionNode( curNode )
{
actionNode = undefined;
while ( isDefined( curNode.target ) )
{
nextNode = getNode( curNode.target, "targetname" );
if ( isDefined( nextNode.script_noteworthy ) )
{
if ( nextNode.inUse )
{
if ( !isDefined( actionNode ) )
return curNode;
else
return actionNode;
}
actionNode = nextNode;
}
curNode = nextNode;
}
return actionNode;
}
initActionChain( actionNode )
{
while ( isDefined( actionNode.target ) )
{
actionNode.inUse = false;
actionNode = getNode( actionNode.target, "targetname" );
}
}
actionChainThink( startNode )
{
self setGoalNode( startNode );
self waittill( "goal" );
curNode = startNode;
actionNode = undefined;
while ( !isDefined( actionNode ) )
{
actionNode = getFreeActionNode( curNode );
wait ( 0.05 );
}
while ( isDefined( actionNode ) )
{
actionNode.inUse = true;
while ( curNode != actionNode )
{
curNode = getNode( curNode.target, "targetname" );
self setGoalNode( curNode );
self waittill ( "goal" );
}
self actionNodeThink( actionNode );
while ( isDefined( actionNode ) && curNode == actionNode )
{
actionNode = getFreeActionNode( curNode );
wait ( randomFloatRange( 0.1, 0.5 ) );
}
curNode.inUse = false;
}
while( isDefined( curNode.target ) )
{
curNode = getNode( curNode.target, "targetname" );
self setGoalNode( curNode );
self waittill ( "goal" );
}
}
raisePlywoodWalls()
{
plywoodWalls = getEntArray( "plywood", "script_noteworthy" );
for ( index = 0; index < plywoodWalls.size; index++ )
{
plywoodWalls[index] rotateRoll( 90, 0.25, 0.1, 0.1 );
plywoodWalls[index] playSound( "killhouse_target_up_wood" );
}
}
silently_lowerPlywoodWalls()
{
plywoodWalls = getEntArray( "plywood", "script_noteworthy" );
for ( index = 0; index < plywoodWalls.size; index++ )
{
plywoodWalls[index] rotateRoll( -90, 0.25, 0.1, 0.1 );
}
}
lowerPlywoodWalls()
{
plywoodWalls = getEntArray( "plywood", "script_noteworthy" );
for ( index = 0; index < plywoodWalls.size; index++ )
{
plywoodWalls[index] rotateRoll( -90, 0.25, 0.1, 0.1 );
plywoodWalls[index] playSound( "killhouse_target_up_wood" );
}
}
raiseTargetDummies( group, laneID, dummyID )
{
targetDummies = getEntArray( group + "_target_dummy", "script_noteworthy" );
for ( index = 0; index < targetDummies.size; index++ )
{
targetDummy = targetDummies[index];
if ( isDefined( dummyID ) && targetDummy.dummyID != dummyID )
continue;
if ( isDefined( laneID ) && targetDummy.laneID != laneID )
continue;
if ( targetDummy.raised )
continue;
targetDummies[index] thread moveTargetDummy( "raise" );
}
}
moveTargetDummy( command )
{
self setCanDamage( false );
while ( self.moving )
wait ( 0.05 );
switch( command )
{
case "raise":
if ( !self.raised )
{
self.aim_assist_target enableAimAssist();
speed = 0.25;
//self playSound( "killhouse_target_up" );
self playSound( "killhouse_target_up_metal" );
self.orgEnt rotatePitch( 90, speed, 0.1, 0.1 );
wait ( 0.25 );
self.raised = true;
self.light light_on();
//if ( self.laneID == 1 )
// self enableAimAssist();
self setCanDamage( true );
}
break;
case "lower":
if ( self.raised )
{
speed = 0.75;
self.orgEnt rotatePitch( -90, speed, 0.25, 0.25 );
wait ( 0.75 );
self.raised = false;
self.light light_off();
self playSound( "killhouse_target_up" );
//if ( self.laneID == 1 )
// self disableAimAssist();
self.aim_assist_target disableAimAssist();
}
break;
}
}
lowerTargetDummies( group, laneID, dummyID )
{
targetDummies = getEntArray( group + "_target_dummy", "script_noteworthy" );
for ( index = 0; index < targetDummies.size; index++ )
{
targetDummy = targetDummies[index];
if ( isDefined( dummyID ) && targetDummy.dummyID != dummyID )
{
continue;
}
if ( isDefined( laneID ) && targetDummy.laneID != laneID )
continue;
if ( !targetDummy.raised )
continue;
targetDummies[index] thread moveTargetDummy( "lower" );
}
}
training_targetDummies( group )
{
targetDummies = getTargetDummies( group );
for ( index = 0; index < targetDummies.size; index++ )
targetDummies[index] thread targetDummyThink();
}
targetDummyThink()
{
self.orgEnt = getEnt( self.target, "targetname" );
assert( isdefined( self.orgEnt ) );
self linkto (self.orgEnt);
self.dummyID = int( self.script_label );
self.laneID = int( self.targetname[4] );
self.aim_assist_target = getEnt( self.orgEnt.target, "targetname" );
self.aim_assist_target hide();
self.aim_assist_target notsolid();
self.light = getEnt( self.aim_assist_target.target, "targetname" );
self.light light_off();
self.orgEnt rotatePitch( -90, 0.25 );
self.raised = false;
self.moving = false;
stall = getEnt( "rifleTraining_stall", "targetname" );
level.waters_speaking = false;
level.waters_last_line = 0;
for( ;; )
{
while ( 1 )
{
self waittill ( "damage", amount, attacker, direction_vec, point, cause );
if ( ! ( level.player istouching ( stall ) ) )
{
self target_down();
if ( level.waters_speaking != true )
{
dialog = [];
dialog[ 0 ] = "gotostation1"; //Soap! Go to Station One.
dialog[ 1 ] = "heygo"; //Hey. Go to Station One.
dialog[ 2 ] = "getback"; //Oi, where are you going? Get back to Station One<6E>
selection = dialog[ randomint( dialog.size ) ];
level.waters_speaking = true;
level.waters execDialog( selection );
level.waters_speaking = false;
}
self moveTargetDummy( "raise" );
continue;
}
double_line = true;
if ( level.hip_fire_required )
{
if ( isADS() )
{
thread keyHint( "stop_ads", 2, double_line );
self target_down();
if ( level.waters_speaking != true )
{
level.waters_speaking = true;
dialog = [];
dialog[ 0 ] = "stopaiming"; //Stop aiming down your sights.
dialog[ 1 ] = "seeyoufire"; //I want to see you fire from the hip.
if ( level.waters_last_line == 0 )
{
level.waters execDialog( "stopaiming" );
level.waters_last_line = 1;
}
else
{
level.waters execDialog( "seeyoufire" );
level.waters_last_line = 0;
}
level.waters_speaking = false;
}
self moveTargetDummy( "raise" );
continue;
}
}
break;
}
self notify ( "hit" );
level.targets_hit++;
self playSound( "killhouse_buzzer" );
self target_down();
}
}
target_down()
{
self.health = 1000;
self playSound( "killhouse_target_up" );
self.moving = true;
self.aim_assist_target disableAimAssist();
self setCanDamage( false );
self.orgEnt rotatePitch( -90, 0.25 );
wait ( 0.5 );
self.raised = false;
self.moving = false;
self.light light_off();
}
cargoship_targets()
{
orgEnt = getEnt( self.target, "targetname" );
assert( isdefined( orgEnt ) );
self linkto (orgEnt);
//self.origin = orgEnt.origin;
//self.angles = orgEnt.angles;
if ( ! isdefined ( orgEnt.script_noteworthy ) )
orgEnt.script_noteworthy = "standard";
if (orgEnt.script_noteworthy == "reverse" )
orgEnt rotatePitch( 90, 0.25 );
else
orgEnt rotatePitch( -90, 0.25 );
aim_assist_target = getEnt( orgEnt.target, "targetname" );
aim_assist_target hide();
aim_assist_target notsolid();
while ( 1 )
{
self waittill ( "pop_up" );
wait randomfloatrange (0, .2);
//self playSound( "killhouse_target_up" );
self playSound( "killhouse_target_up_metal" );
self setCanDamage( true );
if ( self.targetname != "friendly" )
aim_assist_target enableAimAssist();
if (orgEnt.script_noteworthy == "reverse" )
orgEnt rotatePitch( -90, 0.25 );
else
orgEnt rotatePitch( 90, 0.25 );
wait .25;
if ( self.targetname == "friendly" )
{
self fail_if_damage_waiter();
}
else
{
while ( 1 )
{
self waittill ( "damage", amount, attacker, direction_vec, point, type );
if( type == "MOD_IMPACT" )
continue;
else
break;
}
self notify ( "hit" );
self.health = 1000;
level.targets_hit++;
self playSound( "killhouse_buzzer" );
self playSound( "killhouse_target_up" );
aim_assist_target disableAimAssist();
}
if (orgEnt.script_noteworthy == "reverse" )
orgEnt rotatePitch( 90, 0.25 );
else
orgEnt rotatePitch( -90, 0.25 );
self setCanDamage( false );
wait .25;
}
}
getTargetDummies( group, laneID, dummyID )
{
groupTargetDummies = getEntArray( group + "_target_dummy", "script_noteworthy" );
targetDummies = [];
for ( index = 0; index < groupTargetDummies.size; index++ )
{
targetDummy = groupTargetDummies[index];
if ( isDefined( dummyID ) && targetDummy.dummyID != dummyID )
continue;
if ( isDefined( laneID ) && targetDummy.laneID != laneID )
continue;
targetDummies[targetDummies.size] = targetDummy;
}
if ( isDefined( laneID ) && isDefined( dummyID ) )
{
assert( targetDummies.size == 1 );
}
return targetDummies;
}
set_ammo()
{
if ( (self.classname == "weapon_fraggrenade") || (self.classname == "weapon_flash_grenade") )
self ItemWeaponSetAmmo( 1, 0 );
else
self ItemWeaponSetAmmo( 999, 999 );
}
ammoRespawnThink( flag, type, obj_flag )
{
wait .2; //timing
weapon = self;
ammoItemClass = weapon.classname;
ammoItemOrigin = ( weapon.origin + (0,0,8) ); //wont spawn if inside something
ammoItemAngles = weapon.angles;
weapon set_ammo();
obj_model = undefined;
if ( isdefined ( weapon.target ) )
{
obj_model = getent ( weapon.target, "targetname" );
obj_model.origin = weapon.origin;
obj_model.angles = weapon.angles;
}
if ( type == "flash_grenade" )
ammo_fraction_required = 1;
else
ammo_fraction_required = .2;
if ( isdefined ( flag ) )
{
//self delete();
self.origin = self.origin + (0, 0, -10000);
if ( isdefined ( obj_model ) )
obj_model hide();
flag_wait ( flag );
if ( isdefined ( obj_model ) )
obj_model show();
self.origin = self.origin + (0, 0, 10000);
//weapon = spawn ( ammoItemClass, ammoItemOrigin );
//weapon.angles = ammoItemAngles;
weapon set_ammo();
}
//if ( isdefined ( obj_model ) )
// obj_model hide();//temp hiding of glowing weapons
if ( ( isdefined ( obj_model ) ) && ( isdefined ( obj_flag ) ) )
obj_model thread delete_if_obj_complete( obj_flag );
weapon waittill ( "trigger" );
if ( isdefined ( obj_model ) )
obj_model delete();
while ( 1 )
{
wait 1;
if ( ( level.player GetFractionMaxAmmo( type ) ) < ammo_fraction_required )
{
while ( distance( level.player.origin, ammoItemOrigin ) < 160 )
wait 1;
//if ( level.player pointInFov( ammoItemOrigin ) )
// continue;
weapon = spawn ( ammoItemClass, ammoItemOrigin, 1 ); //suspended bit flag
//weapon = spawn ( "weapon_mp5", ammoItemOrigin );
weapon.angles = ammoItemAngles;
weapon set_ammo();
wait .2;
weapon.origin = ( ammoItemOrigin + (0,0,-8) );
//weapon.angles = ammoItemAngles;
//weapon waittill ( "trigger" );
while ( isdefined ( weapon ) )
wait 1;
}
}
}
delete_if_obj_complete( obj_flag )
{
self endon ( "death" );
flag_wait ( obj_flag );
self delete();
}
test2( type )
{
while (1)
{
println ( type + " " + (level.player GetFractionMaxAmmo( type ) ) );
wait 1;
}
}
pointInFov( origin )
{
forward = anglesToForward( self.angles );
return ( vectorDot( forward, origin - self.origin ) > 0.766 ); // 80 fov
}
registerObjective( objName, objText, objEntity )
{
flag_init( objName );
objID = level.objectives.size;
newObjective = spawnStruct();
newObjective.name = objName;
newObjective.id = objID;
newObjective.state = "invisible";
newObjective.text = objText;
newObjective.entity = objEntity;
newObjective.added = false;
level.objectives[objName] = newObjective;
return newObjective;
}
setObjectiveState( objName, objState )
{
assert( isDefined( level.objectives[objName] ) );
objective = level.objectives[objName];
objective.state = objState;
if ( !objective.added )
{
objective_add( objective.id, objective.state, objective.text, objective.entity.origin );
objective.added = true;
}
else
{
objective_state( objective.id, objective.State );
}
if ( objective.state == "done" )
flag_set( objName );
}
setObjectiveString( objName, objString )
{
objective = level.objectives[objName];
objective.text = objString;
objective_string( objective.id, objString );
}
setObjectiveLocation( objName, objLoc )
{
objective = level.objectives[objName];
objective.loc = objLoc;
objective_position( objective.id, objective.loc.origin );
}
setObjectiveRemaining( objName, objString, objRemaining )
{
assert( isDefined( level.objectives[objName] ) );
objective = level.objectives[objName];
if ( !objRemaining )
objective_string( objective.id, objString );
else
objective_string( objective.id, objString, objRemaining );
}
printAboveHead (string, duration, offset, color)
{
self endon ("death");
if (!isdefined (offset))
offset = (0, 0, 0);
if (!isdefined (color))
color = (1,0,0);
for(i = 0; i < (duration * 20); i++)
{
if (!isalive (self))
return;
aboveHead = self getshootatpos() + (0,0,10) + offset;
print3d (aboveHead, string, color, 1, 0.5); // origin, text, RGB, alpha, scale
wait (0.05);
}
}
chair_guy_setup()
{
chair_guy = getent ( "chair_guy", "script_noteworthy" );
chair_guy_origin = getent ( "chair_guy_origin", "script_noteworthy" );
chair_guy.animname = "generic";
chair_guy gun_remove();
chair_guy teleport ( chair_guy_origin.origin );
//anim_loop_solo( guy, anime_idle, tag, ender, entity );
chair_guy_origin thread anim_loop_solo(chair_guy, "chair_idles", undefined, undefined);
}
glowing_rope()
{
rope = getent ( "glowing_rope", "targetname" );
//if ( ! isdefined ( rope ) )
// return;
rope hide();
while ( 1 )
{
level waittill ( "show_glowing_rope" );
rope show();
level waittill ( "hide_glowing_rope" );
rope hide();
}
}
registerActions()
{
level.actionBinds = [];
registerActionBinding( "objectives", "pause", &"KILLHOUSE_HINT_CHECK_OBJECTIVES_PAUSED" );
registerActionBinding( "objectives_pc", "+scores", &"KILLHOUSE_HINT_CHECK_OBJECTIVES_SCORES" );
registerActionBinding( "pc_attack", "+attack", &"KILLHOUSE_HINT_ATTACK_PC" );
registerActionBinding( "pc_hip_attack", "+attack", &"KILLHOUSE_HINT_HIP_ATTACK_PC" );
registerActionBinding( "hip_attack", "+attack", &"KILLHOUSE_HINT_HIP_ATTACK" );
registerActionBinding( "attack", "+attack", &"KILLHOUSE_HINT_ATTACK" );
registerActionBinding( "stop_ads", "+speed_throw", &"KILLHOUSE_HINT_STOP_ADS_THROW" );
registerActionBinding( "stop_ads", "+speed", &"KILLHOUSE_HINT_STOP_ADS" );
registerActionBinding( "stop_ads", "+toggleads_throw", &"KILLHOUSE_HINT_STOP_ADS_TOGGLE_THROW" );
registerActionBinding( "stop_ads", "toggleads", &"KILLHOUSE_HINT_STOP_ADS_TOGGLE" );
registerActionBinding( "ads_360", "+speed_throw", &"KILLHOUSE_HINT_ADS_THROW_360" );
registerActionBinding( "ads_360", "+speed", &"KILLHOUSE_HINT_ADS_360" );
registerActionBinding( "ads", "+speed_throw", &"KILLHOUSE_HINT_ADS_THROW" );
registerActionBinding( "ads", "+speed", &"KILLHOUSE_HINT_ADS" );
registerActionBinding( "ads", "+toggleads_throw", &"KILLHOUSE_HINT_ADS_TOGGLE_THROW" );
registerActionBinding( "ads", "toggleads", &"KILLHOUSE_HINT_ADS_TOGGLE" );
registerActionBinding( "ads_switch", "+speed_throw", &"KILLHOUSE_HINT_ADS_SWITCH_THROW" );
registerActionBinding( "ads_switch", "+speed", &"KILLHOUSE_HINT_ADS_SWITCH" );
registerActionBinding( "ads_switch_shoulder", "+speed_throw", &"KILLHOUSE_HINT_ADS_SWITCH_THROW_SHOULDER" );
registerActionBinding( "ads_switch_shoulder", "+speed", &"KILLHOUSE_HINT_ADS_SWITCH_SHOULDER" );
registerActionBinding( "breath", "+melee_breath", &"KILLHOUSE_HINT_BREATH_MELEE" );
registerActionBinding( "breath", "+breath_sprint", &"KILLHOUSE_HINT_BREATH_SPRINT" );
registerActionBinding( "breath", "+holdbreath", &"KILLHOUSE_HINT_BREATH" );
registerActionBinding( "melee", "+melee", &"KILLHOUSE_HINT_MELEE" );
registerActionBinding( "melee", "+melee_breath", &"KILLHOUSE_HINT_MELEE_BREATH" );
registerActionBinding( "prone", "goprone", &"KILLHOUSE_HINT_PRONE" );
registerActionBinding( "prone", "+stance", &"KILLHOUSE_HINT_PRONE_STANCE" );
registerActionBinding( "prone", "toggleprone", &"KILLHOUSE_HINT_PRONE_TOGGLE" );
registerActionBinding( "prone", "+prone", &"KILLHOUSE_HINT_PRONE_HOLD" );
registerActionBinding( "prone", "lowerstance", &"KILLHOUSE_HINT_PRONE_DOUBLE" );
// registerActionBinding( "prone", "+movedown", &"" );
registerActionBinding( "crouch", "gocrouch", &"KILLHOUSE_HINT_CROUCH" );
registerActionBinding( "crouch", "+stance", &"KILLHOUSE_HINT_CROUCH_STANCE" );
registerActionBinding( "crouch", "togglecrouch", &"KILLHOUSE_HINT_CROUCH_TOGGLE" );
// registerActionBinding( "crouch", "lowerstance", &"KILLHOUSE_HINT_CROUCH_DOU" );
// registerActionBinding( "crouch", "+movedown", &"KILLHOUSE_HINT_CROUCH" );
registerActionBinding( "stand", "+gostand", &"KILLHOUSE_HINT_STAND" );
registerActionBinding( "stand", "+stance", &"KILLHOUSE_HINT_STAND_STANCE" );
registerActionBinding( "jump", "+gostand", &"KILLHOUSE_HINT_JUMP_STAND" );
registerActionBinding( "jump", "+moveup", &"KILLHOUSE_HINT_JUMP" );
registerActionBinding( "sprint", "+breath_sprint", &"KILLHOUSE_HINT_SPRINT_BREATH" );
registerActionBinding( "sprint", "+sprint", &"KILLHOUSE_HINT_SPRINT" );
registerActionBinding( "sprint_pc", "+breath_sprint", &"KILLHOUSE_HINT_SPRINT_BREATH_PC" );
registerActionBinding( "sprint_pc", "+sprint", &"KILLHOUSE_HINT_SPRINT_PC" );
registerActionBinding( "sprint2", "+breath_sprint", &"KILLHOUSE_HINT_HOLDING_SPRINT_BREATH" );
registerActionBinding( "sprint2", "+sprint", &"KILLHOUSE_HINT_HOLDING_SPRINT" );
registerActionBinding( "reload", "+reload", &"KILLHOUSE_HINT_RELOAD" );
registerActionBinding( "reload", "+usereload", &"KILLHOUSE_HINT_RELOAD_USE" );
registerActionBinding( "mantle", "+gostand", &"KILLHOUSE_HINT_MANTLE" );
registerActionBinding( "sidearm", "weapnext", &"KILLHOUSE_HINT_SIDEARM_SWAP" );
registerActionBinding( "primary", "weapnext", &"KILLHOUSE_HINT_PRIMARY_SWAP" );
registerActionBinding( "frag", "+frag", &"KILLHOUSE_HINT_FRAG" );
registerActionBinding( "flash", "+smoke", &"KILLHOUSE_HINT_FLASH" );
registerActionBinding( "swap_launcher", "+activate", &"KILLHOUSE_HINT_SWAP" );
registerActionBinding( "swap_launcher", "+usereload", &"KILLHOUSE_HINT_SWAP_RELOAD" );
registerActionBinding( "firemode", "+actionslot 2", &"KILLHOUSE_HINT_FIREMODE" );
registerActionBinding( "attack_launcher", "+attack", &"KILLHOUSE_HINT_LAUNCHER_ATTACK" );
registerActionBinding( "swap_explosives", "+activate", &"KILLHOUSE_HINT_EXPLOSIVES" );
registerActionBinding( "swap_explosives", "+usereload", &"KILLHOUSE_HINT_EXPLOSIVES_RELOAD" );
registerActionBinding( "plant_explosives", "+activate", &"KILLHOUSE_HINT_EXPLOSIVES_PLANT" );
registerActionBinding( "plant_explosives", "+usereload", &"KILLHOUSE_HINT_EXPLOSIVES_PLANT_RELOAD" );
registerActionBinding( "equip_C4", "+actionslot 4", &"KILLHOUSE_HINT_EQUIP_C4" );
registerActionBinding( "throw_C4", "+toggleads_throw", &"KILLHOUSE_HINT_THROW_C4_TOGGLE" );
registerActionBinding( "throw_C4", "+speed_throw", &"KILLHOUSE_HINT_THROW_C4_SPEED" );
registerActionBinding( "throw_C4", "+throw", &"KILLHOUSE_HINT_THROW_C4" );
registerActionBinding( "detonate_C4", "+attack", &"KILLHOUSE_DETONATE_C4" );
initKeys();
updateKeysForBindings();
}
registerActionBinding( action, binding, hint )
{
if ( !isDefined( level.actionBinds[action] ) )
level.actionBinds[action] = [];
actionBind = spawnStruct();
actionBind.binding = binding;
actionBind.hint = hint;
actionBind.keyText = undefined;
actionBind.hintText = undefined;
precacheString( hint );
level.actionBinds[action][level.actionBinds[action].size] = actionBind;
}
getActionBind( action )
{
for ( index = 0; index < level.actionBinds[action].size; index++ )
{
actionBind = level.actionBinds[action][index];
binding = getKeyBinding( actionBind.binding );
if ( !binding["count"] )
continue;
return level.actionBinds[action][index];
}
return level.actionBinds[action][0];//unbound
}
updateKeysForBindings()
{
if ( level.console )
{
setKeyForBinding( getCommandFromKey( "BUTTON_START" ), "BUTTON_START" );
setKeyForBinding( getCommandFromKey( "BUTTON_A" ), "BUTTON_A" );
setKeyForBinding( getCommandFromKey( "BUTTON_B" ), "BUTTON_B" );
setKeyForBinding( getCommandFromKey( "BUTTON_X" ), "BUTTON_X" );
setKeyForBinding( getCommandFromKey( "BUTTON_Y" ), "BUTTON_Y" );
setKeyForBinding( getCommandFromKey( "BUTTON_LSTICK" ), "BUTTON_LSTICK" );
setKeyForBinding( getCommandFromKey( "BUTTON_RSTICK" ), "BUTTON_RSTICK" );
setKeyForBinding( getCommandFromKey( "BUTTON_LSHLDR" ), "BUTTON_LSHLDR" );
setKeyForBinding( getCommandFromKey( "BUTTON_RSHLDR" ), "BUTTON_RSHLDR" );
setKeyForBinding( getCommandFromKey( "BUTTON_LTRIG" ), "BUTTON_LTRIG" );
setKeyForBinding( getCommandFromKey( "BUTTON_RTRIG" ), "BUTTON_RTRIG" );
}
else
{
//level.kbKeys = "1234567890-=QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./";
//level.specialKeys = [];
for ( index = 0; index < level.kbKeys.size; index++ )
{
setKeyForBinding( getCommandFromKey( level.kbKeys[index] ), level.kbKeys[index] );
}
for ( index = 0; index < level.specialKeys.size; index++ )
{
setKeyForBinding( getCommandFromKey( level.specialKeys[index] ), level.specialKeys[index] );
}
}
}
getActionForBinding( binding )
{
arrayKeys = getArrayKeys( level.actionBinds );
for ( index = 0; index < arrayKeys; index++ )
{
bindArray = level.actionBinds[arrayKeys[index]];
for ( bindIndex = 0; bindIndex < bindArray.size; bindIndex++ )
{
if ( bindArray[bindIndex].binding != binding )
continue;
return arrayKeys[index];
}
}
}
setKeyForBinding( binding, key )
{
if ( binding == "" )
return;
arrayKeys = getArrayKeys( level.actionBinds );
for ( index = 0; index < arrayKeys.size; index++ )
{
bindArray = level.actionBinds[arrayKeys[index]];
for ( bindIndex = 0; bindIndex < bindArray.size; bindIndex++ )
{
if ( bindArray[bindIndex].binding != binding )
continue;
bindArray[bindIndex].key = key;
}
}
}
hint( text, timeOut, double_line )
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
level endon ( "clearing_hints" );
add_hint_background( double_line );
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 110 );
level.hintElem.sort = 0.5;
level.hintElem setText( text );
//level.hintElem endon ( "death" );
if ( isDefined( timeOut ) )
wait ( timeOut );
else
return;
level.hintElem fadeOverTime( 0.5 );
level.hintElem.alpha = 0;
wait ( 0.5 );
clear_hints();
}
clear_hints()
{
if ( isDefined( level.hintElem ) )
level.hintElem destroyElem();
if ( isDefined( level.iconElem ) )
level.iconElem destroyElem();
if ( isDefined( level.iconElem2 ) )
level.iconElem2 destroyElem();
if ( isDefined( level.iconElem3 ) )
level.iconElem3 destroyElem();
if ( isDefined( level.hintbackground ) )
level.hintbackground destroyElem();
level notify ( "clearing_hints" );
}
keyHint( actionName, timeOut, doubleline )
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
level endon ( "clearing_hints" );
if ( isdefined ( doubleline ) )
add_hint_background( doubleline );
else
add_hint_background();
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 110 );
level.hintElem.sort = 0.5;
actionBind = getActionBind( actionName );
if ( ( actionName == "melee" ) && ( level.xenon ) && ( actionBind.key == "BUTTON_RSTICK" ) )
level.hintElem setText( &"KILLHOUSE_HINT_MELEE_CLICK" );
else
level.hintElem setText( actionBind.hint );
//level.hintElem endon ( "death" );
notifyName = "did_action_" + actionName;
for ( index = 0; index < level.actionBinds[actionName].size; index++ )
{
actionBind = level.actionBinds[actionName][index];
level.player notifyOnCommand( notifyName, actionBind.binding );
}
if ( isDefined( timeOut ) )
level.player thread notifyOnTimeout( notifyName, timeOut );
level.player waittill( notifyName );
level.hintElem fadeOverTime( 0.5 );
level.hintElem.alpha = 0;
wait ( 0.5 );
clear_hints();
}
second_sprint_hint()
{
level endon ( "kill_sprint_hint" );
//getEnt( "obstacleTraining_sprint", "targetname" ) waittill ( "trigger" );
wait .5;
actionBind = getActionBind( "sprint2" );
hint( actionBind.hint, 5 );
}
notifyOnTimeout( finishedNotify, timeOut )
{
self endon( finishedNotify );
wait timeOut;
self notify( finishedNotify );
}
training_stallTriggers( group, endonString )
{
stallTriggers = getEntArray( group + "_stall_trigger", "script_noteworthy" );
for ( index = 0; index < stallTriggers.size; index++ )
stallTriggers[index] thread stallTriggerThink( group );
thread wrongStallNag( endonString );
}
wrongStallNag( endonString )
{
level endon ( endonString );
for( ;; )
{
level waittill ( "player_wrong_stall", stallString );
level.marine2 anim_single_solo( level.marine2, "gotofour" );
wait ( 10.0 );
}
}
stallTriggerThink( group )
{
for ( ;; )
{
self waittill ( "trigger", entity );
if ( entity != level.player )
continue;
if ( self.targetname != "stall4" )
level notify ( "player_wrong_stall", self.targetname );
else
flag_set( group + "_player_at_stall" );
}
}
initKeys()
{
level.kbKeys = "1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./";
level.specialKeys = [];
level.specialKeys[level.specialKeys.size] = "TAB";
level.specialKeys[level.specialKeys.size] = "ENTER";
level.specialKeys[level.specialKeys.size] = "ESCAPE";
level.specialKeys[level.specialKeys.size] = "SPACE";
level.specialKeys[level.specialKeys.size] = "BACKSPACE";
level.specialKeys[level.specialKeys.size] = "UPARROW";
level.specialKeys[level.specialKeys.size] = "DOWNARROW";
level.specialKeys[level.specialKeys.size] = "LEFTARROW";
level.specialKeys[level.specialKeys.size] = "RIGHTARROW";
level.specialKeys[level.specialKeys.size] = "ALT";
level.specialKeys[level.specialKeys.size] = "CTRL";
level.specialKeys[level.specialKeys.size] = "SHIFT";
level.specialKeys[level.specialKeys.size] = "CAPSLOCK";
level.specialKeys[level.specialKeys.size] = "F1";
level.specialKeys[level.specialKeys.size] = "F2";
level.specialKeys[level.specialKeys.size] = "F3";
level.specialKeys[level.specialKeys.size] = "F4";
level.specialKeys[level.specialKeys.size] = "F5";
level.specialKeys[level.specialKeys.size] = "F6";
level.specialKeys[level.specialKeys.size] = "F7";
level.specialKeys[level.specialKeys.size] = "F8";
level.specialKeys[level.specialKeys.size] = "F9";
level.specialKeys[level.specialKeys.size] = "F10";
level.specialKeys[level.specialKeys.size] = "F11";
level.specialKeys[level.specialKeys.size] = "F12";
level.specialKeys[level.specialKeys.size] = "INS";
level.specialKeys[level.specialKeys.size] = "DEL";
level.specialKeys[level.specialKeys.size] = "PGDN";
level.specialKeys[level.specialKeys.size] = "PGUP";
level.specialKeys[level.specialKeys.size] = "HOME";
level.specialKeys[level.specialKeys.size] = "END";
level.specialKeys[level.specialKeys.size] = "MOUSE1";
level.specialKeys[level.specialKeys.size] = "MOUSE2";
level.specialKeys[level.specialKeys.size] = "MOUSE3";
level.specialKeys[level.specialKeys.size] = "MOUSE4";
level.specialKeys[level.specialKeys.size] = "MOUSE5";
level.specialKeys[level.specialKeys.size] = "MWHEELUP";
level.specialKeys[level.specialKeys.size] = "MWHEELDOWN";
level.specialKeys[level.specialKeys.size] = "AUX1";
level.specialKeys[level.specialKeys.size] = "AUX2";
level.specialKeys[level.specialKeys.size] = "AUX3";
level.specialKeys[level.specialKeys.size] = "AUX4";
level.specialKeys[level.specialKeys.size] = "AUX5";
level.specialKeys[level.specialKeys.size] = "AUX6";
level.specialKeys[level.specialKeys.size] = "AUX7";
level.specialKeys[level.specialKeys.size] = "AUX8";
level.specialKeys[level.specialKeys.size] = "AUX9";
level.specialKeys[level.specialKeys.size] = "AUX10";
level.specialKeys[level.specialKeys.size] = "AUX11";
level.specialKeys[level.specialKeys.size] = "AUX12";
level.specialKeys[level.specialKeys.size] = "AUX13";
level.specialKeys[level.specialKeys.size] = "AUX14";
level.specialKeys[level.specialKeys.size] = "AUX15";
level.specialKeys[level.specialKeys.size] = "AUX16";
level.specialKeys[level.specialKeys.size] = "KP_HOME";
level.specialKeys[level.specialKeys.size] = "KP_UPARROW";
level.specialKeys[level.specialKeys.size] = "KP_PGUP";
level.specialKeys[level.specialKeys.size] = "KP_LEFTARROW";
level.specialKeys[level.specialKeys.size] = "KP_5";
level.specialKeys[level.specialKeys.size] = "KP_RIGHTARROW";
level.specialKeys[level.specialKeys.size] = "KP_END";
level.specialKeys[level.specialKeys.size] = "KP_DOWNARROW";
level.specialKeys[level.specialKeys.size] = "KP_PGDN";
level.specialKeys[level.specialKeys.size] = "KP_ENTER";
level.specialKeys[level.specialKeys.size] = "KP_INS";
level.specialKeys[level.specialKeys.size] = "KP_DEL";
level.specialKeys[level.specialKeys.size] = "KP_SLASH";
level.specialKeys[level.specialKeys.size] = "KP_MINUS";
level.specialKeys[level.specialKeys.size] = "KP_PLUS";
level.specialKeys[level.specialKeys.size] = "KP_NUMLOCK";
level.specialKeys[level.specialKeys.size] = "KP_STAR";
level.specialKeys[level.specialKeys.size] = "KP_EQUALS";
level.specialKeys[level.specialKeys.size] = "PAUSE";
level.specialKeys[level.specialKeys.size] = "SEMICOLON";
level.specialKeys[level.specialKeys.size] = "COMMAND";
level.specialKeys[level.specialKeys.size] = "181";
level.specialKeys[level.specialKeys.size] = "191";
level.specialKeys[level.specialKeys.size] = "223";
level.specialKeys[level.specialKeys.size] = "224";
level.specialKeys[level.specialKeys.size] = "225";
level.specialKeys[level.specialKeys.size] = "228";
level.specialKeys[level.specialKeys.size] = "229";
level.specialKeys[level.specialKeys.size] = "230";
level.specialKeys[level.specialKeys.size] = "231";
level.specialKeys[level.specialKeys.size] = "232";
level.specialKeys[level.specialKeys.size] = "233";
level.specialKeys[level.specialKeys.size] = "236";
level.specialKeys[level.specialKeys.size] = "241";
level.specialKeys[level.specialKeys.size] = "242";
level.specialKeys[level.specialKeys.size] = "243";
level.specialKeys[level.specialKeys.size] = "246";
level.specialKeys[level.specialKeys.size] = "248";
level.specialKeys[level.specialKeys.size] = "249";
level.specialKeys[level.specialKeys.size] = "250";
level.specialKeys[level.specialKeys.size] = "252";
}
turn_off_frag_lights()
{
frag_lights = getentarray ( "frag_lights", "script_noteworthy" );
for(i = 0; i < frag_lights.size; i++)
frag_lights[ i ] setLightIntensity( 0 );
}
blink_primary_lights()
{
frag_lights = getentarray ( "frag_lights", "script_noteworthy" );
while( 1 )
{
wait 1;
for(i = 0; i < frag_lights.size; i++)
frag_lights[ i ] setLightIntensity( 1 );
wait 1;
for(i = 0; i < frag_lights.size; i++)
frag_lights[ i ] setLightIntensity( 0 );
}
}
melon_think()
{
melon = getEnt ( "scr_watermelon", "targetname" );
melon_model = getEnt ( melon.target, "targetname" );
melon_model hide();
melon_model notsolid();
level waittill ( "show_melon" );
melon_model show();
melon_model solid();
melon waittill ( "trigger" );
melon playsound ( "melee_knife_hit_watermelon" );
flag_set ( "melee_complete" );
playfx (level._effect["watermelon"], melon_model.origin);
melon_model hide();
melon_model notsolid();
}
test()
{
while (1)
{
println (" ammo: " + level.player GetWeaponAmmoClip( level.gunPrimary ) );
wait 1;
}
}
clear_hints_on_stand()
{
while (level.player GetStance() != "stand" )
wait .05;
clear_hints();
}
move_mac()
{
self waittill ( "trigger" );
level.mac set_generic_run_anim( "jog" );
level.mac setgoalnode ( getnode ( self.target, "targetname" ) );
}
loop_obstacle()
{
for ( index = 0; index < level.buddies.size; index++ )
{
level.mac set_generic_run_anim( "jog" );
level.buddies[index] thread obstacleTrainingCourseThink( level.buddies[index].startNode );
}
level.mac set_generic_run_anim( "walk", true );
level.mac setgoalnode ( getnode ( "mac_start_node", "targetname" ) );
level.mac waittill ( "goal" );
//level notify ( "start_course" );
}
obstacleTraining_buddies()
{
buddiesInit();
for ( index = 0; index < level.buddies.size; index++ )
{
buddy = level.buddies[index];
buddy.startNode = getNode( "obstacle_lane_node" + buddy.buddyID, "targetname" );
level.buddies[index] thread obstacleTrainingCourseThink( buddy.startNode );
}
}
buddiesInit()
{
level.buddies = getEntArray( "buddy", "script_noteworthy" );
level.buddiesByID = [];
for ( index = 0; index < level.buddies.size; index++ )
{
level.buddies[index].buddyID = int( level.buddies[index].targetname[5] );
level.buddiesByID[level.buddies[index].buddyID] = level.buddies[index];
}
}
obstacleTrainingCourseThink( goalNode )
{
level endon( "obstacleTraining_end" );
self.goalradius = 32;
self setGoalNode( goalNode );
self waittill ( "goal" );
flag_wait ( "start_course" );
noteworthy_function[ "prone" ] = ::set_allowed_stances_prone;
noteworthy_function[ "stand" ] = ::set_allowed_stances_all;
noteworthy_function[ "sprint" ] = ::set_sprint;
self.disablearrivals = true;
while ( isDefined( goalNode.target ) )
{
goalNode = getNode( goalNode.target, "targetname" );
self setGoalNode( goalNode );
self waittill ( "goal" );
if ( !isDefined( goalNode.script_noteworthy ) )
continue;
[[ noteworthy_function[ goalNode.script_noteworthy ] ]]();
}
self.disablearrivals = false;
}
set_allowed_stances_prone()
{
self allowedStances( "prone" );
}
set_allowed_stances_all()
{
self allowedStances( "prone", "stand", "crouch" );
}
set_sprint()
{
self.sprint = true;
}
frag_trigger_think( flag, trigger, continuous )
{
flag_init( flag );
trigger enablegrenadetouchdamage();
if ( isdefined ( trigger.target ) )
trigger.light = getEnt( trigger.target, "targetname" );
if ( isdefined ( trigger.light ) )
trigger.light thread flicker_on();
if( !isDefined( continuous ) )
continuous = false;
trigger _flag_wait_trigger( flag, continuous );
level.player playSound( "killhouse_buzzer" );
if ( isdefined ( trigger.light ) )
trigger.light thread flicker_off();
return trigger;
}
light_off()
{
self setLightIntensity( 0 );
}
light_on()
{
self setLightIntensity( 1 );
}
flicker_off()
{
wait randomfloatrange ( .2, .5);
self setLightIntensity( 0 );
wait randomfloatrange ( .05, .1);
self setLightIntensity( .7 );
wait randomfloatrange ( .1, .2);
self setLightIntensity( 0 );
wait randomfloatrange ( .05, .4);
self setLightIntensity( .5 );
wait randomfloatrange ( .1, .5);
self setLightIntensity( 0 );
}
flicker_on()
{
wait randomfloatrange ( .2, .5);
self setLightIntensity( .4 );
wait randomfloatrange ( .2, .4);
self setLightIntensity( 0 );
wait randomfloatrange ( .2, .5);
self setLightIntensity( .6 );
wait randomfloatrange ( .05, .2);
self setLightIntensity( 0 );
wait randomfloatrange ( .05, .1);
self setLightIntensity( 1 );
}
in_pit()
{
pit = getEnt( "safety_pit", "targetname" );
if ( !level.player istouching( pit ) )
return false;
return true;
}
frag_too_low_hint()
{
level endon ( "fragTraining_end" );
self enablegrenadetouchdamage();
while( 1 )
{
self waittill ( "trigger" );
clear_hints();
hint( &"KILLHOUSE_HINT_GRENADE_TOO_LOW", 6 );
}
}
walk_to( goal )
{
self set_generic_run_anim( "walk", true );
//self.walk_combatanim = level.scr_anim[ "generic" ][ "walk" ];
//self.walk_noncombatanim = level.scr_anim[ "generic" ][ "walk" ];
self.disablearrivals = true;
self.disableexits = true;
self.goalradius = 32;
self setgoalnode ( goal );
self waittill ( "goal" );
self anim_generic( self, "patrol_stop" );
self setgoalpos ( self.origin );
}
dialog_nag_till_in_pit()
{
level endon ( "in_pit_with_frags" );
while( 1 )
{
level.newcastle execDialog( "getinsafety" );
wait 10;
}
}
pause_anim()
{
self setflaggedanim( "single anim", self getanim( "reveal" ), 1, 0, 0 ); // pause
}
unpause_anim()
{
self setflaggedanim( "single anim", self getanim( "reveal" ), 1, 0, 1 ); // unpause
}
M203_icon_hint()
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
//level endon ( "clearing_hints" );
add_hint_background();
//Notice you now have an icon of a grenade launcher on your HUD.
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 130 );
level.hintElem.sort = 0.5;
level.hintElem setText( &"KILLHOUSE_HINT_LAUNCHER_ICON" );
iconElem = createIcon( "hud_dpad", 32, 32 );
iconElem.hidewheninmenu = true;
iconElem setPoint( "TOP", undefined, 16, 165 );
iconElem2 = createIcon( "hud_icon_40mm_grenade", 64, 32 );
iconElem2.hidewheninmenu = true;
iconElem2 setPoint( "TOP", undefined, -32, 165 );
level waittill ( "clearing_hints" );
iconElem setPoint( "CENTER", "BOTTOM", -304, -20, 1.0 );
iconElem2 setPoint( "CENTER", "BOTTOM", -336, -20, 1.0 );
iconElem scaleovertime(1, 20, 20);
iconElem2 scaleovertime(1, 20, 20);
wait .70;
iconElem fadeovertime(.15);
iconElem.alpha = 0;
iconElem2 fadeovertime(.15);
iconElem2.alpha = 0;
wait .5;
//clear_hints();
}
C4_icon_hint()
{
if ( getdvar( "chaplincheat" ) == "1" )
return;
clear_hints();
level endon ( "clearing_hints" );
add_hint_background();
level.hintElem = createFontString( "objective", level.hint_text_size );
level.hintElem.hidewheninmenu = true;
level.hintElem setPoint( "TOP", undefined, 0, 130 );
level.hintElem.sort = 0.5;
level.hintElem setText( &"KILLHOUSE_HINT_C4_ICON" );
//level.hintElem endon ( "death" );
level.iconElem = createIcon( "hud_dpad", 32, 32 );
level.iconElem.hidewheninmenu = true;
level.iconElem setPoint( "TOP", undefined, 0, 175 );
level.iconElem2 = createIcon( "hud_icon_c4", 32, 32 );
level.iconElem2.hidewheninmenu = true;
level.iconElem2 setPoint( "TOP", undefined, 0, 205 );
level waittill ( "c4_equiped" );
level.iconElem3 = createIcon( "hud_arrow_down", 24, 24 );
level.iconElem3.hidewheninmenu = true;
level.iconElem3 setPoint( "TOP", undefined, 0, 179 );
level.iconElem3.sort = 1;
level.iconElem3.color = (1,1,0);
level.iconElem3.alpha = .7;
level waittill ( "C4_the_car" );
level.iconElem setPoint( "CENTER", "BOTTOM", -320, -20, 1.0 );
level.iconElem2 setPoint( "CENTER", "BOTTOM", -320, -20, 1.0 );
level.iconElem3 setPoint( "CENTER", "BOTTOM", -320, -20, 1.0 );
level.iconElem scaleovertime(1, 20, 20);
level.iconElem2 scaleovertime(1, 20, 20);
level.iconElem3 scaleovertime(1, 15, 15);
wait .85;
level.iconElem fadeovertime(.15);
level.iconElem.alpha = 0;
level.iconElem2 fadeovertime(.15);
level.iconElem2.alpha = 0;
level.iconElem3 fadeovertime(.15);
level.iconElem3.alpha = 0;
level.iconElem destroy();
level.iconElem2 destroy();
level.iconElem3 destroy();
}
auto_aim()
{
if ( level.console )
{
if(isdefined( getdvar("input_autoaim") ) )
if ( getdvar("input_autoaim") == "1" )
return true;
}
return false;
}
is_ps3_flipped()
{
ps3_flipped = false;
config = getdvar ( "gpad_buttonsConfig" );
if ( isdefined ( config ) )
if ( issubstr ( config , "_alt" ) )
ps3_flipped = true;
return ps3_flipped;
}
gaz_animation( name, delay )
{
if( isdefined( delay ) )
wait delay;
if( !flag( "gaz_in_idle_position" ) )
return;
level.waters notify( "gaz_animation" );
level.waters endon( "gaz_animation" );
level.waters.ref_node notify( "stop_loop" );
level.waters stopanimscripted();
level.waters.ref_node anim_single_solo( level.waters, name );
level.waters.ref_node thread anim_loop_solo( level.waters, "killhouse_gaz_idleB", undefined, "stop_loop" );
}