#using scripts\codescripts\struct; #using scripts\shared\animation_shared; #using scripts\shared\callbacks_shared; #using scripts\shared\clientfield_shared; #using scripts\shared\duplicaterender_mgr; #using scripts\shared\scene_shared; #using scripts\shared\system_shared; #using scripts\shared\util_shared; #using scripts\shared\audio_shared; #using scripts\shared\abilities\gadgets\_gadget_camo_render; #using scripts\shared\abilities\gadgets\_gadget_clone_render; #using scripts\shared\ai\systems\fx_character; #using_animtree("all_player"); #precache( "client_fx", "player/fx_loot_taunt_e_reaper_main_03" ); #precache( "client_fx", "player/fx_loot_taunt_outrider_talon_lights" ); #namespace end_game_taunts; function autoexec __init__sytem__() { system::register("end_game_taunts",&__init__,undefined,undefined); } function __init__() { animation::add_notetrack_func( "taunts::hide", &hideModel ); animation::add_notetrack_func( "taunts::show", &showModel ); animation::add_notetrack_func( "taunts::cloneshaderon", &cloneShaderOn ); animation::add_notetrack_func( "taunts::cloneshaderoff", &cloneShaderOff ); animation::add_notetrack_func( "taunts::camoshaderon", &camoShaderOn ); animation::add_notetrack_func( "taunts::camoshaderoff", &camoShaderOff ); animation::add_notetrack_func( "taunts::spawncameraglass", &spawnCameraGlass ); animation::add_notetrack_func( "taunts::deletecameraglass", &deleteCameraGlass ); animation::add_notetrack_func( "taunts::reaperbulletglass", &reaperBulletGlass ); animation::add_notetrack_func( "taunts::centerbulletglass", ¢erBulletGlass ); animation::add_notetrack_func( "taunts::talonbulletglassleft", &talonBulletGlassLeft ); animation::add_notetrack_func( "taunts::talonbulletglassright", &talonBulletGlassRight ); animation::add_notetrack_func( "taunts::fireweapon", &fireWeapon ); animation::add_notetrack_func( "taunts::stopfireweapon", &stopFireWeapon ); animation::add_notetrack_func( "taunts::firebeam", &fireBeam ); animation::add_notetrack_func( "taunts::stopfirebeam", &stopFireBeam ); animation::add_notetrack_func( "taunts::playwinnerteamfx", &playWinnerTeamFx ); animation::add_notetrack_func( "taunts::playlocalteamfx", &playLocalTeamFx ); level.epicTauntXModels = array( // Models used in script "gfx_p7_zm_asc_data_recorder_glass", "wpn_t7_hero_reaper_minigun_prop", "wpn_t7_loot_hero_reaper3_minigun_prop", "c_zsf_robot_grunt_body", "c_zsf_robot_grunt_head", "veh_t7_drone_raps_mp_lite", "veh_t7_drone_raps_mp_dark", "veh_t7_drone_attack_gun_litecolor", "veh_t7_drone_attack_gun_darkcolor", // Notetrack and Scriptbundle models "wpn_t7_arm_blade_prop", "wpn_t7_hero_annihilator_prop", "wpn_t7_hero_bow_prop", "wpn_t7_hero_electro_prop_animate", "wpn_t7_hero_flamethrower_world", "wpn_t7_hero_mgl_world", "wpn_t7_hero_mgl_prop", "wpn_t7_hero_spike_prop", "wpn_t7_hero_seraph_machete_prop", "wpn_t7_loot_crowbar_world", "wpn_t7_spider_mine_world", "wpn_t7_zmb_katana_prop" ); // Stop streaming epic models whenever we start up a new VM stop_stream_epic_models(); } /# function check_force_taunt() { while ( 1 ) { SetDvar( "forceTaunt", "" ); {wait(.05);}; taunt = GetDvarString( "forceTaunt" ); if ( taunt == "" ) continue; model = level.topPlayerCharacters[ 0 ]; if ( !isdefined( model ) || isdefined( model.playingTaunt ) || ( isdefined( model.playingGesture ) && model.playingGesture ) ) continue; bodyType = GetDvarInt( "forceTauntBodyType", -1 ); SetDvar( "forceTauntBodyType", -1 ); if ( bodyType >= 0 ) { tauntModel = spawn_temp_specialist_model( model.localClientNum, bodyType, model.origin, model.angles, model.showcaseWeapon ); model Hide(); } else { tauntModel = model; } idleAnimName = getIdleAnimName( model.localClientNum, model, 0 ); playTaunt( model.localClientNum, tauntModel, 0, idleAnimName, taunt ); if ( tauntModel != model ) { tauntModel Delete(); model Show(); } } } function check_force_gesture() { while ( 1 ) { SetDvar( "forceGesture", "" ); {wait(.05);}; gesture = GetDvarString( "forceGesture" ); if ( gesture == "" ) continue; model = level.topPlayerCharacters[ 0 ]; if ( !isdefined( model ) || isdefined( model.playingTaunt ) || ( isdefined( model.playingGesture ) && model.playingGesture ) ) continue; idleAnimName = getIdleAnimName( model.localClientNum, model, 0 ); playGesture( model.localClientNum, model, 0, idleAnimName, gesture, true ); } } function draw_runner_up_bounds() { while( 1 ) { {wait(.016);}; if ( !GetDvarInt( "runnerupboxes", 0 ) ) continue; for ( i = 1; i < 3; i++ ) { model = level.topPlayerCharacters[i]; Box( model.origin, ( -15, -15, 0 ), ( 15, 15, 72 ), model.angles[1], ( 0, 0, 1 ), false, 1 ); } } } function spawn_temp_specialist_model( localClientNum, characterIndex, origin, angles, showcaseWeapon ) { tempModel = Spawn( localClientNum, origin, "script_model" ); tempModel.angles = angles; tempModel.showcaseWeapon = showcaseWeapon; tempModel.bodyModel = GetCharacterBodyModel( characterIndex, 0, CurrentSessionMode() ); tempModel.helmetModel = GetCharacterHelmetModel( characterIndex, 0, CurrentSessionMode() ); tempModel SetModel( tempModel.bodyModel ); tempModel Attach( tempModel.helmetModel, "" ); tempModel.modeRenderOptions = GetCharacterModeRenderOptions( CurrentSessionMode() ); tempModel.bodyRenderOptions = GetCharacterBodyRenderOptions( characterIndex, 0, 0, 0, 0 ); tempModel.helmetRenderOptions = GetCharacterHelmetRenderOptions( characterIndex, 0, 0, 0, 0 ); tempModel SetBodyRenderOptions( tempModel.modeRenderOptions, tempModel.bodyRenderOptions, tempModel.helmetRenderOptions, tempModel.helmetRenderOptions ); return tempModel; } #/ function playCurrentTaunt( localClientNum, characterModel, topPlayerIndex ) { tauntAnimName = GetTopPlayersTaunt( localClientNum, topPlayerIndex, 0 ); idleAnimName = getIdleAnimName( localClientNum, characterModel, topPlayerIndex ); playTaunt( localClientNum, characterModel, topPlayerIndex, idleAnimName, tauntAnimName ); } function previewTaunt( localClientNum, characterModel, idleAnimName, tauntAnimName ) { cancelGesture( characterModel ); deleteCameraGlass( undefined ); playTaunt( localClientNum, characterModel, 0, idleAnimName, tauntAnimName, 0, false ); } function playTaunt( localClientNum, characterModel, topPlayerIndex, idleAnimName, tauntAnimName, toTauntBlendTime = 0, playTransitions = true ) { if ( !isdefined( tauntAnimName ) || tauntAnimName == "" ) { return; } cancelTaunt( localClientNum, characterModel ); characterModel StopSounds(); characterModel endon( "cancelTaunt" ); characterModel util::waittill_dobj( localClientNum ); if( !characterModel HasAnimTree() ) { characterModel UseAnimTree( #animtree ); } characterModel.playingTaunt = tauntAnimName; characterModel notify( "tauntStarted" ); // Clear the idle characterModel ClearAnim( idleAnimName, toTauntBlendTime ); // Get the transition anim, dependent on the weapon idleInAnimName = getIdleInAnimName( characterModel, topPlayerIndex ); // Hide the weapon hideWeapon( characterModel ); characterModel thread playEpicTauntScene( localClientNum, tauntAnimName ); // Play taunt anim, VO is hooked up in the exported notetracks characterModel animation::play( tauntAnimName, undefined, undefined, 1, toTauntBlendTime, 0.4 ); // Play transition to idle anim if ( ( isdefined( playTransitions ) && playTransitions ) ) { self thread waitAppearWeapon( characterModel ); playTransitionAnim( characterModel, idleInAnimName, 0.4, 0.4 ); } // Reattach the weapon showWeapon( characterModel ); // Play idle anim characterModel thread animation::play( idleAnimName, undefined, undefined, 1, 0.4, 0 ); characterModel.playingTaunt = undefined; characterModel notify( "tauntFinished" ); characterModel shutdownEpicTauntModels(); } function cancelTaunt( localClientNum, characterModel ) { if ( isdefined( characterModel.playingTaunt ) ) { characterModel cloneShaderOff(); characterModel shutdownEpicTauntModels(); characterModel stopEpicTauntScene( localClientNum, characterModel.playingTaunt ); characterModel StopSounds(); } characterModel notify( "cancelTaunt" ); characterModel.playingTaunt = undefined; characterModel.epicTauntModels = undefined; } function playGestureType( localClientNum, characterModel, topPlayerIndex, gestureType ) { idleAnimName = getIdleAnimName( localClientNum, characterModel, topPlayerIndex ); gestureAnimName = GetTopPlayersGesture( localClientNum, topPlayerIndex, gestureType ); playGesture( localClientNum, characterModel, topPlayerIndex, idleAnimName, gestureAnimName ); } function previewGesture( localClientNum, characterModel, idleAnimName, gestureAnimName ) { cancelTaunt( localClientNum, characterModel ); deleteCameraGlass( undefined ); playGesture( localClientNum, characterModel, 0, idleAnimName, gestureAnimName, false ); } function playGesture( localClientNum, characterModel, topPlayerIndex, idleAnimName, gestureAnimName, playTransitions = true ) { if ( !isdefined( gestureAnimName ) || gestureAnimName == "" ) { return; } cancelGesture( characterModel ); characterModel endon( "cancelGesture" ); characterModel util::waittill_dobj( localClientNum ); if( !characterModel HasAnimTree() ) { characterModel UseAnimTree( #animtree ); } characterModel.playingGesture = true; characterModel notify( "gestureStarted" ); // Get and clear the idle characterModel ClearAnim( idleAnimName, 0.4 ); // Get transition anims, dependent on the weapon idleOutAnimName = getIdleOutAnimName( characterModel, topPlayerIndex ); idleInAnimName = getIdleInAnimName( characterModel, topPlayerIndex ); // Play transition out of idle anim if ( ( isdefined( playTransitions ) && playTransitions ) ) { self thread waitRemoveWeapon( characterModel ); playTransitionAnim( characterModel, idleOutAnimName, 0.4, 0.4 ); } // Get and hide the weapon hideWeapon( characterModel ); // Play gesture anim characterModel animation::play( gestureAnimName, undefined, undefined, 1, 0.4, 0.4 ); // Play transition to idle anim if ( ( isdefined( playTransitions ) && playTransitions ) ) { self thread waitAppearWeapon( characterModel ); playTransitionAnim( characterModel, idleInAnimName, 0.4, 0.4 ); } // Reattach the weapon showWeapon( characterModel ); // Play idle anim characterModel thread animation::play( idleAnimName, undefined, undefined, 1, 0.4, 0 ); characterModel.playingGesture = false; characterModel notify( "gestureFinished" ); } function cancelGesture( characterModel ) { characterModel notify( "cancelGesture" ); characterModel.playingGesture = false; } function playTransitionAnim( characterModel, transitionAnimName, blendInTime = 0, blendOutTime = 0 ) { characterModel endon( "cancelTaunt" ); // This should go away when all the transitions are in if ( !isdefined( transitionAnimName ) || transitionAnimName == "" ) { return; } characterModel animation::play( transitionAnimName, undefined, undefined, 1, blendInTime, blendOutTime ); } function waitRemoveWeapon( characterModel ) { characterModel endon( "weaponHidden" ); while( 1 ) { characterModel waittill( "_anim_notify_", param1 ); if ( param1 == "remove_from_hand" ) { hideWeapon( characterModel ); return; } } } function waitAppearWeapon( characterModel ) { characterModel endon( "weaponShown" ); while( 1 ) { characterModel waittill( "_anim_notify_", param1 ); if ( param1 == "appear_in_hand" ) { showWeapon( characterModel ); return; } } } function hideWeapon( characterModel ) { if ( characterModel.weapon == level.weaponNone ) { return; } MarkAsDirty( characterModel ); characterModel AttachWeapon( level.weaponNone ); characterModel UseWeaponHideTags( level.weaponNone ); characterModel notify ( "weaponHidden" ); } function showWeapon( characterModel ) { if ( !isdefined( characterModel.showcaseWeapon ) || characterModel.weapon != level.weaponNone ) { return; } MarkAsDirty( characterModel ); if ( isdefined( characterModel.showcaseWeaponRenderOptions ) ) { characterModel AttachWeapon( characterModel.showcaseWeapon, characterModel.showcaseWeaponRenderOptions, characterModel.showcaseWeaponACVI ); characterModel UseWeaponHideTags( characterModel.showcaseWeapon ); } else { characterModel AttachWeapon( characterModel.showcaseWeapon ); } characterModel notify ( "weaponShown" ); } function getIdleAnimName( localClientNum, characterModel, topPlayerIndex ) { if ( isdefined( characterModel.weapon ) ) { weapon_group = GetItemGroupForWeaponName( characterModel.weapon.rootWeapon.name ); if ( weapon_group == "weapon_launcher" ) { if ( characterModel.weapon.rootWeapon.name == "launcher_lockonly" || characterModel.weapon.rootWeapon.name == "launcher_multi" ) { weapon_group = "weapon_launcher_alt"; } else if ( characterModel.weapon.rootWeapon.name == "launcher_ex41" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_pistol" && characterModel.weapon.isdualwield ) { weapon_group = "weapon_pistol_dw"; } else if ( weapon_group == "weapon_smg") { if ( characterModel.weapon.rootWeapon.name == "smg_ppsh" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_cqb") { if ( characterModel.weapon.rootWeapon.name == "shotgun_olympia" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_special" ) { if ( characterModel.weapon.rootWeapon.name == "special_crossbow" || characterModel.weapon.rootWeapon.name == "special_discgun" ) { weapon_group = "weapon_smg"; } else if( characterModel.weapon.rootWeapon.name == "special_crossbow_dw" ) { weapon_group = "weapon_pistol_dw"; } else if( characterModel.weapon.rootWeapon.name == "knife_ballistic" ) { weapon_group = "weapon_knife_ballistic"; } } else if ( weapon_group == "weapon_knife" ) { if ( characterModel.weapon.rootWeapon.name == "melee_wrench" || characterModel.weapon.rootWeapon.name == "melee_crowbar" || characterModel.weapon.rootWeapon.name == "melee_improvise" || characterModel.weapon.rootWeapon.name == "melee_shockbaton" || characterModel.weapon.rootWeapon.name == "melee_shovel" ) { return array( "pb_wrench_endgame_1stplace_idle", "pb_wrench_endgame_2ndplace_idle", "pb_wrench_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_knuckles" ) { return array( "pb_brass_knuckles_endgame_1stplace_idle", "pb_brass_knuckles_endgame_2ndplace_idle", "pb_brass_knuckles_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_chainsaw" || characterModel.weapon.rootWeapon.name == "melee_boneglass" || characterModel.weapon.rootWeapon.name == "melee_crescent" ) { return array( "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_boxing" ) { return array( "pb_boxing_gloves_endgame_1stplace_idle", "pb_boxing_gloves_endgame_2ndplace_idle", "pb_boxing_gloves_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_sword" || characterModel.weapon.rootWeapon.name == "melee_katana") { return array( "pb_sword_endgame_1stplace_idle", "pb_sword_endgame_2ndplace_idle", "pb_sword_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_nunchuks" ) { return array( "pb_nunchucks_endgame_1stplace_idle", "pb_nunchucks_endgame_2ndplace_idle", "pb_nunchucks_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_bat" || characterModel.weapon.rootWeapon.name == "melee_fireaxe" || characterModel.weapon.rootWeapon.name == "melee_mace" ) { return array( "pb_mace_endgame_1stplace_idle", "pb_mace_endgame_2ndplace_idle", "pb_mace_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "melee_prosthetic" ) { return array( "pb_prosthetic_arm_endgame_1stplace_idle", "pb_prosthetic_arm_endgame_2ndplace_idle", "pb_prosthetic_arm_endgame_3rdplace_idle" )[ topPlayerIndex ]; } } else if ( weapon_group == "miscweapon" ) { if ( characterModel.weapon.rootWeapon.name == "blackjack_coin" ) { return array( "pb_brawler_endgame_1stplace_idle", "pb_brawler_endgame_2ndplace_idle", "pb_brawler_endgame_3rdplace_idle" )[ topPlayerIndex ]; } else if ( characterModel.weapon.rootWeapon.name == "blackjack_cards" ) { return array( "pb_brawler_endgame_1stplace_idle", "pb_brawler_endgame_2ndplace_idle", "pb_brawler_endgame_3rdplace_idle" )[ topPlayerIndex ]; } } if ( isdefined( associativeArray( "weapon_smg", array( "pb_smg_endgame_1stplace_idle", "pb_smg_endgame_2ndplace_idle", "pb_smg_endgame_3rdplace_idle" ), "weapon_assault", array( "pb_rifle_endgame_1stplace_idle", "pb_rifle_endgame_2ndplace_idle", "pb_rifle_endgame_3rdplace_idle" ), "weapon_cqb", array( "pb_shotgun_endgame_1stplace_idle", "pb_shotgun_endgame_2ndplace_idle", "pb_shotgun_endgame_3rdplace_idle" ), "weapon_lmg", array( "pb_lmg_endgame_1stplace_idle", "pb_lmg_endgame_2ndplace_idle", "pb_lmg_endgame_3rdplace_idle" ), "weapon_sniper", array( "pb_sniper_endgame_1stplace_idle", "pb_sniper_endgame_2ndplace_idle", "pb_sniper_endgame_3rdplace_idle" ), "weapon_pistol", array( "pb_pistol_endgame_1stplace_idle", "pb_pistol_endgame_2ndplace_idle", "pb_pistol_endgame_3rdplace_idle" ), "weapon_pistol_dw", array( "pb_pistol_dw_endgame_1stplace_idle", "pb_pistol_dw_endgame_2ndplace_idle", "pb_pistol_dw_endgame_3rdplace_idle" ), "weapon_launcher", array( "pb_launcher_endgame_1stplace_idle", "pb_launcher_endgame_2ndplace_idle", "pb_launcher_endgame_3rdplace_idle" ), "weapon_launcher_alt", array( "pb_launcher_alt_endgame_1stplace_idle", "pb_launcher_alt_endgame_2ndplace_idle", "pb_launcher_alt_endgame_3rdplace_idle" ), "weapon_knife", array( "pb_knife_endgame_1stplace_idle", "pb_knife_endgame_2ndplace_idle", "pb_knife_endgame_3rdplace_idle" ), "weapon_knuckles", array( "pb_brass_knuckles_endgame_1stplace_idle", "pb_brass_knuckles_endgame_2ndplace_idle", "pb_brass_knuckles_endgame_3rdplace_idle" ), "weapon_boxing", array( "pb_boxing_gloves_endgame_1stplace_idle", "pb_boxing_gloves_endgame_2ndplace_idle", "pb_boxing_gloves_endgame_3rdplace_idle" ), "weapon_wrench", array( "pb_wrench_endgame_1stplace_idle", "pb_wrench_endgame_2ndplace_idle", "pb_wrench_endgame_3rdplace_idle" ), "weapon_sword", array( "pb_sword_endgame_1stplace_idle", "pb_sword_endgame_2ndplace_idle", "pb_sword_endgame_3rdplace_idle" ), "weapon_nunchucks", array( "pb_nunchucks_endgame_1stplace_idle", "pb_nunchucks_endgame_2ndplace_idle", "pb_nunchucks_endgame_3rdplace_idle" ), "weapon_mace", array( "pb_mace_endgame_1stplace_idle", "pb_mace_endgame_2ndplace_idle", "pb_mace_endgame_3rdplace_idle" ), "brawler", array( "pb_brawler_endgame_1stplace_idle", "pb_brawler_endgame_2ndplace_idle", "pb_brawler_endgame_3rdplace_idle" ), "weapon_prosthetic", array( "pb_prosthetic_arm_endgame_1stplace_idle", "pb_prosthetic_arm_endgame_2ndplace_idle", "pb_prosthetic_arm_endgame_3rdplace_idle" ), "weapon_chainsaw", array( "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle" ), "weapon_smg_ppsh", array( "pb_smg_ppsh_endgame_1stplace_idle", "pb_smg_ppsh_endgame_1stplace_idle", "pb_smg_ppsh_endgame_1stplace_idle" ), "weapon_knife_ballistic", array( "pb_b_knife_endgame_1stplace_idle", "pb_b_knife_endgame_2ndplace_idle", "pb_b_knife_endgame_3rdplace_idle" ) )[ weapon_group ] ) ) { anim_name = associativeArray( "weapon_smg", array( "pb_smg_endgame_1stplace_idle", "pb_smg_endgame_2ndplace_idle", "pb_smg_endgame_3rdplace_idle" ), "weapon_assault", array( "pb_rifle_endgame_1stplace_idle", "pb_rifle_endgame_2ndplace_idle", "pb_rifle_endgame_3rdplace_idle" ), "weapon_cqb", array( "pb_shotgun_endgame_1stplace_idle", "pb_shotgun_endgame_2ndplace_idle", "pb_shotgun_endgame_3rdplace_idle" ), "weapon_lmg", array( "pb_lmg_endgame_1stplace_idle", "pb_lmg_endgame_2ndplace_idle", "pb_lmg_endgame_3rdplace_idle" ), "weapon_sniper", array( "pb_sniper_endgame_1stplace_idle", "pb_sniper_endgame_2ndplace_idle", "pb_sniper_endgame_3rdplace_idle" ), "weapon_pistol", array( "pb_pistol_endgame_1stplace_idle", "pb_pistol_endgame_2ndplace_idle", "pb_pistol_endgame_3rdplace_idle" ), "weapon_pistol_dw", array( "pb_pistol_dw_endgame_1stplace_idle", "pb_pistol_dw_endgame_2ndplace_idle", "pb_pistol_dw_endgame_3rdplace_idle" ), "weapon_launcher", array( "pb_launcher_endgame_1stplace_idle", "pb_launcher_endgame_2ndplace_idle", "pb_launcher_endgame_3rdplace_idle" ), "weapon_launcher_alt", array( "pb_launcher_alt_endgame_1stplace_idle", "pb_launcher_alt_endgame_2ndplace_idle", "pb_launcher_alt_endgame_3rdplace_idle" ), "weapon_knife", array( "pb_knife_endgame_1stplace_idle", "pb_knife_endgame_2ndplace_idle", "pb_knife_endgame_3rdplace_idle" ), "weapon_knuckles", array( "pb_brass_knuckles_endgame_1stplace_idle", "pb_brass_knuckles_endgame_2ndplace_idle", "pb_brass_knuckles_endgame_3rdplace_idle" ), "weapon_boxing", array( "pb_boxing_gloves_endgame_1stplace_idle", "pb_boxing_gloves_endgame_2ndplace_idle", "pb_boxing_gloves_endgame_3rdplace_idle" ), "weapon_wrench", array( "pb_wrench_endgame_1stplace_idle", "pb_wrench_endgame_2ndplace_idle", "pb_wrench_endgame_3rdplace_idle" ), "weapon_sword", array( "pb_sword_endgame_1stplace_idle", "pb_sword_endgame_2ndplace_idle", "pb_sword_endgame_3rdplace_idle" ), "weapon_nunchucks", array( "pb_nunchucks_endgame_1stplace_idle", "pb_nunchucks_endgame_2ndplace_idle", "pb_nunchucks_endgame_3rdplace_idle" ), "weapon_mace", array( "pb_mace_endgame_1stplace_idle", "pb_mace_endgame_2ndplace_idle", "pb_mace_endgame_3rdplace_idle" ), "brawler", array( "pb_brawler_endgame_1stplace_idle", "pb_brawler_endgame_2ndplace_idle", "pb_brawler_endgame_3rdplace_idle" ), "weapon_prosthetic", array( "pb_prosthetic_arm_endgame_1stplace_idle", "pb_prosthetic_arm_endgame_2ndplace_idle", "pb_prosthetic_arm_endgame_3rdplace_idle" ), "weapon_chainsaw", array( "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle", "pb_chainsaw_endgame_1stplace_idle" ), "weapon_smg_ppsh", array( "pb_smg_ppsh_endgame_1stplace_idle", "pb_smg_ppsh_endgame_1stplace_idle", "pb_smg_ppsh_endgame_1stplace_idle" ), "weapon_knife_ballistic", array( "pb_b_knife_endgame_1stplace_idle", "pb_b_knife_endgame_2ndplace_idle", "pb_b_knife_endgame_3rdplace_idle" ) )[ weapon_group ][ topPlayerIndex ]; } } if ( !isdefined( anim_name ) ) { anim_name = array( "pb_brawler_endgame_1stplace_idle", "pb_brawler_endgame_2ndplace_idle", "pb_brawler_endgame_3rdplace_idle" )[ topPlayerIndex ]; } return anim_name; } function getIdleOutAnimName( characterModel, topPlayerIndex ) { weapon_group = getWeaponGroup( characterModel ); switch( weapon_group ) { case "weapon_smg": return array( "pb_smg_endgame_1stplace_out", "pb_smg_endgame_2ndplace_out", "pb_smg_endgame_3rdplace_out" )[ topPlayerIndex ]; case "weapon_assault": return array( "pb_rifle_endgame_1stplace_out", "pb_rifle_endgame_2ndplace_out", "pb_rifle_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_cqb": return array( "pb_shotgun_endgame_1stplace_out", "pb_shotgun_endgame_2ndplace_out", "pb_shotgun_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_lmg": return array( "pb_lmg_endgame_1stplace_out", "pb_lmg_endgame_2ndplace_out", "pb_lmg_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_sniper": return array( "pb_sniper_endgame_1stplace_out", "pb_sniper_endgame_2ndplace_out", "pb_sniper_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_pistol": return array( "pb_pistol_endgame_1stplace_out", "pb_pistol_endgame_2ndplace_out", "pb_pistol_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_pistol_dw": return array( "pb_pistol_dw_endgame_1stplace_out", "pb_pistol_dw_endgame_2ndplace_out", "pb_pistol_dw_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_launcher": return array( "pb_launcher_endgame_1stplace_out", "pb_launcher_endgame_2ndplace_out", "pb_launcher_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_launcher_alt": return array( "pb_launcher_alt_endgame_1stplace_out", "pb_launcher_alt_endgame_2ndplace_out", "pb_launcher_alt_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_knife": return array( "pb_knife_endgame_1stplace_out", "pb_knife_endgame_2ndplace_out", "pb_knife_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_knuckles": return array( "pb_brass_knuckles_endgame_1stplace_out", "pb_brass_knuckles_endgame_2ndplace_out", "pb_brass_knuckles_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_boxing": return array( "pb_boxing_gloves_endgame_1stplace_out", "pb_boxing_gloves_endgame_2ndplace_out", "pb_boxing_gloves_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_wrench": return array( "pb_wrench_endgame_1stplace_out", "pb_wrench_endgame_2ndplace_out", "pb_wrench_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_sword": return array( "pb_sword_endgame_1stplace_out", "pb_sword_endgame_2ndplace_out", "pb_sword_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_nunchucks": return array( "pb_nunchucks_endgame_1stplace_out", "pb_nunchucks_endgame_2ndplace_out", "pb_nunchucks_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_mace": return array( "pb_mace_endgame_1stplace_out", "pb_mace_endgame_2ndplace_out", "pb_mace_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_prosthetic": return array( "pb_prosthetic_arm_endgame_1stplace_out", "pb_prosthetic_arm_endgame_2ndplace_out", "pb_prosthetic_arm_endgame_3rdplace_out" )[ topPlayerIndex ]; case"weapon_chainsaw": return array( "pb_chainsaw_endgame_1stplace_idle_out", "pb_chainsaw_endgame_1stplace_idle_out", "pb_chainsaw_endgame_1stplace_idle_out" )[ topPlayerIndex ]; case"weapon_smg_ppsh": return array( "pb_smg_ppsh_endgame_1stplace_out", "pb_smg_ppsh_endgame_1stplace_out", "pb_smg_ppsh_endgame_1stplace_out" )[ topPlayerIndex ]; case"weapon_knife_ballistic": return array( "pb_b_knife_endgame_1stplace_out", "pb_b_knife_endgame_1stplace_out", "pb_b_knife_endgame_1stplace_out" )[ topPlayerIndex ]; } return ""; } function getIdleInAnimName( characterModel, topPlayerIndex ) { weapon_group = getWeaponGroup( characterModel ); switch( weapon_group ) { case "weapon_smg": return array( "pb_smg_endgame_1stplace_in", "pb_smg_endgame_2ndplace_in", "pb_smg_endgame_3rdplace_in" )[ topPlayerIndex ]; case "weapon_assault": return array( "pb_rifle_endgame_1stplace_in", "pb_rifle_endgame_2ndplace_in", "pb_rifle_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_cqb": return array( "pb_shotgun_endgame_1stplace_in", "pb_shotgun_endgame_2ndplace_in", "pb_shotgun_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_lmg": return array( "pb_lmg_endgame_1stplace_in", "pb_lmg_endgame_2ndplace_in", "pb_lmg_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_sniper": return array( "pb_sniper_endgame_1stplace_in", "pb_sniper_endgame_2ndplace_in", "pb_sniper_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_pistol": return array( "pb_pistol_endgame_1stplace_in", "pb_pistol_endgame_2ndplace_in", "pb_pistol_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_pistol_dw": return array( "pb_pistol_dw_endgame_1stplace_in", "pb_pistol_dw_endgame_2ndplace_in", "pb_pistol_dw_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_launcher": return array( "pb_launcher_endgame_1stplace_in", "pb_launcher_endgame_2ndplace_in", "pb_launcher_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_launcher_alt": return array( "pb_launcher_alt_endgame_1stplace_in", "pb_launcher_alt_endgame_2ndplace_in", "pb_launcher_alt_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_knife": return array( "pb_knife_endgame_1stplace_in", "pb_knife_endgame_2ndplace_in", "pb_knife_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_knuckles": return array( "pb_brass_knuckles_endgame_1stplace_in", "pb_brass_knuckles_endgame_2ndplace_in", "pb_brass_knuckles_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_boxing": return array( "pb_boxing_gloves_endgame_1stplace_in", "pb_boxing_gloves_endgame_2ndplace_in", "pb_boxing_gloves_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_wrench": return array( "pb_wrench_endgame_1stplace_in", "pb_wrench_endgame_2ndplace_in", "pb_wrench_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_sword": return array( "pb_sword_endgame_1stplace_in", "pb_sword_endgame_2ndplace_in", "pb_sword_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_nunchucks": return array( "pb_nunchucks_endgame_1stplace_in", "pb_nunchucks_endgame_2ndplace_in", "pb_nunchucks_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_mace": return array( "pb_mace_endgame_1stplace_in", "pb_mace_endgame_2ndplace_in", "pb_mace_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_prosthetic": return array( "pb_prosthetic_arm_endgame_1stplace_in", "pb_prosthetic_arm_endgame_2ndplace_in", "pb_prosthetic_arm_endgame_3rdplace_in" )[ topPlayerIndex ]; case"weapon_chainsaw": return array( "pb_chainsaw_endgame_1stplace_idle_in", "pb_chainsaw_endgame_1stplace_idle_in", "pb_chainsaw_endgame_1stplace_idle_in" )[ topPlayerIndex ]; case"weapon_smg_ppsh": return array( "pb_smg_ppsh_endgame_1stplace_in", "pb_smg_ppsh_endgame_1stplace_in", "pb_smg_ppsh_endgame_1stplace_in" )[ topPlayerIndex ]; case"weapon_knife_ballistic": return array( "pb_b_knife_endgame_1stplace_in", "pb_b_knife_endgame_1stplace_in", "pb_b_knife_endgame_1stplace_in" )[ topPlayerIndex ]; } return ""; } function getWeaponGroup( characterModel ) { if ( !isdefined( characterModel.weapon ) ) { return ""; } weapon = characterModel.weapon; if ( weapon == level.weaponNone && isdefined( characterModel.showcaseWeapon ) ) { weapon = characterModel.showcaseWeapon; } weapon_group = GetItemGroupForWeaponName( weapon.rootWeapon.name ); if ( weapon_group == "weapon_launcher" ) { if ( characterModel.weapon.rootWeapon.name == "launcher_lockonly" || characterModel.weapon.rootWeapon.name == "launcher_multi" ) { weapon_group = "weapon_launcher_alt"; } else if ( characterModel.weapon.rootWeapon.name == "launcher_ex41" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_pistol" && weapon.isdualwield ) { weapon_group = "weapon_pistol_dw"; } else if ( weapon_group == "weapon_smg") { if ( characterModel.weapon.rootWeapon.name == "smg_ppsh" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_cqb") { if ( characterModel.weapon.rootWeapon.name == "shotgun_olympia" ) { weapon_group = "weapon_smg_ppsh"; } } else if ( weapon_group == "weapon_special" ) { if ( characterModel.weapon.rootWeapon.name == "special_crossbow" || characterModel.weapon.rootWeapon.name == "special_discgun" ) { weapon_group = "weapon_smg"; } else if( characterModel.weapon.rootWeapon.name == "special_crossbow_dw" ) { weapon_group = "weapon_pistol_dw"; } else if( characterModel.weapon.rootWeapon.name == "knife_ballistic" ) { weapon_group = "weapon_knife_ballistic"; } } else if ( weapon_group == "weapon_knife" ) { if ( characterModel.weapon.rootWeapon.name == "melee_wrench" || characterModel.weapon.rootWeapon.name == "melee_crowbar" || characterModel.weapon.rootWeapon.name == "melee_improvise" || characterModel.weapon.rootWeapon.name == "melee_shockbaton" || characterModel.weapon.rootWeapon.name == "melee_shovel" ) { weapon_group = "weapon_wrench"; } else if ( characterModel.weapon.rootWeapon.name == "melee_knuckles" ) { weapon_group = "weapon_knuckles"; } else if ( characterModel.weapon.rootWeapon.name == "melee_chainsaw" || characterModel.weapon.rootWeapon.name == "melee_boneglass" || characterModel.weapon.rootWeapon.name == "melee_crescent" ) { weapon_group = "weapon_chainsaw"; } else if ( characterModel.weapon.rootWeapon.name == "melee_boxing" ) { weapon_group = "weapon_boxing"; } else if ( characterModel.weapon.rootWeapon.name == "melee_sword" || characterModel.weapon.rootWeapon.name == "melee_katana" ) { weapon_group = "weapon_sword"; } else if ( characterModel.weapon.rootWeapon.name == "melee_nunchuks" ) { weapon_group = "weapon_nunchucks"; } else if ( characterModel.weapon.rootWeapon.name == "melee_bat" || characterModel.weapon.rootWeapon.name == "melee_fireaxe" || characterModel.weapon.rootWeapon.name == "melee_mace" ) { weapon_group = "weapon_mace"; } else if ( characterModel.weapon.rootWeapon.name == "melee_prosthetic" ) { weapon_group = "weapon_prosthetic"; } } return weapon_group; } // Epic Taunts //======================================== function stream_epic_models() { foreach( model in level.epicTauntXModels ) { ForceStreamXModel( model ); } } function stop_stream_epic_models() { foreach( model in level.epicTauntXModels ) { StopForceStreamingXModel( model ); } } function playEpicTauntScene( localClientNum, tauntAnimName ) { sceneBundle = struct::get_script_bundle( "scene", tauntAnimName ); if ( !isdefined( sceneBundle ) ) return false; // Set up any scene object overrides switch( tauntAnimName ) { case "t7_loot_taunt_e_reaper_01": self thread setupReaperMinigun( localClientNum ); break; case "t7_loot_taunt_e_nomad_03": self thread spawnGiUnit( localClientNum, "gi_unit_victim" ); break; case "t7_loot_taunt_e_seraph_04": self thread spawnRap(localClientNum, "rap_1"); self thread spawnRap(localClientNum, "rap_2"); break; case "t7_loot_taunt_e_reaper_main_03": self thread spawnHiddenClone( localClientNum, "reaper_l" ); self thread spawnHiddenClone( localClientNum, "reaper_r" ); break; case "t7_loot_taunt_e_spectre_03": if ( GetDvarString( "mapname" ) == "core_frontend" ) { // disable the "alt streaming" effect since this disables the cloaking shader self SetHighDetail( true, false ); self handleCamoChange( self.localClientNum, true ); } else { self thread gadget_camo_render::forceOn( localClientNum ); } self thread spawnGiUnit( localClientNum, "gi_unit_victim" ); break; case "t7_loot_taunt_e_outrider_05": self thread spawnTalon( localClientNum, "talon_bro_1", 0.65 ); self thread spawnTalon( localClientNum, "talon_bro_2", 0.65 ); break; } self thread scene::play( tauntAnimName ); return true; } function stopEpicTauntScene( localClientNum, tauntAnimName ) { sceneBundle = struct::get_script_bundle( "scene", tauntAnimName ); if ( !isdefined( sceneBundle ) ) return; switch( tauntAnimName ) { case "t7_loot_taunt_e_spectre_03": if ( GetDvarString( "mapname" ) == "core_frontend" ) { // renabled the "alt streaming" now that cloaking is off self SetHighDetail( true, false ); } break; } self thread scene::stop( tauntAnimName ); } function addEpicSceneFunc( tauntAnimName, func, state ) { sceneBundle = struct::get_script_bundle( "scene", tauntAnimName ); if ( !isdefined( sceneBundle ) ) return; scene::add_scene_func( tauntAnimName, func, state ); } function shutdownEpicTauntModels() { if ( isdefined( self.epicTauntModels ) ) { foreach ( model in self.epicTauntModels ) { if ( isdefined( model ) ) { model StopSounds(); model Delete(); } } self.epicTauntModels = undefined; } } // Epic Taunt Anim Effects //======================================== function hideModel( param ) { self Hide(); } function showModel( param ) { self Show(); } function spawnCameraGlass( param ) { if ( isdefined( level.cameraGlass ) ) { deleteCameraGlass( param ); } level.cameraGlass = Spawn( self.localClientNum, (0,0,0), "script_model" ); level.cameraGlass SetModel( "gfx_p7_zm_asc_data_recorder_glass" ); level.cameraGlass SetScale( 2.0 ); level.cameraGlass thread updateGlassPosition(); } function updateGlassPosition() { self endon( "entityshutdown" ); while ( 1 ) { camAngles = GetCamAnglesByLocalClientNum( self.localClientNum ); camPos = GetCamPosByLocalClientNum( self.localClientNum ); fwd = AnglesToForward( camAngles ); self.origin = camPos +( fwd * 60 ); self.angles = camAngles + (0, 180, 0); {wait(.016);}; } } function deleteCameraGlass( param ) { if ( !isdefined( level.cameraGlass ) ) return; level.cameraGlass Delete(); level.cameraGlass = undefined; } function reaperBulletGlass( param ) { waittillframeend; minigun = GetWeapon( "hero_minigun" ); for ( i = 30; i > -30; i -= 7 ) { if ( !isdefined( self ) ) { return; } self magicGlassBullet( self.localClientNum, minigun, RandomFloatRange(2, 12), i ); self playsound (0, "pfx_magic_bullet_glass"); wait minigun.fireTime; } } function centerBulletGlass( weaponName ) { waittillframeend; weapon = GetWeapon( weaponName ); if ( weapon == level.weaponNone ) { return; } self magicGlassBullet( self.localClientNum, weapon, 4, -2 ); self playsound (0, "pfx_magic_bullet_glass"); } function talonBulletGlassLeft( param ) { self talonBulletGlass( -28, -10 ); } function talonBulletGlassRight( param ) { self talonBulletGlass( 10, 28 ); } function talonBulletGlass( yawMin, yawMax ) { waittillframeend; minigun = GetWeapon( "hero_minigun" ); for( i = 0; i < 15; i++ ) { if ( !isdefined( self ) ) { return; } self magicGlassBullet( self.localClientNum, minigun, RandomFloatRange(4, 16), RandomFloatRange( yawMin, yawMax ) ); self playsound (0, "pfx_magic_bullet_glass"); wait minigun.fireTime; } } function cloneShaderOn( param ) { if ( GetDvarString( "mapname" ) == "core_frontend" ) { self SetHighDetail( true, false ); } localPlayerTeam = GetLocalPlayerTeam( self.localClientNum ); topPlayerTeam = GetTopPlayersTeam( self.localClientNum, 0 ); friendly = localPlayerTeam === topPlayerTeam; if( friendly ) { self duplicate_render::update_dr_flag( self.localClientNum, "clone_ally_on", true ); } else { self duplicate_render::update_dr_flag( self.localClientNum, "clone_enemy_on", true ); } self thread gadget_clone_render::transition_shader( self.localClientNum ); } function cloneShaderOff( param ) { self duplicate_render::update_dr_flag( self.localClientNum, "clone_ally_on", false ); self duplicate_render::update_dr_flag( self.localClientNum, "clone_enemy_on", false ); } function handleCamoChange( localClientNum, camo_on ) { flags_changed = self duplicate_render::set_dr_flag( "gadget_camo_friend", false ); flags_changed = flags_changed && self duplicate_render::set_dr_flag( "gadget_camo_flicker", false ); flags_changed = flags_changed && self duplicate_render::set_dr_flag( "gadget_camo_break", false ); flags_changed = flags_changed && self duplicate_render::set_dr_flag( "gadget_camo_reveal", false ); flags_changed = flags_changed && self duplicate_render::set_dr_flag( "gadget_camo_on", false ); if ( flags_changed ) { self duplicate_render::update_dr_filters(); } if ( camo_on ) { self thread gadget_camo_render::forceOn( localClientNum ); } else { self thread gadget_camo_render::doReveal( self.localClientNum, 0 ); } } function camoShaderOn( param ) { if ( GetDvarString( "mapname" ) == "core_frontend" ) { self handleCamoChange( self.localClientNum, true ); } else { self thread gadget_camo_render::doReveal( self.localClientNum, 1 ); } } function camoShaderOff( param ) { if ( GetDvarString( "mapname" ) == "core_frontend" ) { self handleCamoChange( self.localClientNum, false ); } else { self thread gadget_camo_render::doReveal( self.localClientNum, 0 ); } } function fireWeapon( weaponName ) { if ( !isdefined( weaponName ) ) return; self endon( "stopFireWeapon" ); weapon = GetWeapon( weaponName ); waittillframeend; while( 1 && isdefined( self ) ) { self MagicBullet( weapon, (0, 0, 0), (0, 0, 0) ); wait( weapon.fireTime ); } } function stopFireWeapon( param ) { self notify( "stopFireWeapon" ); } function fireBeam( beam ) { if ( isdefined( self.beamFx ) ) { return; } self.beamFx = BeamLaunch( self.localClientNum, self, "tag_flash", undefined, "none", beam ); } function stopFireBeam( param ) { if ( !isdefined( self.beamFx ) ) { return; } BeamKill( self.localClientNum, self.beamFx ); self.beamFx = undefined; } function playWinnerTeamFx( fxName ) { waittillframeend; topPlayerTeam = GetTopPlayersTeam( self.localClientNum, 0 ); if(!isdefined(topPlayerTeam))topPlayerTeam=GetLocalPlayerTeam( self.localClientNum ); fxHandle = PlayFxOnTag( self.localClientNum, fxName, self, "tag_origin" ); if ( isdefined( fxHandle ) ) { SetFxTeam( self.localClientNum, fxHandle, topPlayerTeam ); } } function playLocalTeamFx( fxName ) { waittillframeend; localPlayerTeam = GetLocalPlayerTeam( self.localClientNum ); fxHandle = PlayFxOnTag( self.localClientNum, fxName, self, "tag_origin" ); if ( isdefined( fxHandle ) ) { SetFxTeam( self.localClientNum, fxHandle, localPlayerTeam ); } } // Effect Helpers //======================================== function magicGlassBullet( localClientNum, weapon, pitchAngle, yawAngle ) { camPos = GetCamPosByLocalClientNum( localClientNum ); camAngles = GetCamAnglesByLocalClientNum( localClientNum ); bulletAngles = camAngles + ( pitchAngle, yawAngle, 0 ); self MagicBullet( weapon, camPos, bulletAngles ); } function launchProjectile( localClientNum, projectileModel, projectileTrail ) { launchOrigin = self GetTagOrigin( "tag_flash" ); if ( !isdefined( launchOrigin ) ) return; launchAngles = self GetTagAngles( "tag_flash" ); launchDir = AnglesToForward( launchAngles ); CreateDynEntAndLaunch( localClientNum, projectileModel, launchOrigin, (0,0,0), launchOrigin, launchDir * GetDvarFloat( "launchspeed", 3.5 ), projectileTrail ); } function setupReaperMinigun( localClientNum ) { model = Spawn( localClientNum, self.origin, "script_model" ); model.angles = self.angles; model.targetName = "scythe_prop"; model SetHighDetail( true ); scytheModel = "wpn_t7_hero_reaper_minigun_prop"; if ( isdefined( self.bodyModel ) ) { if ( StrStartsWith( self.bodyModel, "c_t7_mp_reaper_mpc_body3" ) ) { scytheModel = "wpn_t7_loot_hero_reaper3_minigun_prop"; } } model SetModel( scytheModel ); model SetBodyRenderOptions( self.modeRenderOptions, self.bodyRenderOptions, self.helmetRenderOptions, self.helmetRenderOptions ); self HidePart( localClientNum, "tag_minigun_flaps" ); if ( !isdefined( self.epicTauntModels ) ) self.epicTauntModels = []; else if ( !IsArray( self.epicTauntModels ) ) self.epicTauntModels = array( self.epicTauntModels ); self.epicTauntModels[self.epicTauntModels.size]=model;; } // The scene system will try to show and anchor the model when the animation starts, so shrink it and hide it function spawnHiddenClone( localClientNum, targetName) { clone = self spawnPlayerModel( localClientNum, targetName, self.origin, self.angles, self.bodyModel, self.helmetModel, self.modeRenderOptions, self.bodyRenderOptions, self.helmetRenderOptions ); clone SetScale( 0 ); {wait(.016);}; clone Hide(); clone SetScale( 1 ); if ( !isdefined( self.epicTauntModels ) ) self.epicTauntModels = []; else if ( !IsArray( self.epicTauntModels ) ) self.epicTauntModels = array( self.epicTauntModels ); self.epicTauntModels[self.epicTauntModels.size]=clone;; } function spawnTopPlayerModel( localClientNum, targetName, origin, angles, topPlayerIndex ) { bodyModel = GetTopPlayersBodyModel( localClientNum, topPlayerIndex ); helmetModel = GetTopPlayersHelmetModel( localClientNum, topPlayerIndex ); modeRenderOptions = GetCharacterModeRenderOptions( CurrentSessionMode() ); bodyRenderOptions = GetTopPlayersBodyRenderOptions( localClientNum, topPlayerIndex ); helmetRenderOptions = GetTopPlayersHelmetRenderOptions( localClientNum, topPlayerIndex ); return spawnPlayerModel( localClientNum, targetName, origin, angles, bodyModel, helmetModel, modeRenderOptions, bodyRenderOptions, helmetRenderOptions ); } function spawnPlayerModel( localClientNum, targetName, origin, angles, bodyModel, helmetModel, modeRenderOptions, bodyRenderOptions, helmetRenderOptions ) { model = Spawn( localClientNum, origin, "script_model" ); model.angles = angles; model.targetName = targetName; model SetHighDetail( true ); model SetModel( bodyModel ); model Attach( helmetModel, "" ); model SetBodyRenderOptions( modeRenderOptions, bodyRenderOptions, helmetRenderOptions, helmetRenderOptions ); model Hide(); model UseAnimTree( #animtree ); return model; } function spawnGiUnit( localClientNum, targetName ) { model = Spawn( localClientNum, self.origin, "script_model" ); model.angles = self.angles; model.targetName = targetName; model SetHighDetail( true ); model SetModel( "c_zsf_robot_grunt_body" ); model Attach( "c_zsf_robot_grunt_head", "" ); if ( !isdefined( self.epicTauntModels ) ) self.epicTauntModels = []; else if ( !IsArray( self.epicTauntModels ) ) self.epicTauntModels = array( self.epicTauntModels ); self.epicTauntModels[self.epicTauntModels.size]=model;; } function spawnRap( localClientNum, targetName) { model = Spawn( localClientNum, self.origin, "script_model" ); model.angles = self.angles; model.targetName = targetName; localPlayerTeam = GetLocalPlayerTeam( self.localClientNum ); topPlayerTeam = GetTopPlayersTeam( localClientNum, 0 ); if ( !isdefined( topPlayerTeam) || localPlayerTeam == topPlayerTeam ) { model SetModel( "veh_t7_drone_raps_mp_lite" ); fxTeam = localPlayerTeam; } else { model SetModel( "veh_t7_drone_raps_mp_dark" ); fxTeam = topPlayerTeam; } model util::waittill_dobj( localClientNum ); /* fxHandle = PlayFxOnTag( localClientNum, TALON_LIGHT_FX, model, "tag_body" ); SetFxTeam( localClientNum, fxHandle, fxTeam ); */ if ( !isdefined( self.epicTauntModels ) ) self.epicTauntModels = []; else if ( !IsArray( self.epicTauntModels ) ) self.epicTauntModels = array( self.epicTauntModels ); self.epicTauntModels[self.epicTauntModels.size]=model;; } function spawnTalon( localClientNum, targetName, scale = 1.0 ) { model = Spawn( localClientNum, self.origin, "script_model" ); model.angles = self.angles; model.targetName = targetName; localPlayerTeam = GetLocalPlayerTeam( self.localClientNum ); topPlayerTeam = GetTopPlayersTeam( localClientNum, 0 ); if ( !isdefined( topPlayerTeam) || localPlayerTeam == topPlayerTeam ) { model SetModel( "veh_t7_drone_attack_gun_litecolor" ); fxTeam = localPlayerTeam; } else { model SetModel( "veh_t7_drone_attack_gun_darkcolor" ); fxTeam = topPlayerTeam; } model SetScale( scale ); model util::waittill_dobj( localClientNum ); fxHandle = PlayFxOnTag( localClientNum, "player/fx_loot_taunt_outrider_talon_lights", model, "tag_body" ); SetFxTeam( localClientNum, fxHandle, fxTeam ); if ( !isdefined( self.epicTauntModels ) ) self.epicTauntModels = []; else if ( !IsArray( self.epicTauntModels ) ) self.epicTauntModels = array( self.epicTauntModels ); self.epicTauntModels[self.epicTauntModels.size]=model;; }