First version of the SOurce SDK 2013

This commit is contained in:
Joe Ludwig
2013-06-26 15:22:04 -07:00
commit 39ed87570b
7469 changed files with 3312656 additions and 0 deletions

View File

@@ -0,0 +1,133 @@
//============================================================================================================
// Alyx criteria
criterion "IsAlyx" "classname" "npc_alyx" "required"
//============================================================================================================
//============================================================================================================
// Alyx Combat speech
//============================================================================================================
//----------------------------------------------------------------------------
criterion "ConceptTalkFoundPlayer" "Concept" "TLK_FOUNDPLAYER" required
response "AlyxIsBack"
{
// speak "*vo/episode_1/npc/alyx/al_greet_cit15.wav" // I'm the person who's telling you to get moving.
}
rule AlyxIsBack
{
criteria IsAlyx IsEpisodic ConceptTalkFoundPlayer
response AlyxIsBack
}
response "AlyxDanger"
{
scene "scenes/npc/Alyx/getback01.vcd" respeakdelay 60
scene "scenes/npc/Alyx/getback02.vcd" respeakdelay 60
// scene "scenes/npc/Alyx/watchout01.vcd" WATCH OUT!!!
// scene "scenes/npc/Alyx/watchout02.vcd" WATCH OUT!!!
}
rule AlyxDanger
{
criteria IsAlyx ConceptTalkDanger
response AlyxDanger
}
response AlyxShot
{
scene "scenes/npc/Alyx/gasp02.vcd"
scene "scenes/npc/Alyx/gasp03.vcd"
scene "scenes/npc/Alyx/hurt04.vcd"
scene "scenes/npc/Alyx/hurt05.vcd"
scene "scenes/npc/Alyx/hurt06.vcd"
scene "scenes/npc/Alyx/hurt08.vcd"
scene "scenes/npc/Alyx/uggh01.vcd"
}
rule AlyxShot
{
criteria IsAlyx ConceptShot
response AlyxShot
}
response AlyxEnemyDead
{
// scene "scenes/npc/Alyx/brutal02.vcd" respeakdelay 300
}
rule AlyxEnemyDead
{
criteria IsAlyx ConceptEnemyDead
response AlyxEnemyDead
}
response AlyxHideAndReload
{
// scene "scenes/npc/Alyx/coverme01.vcd"
// scene "scenes/npc/Alyx/coverme02.vcd"
// scene "scenes/npc/Alyx/coverme03.vcd"
}
rule AlyxHideAndReload
{
criteria IsAlyx ConceptHideAndReload PlayerNear
response AlyxHideAndReload
}
response AlyxTalkPlayerPushed
{
// scene "scenes/npc/Alyx/excuseme01.vcd"
// scene "scenes/npc/Alyx/excuseme02.vcd"
// scene "scenes/npc/Alyx/excuseme03.vcd"
}
rule AlyxTalkPlayerPushed
{
criteria IsAlyx ConceptTalkPlayerPushed SeenByPlayer NoRecentCombat
response AlyxTalkPlayerPushed
}
// Removed - if okay, can just be deleted
//response AlyxPlayerReload
//{
// scene "scenes/npc/Alyx/youreload01.vcd"
// scene "scenes/npc/Alyx/youreload02.vcd"
//}
//
//rule AlyxPlayerReload
//{
// criteria ConceptPlayerReload IsAlyx PlayerNear SeePlayer
// response AlyxPlayerReload
//}
response AlyxWatchOut
{
scene "scenes/npc/Alyx/lookout01.vcd"
scene "scenes/npc/Alyx/lookout03.vcd"
}
rule AlyxWatchOut
{
criteria IsAlyx ConceptTalkWatchout
response AlyxWatchout
}
response AlyxPlayerDead
{
scene "scenes/npc/Alyx/ohno_startle01.vcd"
scene "scenes/npc/Alyx/ohno_startle02.vcd"
scene "scenes/npc/Alyx/ohno_startle03.vcd"
}
rule AlyxPlayerDead
{
criteria IsAlyx ConceptPlayerDead
response AlyxWatchout
matchonce
}
//----------------------------------------------------------------------------
//============================================================================================================

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,484 @@
//============================================================================================================
// Commander mode criteria
//============================================================================================================
criterion "IsOnlySelected" "numselected" "1" required
criterion "NotOnlySelected" "numselected" ">1" required
criterion "Is_03_first" "name" "citizen_c17_03_first" required
criterion "UseRadio" "useradio" "1" required
criterion "SquadNearPlayer" "distancetoplayer" "<240" required
criterion "SquadNotNearPlayer" "distancetoplayer" ">=240" required
criterion "SquadNearCommandPoint" "commandpoint_dist_to_npc" "<240" required
criterion "SquadNotNearCommandPoint" "commandpoint_dist_to_npc" ">=240" required
criterion "CommandPointNearPlayer" "commandpoint_dist_to_player" "<144" required
criterion "CommandPointNotNearPlayer" "commandpoint_dist_to_player" ">=144" required
criterion "JoinSquadIndividual" "numjoining" "1" required
criterion "JoinSquadMultiple" "numjoining" ">1" required
criterion "TrailingReinforcement" "reinforcement" "1" required
//============================================================================================================
// Commander mode selection speech
//============================================================================================================
response "CitizenSelected"
{
scene "scenes/npc/$gender01/ok01.vcd"
scene "scenes/npc/$gender01/ok02.vcd"
scene "scenes/npc/$gender01/okimready01.vcd"
scene "scenes/npc/$gender01/okimready02.vcd"
scene "scenes/npc/$gender01/okimready03.vcd"
scene "scenes/npc/$gender01/readywhenyouare01.vcd"
scene "scenes/npc/$gender01/readywhenyouare02.vcd"
}
rule CitizenSelected
{
criteria IsCitizen ConceptTalkSelected
response CitizenSelected
}
//------------------------------------------------------------------------------------------------------------
response "CitizenGroupSelectedRadio"
{
}
rule CitizenGroupSelectedRadio
{
criteria IsCitizen ConceptTalkSelected NotOnlySelected UseRadio
response CitizenGroupSelectedRadio
}
//------------------------------------------------------------------------------------------------------------
response "CitizenSoloSelectedRadio"
{
}
rule CitizenSoloSelectedRadio
{
criteria IsCitizen ConceptTalkSelected UseRadio
response CitizenSoloSelectedRadio
}
//============================================================================================================
// Commander mode orders speech
//============================================================================================================
response CitizenSquadNearToFarIndividual
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm04.vcd"
scene "scenes/npc/$gender01/squad_affirm05.vcd"
scene "scenes/npc/$gender01/squad_affirm06.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm04"
// speak "npc_citizen.squad_affirm05"
// speak "npc_citizen.squad_affirm06"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
scene "scenes/npc/$gender01/letsgo01.vcd"
scene "scenes/npc/$gender01/letsgo02.vcd"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadNearToFarGroup
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm05.vcd"
scene "scenes/npc/$gender01/squad_affirm06.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
scene "scenes/npc/$gender01/squad_away01.vcd"
scene "scenes/npc/$gender01/squad_away02.vcd"
scene "scenes/npc/$gender01/squad_away03.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm05"
// speak "npc_citizen.squad_affirm06"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
// speak "npc_citizen.squad_away01"
// speak "npc_citizen.squad_away02"
// speak "npc_citizen.squad_away03"
scene "scenes/npc/$gender01/letsgo01.vcd"
scene "scenes/npc/$gender01/letsgo02.vcd"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadFarToNearIndividual
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
//scene "scenes/npc/$gender01/squad_approach04.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
// speak "npc_citizen.squad_approach04"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadFarToNearGroup
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
scene "scenes/npc/$gender01/squad_approach01.vcd"
scene "scenes/npc/$gender01/squad_approach02.vcd"
scene "scenes/npc/$gender01/squad_approach03.vcd"
scene "scenes/npc/$gender01/squad_approach04.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
// speak "npc_citizen.squad_approach01"
// speak "npc_citizen.squad_approach02"
// speak "npc_citizen.squad_approach03"
// speak "npc_citizen.squad_approach04"
scene "scenes/npc/$gender01/letsgo01.vcd"
scene "scenes/npc/$gender01/letsgo02.vcd"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadNearToNear
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
scene "scenes/npc/$gender01/illstayhere01.vcd"
scene "scenes/npc/$gender01/holddownspot01.vcd"
scene "scenes/npc/$gender01/holddownspot02.vcd"
scene "scenes/npc/$gender01/imstickinghere01.vcd"
scene "scenes/npc/$gender01/littlecorner01.vcd"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadFarToFarIndividual
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm04.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm04"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadFarToFarGroup
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
scene "scenes/npc/$gender01/squad_away01.vcd"
scene "scenes/npc/$gender01/squad_away02.vcd"
scene "scenes/npc/$gender01/squad_away03.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
// speak "npc_citizen.squad_away01"
// speak "npc_citizen.squad_away02"
// speak "npc_citizen.squad_away03"
scene "scenes/npc/$gender01/letsgo01.vcd"
scene "scenes/npc/$gender01/letsgo02.vcd"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
response CitizenSquadGeneral
{
scene "scenes/npc/$gender01/squad_affirm01.vcd"
scene "scenes/npc/$gender01/squad_affirm02.vcd"
scene "scenes/npc/$gender01/squad_affirm03.vcd"
scene "scenes/npc/$gender01/squad_affirm05.vcd"
scene "scenes/npc/$gender01/squad_affirm06.vcd"
scene "scenes/npc/$gender01/squad_affirm07.vcd"
scene "scenes/npc/$gender01/squad_affirm08.vcd"
scene "scenes/npc/$gender01/squad_affirm09.vcd"
// speak "npc_citizen.squad_affirm01"
// speak "npc_citizen.squad_affirm02"
// speak "npc_citizen.squad_affirm03"
// speak "npc_citizen.squad_affirm05"
// speak "npc_citizen.squad_affirm06"
// speak "npc_citizen.squad_affirm07"
// speak "npc_citizen.squad_affirm08"
// speak "npc_citizen.squad_affirm09"
scene "scenes/npc/$gender01/yougotit02.vcd"
}
rule CitizenCommanded
{
criteria IsCitizen ConceptTalkCommanded
response CitizenSquadGeneral
}
rule CitizenCommandedNearToFarIndividual
{
criteria IsCitizen ConceptTalkCommanded IsOnlySelected SquadNearPlayer CommandPointNotNearPlayer
response CitizenSquadNearToFarIndividual
}
rule CitizenCommandedNearToFarGroup
{
criteria IsCitizen ConceptTalkCommanded NotOnlySelected SquadNearPlayer CommandPointNotNearPlayer
response CitizenSquadNearToFarGroup
}
rule CitizenCommandedFarToNearIndividual
{
criteria IsCitizen ConceptTalkCommanded IsOnlySelected SquadNotNearPlayer CommandPointNearPlayer
response CitizenSquadFarToNearIndividual
}
rule CitizenCommandedFarToNearGroup
{
criteria IsCitizen ConceptTalkCommanded NotOnlySelected SquadNotNearPlayer CommandPointNearPlayer
response CitizenSquadFarToNearGroup
}
rule CitizenCommandedNearToNearIndividual
{
criteria IsCitizen ConceptTalkCommanded SquadNearPlayer CommandPointNearPlayer
response CitizenSquadNearToNear
}
rule CitizenCommandedFarToFarIndividual
{
criteria IsCitizen ConceptTalkCommanded IsOnlySelected SquadNotNearPlayer CommandPointNotNearPlayer
response CitizenSquadFarToFarIndividual
}
rule CitizenCommandedFarToFarGroup
{
criteria IsCitizen ConceptTalkCommanded NotOnlySelected SquadNotNearPlayer CommandPointNotNearPlayer
response CitizenSquadFarToFarGroup
}
//------------------------------------------------------------------------------------------------------------
response "CitizenCommandedRadio"
{
}
rule CitizenCommandedRadio
{
criteria IsCitizen ConceptTalkCommanded UseRadio
response CitizenCommandedRadio
}
//------------------------------------------------------------------------------------------------------------
response "CitizenCommandFailedRadio"
{
}
rule CitizenCommandFailedRadio
{
criteria IsCitizen ConceptTalkCommandFailed UseRadio
response CitizenCommandFailedRadio
}
//============================================================================================================
// Commander mode follow speech
//============================================================================================================
response CitizenFollowGeneral
{
scene "scenes/npc/$gender01/leadtheway01.vcd"
scene "scenes/npc/$gender01/leadtheway02.vcd"
scene "scenes/npc/$gender01/leadon01.vcd"
scene "scenes/npc/$gender01/leadon02.vcd"
}
response CitizenFollowGroup
{
scene "scenes/npc/$gender01/squad_follow01.vcd"
scene "scenes/npc/$gender01/squad_follow02.vcd"
scene "scenes/npc/$gender01/squad_follow03.vcd"
scene "scenes/npc/$gender01/squad_follow04.vcd"
response CitizenFollowGeneral weight 2
}
rule CitizenFollow
{
criteria IsCitizen ConceptTalkStartFollow
response CitizenFollowGeneral
}
rule CitizenFollowGroup
{
criteria IsCitizen ConceptTalkStartFollow NotOnlySelected
response CitizenFollowGroup
}
//============================================================================================================
// Commander mode join speech
//============================================================================================================
// I'm not sure all these lines will play well when not coming up from behind, so I've made a distinction between trailing & non-trailing
response CitizenJoinIndividual
{
scene "scenes/npc/$gender01/squad_reinforce_single01.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single02.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single03.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single04.vcd"
}
response CitizenJoinGroup
{
scene "scenes/npc/$gender01/squad_reinforce_group01.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group02.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group03.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group04.vcd"
}
response CitizenJoinIndividualTrailing
{
scene "scenes/npc/$gender01/squad_reinforce_single01.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single02.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single03.vcd"
scene "scenes/npc/$gender01/squad_reinforce_single04.vcd"
}
response CitizenJoinGroupTrailing
{
scene "scenes/npc/$gender01/squad_reinforce_group01.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group02.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group03.vcd"
scene "scenes/npc/$gender01/squad_reinforce_group04.vcd"
}
rule CitizenJoinIndividual
{
criteria IsCitizen ConceptJoinPlayer JoinSquadIndividual
response CitizenJoinIndividual
}
rule CitizenJoinGroup
{
criteria IsCitizen ConceptJoinPlayer JoinSquadMultiple
response CitizenJoinGroup
}
rule CitizenJoinIndividualTrailing
{
criteria IsCitizen ConceptJoinPlayer JoinSquadIndividual TrailingReinforcement
response CitizenJoinIndividualTrailing
}
rule CitizenJoinGroupTrailing
{
criteria IsCitizen ConceptJoinPlayer JoinSquadMultiple TrailingReinforcement
response CitizenJoinGroupTrailing
}
response CitizenJoin_d3_c17_07
{
scene "scenes/Streetwar/tunnel/$gender01/d3_c17_07_tenant.vcd"
}
rule CitizenJoin_d3_c17_07
{
criteria IsCitizen ConceptJoinPlayer
"map" "d3_c17_07" required weight 1000
response CitizenJoin_d3_c17_07
matchonce
}
//============================================================================================================
// Commander mode follow speech SPECIAL CASE: first citizen in d3_17_03
//============================================================================================================
response "CitizenFollow_First"
{
scene "scenes/npc/$gender01/abouttime01.vcd"
}
rule CitizenFollow_First
{
criteria IsCitizen ConceptJoinPlayer JoinSquadIndividual Is_03_first
response CitizenFollow_First
}
//------------------------------------------------------------------------------------------------------------
response "CitizenUnFollow"
{
scene "scenes/npc/$gender01/illstayhere01.vcd"
scene "scenes/npc/$gender01/holddownspot01.vcd"
scene "scenes/npc/$gender01/holddownspot02.vcd"
scene "scenes/npc/$gender01/imstickinghere01.vcd"
scene "scenes/npc/$gender01/littlecorner01.vcd"
}
rule CitizenUnFollow
{
criteria IsCitizen ConceptTalkStopFollow
response CitizenUnFollow
}
//------------------------------------------------------------------------------------------------------------
// For ep1_c17_05
//------------------------------------------------------------------------------------------------------------
response "CitizenDenyCommand"
{
scene "scenes/npc/$gender01/illstayhere01.vcd"
scene "scenes/npc/$gender01/imstickinghere01.vcd"
}
rule CitizenDenyCommand
{
criteria IsCitizen ConceptTalkDenyCommand
response CitizenDenyCommand
}

