We have a Steam curator now. You should be following it. https://store.steampowered.com/curator/44994899-RPGHQ/
Chat client updated, if you have issues using chat press CTRL + SHIFT + R to force a hard refresh.

4th Age

Game development hub. Projects, modding, and resources.

Moderator: Mod Janitor

Ignore Topic
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: August 5th, 2024, 03:34
Sounds like a valid use-case if certain Powers are included.
No new angles from the /tg/ thread so far, but a couple anons agreed that there are cases where one might want to trigger an AoO to give the team's defender an opportunity to punish a marked enemy for attacking a target other than him.

EDIT: A couple more reasons given by anons:
  • Some powers care how much damage you've taken or whether you're bloodied, so one may wish to take damage on purpose by provoking an AoO to reach those thresholds;
  • Some monsters have Powers that trigger on an enemy shifting nearby.
Not sure about the second point; neither the online compendium nor the offline one seems to allow exact string searches, so it's hard to search for triggers with an exact wording, but, of the dozen or so entries I checked, I didn't see any examples of monster Powers that would trigger on a shift but not on a move. Anon claimed there's a monster like that in his campaign, so maybe it's homebrew.

EDIT2: Anon provided an example of a power that triggers on shifting but not walking:
Sir Oakley wrote:
Divine Vengeance (radiant) ✦ At-Will

Trigger: A creature adjacent to Sir Oakley shifts or makes an attack roll that doesn't include him as a target.

Effect (No Action): The triggering creature takes 10 radiant damage.
Last edited by WhiteShark on August 5th, 2024, 09:44, edited 3 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Thanks, I will remove that UI convenience.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Image

Added a teleportation movement ability because it was easy and because I needed an encounter power to test that limitation.

Returning to implement ongoing damage effects now. Would like your input on this one @WhiteShark since the rule is technically ambiguous and there appears to be contention in related forum threads.
Rules Compendium, page 224

Same Type of Ongoing Damage: If a creature is subject to multiple instances of ongoing damage of the same type at the same time (including no type), only the highest number applies.
Example: If a creature is taking ongoing 5 damage (which has no type) when a power causes it to take ongoing 10 damage, the creature is now taking ongoing 10 damage, not 15.
Unfortunately, there is a toy example provided instead of one that would provide additional clarity. The two points of contention appear to be how to handle saves for duplicate effects, and how to handle a case where someone is hit with the same ongoing damage type from sources that each include a condition, such as weakened or slowed.

My interpretation:
  • Each creature essentially has one 'slot' per damage type that an ongoing damage effect fits into
  • Each turn a creature gets a save per 'slot'
  • If a second ongoing damage effect of the same type affects a character, one of them is discarded. Even if this means potentially illogical things like a stronger poison curing a weaker poison
