import { Creature } from "../creature" import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, CompositionAction } from '../combat' import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns } from '../language' import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb, biconnectContainers } 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 } 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.25) ) ] } ) 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(`CRUNCH`) ), new StatusConsequence( () => new InstantKillEffect() ) ] } ) this.actions.push( crushAction ) this.otherActions.push( crushAction ) } }