Closed BrianCriswell closed 5 years ago
I like a lot of the ideas that @Girsi came up with but I am leery of hardcoding options that only support single edge cases (and leads to bloated macros). A user can always just explicitly code a single attack that does not conform to a supplied macro.
With that in mind, how can we incorporate some handling of edge cases in a way that is straightforward and keeps the code as simple as possible?
type
enum (both, melee, ranged) to something like distance
and use type
for (melee, spell). Then we don't have duplication of the text determined by whether its melee, ranged, or both.
% Switch on range
% Both - choose weapon or spell text, display reach and range text
% Melee - choose weapon or spell text, display reach text
% Ranged - choose weapon or spell text, display range text.
If we aren't sure that the options here are a closed set of 2 (weapon and spell), then I would instead suggest we let the user overwrite the text used for the type of attack. Then for the lich's attack, the user would choose type=melee
and type-text=Melee~Spell~Attack:
, overriding the text that would normally be displayed.
min-range
could just take a number and pass that on to a caption macro that takes a single parameter.dmg
and dmg-type
no default values - I originally thought it might be nice to have a dagger if the macro is called with no parameters, but I like the handling of the damage here. No damage means we skip the entirety of the damage text on a hit.hit-effect
, miss
, hit-or-miss
- I think everything here should be handled by extra
. Its purpose is to hold all the optional text that occurs after the damage and before the final full stop. Putting all of these other options in, while handling their individual situations well, looks like it is causing feature bloat. In the end, they do the same things as extra
, and the user still has to type everything sans a comma or full stop.1/10
to 1/16
- originally I couldn't come up with a better idea than 1/10 to establish it as less than 1/8. The "10" was because it is worth 10 XP. Taking another look, I think that "0/10" might make more sense for "Challenge 0 (10 XP)". Another possibility that shouldn't affect too many people would be have "0" represent "0 (10 XP)" and "00" represent "0 (0 XP)". Either way, we should probably have a deprecated statement in the altered blocks to change it over as this option has been around for a while (and unlike calling the function directly, people might actually use the value by setting the key in the details macro).\smallskip
between spell lines looks good; good catch. The gap had been there because it is in the SRD stat blocks. Whether a small skip is included could be handled by the the bg=print
package option in the short term and by themes (i.e. D&D print vs SRD/printer friendly) in the long term.or-dmg-type
- I got rid of my physical copy of Storm King's Thunder when I moved, and the Roll20 version has separate attacks for the ogre with goblin hucker for with and without the spiked helmet. Would you be able to post the attack so I can see what it looks like? I think I can guess, but it would be nice to see it.dmg-when
- this seems like a very edge case caused by the bugbear's Brute trait. I think this is one of the cases where we are better served by having the user write up the full attack. The increased complexity does not seem worth it for something that will be used very rarely.Maybe that is the primary decision point on whether we include something or not: how much it is actually going to get used vs how much it increases code complexity. There are many things here which we can include, but should they be included?
tl;dr
A. I can see a change to the text to invoke "Challenge 0 (10 XP)", removing \smallskip
from the spell level lines, and removing the default damage/damage type.
B. Including support for min range on attacks and including spell attacks in some form may be possibilities that do not seem to increase complexity too much and could save a user some writing.
C. However I feel that the other cases happen so seldom that the added complexity to the macros outweighs the benefit of saving the user having to write out an attack in full every once in a while.
What do others think?
I agree that the frequency of occurence should be a factor what options are included. To that end, some data that should help make these decisions:
minrange
does not appear in the MM at all. So this qualifies as a rare case. Since it's so rare i don't know if i would trust that it will always be worded in the same pattern. However, it probably always appear in the same place, right after the range.hiteffect
appears quite often. But in all cases i found so far it can be combined with extra
. Monsters with Miss
indeed seem very rare. I only found 1 in the MM. Hit or Miss
i only found with the Goblin Hucker (see below).CR 1/16
- Since the official CRs below 1 are always halved i think 1/16 fits into that pattern. Also the XP values in that area are halved, though then 1/16 would be 12.5, but close enough, since the XP scale is not linear anyway.ordmgtype
- I found this only occuring in the Goblin Hucker description, so it might be too rare. Nevertheless i found it intuitive since plusdmgtype
also exists. As requested, the attack for the Goblin Hucker:
Goblin Projectile. Ranged Weapon Attack: +3 to hit, range 150/600 ft. (can't hit targets within 30 feet of the hucker), one target. Hit: 5 (2d4) bludgeoning damage, or 10 (4d4) piercing damage if the projectile is wearing a spiked helmet. Hit or Miss: The goblin projectile takes 1d6 bludgeoning damage per 10 feet it travels through the air (maximum 20d6).
dmg-when
- Granted, i couldn't find a non-Bugbear use of this phrase. However i thought it fits well next to ordmgwhen
.One additional remark: The change in the spell list was not just the \smallskip
, it was also that only the spell names are in italic, the commas seperating them are not. There is quite a visible difference in the positioning of the commas in the output.
One additional remark: The change in the spell list was not just the
\smallskip
, it was also that only the spell names are in italic, the commas seperating them are not. There is quite a visible difference in the positioning of the commas in the output.
Interesting, I wonder if the box (LaTeX positioning construct) is built after the line finishes. Your version has the comma as part of the line, so it is included in the box. My old version had the box built around just the spell name and then added the comma later if needed, so the comma was added on the outside border of the slanted word. Thankfully, the new version I am working on uses built in functions and builds the string in a single go, so there are no gaps around the spaces.
\NewDocumentCommand {\DndEmphSpellString} { m }
{
\group_begin:
\seq_set_from_clist:Nn \l_tmpa_seq { #1 }
\seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \exp_not:n { \emph { ##1 } } }
\seq_use:Nn \l_tmpb_seq { ,~ }
\group_end:
}
\exp_not:n
prevents an expansion of its argument, something needed in this particular situation.
Excellent research, @Girsi. Based on that, we definitely need to include spell attacks as an option. I will add this to #153.
What do others think of which option should be used for the odd CR option?
What should we name the keys for {both,melee,ranged} (currently 'type') and for {weapon,spell}? I think type
should be moved to {weapon,spell}. Maybe distance
would work for {both,melee,ranged}?
Finally, now that we are including spell attacks as well should we drop \DndMonsterMelee
and \DndMonsterRanged
in favor of only using \DndMonsterAttack
? Originally they were saving a few keystrokes, but that is becoming less of the case.
Any option we choose will become what people are used to using (for the once in a while they actually need a CR 0 creature), but which is most intuitive?
Okay, I added the spell attacks and formatting fixes to #153.
Maybe {weapon,spell} could be called the nature
of the attack?
The conversation seems to have moved to #153, so I am going to close this down.
This is for discussion of the proposed changes by @Girsi in #159.