diff --git a/src/game/combat.ts b/src/game/combat.ts index 91e123a..cf610bc 100644 --- a/src/game/combat.ts +++ b/src/game/combat.ts @@ -201,7 +201,7 @@ export class ConstantDamageFormula implements DamageFormula { } explain (user: Creature): LogEntry { - return new LogLine('Deal ', this.damage.renderShort(), ' damage') + return new LogLine('Deal ', this.damage.renderShort(), '.') } } @@ -222,7 +222,7 @@ export class UniformRandomDamageFormula implements DamageFormula { } explain (user: Creature): LogEntry { - return new LogLine('Deal between ', this.damage.scale(1 - this.variance).renderShort(), ' and ', this.damage.scale(1 + this.variance).renderShort(), ' damage.') + return new LogLine('Deal between ', this.damage.scale(1 - this.variance).renderShort(), ' and ', this.damage.scale(1 + this.variance).renderShort(), '.') } } @@ -385,7 +385,9 @@ export class CompositionAction extends Action { } describe (user: Creature, target: Creature): LogEntry { - return new LogLine(`No descriptions yet...`) + return new LogLines( + ...this.consequences.map(consequence => consequence.describePair(user, target)) + ) } } @@ -635,5 +637,13 @@ export abstract class Consequence { return this.conditions.every(cond => cond.allowed(user, target)) } + describeSolo (user: Creature): LogEntry { + return nilLog + } + + describePair (user: Creature, target: Creature): LogEntry { + return nilLog + } + abstract apply (user: Creature, target: Creature): LogEntry } diff --git a/src/game/combat/consequences.ts b/src/game/combat/consequences.ts index 145c632..13c7515 100644 --- a/src/game/combat/consequences.ts +++ b/src/game/combat/consequences.ts @@ -10,6 +10,14 @@ export class ArbitraryConsequence extends Consequence { constructor (public apply: (user: Creature, target: Creature) => LogEntry, conditions: Condition[] = []) { super(conditions) } + + describeSolo (user: Creature): LogEntry { + return new LogLine(`It does...something`) + } + + describePair (user: Creature): LogEntry { + return new LogLine(`It does...something`) + } } /** @@ -57,6 +65,13 @@ export class HealingConsequence extends Consequence { target.takeDamage(damage) ) } + + describePair (user: Creature, target: Creature): LogEntry { + return new LogLine( + `Heals for `, + this.damageFormula.describe(user, target) + ) + } } /** diff --git a/src/game/items.ts b/src/game/items.ts index 9ba3dfe..00a1368 100644 --- a/src/game/items.ts +++ b/src/game/items.ts @@ -1,5 +1,5 @@ import { TextLike, LiveText, DynText, Word, ImproperNoun, Verb } from './language' -import { Actionable, Action, DamageFormula, ConstantDamageFormula, Damage, DamageType, Vigor, StatDamageFormula, Stat, Effective, CompositionAction, Condition } from './combat' +import { Actionable, Action, DamageFormula, ConstantDamageFormula, Damage, DamageType, Vigor, StatDamageFormula, Stat, Effective, CompositionAction, Condition, CompositeDamageFormula } from './combat' import { AttackAction } from './combat/actions' import { Resistances } from './entity' import { DamageTypeResistanceEffect } from './combat/effects' @@ -191,13 +191,20 @@ export class HealthPotion extends Consumable { (user, target) => new LogLine(`${user.name.capital} ${user.name.conjugate(new Verb('drink'))} a potion.`) ), new HealingConsequence( - new ConstantDamageFormula( - new Damage( - { amount: 100, target: Vigor.Health, type: DamageType.Heal }, - { amount: 100, target: Vigor.Stamina, type: DamageType.Heal }, - { amount: 100, target: Vigor.Resolve, type: DamageType.Heal } - ) - ) + new CompositeDamageFormula([ + new ConstantDamageFormula( + new Damage( + { amount: 100, target: Vigor.Health, type: DamageType.Heal }, + { amount: 100, target: Vigor.Stamina, type: DamageType.Heal }, + { amount: 100, target: Vigor.Resolve, type: DamageType.Heal } + ) + ), + new StatDamageFormula([ + { fraction: 2, stat: Stat.Toughness, target: Vigor.Health, type: DamageType.Heal }, + { fraction: 2, stat: Stat.Speed, target: Vigor.Stamina, type: DamageType.Heal }, + { fraction: 2, stat: Stat.Willpower, target: Vigor.Resolve, type: DamageType.Heal } + ]) + ]) ) ] }