Difference between revisions of "Targets and Scoring Guide"

From Wildermyth Wiki
(Non-relationship heroes can be chosen for optional relationships.)
Line 15: Line 15:
:; deadfoe: Aspects: drauven_skysinger
:; deadfoe: Aspects: drauven_skysinger


== Various hero roles ==
==Hero Targeting==
Almost all events require heroes to be targeted for roles. Furthermore, many events require heroes to match roles with specific criteria.
There are three main types of roles to consider:
#'''Required Roles'''
#'''Optional Roles'''
#'''Forbidden Roles'''
'''Required roles''' are mandatory. If no hero matches a particular required role, the event targeting will fail, and the event will not be in the pool of possible events for the encounter. '''Optional roles''' are not mandatory. An event may trigger even if an '''optional role''' is not matched. '''Forbidden roles''' are forbidden. If a forbidden role is matched to a hero, the event targeting will fail, and the event will not be in the pool of possible events for the encounter.


Some events may require three or more heroes to fill their role in an event.
Note, to make matters more complicated, '''required roles''' may have optional targeting preferences, and '''optional roles'''  may have required score thresholds. These are explained in more detail in the '''Further Targeting Examples''' section.


Roles can be assigned to specific heroes, based on criteria such a specific personality trait, relationship with another hero, or presence of a certain hook.
For current purposes, the sub-sections in this section will briefly explain '''hero scoring''', '''aspects''', '''tests''', and '''theme eligibility'''.


Names for each of these roles might match generated roles from the comics editor (e.g. '''bookish''', '''snark''', '''leader'''), or other typical roles such as '''hook''', '''rival''', '''target''', or '''volunteer'''.
====Hero Scoring====


Once a hero has been selected for a role, they typically can't match any other role in the event.
'''Required''' and '''optional roles''' are the most common roles to come across in hero targeting. They typically choose their matches by the hero scoring the highest score of a '''score function'''.


If no hero in the party matches a particular required role, the event (will fail and) won't occur.
There do exist other choosing methods for targets (for example, '''one random''', but for the sake of clarity, this guide will discuss the '''by score''' method as default).


=== Scoring examples ===
A '''score function''' is a function of criteria and their values for the role. These score functions may include, for example, '''personality''' or '''experience stats''', specific '''relationships''' between heroes, and aspects such as '''hooks''' or '''items'''.


==== No scoring threshold ====
=====Examples of Score Functions=====
:'''Role: hero'''
::'''Score Function:''' LEADER >= 50
::''This score function only targets the LEADER stat, and has a score threshold of 50 or above. For a hero to match this role, they must have a LEADER stat of 50 or above.''


:A role may not require a particular score. E.g.:
:'''Role: hero'''
::'''Score Function:''' LEADER+HOTHEAD >= 100
::''This score function targets the sum of the LEADER and HOTHEAD stats of a hero, and has a score threshold of 100 or above. For a hero to match this role, the sum of their LEADER and HOTHEAD stats must be 100 or above.''


::; bookish: Score: Bookish
:'''Role: hero'''
::'''Score Function:''' ((30*hunter) + (30*hook_weird)) + LEADER
::''This slightly more complicated score function uses both aspects and stats. All aspects have value. The most common aspects in hero targeting include class aspects and hook aspects.''
::''For heroes with the hunter aspect (hunter class) the value of the aspect is 1, for others, the value is 0. For heroes with the hook weird, the value of the hook_weird aspect is 1.''
::''For example, for a hunter hero who does not have the WEIRD hook, the scoring would read ((30*1) + (30*0)) + LEADER''
::''The score function lacks a score threshold. This role will target a hero with the highest score of the sum of the aspect parentheses and the LEADER stat. That is to say, the hunter and hook aspects are not required, but will add to the score.''
::''Note! There are aspects that may have more value than 1.''


:This '''bookish''' role picks a hero (with the highest bookish personality?) from among the remaining potential hero matches.
====Hero Aspects====


==== A scoring threshold ====
Another common requirement in hero targeting is the listing of '''Required''' or '''Forbidden Aspects'''. Listed '''Aspects''' are required for a hero to match the target role, whereas '''Forbidden Aspects''' make a hero with those aspects ineligible for the role.


