Feast 2.0!
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

72 строки
2.9 KiB

  1. import { Creature, Entity } from '../entity'
  2. import { Stat, Damage, DamageType, ConstantDamageFormula, Vigor } from '../combat'
  3. import { MalePronouns, ImproperNoun, POVPair, POVPairArgs, POV } from '../language'
  4. import { LogLine, LogLines } from '../interface'
  5. import { VoreType, Stomach, Bowels } from '../vore'
  6. import { StatTest } from '../combat/tests'
  7. import { AttackAction, TransferAction, FeedAction } from '../combat/actions'
  8. class BiteAction extends AttackAction {
  9. constructor () {
  10. super(new ConstantDamageFormula(new Damage({ amount: 10, type: DamageType.Slash, target: Vigor.Health })))
  11. this.name = "Bite"
  12. }
  13. }
  14. class HypnoAction extends AttackAction {
  15. protected successLines: POVPairArgs<Entity, Entity, { damage: Damage }> = new POVPairArgs([
  16. [[POV.Second, POV.Third], (user, target, args) => new LogLine(
  17. `You hypnotize ${target.name} for `,
  18. args.damage.renderShort()
  19. )],
  20. [[POV.Third, POV.Second], (user, target, args) => new LogLine(
  21. `${user.name.capital} hypnotizes you for `,
  22. args.damage.renderShort()
  23. )],
  24. [[POV.Third, POV.Third], (user, target, args) => new LogLine(
  25. `${user.name.capital} hypnotizes ${target.name} for `,
  26. args.damage.renderShort()
  27. )]
  28. ])
  29. protected failLines: POVPair<Entity, Entity> = new POVPair([
  30. [[POV.Second, POV.Third], (user, target) => new LogLine(`You try to hypnotize ${target.name}, but you miss`)],
  31. [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} misses you`)],
  32. [[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name} misses ${target.name}`)]
  33. ])
  34. constructor () {
  35. super(new ConstantDamageFormula(new Damage({ amount: 30, type: DamageType.Dominance, target: Vigor.Resolve })))
  36. this.test = new StatTest(Stat.Willpower)
  37. this.name = "Hypnotize"
  38. }
  39. }
  40. export class Wolf extends Creature {
  41. constructor () {
  42. 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)
  43. this.actions.push(new BiteAction())
  44. this.actions.push(new HypnoAction())
  45. const stomach = new Stomach(this, 50, new Damage(
  46. { amount: 20, type: DamageType.Acid, target: Vigor.Health },
  47. { amount: 10, type: DamageType.Crush, target: Vigor.Stamina },
  48. { amount: 10, type: DamageType.Dominance, target: Vigor.Resolve }
  49. ))
  50. this.containers.push(stomach)
  51. const bowels = new Bowels(this, 50, new Damage(
  52. { amount: 10, type: DamageType.Crush, target: Vigor.Health },
  53. { amount: 25, type: DamageType.Crush, target: Vigor.Stamina },
  54. { amount: 25, type: DamageType.Dominance, target: Vigor.Resolve }
  55. ))
  56. this.containers.push(bowels)
  57. this.actions.push(new TransferAction(bowels, stomach))
  58. this.otherActions.push(new FeedAction(stomach))
  59. }
  60. }