import { Creature, Entity } from '../entity' import { Stat, Damage, DamageType, ConstantDamageFormula, Vigor } from '../combat' import { MalePronouns, ImproperNoun, POVPair, POVPairArgs, POV } from '../language' import { LogLine, LogLines } from '../interface' import { VoreType, Stomach, Bowels } from '../vore' import { StatTest } from '../combat/tests' import { AttackAction, TransferAction, FeedAction } from '../combat/actions' class BiteAction extends AttackAction { constructor () { super(new ConstantDamageFormula(new Damage({ amount: 10, type: DamageType.Slash, target: Vigor.Health }))) this.name = "Bite" } } class HypnoAction extends AttackAction { protected successLines: POVPairArgs = new POVPairArgs([ [[POV.Second, POV.Third], (user, target, args) => new LogLine( `You hypnotize ${target.name} for `, args.damage.renderShort() )], [[POV.Third, POV.Second], (user, target, args) => new LogLine( `${user.name.capital} hypnotizes you for `, args.damage.renderShort() )], [[POV.Third, POV.Third], (user, target, args) => new LogLine( `${user.name.capital} hypnotizes ${target.name} for `, args.damage.renderShort() )] ]) protected failLines: POVPair = new POVPair([ [[POV.Second, POV.Third], (user, target) => new LogLine(`You try to hypnotize ${target.name}, but you miss`)], [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} misses you`)], [[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name} misses ${target.name}`)] ]) constructor () { super(new ConstantDamageFormula(new Damage({ amount: 30, type: DamageType.Dominance, target: Vigor.Resolve }))) this.test = new StatTest(Stat.Willpower) this.name = "Hypnotize" } } export class Wolf extends Creature { constructor () { super(new ImproperNoun('wolf', 'wolves'), new ImproperNoun('wolf', 'wolves'), MalePronouns, { Toughness: 20, Power: 20, Speed: 20, Willpower: 20, Charm: 20 }, new Set([VoreType.Oral, VoreType.Anal]), new Set([VoreType.Oral, VoreType.Anal]), 25) this.actions.push(new BiteAction()) this.actions.push(new HypnoAction()) const stomach = new Stomach(this, 50, new Damage( { amount: 20, type: DamageType.Acid, target: Vigor.Health }, { amount: 10, type: DamageType.Crush, target: Vigor.Stamina }, { amount: 10, type: DamageType.Dominance, target: Vigor.Resolve } )) this.containers.push(stomach) const bowels = new Bowels(this, 50, new Damage( { amount: 10, type: DamageType.Crush, target: Vigor.Health }, { amount: 25, type: DamageType.Crush, target: Vigor.Stamina }, { amount: 25, type: DamageType.Dominance, target: Vigor.Resolve } )) this.containers.push(bowels) this.actions.push(new TransferAction(bowels, stomach)) this.otherActions.push(new FeedAction(stomach)) } }