::; hook: Score: hook_Wildheart+hook_Mysterious >= 1
A less common variant of '''Aspects''' is '''Aspects (One of)'''. This variant requires the target to have at least one of the listed aspects.


:This '''hook''' role picks a hero with either or both Wildheart and Mysterious hooks. (A hero with both hooks would be chosen over a hero with only one of the hooks?)
Continuing with our previous example, lets add a '''Required''' and '''Forbidden Aspect''' to the role.


==== A max scoring function ====
=====Example of Aspects and Score Functions=====
:'''Role: hero'''
::'''Score Function:''' LEADER >= 50
::'''Aspects:''' theme_crow
::'''Forbidden Aspects:''' mystic
::''This score function only targets the LEADER stat, and has a score threshold of 50 or above. The Aspects lists a required aspect called theme_crow (the aspect for the crow transformation). The Forbidden Aspects lists an aspect called mystic (the hero class). Now, for a hero to match this role, they must have a LEADER stat of 50 or above, have the crow transformation, and not be a mystic.''


::; romantic: Score: max(BOOKISH,ROMANTIC,POET) >= 60
::''Note! A similar effect to the Forbidden Aspects example above could be achieved with a Aspects (One of): hunter, warrior.''


:This '''romantic''' role picks a hero with the highest score among the bookish, romantic, and poet personality traits. So, if one hero had a high (bookish) score of 78, but another hero had a high (poet) score of 84, the poetic hero would be chosen.
====Hero Tests====


==== A relationship with another hero role ====
A less common requirement is '''Tests'''. They are primarily used, when two stats do not want to be mixed in score functions.


::; volunteer: Score: SHIP_WITH.romantic
=====Example of Test, Aspect, and Score Function=====
:'''Role: hero'''
::'''Score Function:''' LEADER >= 50
::'''Aspects:''' theme_crow
::'''Test:''' AGE <= 35
::''This score function only targets the Leader stat, and has a score threshold of 50 or above. The Aspects lists a required Aspect called theme_crow (the aspect for the crow transformation). The Test requires the hero's age to be less than or equal to 35. Now, for a hero to match this role, they must have a LEADER stat of 50 or above, have the crow transformation, and be 35 years of age or younger.''


:This '''volunteer''' role looks for a hero in a (rival, friends, or lovers) [[relationship]] with the hero previously selected for the '''romantic''' role. (Since this is optional, it could choose a non-relationship hero -- score 0 -- if none of the remaining heroes were in a relationship with '''romantic'''.)
====Theme Eligibility====


==== Theme eligibility ====
'''Theme Eligibility''' is ubiquitous in almost any event where a theme (transformation, pet) is given. '''Theme eligibility''' is quirky. The Content Editor blurb states:


