// 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 <enumerationname>
// { 
//		"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 <responsegroupname> [nodelay | defaultdelay | delay interval ] [speakonce] [noscene] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] responsetype parameters
// Multiple lines
// response <responsegroupname>
// {
//		[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 <criterionname> <matchkey> <matchvalue> 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 <rulename>
// {
//    criteria name1 [name2 name3 etc.]
//    response responsegroupname [responsegroupname2 etc.]
//    [matchonce]					; optional parameter
//	  [ <matchkey > <matchvalue> 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"

