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
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

I've finished implementing the abilities for the Hobgoblin Grunt and Hobgoblin Soldier. As mentioned above this meant implementing reactions. It also involved implementing the Marked condition (Rules Compendium, page 232).

Here's a video demonstrating Formation Strike, a conditional movement effect after an attack hits that takes into account most of the things that have been discussed in the thread recently (new monster, tooltips, checking monster race). The Hobgoblin Soldier advances, takes an opportunity attack, misses an attack, spends an action point, attacks again, the hit triggers a shift to guard an ally, which does not trigger an opportunity attack.

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

Geolocation

Adventurer's Guild

Post by J1M »

Got tired of WoW, so here are some updates:

Defeated creatures no longer block movement or line of sight.
Powers can now have both Prereqs (to select during character building) and Reqs (conditions that must be true to use them, such as Bloodied).
Finished the Orc Raider abilities.
User avatar
Unhelpful Contrarian
Posts: 3187
Joined: Aug 24, '24

Geolocation

Post by Unhelpful Contrarian »

J1M wrote: August 26th, 2024, 04:00
I've finished implementing the abilities for the Hobgoblin Grunt and Hobgoblin Soldier. As mentioned above this meant implementing reactions. It also involved implementing the Marked condition (Rules Compendium, page 232).

Here's a video demonstrating Formation Strike, a conditional movement effect after an attack hits that takes into account most of the things that have been discussed in the thread recently (new monster, tooltips, checking monster race). The Hobgoblin Soldier advances, takes an opportunity attack, misses an attack, spends an action point, attacks again, the hit triggers a shift to guard an ally, which does not trigger an opportunity attack.

Strange. I’m unable to see the clip.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

Unhelpful Contrarian wrote: September 2nd, 2024, 05:03
Strange. I’m unable to see the clip.
Works for me. Have you tried watching it in a new tab? Are you having trouble viewing any other f.rpghq.org links?
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

@rusty_shackleford it appears we have 2 members unable to view vault videos.

Implementing the Imp's Tail Sting ability motivated a few improvements:
Concrete example of a monster refreshing a limited use power.
OngoingEffect can now impose a stat penalty in addition to ongoing damage and a condition.
Implemented secondary/tertiary/quaternary/quinary/etc multi-hit effects.

Also implemented the "next hit" conditional +2 buff for the Hobgoblin Archer, which I assume is similar to what will be needed for a lot of player abilities that grant temporary bonuses.

Looking to confirm a rule interpretation: which parts of the Imp's Tail Sting does a Skeleton ignore? My assumptions:
  • The power has the Poison keyword, but that doesn't make the Skeleton immune to non-poison portions of the Power.
  • Assuming the first attack roll is successful, the Skeleton takes the 1d8+3 physical damage.
  • Assuming the second attack roll is successful, the Skeleton ignores the ongoing effect (damage and stat penalty) entirely because it is the Poison effect type.
Currently, the Skeleton is subject to the poison effect, but immune to the ongoing damage and still subject to the stat penalty. I intend to change this, but wanted to confirm first.
Monster Manual, page 63

Tail Sting (standard; recharges when the imp uses vanish) ✦ Poison
+8 vs. AC; 1d8 + 3 damage, and the imp makes a secondary attack against the same target.
Secondary Attack: +5 vs. Fortitude; the target takes ongoing 5 poison damage and a –2 penalty to Will defense (save ends both).
Monster Manual, page 234

Skeleton Level 3 Soldier
...
Immune disease, poison; Resist 10 necrotic; Vulnerable 5 radiant
...
Last edited by J1M on September 2nd, 2024, 17:42, edited 2 times in total.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

Rules Compendium wrote:
IMMUNITY

Some creatures are immune to certain effects. If a creature is immune to a damage type (such as cold or fire), it doesn’t take that type of damage. If a creature is immune to charm, fear, illusion, or poison, it is unaffected by the non- damaging effects of a power that has that keyword. A creature that is immune to a condition or another effect (such as the dazed condition or forced movement) is unaffected by the stated effect.

