@@ -1,6 +1,6 @@
import { Damage, DamageType, Actionable, Action, Vigor, DamageInstance, DamageFormula } from './combat'
import { LogLines, LogEntry, LogLine, nilLog, RandomEntry } from './interface'
import { Noun, ImproperNoun, Verb, RandomWord } from './language'
import { Noun, ImproperNoun, Verb, RandomWord, Word } from './language'
import { RubAction, DevourAction, ReleaseAction, StruggleAction, TransferAction } from './combat/actions'
import * as Words from './words'
import { Creature } from './creature'
@@ -160,6 +160,7 @@ export interface VoreContainer extends Container {
tick: (dt: number) => LogEntry;
digest: (preys: Creature[]) => LogEntry;
absorb: (preys: Creature[]) => LogEntry;
fluidName: Word;
fluidColor: string;
onDigest: (prey: Creature) => LogEntry;
@@ -175,6 +176,8 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor
digested: Array<Creature> = []
absorbed: Array<Creature> = []
abstract fluidName: Word
constructor (name: Noun, owner: Creature, voreTypes: Set<VoreType>, capacity: number, private damage: DamageFormula) {
super(name, owner, voreTypes, capacity)
@@ -203,11 +206,11 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor
}
digestLine (user: Creature, target: Creature): LogEntry {
return new LogLine(`${user.name.capital.possessive} ${this.name} ${this.name.conjugate(new Verb('finish', 'finishes'))} ${Words.Digests .present} ${target.name.objective} down, ${target.pronouns.possessive} ${Words.Struggles .singular} fading away.`)
return new LogLine(`${user.name.capital.possessive} ${this.name} ${this.name.conjugate(new Verb('finish', 'finishes'))} ${Words.Digest.present} ${target.name.objective} down, ${target.pronouns.possessive} ${Words.Struggle.singular} fading away as ${target.pronouns.subjective} ${target.pronouns.conjugate(Words.Succumb)} and ${target.pronouns.conjugate(Words.Digest)} into ${this.fluidName} .`)
}
absorbLine (user: Creature, target: Creature): LogEntry {
return new LogLine(`${user.name.capital.possessive} ${this.name} ${this.name.conjugate(new Verb('finish', 'finishes'))} ${Words.Absorbs .present} ${target.name.objective}, fully claiming ${target.pronouns.objective}.`)
return new LogLine(`${user.name.capital.possessive} ${this.name} ${this.name.conjugate(new Verb('finish', 'finishes'))} ${Words.Absorb.present} ${target.name.objective}, fully claiming ${target.pronouns.objective}.`)
}
tick (dt: number): LogEntry {
@@ -303,6 +306,8 @@ export abstract class InnerVoreContainer extends NormalVoreContainer {
}
export class Stomach extends NormalVoreContainer {
fluidName = new Noun("chyme")
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
super(new ImproperNoun('stomach', 'stomachs').all, owner, new Set([VoreType.Oral]), capacity, damage)
}
@@ -328,6 +333,8 @@ export class Stomach extends NormalVoreContainer {
}
export class InnerStomach extends InnerVoreContainer {
fluidName = new Noun("chyme")
consumeVerb = new Verb('swallow')
releaseVerb = new Verb('hork')
constructor (owner: Creature, capacity: number, damage: DamageFormula, escape: VoreContainer) {
@@ -336,6 +343,8 @@ export class InnerStomach extends InnerVoreContainer {
}
export class Bowels extends NormalVoreContainer {
fluidName = new Noun("chyme")
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
super(new ImproperNoun('bowel', 'bowels').plural.all, owner, new Set([VoreType.Anal]), capacity, damage)
}
@@ -349,6 +358,8 @@ export class Bowels extends NormalVoreContainer {
}
export class Cock extends NormalVoreContainer {
fluidName = new Noun("cum")
fluidColor = "#eeeeee66";
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
@@ -367,6 +378,8 @@ export class Cock extends NormalVoreContainer {
}
export class Balls extends InnerVoreContainer {
fluidName = new Noun("cum")
fluidColor = "#eeeeeecc";
constructor (owner: Creature, capacity: number, damage: DamageFormula, escape: Container) {
@@ -382,6 +395,8 @@ export class Balls extends InnerVoreContainer {
}
export class Slit extends NormalVoreContainer {
fluidName = new Noun("femcum")
fluidColor = "#cccccc99";
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
@@ -395,6 +410,8 @@ export class Slit extends NormalVoreContainer {
}
}
export class Womb extends InnerVoreContainer {
fluidName = new Noun("femcum")
fluidColor = "#ddddddbb";
constructor (owner: Creature, capacity: number, damage: DamageFormula, escape: Container) {
@@ -410,6 +427,8 @@ export class Womb extends InnerVoreContainer {
}
export class Breasts extends NormalVoreContainer {
fluidName = new Noun("milk")
fluidColor = "#eeeeeecc";
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
@@ -424,6 +443,8 @@ export class Breasts extends NormalVoreContainer {
}
export class Bladder extends NormalVoreContainer {
fluidName = new Noun("piss")
fluidColor = "#eeee3399";
constructor (owner: Creature, capacity: number, damage: DamageFormula) {
@@ -438,6 +459,8 @@ export class Bladder extends NormalVoreContainer {
}
export class InnerBladder extends InnerVoreContainer {
fluidName = new Noun("piss")
fluidColor = "#eeee3399";
constructor (owner: Creature, capacity: number, damage: DamageFormula, escape: Container) {