small-nav
chimchooree 3 years ago
parent 5be76b5f41
commit 3def0d556e

@ -5,39 +5,39 @@ february 2, 2022<br>
<br>
<br>
<h2>what is hostility? </h2><br>
NPCs will generally not seek out the player for combat. They will either stand stationary or follow their patrol route, oblivious of the player until becoming hostile. Hostility triggers the NPC to change to an aggressive or defensive state. It's a very similar concept to <a href="https://wiki.guildwars.com/wiki/Aggro">aggro</a> in Guild Wars because weaving through patrol patterns and balling mobs is one of my favorite things from any game, and I'd imagine it'd be just as fun in single player. <br>
Hostility is a state that a character's AI state machine can enter. More specific states will inherit from the hostile state to prompt targeting, aggressive, and defensive behavior. It's a very similar concept to <a href="https://wiki.guildwars.com/wiki/Aggro">aggro</a> in Guild Wars because weaving through patrol patterns and balling mobs is one of my favorite things from any game. <br>
<br>
Usually, something will become hostile when a threat gets too close. Currently, ranges in Blessfrey mirror Edward T. Hall's zoning for interpersonal distances. Intimate distance is used for physical interaction and melee attacks, social distance is used for assessing hostility and ranged attacks. <br>
<h2>when does a character become hostile? </h2><br>
NPCs generally will not seek out the player for combat. They will either stand stationary or follow their patrol route, oblivious of the player until becoming hostile. <br>
<br>
Usually, if an NPC is hostile, that means a threat got too close. Currently, proximities in Blessfrey mirror <a href="https://en.wikipedia.org/wiki/Proxemics">Edward T. Hall's zoning</a> for interpersonal distances. Intimate distance is the range for physical interaction and melee attacks and social distance is the range for assessing hostility and ranged attacks. <br>
<center><img src="/static/img/ent/Personal_Space.svg" alt="(image: A visualization of proxemics by WebHamster of Wikipedia. Around someone are 4 concentric circles with varying diameters: within 25 feet is their public space, 12 feet is their social space, 4 feet is their personal space, and 1.5 feet is their intimate space.)" width="500" height="267.72"></center>
(By &lt;a href=&quot;//commons.wikimedia.org/wiki/User:WebHamster&quot; title=&quot;User:WebHamster&quot;&gt;WebHamster&lt;/a&gt; - &lt;span class=&quot;int-own-work&quot; lang=&quot;en&quot;&gt;Own work&lt;/span&gt;, <a href="https://creativecommons.org/licenses/by-sa/3.0" title="Creative Commons Attribution-Share Alike 3.0">CC BY-SA 3.0</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=6147809">Link</a>) <br>
(By <a href="//commons.wikimedia.org/wiki/User:WebHamster" title="User:WebHamster";>WebHamster</a> - <span class="int-own-work" lang="en">Own work</span>, <a href="https://creativecommons.org/licenses/by-sa/3.0" title="Creative Commons Attribution-Share Alike 3.0">CC BY-SA 3.0</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=6147809">Link</a>) <br>
<br>
<h2>when does a character become hostile? </h2><br>
An NPC will become hostile under a few conditions:
<ul>
<li>An enemy faction member enters its social distance. Every character has a RangeBubble (Area2D) representing its social space. When a character enters range, it will trigger the "approached event" where a handler will identify any faction conflicts. If there is a significant level desparity, the character will remain idle. </li>
<li>A character dealt damage to it or its ally. If the damage dealer is out of rangeThere is no friendly fire. </li>
<li>Something attacked it. </li>
<li>Something was damaged or attacked by it. </li>
<li>When the majority of a team is hostile towards a character, any team of the same faction and type entering the social space of the hostile team will also become hostile towards it. </li>
<li>When one member of a team becomes hostile, the others remain idle until aggravated. This allows skilled players to pull individual opponents away at a time without alerting the others and divine and conquer. This also prevents one foolhardy teammate from programmatically pulling aggro onto its entire team. </li>
<li>An enemy faction member enters its social distance. Every character has a RangeBubble (Area2D) representing its social space. When a character enters range, its AI will assess both set of factions and change states upon finding a conflict. If there is a significant level desparity in the opponent's favor, though, the character will remain idle. </li>
<li>Someone attacked it or dealt damage to it. If their opponent isn't in range, they will become hostile and begin searching or ambushing. (There is no friendly fire, so teams aren't going to implode.) </li>
<li>Someone was damaged or attacked by it. Once again, if their opponent isn't in range, they will begin the hunt. </li>
<li>When the majority of a team is hostile towards an opponent, any team of the same faction or type entering the social space of the hostile team will also become hostile towards it. </li>
<li>When one member of a team becomes hostile, the others remain idle until aggravated. This allows skilled players to pull individual opponents away at a time without alerting the others and divide and conquer. This also prevents one foolhardy teammate from programmatically pulling aggro onto its entire team. </li>
</ul>
<br>
<h2>what changes when a character is hostile? </h2><br>
A hostile NPC will enter a combative AI state and pursue its opponent until either is killed or out of range. During combat, its passive health regeneration will slow, while energy regeneration will remain constant. Maybe certain skills and items can't be used during combat. If it has hostility towards multiple targets, it will prioritize targeting according to its targeting AI. <br>
A hostile NPC will enter a combative AI state and pursue its opponent until either is killed or out of range. During combat, its passive health regeneration will slow, while energy regeneration will remain constant. Maybe certain skills and items can't be used during combat. If it has hostility towards multiple targets, it will prioritize targets according to its targeting AI state, probably favoring the nearest and weakest opponents. <br>
<br>
When a character becomes hostile toward the player, there will be additional cues, such as its name turning red or a sound effect playing. (Now I have the Aion aggro sound effect in my head.) <br>
When a character becomes hostile toward the player, there will be feedback, such as its name turning red or a sound effect playing. (Now I have the Aion aggro sound effect in my head.) <br>
<br>
<h2>when is a character no longer hostile? </h2><br>
An NPC will lose hostility under a few conditions:
<ul>
<li>Its opponent has put enough distance between itself and the NPC. </li>
<li>Its opponent leaves the NPC's territory. An NPC will only pursue its victim so far before losing hostility and resuming its patrol route. </li>
<li>The player dies. </li>
<li>
<li>Enough distance has spread between the NPC and its opponent. Usually, an NPC will not pursue an opponent very far. The farther the NPC is led from its idle route, the less tolerance it has to pursue its opponent. However, if pulled slowly, a few steps at a time, it can be led almost anywhere. </li>
<li>Its opponent exits the NPC's territory. Some NPCs have lines they will not cross. </li>
<li>Its opponent or itself dies. </li>
<li>The opponent no longer belongs to a conflicting faction. </li>
</ul>
<br>
<h2>what happens after a character is no longer hostile? </h2><br>
The character will return to its idle position or the nearest waypoint of its patrol route. Its passive health regeneration return to its usual rate. Possibly some skills and items will be combat-only. <br>
The character will return to its idle position or the nearest waypoint of its patrol route. Its passive health regeneration return to its usual rate. Possibly some skills and items will be combat-only and will become disabled. <br>
<br>
Last updated January 12, 2022
<br>

Loading…
Cancel
Save