Immunity to one part of a power does not make a creature immune to other parts of the power. For example, when a creature that is immune to thunder is hit by a power that both deals thunder damage and pushes the target, the creature takes no damage, but the power can still push it.
So, for most immunities, the text in green applies: the damage type or condition is ignored, but the rest is not. However, for charm, fear, illusion, and poison immunities, the immunity extends to all effects of a power with that keyword. Furthermore, since Poison is both a damage type and a keyword, immunity to Poison means both immunity to Poison damage and immunity to all effects of Poison-keyword powers. Hence:
  • The Skeleton is immune to all parts of a Poison-keyword power except damage of other types.
  • Assuming the first attack hits, the Skeleton takes 1d8+3 damage because it is Physical, not Poison.
  • Assuming the second attack hits, the Skeleton ignores the effect because it comes from a power with the Poison keyword.
User avatar
rusty_shackleford
Site Admin
Posts: 45461
Joined: Feb 2, '23
Gender: Watermelon

Geolocation

Adventurer's Guild

Post by rusty_shackleford »

J1M wrote: September 2nd, 2024, 17:41
@rusty_shackleford it appears we have 2 members unable to view vault videos.
I suspect it might be because it's an mkv. Didn't bother checking the encoding, but it could be that too. I think webm/vp8 has the highest adoption between browsers for video.
Thank you for your attention to this matter!
Steam friend code: 40552640 https://steamcommunity.com/friends/add | email: [email protected]
Having trouble running an old Windows game?
Rusty's Stuff Collection
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

rusty_shackleford wrote: September 2nd, 2024, 18:17
J1M wrote: September 2nd, 2024, 17:41
@rusty_shackleford it appears we have 2 members unable to view vault videos.
I suspect it might be because it's an mkv. Didn't bother checking the encoding, but it could be that too. I think webm/vp8 has the highest adoption between browsers for video.
I just used the default settings in OBS. I don't see webm listed. @Oyster Sauce and @Unhelpful Contrarian which OS/browser are you using?
User avatar
Oyster Sauce
Site Moderator
Posts: 11291
Joined: Jun 2, '23

Geolocation

Adventurer's Guild

Post by Oyster Sauce »

J1M wrote: September 2nd, 2024, 18:34
rusty_shackleford wrote: September 2nd, 2024, 18:17
J1M wrote: September 2nd, 2024, 17:41
@rusty_shackleford it appears we have 2 members unable to view vault videos.
I suspect it might be because it's an mkv. Didn't bother checking the encoding, but it could be that too. I think webm/vp8 has the highest adoption between browsers for video.
I just used the default settings in OBS. I don't see webm listed. @Oyster Sauce and @Unhelpful Contrarian which OS/browser are you using?
Firefox
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

@WhiteShark thoughts on treating Invisible as a Condition? Specifically referring to the kind granted by the Imp's Vanish power, not the Stealth skill. Does the Imp need to follow all of the Remaining Hidden rules that apply to someone who obtained Stealth via a skill check? It almost seems like there are different types of invisibility, or do they all break when someone attacks, etc.
Last edited by J1M on September 2nd, 2024, 22:45, edited 1 time in total.
User avatar
Unhelpful Contrarian
Posts: 3187
Joined: Aug 24, '24

Geolocation

Post by Unhelpful Contrarian »

J1M wrote: September 2nd, 2024, 18:34
rusty_shackleford wrote: September 2nd, 2024, 18:17
J1M wrote: September 2nd, 2024, 17:41
@rusty_shackleford it appears we have 2 members unable to view vault videos.
I suspect it might be because it's an mkv. Didn't bother checking the encoding, but it could be that too. I think webm/vp8 has the highest adoption between browsers for video.
I just used the default settings in OBS. I don't see webm listed. @Oyster Sauce and @Unhelpful Contrarian which OS/browser are you using?
Chrome on a mobile device.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: September 2nd, 2024, 18:49
@WhiteShark thoughts on treating Invisible as a Condition?
I think that makes sense. I don't foresee it causing any rules conflicts to classify it as such.
J1M wrote: September 2nd, 2024, 18:49
It almost seems like there are different types of invisibility,
Invisible and Hidden are indeed separate conditions.
Rules Compendium wrote:
hidden: When a creature is hidden from an enemy, the creature is silent and invisible to that enemy. A creature normally uses the Stealth skill to become hidden. See also invisible.
[...]
invisible: If a creature is invisible, it has several advantages against creatures that can’t see it: It has total concealment against them, it doesn’t provoke opportunity attacks from them, and they grant combat advantage to it.
Thus, Hidden includes the effects of Invisible against targets from whom one is Hidden, but being Hidden doesn't make one generally Invisible, and one can be Invisible without being Hidden.

