114 lines
11 KiB
Plaintext
114 lines
11 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\system_shared;
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\shared\weapons\_weaponobjects;
|
|
|
|
|
|
|
|
|
|
#precache( "client_fx", "weapon/fx_betty_exp" );
|
|
#precache( "client_fx", "weapon/fx_betty_exp_death" );
|
|
#precache( "client_fx", "weapon/fx_betty_launch_dust" );
|
|
|
|
#using_animtree ( "bouncing_betty" );
|
|
|
|
#namespace bouncingbetty;
|
|
|
|
function init_shared( localClientNum )
|
|
{
|
|
level.explode_1st_offset = 55;
|
|
level.explode_2nd_offset = 95;
|
|
level.explode_main_offset = 140;
|
|
|
|
level._effect["fx_betty_friendly_light"] = "weapon/fx_betty_light_blue";
|
|
level._effect["fx_betty_enemy_light"] = "weapon/fx_betty_light_orng";
|
|
level._effect["fx_betty_exp"] = "weapon/fx_betty_exp";
|
|
level._effect["fx_betty_exp_death"] = "weapon/fx_betty_exp_death";
|
|
level._effect["fx_betty_launch_dust"] = "weapon/fx_betty_launch_dust";
|
|
|
|
clientfield::register( "missile", "bouncingbetty_state", 1, 2, "int",&bouncingbetty_state_change, !true, !true );
|
|
clientfield::register( "scriptmover", "bouncingbetty_state", 1, 2, "int",&bouncingbetty_state_change, !true, !true );
|
|
}
|
|
|
|
function bouncingbetty_state_change( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self endon("entityshutdown");
|
|
|
|
self util::waittill_dobj( localClientNum );
|
|
|
|
if ( !isdefined(self) )
|
|
return;
|
|
|
|
switch( newVal )
|
|
{
|
|
case 1:
|
|
{
|
|
self thread bouncingbetty_detonating( localClientNum );
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
self thread bouncingbetty_deploying( localClientNum );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function bouncingbetty_deploying( localClientNum )
|
|
{
|
|
self endon("entityshutdown");
|
|
|
|
self UseAnimTree( #animtree );
|
|
self SetAnim( %o_spider_mine_deploy, 1.0, 0.0, 1.0 );
|
|
}
|
|
|
|
function bouncingbetty_detonating( localClientNum )
|
|
{
|
|
self endon("entityshutdown");
|
|
|
|
up = anglesToUp(self.angles);
|
|
forward = anglesToForward(self.angles);
|
|
playfx( localClientNum, level._effect["fx_betty_launch_dust"], self.origin, up, forward );
|
|
self playsound( localClientNum, "wpn_betty_jump" );
|
|
|
|
self UseAnimTree( #animtree );
|
|
self SetAnim( %o_spider_mine_detonate, 1.0, 0.0, 1.0 );
|
|
self thread watchForExplosionNotetracks( localClientNum, up, forward );
|
|
}
|
|
|
|
|
|
function watchForExplosionNotetracks( localClientNum, up, forward )
|
|
{
|
|
self endon("entityshutdown");
|
|
|
|
while( 1 )
|
|
{
|
|
notetrack = self util::waittill_any_return( "explode_1st", "explode_2nd", "explode_main", "entityshutdown" );
|
|
|
|
switch( noteTrack )
|
|
{
|
|
case "explode_1st":
|
|
{
|
|
playfx( localClientNum, level._effect["fx_betty_exp"], self.origin + ( up * level.explode_1st_offset ), up, forward );
|
|
}
|
|
break;
|
|
case "explode_2nd":
|
|
{
|
|
playfx( localClientNum, level._effect["fx_betty_exp"], self.origin + ( up * level.explode_2nd_offset ), up, forward );
|
|
}
|
|
break;
|
|
case "explode_main":
|
|
{
|
|
playfx( localClientNum, level._effect["fx_betty_exp"], self.origin + ( up * level.explode_main_offset ), up, forward );
|
|
playfx( localClientNum, level._effect["fx_betty_exp_death"], self.origin, up, forward );
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
} |