Feast 2.0!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

114 lines
3.5 KiB

  1. import { Creature } from "../creature"
  2. import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, CompositionAction } from '../combat'
  3. import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns } from '../language'
  4. import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb, biconnectContainers } from '../vore'
  5. import { AttackAction, TransferAction, FeedAction } from '../combat/actions'
  6. import { StatusConsequence, LogConsequence, DamageConsequence } from '../combat/consequences'
  7. import { SizeEffect, DamageTypeResistanceEffect, InstantKillEffect } from '../combat/effects'
  8. import { LogLine } from '../interface'
  9. import { TogetherCondition, MassRatioCondition } from '../combat/conditions'
  10. export class Geta extends Creature {
  11. constructor () {
  12. super(
  13. new ProperNoun('Geta'),
  14. new ImproperNoun('fox', 'foxes'),
  15. MalePronouns,
  16. { Toughness: 10, Power: 10, Speed: 30, Willpower: 15, Charm: 40 },
  17. new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]),
  18. new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]),
  19. 100
  20. )
  21. this.side = Side.Monsters
  22. const stomach = new Stomach(this, 10, new Damage(
  23. { amount: 100, type: DamageType.Acid, target: Vigor.Health },
  24. { amount: 40, type: DamageType.Crush, target: Vigor.Stamina },
  25. { amount: 80, type: DamageType.Dominance, target: Vigor.Resolve }
  26. ))
  27. this.containers.push(stomach)
  28. const bowels = new Bowels(this, 10, new Damage(
  29. { amount: 30, type: DamageType.Crush, target: Vigor.Health },
  30. { amount: 90, type: DamageType.Crush, target: Vigor.Stamina },
  31. { amount: 120, type: DamageType.Dominance, target: Vigor.Resolve }
  32. ))
  33. this.containers.push(bowels)
  34. this.actions.push(new TransferAction(bowels, stomach))
  35. this.otherActions.push(new FeedAction(stomach))
  36. const cock = new Cock(this, 10, new Damage(
  37. { amount: 10, type: DamageType.Crush, target: Vigor.Health },
  38. { amount: 30, type: DamageType.Crush, target: Vigor.Stamina },
  39. { amount: 30, type: DamageType.Dominance, target: Vigor.Resolve }
  40. ))
  41. const balls = new Balls(this, 10, new Damage(
  42. { amount: 50, type: DamageType.Acid, target: Vigor.Health },
  43. { amount: 25, type: DamageType.Crush, target: Vigor.Stamina },
  44. { amount: 150, type: DamageType.Dominance, target: Vigor.Resolve }
  45. ), cock)
  46. this.containers.push(balls)
  47. this.containers.push(cock)
  48. biconnectContainers(cock, balls)
  49. const shrinkAction = new CompositionAction(
  50. "Shrink",
  51. "Zap!",
  52. {
  53. conditions: [
  54. new TogetherCondition()
  55. ],
  56. consequences: [
  57. new LogConsequence(
  58. (user, target) => new LogLine(`ZAP!`)
  59. ),
  60. new StatusConsequence(
  61. () => new SizeEffect(0.25)
  62. )
  63. ]
  64. }
  65. )
  66. this.actions.push(
  67. shrinkAction
  68. )
  69. this.otherActions.push(
  70. shrinkAction
  71. )
  72. const crushAction = new CompositionAction(
  73. "Crush",
  74. "Crush them like a bug underfoot",
  75. {
  76. conditions: [
  77. new TogetherCondition(),
  78. new MassRatioCondition(10)
  79. ],
  80. consequences: [
  81. new LogConsequence(
  82. (user, target) => new LogLine(`CRUNCH`)
  83. ),
  84. new StatusConsequence(
  85. () => new InstantKillEffect()
  86. )
  87. ]
  88. }
  89. )
  90. this.actions.push(
  91. crushAction
  92. )
  93. this.otherActions.push(
  94. crushAction
  95. )
  96. }
  97. }