I recall finding Stealth tricky to adjudicate at the table becuase, technically, it's checked per enemy. I'm not sure how hard implementing it will be, but at least the computer will be able to track it 100% faithfully to the rules. Here's a guide I remember being useful for understanding the Stealth mechanics in 4E: The Rules of Hidden Club
Last edited by WhiteShark on September 2nd, 2024, 19:23, edited 1 time in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

That was an interesting read. Agree that per creature skill checks each turn is a huge pain, even for a computer.

I also think the author is overcomplicating things a bit. If the players can communicate to effectively strip Hidden status from an enemy, why can't enemies do the same, essentially simplifying the benefit to applying only when you are hidden from all enemies?

Also a little counterintuitive that invisible is less beneficial than hidden, but at least it is semantically sound.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: September 2nd, 2024, 22:44
I also think the author is overcomplicating things a bit. If the players can communicate to effectively strip Hidden status from an enemy, why can't enemies do the same, essentially simplifying the benefit to applying only when you are hidden from all enemies?
I thought the same thing at first, but after reviewing both the guide and the Rules Compendium, I see the issue.
Rules Compendium wrote:
If a creature finds a hidden creature, it might point the hidden creature out to others, resulting in them knowing its location.
The Rules of Hidden Club wrote:
Yes, you CAN point out the exact square of any creature you are aware of, to anyone else.

This does NOT mean that the creature is no longer Hidden, or that anyone else can perceive it - but as long as they believe you when you tell them what square it's in, they can "guess" the right square automatically.

So, as long as PCs are sharing information and can take Free Actions, anyone who breaks Hidden can tell everyone else what square to target.
As you can see, pointing out a creature to one's allies does not strip it of its Hidden status. It only lets them know the square(s) the creature occupies. Thus, the Hidden creature retains all the other benefits of Hidden against creatures who have yet to directly perceive it.

It may be worth considering what creatures can communicate when deciding whether location information can be shared. Mindless creatures, for example, may not be able to communicate at all. Since the rules only say a creature 'might' point it out to others, whether a creature can and will do so comes down to the GM's ruling.
Last edited by WhiteShark on September 4th, 2024, 17:27, edited 2 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: September 2nd, 2024, 18:09
Rules Compendium wrote:
IMMUNITY

Some creatures are immune to certain effects. If a creature is immune to a damage type (such as cold or fire), it doesn’t take that type of damage. If a creature is immune to charm, fear, illusion, or poison, it is unaffected by the non- damaging effects of a power that has that keyword. A creature that is immune to a condition or another effect (such as the dazed condition or forced movement) is unaffected by the stated effect.

Immunity to one part of a power does not make a creature immune to other parts of the power. For example, when a creature that is immune to thunder is hit by a power that both deals thunder damage and pushes the target, the creature takes no damage, but the power can still push it.
So, for most immunities, the text in green applies: the damage type or condition is ignored, but the rest is not. However, for charm, fear, illusion, and poison immunities, the immunity extends to all effects of a power with that keyword. Furthermore, since Poison is both a damage type and a keyword, immunity to Poison means both immunity to Poison damage and immunity to all effects of Poison-keyword powers. Hence:
  • The Skeleton is immune to all parts of a Poison-keyword power except damage of other types.
  • Assuming the first attack hits, the Skeleton takes 1d8+3 damage because it is Physical, not Poison.
  • Assuming the second attack hits, the Skeleton ignores the effect because it comes from a power with the Poison keyword.
I had to modify the base Effect class to require an EffectTypes property, which involved touching every Effect file made so far, but the keyword that controls this immunity check is now at the individual effect level instead of the Power.

A pain to do, but now I have the flexibility to do everything you quoted, such as having creatures immune to only some of the effects a Power hits them with. (Confirmed it works for the Tail Sting + Skeleton interaction mentioned above.)

With that out of the way, it's time to return to Concealment/Obscured Squares/Invisibility.
Last edited by J1M on September 3rd, 2024, 05:59, edited 2 times in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

