From e812c4225082d958d261eb8d95540d9781b46a35 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Mon, 3 Aug 2020 20:14:01 -0400 Subject: [PATCH] Add unbirthing; fix inner-container escapes not putting the prey in the right spot --- src/game/creatures/wolf.ts | 36 +++++++++++++++++++++++++++++++++--- src/game/vore.ts | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/game/creatures/wolf.ts b/src/game/creatures/wolf.ts index 2fa0f3d..63dc8d2 100644 --- a/src/game/creatures/wolf.ts +++ b/src/game/creatures/wolf.ts @@ -1,13 +1,21 @@ import { Creature } from "../creature" import { Damage, DamageType, ConstantDamageFormula, Vigor, Side } from '../combat' -import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns } from '../language' -import { VoreType, Stomach, Bowels, Cock, Balls } from '../vore' +import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns } from '../language' +import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb } from '../vore' import { AttackAction, TransferAction, FeedAction } from '../combat/actions' import { Human } from '../creatures' export class Wolf extends Creature { constructor () { - 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, VoreType.Cock]), new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]), 25) + super( + new ImproperNoun('wolf', 'wolves'), + new ImproperNoun('wolf', 'wolves'), + [MalePronouns, FemalePronouns, TheyPronouns][Math.floor(Math.random() * 3)], + { Toughness: 20, Power: 20, Speed: 20, Willpower: 20, Charm: 20 }, + anyVore, + anyVore, + 25 + ) this.actions.push( new AttackAction( new ConstantDamageFormula( @@ -51,7 +59,29 @@ export class Wolf extends Creature { { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } ), cock) + const slit = new Slit(this, 50, new Damage( + { amount: 30, type: DamageType.Crush, target: Vigor.Health }, + { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, + { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } + )) + + const womb = new Womb(this, 50, new Damage( + { amount: 30, type: DamageType.Crush, target: Vigor.Health }, + { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, + { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } + ), slit) + this.containers.push(balls) this.containers.push(cock) + this.containers.push(slit) + this.containers.push(womb) + + this.actions.push( + new TransferAction(cock, balls) + ) + + this.actions.push( + new TransferAction(slit, womb) + ) } } diff --git a/src/game/vore.ts b/src/game/vore.ts index 447c41b..7e1fb85 100644 --- a/src/game/vore.ts +++ b/src/game/vore.ts @@ -12,6 +12,13 @@ export enum VoreType { Unbirth = "Unbirthing" } +export const anyVore = new Set([ + VoreType.Oral, + VoreType.Anal, + VoreType.Cock, + VoreType.Unbirth +]) + export abstract class Vore extends Mortal { containers: Array = [] otherContainers: Array = [] @@ -340,6 +347,7 @@ export abstract class InnerVoreContainer extends NormalVoreContainer { release (prey: Vore): LogEntry { prey.containedIn = this.escape this.contents = this.contents.filter(victim => victim !== prey) + this.escape.consume(prey) return this.releaseLine(this.owner, prey, { container: this }) } } @@ -411,3 +419,32 @@ export class Balls extends InnerVoreContainer { ) } } + +export class Slit extends NormalVoreContainer { + fluidColor = "#cccccc99"; + + constructor (owner: Vore, capacity: number, damage: Damage) { + super( + new ImproperNoun('slit').all, + owner, + new Set([VoreType.Unbirth]), + capacity, + damage + ) + } +} + +export class Womb extends InnerVoreContainer { + fluidColor = "#ddddddbb"; + + constructor (owner: Vore, capacity: number, damage: Damage, escape: Container) { + super( + new ImproperNoun('womb').all, + owner, + new Set([VoreType.Unbirth]), + capacity, + damage, + escape + ) + } +}