From 16b443e7b502d2ae152328b6b427b0b6a8e4bccf Mon Sep 17 00:00:00 2001 From: Ashetf2 <63692647+Ashetf2@users.noreply.github.com> Date: Fri, 28 Feb 2025 00:21:03 -0500 Subject: [PATCH 1/4] Fix special_taunt weapons overriding voicelines https://github.com/ValveSoftware/Source-1-Games/issues/4407 This does not fix the Thriller taunt overriding taunt kills btw --- src/game/server/tf/tf_player.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/game/server/tf/tf_player.cpp b/src/game/server/tf/tf_player.cpp index 16cee6ab2cc..e99b181000d 100644 --- a/src/game/server/tf/tf_player.cpp +++ b/src/game/server/tf/tf_player.cpp @@ -19664,8 +19664,14 @@ void CTFPlayer::ModifyOrAppendCriteria( AI_CriteriaSet& criteriaSet ) } // Only allow these rules if in the holiday - if ( TFGameRules()->IsHolidayActive( kHoliday_HalloweenOrFullMoon ) && iSpecialTaunt == 0 ) + if ( TFGameRules()->IsHolidayActive( kHoliday_HalloweenOrFullMoon ) ) { + // This fixes some weapons with "special_taunt" attribute overriding voicelines from itemsets or cosmetics. + // The criterion needs to be added to the ruleset of the special taunts (for now only the robot soldier, frankenheavy and demowolf) + if ( iSpecialTaunt == 1 ) + { + criteriaSet.AppendCriteria( "SpecialTauntWeaponDeployed", "1" ); + } // Halloween costume sets if ( IsRobotCostumeEquipped() ) { From 3b3c6a120bb387bceaaad9882fca9e1123730d45 Mon Sep 17 00:00:00 2001 From: Ashetf2 <63692647+Ashetf2@users.noreply.github.com> Date: Fri, 28 Feb 2025 00:23:17 -0500 Subject: [PATCH 2/4] add live tf2 response_rules and tf.txt --- game/tc2/scripts/talker/response_rules.txt | 710 +++++++ game/tc2/scripts/talker/tf.txt | 2021 ++++++++++++++++++++ 2 files changed, 2731 insertions(+) create mode 100644 game/tc2/scripts/talker/response_rules.txt create mode 100644 game/tc2/scripts/talker/tf.txt diff --git a/game/tc2/scripts/talker/response_rules.txt b/game/tc2/scripts/talker/response_rules.txt new file mode 100644 index 00000000000..509d9d115ef --- /dev/null +++ b/game/tc2/scripts/talker/response_rules.txt @@ -0,0 +1,710 @@ +// This is the base rule script file for the AI response system for Expressive AI's who speak based on certain "Concepts" +// You can think of a concept as a high level state that the code is trying to convey, such as say hello, or say you're mad, etc. +// +// The format of this file is that there are five main types of commands: +// 1) #include "filename" // This just causes the included scriptfile to be parsed and added to the database +// 2) enumeration: this declares an enumerated type so that comparisons can be matched against the string versions of the type +// 3) response: this specifies a response to issue. A response consists of a weighted set of options and can recursively reference +// other responses by name +// 4) criterion: This is a match condition +// 5) rule: a rule consists of one or more criteria and a response +// +// In general, the system is presented with a criteria set, which is a set of key value pairs generated by the game code and +// various entity I/O and keyfields. For instance, the following criteria set was created in a map with a train terminal +// "speaker" entity wishing to fire random station announcements +// concept = 'train_speaker' (weight 5.000000) ; the high level concept for the search request +// map = 'terminal_pa' ; the name of the map +// classname = 'speaker' ; the classname and name of the "speaking" entity +// name = 'terminal_pa' +// health = '10' ; the absolute health of the speaking entity +// healthfrac = '0.000' ; the health fraction (health/maxhealth) of the speaking entity +// playerhealth = '100' ; similar data related to the current player: +// playerhealthfrac = '1.000' +// playerweapon = 'none' ; the name of the weapon the player is carrying +// playeractivity = 'ACT_WALK' ; animating activity of the player +// playerspeed = '0.000' ; how fast the player is moving +// +// Based on such a criteria set, the system checks each rule against the set. To do this, each criterion of the rule is +// given a numeric score as follows: +// score = 0 if criteria doesn't match or, criterion weight * keyvaliue weight if it does match +// The final score for a rule is the sum of all of the scores of its criteria. The best rule is the one with the highest +// score. Once a best rule is selected, then a response is looked up based on the response definitions and the engine is +// asked to dispatch that response. +// +// The specific syntax for the various keywords is as follows: +// +// ENUMERATIONS: +// +// enumeration +// { +// "key1" "value1" +// "key2" "value2" +// ...etc. +// } +// The code and criteria refer to enumerations with square brackets and a double colon separator, e.g.: +// [enumerationname::key1] +// +// +// RESPONSES: +// +// Single line: +// response [nodelay | defaultdelay | delay interval ] [speakonce] [noscene] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] responsetype parameters +// Multiple lines +// response +// { +// [permitrepeats] ; optional parameter, by default we visit all responses in group before repeating any +// [sequential] ; optional parameter, by default we randomly choose responses, but with this we walk through the list starting at the first and going to the last +// [norepeat] ; Once we've run through all of the entries, disable the response group +// responsetype1 parameters1 [nodelay | defaultdelay | delay interval ] [speakonce] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] [displayfirst] [ displaylast ] weight nnn +// responsetype2 parameters2 [nodelay | defaultdelay | delay interval ] [speakonce] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] [displayfirst] [ displaylast ] weight nnn +// etc. +// } +// Where: +// interval = "startnumber,endnumber" or "number" (e.g., "2.8,3.2" or "3.2") +// responsetype =: +// speak ; it's an entry in sounds.txt +// sentence ; it's a sentence name from sentences.txt +// scene ; it's a .vcd file +// response ; it's a reference to another response group by name +// print ; print the text in developer 2 (for placeholder responses) +// nodelay = an additional delay of 0 after speaking +// defaultdelay = an additional delay of 2.8 to 3.2 seconds after speaking +// delay interval = an additional delay based on a random sample from the interval after speaking +// predelay interval = delays the speech for the time interval. NOTE: Only works on scenes (i.e. no sentences/speak/print) +// speakonce = don't use this response more than one time (default off) +// noscene = For an NPC, play the sound immediately using EmitSound, don't play it through the scene system. Good for playing sounds on dying or dead NPCs. +// odds = if this response is selected, if odds < 100, then there is a chance that nothing will be said (default 100) +// respeakdelay = don't use this response again for at least this long (default 0) +// soundlevel = use this soundlevel for the speak/sentence (default SNDLVL_TALKING) +// weight = if there are multiple responses, this is a selection weighting so that certain responses are favored over others in the group (default 1) +// displayfirst/displaylast : this should be the first/last item selected (ignores weight) +// +// CRITERIA: +// +// criterion weight nnn required +// Where: +// matchkey matches one of the criteria in the set as shown above +// matchvalue is a string or number value or a range, the following are all valid: +// "0" ; numeric match to value 0 +// "1" ; numeric match to value 1 +// "weapon_smg1" ; string match to weapon_smg1 string +// "[npcstate::idle]" ; match enumeration by looking up numeric value +// ">0" ; match if greater than zero +// ">10,<=50" ; match if greater than ten and less than or equal to 50 +// ">0,<[npcstate::alert]" ; match if greater than zer and les then value of enumeration for alert +// "!=0" ; match if not equal to zero +// weight = floating point weighting for score assuming criteria match (default value 1.0) +// required: if a rule has one or more criteria with the required flag set, then if any such criteria +// fail, the entire rule receives a score of zero +// +// RULE: +// +// rule +// { +// criteria name1 [name2 name3 etc.] +// response responsegroupname [responsegroupname2 etc.] +// [matchonce] ; optional parameter +// [ weight nnn required ] +// } +// Where: +// criteria just lies one more more criterion names from above and response list one or more of the response +// names from above (usually just one) +// matchonce (off by default): means that the rule is deactivated after the first time it is matched +// Note that additional "unnamed" criteria can be specified inline in the rule using the same syntax +// as for defining a criterion, except for the criterion keyword and the criterion name keys +// +// Interaction with entity I/O system +// CBaseEntity contains an inputfunc called "DispatchResponse" which accepts a string which is a concept name +// Thus, a game entity can fire this input on another entity with a concept string and a criteria set will +// be generated and searched against the entities current response system rule set. +// Right now only the speaker entity and NPC_Talker derived NPCs have any response rules loaded +// In addition, map placed entities have up to three "context" keypairs that can be specified. +// They take the form: "key:value" (key, single colon separator, value) +// When an entity with any such context keypairs is asked to dispatch a response, the keypairs are added to the +// criteria set passed to the rule system. Thus, map placed entities and triggers can specify their +// own context keypairs and these can be hooked up to response rules to do map-specific and appropriate +// responses +// In addition, entity I/O can be used to add, remove and clear any such context keypairs via the +// AddContext, RemoveContext, and ClearContext input functions. +// AddContext takes a keypair of the "key:value" format, while RemoveContext take just the "key" +// ClearContext removes all context keypairs +// The game .dll code can enumerate context keypairs and change them via code based methods +// +// The player and the world have their context added with the string player or world as a prefix, e.g.: +// "playerkey:value" or "worldkey:value" to differentiate world/player context from the context of the +// responding entity. + +// Base script +enumeration "NPCState" +{ + "None" "0" + "Idle" "1" + "Alert" "2" + "Combat" "3" + "Scripted" "4" + "PlayDead" "5" + "Dead" "6" +} + +criterion "ConceptPlayerTaunt" "Concept" "TLK_PLAYER_TAUNT" "required" +criterion "ConceptPlayerThanks" "Concept" "TLK_PLAYER_THANKS" "required" +criterion "ConceptPlayerMedic" "Concept" "TLK_PLAYER_MEDIC" required +criterion "ConceptPlayerAskForBall" "Concept" "TLK_PLAYER_ASK_FOR_BALL" required +criterion "ConceptPlayerHelp" "Concept" "TLK_PLAYER_HELP" required +criterion "ConceptPlayerGo" "Concept" "TLK_PLAYER_GO" required +criterion "ConceptPlayerMoveUp" "Concept" "TLK_PLAYER_MOVEUP" required +criterion "ConceptPlayerLeft" "Concept" "TLK_PLAYER_LEFT" required +criterion "ConceptPlayerRight" "Concept" "TLK_PLAYER_RIGHT" required +criterion "ConceptPlayerYes" "Concept" "TLK_PLAYER_YES" required +criterion "ConceptPlayerNo" "Concept" "TLK_PLAYER_NO" required +criterion "ConceptPlayerIncoming" "Concept" "TLK_PLAYER_INCOMING" required +criterion "ConceptPlayerCloakedSpy" "Concept" "TLK_PLAYER_CLOAKEDSPY" required +criterion "ConceptPlayerSentryAhead" "Concept" "TLK_PLAYER_SENTRYAHEAD" required +criterion "ConceptPlayerTeleporterHere" "Concept" "TLK_PLAYER_TELEPORTERHERE" required +criterion "ConceptPlayerDispenserHere" "Concept" "TLK_PLAYER_DISPENSERHERE" required +criterion "ConceptPlayerSentryHere" "Concept" "TLK_PLAYER_SENTRYHERE" required +criterion "ConceptPlayerActivateCharge" "Concept" "TLK_PLAYER_ACTIVATECHARGE" required +criterion "ConceptPlayerChargeReady" "Concept" "TLK_PLAYER_CHARGEREADY" required +criterion "ConceptPlayerTaunts" "Concept" "TLK_PLAYER_TAUNTS" required +criterion "ConceptPlayerBattleCry" "Concept" "TLK_PLAYER_BATTLECRY" required +criterion "ConceptPlayerCheers" "Concept" "TLK_PLAYER_CHEERS" required +criterion "ConceptPlayerJeers" "Concept" "TLK_PLAYER_JEERS" required +criterion "ConceptPlayerPositive" "Concept" "TLK_PLAYER_POSITIVE" required +criterion "ConceptPlayerNegative" "Concept" "TLK_PLAYER_NEGATIVE" required +criterion "ConceptPlayerNiceShot" "Concept" "TLK_PLAYER_NICESHOT" required +criterion "ConceptPlayerGoodJob" "Concept" "TLK_PLAYER_GOODJOB" required +criterion "ConceptSpySapping" "Concept" "TLK_SPY_SAPPER" required +criterion "ConceptPain" "Concept" "TLK_PLAYER_PAIN" required +criterion "ConceptAttackerPain" "Concept" "TLK_PLAYER_ATTACKER_PAIN" required +criterion "ConceptFire" "Concept" "TLK_ONFIRE" required +criterion "ConceptCapBlocked" "Concept" "TLK_CAPTURE_BLOCKED" required +criterion "ConceptMedicChargeDeployed" "Concept" "TLK_MEDIC_CHARGEDEPLOYED" required +criterion "ConceptMedicChargeStopped" "Concept" "TLK_HEALTARGET_STOPPEDHEALING" required + +criterion "ConceptEngineerPickupBuilding" "Concept" "TLK_PICKUP_BUILDING" required +criterion "ConceptEngineerDeployBuilding" "Concept" "TLK_REDEPLOY_BUILDING" required +criterion "ConceptEngineerCarryingBuilding" "Concept" "TLK_CARRYING_BUILDING" required + + + + +criterion "ConceptScoutBallGrab" "Concept" "TLK_GRAB_BALL" required + +// Force weight to 2 so that this matches all classes +criterion "ConceptPlayerTaunt2" "Concept" "TLK_PLAYER_TAUNT2" required + +criterion "ConceptPlayerShowItemTaunt" "Concept" "TLK_PLAYER_SHOW_ITEM_TAUNT" required + +criterion "ConceptPlayerHoldTaunt" "Concept" "TLK_PLAYER_HOLDTAUNT" required + +//Auto fire concepts +criterion "ConceptPlayerCapturedPoint" "Concept" "TLK_CAPTURED_POINT" required +criterion "ConceptPlayerRoundStart" "Concept" "TLK_ROUND_START" required +criterion "ConceptPlayerRoundStartComp" "Concept" "TLK_ROUND_START_COMP" required +criterion "ConceptPlayerSuddenDeathStart" "Concept" "TLK_SUDDENDEATH_START" required +criterion "ConceptPlayerStalemate" "Concept" "TLK_STALEMATE" required +criterion "ConceptPlayerBuildingObject" "Concept" "TLK_BUILDING_OBJECT" required +criterion "ConceptPlayerDetonatedObject" "Concept" "TLK_DETONATED_OBJECT" required +criterion "ConceptLostObject" "Concept" "TLK_LOST_OBJECT" required +criterion "ConceptKilledObject" "Concept" "TLK_KILLED_OBJECT" required +criterion "ConceptMedicChargeReady" "Concept" "TLK_MEDIC_CHARGEREADY" required +criterion "ConceptTeleported" "Concept" "TLK_TELEPORTED" required +criterion "ConceptPlayerDead" "Concept" "TLK_DEAD" required + +criterion "ConceptPlayerGrabbedIntelligence" "Concept" "TLK_FLAGPICKUP" required +criterion "ConceptPlayerCapturedIntelligence" "Concept" "TLK_FLAGCAPTURED" required + +//cart stuff +criterion "ConceptCartMovingForward" "Concept" "TLK_CART_MOVING_FORWARD" required +criterion "ConceptCartMovingStopped" "Concept" "TLK_CART_STOP" required +criterion "ConceptCartMovingBackward" "Concept" "TLK_CART_MOVING_BACKWARD" required + +criterion "ConceptAteFood" "Concept" "TLK_ATE_FOOD" required + +//scout pack +criterion "ConceptDoubleJump" "Concept" "TLK_DOUBLE_JUMP" required +criterion "ConceptDodging" "Concept" "TLK_DODGING" required +criterion "ConceptDodgeShot" "Concept" "TLK_DODGE_SHOT" required +criterion "ConceptGrabBall" "Concept" "TLK_GRAB_BALL" required +criterion "ConceptRegenBall" "Concept" "TLK_REGEN_BALL" required +criterion "ConceptDeflected" "Concept" "TLK_DEFLECTED" required +criterion "ConceptBallMissed" "Concept" "TLK_BALL_MISSED" required +criterion "ConceptStunned" "Concept" "TLK_STUNNED" required +criterion "ConceptStunnedTarget" "Concept" "TLK_STUNNED_TARGET" required +criterion "ConceptTired" "Concept" "TLK_TIRED" required +criterion "ConceptBatBall" "Concept" "TLK_BAT_BALL" required +criterion "IsDoubleJumping" "DoubleJumping" "1" required +criterion "ConceptAchievementAward" "Concept" "TLK_ACHIEVEMENT_AWARD" required +// Custom stuff +criterion "IsNotDoubleJumping" "DoubleJumping" "0" required // Needed to stop Scout saying double jump lines when he lands. + +// spy / sniper pack +criterion "ConceptJarateLaunch" "Concept" "TLK_JARATE_LAUNCH" required +criterion "ConceptJarateHit" "Concept" "TLK_JARATE_HIT" required + +// Item Taunts +criterion "ConceptTauntReplay" "Concept" "TLK_TAUNT_REPLAY" required +criterion "ConceptTauntLaugh" "Concept" "TLK_TAUNT_LAUGH" required +criterion "ConceptTauntHeroicPose" "Concept" "TLK_TAUNT_HEROIC_POSE" required +criterion "ConceptTauntPyroArmageddon" "Concept" "TLK_TAUNT_PYRO_ARMAGEDDON" required +criterion "ConceptTauntGuitarRiff" "Concept" "TLK_TAUNT_GUITAR_RIFF" required +criterion "ConceptTauntEurekaTeleport" "Concept" "TLK_TAUNT_EUREKA_EFFECT" required + +criterion "IsOnOffense" "teamrole" "offense" required +criterion "IsOnDefense" "teamrole" "defense" required + + +// Expressions +criterion "ConceptPlayerExpression" "Concept" "TLK_PLAYER_EXPRESSION" required + + +criterion "ConceptPlayerLostPoint" "Concept" "TLK_LOST_CONTROL_POINT'" required + + +criterion "IsSapper" "objtype" "sapper" required +criterion "IsSentryGun" "objtype" "sentrygun" required +criterion "IsTeleporter" "objtype" "teleporter" required +criterion "IsDispenser" "objtype" "dispenser" required +criterion "IsDisguised" "disguised" "1" required +criterion "IsNotDisguised" "disguised" "!=1" required +criterion "IsWeaponPrimary" "weaponmode" "primary" required +criterion "IsWeaponSecondary" "weaponmode" "secondary" required +criterion "IsWeaponMelee" "weaponmode" "melee" required +criterion "IsNotWeaponMelee" "weaponmode" "!=melee" required +criterion "IsWeaponBuilding" "weaponmode" "building" required +criterion "IsWeaponPda" "weaponmode" "pda" required +criterion "IsCloaked" "cloaked" "1" required +criterion "IsNotCloaked" "cloaked" "!=1" required + +criterion "IsOnScout" "crosshair_on" "Scout" "required" +criterion "IsOnSniper" "crosshair_on" "Sniper" "required" +criterion "IsOnSoldier" "crosshair_on" "Soldier" "required" +criterion "IsOnDemoman" "crosshair_on" "Demoman" "required" +criterion "IsOnMedic" "crosshair_on" "Medic" "required" +criterion "IsOnHeavy" "crosshair_on" "Heavy" "required" +criterion "IsOnPyro" "crosshair_on" "Pyro" "required" +criterion "IsOnSpy" "crosshair_on" "Spy" "required" +criterion "IsOnEngineer" "crosshair_on" "Engineer" "required" + +// Custom not on Heavy +criterion "IsNotOnHeavy" "crosshair_on" "!=Heavy" "required" + +criterion "IsDominated" "domination" "dominated" "required" +criterion "IsRevenge" "domination" "revenge" "required" +criterion "IsHeadShot" "customdeath" "headshot" "required" + + + +criterion "ConceptKilledPlayer" "Concept" "TLK_KILLED_PLAYER" required +criterion "KilledPlayerDelay" "worldDontKilledPlayer" "!=1" "required" + +criterion "IsScout" "playerclass" "Scout" "required" +criterion "IsSniper" "playerclass" "Sniper" "required" +criterion "IsSoldier" "playerclass" "Soldier" "required" +criterion "IsDemoman" "playerclass" "Demoman" "required" +criterion "IsMedic" "playerclass" "Medic" "required" +criterion "IsHeavy" "playerclass" "Heavy" "required" +criterion "IsPyro" "playerclass" "Pyro" "required" +criterion "IsSpy" "playerclass" "Spy" "required" +criterion "IsEngineer" "playerclass" "Engineer" "required" + +criterion "IsNotScout" "playerclass" "!=Scout" "required" +criterion "IsNotSniper" "playerclass" "!=Sniper" "required" +criterion "IsNotSoldier" "playerclass" "!=Soldier" "required" +criterion "IsNotDemoman" "playerclass" "!=Demoman" "required" +criterion "IsNotMedic" "playerclass" "!=Medic" "required" +criterion "IsNotHeavy" "playerclass" "!=Heavy" "required" +criterion "IsNotPyro" "playerclass" "!=Pyro" "required" +criterion "IsNotSpy" "playerclass" "!=Spy" "required" +criterion "IsNotEngineer" "playerclass" "!=Engineer" "required" + + +criterion "IsVictimScout" "victimclass" "Scout" "required" weight 0 +criterion "IsVictimSniper" "victimclass" "Sniper" "required" weight 0 +criterion "IsVictimSoldier" "victimclass" "Soldier" "required" weight 0 +criterion "IsVictimDemoman" "victimclass" "Demoman" "required" weight 0 +criterion "IsVictimMedic" "victimclass" "Medic" "required" weight 0 +criterion "IsVictimHeavy" "victimclass" "Heavy" "required" weight 0 +criterion "IsVictimPyro" "victimclass" "Pyro" "required" weight 0 +criterion "IsVictimSpy" "victimclass" "Spy" "required" weight 0 +criterion "IsVictimEngineer" "victimclass" "Engineer" "required" weight 0 + +criterion "IsNotVictimScout" "victimclass" "!=Scout" "required" weight 0 +criterion "IsNotVictimSniper" "victimclass" "!=Sniper" "required" weight 0 +criterion "IsNotVictimSoldier" "victimclass" "!=Soldier" "required" weight 0 +criterion "IsNotVictimDemoman" "victimclass" "!=Demoman" "required" weight 0 +criterion "IsNotVictimMedic" "victimclass" "!=Medic" "required" weight 0 +criterion "IsNotVictimHeavy" "victimclass" "!=Heavy" "required" weight 0 +criterion "IsNotVictimPyro" "victimclass" "!=Pyro" "required" weight 0 +criterion "IsNotVictimSpy" "victimclass" "!=Spy" "required" weight 0 +criterion "IsNotVictimEngineer" "victimclass" "!=Engineer" "required" weight 0 + + + +criterion "2PercentChance" "randomnum" "=>98" required +criterion "5PercentChance" "randomnum" "=>95" required +criterion "10PercentChance" "randomnum" ">90" required +criterion "20PercentChance" "randomnum" ">80" required +criterion "30PercentChance" "randomnum" ">70" required +criterion "40PercentChance" "randomnum" ">60" required +criterion "50PercentChance" "randomnum" ">50" required +criterion "75PercentChance" "randomnum" ">25" required +criterion "100PercentChance" "randomnum" ">0" required weight 100 +criterion "IsARecentKill" "recentkills" ">0" required +criterion "IsManyRecentKills" "recentkills" ">1" required +criterion "IsVeryManyRecentKills" "recentkills" ">3" required +criterion "IsInvulnerable" "invulnerable" "1" required weight 10 + +criterion "IsOnFriendlyControlPoint" "OnFriendlyControlPoint" "1" required +criterion "IsOnCappableControlPoint" "OnCappableControlPoint" "1" required + +criterion "WeaponIsLaserPointer" "playerweapon" "tf_weapon_laser_pointer" "required" +criterion "WeaponIsMinigun" "playerweapon" "tf_weapon_minigun" "required" +criterion "WeaponIsShotgun" "playerweapon" "tf_weapon_shotgun_secondary" "required" +criterion "WeaponIsShotgunSoldier" "playerweapon" "tf_weapon_shotgun_soldier" "required" +criterion "WeaponIsShotgunHwg" "playerweapon" "tf_weapon_shotgun_hwg" "required" +criterion "WeaponIsShotgunPyro" "playerweapon" "tf_weapon_shotgun_pyro" "required" +criterion "WeaponIsFists" "playerweapon" "tf_weapon_fists" "required" +criterion "WeaponIsFlamethrower" "playerweapon" "tf_weapon_flamethrower" "required" +criterion "WeaponIsAxe" "playerweapon" "tf_weapon_fireaxe" "required" +criterion "WeaponIsSyringe" "playerweapon" "tf_weapon_syringegun_medic" "required" +criterion "WeaponIsHeal" "playerweapon" "tf_weapon_medigun" "required" +criterion "WeaponIsBonesaw" "playerweapon" "tf_weapon_bonesaw" "required" +criterion "WeaponIsShotgunPrimary" "playerweapon" "tf_weapon_shotgun_primary" "required" +criterion "WeaponIsPistol" "playerweapon" "tf_weapon_pistol" "required" +criterion "WeaponIsBuild" "playerweapon" "tf_weapon_builder" "required" +criterion "WeaponIsWrench" "playerweapon" "tf_weapon_wrench" "required" +criterion "WeaponIsScattergun" "playerweapon" "tf_weapon_scattergun" "required" +criterion "WeaponIsScattergunDouble" "item_name" "The Force-a-Nature" "required" weight 10 +criterion "WeaponIsScattergunDoubleFestive" "item_name" "Festive Force-a-Nature" "required" weight 10 +criterion "WeaponIsPistolScout" "playerweapon" "tf_weapon_pistol_scout" "required" +criterion "WeaponIsBat" "playerweapon" "tf_weapon_bat" "required" +criterion "WeaponIsWoodBat" "playerweapon" "tf_weapon_bat_wood" "required" +criterion "WeaponIsSniperrifle" "playerweapon" "tf_weapon_sniperrifle" "required" +criterion "WeaponIsSMG" "playerweapon" "tf_weapon_smg" "required" +criterion "WeaponIsChargedSMG" "playerweapon" "tf_weapon_charged_smg" "required" +criterion "WeaponIsSMGScout" "playerweapon" "tf_weapon_smg_scout" "required" +criterion "WeaponIsClub" "playerweapon" "tf_weapon_club" "required" +criterion "WeaponIsRevolver" "playerweapon" "tf_weapon_revolver" "required" +criterion "WeaponIsKnife" "playerweapon" "tf_weapon_knife" "required" +criterion "WeaponIsPipebomb" "playerweapon" "tf_weapon_pipebomblauncher" "required" +criterion "WeaponIsGrenade" "playerweapon" "tf_weapon_grenadelauncher" "required" +criterion "WeaponIsBottle" "playerweapon" "tf_weapon_bottle" "required" +criterion "WeaponIsSpyPDA" "playerweapon" "tf_weapon_pda_spy" "required" +criterion "WeaponIsRocket" "playerweapon" "tf_weapon_rocketlauncher" "required" +criterion "WeaponIsShovel" "playerweapon" "tf_weapon_shovel" "required" +criterion "WeaponIsFlaregun" "playerweapon" "tf_weapon_flaregun" "required" +// Lunchbox modified to fire for Sandvich only, so we don't share lines. +criterion "WeaponIsSandvich" "item_name" "The Sandvich" "required" weight 5 +criterion "WeaponIsRobotSandvich" "item_name" "The Robo-Sandvich" "required" weight 5 +criterion "WeaponIsFestiveSandvich" "item_name" "Festive Sandvich" "required" weight 5 +criterion "WeaponIsLunchboxDrink" "playerweapon" "tf_weapon_lunchbox_drink" "required" +criterion "WeaponIsLunchbox" "playerweapon" "tf_weapon_lunchbox" "required" +criterion "WeaponIsGloves" "item_type_name" "#TF_Weapon_Gloves" "required" weight 10 +criterion "WeaponIsKritzkrieg" "item_name" "The Kritzkrieg" "required" weight 10 +criterion "WeaponIsBow" "item_type_name" "#TF_Weapon_CompoundBow" "required" weight 10 +criterion "WeaponIsEqualizer" "item_name" "The Equalizer" "required" weight 10 +criterion "WeaponIsEscapePlan" "item_name" "The Escape Plan" "required" weight 10 +criterion "WeaponIsDirectHit" "item_name" "The Direct Hit" "required" weight 10 +criterion "WeaponIsBeggarsBazooka" "item_name" "The Beggar's Bazooka" "required" weight 10 +criterion "WeaponIsBanner" "item_name" "The Buff Banner" "required" weight 10 +criterion "WeaponIsFestiveBanner" "item_name" "Festive Buff Banner" "required" weight 10 +// Former "sword is Eyelander" equivalency +//criterion "WeaponIsSword" "item_name" "The Eyelander" "required" weight 10 +// If valve add a new sword (and it uses the same tf_weapon_sword class) it will inherit the Eyelander taunt by default +criterion "WeaponIsSword" "playerweapon" "tf_weapon_sword" "required" weight 10 +criterion "WeaponIsDefender" "item_name" "The Scottish Resistance" "required" weight 10 +criterion "WeaponIsUbersaw" "item_name" "The Ubersaw" "required" weight 10 +criterion "WeaponIsFestiveUbersaw" "item_name" "Festive Ubersaw" "required" weight 10 +criterion "WeaponIsFrontierJustice" "item_name" "The Frontier Justice" "required" weight 10 +criterion "WeaponIsFestiveFrontierJustice" "item_name" "Festive Frontier Justice" "required" weight 10 +criterion "WeaponIsRobotArm" "item_name" "The Gunslinger" "required" weight 10 +criterion "WeaponIsGoldenWrench" "item_name" "Golden Wrench" "required" weight 10 +criterion "WeaponIsGoldenFryingPan" "item_name" "Gold Frying Pan" "required" weight 10 +criterion "WeaponIsShortstop" "item_name" "The Shortstop" "required" weight 10 +criterion "WeaponIsMadMilk" "item_name" "Mad Milk" "required" weight 10 +criterion "WeaponIsSDCleaver" "playerweapon" "tf_weapon_cleaver" "required" weight 10 +criterion "WeaponIsHolyMackerel" "item_name" "The Holy Mackerel" "required" weight 10 +criterion "WeaponIsFestiveHolyMackerel" "item_name" "Festive Holy Mackerel" "required" weight 10 +criterion "WeaponIsUnarmedCombat" "item_name" "Unarmed Combat" "required" weight 10 +criterion "WeaponIsKatana" "playerweapon" "tf_weapon_katana" "required" weight 10 +criterion "WeaponIsSashimono" "item_name" "The Concheror" "required" weight 10 +criterion "WeaponIsSaxxy" "item_name" "Saxxy" "required" weight 10 +// Custom added criterion +criterion "WeaponIsBenja" "item_name" "The Dalokohs Bar" "required" weight 10 +criterion "WeaponIsFishcake" "item_name" "Fishcake" "required" weight 10 +criterion "WeaponIsSteak" "item_name" "The Buffalo Steak Sandvich" "required" weight 10 // Not actually used for the auto-eat response. Used for distinction in the taunts. +criterion "WeaponIsPainTrain" "item_name" "The Pain Train" "required" weight 10 +criterion "WeaponIsNotPainTrain" "item_name" "!=The Pain Train" "required" weight 10 +criterion "WeaponIsFryingPan" "item_name" "Frying Pan" "required" weight 10 +criterion "WeaponIsNotFryingPan" "item_name" "!=Frying Pan" "required" weight 10 +criterion "WeaponIsNotScattergunDouble" "item_name" "!=The Force-a-Nature" "required" weight 10 +criterion "WeaponIsNotAxe" "item_name" "!=The Scotsman's Skullcutter" "required" weight 10 // Exclude the Skullcutter - has horrible clipping issues with the Eyelander taunt. Maybe give it a different taunt later. +criterion "WeaponClassIsNotAxe" "playerweapon" "!=tf_weapon_sword" "required" weight 10 +criterion "WeaponIsCaber" "playerweapon" "tf_weapon_stickbomb" "required" weight 10 +criterion "WeaponIsMetalFists" "item_name" "Fists of Steel" "required" weight 10 +// BUG: These loadout criterions are read in from the Steam Cloud +// As such, if the server loses connection to Steam, the responses bug out a bit. +criterion "WeaponIsNotVanillaPrimary" "loadout_slot_primary" "" "required" weight 10 +criterion "WeaponIsNotVanillaSecondary" "loadout_slot_secondary" "" "required" weight 10 +criterion "WeaponIsNotVanillaMelee" "loadout_slot_melee" "" "required" weight 10 +criterion "LoadoutIsDrink" "loadout_slot_secondary" "!=Crit-a-Cola" "required" weight 10 +criterion "LoadoutIsCritDrink" "loadout_slot_secondary" "Crit-a-Cola" "required" weight 10 +criterion "LoadoutIsNotRobotArm" "loadout_slot_melee" "!=The Gunslinger" "required" weight 10 +criterion "WeaponIsJarate" "item_name" "Jarate" "required" weight 10 +criterion "WeaponIsBasher" "item_name" "The Boston basher" "required" weight 10 +criterion "WeaponIsCandy" "item_name" "The Candy Cane" "required" weight 10 +criterion "WeaponIsMace" "item_name" "Sun-on-a-Stick" "required" weight 10 +criterion "WeaponIsNotBasher" "item_name" "!=The Boston basher" "required" weight 10 +criterion "WeaponIsNotCandy" "item_name" "!=The Candy Cane" "required" weight 10 +criterion "WeaponIsNotMace" "item_name" "!=Sun-on-a-Stick" "required" weight 10 +criterion "WeaponIsNotFish" "item_name" "!=The Holy Mackerel" "required" weight 10 +criterion "WeaponIsNotGunbai" "item_name" "!=The Fan O'War" "required" weight 10 +criterion "WeaponIsShiv" "item_name" "The Tribalman's Shiv" "required" weight 10 +criterion "WeaponIsGunbai" "item_name" "The Fan O'War" "required" weight 10 +criterion "WeaponIsNotMediGun" "playerweapon" "!=tf_weapon_medigun" "required" weight 10 +criterion "WeaponIsSodaPopper" "item_name" "The Soda Popper" "required" weight 10 +criterion "WeaponIsAtomizer" "item_name" "The Atomizer" "required" weight 10 +criterion "WeaponIsBazaarBargain" "item_name" "The Bazaar Bargain" "required" weight 10 +criterion "WeaponIsCowMangler" "item_name" "The Cow Mangler 5000" "required" weight 10 +criterion "WeaponIsNotTaggedMinigun" "item_name" "!=Upgradeable TF_WEAPON_MINIGUN" "required" weight 10 +criterion "WeaponIsNotTaggedRifle" "item_name" "!=Upgradeable TF_WEAPON_SNIPERRIFLE" "required" weight 10 +criterion "WeaponIsNotTaggedSMG" "item_name" "!=Upgradeable TF_WEAPON_SMG" "required" weight 10 +criterion "WeaponIsNotTaggedKukri" "item_name" "!=Upgradeable TF_WEAPON_CLUB" "required" weight 10 +criterion "WeaponIsNotTaggedMedigun" "item_name" "!=Upgradeable TF_WEAPON_MEDIGUN" "required" weight 10 +criterion "WeaponIsNotSaxxy" "item_name" "!=Saxxy" "required" weight 10 +criterion "WeaponIsTRBlade" "item_name" "Three-Rune Blade" "required" weight 10 +criterion "WeaponIsNotTRBlade" "item_name" "!=Three-Rune Blade" "required" weight 10 +criterion "WeaponIsBackup" "item_name" "The Battalion's Backup" "required" weight 10 +criterion "WeaponIsHealArrow" "playerweapon" "tf_weapon_crossbow" "required" weight 10 +criterion "WeaponIsNotTomislav" "item_name" "!=Tomislav" "required" weight 10 +criterion "WeaponIsNotRobotArm" "item_name" "!=The Gunslinger" "required" weight 10 +criterion "WeaponIsRayGun" "item_name" "The Righteous Bison" "required" weight 10 +criterion "WeaponIsHippocrates" "item_name" "The Solemn Vow" "required" weight 10 +criterion "WeaponIsSharpDresser" "item_name" "The Sharp Dresser" "required" weight 10 +criterion "WeaponIsEurekaEffect" "item_name" "The Eureka Effect" "required" weight 10 +criterion "WeaponIsThirdDegree" "item_name" "The Third Degree" "required" weight 10 +criterion "WeaponIsPomson" "item_name" "The Pomson 6000" "required" weight 10 +criterion "WeaponIsManmelter" "item_name" "The Manmelter" "required" weight 10 +criterion "WeaponIsWrapAssassin" "item_name" "The Wrap Assassin" "required" weight 10 +criterion "WeaponIsSpycicle" "item_name" "The Spy-cicle" "required" weight 10 +criterion "WeaponIsRainblower" "item_name" "The Rainblower" "required" weight 10 +criterion "WeaponIsScorchShot" "item_name" "The Scorch Shot" "required" weight 10 +criterion "WeaponIsLollichop" "item_name" "The Lollichop" "required" weight 10 +criterion "WeaponIsPEPBrawlerBlaster" "playerweapon" "tf_weapon_pep_brawler_blaster" "required" weight 10 +criterion "WeaponIsHandgunScoutSecondary" "playerweapon" "tf_weapon_handgun_scout_secondary" "required" weight 10 +criterion "WeaponIsAnnihilator" "item_name" "The Neon Annihilator" "required" weight 10 +criterion "WeaponIsPromoAnnihilator" "item_name" "Promo Neon Annihilator" "required" weight 10 +criterion "WeaponIsLooseCannon" "item_name" "The Loose Cannon" "required" weight 10 +criterion "WeaponIsRescueRanger" "item_name" "The Rescue Ranger" "required" weight 10 +criterion "WeaponIsShortCircuit" "item_name" "The Short Circuit" "required" weight 10 +criterion "WeaponIsScotsmansSkullcutter" "item_name" "The Scotsman's Skullcutter" "required" weight 10 +criterion "WeaponIsClassicSniperrifle" "playerweapon" "tf_weapon_sniperrifle_classic" "required" +criterion "WeaponIsRocketLauncherAirStrike" "playerweapon" "tf_weapon_rocketlauncher_airstrike" "required" +criterion "WeaponIsMutatedMilk" "item_name" "Mutated Milk" "required" weight 10 +criterion "WeaponIsDragonsFury" "item_name" "The Dragon's Fury" "required" weight 10 +criterion "WeaponIsGasCan" "item_name" "The Gas Passer" "required" weight 10 +criterion "WeaponIsSlap" "item_name" "The Hot Hand" "required" weight 10 + +//Custom healed concept and critical hit +criterion "IsBeingHealed" "beinghealed" "1" "required" +criterion "IsNotBeingHealed" "beinghealed" "!=1" "required" +criterion "IsCritical" "damagecritical" "1" "required" +criterion "IsNotDominating" "IsDominating" "!=1" "required" weight 0 + + +criterion "IsCrossHairEnemy" "crosshair_enemy" "Yes" "required" +criterion "IsNotCrossHairEnemy" "crosshair_enemy" "!=Yes" "required" + +criterion "WeaponIsMiniSentrygun" "customdeath" "minisentrygun" "required" +// Custom criterion to stop yeehaw lines when swinging with Gunslinger + getting a mini sentry kill at the same-ish time. +criterion "WeaponIsNotMiniSentrygun" "customdeath" "!=minisentrygun" "required" +criterion "WeaponIsSentrygun" "customdeath" "sentrygun" "required" +criterion "WeaponIsNotSentrygun" "customdeath" "" "required" +criterion "WeaponIsNotSentry" "customdeath" "none" "required" + +// Custom criterion to check if not scoped in, we do not want the lines to mix +criterion "Unzoomed" "sniperzoomed" "!=1" "required" +criterion "DeployedContext" "sniperzoomed" "1" "required" +criterion "ConceptFireWeapon" "Concept" "TLK_FIREWEAPON" required +criterion "ConceptFireMinigun" "Concept" "TLK_FIREMINIGUN" required +criterion "ConceptWindMinigun" "Concept" "TLK_WINDMINIGUN" required +criterion "LowHealthContext" "playerhealthfrac" "<0.25" required +// Custom stuff +criterion "CaberHealthContext" "playerhealthfrac" ">0.429" required +criterion "BonkHealthContext" "playerhealthfrac" "<0.641" required +criterion "NotLowHealth" "playerhealthfrac" ">0.5" required +// End custom +criterion "SuperHighHealthContext" "playerhealthfrac" ">1.400" required +criterion "GameRulesInWinState" "GameRound" "5" required +criterion "PlayerLostPreviousRound" "LostRound" "1" required +criterion "PlayerWonPreviousRound" "LostRound" "0" required +criterion "PlayerOnWinningTeam" "OnWinningTeam" "1" required +criterion "PlayerOnLosingTeam" "OnWinningTeam" "0" required +criterion "PreviousRoundWasTie" "PrevRoundWasTie" "1" required +criterion "PreviousRoundWasNotTie" "PrevRoundWasTie" "0" required + +criterion "IsRedTeam" "OnRedTeam" "1" required +criterion "IsBlueTeam" "OnRedTeam" "0" required + +criterion "IsFiringMinigun" "minigunfiretime" ">0.0" required +criterion "TimeFiringMinigunShort" "minigunfiretime" ">4.0,<=8.0" required +criterion "TimeFiringMinigunLong" "minigunfiretime" ">8.0,<=15.0" required +criterion "TimeFiringMinigunReallyLong" "minigunfiretime" ">15.0" required +criterion "ConceptFireMinigunTalk" "Concept" "TLK_MINIGUN_FIREWEAPON" "required" +Criterion "NotDefendOnThePointSpeech" "worldDefendOnThePointSpeech" "!=1" "required" weight 0 + +criterion "IsAprilFoolsTaunt" "IsAprilFoolsTaunt" "1" "required" weight 100 +criterion "IsHalloweenTaunt" "IsHalloweenTaunt" "1" "required" weight 100 +criterion "IsRobotCostume" "IsRobotCostume" "1" "required" weight 100 +criterion "IsFairyHeavy" "IsFairyHeavy" "1" "required" weight 100 +criterion "IsDemowolf" "IsDemowolf" "1" "required" weight 100 +criterion "IsFrankenHeavy" "IsFrankenHeavy" "1" "required" weight 100 + +criterion "IsMedicDoubleFace" "IsMedicDoubleFace" "1" "required" weight 100 +criterion "IsMedicBirdHead" "IsMedicBirdHead" "1" "required" weight 100 +criterion "IsHeavyBirdHead" "IsHeavyBirdHead" "1" "required" weight 100 +criterion "IsSoldierBirdHead" "IsSoldierBirdHead" "1" "required" weight 100 +criterion "IsSniperBirdHead" "IsSniperBirdHead" "1" "required" weight 100 +criterion "IsSoldierMaggotHat" "IsSoldierMaggotHat" "1" "required" weight 100 +criterion "IsSoldierWizardHat" "IsSoldierWizardHat" "1" "required" weight 100 +criterion "IsUnicornHead" "IsUnicornHead" "1" "required" weight 100 +criterion "IsMedicZombieBird" "IsMedicZombieBird" "1" "required" weight 100 +criterion "IsHauntedHat" "IsHauntedHat" "1" "required" weight 100 + +criterion "HasTaunt2Item_TauntEnablerTest" "loadout_slot_action" "Taunt Enabler Test" "required" + + +criterion "ConceptRequestDuel" "Concept" "TLK_REQUEST_DUEL" required +criterion "ConceptDuelRejected" "Concept" "TLK_DUEL_WAS_REJECTED" required +criterion "ConceptIAcceptDuel" "Concept" "TLK_ACCEPT_DUEL" required +criterion "ConceptDuelAccepted" "Concept" "TLK_DUEL_WAS_ACCEPTED" required + + + + +criterion "DuelTargetIsScout" "dueltargetclass" "Scout" required +criterion "DuelTargetIsSniper" "dueltargetclass" "Sniper" required +criterion "DuelTargetIsSoldier" "dueltargetclass" "Soldier" required +criterion "DuelTargetIsDemoman" "dueltargetclass" "Demoman" required +criterion "DuelTargetIsMedic" "dueltargetclass" "Medic" required +criterion "DuelTargetIsHeavy" "dueltargetclass" "Heavy" required +criterion "DuelTargetIsPyro" "dueltargetclass" "Pyro" required +criterion "DuelTargetIsSpy" "dueltargetclass" "Spy" required +criterion "DuelTargetIsEngineer" "dueltargetclass" "Engineer" required + + +criterion "ConceptRocketDestroyed" "Concept" "TLK_ROCKET_DESTOYED" required + +criterion "ConceptComboKilled" "Concept" "TLK_COMBO_KILLED" required + +// MvM criterion +criterion "IsMvMDefender" "IsMvMDefender" "1" required +criterion "ConceptMvMBombDropped" "Concept" "TLK_MVM_BOMB_DROPPED" required +criterion "ConceptMvMBombCarrierUpgrade1" "Concept" "TLK_MVM_BOMB_CARRIER_UPGRADE1" required +criterion "ConceptMvMBombCarrierUpgrade2" "Concept" "TLK_MVM_BOMB_CARRIER_UPGRADE2" required +criterion "ConceptMvMBombCarrierUpgrade3" "Concept" "TLK_MVM_BOMB_CARRIER_UPGRADE3" required +criterion "ConceptMvMDefenderDied" "Concept" "TLK_MVM_DEFENDER_DIED" required +criterion "ConceptMvMFirstBombPickup" "Concept" "TLK_MVM_FIRST_BOMB_PICKUP" required +criterion "ConceptMvMBombPickup" "Concept" "TLK_MVM_BOMB_PICKUP" required +criterion "ConceptMvMSentryBuster" "Concept" "TLK_MVM_SENTRY_BUSTER" required +criterion "ConceptMvMSentryBusterDown" "Concept" "TLK_MVM_SENTRY_BUSTER_DOWN" required +criterion "ConceptMvMSniperCallout" "Concept" "TLK_MVM_SNIPER_CALLOUT" required +criterion "ConceptMvMLastManStanding" "Concept" "TLK_MVM_LAST_MAN_STANDING" required +criterion "ConceptMvMEncourageMoney" "Concept" "TLK_MVM_ENCOURAGE_MONEY" required +criterion "ConceptMvMMoneyPickup" "Concept" "TLK_MVM_MONEY_PICKUP" required +criterion "ConceptMvMEncourageUpgrade" "Concept" "TLK_MVM_ENCOURAGE_UPGRADE" required +criterion "ConceptMvMUpgradeComplete" "Concept" "TLK_MVM_UPGRADE_COMPLETE" required +criterion "ConceptMvMGiantCallout" "Concept" "TLK_MVM_GIANT_CALLOUT" required +criterion "ConceptMvMGiantHasBomb" "Concept" "TLK_MVM_GIANT_HAS_BOMB" required +criterion "ConceptMvMGiantKilled" "Concept" "TLK_MVM_GIANT_KILLED" required +criterion "ConceptMvMGiantKilledTeammate" "Concept" "TLK_MVM_GIANT_KILLED_TEAMMATE" required +criterion "ConceptMvMSappedRobot" "Concept" "TLK_MVM_SAPPED_ROBOT" required +criterion "ConceptMvMCloseCall" "Concept" "TLK_MVM_CLOSE_CALL" required +criterion "ConceptMvMTankCallout" "Concept" "TLK_MVM_TANK_CALLOUT" required +criterion "ConceptMvMTankDead" "Concept" "TLK_MVM_TANK_DEAD" required +criterion "ConceptMvMTankDeploying" "Concept" "TLK_MVM_TANK_DEPLOYING" required +criterion "ConceptMvMAttackTheTank" "Concept" "TLK_MVM_ATTACK_THE_TANK" required +criterion "ConceptMvMTaunt" "Concept" "TLK_MVM_TAUNT" required +criterion "ConceptMvMWaveStart" "Concept" "TLK_MVM_WAVE_START" required +criterion "ConceptMvMWaveWin" "Concept" "TLK_MVM_WAVE_WIN" required +criterion "ConceptMvMWaveLose" "Concept" "TLK_MVM_WAVE_LOSE" required +criterion "ConceptMvMDeployRage" "Concept" "TLK_MVM_DEPLOY_RAGE" required + +//A Tale of Two Cities Update +criterion "ConceptMannhattanGateAttack" "Concept" "TLK_MANNHATTAN_GATE_ATK" required +criterion "ConceptMannhattanGateTake" "Concept" "TLK_MANNHATTAN_GATE_TAKE" required +criterion "ConceptMvMResurrected" "Concept" "TLK_RESURRECTED" required +criterion "ConceptMvMMedicShield" "Concept" "TLK_MEDIC_HEAL_SHIELD" required +criterion "ConceptMvMLootCommon" "Concept" "TLK_MVM_LOOT_COMMON" required +criterion "ConceptMvMLootRare" "Concept" "TLK_MVM_LOOT_RARE" required +criterion "ConceptMvMLootUltraRare" "Concept" "TLK_MVM_LOOT_ULTRARARE" required + +// Halloween 2013 +criterion "ConceptPlayerCastFireball" "Concept" "TLK_PLAYER_CAST_FIREBALL" required +criterion "ConceptPlayerCastMerasmusZap" "Concept" "TLK_PLAYER_CAST_MERASMUS_ZAP" required +criterion "ConceptPlayerCastSelfHeal" "Concept" "TLK_PLAYER_CAST_SELF_HEAL" required +criterion "ConceptPlayerCastMirv" "Concept" "TLK_PLAYER_CAST_MIRV" required +criterion "ConceptPlayerCastBlastJump" "Concept" "TLK_PLAYER_CAST_BLAST_JUMP" required +criterion "ConceptPlayerCastStealth" "Concept" "TLK_PLAYER_CAST_STEALTH" required +criterion "ConceptPlayerCastTeleport" "Concept" "TLK_PLAYER_CAST_TELEPORT" required +criterion "ConceptPlayerCastBombHeadCurse" "Concept" "TLK_PLAYER_CAST_BOMB_HEAD_CURSE" required +criterion "ConceptPlayerCastLightningBall" "Concept" "TLK_PLAYER_CAST_LIGHTNING_BALL" required +criterion "ConceptPlayerCastMovementBuff" "Concept" "TLK_PLAYER_CAST_MOVEMENT_BUFF" required +criterion "ConceptPlayerCastMonoculous" "Concept" "TLK_PLAYER_CAST_MONOCULOUS" required +criterion "ConceptPlayerCastMeteorSwarm" "Concept" "TLK_PLAYER_CAST_METEOR_SWARM" required +criterion "ConceptPlayerCastSkeletonHorde" "Concept" "TLK_PLAYER_CAST_SKELETON_HORDE" required + +criterion "ConceptPlayerSpellFireball" "Concept" "TLK_PLAYER_SPELL_FIREBALL" required +criterion "ConceptPlayerSpellMerasmusZap" "Concept" "TLK_PLAYER_SPELL_MERASMUS_ZAP" required +criterion "ConceptPlayerSpellSelfHeal" "Concept" "TLK_PLAYER_SPELL_SELF_HEAL" required +criterion "ConceptPlayerSpellMirv" "Concept" "TLK_PLAYER_SPELL_MIRV" required +criterion "ConceptPlayerSpellBlastJump" "Concept" "TLK_PLAYER_SPELL_BLAST_JUMP" required +criterion "ConceptPlayerSpellStealth" "Concept" "TLK_PLAYER_SPELL_STEALTH" required +criterion "ConceptPlayerSpellTeleport" "Concept" "TLK_PLAYER_SPELL_TELEPORT" required +criterion "ConceptPlayerSpellLightningBall" "Concept" "TLK_PLAYER_SPELL_LIGHTNING_BALL" required +criterion "ConceptPlayerSpellMovementBuff" "Concept" "TLK_PLAYER_SPELL_MOVEMENT_BUFF" required +criterion "ConceptPlayerSpellMonoculous" "Concept" "TLK_PLAYER_SPELL_MONOCULOUS" required +criterion "ConceptPlayerSpellMeteorSwarm" "Concept" "TLK_PLAYER_SPELL_METEOR_SWARM" required +criterion "ConceptPlayerSpellSkeletonHorde" "Concept" "TLK_PLAYER_SPELL_SKELETON_HORDE" required + +criterion "ConceptPlayerSpellPickupCommon" "Concept" "TLK_PLAYER_SPELL_PICKUP_COMMON" required +criterion "ConceptPlayerSpellPickupRare" "Concept" "TLK_PLAYER_SPELL_PICKUP_RARE" required +criterion "ConceptPlayerHelltowerMidnight" "Concept" "TLK_PLAYER_HELLTOWER_MIDNIGHT" required +criterion "ConceptPlayerSkeletonKingAppear" "Concept" "TLK_PLAYER_SKELETON_KING_APPEAR" required + +criterion "IsMapHelltower" "map" "plr_hightower_event" required +criterion "IsInHell" "IsInHell" "1" required +criterion "IsNotInHell" "IsInHell" "0" required + +criterion "IsFirstRound" "RoundsPlayed" "<1" required +criterion "IsNotFirstRound" "RoundsPlayed" ">0" required +criterion "IsComp6v6" "IsComp6v6" "1" required +criterion "IsNotComp6v6" "IsComp6v6" "0" required +criterion "IsCompWinner" "IsCompWinner" "1" required + +criterion "ConceptPlayerGameOverComp" "Concept" "TLK_GAME_OVER_COMP" required +criterion "ConceptPlayerMatchOverComp" "Concept" "TLK_MATCH_OVER_COMP" required + +// Test rules +#include "talker/tf.txt" +#include "talker/Heavy.txt" +#include "talker/Scout.txt" +#include "talker/Engineer.txt" +#include "talker/Sniper.txt" +#include "talker/Soldier.txt" +#include "talker/Demoman.txt" +#include "talker/Medic.txt" +#include "talker/Pyro.txt" +#include "talker/Spy.txt" +#include "talker/events.txt" +#include "talker/Heavy_auto.txt" +#include "talker/Scout_auto.txt" +#include "talker/Engineer_auto.txt" +#include "talker/Sniper_auto.txt" +#include "talker/Soldier_auto.txt" +#include "talker/Demoman_auto.txt" +#include "talker/Medic_auto.txt" +#include "talker/Pyro_auto.txt" +#include "talker/Spy_auto.txt" + diff --git a/game/tc2/scripts/talker/tf.txt b/game/tc2/scripts/talker/tf.txt new file mode 100644 index 00000000000..03a46478b8b --- /dev/null +++ b/game/tc2/scripts/talker/tf.txt @@ -0,0 +1,2021 @@ +//============================================================================================================ +// TF criteria - moved to response_rules.txt file. Please keep all definitions there. +//============================================================================================================ + + +//============================================================================================================ +// Taunts, idle expressions, firing expressions (not all chars have idle responses, depends on their 'default' face) +//============================================================================================================ + + +// Pyro +//------------------------------------------------------------------------------------------------------------ + + response "PyroTauntPrimary" + { + scene "scenes/player/pyro/low/taunt01_v1.vcd" + scene "scenes/player/pyro/low/taunt01_v2.vcd" + scene "scenes/player/pyro/low/taunt01_v3.vcd" + } + response "PyroTauntSecondary" + { + scene "scenes/player/pyro/low/taunt02.vcd" + } + response "PyroTauntMelee" + { + scene "scenes/player/pyro/low/taunt03.vcd" + } + response "PyroTauntItem1" + { + scene "scenes/player/pyro/low/taunt02.vcd" + } + response "PyroTauntRainblower" + { + scene "scenes/player/pyro/low/taunt_bubbles.vcd" + } + response "PyroTauntScorchShot" + { + scene "scenes/player/pyro/low/taunt_scorch_shot.vcd" + } + response "PyroTauntLollichop" + { + scene "scenes/player/pyro/low/taunt_lollichop.vcd" + } + response "PyroTauntHalloween" + { + scene "scenes/player/pyro/low/taunt06.vcd" + } + + rule PyroTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsPyro WeaponIsFlamethrower + response PyroTauntPrimary + } + rule PyroTauntDragonsFury + { + criteria ConceptPlayerTaunt IsPyro WeaponIsDragonsFury + response PyroTauntPrimary + } + + rule PyroTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsPyro WeaponIsShotgunPyro + response PyroTauntSecondary + } + rule PyroTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsPyro WeaponIsAxe + response PyroTauntMelee + } + rule PyroTauntPlayerItem1 + { + criteria ConceptPlayerTaunt IsPyro WeaponIsFlaregun + response PyroTauntItem1 + } + rule PyroTauntPlayerRainblower + { + criteria ConceptPlayerTaunt IsPyro WeaponIsRainblower + response PyroTauntRainblower + } + rule PyroTauntPlayerScorchShot + { + criteria ConceptPlayerTaunt IsPyro WeaponIsScorchShot + response PyroTauntScorchShot + } + rule PyroTauntPlayerLollichop + { + criteria ConceptPlayerTaunt IsPyro WeaponIsLollichop + response PyroTauntLollichop + } + rule PyroTauntHalloween + { + criteria ConceptPlayerTaunt IsPyro IsHalloweenTaunt + response PyroTauntHalloween + } + + Response "PyroTauntThirdDegree" + { + scene "scenes/player/pyro/low/drg_axe_taunt.vcd" + } + Rule PyroTauntThirdDegree + { + criteria ConceptPlayerTaunt IsPyro WeaponIsThirdDegree + response PyroTauntThirdDegree + } + + Rule PyroTauntManmelter + { + criteria ConceptPlayerTaunt IsPyro WeaponIsManmelter + response PyroTauntSecondary + } + + Response "PyroTauntAnnihilator" + { + scene "scenes/player/pyro/low/annihilator_taunt.vcd" + } + Rule PyroTauntAnnihilator + { + criteria ConceptPlayerTaunt IsPyro WeaponIsAnnihilator + response PyroTauntAnnihilator + } + Rule PyroTauntPromoAnnihilator + { + criteria ConceptPlayerTaunt IsPyro WeaponIsPromoAnnihilator + response PyroTauntAnnihilator + } + + Rule PyroTauntGasCan + { + criteria ConceptPlayerTaunt IsPyro WeaponIsGasCan + response PyroTauntSecondary + } + + Rule PyroTauntSlap + { + criteria ConceptPlayerTaunt IsPyro WeaponIsSlap + response PyroTauntSecondary + } + +//============================================================================================================ + + +// Heavy +//------------------------------------------------------------------------------------------------------------ + response "HeavyTauntPrimary" + { + scene "scenes/player/heavy/low/taunt01.vcd" + scene "scenes/player/heavy/low/taunt01_v2.vcd" + scene "scenes/player/heavy/low/taunt01_v3.vcd" + } + response "HeavyTauntSecondary" + { + scene "scenes/player/heavy/low/taunt02.vcd" + scene "scenes/player/heavy/low/taunt02_v1.vcd" + scene "scenes/player/heavy/low/taunt02_v2.vcd" + } + response "HeavyTauntMelee" + { + scene "scenes/player/heavy/low/taunt03_v1.vcd" + } + response "HeavyTauntPlayerItem1" + { + scene "scenes/player/heavy/low/taunt04.vcd" + } + response "HeavyTauntPlayerItem2" + { + scene "scenes/player/heavy/low/taunt04.vcd" + } + response "HeavyTauntPlayerItem2Alt" + { + scene "scenes/player/heavy/low/taunt04.vcd" + } + response "HeavyTauntPlayerItem3" + { + scene "scenes/player/heavy/low/taunt04.vcd" + } + response "HeavyTauntPlayerGloves" + { + scene "scenes/player/heavy/low/taunt05.vcd" + } + response "HeavyTauntHalloween" + { + scene "scenes/player/heavy/low/taunt06.vcd" + } + response "HeavyTauntFrankenHeavy" + { + scene "scenes/player/heavy/low/taunt07_halloween.vcd" + } + + rule HeavyTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsMinigun + response HeavyTauntPrimary + } + rule HeavyTauntSaxxy + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsSaxxy + response HeavyTauntMelee + } + rule HeavyTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsShotgunHwg + response HeavyTauntSecondary + } + rule HeavyTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsFists + response HeavyTauntMelee + } + rule HeavyTauntPlayerGloves + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsGloves + response HeavyTauntPlayerGloves + } + rule HeavyTauntPlayerItem1 + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsSandvich + response HeavyTauntPlayerItem1 + } + rule HeavyTauntPlayerRobotSandvich + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsRobotSandvich + response HeavyTauntPlayerItem1 + } + rule HeavyTauntPlayerFestiveSandvich + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsFestiveSandvich + response HeavyTauntPlayerItem1 + } + rule HeavyTauntPlayerLunchbox + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsLunchbox + response HeavyTauntPlayerItem1 + } + // Custom stuff + // This is to let you taunt with the items. + rule HeavyTauntPlayerItem2 + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsBenja + response HeavyTauntPlayerItem3 + } + rule HeavyTauntPlayerItem2Alt + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsFishcake + response HeavyTauntPlayerItem3 + } + rule HeavyTauntPlayerItem3 + { + criteria ConceptPlayerTaunt IsHeavy WeaponIsSteak + response HeavyTauntPlayerItem3 + } + //End Custom + rule HeavyTauntHalloween + { + criteria ConceptPlayerTaunt IsHeavy IsHalloweenTaunt + response HeavyTauntHalloween + } + rule HeavyTauntFrankenHeavy + { + criteria ConceptPlayerTaunt IsHeavy IsFrankenHeavy + response HeavyTauntFrankenHeavy + } + + Response PlayerExpressionIdleHeavy + { + scene "scenes/player/heavy/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleHeavy + { + criteria ConceptPlayerExpression IsHeavy + Response PlayerExpressionIdleHeavy + } + + Response PlayerExpressionIdleCompWinnerHeavy + { + scene "scenes/player/heavy/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerHeavy + { + criteria ConceptPlayerExpression IsHeavy IsCompWinner + Response PlayerExpressionIdleCompWinnerHeavy + } + + + Response PlayerExpressionFiringMinigunHeavy + { + scene "scenes/player/heavy/low/attackMinigun02.vcd" + } + Rule PlayerExpressionFiringMinigunHeavy + { + criteria ConceptPlayerExpression IsHeavy IsFiringMinigun + Response PlayerExpressionFiringMinigunHeavy + } + + // Minigun vocal stuff has been moved to Heavy.txt ! + + Response PlayerExpressionIdleHurtHeavy + { + scene "scenes/player/heavy/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtHeavy + { + criteria ConceptPlayerExpression IsHeavy LowHealthContext + Response PlayerExpressionIdleHurtHeavy + } + Rule PlayerExpressionRoundLossHeavy + { + criteria ConceptPlayerExpression IsHeavy GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtHeavy + } + + Response HeavyFireMinigun + { + //scene "scenes/player/heavy/low/attackMinigun01.vcd" *bug* + scene "scenes/player/heavy/low/attackMinigun02.vcd" + } + Rule HeavyFireMinigun + { + criteria ConceptFireMinigun IsHeavy WeaponIsMinigun + Response HeavyFireMinigun + } + + Response HeavyWindMinigun + { + scene "scenes/player/heavy/low/attackWindup01.vcd" + } + Rule HeavyWindMinigunHeavy + { + criteria ConceptWindMinigun IsHeavy WeaponIsMinigun + Response HeavyWindMinigun + } + + Response PlayerExpressionAttackHeavy + { + scene "scenes/player/heavy/low/attack01.vcd" + } + Rule PlayerExpressionAttackHeavy + { + criteria ConceptFireWeapon IsHeavy + Response PlayerExpressionAttackHeavy + } + + //-------------------------------------------------------------------------------------------------------------- + // Auto Speech Sandwich + //-------------------------------------------------------------------------------------------------------------- + Response AteSandwichHeavy + { + scene "scenes/Player/Heavy/low/SandwichTaunt01.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt02.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt03.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt04.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt05.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt06.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt07.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt08.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt09.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt10.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt11.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt12.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt13.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt14.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt15.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt16.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt17.vcd" predelay "1.0" + } + Rule AteSandwichHeavy + { + criteria ConceptAteFood IsHeavy WeaponIsSandvich + Response AteSandwichHeavy + } + Rule AteRobotSandwichHeavy + { + criteria ConceptAteFood IsHeavy WeaponIsRobotSandvich + Response AteSandwichHeavy + } + Rule AteFestiveSandwichHeavy + { + criteria ConceptAteFood IsHeavy WeaponIsFestiveSandvich + Response AteSandwichHeavy + } + // Custom stuff + // These have been designed as separate responses so that I can add non-sandvich lines I wanted to. + // There are two examples of this in the AteChocoHeavy response. + // It's possible to just have one of the responses below, but you would not be able to give the bar/steak separate lines then. + // The IsWeaponMelee allows this to happen, creating a distinction between the choco bar, sandvich and the steak. + Response AteSteakHeavy + { + scene "scenes/Player/Heavy/low/SandwichTaunt01.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt02.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt14.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt17.vcd" predelay "1.0" + } + Rule AteSteakHeavy + { + criteria ConceptAteFood IsHeavy IsWeaponMelee + Response AteSteakHeavy + } + Response AteChocoHeavy + { + scene "scenes/Player/Heavy/low/SandwichTaunt01.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt02.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt14.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/SandwichTaunt17.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/2066.vcd" predelay "1.0" + scene "scenes/Player/Heavy/low/2260.vcd" predelay "1.0" + } + Rule AteChocoHeavy + { + criteria ConceptAteFood IsHeavy + Response AteChocoHeavy + } + + +//============================================================================================================ + + +// Engineer +//------------------------------------------------------------------------------------------------------------ + response "EngineerTauntPrimary" + { + scene "scenes/player/engineer/low/taunt01_vocal01.vcd" + scene "scenes/player/engineer/low/taunt01_vocal02.vcd" + scene "scenes/player/engineer/low/taunt01_vocal03.vcd" + scene "scenes/player/engineer/low/taunt01_vocal04.vcd" + } + response "EngineerTauntSecondary" + { + scene "scenes/player/engineer/low/taunt02_vocal01.vcd" + scene "scenes/player/engineer/low/taunt02_vocal02.vcd" + scene "scenes/player/engineer/low/taunt02_vocal03.vcd" + } + response "EngineerTauntMelee" + { + scene "scenes/player/engineer/low/taunt03.vcd" + } + response "EngineerTauntHalloween" + { + scene "scenes/player/engineer/low/taunt06.vcd" + } + response "EngineerTauntGuitar" + { + scene "scenes/player/engineer/low/taunt07.vcd" + } + response "EngineerTauntRobotArm" + { + scene "scenes/player/engineer/low/taunt09.vcd" + } + + rule EngineerTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsShotgunPrimary + response EngineerTauntPrimary + } + rule EngineerTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsPistol + response EngineerTauntSecondary + } + rule EngineerTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsWrench + response EngineerTauntMelee + } + rule EngineerTauntPlayerShortCircuit + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsShortCircuit + response EngineerTauntMelee + } + rule EngineerTauntGuitar + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsFrontierJustice + response EngineerTauntGuitar + } + rule EngineerTauntFestiveGuitar + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsFestiveFrontierJustice + response EngineerTauntGuitar + } + rule EngineerTauntRobotArm + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsRobotArm + response EngineerTauntRobotArm + } + rule EngineerTauntLaserPointer + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsLaserPointer + response EngineerTauntSecondary + } + rule EngineerTauntHalloween + { + criteria ConceptPlayerTaunt IsEngineer IsHalloweenTaunt + response EngineerTauntHalloween + } + + Response PlayerExpressionIdleEngineer + { + scene "scenes/player/engineer/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleEngineer + { + criteria ConceptPlayerExpression IsEngineer + Response PlayerExpressionIdleEngineer + } + Response PlayerExpressionIdleCompWinnerEngineer + { + scene "scenes/player/engineer/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerEngineer + { + criteria ConceptPlayerExpression IsEngineer IsCompWinner + Response PlayerExpressionIdleCompWinnerEngineer + } + + Response PlayerExpressionIdleHurtEngineer + { + scene "scenes/player/engineer/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtEngineer + { + criteria ConceptPlayerExpression IsEngineer LowHealthContext + Response PlayerExpressionIdleHurtEngineer + } + Rule PlayerExpressionRoundLossEngineer + { + criteria ConceptPlayerExpression IsEngineer GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtEngineer + } + + Response PlayerExpressionAttackEngineer + { + scene "scenes/player/engineer/low/attack01.vcd" + } + Rule PlayerExpressionAttackEngineer + { + criteria ConceptFireWeapon IsEngineer + Response PlayerExpressionAttackEngineer + } + + Response "EngineerTauntEurekaEffect" + { + scene "scenes/player/engineer/low/taunt_drg_melee.vcd" + } + Rule EngineerTauntEurekaEffect + { + criteria ConceptTauntEurekaTeleport IsEngineer WeaponIsEurekaEffect + response EngineerTauntEurekaEffect + } + + Rule EngineerTauntPomson + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsPomson + response EngineerTauntPrimary + } + rule EngineerTauntPlayerRescueRanger + { + criteria ConceptPlayerTaunt IsEngineer WeaponIsRescueRanger + response EngineerTauntPrimary + } + +//============================================================================================================ + + +// Medic +//------------------------------------------------------------------------------------------------------------ + response "MedicTauntPrimary" + { + scene "scenes/player/medic/low/taunt01_vocal01.vcd" + scene "scenes/player/medic/low/taunt01_vocal03.vcd" + scene "scenes/player/medic/low/taunt01_vocal04.vcd" + scene "scenes/player/medic/low/taunt01_vocal05.vcd" + + + } + response "MedicTauntSecondary" + { + scene "scenes/player/medic/low/taunt02_v1.vcd" + } + response "MedicTauntMelee" + { + scene "scenes/player/medic/low/taunt03.vcd" + } + response "MedicTauntHalloween" + { + scene "scenes/player/medic/low/taunt07.vcd" + } + response "MedicTauntKritzkrieg" + { + scene "scenes/player/medic/low/taunt06.vcd" + } + response "MedicTauntUbersaw" + { + scene "scenes/player/medic/low/taunt08.vcd" + } + + rule MedicTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsMedic WeaponIsSyringe + response MedicTauntPrimary + } + rule MedicTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsMedic WeaponIsHeal + response MedicTauntSecondary + } + rule MedicTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsMedic WeaponIsBonesaw + response MedicTauntMelee + } + rule MedicTauntPlayerKritzkrieg + { + criteria ConceptPlayerTaunt IsMedic WeaponIsKritzkrieg + response MedicTauntKritzkrieg + } + rule MedicTauntHalloween + { + criteria ConceptPlayerTaunt IsMedic IsHalloweenTaunt + response MedicTauntHalloween + } + rule MedicTauntUbersaw + { + criteria ConceptPlayerTaunt IsMedic WeaponIsUbersaw + response MedicTauntUbersaw + } + rule MedicTauntFestiveUbersaw + { + criteria ConceptPlayerTaunt IsMedic WeaponIsFestiveUbersaw + response MedicTauntUbersaw + } + Rule MedicTauntSaxxy + { + criteria ConceptPlayerTaunt IsMedic WeaponIsSaxxy + response MedicTauntSecondary + } + Rule MedicTauntBust + { + criteria ConceptPlayerTaunt IsMedic WeaponIsHippocrates + response MedicTauntPrimary + } + Rule MedicTauntHealArrow + { + criteria ConceptPlayerTaunt IsMedic WeaponIsHealArrow + response MedicTauntPrimary + } + + Response PlayerExpressionIdleMedic + { + scene "scenes/player/medic/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleMedic + { + criteria ConceptPlayerExpression IsMedic + Response PlayerExpressionIdleMedic + } + Response PlayerExpressionIdleCompWinnerMedic + { + scene "scenes/player/medic/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerMedic + { + criteria ConceptPlayerExpression IsMedic IsCompWinner + Response PlayerExpressionIdleCompWinnerMedic + } + + Response PlayerExpressionIdleHurtMedic + { + scene "scenes/player/medic/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtMedic + { + criteria ConceptPlayerExpression IsMedic LowHealthContext + Response PlayerExpressionIdleHurtMedic + } + Rule PlayerExpressionRoundLossMedic + { + criteria ConceptPlayerExpression IsMedic GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtMedic + } + + Response PlayerExpressionAttackMedic + { + scene "scenes/player/medic/low/attack01.vcd" + } + Rule PlayerExpressionAttackMedic + { + criteria ConceptFireWeapon IsMedic + Response PlayerExpressionAttackMedic + } + +//============================================================================================================ + + +// Soldier +//------------------------------------------------------------------------------------------------------------ + response "SoldierTauntPrimary" + { + scene "scenes/player/soldier/low/taunt01_v1.vcd" + scene "scenes/player/soldier/low/taunt01_v2.vcd" + scene "scenes/player/soldier/low/taunt01_v3.vcd" + } + response "SoldierTauntBanner" + { + scene "scenes/player/soldier/low/taunt02_v1.vcd" + scene "scenes/player/soldier/low/taunt02_v2.vcd" + } + response "SoldierTauntSecondary" + { + scene "scenes/player/soldier/low/taunt04.vcd" + } + response "SoldierTauntMelee" + { + scene "scenes/player/soldier/low/taunt03_v1.vcd" + scene "scenes/player/soldier/low/taunt03_v2.vcd" + scene "scenes/player/soldier/low/taunt03_v3.vcd" + scene "scenes/player/soldier/low/taunt03_v4.vcd" + } + response "SoldierTauntHalloween" + { + scene "scenes/player/soldier/low/taunt06.vcd" + } + response "SoldierTauntRobot" + { + scene "scenes/player/soldier/low/taunt09.vcd" + } + response "SoldierTauntPickaxe" + { + scene "scenes/player/soldier/low/taunt05.vcd" + } + response "SoldierTauntDirectHit" + { + scene "scenes/player/soldier/low/taunt07.vcd" + } + response "SoldierTauntCowMangler" + { + scene "scenes/player/soldier/low/taunt08.vcd" + } + + rule SoldierTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsRocket + response SoldierTauntPrimary + } + rule SoldierTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsShotgunSoldier + response SoldierTauntSecondary + } + rule SoldierTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsShovel + response SoldierTauntMelee + } + rule SoldierTauntHalloween + { + criteria ConceptPlayerTaunt IsSoldier IsHalloweenTaunt + response SoldierTauntHalloween + } + rule SoldierTauntRobot + { + criteria ConceptPlayerTaunt IsSoldier IsRobotCostume + response SoldierTauntRobot + } + rule SoldierTauntEqualizer + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsEqualizer + response SoldierTauntPickaxe + } + rule SoldierTauntEscapePlan + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsEscapePlan + response SoldierTauntPickaxe + } + rule SoldierTauntDirectHit + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsDirectHit + response SoldierTauntDirectHit + } + rule SoldierTauntBeggarsBazooka + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsBeggarsBazooka + response SoldierTauntDirectHit + } + rule SoldierTauntBanner + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsBanner + response SoldierTauntBanner + } + rule SoldierTauntFestiveBanner + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsFestiveBanner + response SoldierTauntBanner + } + rule SoldierTauntSashimono + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsSashimono + response SoldierTauntBanner + } + rule SoldierTauntKatana + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsKatana + response SoldierTauntDirectHit + } + rule SoldierTauntCowMangler + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsCowMangler + response SoldierTauntCowMangler + } + rule SoldierTauntRayGun + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsRayGun + response SoldierTauntBanner + } + rule SoldierTauntBackup + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsBackup + response SoldierTauntBanner + } + rule SoldierTauntSaxxy + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsSaxxy + response SoldierTauntBanner + } + + Response PlayerExpressionIdleSoldier + { + scene "scenes/player/soldier/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleSoldier + { + criteria ConceptPlayerExpression IsSoldier + Response PlayerExpressionIdleSoldier + } + Response PlayerExpressionIdleCompWinnerSoldier + { + scene "scenes/player/soldier/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerSoldier + { + criteria ConceptPlayerExpression IsSoldier IsCompWinner + Response PlayerExpressionIdleCompWinnerSoldier + } + Response PlayerExpressionIdleHurtSoldier + { + scene "scenes/player/soldier/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtSoldier + { + criteria ConceptPlayerExpression IsSoldier LowHealthContext + Response PlayerExpressionIdleHurtSoldier + } + Rule PlayerExpressionRoundLossSoldier + { + criteria ConceptPlayerExpression IsSoldier GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtSoldier + } + + Response PlayerExpressionAttackSoldier + { + scene "scenes/player/soldier/low/attack01.vcd" + } + Rule PlayerExpressionAttackSoldier + { + criteria ConceptFireWeapon IsSoldier + Response PlayerExpressionAttackSoldier + } + rule SoldierTauntPlayerAirStrike + { + criteria ConceptPlayerTaunt IsSoldier WeaponIsRocketLauncherAirStrike + response SoldierTauntPrimary + } +//============================================================================================================ + + +// Scout +//------------------------------------------------------------------------------------------------------------ + response "ScoutTauntPrimary" + { + scene "scenes/player/scout/low/taunt01_vocal01.vcd" + scene "scenes/player/scout/low/taunt01_vocal02.vcd" + scene "scenes/player/scout/low/taunt01_vocal03.vcd" + } + response "ScoutTauntSecondary" + { + scene "scenes/player/scout/low/taunt02_vocal01.vcd" + scene "scenes/player/scout/low/taunt02_vocal02.vcd" + scene "scenes/player/scout/low/taunt02_vocal03.vcd" + } + response "ScoutTauntMelee" + { + scene "scenes/player/scout/low/taunt03_vocal01.vcd" + scene "scenes/player/scout/low/taunt03_vocal02.vcd" + scene "scenes/player/scout/low/taunt03_vocal03.vcd" + scene "scenes/player/scout/low/taunt03_vocal04.vcd" + scene "scenes/player/scout/low/taunt03_vocal05.vcd" + scene "scenes/player/scout/low/taunt03_vocal06.vcd" + } + response "ScoutTauntGrandSlam" + { + scene "scenes/player/scout/low/taunt05_v1.vcd" + } + response "ScoutTauntPrimaryDouble" + { + scene "scenes/player/scout/low/taunt01_alt_vocal01.vcd" + scene "scenes/player/scout/low/taunt01_alt_vocal02.vcd" + scene "scenes/player/scout/low/taunt01_alt_vocal03.vcd" + } + response "ScoutTauntHalloween" + { + scene "scenes/player/scout/low/taunt06_v1.vcd" + } + response "ScoutTauntPlayerItem1" + { + scene "scenes/player/scout/low/taunt04_v1.vcd" + } + + rule ScoutTauntPlayerItem1 + { + criteria ConceptPlayerTaunt IsScout WeaponIsLunchboxDrink + ApplyContext "ScoutIsCrit:1:3" // The crit context is set here. You can't fire while using BONK! so we can share the rule/response. + response ScoutTauntPlayerItem1 + } + rule ScoutTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsScout WeaponIsScattergun + response ScoutTauntPrimary + } + rule ScoutTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsScout WeaponIsPistolScout + response ScoutTauntSecondary + } + rule ScoutTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsScout WeaponIsBat + response ScoutTauntMelee + } + rule ScoutTauntWoodBat + { + criteria ConceptPlayerTaunt IsScout WeaponIsWoodBat + response ScoutTauntGrandSlam + } + rule ScoutTauntAtomizer + { + criteria ConceptPlayerTaunt IsScout WeaponIsAtomizer + response ScoutTauntGrandSlam + } + rule ScoutTauntScattergunDouble + { + criteria ConceptPlayerTaunt IsScout WeaponIsScattergunDouble + response ScoutTauntPrimaryDouble + } + rule ScoutTauntScattergunDoubleFestive + { + criteria ConceptPlayerTaunt IsScout WeaponIsScattergunDoubleFestive + response ScoutTauntPrimaryDouble + } + rule ScoutTauntSodaPopper + { + criteria ConceptPlayerTaunt IsScout WeaponIsSodaPopper + response ScoutTauntPrimaryDouble + } + rule ScoutTauntShortstop + { + criteria ConceptPlayerTaunt IsScout WeaponIsShortstop + response ScoutTauntSecondary + } + rule ScoutTauntPEPBrawlerBlaster + { + criteria ConceptPlayerTaunt IsScout WeaponIsPEPBrawlerBlaster + response ScoutTauntPrimaryDouble + } + rule ScoutTauntHandgunScoutSecondary + { + criteria ConceptPlayerTaunt IsScout WeaponIsHandgunScoutSecondary + response ScoutTauntSecondary + } + rule ScoutTauntMadMilk + { + criteria ConceptPlayerTaunt IsScout WeaponIsMadMilk + response ScoutTauntSecondary + } + rule ScoutTauntSDCleaver + { + criteria ConceptPlayerTaunt IsScout WeaponIsSDCleaver + response ScoutTauntSecondary + } + rule ScoutTauntHolyMackerel + { + criteria ConceptPlayerTaunt IsScout WeaponIsHolyMackerel + response ScoutTauntMelee + } + rule ScoutTauntFestiveHolyMackerel + { + criteria ConceptPlayerTaunt IsScout WeaponIsFestiveHolyMackerel + response ScoutTauntMelee + } + + rule ScoutTauntUnarmedCombat + { + criteria ConceptPlayerTaunt IsScout WeaponIsUnarmedCombat + response ScoutTauntMelee + } + rule ScoutTauntHalloween + { + criteria ConceptPlayerTaunt IsScout IsHalloweenTaunt + response ScoutTauntHalloween + } + + Response PlayerExpressionIdleScout + { + scene "scenes/player/scout/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleScout + { + criteria ConceptPlayerExpression IsScout + Response PlayerExpressionIdleScout + } + + Response PlayerExpressionIdleCompWinnerScout + { + scene "scenes/player/scout/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerScout + { + criteria ConceptPlayerExpression IsScout IsCompWinner + Response PlayerExpressionIdleCompWinnerScout + } + + Response PlayerExpressionIdleHurtScout + { + scene "scenes/player/scout/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtScout + { + criteria ConceptPlayerExpression IsScout LowHealthContext + Response PlayerExpressionIdleHurtScout + } + Rule PlayerExpressionRoundLossScout + { + criteria ConceptPlayerExpression IsScout GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtScout + } + + Response PlayerExpressionAttackScout + { + scene "scenes/player/scout/low/attack01.vcd" + } + Rule PlayerExpressionAttackScout + { + criteria ConceptFireWeapon IsScout + ApplyContext "ScoutFired:1:7" // Apply the ScoutFired context, to allow Scouts to say double jump lines + Response PlayerExpressionAttackScout + } + rule ScoutTauntMutatedMilk + { + criteria ConceptPlayerTaunt IsScout WeaponIsMutatedMilk + response ScoutTauntSecondary + } + //-------------------------------------------------------------------------------------------------------------- + // Auto Speech Drink + //-------------------------------------------------------------------------------------------------------------- + Response ScoutPostDrinkTired + { + scene "scenes/player/scout/low/dodgetired.vcd" + + + } + Rule ScoutPostDrinkTired + { + criteria ConceptTired IsScout + Response ScoutPostDrinkTired + } + + Rule ScoutTauntWrapAssassin + { + criteria ConceptPlayerTaunt IsScout WeaponIsWrapAssassin + response ScoutTauntMelee + } + + +//============================================================================================================ + + +// Sniper +//------------------------------------------------------------------------------------------------------------ + response "SniperTauntPrimary" + { + scene "scenes/player/sniper/low/taunt01_v1.vcd" + scene "scenes/player/sniper/low/taunt01_v2.vcd" + scene "scenes/player/sniper/low/taunt01_v3.vcd" + scene "scenes/player/sniper/low/taunt01_v4.vcd" + scene "scenes/player/sniper/low/taunt01_v5.vcd" + } + response "SniperTauntSecondary" + { + scene "scenes/player/sniper/low/taunt02_v1.vcd" + scene "scenes/player/sniper/low/taunt02_v2.vcd" + } + response "SniperTauntMelee" + { + scene "scenes/player/sniper/low/taunt03_v1.vcd" + scene "scenes/player/sniper/low/taunt03_v2.vcd" + scene "scenes/player/sniper/low/taunt03_v3.vcd" + scene "scenes/player/sniper/low/taunt03_v4.vcd" + } + response "SniperTauntSaxxy" + { + scene "scenes/player/sniper/low/taunt03_v1.vcd" + scene "scenes/player/sniper/low/taunt03_v3.vcd" + } + response "SniperTauntBow" + { + scene "scenes/player/sniper/low/taunt04.vcd" + } + response "SniperTauntHalloween" + { + scene "scenes/player/sniper/low/taunt06.vcd" + } + + rule SniperTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsSniper WeaponIsSniperrifle + response SniperTauntPrimary + } + rule SniperTauntPlayerPrimaryClassic + { + criteria ConceptPlayerTaunt IsSniper WeaponIsClassicSniperrifle + response SniperTauntPrimary + } + rule SniperTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsSniper WeaponIsSMG + response SniperTauntSecondary + } + rule SniperTauntPlayerChargedSecondary + { + criteria ConceptPlayerTaunt IsSniper WeaponIsChargedSMG + response SniperTauntSecondary + } + rule SniperTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsSniper WeaponIsClub + response SniperTauntMelee + } + rule SniperTauntPlayerBazaarBargain + { + criteria ConceptPlayerTaunt IsSniper WeaponIsBazaarBargain + response SniperTauntPrimary + } + rule SniperTauntPlayerBow + { + criteria ConceptPlayerTaunt IsSniper WeaponIsBow + response SniperTauntBow + } + rule SniperTauntHalloween + { + criteria ConceptPlayerTaunt IsSniper IsHalloweenTaunt + response SniperTauntHalloween + } + rule SniperTauntSaxxy + { + criteria ConceptPlayerTaunt IsSniper WeaponIsSaxxy + response SniperTauntSaxxy + } + + Response PlayerExpressionIdleSniper + { + scene "scenes/player/sniper/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleSniper + { + criteria ConceptPlayerExpression IsSniper + Response PlayerExpressionIdleSniper + } + Response PlayerExpressionIdleCompWinnerSniper + { + scene "scenes/player/sniper/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerSniper + { + criteria ConceptPlayerExpression IsSniper IsCompWinner + Response PlayerExpressionIdleCompWinnerSniper + } + response PlayerExpressionIdleDeployedSniper + { + scene "scenes/player/sniper/low/idleloopDeployed01.vcd" + } + rule PlayerExpressionIdleDeployedSniper + { + criteria ConceptPlayerExpression IsSniper DeployedContext WeaponIsSniperrifle + response PlayerExpressionIdleDeployedSniper + } + rule PlayerExpressionIdleDeployedSniperClassic + { + criteria ConceptPlayerExpression IsSniper DeployedContext WeaponIsClassicSniperrifle + response PlayerExpressionIdleDeployedSniper + } + Response PlayerExpressionIdleHurtSniper + { + scene "scenes/player/sniper/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtSniper + { + criteria ConceptPlayerExpression IsSniper LowHealthContext + Response PlayerExpressionIdleHurtSniper + } + Rule PlayerExpressionRoundLossSniper + { + criteria ConceptPlayerExpression IsSniper GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtSniper + } + + Response PlayerExpressionAttackSniper + { + scene "scenes/player/sniper/low/attack01.vcd" + } + Rule PlayerExpressionAttackSniper + { + criteria ConceptFireWeapon IsSniper + Response PlayerExpressionAttackSniper + } + + +//============================================================================================================ + + +// Spy +//------------------------------------------------------------------------------------------------------------ + response "SpyTauntPrimary" + { + scene "scenes/player/spy/low/taunt01_v1.vcd" + scene "scenes/player/spy/low/taunt01_v2.vcd" + scene "scenes/player/spy/low/taunt01_v3.vcd" + scene "scenes/player/spy/low/taunt01_v4.vcd" + scene "scenes/player/spy/low/taunt01_v5.vcd" + } + response "SpyTauntSecondary" + { + scene "scenes/player/spy/low/taunt02.vcd" + } + response "SpyTauntMelee" + { + scene "scenes/player/spy/low/taunt03_v1.vcd" + scene "scenes/player/spy/low/taunt03_v2.vcd" + } + response "SpyTauntPDA" + { + scene "scenes/player/spy/low/taunt04_v1.vcd" + scene "scenes/player/spy/low/taunt04_v2.vcd" + scene "scenes/player/spy/low/taunt04_v3.vcd" + scene "scenes/player/spy/low/taunt04_v4.vcd" + scene "scenes/player/spy/low/taunt04_v5.vcd" + scene "scenes/player/spy/low/taunt05.vcd" + } + response "SpyTauntHalloween" + { + scene "scenes/player/spy/low/taunt06.vcd" + } + + rule SpyTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsSpy WeaponIsRevolver + response SpyTauntPrimary + } + rule SpyTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsSpy WeaponIsBuild + response SpyTauntSecondary + } + rule SpyTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsSpy WeaponIsKnife + response SpyTauntMelee + } + rule SpyTauntPlayerPDA + { + criteria ConceptPlayerTaunt IsSpy WeaponIsSpyPDA + response SpyTauntPDA + } + rule SpyTauntHalloween + { + criteria ConceptPlayerTaunt IsSpy IsHalloweenTaunt + response SpyTauntHalloween + } + rule SpyTauntSharpDresser + { + criteria ConceptPlayerTaunt IsSpy WeaponIsSharpDresser + response SpyTauntSecondary + } + + Response PlayerExpressionIdleSpy + { + scene "scenes/player/spy/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleSpy + { + criteria ConceptPlayerExpression IsSpy + Response PlayerExpressionIdleSpy + } + + Response PlayerExpressionIdleCompWinnerSpy + { + scene "scenes/player/spy/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerSpy + { + criteria ConceptPlayerExpression IsSpy IsCompWinner + Response PlayerExpressionIdleCompWinnerSpy + } + + Response PlayerExpressionAttackSpy + { + scene "scenes/player/spy/low/attack01.vcd" + } + Rule PlayerExpressionAttackSpy + { + criteria ConceptFireWeapon IsSpy + Response PlayerExpressionAttackSpy + } + + Response "SpyTauntSpycicle" + { + scene "scenes/player/spy/low/taunt01_v1.vcd" + scene "scenes/player/spy/low/taunt01_v2.vcd" + scene "scenes/player/spy/low/taunt01_v3.vcd" + scene "scenes/player/spy/low/taunt01_v4.vcd" + scene "scenes/player/spy/low/taunt01_v5.vcd" + } + Rule SpyTauntSpycicle + { + criteria ConceptPlayerTaunt IsSpy WeaponIsSpycicle + response SpyTauntSpycicle + } + +//============================================================================================================ + + +// Demoman +//------------------------------------------------------------------------------------------------------------ + response "DemomanTauntPrimary" + { + scene "scenes/player/demoman/low/taunt01.vcd" + } + response "DemomanTauntSecondary" + { + scene "scenes/player/demoman/low/taunt02.vcd" + + } + response "DemomanTauntMelee" + { + scene "scenes/player/demoman/low/taunt03_v1.vcd" + scene "scenes/player/demoman/low/taunt03_v2.vcd" + scene "scenes/player/demoman/low/taunt03_v3.vcd" + } + response "DemomanTauntHalloween" + { + scene "scenes/player/demoman/low/taunt06.vcd" + } + response "DemomanTauntWolfHowl" + { + scene "scenes/player/demoman/low/taunt11.vcd" + } + response "DemomanTauntDefender" + { + scene "scenes/player/demoman/low/taunt08.vcd" + } + response "DemomanTauntSword" + { + scene "scenes/player/demoman/low/taunt09.vcd" + } + // Custom stuff + response "DemomanTauntCaber" + { + scene "scenes/player/demoman/low/taunt04_v1.vcd" + scene "scenes/player/demoman/low/taunt04_v2.vcd" + } + // Ullapool Caber taunt - from unused Bottle taunt. + + rule DemomanTauntDefender + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsDefender + response DemomanTauntDefender + } + rule DemomanTauntPlayerPrimary + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsPipebomb + response DemomanTauntPrimary + } + rule DemomanTauntPlayerSecondary + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsGrenade + response DemomanTauntSecondary + } + rule DemomanTauntPlayerMelee + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsBottle + ApplyContext "NotSober:1:10" // Apply the drunk context here + response DemomanTauntMelee + } + rule DemomanTauntPlayerScotsmansSkullcutter + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsScotsmansSkullcutter + response DemomanTauntSecondary + } + rule DemomanTauntHalloween + { + criteria ConceptPlayerTaunt IsDemoman IsHalloweenTaunt + response DemomanTauntHalloween + } + rule DemomanTauntWolfHowl + { + criteria ConceptPlayerTaunt IsDemoman IsDemowolf + response DemomanTauntWolfHowl + } + + rule DemomanTauntSword + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsSword WeaponIsNotAxe // Modified to exclude Skullcutter. + response DemomanTauntSword + } + rule DemomanTauntKatana + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsKatana + response DemomanTauntSword + } + // Custom Stuff + rule DemomanTauntCaber + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsCaber + response DemomanTauntCaber + } + Rule DemomanTauntSaxxy + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsSaxxy + Response DemomanTauntSecondary + } + Rule DemomanTauntPainTrain + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsPainTrain + Response DemomanTauntSecondary + } + + Response PlayerExpressionIdleDemoman + { + scene "scenes/player/demoman/low/idleloop01.vcd" + } + Rule PlayerExpressionIdleDemoman + { + criteria ConceptPlayerExpression IsDemoman + Response PlayerExpressionIdleDemoman + } + + Response PlayerExpressionIdleCompWinnerDemoman + { + scene "scenes/player/demoman/low/comp_winner_idle_face.vcd" + } + Rule PlayerExpressionIdleCompWinnerDemoman + { + criteria ConceptPlayerExpression IsDemoman IsCompWinner + Response PlayerExpressionIdleCompWinnerDemoman + } + + Response PlayerExpressionIdleHurtDemoman + { + scene "scenes/player/demoman/low/idleloopHurt01.vcd" + } + Rule PlayerExpressionIdleHurtDemoman + { + criteria ConceptPlayerExpression IsDemoman LowHealthContext + Response PlayerExpressionIdleHurtDemoman + } + Rule PlayerExpressionRoundLossDemoman + { + criteria ConceptPlayerExpression IsDemoman GameRulesInWinState PlayerOnLosingTeam + Response PlayerExpressionIdleHurtDemoman + } + + Response PlayerExpressionAttackDemoman + { + scene "scenes/player/demoman/low/attack01.vcd" + } + Rule PlayerExpressionAttackDemoman + { + criteria ConceptFireWeapon IsDemoman + Response PlayerExpressionAttackDemoman + } + rule DemomanTauntLooseCannon + { + criteria ConceptPlayerTaunt IsDemoman WeaponIsLooseCannon + response DemomanTauntSecondary + } + +//============================================================================================================ +// Taunt2 Responses based on items that are in the Action slot + + Response PlayerTaunt2_TestTauntEnabler_IsScout + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsScout + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsScout + response PlayerTaunt2_TestTauntEnabler_IsScout + } + Response PlayerTaunt2_TestTauntEnabler_IsSniper + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsSniper + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsSniper + response PlayerTaunt2_TestTauntEnabler_IsSniper + } + Response PlayerTaunt2_TestTauntEnabler_IsSoldier + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsSoldier + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsSoldier + response PlayerTaunt2_TestTauntEnabler_IsSoldier + } + Response PlayerTaunt2_TestTauntEnabler_IsDemoman + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsDemoman + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsDemoman + response PlayerTaunt2_TestTauntEnabler_IsDemoman + } + Response PlayerTaunt2_TestTauntEnabler_IsMedic + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsMedic + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsMedic + response PlayerTaunt2_TestTauntEnabler_IsMedic + } + Response PlayerTaunt2_TestTauntEnabler_IsHeavy + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsHeavy + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsHeavy + response PlayerTaunt2_TestTauntEnabler_IsHeavy + } + Response PlayerTaunt2_TestTauntEnabler_IsPyro + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsPyro + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsPyro + response PlayerTaunt2_TestTauntEnabler_IsPyro + } + Response PlayerTaunt2_TestTauntEnabler_IsSpy + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsSpy + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsSpy + response PlayerTaunt2_TestTauntEnabler_IsSpy + } + Response PlayerTaunt2_TestTauntEnabler_IsEngineer + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PlayerTaunt2_TestTauntEnabler_IsEngineer + { + criteria ConceptPlayerTaunt2 HasTaunt2Item_TauntEnablerTest IsEngineer + response PlayerTaunt2_TestTauntEnabler_IsEngineer + } + +//============================================================================================================ +// "Show off an Item" Responses + + Response ScoutShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule ScoutShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsScout + response ScoutShowItemTauntResponse + } + + Response SniperShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule SniperShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsSniper + response SniperShowItemTauntResponse + } + + Response SoldierShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule SoldierShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsSoldier + response SoldierShowItemTauntResponse + } + + Response DemomanShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule DemomanShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsDemoman + response DemomanShowItemTauntResponse + } + + Response MedicShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule MedicShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsMedic + response MedicShowItemTauntResponse + } + + Response HeavyShowItemTauntResponse + { + scene "scenes/player/heavy/high/show1.vcd" + } + Rule HeavyShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsHeavy + response HeavyShowItemTauntResponse + } + + Response PyroShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule PyroShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsPyro + response PyroShowItemTauntResponse + } + + Response SpyShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule SpyShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsSpy + response SpyShowItemTauntResponse + } + + Response ScoutShowItemTauntResponse + { + scene "scenes/player/pyro/low/taunt_highfiveSuccess.vcd" + } + Rule ScoutShowItemTaunt + { + criteria ConceptPlayerShowItemTaunt IsScout + response ScoutShowItemTauntResponse + } + +//============================================================================================================ +// "Replay Taunt" Responses + + response "PyroTauntReplay" + { + scene "scenes/player/pyro/low/taunt_replay.vcd" + scene "scenes/player/pyro/low/taunt_replay2.vcd" + } + rule PyroTauntReplay + { + criteria ConceptTauntReplay IsPyro + response PyroTauntReplay + } + + response "ScoutTauntReplay" + { + scene "scenes/player/scout/low/taunt_replay.vcd" + } + rule ScoutTauntReplay + { + criteria ConceptTauntReplay IsScout + response ScoutTauntReplay + } + + response "SoldierTauntReplay" + { + scene "scenes/player/soldier/low/taunt_replay.vcd" + } + rule SoldierTauntReplay + { + criteria ConceptTauntReplay IsSoldier + response SoldierTauntReplay + } + + response "SniperTauntReplay" + { + scene "scenes/player/sniper/low/taunt_replay.vcd" + } + rule SniperTauntReplay + { + criteria ConceptTauntReplay IsSniper + response SniperTauntReplay + } + + response "DemomanTauntReplay" + { + scene "scenes/player/demoman/low/taunt_replay.vcd" + } + rule DemomanTauntReplay + { + criteria ConceptTauntReplay IsDemoman + response DemomanTauntReplay + } + + response "MedicTauntReplay" + { + scene "scenes/player/medic/low/taunt_replay.vcd" + } + rule MedicTauntReplay + { + criteria ConceptTauntReplay IsMedic + response MedicTauntReplay + } + + response "HeavyTauntReplay" + { + scene "scenes/player/heavy/low/taunt_replay.vcd" + } + rule HeavyTauntReplay + { + criteria ConceptTauntReplay IsHeavy + response HeavyTauntReplay + } + + response "SpyTauntReplay" + { + scene "scenes/player/spy/low/taunt_replay.vcd" + } + rule SpyTauntReplay + { + criteria ConceptTauntReplay IsSpy + response SpyTauntReplay + } + + response "EngineerTauntReplay" + { + scene "scenes/player/engineer/low/taunt_replay.vcd" + } + rule EngineerTauntReplay + { + criteria ConceptTauntReplay IsEngineer + response EngineerTauntReplay + } + + response "MedicTauntLaugh" + { + scene "scenes/player/medic/low/taunt_laugh.vcd" + } + rule MedicTauntLaugh + { + criteria ConceptTauntLaugh IsMedic + response MedicTauntLaugh + } + + response "HeavyTauntLaugh" + { + scene "scenes/player/heavy/low/taunt_laugh.vcd" + } + rule HeavyTauntLaugh + { + criteria ConceptTauntLaugh IsHeavy + response HeavyTauntLaugh + } + + response "DemomanTauntLaugh" + { + scene "scenes/player/demoman/low/taunt_laugh.vcd" + } + rule DemomanTauntLaugh + { + criteria ConceptTauntLaugh IsDemoman + response DemomanTauntLaugh + } + + response "SpyTauntLaugh" + { + scene "scenes/player/spy/low/taunt_laugh.vcd" + } + rule SpyTauntLaugh + { + criteria ConceptTauntLaugh IsSpy + response SpyTauntLaugh + } + + response "SniperTauntLaugh" + { + scene "scenes/player/Sniper/low/taunt_laugh.vcd" + } + rule SniperTauntLaugh + { + criteria ConceptTauntLaugh IsSniper + response SniperTauntLaugh + } + + response "SoldierTauntLaugh" + { + scene "scenes/player/Soldier/low/taunt_laugh.vcd" + } + rule SoldierTauntLaugh + { + criteria ConceptTauntLaugh IsSoldier + response SoldierTauntLaugh + } + + response "ScoutTauntLaugh" + { + scene "scenes/player/Scout/low/taunt_laugh.vcd" + } + rule ScoutTauntLaugh + { + criteria ConceptTauntLaugh IsScout + response ScoutTauntLaugh + } + + response "EngineerTauntLaugh" + { + scene "scenes/player/Engineer/low/taunt_laugh.vcd" + } + rule EngineerTauntLaugh + { + criteria ConceptTauntLaugh IsEngineer + response EngineerTauntLaugh + } + + response "PyroTauntLaugh" + { + scene "scenes/player/pyro/low/taunt_laugh.vcd" + } + rule PyroTauntLaugh + { + criteria ConceptTauntLaugh IsPyro + response PyroTauntLaugh + } + + response "MedicTauntHeroicPose" + { + scene "scenes/player/medic/low/taunt09.vcd" + } + rule MedicTauntHeroicPose + { + criteria ConceptTauntHeroicPose IsMedic + response MedicTauntHeroicPose + } + + response "PyroTauntArmageddon" + { + scene "scenes/player/pyro/low/taunt_laugh.vcd" + } + rule PyroTauntArmageddon + { + criteria ConceptTauntPyroArmageddon IsPyro + response PyroTauntArmageddon + } + + response "ScoutTauntGuitarRiff" + { + scene "scenes/player/scout/low/taunt_brutalLegend.vcd" + } + rule ScoutTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsScout + response ScoutTauntGuitarRiff + } + + response "SoldierTauntGuitarRiff" + { + scene "scenes/player/soldier/low/taunt_brutalLegend.vcd" + } + rule SoldierTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsSoldier + response SoldierTauntGuitarRiff + } + + response "PyroTauntGuitarRiff" + { + scene "scenes/player/pyro/low/taunt_brutalLegend.vcd" + } + rule PyroTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsPyro + response PyroTauntGuitarRiff + } + + response "DemomanTauntGuitarRiff" + { + scene "scenes/player/demoman/low/taunt_brutalLegend.vcd" + } + rule DemomanTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsDemoman + response DemomanTauntGuitarRiff + } + + response "HeavyTauntGuitarRiff" + { + scene "scenes/player/heavy/low/taunt_brutalLegend.vcd" + } + rule HeavyTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsHeavy + response HeavyTauntGuitarRiff + } + + response "EngineerTauntGuitarRiff" + { + scene "scenes/player/engineer/low/taunt_brutalLegend.vcd" + } + rule EngineerTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsEngineer + response EngineerTauntGuitarRiff + } + + response "MedicTauntGuitarRiff" + { + scene "scenes/player/medic/low/taunt_brutalLegend.vcd" + } + rule MedicTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsMedic + response MedicTauntGuitarRiff + } + + response "SniperTauntGuitarRiff" + { + scene "scenes/player/sniper/low/taunt_brutalLegend.vcd" + } + rule SniperTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsSniper + response SniperTauntGuitarRiff + } + + response "SpyTauntGuitarRiff" + { + scene "scenes/player/spy/low/taunt_brutalLegend.vcd" + } + rule SpyTauntGuitarRiff + { + criteria ConceptTauntGuitarRiff IsSpy + response SpyTauntGuitarRiff + } + + +// APRIL FOOLS RESPONSE RULES + + rule ScoutTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsScout + response ScoutTauntLaugh + } + + rule SoldierTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsSoldier + response SoldierTauntLaugh + } + + rule PyroTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsPyro + response PyroTauntLaugh + } + + rule DemomanTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsDemoman + response DemomanTauntLaugh + } + + rule HeavyTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsHeavy + response HeavyTauntLaugh + } + + rule EngineerTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsEngineer + response EngineerTauntLaugh + } + + rule MedicTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsMedic + response MedicTauntLaugh + } + + rule SniperTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsSniper + response SniperTauntLaugh + } + + rule SpyTauntAprilFools + { + criteria ConceptPlayerTaunt IsAprilFoolsTaunt IsSpy + response SpyTauntLaugh + } + +//============================================================================================================ From 05c1a9e2045c2620574e3f87593d02cb0109a509 Mon Sep 17 00:00:00 2001 From: Ashetf2 <63692647+Ashetf2@users.noreply.github.com> Date: Fri, 28 Feb 2025 00:25:14 -0500 Subject: [PATCH 3/4] Update response_rules.txt --- game/tc2/scripts/talker/response_rules.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/game/tc2/scripts/talker/response_rules.txt b/game/tc2/scripts/talker/response_rules.txt index 509d9d115ef..44e0266c007 100644 --- a/game/tc2/scripts/talker/response_rules.txt +++ b/game/tc2/scripts/talker/response_rules.txt @@ -554,6 +554,8 @@ criterion "TimeFiringMinigunReallyLong" "minigunfiretime" ">15.0" required criterion "ConceptFireMinigunTalk" "Concept" "TLK_MINIGUN_FIREWEAPON" "required" Criterion "NotDefendOnThePointSpeech" "worldDefendOnThePointSpeech" "!=1" "required" weight 0 +criterion "SpecialTauntWeaponDeployed" "SpecialTauntWeaponDeployed" "!=1" "required" weight 100 + criterion "IsAprilFoolsTaunt" "IsAprilFoolsTaunt" "1" "required" weight 100 criterion "IsHalloweenTaunt" "IsHalloweenTaunt" "1" "required" weight 100 criterion "IsRobotCostume" "IsRobotCostume" "1" "required" weight 100 From ca28f96352696569ff7065a6ea6c9ce9193f441b Mon Sep 17 00:00:00 2001 From: Ashetf2 <63692647+Ashetf2@users.noreply.github.com> Date: Fri, 28 Feb 2025 00:26:21 -0500 Subject: [PATCH 4/4] Update tf.txt --- game/tc2/scripts/talker/tf.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/game/tc2/scripts/talker/tf.txt b/game/tc2/scripts/talker/tf.txt index 03a46478b8b..625dfae94d6 100644 --- a/game/tc2/scripts/talker/tf.txt +++ b/game/tc2/scripts/talker/tf.txt @@ -256,7 +256,7 @@ } rule HeavyTauntFrankenHeavy { - criteria ConceptPlayerTaunt IsHeavy IsFrankenHeavy + criteria ConceptPlayerTaunt IsHeavy IsFrankenHeavy SpecialTauntWeaponDeployed response HeavyTauntFrankenHeavy } @@ -756,7 +756,7 @@ } rule SoldierTauntRobot { - criteria ConceptPlayerTaunt IsSoldier IsRobotCostume + criteria ConceptPlayerTaunt IsSoldier IsRobotCostume SpecialTauntWeaponDeployed response SoldierTauntRobot } rule SoldierTauntEqualizer @@ -1408,7 +1408,7 @@ } rule DemomanTauntWolfHowl { - criteria ConceptPlayerTaunt IsDemoman IsDemowolf + criteria ConceptPlayerTaunt IsDemoman IsDemowolf SpecialTauntWeaponDeployed response DemomanTauntWolfHowl }