tjheslin1 / dmspredictor Goto Github PK
View Code? Open in Web Editor NEWCombat results predictor for DMs for Dungeons & Dragons 5th Edition
License: GNU General Public License v3.0
Combat results predictor for DMs for Dungeons & Dragons 5th Edition
License: GNU General Public License v3.0
Needs an update in BaseBarbarianAbilities#recklessAttack and it's tests.
Whilst all ConditionSpell
's require concentration, spells other than ConcentrationConditionSpell also require concentration. This spell type is specifically for apply Conditions.
SpellEffect
to each CoreAbilitiesSpec test which tests updating of spell slots.castSelfBuffSpell
and castMultiTargetBuffSpell
, referncing each other.newlyConcentrating
correctly:true
for a type of spell with a mixture of concentration and non-concentration spells as it only enables checking for concentration.SpellEffect
cases to added "Effect" as a suffix.ConcentrationConditionSpell
to ConditionSpell
.castConditionSpell
and castMultiTargetBuffSpell
should follow the same pattern as castSelfBuffSpell
in terms of updating spell slots.Intended to reset after using BaseBarbarianAbilities#recklessAttack but should check if RecklessAttack was used last turn.
schoolAttribute
needs to be updated whenever a new SpellCaster
is defined. Instead adding a field on trait SpellCaster
will enforce this is implemented at a type level.
See TODO in Actions.scala.
Possible edge case where a Condition
could be removed from the wrong target.
Actions#weaponModifier
should be:
private def weaponModifier(weapon: Weapon, creature: Creature): Int = weapon.weaponType match {
case Melee if weapon.finesse =>
Math.max(mod(creature.stats.strength), mod(creature.stats.dexterity))
case Melee => mod(creature.stats.strength)
case Ranged => mod(creature.stats.dexterity)
}
"resolveDamage" should {
...
...
"add a players dexterity modifier for a Ranged weapon" in {
A good example of this is a Ranger using the Hunters Mark spell. Currently it will cast this at the end of its first turn. It would benefit from casting it (as a bonus action) at the beginning of its first turn.
This will involve updating Move#takeMove.
The intended implementation is for the Creature to look for a suitable bonus action to use at the start of its turn. A new boolean value stored in all bonus action abilities (e.g. useBeforeAction: Boolean
) would be checked to determine at what point this ability is used.
It is not intended for a Creature to suddenly use more bonus action abilities when it might be better for it to continue to utilise twoWeaponFighting
.
New tests in MoveSpec should be sufficient as the behaviour of the abilities themselves will remain unaffected.
Monsters should have a to hit modifier added to their attack rolls. Akin to a Players proficiency bonus.
E.g Goblin
has a Dexterity score of 14 (+2). It's bonus to hit on its attacks is +4, suggesting a bonus of plus 2.
This will function in the same way as proficiency bonus and should set Spellcasting Monster's spellCastingModifier
.
Currently the Barbarian's number of turns left during it's rage is not decremented.
When this reaches 0
or when the Barbarian has started its turn without being damaged or having attacked, it should lose it's rage. For this a new flag, something like: rageSatisfied: Boolean
will need to be added.
Need to implement a CharmImmune
condition.
Using ListOps#replace may affect the turn order.
E.g the result of Actions#resolveDamage returns the updatedTarget
and updatedOthers
separately. Joining them together doesn't respect the turn order, which is determined by Combatant.index
.
Once a turn has finished the queue of Combatants is re ordered according to the initiative scores. This may be too late and could result in a Combatant losing their turn or gaining an extra turn.
vendor.yml
was added with the intention of ignoring the sbt script used during Travis CI builds. I haven't got this working but would like to remove the Shell % in the language breakdown of the project.
This uses the https://github.com/github/linguist project.
Tracking#trackedMultiMeleeSpellAttack and Tracking#trackedMultiTargetSavingThrowSpell appear to be duplicates.
trackedMultiMeleeSpellAttack
was likely for a separate multi target attack (not saving throw) spell which has never been added.
To replace Spell#singleTargetSpellOnly
and Spell#multiTargetSpellOnly
matches will have to be updated and maybe become inexhaustive.
Currently the implementations of Focus
are: LowestFirst and RandomFocus.
A Cleric, for example, would favour focusing Undead enemies, being able to use their Turn Undead ability. Furthermore if the Undead has been Turned they could move onto another enemy.
In Move.scala
the method:
def nextToFocus(combatantsToAttack: Queue[Combatant], focus: Focus): Option[Combatant]
would match
on the new type and perform this logic.
This can be tested in isolation in MoveSpec.scala
Path of the Berserker Barbarian's currently doesn't gain exhaustion when Frenzy ends.
This involves adding a new Condition
: Exhuasted, which has number of levels. As a first iteration only one level of exhaustion could be added.
This should apply when the Berserker's rage ends: either rageTurns reaches 0
or it has not attacked/been damaged for a turn.
Depends on #23
Abilities must implement a levelRequirement
, however monster specific abilities such as mutliAttack have no use for the levelRequirement field as Monster has no concept of Level, instead implementing a challenge rating.
There is unlikely to be any ability used by both Players and Monsters. Likely a separate implementation is more appropriate (e.g Extra Attack / Multi Attack).
One possibility is to drop levelRequirement
from Ability
. This is undeseriable as it's main usage is to remind the developer to implement this and consider it.
Another option is to have a Level
to represent Monsters (e.g LevelZero), however this will cause issues when pattern matching over levels (see Cleric#clericSpellSlots) where this would not make sense.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.