| @@ -7,5 +7,6 @@ import { Kenzie } from './creatures/kenzie' | |||||
| import { Dragon } from './creatures/dragon' | import { Dragon } from './creatures/dragon' | ||||
| import { Shingo } from './creatures/shingo' | import { Shingo } from './creatures/shingo' | ||||
| import { Goldeneye } from './creatures/goldeneye' | 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 } | |||||
| @@ -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) | |||||
| } | |||||
| } | |||||
| @@ -8,7 +8,7 @@ import { Creature } from '../creature' | |||||
| import { DevourAction } from '../combat/actions' | import { DevourAction } from '../combat/actions' | ||||
| import { SurrenderEffect } from '../combat/effects' | import { SurrenderEffect } from '../combat/effects' | ||||
| import moment from 'moment' | import moment from 'moment' | ||||
| import { RandomAI } from '../ai' | |||||
| import { RandomAI, VoreAI } from '../ai' | |||||
| function makeParty (): Creature[] { | function makeParty (): Creature[] { | ||||
| const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, { | const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, { | ||||
| @@ -70,6 +70,11 @@ export const Town = (): Place => { | |||||
| "Streets of Sim City" | "Streets of Sim City" | ||||
| ) | ) | ||||
| const alley = new Place( | |||||
| new ImproperNoun('alley'), | |||||
| "A spooky alley" | |||||
| ) | |||||
| const westRoad = new Place( | const westRoad = new Place( | ||||
| new ImproperNoun('road'), | new ImproperNoun('road'), | ||||
| "West of town" | "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 => { | bossEncounters.forEach(encounter => { | ||||
| bosses.choices.push( | bosses.choices.push( | ||||
| new Choice( | new Choice( | ||||
| @@ -248,6 +273,7 @@ export const Town = (): Place => { | |||||
| home.biconnect(Direction.North, westAve) | home.biconnect(Direction.North, westAve) | ||||
| westAve.biconnect(Direction.West, westRoad) | westAve.biconnect(Direction.West, westRoad) | ||||
| westAve.biconnect(Direction.North, alley) | |||||
| westRoad.biconnect(Direction.South, woods) | westRoad.biconnect(Direction.South, woods) | ||||
| westRoad.biconnect(Direction.North, bosses) | westRoad.biconnect(Direction.North, bosses) | ||||
| westAve.biconnect(Direction.East, loop) | westAve.biconnect(Direction.East, loop) | ||||