diff --git a/src/game/creatures.ts b/src/game/creatures.ts index 91939dd..52d691b 100644 --- a/src/game/creatures.ts +++ b/src/game/creatures.ts @@ -7,5 +7,6 @@ import { Kenzie } from './creatures/kenzie' import { Dragon } from './creatures/dragon' import { Shingo } from './creatures/shingo' import { Goldeneye } from './creatures/goldeneye' +import { Kuro } from './creatures/kuro' -export { Wolf, Player, Cafat, Human, Withers, Kenzie, Dragon, Shingo, Goldeneye } +export { Wolf, Player, Cafat, Human, Withers, Kenzie, Dragon, Shingo, Goldeneye, Kuro } diff --git a/src/game/creatures/kuro.ts b/src/game/creatures/kuro.ts new file mode 100644 index 0000000..501df1c --- /dev/null +++ b/src/game/creatures/kuro.ts @@ -0,0 +1,57 @@ +import { Creature } from "../creature" +import { Damage, DamageType, ConstantDamageFormula, Vigor, Side } 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' + +export class Kuro extends Creature { + constructor () { + super( + new ProperNoun('Kuro'), + new ProperNoun('Luxray'), + MalePronouns, + { Toughness: 20, Power: 30, Speed: 50, Willpower: 30, Charm: 50 }, + new Set(), + new Set([VoreType.Oral, VoreType.Anal, VoreType.Cock]), + 100 + ) + + this.side = Side.Monsters + + const stomach = new Stomach(this, 50, 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, 50, 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, 50, 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, 50, 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) + } +} diff --git a/src/game/maps/town.ts b/src/game/maps/town.ts index 56999ac..77f0a90 100644 --- a/src/game/maps/town.ts +++ b/src/game/maps/town.ts @@ -8,7 +8,7 @@ import { Creature } from '../creature' import { DevourAction } from '../combat/actions' import { SurrenderEffect } from '../combat/effects' import moment from 'moment' -import { RandomAI } from '../ai' +import { RandomAI, VoreAI } from '../ai' function makeParty (): Creature[] { const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, { @@ -70,6 +70,11 @@ export const Town = (): Place => { "Streets of Sim City" ) + const alley = new Place( + new ImproperNoun('alley'), + "A spooky alley" + ) + const westRoad = new Place( new ImproperNoun('road'), "West of town" @@ -221,6 +226,26 @@ export const Town = (): Place => { ) ) + alley.choices.push( + new Choice( + "Kuro", + "Get eaten by a Luxray", + (world, executor) => { + const enemy = new Creatures.Kuro() + enemy.ai = new VoreAI() + const encounter = new Encounter( + { + name: "Luxray time", + intro: world => new LogLine(`Luxray time!`) + }, + [world.player, enemy] + ) + world.encounter = encounter + return nilLog + } + ) + ) + bossEncounters.forEach(encounter => { bosses.choices.push( new Choice( @@ -248,6 +273,7 @@ export const Town = (): Place => { home.biconnect(Direction.North, westAve) westAve.biconnect(Direction.West, westRoad) + westAve.biconnect(Direction.North, alley) westRoad.biconnect(Direction.South, woods) westRoad.biconnect(Direction.North, bosses) westAve.biconnect(Direction.East, loop)