Feast 2.0!
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

98 wiersze
3.1 KiB

  1. import { FavorEscapedPrey, VoreAI } from '@/game/ai'
  2. import { CompositionAction, ConstantDamageFormula, Damage, DamageType, FractionDamageFormula, Side, Stat, StatDamageFormula, Vigor } from '@/game/combat'
  3. import { PairCondition, TogetherCondition } from '@/game/combat/conditions'
  4. import { ConsumeConsequence, DamageConsequence, DrainConsequence, StatusConsequence } from '@/game/combat/consequences'
  5. import { LogGroupConsequence } from '@/game/combat/groupConsequences'
  6. import { PreyTargeter, SideTargeter, SoloTargeter } from '@/game/combat/targeters'
  7. import { CompositionTest, OpposedStatScorer, TestCategory } from '@/game/combat/tests'
  8. import { Creature } from '@/game/creature'
  9. import { LogLine, nilLog } from '@/game/interface'
  10. import { ImproperNoun, MalePronouns, ProperNoun } from '@/game/language'
  11. import { anyVore, Stomach } from '@/game/vore'
  12. export default class Inazuma extends Creature {
  13. constructor () {
  14. super(
  15. new ProperNoun("Inazuma"),
  16. new ImproperNoun("zorgoia"),
  17. MalePronouns,
  18. {
  19. Power: 30,
  20. Toughness: 35,
  21. Agility: 45,
  22. Reflexes: 40,
  23. Charm: 60,
  24. Willpower: 50
  25. },
  26. new Set(),
  27. anyVore,
  28. 200
  29. )
  30. this.side = Side.Monsters
  31. this.ai = (new VoreAI(this))
  32. this.ai.addDecider(new FavorEscapedPrey())
  33. const stomach = new Stomach(
  34. this,
  35. 2,
  36. new StatDamageFormula([
  37. { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Acid }
  38. ])
  39. )
  40. this.actions.push(new CompositionAction(
  41. "Mass Devour",
  42. "Eat everyone!",
  43. {
  44. conditions: [new PairCondition(), new TogetherCondition()],
  45. targeters: [new SideTargeter()],
  46. consequences: [new ConsumeConsequence(stomach)],
  47. tests: [new CompositionTest(
  48. [
  49. new OpposedStatScorer(
  50. {
  51. Power: 0.5,
  52. Agility: 0.75
  53. },
  54. {
  55. Power: 0.5,
  56. Reflexes: 0.75
  57. }
  58. )
  59. ],
  60. () => nilLog,
  61. TestCategory.Vore,
  62. 0
  63. )],
  64. groupConsequences: [new LogGroupConsequence(
  65. (user, targets) => new LogLine(`With a mighty GULP!, all ${targets.length} of ${user.name.possessive} prey are swallowed down.`)
  66. )]
  67. }
  68. ))
  69. this.actions.push(new CompositionAction(
  70. "Level Drain",
  71. "Steal stats from prey",
  72. {
  73. conditions: [new PairCondition()],
  74. targeters: [new PreyTargeter(stomach)],
  75. consequences: [new DrainConsequence(
  76. new FractionDamageFormula([
  77. { fraction: 0.25, target: Stat.Power, type: DamageType.Pure },
  78. { fraction: 0.25, target: Stat.Toughness, type: DamageType.Pure },
  79. { fraction: 0.25, target: Stat.Agility, type: DamageType.Pure },
  80. { fraction: 0.25, target: Stat.Reflexes, type: DamageType.Pure },
  81. { fraction: 0.25, target: Stat.Charm, type: DamageType.Pure },
  82. { fraction: 0.25, target: Stat.Willpower, type: DamageType.Pure }
  83. ])
  84. )]
  85. }
  86. ))
  87. this.addVoreContainer(stomach)
  88. this.ai = new VoreAI(this)
  89. }
  90. }