nx1-gsc-dump/maps/mp/_adrenaline.gsc
2024-09-04 23:46:54 +10:00

471 lines
12 KiB
Plaintext

#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
ADRENALINE_UPDATE_TIME_SEC = 0.3;
ADRENALINE_MIN_HUD_ALPHA = 0.5;
ADRENALINE_FLASH_REMAINING_TIME_SEC = 5;
ADRENALINE_MIN_ALPHA_VALUE = 0.5;
ADRENALINE_FLASH_TIME_LEFT_SEC = 5.0;
ADRENALINE_ICON_PULSE_SCALE = 1.1;
//*******************************************************************
// *
// *
//*******************************************************************
init()
{
if( getDvarInt( "prototype_adrenaline_enabled" ) == 1 )
{
println( "Adrenaline enabled" );
initAdrenaline();
level thread onPlayerConnect();
}
else
{
println( "Adrenaline disabled" );
}
}
adrenalineDebugging()
{
return getDvarInt( "set adrenaline_debugging" );
}
//*******************************************************************
// *
// *
//*******************************************************************
initAdrenaline()
{
// setup the models and stuff we need for intel
precacheShader("combathigh_overlay");
level._adrenalineIconAsset = "hud_adrenaline";
precacheShader( level._adrenalineIconAsset );
}
//*******************************************************************
// *
// *
//*******************************************************************
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
player thread onPlayerSpawned();
}
}
//*******************************************************************
// *
// *
//*******************************************************************
onPlayerSpawned()
{
for(;;)
{
if( adrenalineDebugging())
println( "Adrenaline: onPlayerSpawned" );
self waittill( "spawned_player" );
self setupAdrenaline();
// update adrenaline value
self thread adrenalineThink();
// clean up the hud at death
self thread adrenalineWaitTillDeath();
// update the hud
self thread adrenalineUpdate();
// cleanup when ready
self thread adrenalineWaitCleanup();
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineThink()
{
self endon( "disconnect" );
self endon( "death" );
oldSPM = 0;
for(;;)
{
// cull out old scores
self adrenalineCleanScores();
newSPM = self adrenalineScorePerMin();
oldTime = self._adrenalineTimeSec;
if( adrenalineDebugging() && newSPM > 0 )
{
println( "old spm " + oldSPM + " new spm " + newSPM + " thres " + addrenalineGetSPMThreshold() + " adren time " + self._adrenalineTimeSec + " dvar " + getDvarInt( "adrenaline_winddown_time_sec" ) );
}
// calculate if we are in adrenaline mode
if( oldSPM < newSPM && addrenalineGetSPMThreshold() <= newSPM )
{
self._adrenalineTimeSec = getDvarInt( "adrenaline_winddown_time_sec" );
self notify( "adrenaline_update" );
}
oldSPM = newSPM;
// wait for another update run
wait ADRENALINE_UPDATE_TIME_SEC;
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineGetAlphaValue()
{
alpha = ( self._adrenalineTimeSec - ADRENALINE_FLASH_TIME_LEFT_SEC )/( getDvarFloat( "adrenaline_winddown_time_sec" ) - ADRENALINE_FLASH_TIME_LEFT_SEC ) * (1 - ADRENALINE_MIN_ALPHA_VALUE);
alpha += ADRENALINE_MIN_ALPHA_VALUE;
if( alpha > 1.0 )
{
alpha = 1.0;
}
//println( "alpha value calc ", alpha );
return alpha;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineCleanScores()
{
for ( i = 0; i < self._adrenScoreTimes.size; i++ )
{
if( gettime() - self._adrenScoreTimes[i] > getDvarFloat( "adrenaline_history_mins" ) * 60 * 1000 )
{
self._adrenScoreTimes[i] = undefined;
self._adrenScores[i] = undefined;
}
}
self._adrenScoreTimes = array_removeUndefined( self._adrenScoreTimes );
self._adrenScores = array_removeUndefined( self._adrenScores );
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineScorePerMin()
{
totalScore = 0;
foreach( score in self._adrenScores )
{
totalScore += score;
}
return totalScore / ( getDvarFloat( "adrenaline_history_mins" ) * 1.0 );
}
//*******************************************************************
// *
// *
//*******************************************************************
addrenalineGetSPMThreshold()
{
deaths = self GetPlayerData( "deaths" );
kills = self GetPlayerData( "kills" );
ratio = 1;
if( deaths > 0 )
{
ratio = kills / ( deaths * 1.0 );
}
if( ratio < 1 )
{
ratio = 1;
}
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + "kdratio " + ratio );
}
return getDvarInt( "adrenaline_spm_threshold" ) * ratio;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineAddScore( score )
{
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + " added score " + score );
}
if( isDefined( self._adrenalineOverlayOn ))
{
self._adrenScoreTimes[self._adrenScoreTimes.size] = gettime();
self._adrenScores[self._adrenScores.size] = score;
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineGetXPMultiplier()
{
mult = 1;
if( isDefined( self._adrenalineOverlayOn ) && self._adrenalineOverlayOn )
{
mult = getDvarInt( "adrenaline_xp_multiplier" );
}
return mult;
}
//*******************************************************************
// *
// *
//*******************************************************************
setupAdrenaline()
{
self._adrenalineTimeSec = 0;
self._adrenScoreTimes = [];
self._adrenScores = [];
self._adrenalineOverlayOn = false;
self._adrenalineXPEarned = false;
self.adrenalineOverlay = undefined;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineSetXPEarned()
{
self._adrenalineXPEarned = true;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineDidEarnXP()
{
ret = false;
if( getDvarInt( "prototype_adrenaline_enabled" ) == 1 )
{
ret = self._adrenalineXPEarned;
}
return ret;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineInAdrenalineMode()
{
ret = false;
if( getDvarInt( "prototype_adrenaline_enabled" ) == 1 && isDefined( self._adrenalineOverlayOn ))
{
ret = self._adrenalineOverlayOn;
}
return ret;
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineTrySplash( killedPlayer )
{
if( killedPlayer adrenalineInAdrenalineMode())
{
if( killedPlayer adrenalineDidEarnXP())
{
self thread maps\mp\gametypes\_hud_message::SplashNotifyDelayed( "adrenaline_mood_killer", 0 );
}
else
{
self thread maps\mp\gametypes\_hud_message::SplashNotifyDelayed( "adrenaline_iced", 0 );
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
enterAdrenaline()
{
if( !self._adrenalineOverlayOn )
{
self.adrenalineOverlay = newClientHudElem( self );
self.adrenalineOverlay.x = 0;
self.adrenalineOverlay.y = 0;
self.adrenalineOverlay.alignX = "left";
self.adrenalineOverlay.alignY = "top";
self.adrenalineOverlay.horzAlign = "fullscreen";
self.adrenalineOverlay.vertAlign = "fullscreen";
self.adrenalineOverlay setshader ( "combathigh_overlay", 640, 480 );
self.adrenalineOverlay.sort = -10;
self.adrenalineOverlay.archived = true;
self.adrenalineOverlay.alpha = 0;
self._adrenalineOverlayOn = true;
self.adrenalineIcon = createIcon( level._adrenalineIconAsset, 40, 40 );
self.adrenalineIcon.horzAlign = "left";
self.adrenalineIcon.alignX = "left";
self.adrenalineIcon.y = 0;
self.adrenalineIcon.x = 110;
self.adrenalineIcon.sort = -10;
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineUpdate()
{
self endon( "death" );
self endon( "disconnect" );
for(;;)
{
self waittill( "adrenaline_update" );
if( !self._adrenalineOverlayOn )
{
wait 0.05;
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + " enterAdrenaline" );
}
self enterAdrenaline();
self thread maps\mp\gametypes\_hud_message::SplashNotify( "adrenaline_enter", 0 );
}
self.adrenalineOverlay fadeOverTime( 0.3 );
self.adrenalineOverlay.alpha = 1;
wait 0.3;
self thread adrenalineThreadWinddown();
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineThreadWinddown()
{
self endon( "adrenaline_update" );
self endon( "death" );
self endon( "disconnect" );
// the normal fade down
while( self._adrenalineTimeSec > ADRENALINE_FLASH_TIME_LEFT_SEC )
{
alpha = self adrenalineGetAlphaValue();
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + " update alpha " + alpha );
}
self.adrenalineOverlay fadeOverTime( ADRENALINE_UPDATE_TIME_SEC );
self.adrenalineOverlay.alpha = alpha;
wait ADRENALINE_UPDATE_TIME_SEC;
self._adrenalineTimeSec -= ADRENALINE_UPDATE_TIME_SEC;
}
origWidth = 40;
origHeight = 40;
while( self._adrenalineTimeSec > 0 )
{
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + " update alpha " + ADRENALINE_MIN_ALPHA_VALUE );
}
self.AdrenalineOverlay fadeOverTime( 0.1 );
self.adrenalineOverlay.alpha = ADRENALINE_MIN_ALPHA_VALUE * 1.3;
self.adrenalineIcon scaleOverTime( 0.05, int( origWidth * ADRENALINE_ICON_PULSE_SCALE ), int( origHeight * ADRENALINE_ICON_PULSE_SCALE ) );
wait 0.05;
self.adrenalineIcon scaleOverTime( 0.3, origWidth, origHeight );
self.AdrenalineOverlay fadeOverTime( 0.1 );
self.adrenalineOverlay.alpha = ADRENALINE_MIN_ALPHA_VALUE;
wait 0.9;
self._adrenalineTimeSec -= 1;
}
self.AdrenalineOverlay fadeOverTime( 0.3 );
self.adrenalineOverlay.alpha = 0;
wait 0.3;
self notify( "adrenaline_cleanup" );
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineWaitCleanup()
{
for(;;)
{
self waittill_any_return( "adrenaline_cleanup", "death", "disconnect" );
if( adrenalineDebugging())
{
println( "Adrenaline: " + self.name + "adrenalineWaitCleanup()" );
}
if( self._adrenalineOverlayOn )
{
self._adrenalineOverlayOn = false;
self.adrenalineOverlay destroy();
self.adrenalineOverlay = undefined;
self.adrenalineIcon destroy();
self.adrenalineIcon = undefined;
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
adrenalineWaitTillDeath()
{
self waittill( "death" );
self notify( "adrenaline_cleanup" );
}