443 lines
11 KiB
Plaintext
443 lines
11 KiB
Plaintext
|
#include maps\_hud_util;
|
||
|
#include maps\_utility;
|
||
|
#include maps\_debug;
|
||
|
#include animscripts\utility;
|
||
|
#include common_scripts\utility;
|
||
|
#include maps\_anim;
|
||
|
|
||
|
#using_animtree( "script_model" );
|
||
|
barrett_init()
|
||
|
{
|
||
|
/*
|
||
|
|
||
|
ADD TO YOUR CSV:!!!!!!!!!!!!!!
|
||
|
|
||
|
xmodel,weapon_m82_MG_Setup
|
||
|
rawfile,animtrees/script_model.atr
|
||
|
rawfile,maps/_barrett.gsc
|
||
|
xanim,sniper_escape_flag_wave_down
|
||
|
xanim,sniper_escape_flag_wave_up
|
||
|
xmodel,prop_car_flag
|
||
|
weapon,sp/barrett_fake
|
||
|
rawfile,shock/barrett.shock
|
||
|
fx,smoke/smoke_geotrail_barret
|
||
|
*/
|
||
|
|
||
|
//precacheitem( "barrett_fake" );
|
||
|
precacheshellshock( "barrett" );
|
||
|
// Press forwards or backwards to adjust zoom.
|
||
|
add_hint_string( "barrett", &"WEAPON_PRESS_FORWARDS_OR_BACKWARDS", ::should_break_zoom_hint );
|
||
|
|
||
|
flag_init( "player_is_on_turret" );
|
||
|
flag_init( "player_on_barret" );
|
||
|
flag_init( "player_used_zoom" );
|
||
|
flag_init( "can_use_turret" );
|
||
|
flag_init( "player_gets_off_turret" );
|
||
|
|
||
|
level._effect[ "bullet_geo" ] = loadfx( "smoke/smoke_geotrail_barret" );
|
||
|
thread exchange_trace_converter();
|
||
|
thread exchange_barrett_trigger();// get on and off
|
||
|
|
||
|
//thread exchange_dof();
|
||
|
|
||
|
// the turret dvars dont exist onthe first frame
|
||
|
wait( 0.05 );
|
||
|
//setsaveddvar( "turretScopeZoomMin", "1.5" );
|
||
|
//setsaveddvar( "turretScopeZoomMax", "70" );
|
||
|
//setsaveddvar( "turretScopeZoom", "70" );
|
||
|
|
||
|
level.barrett_exists = true;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
exchange_barrett_trigger()
|
||
|
{
|
||
|
barrett_trigger = getent( "barrett_trigger", "targetname" );
|
||
|
// Press and hold^3 &&1 ^7to use the M82 .50 Caliber Sniper Rifle
|
||
|
barrett_trigger sethintstring( &"WEAPON_BARRETT_USE" );
|
||
|
turret = getent( "turret2", "targetname" );
|
||
|
|
||
|
targ = getent( turret.target, "targetname" );
|
||
|
turret makeUnusable();
|
||
|
turret hide();
|
||
|
turret.origin = targ.origin;
|
||
|
|
||
|
while ( 1 )
|
||
|
{
|
||
|
barrett_trigger waittill( "trigger" );
|
||
|
level.player.original_org = level.player.origin;
|
||
|
|
||
|
level.player setplayerangles( ( turret.angles[ 0 ], turret.angles[ 1 ], level.player.angles[ 2 ] ) );
|
||
|
|
||
|
turret useby( level.player );
|
||
|
|
||
|
setsaveddvar( "ui_hideMap", "1" );
|
||
|
setsaveddvar( "compass", 0 );
|
||
|
SetSavedDvar( "ammoCounterHide", "1" );
|
||
|
SetSavedDvar( "hud_showStance", 0 );
|
||
|
|
||
|
level.player_can_fire_turret_time = gettime() + 1000;
|
||
|
setsaveddvar( "sv_znear", "100" );// 100
|
||
|
//should maybe be the real target
|
||
|
setsaveddvar( "sm_sunShadowCenter", getent( turret.target, "targetname" ).origin );
|
||
|
flag_set( "player_is_on_turret" );
|
||
|
level.player disableWeapons();
|
||
|
if ( level.script == "dcburning" )
|
||
|
{
|
||
|
level.player SetActionSlot( 1, "" );
|
||
|
level.player NightVisionForceOff();
|
||
|
}
|
||
|
|
||
|
//level.player allowCrouch( false );
|
||
|
//level.player allowStand( false );
|
||
|
thread player_learns_to_zoom();
|
||
|
if ( !flag( "player_used_zoom" ) )
|
||
|
{
|
||
|
level.player thread display_hint( "barrett" );
|
||
|
}
|
||
|
|
||
|
level.level_specific_dof = true;
|
||
|
// compensate for intro view in the ground, simulating prone
|
||
|
player_org = level.player.origin + ( 0, 0, 60 );
|
||
|
|
||
|
|
||
|
for ( ;; )
|
||
|
{
|
||
|
if ( !isdefined( turret getturretowner() ) )
|
||
|
break;
|
||
|
wait( 0.05 );
|
||
|
}
|
||
|
//flag_wait( "player_gets_off_turret" );
|
||
|
|
||
|
//level.player EnableTurretDismount();
|
||
|
//barrett_trigger = getent( "barrett_trigger", "targetname" );
|
||
|
//barrett_trigger delete();
|
||
|
//turret useby( level.player );
|
||
|
//turret delete();
|
||
|
|
||
|
setsaveddvar( "compass", 1 );
|
||
|
SetSavedDvar( "ammoCounterHide", "0" );
|
||
|
setsaveddvar( "ui_hideMap", "0" );
|
||
|
SetSavedDvar( "hud_showStance", 1 );
|
||
|
|
||
|
setsaveddvar( "sv_znear", "0" );
|
||
|
setsaveddvar( "sm_sunShadowCenter", ( 0, 0, 0 ) );
|
||
|
flag_clear( "player_is_on_turret" );
|
||
|
level.player enableWeapons();
|
||
|
if ( level.script == "dcburning" )
|
||
|
{
|
||
|
level.player SetActionSlot( 1, "nightvision" );
|
||
|
}
|
||
|
//level.player allowCrouch( true );
|
||
|
//level.player allowStand( true );
|
||
|
level.level_specific_dof = false;
|
||
|
|
||
|
|
||
|
// clear blur in case we were on min spec pc and holding key
|
||
|
setblur( 0, 0.05 );
|
||
|
|
||
|
|
||
|
level.player setorigin( level.player.original_org + ( 0, 0, 10 ) );
|
||
|
//wait 1.5;//weird bounce
|
||
|
//level.player enableweapons();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exchange_trace_converter()
|
||
|
{
|
||
|
firetime = -5000;
|
||
|
|
||
|
for ( ;; )
|
||
|
{
|
||
|
flag_wait( "player_is_on_turret" );
|
||
|
wait_for_buffer_time_to_pass( firetime, 1.0 );
|
||
|
|
||
|
if ( !level.player attackbuttonpressed() )
|
||
|
{
|
||
|
wait( 0.05 );
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
thread exchange_player_fires();
|
||
|
firetime = gettime();
|
||
|
|
||
|
// wait for the player to release the fire, as its a semi auto weapon
|
||
|
while ( level.player attackbuttonpressed() )
|
||
|
{
|
||
|
wait( 0.05 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exchange_player_fires()
|
||
|
{
|
||
|
if ( gettime() < level.player_can_fire_turret_time )
|
||
|
return;
|
||
|
|
||
|
// min_zoom = .5;// was 1.5
|
||
|
// max_zoom = 20;
|
||
|
// min_eq = 0.15;
|
||
|
// max_eq = 0.80;
|
||
|
//
|
||
|
// zoom = getdvarfloat( "turretScopeZoom" );
|
||
|
// eq = ( zoom - min_zoom ) * ( max_eq - min_eq ) / ( max_zoom - min_zoom );
|
||
|
// eq += min_eq;
|
||
|
|
||
|
level.player shellshock( "barrett", 1.3 );
|
||
|
// level.fired_barrett = true;
|
||
|
//
|
||
|
// angles = level.player getplayerangles();
|
||
|
// start = level.player geteye();
|
||
|
//
|
||
|
// forward = anglestoforward( angles );
|
||
|
// end = start + vector_multiply( forward, 15000 );
|
||
|
|
||
|
// thread linedraw( eye, end, (1,0,1), 25 );
|
||
|
|
||
|
// trace = BulletTrace( start, end, false, undefined );
|
||
|
// level.trace = trace;
|
||
|
|
||
|
// if ( trace[ "surfacetype" ] != "default" )
|
||
|
// {
|
||
|
//// thread Linedraw( start, trace[ "position" ], (0,1,0) );
|
||
|
// return;
|
||
|
// }
|
||
|
//
|
||
|
//// thread Linedraw( start, trace[ "position" ], (1,0,0) );
|
||
|
//
|
||
|
// start = trace[ "position" ] + vector_multiply( forward, 10 );
|
||
|
// end = trace[ "position" ] + vector_multiply( forward, 15000 );
|
||
|
//
|
||
|
// skill_drift = [];
|
||
|
// skill_drift[ 0 ] = 0.025;
|
||
|
// skill_drift[ 1 ] = 0.025;
|
||
|
// skill_drift[ 2 ] = 0.025;
|
||
|
// skill_drift[ 3 ] = 0.025;
|
||
|
//
|
||
|
//
|
||
|
// pos = start;
|
||
|
// move_distance = 314.245;
|
||
|
// move_vec = vector_multiply( forward, move_distance );
|
||
|
// waittillframeend;
|
||
|
//// eye = level.player.origin + ( -3.62, 0, -66 );
|
||
|
// turret = getent( "turret2", "targetname" );
|
||
|
// if ( !isdefined( turret ) )
|
||
|
// return;
|
||
|
//// eye = turret.origin + ( getdvarfloat( "ax" ), getdvarfloat( "ay" ), getdvarfloat( "az" ) );
|
||
|
// eye = turret.origin + ( -0.1, 0, 15 );
|
||
|
//// eye = level.player.origin + ( getdvarfloat( "ax" ), getdvarfloat( "ay" ), getdvarfloat( "az" ) );
|
||
|
//
|
||
|
// bullet = spawn( "script_model", eye );
|
||
|
// bullet setmodel( "tag_origin" );
|
||
|
//
|
||
|
// playfxontag( getfx( "bullet_geo" ), bullet, "tag_origin" );
|
||
|
//// println( "start " + start + " firetime " + gettime() );
|
||
|
// count_max = 10;
|
||
|
// count = 0;
|
||
|
//
|
||
|
// bullet_last_org = bullet.origin;
|
||
|
//
|
||
|
// trace = undefined;
|
||
|
// tried_lock = false;
|
||
|
// lock_on_steps = undefined;
|
||
|
// achieved_lock = false;
|
||
|
// current_step = 0;
|
||
|
// drift = ( 0, 0, 0 );
|
||
|
//
|
||
|
// for ( ;; )
|
||
|
// {
|
||
|
// endpos = pos + move_vec;
|
||
|
// drift = vector_multiply( level.wind_vec, skill_drift[ level.gameskill ] );
|
||
|
//
|
||
|
//// thread linedraw( pos, endpos, ( 1, 0.2, 0 ), 5 );
|
||
|
//
|
||
|
// trace = bullettrace( pos, endpos, true, undefined );
|
||
|
// final_origin = trace[ "position" ];
|
||
|
// if ( trace[ "fraction" ] < 1 )
|
||
|
// {
|
||
|
// //exchange_impact_alert( trace[ "position" ] );
|
||
|
// angles = vectortoangles( endpos - pos );
|
||
|
// break;
|
||
|
// }
|
||
|
//
|
||
|
// view_frac = count / count_max;
|
||
|
//// view_frac -= 0.1;
|
||
|
// if ( view_frac < 0 )
|
||
|
// view_frac = 0;
|
||
|
// if ( view_frac > 1.0 )
|
||
|
// view_frac = 1.0;
|
||
|
// count++ ;
|
||
|
//
|
||
|
// level.view_frac = view_frac;
|
||
|
// oldorg = bullet.origin;
|
||
|
//
|
||
|
// oldeye = eye;
|
||
|
// eye += move_vec;
|
||
|
//// thread linedraw( oldeye, eye, (1,0,0), 25 );
|
||
|
//
|
||
|
// bullet_last_org = bullet.origin;
|
||
|
// bullet.origin = vector_multiply( final_origin, view_frac ) + vector_multiply( eye, 1.0 - view_frac );
|
||
|
//
|
||
|
//
|
||
|
// pos += move_vec + drift;
|
||
|
//
|
||
|
//// line( eye, bullet.origin, (1,1,1) );
|
||
|
// wait( 0.05 );
|
||
|
// }
|
||
|
//
|
||
|
// println( "hittime " + gettime() );
|
||
|
// forward = anglestoforward( angles );
|
||
|
// // scale it way out for bullet penetration purposes
|
||
|
// pop_vec = vector_multiply( forward, 5 );
|
||
|
// move_vec = vector_multiply( forward, 15000 );
|
||
|
// MagicBullet( "barrett_fake", pos, pos + move_vec );
|
||
|
//
|
||
|
// wait( 0.25 );
|
||
|
// bullet delete();
|
||
|
|
||
|
}
|
||
|
|
||
|
//exchange_dof()
|
||
|
//{
|
||
|
// for ( ;; )
|
||
|
// {
|
||
|
// flag_wait( "player_is_on_turret" );
|
||
|
// exchange_scale_dof_while_on_turret();
|
||
|
// flag_waitopen( "player_is_on_turret" );
|
||
|
// level.player SetDepthOfField( 0, 0, 0, 0, 8, 8 );
|
||
|
// }
|
||
|
//}
|
||
|
|
||
|
//exchange_scale_dof_while_on_turret()
|
||
|
//{
|
||
|
// level.fired_barrett = false;
|
||
|
// level endon( "player_is_on_turret" );
|
||
|
//// SetDepthOfField( <near start>, <near end>, <far start>, <far end>, <near blur>, <far blur> )
|
||
|
// olddist = getdvarint( "turretscopezoom" );
|
||
|
//
|
||
|
// zoom[ 9 ] = 6750;
|
||
|
//
|
||
|
// depthdist = 500;
|
||
|
//
|
||
|
// max_depthdist = 24000;
|
||
|
// min_depthdist = 6500;
|
||
|
// clear_rate = 300;
|
||
|
// focus_rate = 300;
|
||
|
// fog_rate = 1000;
|
||
|
//
|
||
|
// depth_near = 6000;
|
||
|
//
|
||
|
// max_blurring = 14000;
|
||
|
//
|
||
|
// fired_barrett_dist = 6500;
|
||
|
//
|
||
|
// level.blur = 0;
|
||
|
// blur_barret_fired = 8.0;
|
||
|
// blur_stable_rate = -0.2;
|
||
|
// blur_in_rate = 0.10;
|
||
|
// blur_out_rate = -0.25;
|
||
|
//
|
||
|
// stable = false;
|
||
|
// for ( ;; )
|
||
|
// {
|
||
|
// dist = getdvarint( "turretscopezoom" );
|
||
|
//
|
||
|
// if ( dist < olddist )
|
||
|
// {
|
||
|
// if ( dist >= max_blurring )
|
||
|
// {
|
||
|
// dist = max_blurring;
|
||
|
// }
|
||
|
//
|
||
|
// // zooming in, so bring the fog in
|
||
|
// depthdist -= fog_rate;
|
||
|
//
|
||
|
// level.blur += blur_in_rate;
|
||
|
// stable = false;
|
||
|
// }
|
||
|
// else
|
||
|
// if ( dist == olddist )
|
||
|
// {
|
||
|
// if ( stable )
|
||
|
// {
|
||
|
// // stable, focus the eyes
|
||
|
// depthdist += focus_rate;
|
||
|
//
|
||
|
// level.blur = level.blur * 0.9;
|
||
|
// if ( level.blur < 0.1 )
|
||
|
// level.blur = 0;
|
||
|
// }
|
||
|
// stable = true;
|
||
|
// }
|
||
|
// else
|
||
|
// {
|
||
|
// stable = false;
|
||
|
// // zooming out, sharpen things up quick
|
||
|
// depthdist += clear_rate;
|
||
|
//
|
||
|
// level.blur += blur_out_rate;
|
||
|
// }
|
||
|
//
|
||
|
// if ( level.fired_barrett )
|
||
|
// {
|
||
|
// level.fired_barrett = false;
|
||
|
// depthdist = fired_barrett_dist;
|
||
|
// level.blur = blur_barret_fired;
|
||
|
// }
|
||
|
//
|
||
|
// if ( level.blur > 12 )
|
||
|
// level.blur = 12;
|
||
|
// if ( level.blur < 0 )
|
||
|
// level.blur = 0;
|
||
|
//
|
||
|
// far_min = depthdist - depth_near;
|
||
|
// if ( far_min < 0 )
|
||
|
// far_min = 0;
|
||
|
//
|
||
|
// if ( depthdist > max_depthdist )
|
||
|
// depthdist = max_depthdist;
|
||
|
// else
|
||
|
// if ( depthdist < min_depthdist )
|
||
|
// depthdist = min_depthdist;
|
||
|
//
|
||
|
//// println( "dofdist " + depthdist + " zoom " + dist );
|
||
|
// level.player SetDepthOfField( 0, 0, far_min, depthdist, 8, 8 );
|
||
|
// if ( getdvarint( "r_dof_enable" ) != true )
|
||
|
// {
|
||
|
// setblur( level.blur, 0.05 );
|
||
|
// }
|
||
|
// olddist = dist;
|
||
|
// wait( 0.05 );
|
||
|
// }
|
||
|
//}
|
||
|
|
||
|
should_break_zoom_hint()
|
||
|
{
|
||
|
assert( isplayer( self ) );
|
||
|
|
||
|
if ( !flag( "player_is_on_turret" ) )
|
||
|
return true;
|
||
|
|
||
|
return flag( "player_used_zoom" );
|
||
|
}
|
||
|
|
||
|
player_learns_to_zoom()
|
||
|
{
|
||
|
|
||
|
flag_clear( "player_used_zoom" ); //make sure we show hint anytime player gets on the rifle
|
||
|
movement = level.player GetNormalizedMovement();
|
||
|
|
||
|
while( true )
|
||
|
{
|
||
|
wait( 0.05 );
|
||
|
movement = level.player GetNormalizedMovement(); //needs to move stick forward to learn
|
||
|
if ( movement[ 0 ] > 0.2 )
|
||
|
break;
|
||
|
//iprintlnbold( movement[ 0 ] + " : " + movement[ 1 ] );
|
||
|
}
|
||
|
wait( 6 );
|
||
|
flag_set( "player_used_zoom" );
|
||
|
}
|
||
|
|