::; hook: Score: (200*hook_Mysterious)+BOOKISH >= 200
''Must be able to get the given theme (doesn't already have the theme, no conflicting themes, has an available slot for one of the theme pieces to go in, and no other heroes already have that theme).''
::: Eligible for Theme: crow
::: Eligible for Theme Piece: head


:This '''hook''' role has multiple criteria, requiring a bookish hero with the Mysterious hook who is also eligible for the crow theme, and crow head. (Any existing theme would not have to conflict with the crow theme, and the head slot must not have another theme such as the fire tattoo.)
This means there are quite a few checks to pass when an '''Eligible for Theme''' is present in hero targeting.
 
'''Important!''' No member of the company may have the theme that is tested for in '''Eligible for Theme'''.
 
Perhaps the trickiest feature is that there is no way of telling which themes conflict with each other without referral to the wiki or the game files.
 
Unlike aspects, stats, and relationships, '''theme eligibility''' does not appear in '''score functions'''. It does appear along side of '''score functions''', similar to lists of aspects discussed above.
=====Example of Hero Theme Eligibility=====
 
:'''Role: target''' (required)
::'''Eligible for Theme:''' bear
::'''Eligible for Theme Piece:''' tattoo
::''For a hero to match this target role, no hero in the company must have the bear theme. The hero must not have conflicting themes with the bear theme (wolf), the hero must be eligible for a head slot theme piece.''
 
====Forbidden Roles====
 
'''Forbidden roles''' are far less common. If a '''forbidden role''' is matched, the event will not be in the pool of eligible encounter events triggered.
 
=====Example of a Forbidden Role=====
:'''Role: hero'''
:'''Forbidden Role: hero2'''
:''This event would fail to trigger if the '''hero2''' was matched, in this case, we might assume the event is only available to a one hero party.''
 
====Role Names====
 
'''Important!''' When reading event targets, the name of a '''role''' is just a '''name'''. How the role is defined with '''scoring''', '''aspects''', '''tests''', and '''theme eligibility''', introduced above, determines if a hero can be matched to the role. Typical '''role names''' for heroes used in event targets include '''hero''', '''hero2''', personality names ('''goofball''', '''healer''', etc.), '''hook''', '''rival''', '''lover''', '''volunteer''', and so forth.
 
With this in mind, a role named '''rival''' may well only require a certain ''personality threshold'', or alternatively, it may not have ''any specific requirements at all''. Consider the following quiz:
 
=====Quiz: Roles Named Rival=====
:'''Role name: hero'''
:''Let's assume this role will match any hero.''
::'''Question:''' ''Which One of the Roles Named Rival Requires a Rival?''
:::'''A) Role name: rival'''
::::'''Aspects:''' mystic
:::'''B) Role name: rival'''
::::'''Score Function:''' GOOFBALL >= 80
:::'''C) Role name: rival'''
::::'''Score Function:''' RIVAL_WITH.hero
:::'''D) Role name: rival'''
::::'''Score Function:''' RIVAL_WITH.hero >= 1
::'''Answer:''' '''D.''' The '''score function''' in '''C.''' does not specify a '''score threshold.''' This means the role will prefer to target a rival of '''hero''', but it is not mandatory.
 
 
====Special Cases of Hero Targeting====
 
In straightforward encounter events, a hero is selected for a single role from the party that triggered the event.
 
However, there are various special cases, where heroes may be targeted for more than one role, as well as cases, where heroes may be targeted from outside the party.
 
These special cases are typically used for selecting specific heroes for event choice panels, dialogue, and enabling special choices for heroes with specific requirements. An example of the latter, many transformations have unique choices in certain events, and these are targeted with an optional role, that may well target a hero already matched to another role.
 
'''Important!''' This may result in confusion when interpreting hero targeting. There may be more '''required roles''', than there are '''required heroes'''.
 
Why is this? There are simply more mechanics involved to hero targeting. At the time of writing, the Wiki does not account for definitions such as '''fromRoles''','''notAlreadyMatchedAs''', and '''alreadyMatchedAs''' in Event Targeting, or the method by which a role chooses its target.
 
The '''fromRoles''' definition defines from which roles the role is drawn. The '''MatchedAs''' definitions are used to make sure that the same entity is either matched or not matched in another role.
 
These definitions can currently only be found in the Content Editor. Below, an example is given of what a special case might look like:
 
=====Example of a Special Case=====
:'''Role: hero''' (required)
::'''Score Function:''' LEADER >= 50
::'''fromRoles: party'''
 
:'''Role: rival''' (required)
::'''Score Function:''' RIVAL_WITH.hero >= 1
::'''fromRoles: party'''
::'''notAlreadyMatchedAs: hero'''
 
:'''Role: hero2''' (required)
::'''Forbidden Aspects:''' mystic
::'''fromRoles: party'''
::'''notAlreadyMatchedAs: hero, rival'''
 
:'''Role: greedy''' (required)
::'''Score Function:''' max(GREEDY, SNARK)
::'''fromRoles: hero, hero2'''
 
::This example shows four required roles, but, in fact, only requires three heroes. As we have learned, '''hero''' requires a LEADER stat threshold, '''rival''' is required to be a rival of '''hero''', and '''hero2''' is required to not be a mystic. Unlike the previous three roles, the '''greedy''' role is drawn '''fromRoles: hero, hero2''' and does not have a '''notAlreadyMatchedAs''' definition. The score function in '''greedy''' role will target the hero with the highest GREEDY or SNARK stat, but only from the roles '''hero''' and '''hero2'''.
 
===Further Targeting Examples===
 
This section will further examine hero targeting by looking at examples.
 
====Scoring Thresholds vs. No Scoring Thresholds====
 
First, consider the difference between a '''score function''' with a '''threshold''', and a '''score function''' '''without a threshold:'''
 
:'''Example:'''
:'''A) Role: bookish''' (required)
::'''Score Function:''' BOOKISH >= 80
 
:'''B) Role: bookish''' (required)
::'''Score Function:''' BOOKISH
 
Lets assume these roles choose a target '''by score.''' Example '''A)''' requires a BOOKISH score of greater than or equal to 80, and will target the hero with the highest BOOKISH stat. Example '''B)''' will target the hero with the highest BOOKISH stat.
 
====The Max Scoring Function====
 
The '''max(x,y,z)'''  '''function''' is the most common '''function''' (see [[Expressions]]) used in hero targeting '''score functions'''. It returns the highest value of a set of parameters.
 
:'''Example:'''
:'''A) Role: volunteer''' (required)
::'''Score Function:''' max(CHARISMA, TENACITY)
 
Here, the '''max()''' function will target the hero with the highest CHARISMA or TENACITY stat.
 
The '''max()''' function can be used with thresholds:
 
:'''Example:'''
:'''A) Role: volunteer''' (required)
::'''Score Function:''' max(CHARISMA, TENACITY) >= 20
 
Here, the '''max()''' function requires a  hero with CHARISMA or TENACITY stat greater than or equal to 20, and will target the hero with the highest CHARISMA or TENACITY stat.
 
====Complex Scoring Functions and Thresholds====
 
So far we've entertained fairly simple '''score functions'''. But hero targeting may well look like the example below:
 
:'''Example:'''
:'''Role: statPotency''' (required)
::'''Score Function:''' (1000*mystic)+((10*max(BOOKISH,POET,SNARK))+POTENCY) >= 1000
 
This is an example from the [[Entanglement]] event. Here, the role requires a hero to pass a score threshold of 1000. The '''score function''' uses STATS as well as an ASPECT (mystic).
 
All aspects have value. For mystic aspect, the value is 1.
 
The parentheses on the left are then (1000*1) or (1000*0) depending on whether the hero is of the mystic class. In practice, this target will ''almost'' exclusively target a hero of the mystic class with the highest stat in BOOKISH, POET, or SNARK (and throw in a little potency for marginal cases).
 
Note, it is still ''theoretically'' possible for the role to target a hero who is not a mystic but has a very high (100) BOOKISH, POET, or SNARK stat, or a hero with a POET (99) stat and POTENCY (10) stat, for example. For the latter case, the parentheses on the right would read ''(10*99+10) = 1000''.
 
====Relationship Scoring====
 
One of the most common hero targeting functions are relationship scoring functions. Like aspects, '''relationships have value'''.
 
For '''relationships''', the value is between 1 and 5 (a value of 1 being a '''level one''' ''one heart (lover)/lightning (rival)/pawn (friend)'' relationship and 5 being a fully maxed relationship.
 
Relationship scoring operates on the same principles already discussed: They may be required (have '''thresholds''') or preferred (lack '''thresholds''').
 
'''Important!''' In '''relationship scoring''', pay attention to the '''.rolename''' suffix in the function. This determines the previously targeted role that is the target of the relationship.
 
:'''Examples:'''
:'''A) Role: lover''' (required)
::'''Score Function:''' LOVER_WITH.hero >= 1
 
Here, any LOVER relationship is required with the role '''hero'''.
 
:'''B) Role: lover''' (required)
::'''Score Function:''' LOVER_WITH.hero >= 5
 
Here, a maxed LOVER relationship is required with the role '''hero'''.
 
:'''C) Role: lover''' (required)
::'''Score Function:''' LOVER_WITH.hero
 
Here, a LOVER relationship is preferred, but not mandatory, with '''hero''' because the '''score threshold''' is missing.
 
:'''D) Role: hero2''' (required)
::'''Score Function:''' SHIP_WITH.hero >= 3
 
Here, any RELATIONSHIP (Friend, Rival, Lover) greater than of equal to level three is required.
 
:'''E) Role: hero2''' (required)
::'''Score Function:''' PARENT_OF.hero >= 1
 
Here, '''hero2''' must be a parent of '''hero'''.
 
====Case Study: Drifters====
::''Putting it all together. Let's look at a complete case of hero targeting for the [[Drifters]] event.''
 
::For sake of clarity, '''fromRoles''' and '''notAlreadyMatchedAs''' definitions, briefly discussed in the previous section, are added.
 
:'''Role: coward''' (required)
::'''Score:''' max(COWARD, BOOKISH, LONER) >= 80
::'''Eligible for Theme:''' green
::'''Eligible for Theme Piece:''' tattoo
:::'''fromRoles: party'''
 
:'''Role: rival''' (required)
::'''Score:''' RIVAL_WITH.coward >= 1
::'''Eligible for Theme:''' green
::'''Eligible for Theme Piece:''' tattoo
:::'''fromRoles: party'''
:::'''notAlreadyMatchedAs:''' coward
 
:'''Role: leader''' (required)
::'''Score:''' LEADER
:::'''fromRoles: party'''
:::'''notAlreadyMatchedAs:''' coward , rival
 
:'''Role: hero''' (required)
:::'''fromRoles: party'''
:::'''notAlreadyMatchedAs:''' leader
 
The '''coward''' role requires a hero with one of the stats of COWARD, BOOKISH, or LONER to be greater than or equal to 80. No one in the company may have the theme green (Sylvan transformation). The hero must not have conflicting themes ('''wolf''', '''fire''', '''crow''', '''frog''', '''shadow''', '''skeleton'''). The hero must have an open head theme slot.
 
The '''rival''' role is otherwise similar, but instead of a STAT requirement, the '''rival''' role requires a hero that is the rival of the '''coward''' role (notice the '''score threshold''').
 
The '''leader''' role prefers a hero with a high LEADER stat (notice the lack of a '''score threshold''').
 
The '''hero''' role has no requirements. Notice that the '''notAlreadyMatchedAs''' definition only defines the '''leader''' role. This means that the '''hero''' role may match with the same hero that is matched in the '''coward''' or '''rival''' roles, meaning that the event can actually be triggered with only three heroes.


== Checking event failures ==
== Checking event failures ==

Revision as of 01:03, 16 January 2022

This is an overview to help understand an event's targets requirements, and why the event might occur (or fail). For more technical details, see Effects or Story Inputs and Outputs.

overlandTile, tile, site

If set, the tile or site must be one of the given biomes or stations to succeed. E.g.:

site
Biome: swamp, forestDeciduous, forestConiferous

foes, deadFoe

If set, the type of threat or dead foe must match to succeed. E.g.:

foes
Aspects: drauven
deadfoe
Aspects: drauven_skysinger

Hero Targeting

Almost all events require heroes to be targeted for roles. Furthermore, many events require heroes to match roles with specific criteria. There are three main types of roles to consider:

  1. Required Roles
  2. Optional Roles
  3. Forbidden Roles

Required roles are mandatory. If no hero matches a particular required role, the event targeting will fail, and the event will not be in the pool of possible events for the encounter. Optional roles are not mandatory. An event may trigger even if an optional role is not matched. Forbidden roles are forbidden. If a forbidden role is matched to a hero, the event targeting will fail, and the event will not be in the pool of possible events for the encounter.

Note, to make matters more complicated, required roles may have optional targeting preferences, and optional roles may have required score thresholds. These are explained in more detail in the Further Targeting Examples section.

For current purposes, the sub-sections in this section will briefly explain hero scoring, aspects, tests, and theme eligibility.

Hero Scoring

Required and optional roles are the most common roles to come across in hero targeting. They typically choose their matches by the hero scoring the highest score of a score function.

There do exist other choosing methods for targets (for example, one random, but for the sake of clarity, this guide will discuss the by score method as default).

A score function is a function of criteria and their values for the role. These score functions may include, for example, personality or experience stats, specific relationships between heroes, and aspects such as hooks or items.

Examples of Score Functions
Role: hero
Score Function: LEADER >= 50
This score function only targets the LEADER stat, and has a score threshold of 50 or above. For a hero to match this role, they must have a LEADER stat of 50 or above.
Role: hero
Score Function: LEADER+HOTHEAD >= 100
This score function targets the sum of the LEADER and HOTHEAD stats of a hero, and has a score threshold of 100 or above. For a hero to match this role, the sum of their LEADER and HOTHEAD stats must be 100 or above.
Role: hero
Score Function: ((30*hunter) + (30*hook_weird)) + LEADER
This slightly more complicated score function uses both aspects and stats. All aspects have value. The most common aspects in hero targeting include class aspects and hook aspects.
For heroes with the hunter aspect (hunter class) the value of the aspect is 1, for others, the value is 0. For heroes with the hook weird, the value of the hook_weird aspect is 1.
For example, for a hunter hero who does not have the WEIRD hook, the scoring would read ((30*1) + (30*0)) + LEADER
The score function lacks a score threshold. This role will target a hero with the highest score of the sum of the aspect parentheses and the LEADER stat. That is to say, the hunter and hook aspects are not required, but will add to the score.
Note! There are aspects that may have more value than 1.

Hero Aspects

Another common requirement in hero targeting is the listing of Required or Forbidden Aspects. Listed Aspects are required for a hero to match the target role, whereas Forbidden Aspects make a hero with those aspects ineligible for the role.

A less common variant of Aspects is Aspects (One of). This variant requires the target to have at least one of the listed aspects.

Continuing with our previous example, lets add a Required and Forbidden Aspect to the role.

Example of Aspects and Score Functions
Role: hero
Score Function: LEADER >= 50
Aspects: theme_crow
Forbidden Aspects: mystic
This score function only targets the LEADER stat, and has a score threshold of 50 or above. The Aspects lists a required aspect called theme_crow (the aspect for the crow transformation). The Forbidden Aspects lists an aspect called mystic (the hero class). Now, for a hero to match this role, they must have a LEADER stat of 50 or above, have the crow transformation, and not be a mystic.
Note! A similar effect to the Forbidden Aspects example above could be achieved with a Aspects (One of): hunter, warrior.

Hero Tests

A less common requirement is Tests. They are primarily used, when two stats do not want to be mixed in score functions.

Example of Test, Aspect, and Score Function
Role: hero
Score Function: LEADER >= 50
Aspects: theme_crow
Test: AGE <= 35
This score function only targets the Leader stat, and has a score threshold of 50 or above. The Aspects lists a required Aspect called theme_crow (the aspect for the crow transformation). The Test requires the hero's age to be less than or equal to 35. Now, for a hero to match this role, they must have a LEADER stat of 50 or above, have the crow transformation, and be 35 years of age or younger.

Theme Eligibility

Theme Eligibility is ubiquitous in almost any event where a theme (transformation, pet) is given. Theme eligibility is quirky. The Content Editor blurb states:

Must be able to get the given theme (doesn't already have the theme, no conflicting themes, has an available slot for one of the theme pieces to go in, and no other heroes already have that theme).

This means there are quite a few checks to pass when an Eligible for Theme is present in hero targeting.

Important! No member of the company may have the theme that is tested for in Eligible for Theme.

Perhaps the trickiest feature is that there is no way of telling which themes conflict with each other without referral to the wiki or the game files.

Unlike aspects, stats, and relationships, theme eligibility does not appear in score functions. It does appear along side of score functions, similar to lists of aspects discussed above.

Example of Hero Theme Eligibility
Role: target (required)
Eligible for Theme: bear
Eligible for Theme Piece: tattoo
For a hero to match this target role, no hero in the company must have the bear theme. The hero must not have conflicting themes with the bear theme (wolf), the hero must be eligible for a head slot theme piece.

Forbidden Roles

Forbidden roles are far less common. If a forbidden role is matched, the event will not be in the pool of eligible encounter events triggered.

Example of a Forbidden Role
Role: hero
Forbidden Role: hero2
This event would fail to trigger if the hero2 was matched, in this case, we might assume the event is only available to a one hero party.

Role Names

Important! When reading event targets, the name of a role is just a name. How the role is defined with scoring, aspects, tests, and theme eligibility, introduced above, determines if a hero can be matched to the role. Typical role names for heroes used in event targets include hero, hero2, personality names (goofball, healer, etc.), hook, rival, lover, volunteer, and so forth.

With this in mind, a role named rival may well only require a certain personality threshold, or alternatively, it may not have any specific requirements at all. Consider the following quiz:

Quiz: Roles Named Rival
Role name: hero
Let's assume this role will match any hero.
Question: Which One of the Roles Named Rival Requires a Rival?
A) Role name: rival
Aspects: mystic
B) Role name: rival
Score Function: GOOFBALL >= 80
C) Role name: rival
Score Function: RIVAL_WITH.hero
D) Role name: rival
Score Function: RIVAL_WITH.hero >= 1
Answer: D. The score function in C. does not specify a score threshold. This means the role will prefer to target a rival of hero, but it is not mandatory.


Special Cases of Hero Targeting

In straightforward encounter events, a hero is selected for a single role from the party that triggered the event.

However, there are various special cases, where heroes may be targeted for more than one role, as well as cases, where heroes may be targeted from outside the party.

These special cases are typically used for selecting specific heroes for event choice panels, dialogue, and enabling special choices for heroes with specific requirements. An example of the latter, many transformations have unique choices in certain events, and these are targeted with an optional role, that may well target a hero already matched to another role.

Important! This may result in confusion when interpreting hero targeting. There may be more required roles, than there are required heroes.

Why is this? There are simply more mechanics involved to hero targeting. At the time of writing, the Wiki does not account for definitions such as fromRoles,notAlreadyMatchedAs, and alreadyMatchedAs in Event Targeting, or the method by which a role chooses its target.

The fromRoles definition defines from which roles the role is drawn. The MatchedAs definitions are used to make sure that the same entity is either matched or not matched in another role.

These definitions can currently only be found in the Content Editor. Below, an example is given of what a special case might look like:

Example of a Special Case
Role: hero (required)
Score Function: LEADER >= 50
fromRoles: party
Role: rival (required)
Score Function: RIVAL_WITH.hero >= 1
fromRoles: party
notAlreadyMatchedAs: hero
Role: hero2 (required)
Forbidden Aspects: mystic
fromRoles: party
notAlreadyMatchedAs: hero, rival
Role: greedy (required)
Score Function: max(GREEDY, SNARK)
fromRoles: hero, hero2
This example shows four required roles, but, in fact, only requires three heroes. As we have learned, hero requires a LEADER stat threshold, rival is required to be a rival of hero, and hero2 is required to not be a mystic. Unlike the previous three roles, the greedy role is drawn fromRoles: hero, hero2 and does not have a notAlreadyMatchedAs definition. The score function in greedy role will target the hero with the highest GREEDY or SNARK stat, but only from the roles hero and hero2.

Further Targeting Examples

This section will further examine hero targeting by looking at examples.

Scoring Thresholds vs. No Scoring Thresholds

First, consider the difference between a score function with a threshold, and a score function without a threshold:

Example:
A) Role: bookish (required)
Score Function: BOOKISH >= 80
B) Role: bookish (required)
Score Function: BOOKISH

Lets assume these roles choose a target by score. Example A) requires a BOOKISH score of greater than or equal to 80, and will target the hero with the highest BOOKISH stat. Example B) will target the hero with the highest BOOKISH stat.

The Max Scoring Function

The max(x,y,z) function is the most common function (see Expressions) used in hero targeting score functions. It returns the highest value of a set of parameters.

Example:
A) Role: volunteer (required)
Score Function: max(CHARISMA, TENACITY)

Here, the max() function will target the hero with the highest CHARISMA or TENACITY stat.

The max() function can be used with thresholds:

Example:
A) Role: volunteer (required)
Score Function: max(CHARISMA, TENACITY) >= 20

Here, the max() function requires a hero with CHARISMA or TENACITY stat greater than or equal to 20, and will target the hero with the highest CHARISMA or TENACITY stat.

Complex Scoring Functions and Thresholds

So far we've entertained fairly simple score functions. But hero targeting may well look like the example below:

Example:
Role: statPotency (required)
Score Function: (1000*mystic)+((10*max(BOOKISH,POET,SNARK))+POTENCY) >= 1000

This is an example from the Entanglement event. Here, the role requires a hero to pass a score threshold of 1000. The score function uses STATS as well as an ASPECT (mystic).

All aspects have value. For mystic aspect, the value is 1.

The parentheses on the left are then (1000*1) or (1000*0) depending on whether the hero is of the mystic class. In practice, this target will almost exclusively target a hero of the mystic class with the highest stat in BOOKISH, POET, or SNARK (and throw in a little potency for marginal cases).

Note, it is still theoretically possible for the role to target a hero who is not a mystic but has a very high (100) BOOKISH, POET, or SNARK stat, or a hero with a POET (99) stat and POTENCY (10) stat, for example. For the latter case, the parentheses on the right would read (10*99+10) = 1000.

Relationship Scoring

One of the most common hero targeting functions are relationship scoring functions. Like aspects, relationships have value.

For relationships, the value is between 1 and 5 (a value of 1 being a level one one heart (lover)/lightning (rival)/pawn (friend) relationship and 5 being a fully maxed relationship.

Relationship scoring operates on the same principles already discussed: They may be required (have thresholds) or preferred (lack thresholds).

Important! In relationship scoring, pay attention to the .rolename suffix in the function. This determines the previously targeted role that is the target of the relationship.

Examples:
A) Role: lover (required)
Score Function: LOVER_WITH.hero >= 1

Here, any LOVER relationship is required with the role hero.

B) Role: lover (required)
Score Function: LOVER_WITH.hero >= 5

Here, a maxed LOVER relationship is required with the role hero.

C) Role: lover (required)
Score Function: LOVER_WITH.hero

Here, a LOVER relationship is preferred, but not mandatory, with hero because the score threshold is missing.

D) Role: hero2 (required)
Score Function: SHIP_WITH.hero >= 3

Here, any RELATIONSHIP (Friend, Rival, Lover) greater than of equal to level three is required.

E) Role: hero2 (required)
Score Function: PARENT_OF.hero >= 1

Here, hero2 must be a parent of hero.

Case Study: Drifters

Putting it all together. Let's look at a complete case of hero targeting for the Drifters event.
For sake of clarity, fromRoles and notAlreadyMatchedAs definitions, briefly discussed in the previous section, are added.
Role: coward (required)
Score: max(COWARD, BOOKISH, LONER) >= 80
Eligible for Theme: green
Eligible for Theme Piece: tattoo
fromRoles: party
Role: rival (required)
Score: RIVAL_WITH.coward >= 1
Eligible for Theme: green
Eligible for Theme Piece: tattoo
fromRoles: party
notAlreadyMatchedAs: coward
Role: leader (required)
Score: LEADER
fromRoles: party
notAlreadyMatchedAs: coward , rival
Role: hero (required)
fromRoles: party
notAlreadyMatchedAs: leader

The coward role requires a hero with one of the stats of COWARD, BOOKISH, or LONER to be greater than or equal to 80. No one in the company may have the theme green (Sylvan transformation). The hero must not have conflicting themes (wolf, fire, crow, frog, shadow, skeleton). The hero must have an open head theme slot.

The rival role is otherwise similar, but instead of a STAT requirement, the rival role requires a hero that is the rival of the coward role (notice the score threshold).

The leader role prefers a hero with a high LEADER stat (notice the lack of a score threshold).

The hero role has no requirements. Notice that the notAlreadyMatchedAs definition only defines the leader role. This means that the hero role may match with the same hero that is matched in the coward or rival roles, meaning that the event can actually be triggered with only three heroes.

Checking event failures

If an event does not seem to ever occur even though you think it should, you can enable dev mode and the Pick Events cheat, then scroll down in the list of events to see why a particular event failed.

ArriveAtHostileSiteFailedEvent.PNG

In that case, no eligible hero had a (required) bookish score of at least 80.

A few other reasons why an event might fail or not occur are:

  • Wrong event type. The event you're trying to trigger is an 'Arrive at hostile site' type, but your party is 'Wilderness scouting.' (You wouldn't find a hostile site event in the wilderness scouting Pick Events list.)
  • Event only occurs once per campaign. (The event already happened in the current campaign. Pick Events will show that reason for the event failure.)
  • Eligible for theme failure. The event won't happen if you already have a hero with that theme in your company (or your existing theme conflicts with your desired theme). (You can wait to recruit another hero with that theme, until your current hero gets the desired theme.)