mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
363 lines
8.6 KiB
Plaintext
363 lines
8.6 KiB
Plaintext
#include common_scripts\utility;
|
||
#include maps\_utility;
|
||
#include maps\_hud_util;
|
||
init()
|
||
{
|
||
precachestring( &"SCRIPT_PLATFORM_CHEAT_USETOSLOWMO" );
|
||
precacheShellshock( "chaplincheat" );
|
||
level.vision_cheat_enabled = false;
|
||
level.tire_explosion = false;
|
||
level.cheatStates= [];
|
||
level.cheatFuncs = [];
|
||
level.cheatDvars = [];
|
||
level.cheatBobAmpOriginal = GetDvar( #"bg_bobAmplitudeStanding" );
|
||
level.cheatShowSlowMoHint = 0;
|
||
if ( !isdefined( level._effect ) )
|
||
level._effect = [];
|
||
level._effect["grain_test"] = loadfx ("misc/fx_grain_test");
|
||
flag_init("has_cheated");
|
||
level.visionSets["bw"] = false;
|
||
level.visionSets["invert"] = false;
|
||
level.visionSets["contrast"] = false;
|
||
level.visionSets["chaplin"] = false;
|
||
level thread death_monitor();
|
||
flag_init( "disable_slowmo_cheat" );
|
||
}
|
||
player_init()
|
||
{
|
||
self thread specialFeaturesMenu();
|
||
players = get_players();
|
||
if( self == players[0] )
|
||
{
|
||
self slowmo_system_init();
|
||
}
|
||
}
|
||
death_monitor()
|
||
{
|
||
setDvars_based_on_varibles();
|
||
while ( 1 )
|
||
{
|
||
if ( issaverecentlyloaded() )
|
||
setDvars_based_on_varibles();
|
||
wait .1;
|
||
}
|
||
}
|
||
setDvars_based_on_varibles()
|
||
{
|
||
for ( index = 0; index < level.cheatDvars.size; index++ )
|
||
setDvar( level.cheatDvars[ index ], level.cheatStates[ level.cheatDvars[ index ] ] );
|
||
if( !isdefined( level.credits_active ) || !level.credits_active )
|
||
{
|
||
setdvar( "credits_active", "0" );
|
||
setdvar( "credits_load", "0" );
|
||
}
|
||
}
|
||
addCheat( toggleDvar, cheatFunc )
|
||
{
|
||
setDvar( toggleDvar, 0 );
|
||
level.cheatStates[toggleDvar] = getDvarInt( toggleDvar );
|
||
level.cheatFuncs[toggleDvar] = cheatFunc;
|
||
if ( level.cheatStates[toggleDvar] )
|
||
[[cheatFunc]]( level.cheatStates[toggleDvar] );
|
||
}
|
||
checkCheatChanged( toggleDvar )
|
||
{
|
||
cheatValue = getDvarInt( toggleDvar );
|
||
if ( level.cheatStates[toggleDvar] == cheatValue )
|
||
return;
|
||
if( cheatValue )
|
||
flag_set("has_cheated");
|
||
level.cheatStates[toggleDvar] = cheatValue;
|
||
[[level.cheatFuncs[toggleDvar]]]( cheatValue );
|
||
}
|
||
specialFeaturesMenu()
|
||
{
|
||
addCheat( "sf_use_contrast", ::contrastMode );
|
||
addCheat( "sf_use_bw", ::bwMode );
|
||
addCheat( "sf_use_invert", ::invertMode );
|
||
addCheat( "sf_use_slowmo", ::slowmoMode );
|
||
addCheat( "sf_use_ignoreammo", ::ignore_ammoMode );
|
||
addCheat( "sf_use_clustergrenade", ::clustergrenadeMode );
|
||
addCheat( "sf_use_tire_explosion", ::tire_explosionMode );
|
||
level.cheatDvars = getArrayKeys( level.cheatStates );
|
||
for ( ;; )
|
||
{
|
||
for ( index = 0; index < level.cheatDvars.size; index++ )
|
||
checkCheatChanged( level.cheatDvars[index] );
|
||
wait 0.5;
|
||
}
|
||
}
|
||
tire_explosionMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
level.tire_explosion = true;
|
||
else
|
||
level.tire_explosion = false;
|
||
}
|
||
clustergrenadeMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
self thread wait_for_grenades();
|
||
else
|
||
{
|
||
level notify ( "end_cluster_grenades" );
|
||
}
|
||
}
|
||
wait_for_grenades()
|
||
{
|
||
level endon ( "end_cluster_grenades" );
|
||
while(1)
|
||
{
|
||
self waittill("grenade_fire", grenade, weapname);
|
||
if ( weapname != "frag_grenade" )
|
||
continue;
|
||
grenade thread create_clusterGrenade();
|
||
}
|
||
}
|
||
create_clusterGrenade()
|
||
{
|
||
prevorigin = self.origin;
|
||
while(1)
|
||
{
|
||
if ( !isdefined( self ) )
|
||
break;
|
||
prevorigin = self.origin;
|
||
wait .1;
|
||
}
|
||
prevorigin += (0,0,5);
|
||
numSecondaries = 8;
|
||
aiarray = getaiarray();
|
||
if ( aiarray.size == 0 )
|
||
return;
|
||
ai = undefined;
|
||
for ( i = 0; i < aiarray.size; i++ )
|
||
{
|
||
if ( aiarray[i].team == "allies" )
|
||
{
|
||
ai = aiarray[i];
|
||
break;
|
||
}
|
||
}
|
||
if ( !isdefined( ai ) )
|
||
ai = aiarray[0];
|
||
oldweapon = ai.grenadeweapon;
|
||
ai.grenadeweapon = "frag_grenade";
|
||
for ( i = 0; i < numSecondaries; i++ )
|
||
{
|
||
velocity = getClusterGrenadeVelocity();
|
||
timer = 1.5 + i / 6 + randomfloat(0.1);
|
||
ai magicGrenadeManual( prevorigin, velocity, timer );
|
||
}
|
||
ai.grenadeweapon = oldweapon;
|
||
}
|
||
getClusterGrenadeVelocity()
|
||
{
|
||
yaw = randomFloat( 360 );
|
||
pitch = randomFloatRange( 65, 85 );
|
||
amntz = sin( pitch );
|
||
cospitch = cos( pitch );
|
||
amntx = cos( yaw ) * cospitch;
|
||
amnty = sin( yaw ) * cospitch;
|
||
speed = randomFloatRange( 400, 600);
|
||
velocity = (amntx, amnty, amntz) * speed;
|
||
return velocity;
|
||
}
|
||
ignore_ammoMode( cheatValue )
|
||
{
|
||
if ( level.script == "ac130" )
|
||
return;
|
||
if ( cheatValue )
|
||
setsaveddvar ( "player_sustainAmmo", 1 );
|
||
else
|
||
setsaveddvar ( "player_sustainAmmo", 0 );
|
||
}
|
||
contrastMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
level.visionSets["contrast"] = true;
|
||
else
|
||
level.visionSets["contrast"] = false;
|
||
applyVisionSets();
|
||
}
|
||
bwMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
level.visionSets["bw"] = true;
|
||
else
|
||
level.visionSets["bw"] = false;
|
||
applyVisionSets();
|
||
}
|
||
invertMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
level.visionSets["invert"] = true;
|
||
else
|
||
level.visionSets["invert"] = false;
|
||
applyVisionSets();
|
||
}
|
||
applyVisionSets()
|
||
{
|
||
if ( level.script == "ac130" )
|
||
return;
|
||
visionSet = "";
|
||
if ( level.visionSets["bw"] )
|
||
visionSet = visionSet + "_bw";
|
||
if ( level.visionSets["invert"] )
|
||
visionSet = visionSet + "_invert";
|
||
if ( level.visionSets["contrast"] )
|
||
visionSet = visionSet + "_contrast";
|
||
if ( level.visionSets["chaplin"] )
|
||
{
|
||
level.vision_cheat_enabled = true;
|
||
visionSetNaked( "sepia", 0.5 );
|
||
}
|
||
else if ( visionSet != "" )
|
||
{
|
||
level.vision_cheat_enabled = true;
|
||
visionSetNaked( "cheat" + visionSet, 1.0 );
|
||
}
|
||
else
|
||
{
|
||
level.vision_cheat_enabled = false;
|
||
visionSetNaked( level.lvl_visionset, 3.0 );
|
||
}
|
||
}
|
||
slowmo_system_init()
|
||
{
|
||
if( !IsDefined( level.slowmo ) )
|
||
{
|
||
level.slowmo = spawnstruct();
|
||
slowmo_system_defaults();
|
||
level.slowmo.speed_current = level.slowmo.speed_norm;
|
||
level.slowmo.lerp_interval = .05;
|
||
level.slowmo.lerping = 0;
|
||
}
|
||
}
|
||
slowmo_system_defaults()
|
||
{
|
||
level.slowmo.lerp_time_in = 0.0;
|
||
level.slowmo.lerp_time_out = .25;
|
||
level.slowmo.speed_slow = 0.4;
|
||
level.slowmo.speed_norm = 1.0;
|
||
}
|
||
slowmo_check_system()
|
||
{
|
||
return true;
|
||
}
|
||
slowmo_hintprint()
|
||
{
|
||
if ( level.cheatShowSlowMoHint != 0 )
|
||
{
|
||
level.cheatShowSlowMoHint = 0;
|
||
return;
|
||
}
|
||
if ( !level.console )
|
||
return;
|
||
level.cheatShowSlowMoHint = 1;
|
||
myTextSize = 1.6;
|
||
myHintBack = createIcon( "black", 650, 30 );
|
||
myHintBack.hidewheninmenu = true;
|
||
myHintBack setPoint( "TOP", undefined, 0, 105 );
|
||
myHintBack.alpha = .2;
|
||
myHintBack.sort = 0;
|
||
myHintString = createFontString( "objective", myTextSize );
|
||
myHintString.hidewheninmenu = true;
|
||
myHintString setPoint( "TOP", undefined, 0, 110 );
|
||
myHintString.sort = 0.5;
|
||
myHintString setText( &"SCRIPT_PLATFORM_CHEAT_USETOSLOWMO" );
|
||
for ( cycles = 0; cycles < 100; cycles++ )
|
||
{
|
||
if ( level.cheatShowSlowMoHint != 1 )
|
||
break;
|
||
if ( isDefined( level.hintElem ) )
|
||
break;
|
||
wait 0.1;
|
||
}
|
||
level.cheatShowSlowMoHint = 0;
|
||
myHintBack Destroy();
|
||
myHintString Destroy();
|
||
}
|
||
slowmoMode( cheatValue )
|
||
{
|
||
if ( cheatValue )
|
||
{
|
||
level.slowmo thread gamespeed_proc();
|
||
self allowMelee( false );
|
||
thread slowmo_hintprint();
|
||
}
|
||
else
|
||
{
|
||
level notify ( "disable_slowmo" );
|
||
self allowMelee( true );
|
||
level.slowmo thread gamespeed_reset();
|
||
level.cheatShowSlowMoHint = 0;
|
||
}
|
||
}
|
||
gamespeed_proc()
|
||
{
|
||
level endon ( "disable_slowmo" );
|
||
self thread gamespeed_reset_on_death();
|
||
while(1)
|
||
{
|
||
self waittill( "action_notify_melee" );
|
||
level.cheatShowSlowMoHint = 0;
|
||
if( !flag( "disable_slowmo_cheat" ) )
|
||
{
|
||
if( self.speed_current < level.slowmo.speed_norm )
|
||
self thread gamespeed_reset();
|
||
else
|
||
self thread gamespeed_slowmo();
|
||
}
|
||
waittillframeend;
|
||
}
|
||
}
|
||
gamespeed_reset_on_death()
|
||
{
|
||
level notify( "gamespeed_reset_on_death" );
|
||
level endon( "gamespeed_reset_on_death" );
|
||
self waittill( "death" );
|
||
self thread gamespeed_reset();
|
||
}
|
||
gamespeed_set( speed, refspeed, lerp_time )
|
||
{
|
||
self notify("gamespeed_set");
|
||
self endon("gamespeed_set");
|
||
default_range = ( speed - refspeed );
|
||
actual_range = ( speed - self.speed_current );
|
||
actual_rangebytime = actual_range * lerp_time;
|
||
if( !default_range )
|
||
return;
|
||
time = ( actual_rangebytime / default_range );
|
||
interval = self.lerp_interval;
|
||
cycles = int( time / interval );
|
||
if(!cycles)
|
||
cycles = 1;
|
||
increment = ( actual_range / cycles );
|
||
self.lerping = time;
|
||
while(cycles)
|
||
{
|
||
self.speed_current += increment;
|
||
settimescale( self.speed_current );
|
||
cycles--;
|
||
self.lerping -= interval;
|
||
wait interval;
|
||
}
|
||
self.speed_current = speed;
|
||
settimescale( self.speed_current );
|
||
self.lerping = 0;
|
||
}
|
||
gamespeed_slowmo()
|
||
{
|
||
gamespeed_set( self.speed_slow, self.speed_norm, self.lerp_time_in );
|
||
}
|
||
gamespeed_reset()
|
||
{
|
||
gamespeed_set( self.speed_norm, self.speed_slow, self.lerp_time_out );
|
||
}
|
||
is_cheating()
|
||
{
|
||
for ( i = 0; i < level.cheatDvars.size; i++ )
|
||
if(level.cheatStates[ level.cheatDvars[i] ] )
|
||
return true;
|
||
return false;
|
||
} |