Some rulings that appear to be blatantly wrong (often from a simulationist point of view that seems at-odds with 4e's design philosophy):
  • If the same poison is applied 3 times, it should require 3 saves to clear it, so the stacks must be tracked
  • Break ongoing effects down into damage and conditions, require a save for each component
Last edited by J1M on August 7th, 2024, 04:56, edited 2 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

I think this is answered by the rules on Saving Throws:
Glossary wrote:
When to Make Saving Throws
[...]
If a creature is subject to an effect that a save can end, the creature makes a saving throw against that effect at the end of each of its turns. An effect that a save can end includes one of the following notations: “save ends,” “save ends both,” or “save ends all.”

When two effects are followed by the notation “save ends both,” they are treated as a single effect when making saving throws against them. For instance, if a creature is “weakened and slowed (save ends both),” the creature makes a single saving throw against those two conditions whenever the time comes for it to make saving throws. Similarly, effects that are followed by the notation “save ends all” are treated as a single effect when saving throws are made against them. However, if a creature is subject to separate “weakened (save ends)” and “slowed (save ends)” effects, it must save against each separately. When a creature makes saving throws against multiple effects that a save can end, its player chooses the order of the saving throws.

Sometimes a power or other game feature allows a character to make a saving throw immediately against an effect that a save can end. If the character is allowed to make a single saving throw but is subject to multiple effects that a save can end, the player chooses which of those effects to make the saving throw against.

Identical Effects that a Save Can End

If a character is subject to identical effects that a save can end, ignore all but one of those effects. For instance, if the character is dazed (save ends) and then is attacked and again becomes dazed (save ends), ignore the second effect, since it is identical to the first one.

Identical effects never require multiple saving throws. A creature does make separate saving throws against effects that aren't identical, even if they contain the same condition. For instance, “dazed (save ends)” and “dazed and immobilized (save ends both)” are not identical effects, so separate saving throws are made against each of them.
This is how I read it:

Character A is suffering the effect <ongoing 10 poison damage, save ends>.
Monster B uses a power on A that applies <ongoing 10 poison damage, save ends>.
Since that effect is identical to one Character A is already suffering, it's discarded instead of being applied.

B then uses a power on A that applies <ongoing 5 poison damage, save ends>.
Since that is not identical to the effect A is already suffering, it is applied.
However, since the ongoing damage has the same type as the preexisting effect, A only takes ongoing damage from the higher of the two.
Thus, A makes saves against the two effects separately, and if he successfully removes the original effect without removing the new one, he will then start taking 5 ongoing damage instead of 10.

EDIT: Rereading the section on Ongoing Damage, I've become uncertain:
Glossary wrote:
Different Types of Ongoing Damage: If a creature is subjected to ongoing damage of different types (including no type) at the same time, it takes damage of each of those types every round, and it must make a separate saving throw against each damage type.
The bolded section makes it sound as though one saving throw clears all instances of ongoing damage of a given type, in which case my conclusion above is wrong and yours is correct. I've posted the question in the 4e Discord and forwarded it to an acquaintance who is something of an expert. I'll let you know if they offer any further insight.

EDIT2: On the other hand, there's the case of effects that impose both ongoing damage and a second condition on a save-ends duration. The rules are clear that non-identical effects stack even if they contain conditions the target is already suffering, so, for example:

Character A is suffering the effect <ongoing 10 poison damage, save ends>.
Monster B uses a power on A that applies <ongoing 10 poison damage + slowed, save ends both>.
Since the effect is not identical to the one A is already suffering, it is applied.
A must save against each effect separately; a successful save against one does not end the other even though they share the <ongoing 10 poison damage> condition.

This is my current conclusion:
  • For effects that only apply ongoing damage of a given type, the creature can only suffer instance at a time.
    • If the ongoing damage of the new effect is greater than what is being currently suffered, it overwrites the previous effect.
    • If the ongoing damage of the new effect is lesser than what is being currently suffered, it is discarded.
  • If the effect imposes both ongoing damage and another condition, then it can coexist with another effect that imposes ongoing damage of the same type, but the sufferer only takes damage equal to the highest ongoing damage number per type.
Last edited by WhiteShark on August 7th, 2024, 12:07, edited 5 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

This isn't what you asked about, but it's a good reminder for when you're working out the logic for applying effects:
Glossary wrote:
Overlapping Durations

When a creature is subject to identical effects that end at different times, it ignores all but the effect that has the most time remaining. For instance, if Dendric the fighter is slowed by a monster until the end of the encounter and is then slowed by another monster until the end of his next turn, he ignores the second effect, since it has less time remaining than the first.

Effects that a save can end (labeled “save ends”) work differently, since it's not possible to know when they're going to end. Therefore, effects that a save can end are tracked separately from those that end at specific times.
Last edited by WhiteShark on August 7th, 2024, 06:42, edited 1 time in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

erachima, a long-time 4e player and prolific homebrewer, argues that my first intrepretation is correct on the basis of the wording here:
Glossary wrote:
Same Type of Ongoing Damage: If a creature is subject to multiple instances of ongoing damage of the same type at the same time (including no type), only the highest number applies.
erachima wrote:
in order to be "subject to multiple instances at the same time" they must both be tracked

the alternative would only be grammatically sensible if "the same time" specifically referred to attacks that inflicted "10 ongoing fire damage (save ends) and 5 ongoing fire damage (save ends)", which is nonsense
This seems compelling. It doesn't say 'would be subject', but 'is subject'; the indicative case means that it is factual, not counterfactual.

A user named heridfel pointed out to me that, in the line I quoted earlier, there's no statement or implication that the creature is suffering multiple instances of the same damage type:
Glossary wrote:
Different Types of Ongoing Damage: If a creature is subjected to ongoing damage of different types (including no type) at the same time, it takes damage of each of those types every round, and it must make a separate saving throw against each damage type.
In essence, he argues that the rule's saying to 'make a saving throw against each damage type' is just sloppy wording based on the fact that, in the situation given, the creature only has one instance of ongoing damage per type.

My expert acquaintance had no additional insight; it seems he hasn't been playing 4e in a while.

In summary, it seems my first interpretation was the correct one:
WhiteShark wrote: August 7th, 2024, 06:26
Character A is suffering the effect <ongoing 10 poison damage, save ends>.
Monster B uses a power on A that applies <ongoing 10 poison damage, save ends>.
Since that effect is identical to one Character A is already suffering, it's discarded instead of being applied.

B then uses a power on A that applies <ongoing 5 poison damage, save ends>.
Since that is not identical to the effect A is already suffering, it is applied.
However, since the ongoing damage has the same type as the preexisting effect, A only takes ongoing damage from the higher of the two.
Thus, A makes saves against the two effects separately, and if he successfully removes the original effect without removing the new one, he will then start taking 5 ongoing damage instead of 10.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

@WhiteShark I appreciate having someone to discuss these edge cases in the rules. (I assume you enjoy it as well, given the detailed answers.)

The "damage type slots" metaphor extends cleanly to "condition type slots" that only get overridden when something with a longer duration applies. Where it falls down is with the compound effects (save ends all, multiple damage types).

As much as the "slots" metaphor appeals to my gamist sensibilities, and clearing one effect by taking on another that does more damage is a cool tactic that would be right at home in a trading card game, that may not be what was intended by RAW.

I agree with your conclusion. In terms of implementation:
  • At the time of application, the effect must be checked against existing conditions. Since the majority of monster ongoing effects do not have proper names, the test would be based on the effect, not a game element (poisons from different sources that just do 5 damage can't stack, even if "realism" is at odds with that).
  • Ongoing effects are equivalent if the amount of damage for the damage type is equal AND the conditions applied are equal.
  • Ignore (do not apply) an effect if an equivalent effect is already applied.
  • At the start of the creature's turn, ongoing damage is applied, but only the highest damage effect from each damage type.
  • Effects that do not happen to do damage for a particular turn still apply their condition effects (weakened, slow) until removed.
  • Each ongoing effect is saved against individually, likely changing the set of ongoing effects for next turn.
  • There's a special case for ongoing condition effects that don't do damage where they are considered equal (and ignored) if the duration is equal to OR less than the duration of the existing condition effect.
Last edited by J1M on August 9th, 2024, 04:19, edited 4 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

That all looks correct to me.
J1M wrote: August 7th, 2024, 22:20
I appreciate having someone to discuss these edge cases in the rules. (I assume you enjoy it as well, given the detailed answers.)
I do, and one of the things that I enjoy about your project is the fact a programmatic implementation will make absolutely clear how these confusing and ambiguous interactions are supposed to work.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: August 8th, 2024, 02:40
That all looks correct to me.
J1M wrote: August 7th, 2024, 22:20
I appreciate having someone to discuss these edge cases in the rules. (I assume you enjoy it as well, given the detailed answers.)
I do, and one of the things that I enjoy about your project is the fact a programmatic implementation will make absolutely clear how these confusing and ambiguous interactions are supposed to work.
Are there any other rules that are as unclear/contentious as the ongoing damage rules? Might be helpful to know about them before I get around to implementation.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: August 8th, 2024, 03:24
Are there any other rules that are as unclear/contentious as the ongoing damage rules? Might be helpful to know about them before I get around to implementation.
I remember thinking the Stealth rules were confusing. Other than that, I think it tends to be issues with particular Features, Powers, and Items, not general rules. For example, scanning through questions on the Discord, this one caught my eye:
Tyomcha wrote:
if you use Betrayal to force an enemy to make an MBA, and that MBA includes some sort of choice - for example, it slides the target - do you control that choice (such as where the target slides) or does the enemy still make those choices
There doesn't seem to be an official answer, but the user consensus was to have the PC that used Betrayal make all choices. Anyway, I don't have a list of weirdnesses at hand, but I'll continue to assist as they come up.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Ongoing damage effects implemented as per the points above. Also ended up implementing Regeneration at the same time because it was an extra 3 lines of code.

Difficult to highlight the accomplishment via a screenshot, so the combat log is doing the heavy lifting again.

Note: Blazing Claw and Flaming Orb both apply 5 ongoing fire damage from different powers.
Boneshard Skeleton gets hit by Blazing Claw, starts turn, takes 5 ongoing damage, fails save to remove.
Other Blazing Skeleton uses an action point to use Flaming Orb twice, one of them hits but its ongoing damage effect is ignored because it is the same as one already on the target.
Boneshard Skeleton starts second turn, takes 5 ongoing damage again.

Not shown: if the ongoing damage also imposes a status effect, such as dazed, that works as well as per the earlier discussion.

Next step: ongoing conditions that have a duration instead of a save.

Image

Bonus combat log: Skeleton taking ongoing damage from multiple damage types and resisting the necrotic ongoing damage before saving against both effects.

Image
Last edited by J1M on August 9th, 2024, 04:45, edited 3 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Added the slowed condition so I could test status conditions. This revealed that the approach I was using to extend Fixedeffect for DurationEffect would need some adjustments. It worked well for timings related to the creature the effect was on, but has no mechanism to handle the case of an effect ending on a different creature's turn.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: August 7th, 2024, 06:42
This isn't what you asked about, but it's a good reminder for when you're working out the logic for applying effects:
Glossary wrote:
Overlapping Durations

When a creature is subject to identical effects that end at different times, it ignores all but the effect that has the most time remaining. For instance, if Dendric the fighter is slowed by a monster until the end of the encounter and is then slowed by another monster until the end of his next turn, he ignores the second effect, since it has less time remaining than the first.

Effects that a save can end (labeled “save ends”) work differently, since it's not possible to know when they're going to end. Therefore, effects that a save can end are tracked separately from those that end at specific times.
Now that I've had a day to think about this, I don't think this rule has any actual effect on the game. Let me make my case:
  • Effects that have a save are handled separately.
  • There's no concept of being "double stunned" or "slowed rank 3", so overlapping condition effects don't matter for mechanical calculations.
  • There are no powers in the game that allow you to remove an effect like slow directly. Some powers can allow you to attempt a save, but nothing directly interacts with "slowed until the end of your next turn".
  • EDIT: and when we talk about +2/-2 bonuses, there's multiple rules pertaining to bonus type and non-stacking game elements that would redundantly prevent multiple instances from stacking.
Am I missing something? What role does this rule play aside from reassuring people that they don't have to track these at a table?

Looking for a reason why I would need to implement this rule at all since computers are good a tracking things.
Last edited by J1M on August 11th, 2024, 00:34, edited 2 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: August 10th, 2024, 23:48
There are no powers in the game that allow you to remove an effect like slow directly. Some powers can allow you to attempt a save, but nothing directly interacts with "slowed until the end of your next turn".
This is largely true, but there are some exceptions. Example:
Vestige of Shax wrote:
Shax Pact Boon: You can end one dazed, stunned, immobilized, or restrained condition on you or on an ally within 5 squares of you.
This interacts directly with conditions. Depending on interpretation, it could mean that you completely annihilate all instances of that condition, or only one. There are a number of other powers I found that interacted with conditions in a similar way.
Traveler's Celerity wrote:
Effect: The target gains a +2 bonus to speed until the end of your next turn, and it can make a saving throw against each slowed, immobilized, or restrained effect. If the target saves, the condition ends even if a save doesn't normally end the condition.
This one is interesting because it interacts with effects, not conditions. Thus, there ends up being a big difference between both effects being tracked and only the effect with a longer duration being tracked. I didn't see any others that interacted with effects like this, but it's possible I overlooked something.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: August 11th, 2024, 00:22
J1M wrote: August 10th, 2024, 23:48
There are no powers in the game that allow you to remove an effect like slow directly. Some powers can allow you to attempt a save, but nothing directly interacts with "slowed until the end of your next turn".
This is largely true, but there are some exceptions. Example:
Vestige of Shax wrote:
Shax Pact Boon: You can end one dazed, stunned, immobilized, or restrained condition on you or on an ally within 5 squares of you.
This interacts directly with conditions. Depending on interpretation, it could mean that you completely annihilate all instances of that condition, or only one. There are a number of other powers I found that interacted with conditions in a similar way.
Traveler's Celerity wrote:
Effect: The target gains a +2 bonus to speed until the end of your next turn, and it can make a saving throw against each slowed, immobilized, or restrained effect. If the target saves, the condition ends even if a save doesn't normally end the condition.
This one is interesting because it interacts with effects, not conditions. Thus, there ends up being a big difference between both effects being tracked and only the effect with a longer duration being tracked. I didn't see any others that interacted with effects like this, but it's possible I overlooked something.
That's really interesting. I wonder if Vestige of Shax would be considered a mistake by the designers. It's pretty surprising that ability exists for a warlock splat book, but not as something core for a leader class like cleric via the PHB.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

I had to refactor how the data is passed to Effects in order to do it, but now the following types of abilities are implemented as well:
Hit: the target is slowed until end of your next turn.
That refactor is something I knew I had to do eventually, so it's nice to have it out of the way. Only side effect I noticed was a bug in the UI. Currently the UI refreshes before all of the start of turn events are processed for effects, and that is leading to the UI showing that a character's actions from the previous turn have not refreshed even though they have. Fixing that will be a little trickier than just moving a line of code down since both are responding to a signal from an event bus.
Last edited by J1M on August 11th, 2024, 05:52, edited 2 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Fixed the UI refresh issue, then tackled some miscellaneous code hygiene tasks.

Also implemented a tooltip for powers. The text in the screenshot is for illustration. (None of the real powers that are implemented right now would populate all of the fields.) Trying to strike a balance between something decent and not wasting too much time on something that will change drastically later when a theme is applied to the UI.

Image
Last edited by J1M on August 12th, 2024, 05:12, edited 2 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Roadmap plans
Demo v1: control both sides of a skirmish between monsters
Demo v2: character creator
Demo v3: put level 3 characters from the character creator into the skirmish

I picked skeletons initially to implement because they are iconic and their abilities didn't involve too many complex interactions. Unfortunately, since they also resist necrotic damage and have a wide level range (1-5) they aren't particularly interesting to pit against each other. Looking for some suggestions for other level 3 monsters that would be interesting to pit against them.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

This is the list of level 3 monsters I settled on. Largely selected based on which ones didn't have area attacks. Probably won't have a lot to show for a while since the only visual thing to share will be new token art.

Hobgoblin Archer
Hobgoblin Grunt
Hobgoblin Soldier
Decrepit Skeleton (level 1)
Skeleton
Blazing Skeleton (level 5)
Orc Raider
Imp
Gravehound
Zombie Rotter
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

I was going to suggest a Young White Dragon, but I wasn't sure whether you had implemented flying yet. It also occurred to me that your skeletons probably don't even have ranged attacks, so if flying were implemented, it would be an auto-win.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

No flying or area attacks yet. Also haven't worked on creature size greater than 1x1.

Single-target ranged attacks are implemented (recall the posts about line tracing and cover). The Blazing Skeleton and Decrepit Skeleton have ranged attacks with different damage types.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Some new token art courtesy of our future AI overlords.
But also, a passive that makes zombies weak to critical hits, and an immediate interrupt triggered by the Gravehound dropping to zero hit points. Just have to implement the conditional prone effect it has to wrap that one up.
(Archer crits Gravehound, dropping it to 0 hp, which triggers an interrupt that randomly attacks an adjacent enemy, killing the skeleton minion.)

Image
Last edited by J1M on August 17th, 2024, 06:13, edited 3 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Prone is now working RAW. Grants combat advantage, gives protection from ranged attacks, can be removed with a move action, even drops your speed to zero for everything except crawling.

PS: There's no crawl action. But that stat you can't see in the character sheet is correct!
Last edited by J1M on August 17th, 2024, 23:35, edited 1 time in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Added tooltips for creatures. Had to work around what can only be described as a longstanding bug with Godot's CanvasLayer node. There's plenty of questions/reported issues relating to the CanvasLayer prevent mouse event propagation, even though it is a recommended way of handling UI. Another subtle example of Godot's controller-first assumptions.

Fortunately, if you wrap your UI Controls in a Control that is the direct child of CanvasLayer and it has the Mouse Filter set to Ignore instead of Pass through it can be worked around. Feel bad for everyone over the years who have reported this problem since it does not appear to be a readily-known workaround and I had to figure it out myself.

Also converted Move, Shift, Total Defense, and Second Wind into proper Powers that are handled generically instead of the hack I had as an initial implementation.

In an intentional deviation from RAW, as you can see in that tooltip I have removed the inconsistency in the 4e ruleset of the Poison keyword referring to both an Effect Type and a Damage Type. Poison damage/resistance is now referred to as Toxin damage/resistance.

Image
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Monster Manual, page 138

Phalanx Soldier
Phalanx Soldier The hobgoblin warrior gains a +2 bonus to AC while at least one hobgoblin ally is adjacent to it.
Have another rules question for anyone with an opinion. Monsters have an origin, type, and other keywords for categories like demon or undead. What they do not have in their entry is a race. Usually this can be inferred from the name ("Trickster Goblin"). However, this Phalanx Soldier entry does not refer to a keyword in the game, such as dragon. It refers to "hobgoblin ally".

Options:
  1. Add a race to every monster, inferred largely from the name and section of the book they are from. Use this as an implicit keyword.
  2. Treat "hobgoblin ally" as pertaining to any creatures with a name that contains hobgoblin.
  3. The Phalanx ability cites specific monsters, any hobgoblins added later would need to be added to this special list. (Listed for completeness, this is not viable due to being a source of future bugs.)
  4. Read "hobgoblin ally" as "creature with the Hobgoblin Resilience" passive trait.
Any approach will have the same mechanical result right now, but option 2 would lead to something like a human monster called "Hobgoblin Slayer" counting for this effect if it was ever added.

The challenge with option 1 is that something like a skeleton already has a set monster type of undead. Is its race also undead? Race = skeleton? Race = none? etc.

I'm leaning towards option 4 because I assume the designers had a reason for not explicitly including race in the monster block.

TLDR: What is a hobgoblin?
Last edited by J1M on August 20th, 2024, 05:33, edited 6 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: August 20th, 2024, 05:13
Read "hobgoblin ally" as "creature with the Hobgoblin Resilience" passive trait.
Unfortunately, not every statted Hobgoblin creature has that trait. Ex: Hobgoblin Spear Soldier
J1M wrote: August 20th, 2024, 05:13
option 2 would lead to something like a human monster called "Hobgoblin Slayer" counting for this effect if it was ever added.
There are no preexisting creatures like that, but the opposite problem would certainly occur: there are hobgoblins without hobgoblin in their name, such as this one: Daggerburg Captain
J1M wrote: August 20th, 2024, 05:13
The challenge with option 1 is that something like a skeleton already has a set monster type of undead. Is its race also undead? Race = skeleton? Race = none? etc.
It seems some later books actually did start including a race in the stat line. See the above Daggerburg Captain statblock: Medium natural humanoid, hobgoblin (emphasis mine). It's not present for all creatures, so I think you can safely leave it a default 'none' value for anything non-humanoid.
Last edited by WhiteShark on August 20th, 2024, 14:15, edited 1 time in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: August 20th, 2024, 14:14
J1M wrote: August 20th, 2024, 05:13
Read "hobgoblin ally" as "creature with the Hobgoblin Resilience" passive trait.
Unfortunately, not every statted Hobgoblin creature has that trait. Ex: Hobgoblin Spear Soldier
J1M wrote: August 20th, 2024, 05:13
option 2 would lead to something like a human monster called "Hobgoblin Slayer" counting for this effect if it was ever added.
There are no preexisting creatures like that, but the opposite problem would certainly occur: there are hobgoblins without hobgoblin in their name, such as this one: Daggerburg Captain
J1M wrote: August 20th, 2024, 05:13
The challenge with option 1 is that something like a skeleton already has a set monster type of undead. Is its race also undead? Race = skeleton? Race = none? etc.
It seems some later books actually did start including a race in the stat line. See the above Daggerburg Captain statblock: Medium natural humanoid, hobgoblin (emphasis mine). It's not present for all creatures, so I think you can safely leave it a default 'none' value for anything non-humanoid.
Thanks, looking at more sources, it seems that the use of listing the race after the humanoid keyword is only done when the name of the creature doesn't include the race? Either that or it's just applied inconsistently.

You've made a pretty clear case that this should be captured by an enum. Now I just need to decide if it should be an expansion of the monster keywords or be treated as a non-playable race, and if it applies to anything that's not a humanoid.

It would be a little weird if Giant and Dragon were both a monster keyword and race, appearing on the tooltip twice. There's also monster entries with multiple keywords (dragon+cold), so I don't think it would be weird to have something like (undead+gnoll).

I guess the distinction only really matters if players can ever play as one of these races.

I will probably go with a non-playable race approach and assume for now only humanoids have a race since the base case is just "human". (Playable and monster entries.)
Last edited by J1M on August 21st, 2024, 01:12, edited 1 time in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: August 21st, 2024, 00:28
I guess the distinction only really matters if players can ever play as one of these races.
If I remember correctly, there isn't really a way to give monsters class levels, just some templates with abilities that resemble certain classes, so they don't really work as PCs anyway, at least if you want them to advance. If you just mean for playing in single battles, well, I imagine there's some way to make the tooltip not show race if it's set to none.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: August 21st, 2024, 04:19
J1M wrote: August 21st, 2024, 00:28
I guess the distinction only really matters if players can ever play as one of these races.
If I remember correctly, there isn't really a way to give monsters class levels, just some templates with abilities that resemble certain classes, so they don't really work as PCs anyway, at least if you want them to advance. If you just mean for playing in single battles, well, I imagine there's some way to make the tooltip not show race if it's set to none.
I was referring to the game knowing that a Human NPC and a Human PC are the same race in terms of mechanics.

The implementation won't be difficult. I just need to set the Monster race to something other than None and add a property to the Race enum so the Monster-only races don't appear in the character creator.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Finished implementing the hobgoblin passives, which means there is now a working example of both an immediate interrupt and an immediate reaction. :toot:

It's pretty satisfying to see the effect system pulling its weight with regards to responding to these events and handling the accounting for when stats change/drop off/get refreshed. For example, the way opportunity actions refresh each turn, but immediate actions are once per round.

Progress will slow down while I play some WoW. Likely next item to work on will be the remaining powers for the monsters I picked. I also need to handle units differently so that defeated ones don't block a grid square.