The invisible condition is now functioning correctly. (Total concealment, combat advantage, movement doesn't provoke an opportunity attack.)

Emergent counter for invisibility: make the invisible creature perform an opportunity attack. :smug:

I decided that "attack" referred to "attack power" not "attack roll" for the sake of clearing the invisible condition. The practical difference is that an invisible attacker retains combat advantage for all attack rolls in a power with secondary/tertiary hit effects.

With those changes, all of the monsters I set out to implement are done.
► Show Spoiler
Time to bite the bullet and implement some kind of visible damage effect to make it easier to see the outcomes of attacks. I also need to revisit the targeting code and clean that up since it was initially written before there was the concept of allied teams of creatures.
Last edited by J1M on September 5th, 2024, 05:23, 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: September 5th, 2024, 04:46
I decided that "attack" referred to "attack power" not "attack roll" for the sake of clearing the invisible condition. The practical difference is that an invisible attacker retains combat advantage for all attack rolls in a power with secondary/tertiary hit effects.
Are you referring to Hidden? Invisible isn't automatically cleared by making an Attack. The end trigger for Invisible is specific to the power that granted it. For example, in the case of Invisibility granted by the Imp's Vanish power:
Imp wrote:
The imp becomes invisible until the end of its next turn or until it hits or misses with an attack.
The imp doesn't have any powers that cause it to make multiple attacks, but if it did, its Invisibility―and the benefits granted thereby―would end after the first attack roll.

If you do mean Hidden, then the rules already have you covered:
Rules Compendium wrote:
Not Remaining Hidden:

If the creature takes an action that causes it not to remain hidden, the creature retains the benefits of being hidden, such as combat advantage, until the action is resolved. The creature can’t become hidden again as part of that same action.
Still important to remember that Hidden and Invisible are distinct. For example, an imp that uses Vanish becomes Invisible, but it doesn't become Hidden unless it subsequently uses Stealth to do so.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

I'll have to check if the Imp was touched by errata. What you've quoted doesn't match the Monster Manual, page 63.

Tail Sting has a secondary attack and Vanish does not refer to hit or miss.

Haven't made an attempt to implement Hidden.
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: September 5th, 2024, 12:59
I'll have to check if the Imp was touched by errata. What you've quoted doesn't match the Monster Manual, page 63.
You're right, it was apparently updated in Monster Vault. Since the later books updated the monster math for better balance against player stats, I recommend generally defaulting to the updated versions of monsters; both the portable compendium and the online one always show the most recent version of a monster.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: September 5th, 2024, 17:39
J1M wrote: September 5th, 2024, 12:59
I'll have to check if the Imp was touched by errata. What you've quoted doesn't match the Monster Manual, page 63.
You're right, it was apparently updated in Monster Vault. Since the later books updated the monster math for better balance against player stats, I recommend generally defaulting to the updated versions of monsters; both the portable compendium and the online one always show the most recent version of a monster.
Wasn't aware that they had updated stats with the Monster Vault instead of creating "Imp 2". I had stayed away from the Essentials line because it came across as desperate, especially the new character options.

I'm guessing the updates were pretty scattershot, rather than a reprint. Though to your point if the math changed so much that monster damage nearly doubled it might be a real pain to go through and update everything. (Am aware of MM3 on a business card, if I was using that approach it wouldn't be that difficult to update since I'm using Excel as a data source, but I am a bit concerned that would make all of the monsters feel the same.)
Last edited by J1M on September 5th, 2024, 22:09, edited 1 time in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Have been improving the tooltips today so the effects that have been created already don't look so much like debug output.

How interested are people in seeing how the project is made? The code/data/etc? Here's an example of the data that defines the Imp's Tail Sting power. It's more complicated than other Powers because of the secondary attack (SequentialHit column).

By defining the data in Excel, I can easily do find/replace across all of the data or fill new rows/columns and use formulas to populate fields like Alias, PowerUsedStat, GameElement, etc. Each of the 50+ Excel sheets defines an enumeration, such Condition type, PowerSource, or Feat type. These sheets are translated into about 12,000 lines of C# to serve as an in-memory database. This approach provides compile-time type checking, intellisense, and the ability to implement things like extension methods.

Code: Select all

EnumId{ushort}	Id{omit}	Alias{string}		CreatureName{omit}	Title{string}		PowerUsedStat{Stat}			GameElement{GameElement}			FlavorText{string}		Prereq{Req}	Req{Req}	Job{Job}	PowerType{PowerType}	Level{int}	IsCommonAction{bool}	IsBasicAttack{bool}	Usage{Usage}	PowerSource{PowerSource}	Focus{Focus}	ActionType{ActionType}	Range{Range}		Target{Target}		Attack{Attack}			HitDamage{Damage}			DynamicVars{Stat[]}	DamageTypes{DamageType[]}	EffectTypes{EffectType[]}	HitEffects{Func<Creature,Creature,SrcId,List<Effect>>}							HostHitEffects{Func<Creature,Creature,SrcId,List<Effect>>}	SequentialHit{Power}		HostEffects{Func<SrcId, ReadOnlyCollection<Effect>>}
0x5D00		23808		Imp_TailSting		Imp			Tail Sting		Stat.PowerUsed_Imp_TailSting		GameElement.Power_Imp_TailSting			Multi-attack power test.	#AlwaysReq	#AlwaysReq	Job.None	PowerType.Attack	0		FALSE			FALSE			Usage.Encounter	PowerSource.None		Focus.None	ActionType.Standard	#RangeType.Melee 1	#TargetType.Enemy 1	#Ability.None +8 Defense.Phys	#1d8+3 Ability.None DamageType.Physical	[]			[DamageType.Toxin]		[EffectType.Poison]		(_,_,_) => new([])											(_,_,_) => new([])						Power.Imp_TailStingSecondary	(_) => new([])
0x5D01		23809		Imp_TailStingSecondary	Imp			Tail Sting Secondary	Stat.PowerUsed_Imp_TailStingSecondary	GameElement.Power_Imp_TailStingSecondary	[Flavor text NYI]		#AlwaysReq	#AlwaysReq	Job.None	PowerType.None		0		FALSE			FALSE			Usage.None	PowerSource.None		Focus.None	ActionType.None		#RangeType.Melee 1	#TargetType.Enemy 1	#Ability.None +5 Defense.Fort	#0 Ability.None DamageType.None		[]			[DamageType.Toxin]		[EffectType.Poison]		#(_,_,_) => [OngoingEffect [EffectType.Poison] 5 DamageType.Toxin Condition.None -2 Stat.Defense_Will]	(_,_,_) => new([])						Power.HobgoblinSoldier_Flail	(_) => new([])
Image
Last edited by J1M on September 6th, 2024, 05:03, 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: September 6th, 2024, 04:30
How interested are people in seeing how the project is made? The code/data/etc? Here's an example of the data that defines the Imp's Tail Sting power. It's more complicated than other Powers because of the secondary attack (SequentialHit column).
I'm a total amateur at coding, but I do find it interesting. I've never made a game, so at some point I'm curious to see how the core loop works.
User avatar
loregamer
Site Moderator
Posts: 5060
Joined: Dec 3, '23

Geolocation

Post by loregamer »

As a fellow code monkey I would be interested
Jingle Jangle Jingle
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

One-time disclaimer: I am a hobbyist. Never worked in the game industry professionally, never completed a project to the point of putting it on a storefront. I'll place any technical details after the screenshot/video so those only interested in the progress can easily bypass those details.

Today I added icons for status conditions. I'm not sure how I will go about visually representing other effects like ongoing damage or temporary buffs yet. I suspect using icons for those in the same way would be overwhelming. Maybe I will go with something like a "buff' or "debuff" indicator that shows how many are present and you can mouseover to get more information. There's also the issue of distinguishing which effects should be displayed or not, since the approach I use has the same system for stat changes provided by things like level or race and those provided by powers.

Image

The implementation essentially attaches a big list of Effects to each creature. A monster entering an encounter has 20-30 effects on it from its base stats and abilities. A creature does not have a strength score or a stat for "number of healing words cast this encounter". Any time a stat is needed for a calculation, it is derived from the list of Effects.

Effects implement an IsStat() function and a GetBonus() function that produces a list of stat bonuses. These bonuses include 4 pieces of information: which stat the bonus is for, how much, what type of bonus it is, and the game element it came from. All of that information is required in order to accurately calculate the stacking rules for how different effects are combined/ignored. If you think this sounds more complicated than how most RPGs implement things, you would be correct.

There's no simple "everything stacks" or "everything is an additive or multiplicative bonus". There are all sorts of conditional effects that mean that an effect needs to be aware of the entire encounter state in order to know if it applies. Examples:
  • Apply a bonus if this is an opportunity attack
  • Apply a bonus if the target is a certain size
  • Apply a bonus that is removed once used
Current list of Stats:
► Show Spoiler
User avatar
WhiteShark
Site Moderator
Posts: 5056
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by WhiteShark »

J1M wrote: September 8th, 2024, 00:50
I'm not sure how I will go about visually representing other effects like ongoing damage or temporary buffs yet.
Buffs may be harder since they're not standardized, but, for ongoing damage, perhaps you could dynamically generate an icon of a colored number, the color representing the damage type and the number representing the amount.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

WhiteShark wrote: September 8th, 2024, 07:55
J1M wrote: September 8th, 2024, 00:50
I'm not sure how I will go about visually representing other effects like ongoing damage or temporary buffs yet.
Buffs may be harder since they're not standardized, but, for ongoing damage, perhaps you could dynamically generate an icon of a colored number, the color representing the damage type and the number representing the amount.
I like that idea.
User avatar
Kalarion
Turtle
Turtle
Posts: 2162
Joined: Feb 2, '23

Geolocation

Adventurer's Guild

Post by Kalarion »

J1M wrote: September 8th, 2024, 00:50
One-time disclaimer: I am a hobbyist. Never worked in the game industry professionally, never completed a project to the point of putting it on a storefront. I'll place any technical details after the screenshot/video so those only interested in the progress can easily bypass those details.

...
Why this disclaimer? Are there rumblings that necessitated it?
J1M wrote: September 8th, 2024, 00:50
There's no simple "everything stacks" or "everything is an additive or multiplicative bonus". There are all sorts of conditional effects that mean that an effect needs to be aware of the entire encounter state in order to know if it applies. Examples:

...
Do you foresee this causing processing bottlenecks or requiring sacrifices?
Last edited by Kalarion on September 8th, 2024, 16:49, edited 1 time in total.
. wrote:
Kalarion did this a lot better you know.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

Kalarion wrote: September 8th, 2024, 16:48
J1M wrote: September 8th, 2024, 00:50
One-time disclaimer: I am a hobbyist. Never worked in the game industry professionally, never completed a project to the point of putting it on a storefront. I'll place any technical details after the screenshot/video so those only interested in the progress can easily bypass those details.

...
Why this disclaimer? Are there rumblings that necessitated it?
J1M wrote: September 8th, 2024, 00:50
There's no simple "everything stacks" or "everything is an additive or multiplicative bonus". There are all sorts of conditional effects that mean that an effect needs to be aware of the entire encounter state in order to know if it applies. Examples:

...
Do you foresee this causing processing bottlenecks or requiring sacrifices?
The disclaimer is there because I'm going to drop into an authoritative tone when talking about my own project and I don't want this thread to become arguing about component-entity systems and whether or not a game engine should have a scripting language.

The conditional effects are more of an issue related to the complication of implementation and ensuring the rules are resolved in a way that matches what would be expected at a kitchen table. I don't anticipate needing to worry about performance in that way, but if I do there are optimizations I can explore. Simple example: the existence of an effect like "extra critical damage dice" means that either a) the generic way of calculating damage from an ability needs to assume every power could have this and all powers need data defined for that property or b) there needs to be a mechanism to inject a modification to how much damage a power does (but only if the attack roll was a crit). TLDR: it increases complexity more than its a performance problem.

I'll talk more about this in a future post, but even the existence of "extra damage dice" instead of "extra flat damage" adds additional complexity and prevents certain approaches of implementation because the value isn't known until it happens.
Last edited by J1M on September 8th, 2024, 17:36, edited 1 time in total.
User avatar
J1M
Turtle
Turtle
Posts: 5068
Joined: Feb 15, '23

Geolocation

Adventurer's Guild

Post by J1M »

J1M wrote: September 8th, 2024, 13:33
WhiteShark wrote: September 8th, 2024, 07:55
J1M wrote: September 8th, 2024, 00:50
I'm not sure how I will go about visually representing other effects like ongoing damage or temporary buffs yet.
Buffs may be harder since they're not standardized, but, for ongoing damage, perhaps you could dynamically generate an icon of a colored number, the color representing the damage type and the number representing the amount.
I like that idea.
Seems like a good opportunity for a bikeshedding conversation. I suppose gray could be added to the potential choices, but I didn't want to use it unless it was necessary. That won't be the icon, it's just a color test.

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

Geolocation

Adventurer's Guild

Post by WhiteShark »

Could Radiant be made white and Necrotic black? If so, you could then move Radiant's yellow over to Lightning, move Lightning's current blue over to Force, and move Necrotic's purple over to Thunder.

Acid's color is appropriate, but it looks deceptively close to Poison's color, at least to me on my monitor. Maybe that's something that can be tweaked with brightness.