Files
IL-GSC/BO1/PC/ZM/clientscripts/_zombiemode_equip_gasmask.csc
2024-02-18 17:32:07 -05:00

134 lines
3.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include clientscripts\_utility;
#include clientscripts\_fx;
init_filter_indices()
{
if ( isdefined( level.genericfilterinitialized ) )
return;
level.genericfilterinitialized = true;
level.filter_matcount = 4;
level.targetid_none = 0;
level.targerid_small0 = 1;
level.targerid_small1 = 2;
level.targerid_scene = 3;
level.targerid_postsun = 4;
level.targerid_smallblur = 5;
}
map_material_helper( player, materialname )
{
if(!IsDefined(level.filter_matid))
{
level.filter_matid = [];
}
if(IsDefined(level.filter_matid[materialname]))
{
player map_material( level.filter_matid[materialname], materialname );
}
else
{
level.filter_matid[materialname] = level.filter_matcount;
player map_material( level.filter_matcount, materialname );
level.filter_matcount++;
}
}
init_filter_hazmat( player )
{
init_filter_indices();
map_material_helper( player, "zom_generic_filter_hazmat_moon" );
map_material_helper( player, "zom_generic_overlay_hazmat_1" );
}
set_filter_hazmat_opacity( player, filterid, overlayid, opacity )
{
player set_filter_pass_constant( filterid, 0, 0, opacity );
player set_overlay_constant( overlayid, 0, opacity );
}
enable_filter_hazmat( player, filterid, overlayid, opacity )
{
player set_filter_pass_material( filterid, 0, level.filter_matid["zom_generic_filter_hazmat_moon"], level.targerid_scene, level.targerid_scene, level.targetid_none );
player set_filter_pass_enabled( filterid, 0, true );
player set_overlay_material( overlayid, level.filter_matid["zom_generic_overlay_hazmat_1"], 1 );
player set_overlay_enabled( overlayid, true );
set_filter_hazmat_opacity( player, filterid, overlayid, opacity );
}
disable_filter_hazmat( player, filterid, overlayid )
{
player set_filter_pass_enabled( filterid, 0, false );
player set_overlay_enabled( overlayid, false );
}
init()
{
if ( GetDvar( #"createfx" ) == "on" )
{
return;
}
if ( !clientscripts\_zombiemode_equipment::is_equipment_included( "equip_gasmask_zm" ) )
{
return;
}
level._CF_PLAYER_GASMASK_OVERLAY = 9;
register_clientflag_callback("player",level._CF_PLAYER_GASMASK_OVERLAY, ::gasmask_overlay_handler);
level thread player_init();
}
gasmask_overlay_handler(lcn, set, newEnt)
{
player = GetLocalPlayers()[ lcn ];
if( player GetEntityNumber() != self GetEntityNumber() )
{
return;
}
if(self IsSpectating())
{
return;
}
if(IsDefined(newEnt) && newEnt)
{
return;
}
if( set )
{
enable_filter_hazmat( self, 0, 0, 1.0 );
self thread playsounds_gasmask( 1 );
}
else
{
disable_filter_hazmat( self, 0, 0 );
self thread playsounds_gasmask( 0 );
}
}
player_init()
{
waitforallclients( );
wait(1.0);
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
init_filter_hazmat( players[i] );
}
}
playsounds_gasmask( on )
{
if( !isdefined( self.gasmask_audio_ent ) )
{
self.gasmask_audio_ent = spawn( 0, (0,0,0), "script_origin" );
}
if( on )
{
self.gasmask_audio_ent playloopsound( "evt_gasmask_loop", .5 );
if( isdefined( level._audio_zombie_gasmask_func ) )
{
level thread [[level._audio_zombie_gasmask_func]]( on );
}
}
else
{
playsound( 0, "evt_gasmask_off", (0,0,0) );
self.gasmask_audio_ent stoploopsound( .5 );
self.gasmask_audio_ent delete();
self.gasmask_audio_ent = undefined;
if( isdefined( level._audio_zombie_gasmask_func ) )
{
level thread [[level._audio_zombie_gasmask_func]]( on );
}
}
}