boiii-scripts/mp/mp_miniature_ant.gsc
2023-04-13 17:30:38 +02:00

97 lines
7.6 KiB
Plaintext

#using scripts\codescripts\struct;
#using scripts\shared\scene_shared;
#using scripts\shared\array_shared;
#using scripts\shared\util_shared;
#precache( "fx", "dlc4/mp_mini/fx_ant_death" );
function main()
{
level.antNames = [];
level.antNames[ level.antNames.size ] = "beer";
level.antNames[ level.antNames.size ] = "coffee";
level.antNames[ level.antNames.size ] = "cooler";
level.antNames[ level.antNames.size ] = "pizza";
level.antNames[ level.antNames.size ] = "soda";
level.ants = [];
for( i = 0; i < level.antNames.size; i++ )
{
ant_init_struct( i );
}
}
function ant_init_struct( locationNumber )
{
level.ants[ level.ants.size ] = SpawnStruct();
ant = level.ants[ level.ants.size - 1 ];
ant.bundles = [];
ant.bundles[ ant.bundles.size ] = "p7_fxanim_mp_mini_ant_" + level.antNames[ locationNumber ] + "_path_01_bundle";
ant.bundles[ ant.bundles.size ] = "p7_fxanim_mp_mini_ant_" + level.antNames[ locationNumber ] + "_path_02_bundle";
ant.currentCount = 0;
for( i = 0; i < 2; i++ )
{
level thread run_ants( ant.bundles );
}
}
function run_ants( a_bundles )
{
s_ant_structs = [];
foreach ( str_scene in a_bundles )
{
scene::add_scene_func( str_scene, &ant_watcher );
if ( !isdefined( s_ant_structs ) ) s_ant_structs = []; else if ( !IsArray( s_ant_structs ) ) s_ant_structs = array( s_ant_structs ); s_ant_structs[s_ant_structs.size]=struct::get( str_scene, "scriptbundlename" );;
}
while ( true )
{
waitTime = RandomIntRange( 9, 12 );
wait( waitTime );
s_ant = array::random( s_ant_structs );
s_unique_ant = SpawnStruct();
s_unique_ant.origin = s_ant.origin;
s_unique_ant.angles = s_ant.angles;
s_unique_ant thread scene::play( s_ant.scriptbundlename );
}
}
function ant_watcher( a_ents )
{
e_ant = a_ents[ "ant" ];
e_ant endon( "death" );
e_ant waittill( "damage" );
PlayFxOnTag( "dlc4/mp_mini/fx_ant_death", e_ant, "body_jnt" );
{wait(.05);};
e_ant Delete();
}