|  | import { Creature } from "../creature"
import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, CompositionAction } from '../combat'
import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns, Verb } from '../language'
import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb, biconnectContainers, Hand } from '../vore'
import { AttackAction, TransferAction, FeedAction } from '../combat/actions'
import { StatusConsequence, LogConsequence, DamageConsequence } from '../combat/consequences'
import { SizeEffect, DamageTypeResistanceEffect, InstantKillEffect } from '../combat/effects'
import { LogLine } from '../interface'
import { TogetherCondition, MassRatioCondition, ContainsCondition } from '../combat/conditions'
export class Geta extends Creature {
  constructor () {
    super(
      new ProperNoun('Geta'),
      new ImproperNoun('fox', 'foxes'),
      MalePronouns,
      { Toughness: 10, Power: 10, Speed: 30, Willpower: 15, Charm: 40 },
      new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]),
      new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]),
      100
    )
    this.side = Side.Monsters
    const stomach = new Stomach(this, 10, new Damage(
      { amount: 100, type: DamageType.Acid, target: Vigor.Health },
      { amount: 40, type: DamageType.Crush, target: Vigor.Stamina },
      { amount: 80, type: DamageType.Dominance, target: Vigor.Resolve }
    ))
    this.containers.push(stomach)
    const bowels = new Bowels(this, 10, new Damage(
      { amount: 30, type: DamageType.Crush, target: Vigor.Health },
      { amount: 90, type: DamageType.Crush, target: Vigor.Stamina },
      { amount: 120, type: DamageType.Dominance, target: Vigor.Resolve }
    ))
    this.containers.push(bowels)
    this.actions.push(new TransferAction(bowels, stomach))
    this.otherActions.push(new FeedAction(stomach))
    const cock = new Cock(this, 10, new Damage(
      { amount: 10, type: DamageType.Crush, target: Vigor.Health },
      { amount: 30, type: DamageType.Crush, target: Vigor.Stamina },
      { amount: 30, type: DamageType.Dominance, target: Vigor.Resolve }
    ))
    const balls = new Balls(this, 10, new Damage(
      { amount: 50, type: DamageType.Acid, target: Vigor.Health },
      { amount: 25, type: DamageType.Crush, target: Vigor.Stamina },
      { amount: 150, type: DamageType.Dominance, target: Vigor.Resolve }
    ), cock)
    this.containers.push(balls)
    this.containers.push(cock)
    biconnectContainers(cock, balls)
    const shrinkAction = new CompositionAction(
      "Shrink",
      "Zap!",
      {
        conditions: [
          new TogetherCondition()
        ],
        consequences: [
          new LogConsequence(
            (user, target) => new LogLine(`ZAP!`)
          ),
          new StatusConsequence(
            () => new SizeEffect(0.1)
          )
        ]
      }
    )
    this.actions.push(
      shrinkAction
    )
    this.otherActions.push(
      shrinkAction
    )
    const crushAction = new CompositionAction(
      "Crush",
      "Crush them like a bug underfoot",
      {
        conditions: [
          new TogetherCondition(),
          new MassRatioCondition(10)
        ],
        consequences: [
          new LogConsequence(
            (user, target) => new LogLine(
              `${user.name.capital} ${user.name.conjugate(new Verb("raise"))} ${user.pronouns.possessive} paw over ${target.name.objective}, stomping down hard and crushing the life from ${user.pronouns.possessive} prey with a sickening CRUNCH.`
            )
          ),
          new StatusConsequence(
            () => new InstantKillEffect()
          )
        ]
      }
    )
    this.actions.push(
      crushAction
    )
    this.otherActions.push(
      crushAction
    )
    const hand = new Hand(this, 10)
    this.otherContainers.push(
      hand
    )
    this.actions.push(
      new CompositionAction(
        "Grip",
        "Squeeze your prey like a grape",
        {
          conditions: [
            new ContainsCondition(hand)
          ],
          consequences: [
            new LogConsequence(
              (user, target) => new LogLine(
                `${user.name.capital} ${user.name.conjugate(new Verb("crush", "crushes"))} ${target.name.objective} in ${user.pronouns.possessive} merciless grip, breaking bones and pulping ${user.pronouns.possessive} victim with ease.`
              )
            ),
            new StatusConsequence(
              () => new InstantKillEffect()
            )
          ]
        }
      )
    )
  }
}
 |