View File

@@ -0,0 +1,878 @@
//============================================================================================================
// Vortigaunt criteria
//============================================================================================================
criterion "IsVortigaunt" "classname" "npc_vortigaunt" required
criterion "VortigauntCure" concept" "VORT_CURE" required
criterion "VortigauntCureStop" "concept" "VORT_CURESTOP" required
criterion "VortigauntCureInterrupt" "concept" "VORT_CURE_INTERRUPT" required
criterion "VortigauntAttack" "concept" "VORT_ATTACK" required
criterion "VortigauntMad" "concept" "VORT_MAD" required
criterion "VortigauntShot" "concept" "VORT_SHOT" required
criterion "VortigauntPain" "concept" "VORT_PAIN" required
criterion "VortigauntDie" "concept" "VORT_DIE" required
criterion "VortigauntKill" "concept" "VORT_KILL" required
criterion "VortigauntLineOfFire" "concept" "VORT_LINE_FIRE" required
criterion "VortigauntPOk" "concept" "VORT_POK" required
criterion "VortigauntExtractBugbait" "concept" "VORT_EXTRACT_START" required
criterion "VortigauntExtractBugbaitFinish" "concept" "VORT_EXTRACT_FINISH" required
criterion "VortNagKeepMovingOutland_11" "concept" "TLK_VortNag_KeepMoving" required
criterion "NotUsedVortResponse01" "UsedVortResponse01" "!=1" "required" weight 0
//============================================================================================================
// Vortigaunt Level Plus Use
//============================================================================================================
response VortUseEverywhere
{
scene "scenes/npc/vortigaunt/vort_affirmed.vcd"
scene "scenes/npc/vortigaunt/vort_vortigese05.vcd"
scene "scenes/npc/vortigaunt/vort_beofservice.vcd"
scene "scenes/npc/vortigaunt/vort_vort_chant21.vcd"
scene "scenes/npc/vortigaunt/vort_certainly.vcd"
scene "scenes/npc/vortigaunt/vort_vort_chant05.vcd"
scene "scenes/npc/vortigaunt/vort_forthefm.vcd"
scene "scenes/npc/vortigaunt/vort_freeman.vcd"
scene "scenes/npc/vortigaunt/vort_vort_mant04.vcd"
scene "scenes/npc/vortigaunt/vort_vort_livetoserve.vcd"
}
rule VortUseEverywhere
{
criteria IsVortigaunt ConceptTalkUse NotUsedVortResponse NotInCombat
applycontext "UsedVortResponse:1:20"
response VortUseEverywhere
}
response "VortTalkUse01"
{
scene "scenes/npc/vortigaunt/vort_leadus.vcd"
scene "scenes/npc/vortigaunt/vort_leadon.vcd"
sequential
norepeat
}
rule VortTalkUse01
{
criteria IsVortigaunt ConceptTalkUse IsMap_ep2_outland_01 NotUsedVortResponse01 NotUsedVortResponse NotInCombat
applycontext "UsedVortResponse:1:20,UsedVortResponse01:1:30"
response VortTalkUse01
}
response "VortLabUsedisable11"
{
scene "scenes\outland_11\vort_silo_maghonor02.vcd"
scene "scenes\outland_11\vort_silo_maghonor03.vcd"
scene "scenes\eli_lab\vort_elab_goaway.vcd"
}
rule IsVortLabUseDisable11
{
criteria ConceptTalkUse IsVortLabUseDisable NPCIdle NotUsedVortResponse IsMap_ep2_outland_11
applycontext "UsedVortResponse:1:20"
response VortLabUsedisable11
}
//------------------------------------------------------------------------------------------------------------
criterion "IsNotVortNoticedHurt" "VortNoticedHurt" "!=1" required
response "VortNoticeHurt"
{
NOREPEAT
scene "scenes/npc/vortigaunt/vort_combat_combined01.vcd"
scene "scenes/npc/vortigaunt/vort_combat_combined02.vcd"
}
rule VortNoticeHurt
{
criteria IsVortigaunt ConceptTalkPlayerHurt NoRecentCombatShort IsMap_ep3_outland_03 IsNotVortNoticedHurt PlayerWounded
applycontext "VortNoticedHurt:1:300"
response VortNoticeHurt
}
//TLK_VORTIGAUNT_DISPEL
response "VortAntlionCombatStart"
{
scene "scenes/npc/vortigaunt/vort_alert_antlions.vcd" respeakdelay 30
scene "scenes/npc/vortigaunt/vort_worry.vcd" respeakdelay 30
scene "scenes/npc/vortigaunt/vort_alert.vcd" respeakdelay 0
}
rule VortAntlionCombatStart
{
criteria IsVortigaunt ConceptStartCombat EnemyIsAntLion
response VortAntlionCombatStart
}
response "VortAntlionCombatStart2"
{
scene "scenes/npc/vortigaunt/vort_worry.vcd" respeakdelay 30
scene "scenes/npc/vortigaunt/vort_alert.vcd" respeakdelay 30
}
rule VortAntlionCombatStart2
{
criteria IsVortigaunt ConceptStartCombat
response VortAntlionCombatStart2
}
response "VortAntlionAttack"
{
scene "scenes/npc/vortigaunt/vort_vortigese03.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/vort_vortigese05.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/vort_vortigese09.vcd" respeakdelay 15
}
rule VortAntlionAttack
{
criteria IsVortigaunt ConceptTalkAttacking
applycontext "VortKill:1:10"
response VortAntlionAttack
}
response "VortigauntPain"
{
scene "scenes/npc/vortigaunt/vort_vortigese04.vcd" respeakdelay 30
scene "scenes/npc/vortigaunt/vort_vortigese07.vcd" respeakdelay 30
scene "scenes/npc/vortigaunt/vort_vortigese08.vcd" respeakdelay 30
}
rule VortigauntPain
{
criteria IsVortigaunt VortigauntPain
response VortigauntPain
}
criterion "contextvortkill" "VortKill" "1" required
response "VortigauntRangedKill"
{
scene "scenes/npc/vortigaunt/vort_returntoall.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/vort_yes.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/vort_tethercut.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/vort_passon.vcd" respeakdelay 15
scene "scenes/npc/vortigaunt/returnvoid.vcd" respeakdelay 15
}
rule VortigauntRangedKill
{
criteria IsVortigaunt ConceptEnemyDead
applycontext "VortKill:1:15"
response VortigauntRangedKill
}
criterion "NotVortPostKill" "VortPostKill" "!=1" required
response "VortCombatFun"
{
NOREPEAT
scene "scenes/npc/vortigaunt/vort_prevail.vcd"
scene "scenes/npc/vortigaunt/vort_goodfightwithus.vcd"
scene "scenes/npc/vortigaunt/vort_killsformidable.vcd"
scene "scenes/npc/vortigaunt/vort_goodtogether.vcd"
}
rule VortCombatFun
{
criteria IsVortigaunt IsMap_ep3_outland_03 ConceptPlayerKilledNPC contextvortkill NotVortPostKill
applycontext "VortPostKill:1:80"
response VortCombatFun
}
criterion "NotVortCompliment" "VortCompliment" "!=1" required
response "VortCombatCompliment"
{
scene "scenes/npc/vortigaunt/vort_excellent.vcd"
scene "scenes/npc/vortigaunt/vort_excellentshooting.vcd"
scene "scenes/npc/vortigaunt/vort_excellentshot.vcd"
scene "scenes/npc/vortigaunt/vort_exceptional.vcd"
}
rule VortCombatCompliment
{
criteria IsVortigaunt ConceptPlayerKilledNPC ContextPlayer1Shot NotVortCompliment
applycontext "VortCompliment:1:60"
response VortCombatCompliment
}
//response "Vort03Test"
//{
// scene "scenes/outland_02/vort_pre_revive_nag01.vcd"
// scene "scenes/outland_02/vort_pre_revive_nag02.vcd"
// scene "scenes/outland_02/vort_pre_revive_nag03.vcd"
// scene "scenes/outland_02/vort_pre_revive_nag04.vcd"
// scene "scenes/outland_02/vort_pre_revive_nag05.vcd"
//}
//
//rule Vort03Test
//{
// criteria IsVortigaunt IsMap_ep3_outland_03 ConceptTalkLook
// response Vort03Test
//}
criterion "VortsNagPlayerAlyxHealOutland02" "OUTLAND_02_VORTS_NAG_PLAYER" "1" required
response "NagPlayerHealAlyxVort"
{
scene "scenes/outland_02/vort_pre_revive_nag01.vcd"
scene "scenes/outland_02/vort_pre_revive_nag02.vcd"
scene "scenes/outland_02/vort_pre_revive_nag03.vcd"
scene "scenes/outland_02/vort_pre_revive_nag04.vcd"
scene "scenes/outland_02/vort_pre_revive_nag05.vcd"
}
rule NagPlayerHealAlyxVort
{
criteria IsVortigaunt ConceptVortsNagPlayerAlyxHealOutland02
response NagPlayerHealAlyxVort
}
criterion "VortAskingForHelp" "SaidProtectUs" "!=1" "required" weight 0
response "VortUnderAttackVort"
{
scene "scenes/outland_02/vort_turret_weneedhelpcometous.vcd"
scene "scenes/outland_02/vort_turret_weareunderattackdefendus.vcd"
scene "scenes/outland_02/vort_turret_defendus.vcd"
scene "scenes/outland_02/vort_turret_protectalyx.vcd"
scene "scenes/outland_02/vort_turret_protectus.vcd"
}
rule VortUnderAttackVort
{
criteria IsVortigaunt VortigauntPain IsVortHealingAlyx VortAskingForHelp
applycontext "SaidProtectUs:1:2,VortNeedsHelp:1:10"
response VortUnderAttackVort
}
response "NagPlayerKeepMovingOutland_11Vort"
{
scene "scenes/outland_11/vort_fmadvance.vcd"
scene "scenes/outland_11/vort_hastefm.vcd"
scene "scenes/outland_11/vort_fmmustmove.vcd"
}
rule NagPlayerKeepMovingOutland_11Vort
{
criteria IsVortigaunt PlayerNear VortNagKeepMovingOutland_11
response NagPlayerKeepMovingOutland_11Vort
}
//============================================================================================================
// Vortigaunt Hello speech
//============================================================================================================
response "VortigauntHello"
{
// scene "scenes/npc/vortigaunt/wellmet.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/isitthefm.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/itisthefm.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/thefreeman.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/beofservice.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/greetingsfm.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/neuroprints.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/salute.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/trulyitis.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/takeus.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/webeofuse.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/corporeal.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/seebeforeoureye.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/morethanmeets.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/weknowyou.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/putaside.vcd" delay "3,3.5" speakonce
// scene "scenes/npc/vortigaunt/mystery.vcd" delay "3,3.5" speakonce
}
rule VortigauntTlkHello
{
criteria IsVortigaunt ConceptTalkHello PlayerNear SeePlayer
response VortigauntHello
}
//------------------------------------------------------------------------------------------------------------
rule VortigauntPlayerHello
{
criteria IsVortigaunt ConceptTalkPHello
response NullResponse
}
//============================================================================================================
// Vortigaunt Questions & Responses speech
//============================================================================================================
response "VortigauntQuestion"
{
// scene "scenes/npc/vortigaunt/vques01.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques02.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques03.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques04.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques05.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques06.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques07.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques08.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques09.vcd" delay 1
// scene "scenes/npc/vortigaunt/vques10.vcd" delay 1
//
}
rule VortigauntTlkQuestion
{
criteria IsVortigaunt ConceptTalkQuestion
response VortigauntQuestion
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntAnswer"
{
// scene "scenes/npc/vortigaunt/vanswer01.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer02.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer03.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer04.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer05.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer06.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer07.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer08.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer09.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer10.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer11.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer12.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer13.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer14.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer15.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer16.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer17.vcd" delay 1
// scene "scenes/npc/vortigaunt/vanswer18.vcd" delay 1
}
rule VortigauntTlkAnswer
{
criteria IsVortigaunt ConceptTalkAnswer
response VortigauntAnswer
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntTalkUse"
{
sequential
norepeat
}
rule VortigauntTalkUse
{
criteria IsVortigaunt ConceptTalkUse
response VortigauntTalkUse
}
//============================================================================================================
// Vortigaunt Combat speech
//============================================================================================================
response "VortigauntCure"
{
scene "scenes/npc/vortigaunt/allowrecharge.vcd" defaultdelay
scene "scenes/npc/vortigaunt/wewillcharge.vcd" defaultdelay
scene "scenes/npc/vortigaunt/fmcanuse.vcd" defaultdelay
scene "scenes/npc/vortigaunt/here.vcd" defaultdelay
scene "scenes/npc/vortigaunt/acceptenergy.vcd" defaultdelay
scene "scenes/npc/vortigaunt/holdstill.vcd" defaultdelay
scene "scenes/npc/vortigaunt/acceptcharge.vcd" defaultdelay
scene "scenes/npc/vortigaunt/weshare.vcd" defaultdelay
scene "scenes/npc/vortigaunt/prepare.vcd" defaultdelay
}
rule VortigauntCure
{
criteria IsVortigaunt VortigauntCure
response VortigauntCure
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntCureStop"
{
scene "scenes/npc/vortigaunt/allwecanspare.vcd" defaultdelay
scene "scenes/npc/vortigaunt/allfornow.vcd" defaultdelay
scene "scenes/npc/vortigaunt/thatisall.vcd" defaultdelay
scene "scenes/npc/vortigaunt/done.vcd" defaultdelay
scene "scenes/npc/vortigaunt/keepfmsafe.vcd" defaultdelay
}
rule VortigauntCureStop
{
criteria IsVortigaunt VortigauntCureStop
response VortigauntCureStop
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntCureInterrupt"
{
scene "scenes/npc/vortigaunt/holdorcantcharge.vcd" defaultdelay
scene "scenes/npc/vortigaunt/hold.vcd" defaultdelay
scene "scenes/npc/vortigaunt/halt.vcd" defaultdelay
scene "scenes/npc/vortigaunt/fmstandstill.vcd" defaultdelay
scene "scenes/npc/vortigaunt/ifyoumove.vcd" defaultdelay
scene "scenes/npc/vortigaunt/movingtarget.vcd" defaultdelay
}
rule VortigauntCureInterrupt
{
criteria IsVortigaunt VortigauntCureInterrupt
response VortigauntCureInterrupt
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntAttack"
{
scene "scenes/npc/vortigaunt/tothevoid.vcd" defaultdelay
scene "scenes/npc/vortigaunt/allinoneinall.vcd" defaultdelay
scene "scenes/npc/vortigaunt/giveover.vcd" defaultdelay
scene "scenes/npc/vortigaunt/weclaimyou.vcd" defaultdelay
scene "scenes/npc/vortigaunt/undeserving.vcd" defaultdelay
scene "scenes/npc/vortigaunt/satisfaction.vcd" defaultdelay
scene "scenes/npc/vortigaunt/regrettable.vcd" defaultdelay
scene "scenes/npc/vortigaunt/allowme.vcd" defaultdelay
scene "scenes/npc/vortigaunt/livetoserve.vcd" defaultdelay
scene "scenes/npc/vortigaunt/returnvoid.vcd" defaultdelay
}
rule VortigauntAttack
{
criteria IsVortigaunt VortigauntAttack
response VortigauntAttack
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntMad"
{
// sentence "VORT_MAD" soundlevel "SNDLVL_NORM" delay "4"
}
rule VortigauntMad
{
criteria IsVortigaunt VortigauntMad
response VortigauntMad
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntShot"
{
// sentence "VORT_SHOT" soundlevel "SNDLVL_NORM" delay "4"
}
rule VortigauntShot
{
criteria IsVortigaunt VortigauntShot
response VortigauntShot
}
//------------------------------------------------------------------------------------------------------------
//response "VortigauntPain"
//{
// sentence "VORT_PAIN" defaultdelay
//}
//rule VortigauntPain
//{
// criteria IsVortigaunt VortigauntPain
// response VortigauntPain
//}
//------------------------------------------------------------------------------------------------------------
response "VortigauntDie"
{
// sentence "VORT_DIE" defaultdelay
}
rule VortigauntDie
{
criteria IsVortigaunt VortigauntDie
response VortigauntDie
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntKill"
{
scene "scenes/npc/vortigaunt/forthefm.vcd" delay 4
scene "scenes/npc/vortigaunt/forfreedom.vcd" delay 4
scene "scenes/npc/vortigaunt/tethercut.vcd" delay 4
scene "scenes/npc/vortigaunt/troubleus.vcd" delay 4
scene "scenes/npc/vortigaunt/dreamed.vcd" delay 4
scene "scenes/npc/vortigaunt/energyempower.vcd" delay 4
scene "scenes/npc/vortigaunt/empowerus.vcd" delay 4
scene "scenes/npc/vortigaunt/surge.vcd" delay 4
scene "scenes/npc/vortigaunt/yes.vcd" delay 4
scene "scenes/npc/vortigaunt/passon.vcd" delay 4
scene "scenes/npc/vortigaunt/nodenexus.vcd" delay 4
scene "scenes/npc/vortigaunt/returntoall.vcd" delay 4
}
rule VortigauntKill
{
criteria IsVortigaunt VortigauntKill
response VortigauntKill
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntLineOfFire"
{
scene "scenes/npc/vortigaunt/cautionfm.vcd" delay 4
scene "scenes/npc/vortigaunt/caution.vcd" delay 4
scene "scenes/npc/vortigaunt/fmbeware.vcd" delay 4
scene "scenes/npc/vortigaunt/ware.vcd" delay 4
scene "scenes/npc/vortigaunt/fmmustbeware.vcd" delay 4
scene "scenes/npc/vortigaunt/warefm.vcd" delay 4
scene "scenes/npc/vortigaunt/fminway.vcd" delay 4
scene "scenes/npc/vortigaunt/standclear.vcd" delay 4
scene "scenes/npc/vortigaunt/fmmustmove.vcd" delay 4
scene "scenes/npc/vortigaunt/warningfm.vcd" delay 4
scene "scenes/npc/vortigaunt/cannotfire.vcd" delay 4
}
rule VortigauntLineOfFire
{
criteria IsVortigaunt VortigauntLineOfFire
response VortigauntLineOfFire
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntPOk"
{
// sentence "VORT_POK" soundlevel "SNDLVL_NORM" delay "2"
}
rule VortigauntPOk
{
criteria IsVortigaunt VortigauntPOk
response VortigauntLineOfFire
}
//============================================================================================================
// Vortigaunt Misc speech
//============================================================================================================
response "VortigauntIdle"
{
// scene "scenes/npc/vortigaunt/poet.vcd"
// scene "scenes/npc/vortigaunt/hopeless.vcd"
// scene "scenes/npc/vortigaunt/alldear.vcd"
// scene "scenes/npc/vortigaunt/prevail.vcd"
// scene "scenes/npc/vortigaunt/seenworse.vcd"
// scene "scenes/npc/vortigaunt/persevere.vcd"
// scene "scenes/npc/vortigaunt/worthless.vcd"
// scene "scenes/npc/vortigaunt/whereto.vcd"
}
rule VortigauntTlkIdle
{
criteria IsVortigaunt ConceptTalkIdle
response VortigauntIdle
}
//------------------------------------------------------------------------------------------------------------
rule VortigauntPlayerIdle
{
criteria IsVortigaunt ConceptTalkPIdle
response NullResponse
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntStare"
{
// scene "scenes/npc/vortigaunt/optical.vcd"
// scene "scenes/npc/vortigaunt/unclear.vcd"
// scene "scenes/npc/vortigaunt/opaque.vcd"
// scene "scenes/npc/vortigaunt/rememberus.vcd"
// scene "scenes/npc/vortigaunt/stillhere.vcd"
// scene "scenes/npc/vortigaunt/calm.vcd"
}
rule VortigauntTlkStare
{
criteria IsVortigaunt ConceptTalkStare
response VortigauntStare
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntOk"
{
scene "scenes/npc/vortigaunt/itishonor.vcd"
scene "scenes/npc/vortigaunt/wehonored.vcd"
scene "scenes/npc/vortigaunt/ourhonor.vcd"
scene "scenes/npc/vortigaunt/honorfollow.vcd"
scene "scenes/npc/vortigaunt/accompany.vcd"
scene "scenes/npc/vortigaunt/gladly.vcd"
scene "scenes/npc/vortigaunt/pleasure.vcd"
scene "scenes/npc/vortigaunt/wefollowfm.vcd"
scene "scenes/npc/vortigaunt/honorours.vcd"
scene "scenes/npc/vortigaunt/gloriousend.vcd"
scene "scenes/npc/vortigaunt/bodyyours.vcd"
scene "scenes/npc/vortigaunt/allwehave.vcd"
scene "scenes/npc/vortigaunt/weareyours.vcd"
scene "scenes/npc/vortigaunt/dedicate.vcd"
scene "scenes/npc/vortigaunt/mutual.vcd"
scene "scenes/npc/vortigaunt/leadus.vcd"
scene "scenes/npc/vortigaunt/onward.vcd"
scene "scenes/npc/vortigaunt/forward.vcd"
scene "scenes/npc/vortigaunt/propitious.vcd"
scene "scenes/npc/vortigaunt/leadon.vcd"
scene "scenes/npc/vortigaunt/fmhonorsus.vcd"
scene "scenes/npc/vortigaunt/fmdoesushonor.vcd"
scene "scenes/npc/vortigaunt/yesforward.vcd"
scene "scenes/npc/vortigaunt/wewillhelp.vcd"
scene "scenes/npc/vortigaunt/assent.vcd"
}
rule VortigauntTlkStartFollow
{
criteria IsVortigaunt ConceptTalkStartFollow
response VortigauntOk
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntWait"
{
scene "scenes/npc/vortigaunt/canconvince.vcd"
scene "scenes/npc/vortigaunt/fmknowsbest.vcd"
scene "scenes/npc/vortigaunt/willremain.vcd"
scene "scenes/npc/vortigaunt/fearfailed.vcd"
scene "scenes/npc/vortigaunt/servebetterhere.vcd"
scene "scenes/npc/vortigaunt/certainly.vcd"
scene "scenes/npc/vortigaunt/herewestay.vcd"
scene "scenes/npc/vortigaunt/asyouwish.vcd"
scene "scenes/npc/vortigaunt/ourplacehere.vcd"
scene "scenes/npc/vortigaunt/affirmed.vcd"
}
rule VortigauntTlkStopFollow
{
criteria IsVortigaunt ConceptTalkStopFollow
response VortigauntWait
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntStop"
{
// sentence "VORT_STOP" delay "2,2.5" soundlevel "SNDLVL_NORM"
}
rule VortigauntTlkStop
{
criteria IsVortigaunt ConceptTalkStop
response VortigauntStop
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntScared"
{
// sentence "VORT_SCARED" delay "0,0.4"
}
rule VortigauntTlkNoShoot
{
criteria IsVortigaunt ConceptTalkNoShoot
response VortigauntScared
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntCureA"
{
// sentence "VORT_CUREA" defaultdelay speakonce
}
rule VortigauntPlayerHurt1
{
criteria IsVortigaunt ConceptTalkPlayerHurt1
response VortigauntCureA
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntCureB"
{
// sentence "VORT_CUREB" defaultdelay speakonce
}
rule VortigauntPlayerHurt2
{
criteria IsVortigaunt ConceptTalkPlayerHurt2
response VortigauntCureB
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntCureC"
{
// sentence "VORT_CUREC" defaultdelay speakonce
}
rule VortigauntPlayerHurt3
{
criteria IsVortigaunt ConceptTalkPlayerHurt3
response VortigauntCureC
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntPQuest"
{
// sentence "VORT_PQUEST" defaultdelay
}
rule VortigauntPlayerQuestion
{
criteria IsVortigaunt ConceptTalkPQuestion
response VortigauntPQuest
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntSmell"
{
// sentence "VORT_SMELL" defaultdelay respeakdelay "60"
}
rule VortigauntTlkSmell
{
criteria IsVortigaunt ConceptTalkSmell
response VortigauntSmell
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntWound"
{
// sentence "VORT_WOUND" speakonce defaultdelay
}
rule VortigauntTlkWound
{
criteria IsVortigaunt ConceptTalkWound
response VortigauntWound
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntMortal"
{
// sentence "VORT_MORTAL" speakonce defaultdelay
}
rule VortigauntTlkMortal
{
criteria IsVortigaunt ConceptTalkMortal
response VortigauntMortal
}
//============================================================================================================
// Vortigaunt Leader speech (a vortigaunt that's leading the player somewhere)
//============================================================================================================
response "VortigauntLeadStart"
{
scene "scenes/npc/vortigaunt/fmmustfollow.vcd"
}
rule VortigauntLeadStart
{
criteria IsVortigaunt ConceptLeadStart
response VortigauntLeadStart
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntLeadCatchup"
{
scene "scenes/npc/vortigaunt/yesforward.vcd"
scene "scenes/npc/vortigaunt/followfm.vcd"
}
rule VortigauntLeadCatchup
{
criteria IsVortigaunt ConceptLeadCatchup
response VortigauntLeadCatchup
}
//============================================================================================================
// Vortigaunt coast specific speech
//============================================================================================================
response "VortigauntExtractBugbait"
{
scene "scenes/coast/bugbait/vort_extract01.vcd" defaultdelay
}
rule VortigauntTlkExtractBugbait
{
criteria IsVortigaunt VortigauntExtractBugbait
response VortigauntExtractBugbait
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntExtractBugbaitFinish"
{
scene "scenes/coast/bugbait/vort_podsforyou01.vcd" defaultdelay
}
rule VortigauntTlkExtractBugbaitFinish
{
criteria IsVortigaunt VortigauntExtractBugbaitFinish
response VortigauntExtractBugbaitFinish
}
//------------------------------------------------------------------------------------------------------------
response "VortigauntGetBugbait"
{
scene "scenes/coast/bugbait/vort_podnag.vcd" defaultdelay
}
rule VortigauntTlkLeadGetBugbait
{
criteria IsVortigaunt ConceptLeadMissingWeapon
response VortigauntGetBugbait
}

View File

@@ -0,0 +1,158 @@
// 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] [soundlevel "SNDLVL_xxx"] [stop_on_nonidle] 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 ] [ stop_on_nonidle ] weight nnn
// responsetype2 parameters2 [nodelay | defaultdelay | delay interval ] [speakonce] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] [displayfirst] [ displaylast ] [ stop_on_nonidle ] 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
// 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)
// stop_on_nonidle = If this response starts a .vcd, and during that scene the NPC changes out of idle state (e.g. sees an enemy), stop the .vcd
//
// 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
#include "talker/response_criteria.txt"
// Test rules
#include "talker/interjections.txt"
#include "talker/npc_combine.txt"
#include "talker/response_k_lab.txt"
#include "talker/response_eli_lab.txt"
#include "talker/npc_vortigaunt.txt"
#include "talker/npc_citizen.txt"
#include "talker/npc_citizen_scenes.txt"
//#include "talker/npc_grigori.txt"
//#include "talker/npc_barney.txt"
#include "talker/npc_alyx.txt"
#include "talker/npc_alyx_episodic.txt"
#include "talker/npc_alyx_episodic_scenes.txt"
//#include "talker/npc_barney_episodic.txt"
#include "talker/nags_Alyx.txt"
#include "talker/npc_alyx_vehicle.txt"