| @@ -1,7 +1,6 @@ | |||
| import { Creature } from "./creature" | |||
| import { TextLike, DynText, ToBe, LiveText, PairLineArgs, PairLine } from './language' | |||
| import { TextLike } from './language' | |||
| import { LogEntry, LogLines, FAElem, LogLine, FormatEntry, FormatOpt, PropElem, nilLog, Newline } from './interface' | |||
| import { Resistances } from './entity' | |||
| import { World } from './world' | |||
| import { TestCategory } from './combat/tests' | |||
| import { VoreContainer } from './vore' | |||
| @@ -1,7 +1,7 @@ | |||
| import { Condition, Stat, Vigor, VoreStat } from "../combat" | |||
| import { Creature } from "../creature" | |||
| import { Container } from '../vore' | |||
| import { FAElem, LogEntry, LogLine, PropElem } from '../interface' | |||
| import { LogEntry, LogLine, PropElem } from '../interface' | |||
| import { ToBe, Verb } from '../language' | |||
| import * as Words from '../words' | |||
| @@ -1,4 +1,4 @@ | |||
| import { Damage, Combatant, Stats, Action, Vigor, Side, GroupAction, VisibleStatus, ImplicitStatus, StatusEffect, DamageType, Effective, VoreStat, VoreStats, DamageInstance, Stat, Vigors } from './combat' | |||
| import { Damage, Stats, Action, Vigor, Side, GroupAction, VisibleStatus, ImplicitStatus, StatusEffect, DamageType, Effective, VoreStat, VoreStats, DamageInstance, Stat, Vigors } from './combat' | |||
| import { Noun, Pronoun, SoloLine, Verb } from './language' | |||
| import { LogEntry, LogLines, LogLine } from './interface' | |||
| import { VoreContainer, VoreType, Container } from './vore' | |||
| @@ -6,7 +6,7 @@ import { LogLine, LogLines, LogEntry, FAElem, ImgElem } from '../interface' | |||
| import { AttackAction, TransferAction, FeedAction } from '../combat/actions' | |||
| import { InstantKillEffect } from '../combat/effects' | |||
| import * as Words from '../words' | |||
| import { ContainedByCondition, ContainsCondition } from '../combat/conditions' | |||
| import { ContainsCondition } from '../combat/conditions' | |||
| class BellyCrushAction extends AttackAction { | |||
| constructor (_damage: Damage) { | |||
| @@ -1,6 +1,6 @@ | |||
| import { Creature } from "../creature" | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side } from '../combat' | |||
| import { MalePronouns, ImproperNoun, FemalePronouns, Verb } from '../language' | |||
| import { ImproperNoun, FemalePronouns, Verb } from '../language' | |||
| import { VoreType, Stomach, Bowels } from '../vore' | |||
| import { AttackAction, TransferAction, FeedAction } from '../combat/actions' | |||
| @@ -1,10 +1,10 @@ | |||
| import { Creature } from "../creature" | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, CompositionAction } from '../combat' | |||
| import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns, Verb } from '../language' | |||
| import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb, biconnectContainers, Hand } from '../vore' | |||
| import { AttackAction, TransferAction, FeedAction, DevourAction } from '../combat/actions' | |||
| import { StatusConsequence, LogConsequence, DamageConsequence, ArbitraryConsequence } from '../combat/consequences' | |||
| import { SizeEffect, DamageTypeResistanceEffect, InstantKillEffect } from '../combat/effects' | |||
| import { MalePronouns, ImproperNoun, ProperNoun, Verb } from '../language' | |||
| import { VoreType, Stomach, Bowels, Cock, Balls, biconnectContainers, Hand } from '../vore' | |||
| import { TransferAction, FeedAction } from '../combat/actions' | |||
| import { StatusConsequence, LogConsequence, ArbitraryConsequence } from '../combat/consequences' | |||
| import { SizeEffect, InstantKillEffect } from '../combat/effects' | |||
| import { LogLine, nilLog } from '../interface' | |||
| import { TogetherCondition, MassRatioCondition, ContainsCondition } from '../combat/conditions' | |||
| import { ChanceTest } from '../combat/tests' | |||
| @@ -78,8 +78,8 @@ export class Geta extends Creature { | |||
| () => new InstantKillEffect() | |||
| ), | |||
| new ArbitraryConsequence( | |||
| (user, target) => cock.tick(0), | |||
| (user, target) => nilLog | |||
| () => cock.tick(0), | |||
| () => nilLog | |||
| ) | |||
| ] | |||
| } | |||
| @@ -97,7 +97,7 @@ export class Geta extends Creature { | |||
| biconnectContainers(cock, balls) | |||
| cock.onDigest = (prey) => nilLog | |||
| cock.onDigest = () => nilLog | |||
| const shrinkAction = new CompositionAction( | |||
| "Shrink", | |||
| @@ -108,7 +108,7 @@ export class Geta extends Creature { | |||
| ], | |||
| consequences: [ | |||
| new LogConsequence( | |||
| (user, target) => new LogLine(`ZAP!`) | |||
| () => new LogLine(`ZAP!`) | |||
| ), | |||
| new StatusConsequence( | |||
| () => new SizeEffect(0.1) | |||
| @@ -170,7 +170,7 @@ export class Geta extends Creature { | |||
| consequences: [ | |||
| new ArbitraryConsequence( | |||
| (user, target) => stomach.consume(target), | |||
| (user, target) => new LogLine(`Devours the target.`) | |||
| () => new LogLine(`Devours the target.`) | |||
| ) | |||
| ] | |||
| } | |||
| @@ -1,11 +1,11 @@ | |||
| import { Creature } from "../creature" | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, GroupAction, FractionDamageFormula, DamageFormula, UniformRandomDamageFormula, CompositionAction, StatusEffect, CompositeDamageFormula } from '../combat' | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, GroupAction, FractionDamageFormula, DamageFormula, UniformRandomDamageFormula, CompositionAction, CompositeDamageFormula } from '../combat' | |||
| import { MalePronouns, ImproperNoun, Verb, ProperNoun, ToBe, SoloLineArgs, Noun } from '../language' | |||
| import { VoreType, NormalContainer, InnerVoreContainer, Container } from '../vore' | |||
| import { TransferAction } from '../combat/actions' | |||
| import { LogEntry, LogLine, LogLines } from '../interface' | |||
| import { ContainerFullCondition, CapableCondition, EnemyCondition, TogetherCondition } from '../combat/conditions' | |||
| import { UntouchableEffect, DazzlingEffect, StunEffect } from '../combat/effects' | |||
| import { DazzlingEffect, StunEffect } from '../combat/effects' | |||
| import { DamageConsequence, StatusConsequence, LogConsequence } from '../combat/consequences' | |||
| class GoldeneyeCrop extends NormalContainer { | |||
| @@ -1,7 +1,7 @@ | |||
| import { Creature } from "../creature" | |||
| import { Vigor, Stats, Vigors, CompositionAction } from '../combat' | |||
| import { Noun, Pronoun, ImproperNoun } from '../language' | |||
| import { anyVore, VoreType } from '../vore' | |||
| import { anyVore } from '../vore' | |||
| import { StatusConsequence } from '../combat/consequences' | |||
| import { SurrenderEffect } from '../combat/effects' | |||
| import { SoloCondition } from '../combat/conditions' | |||
| @@ -1,8 +1,8 @@ | |||
| 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' | |||
| import { MalePronouns, ProperNoun } from '../language' | |||
| import { VoreType, Stomach, Bowels, Cock, Balls, biconnectContainers } from '../vore' | |||
| import { TransferAction, FeedAction } from '../combat/actions' | |||
| export class Kuro extends Creature { | |||
| constructor () { | |||
| @@ -1,5 +1,5 @@ | |||
| import { Creature } from "../creature" | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||
| import { DamageType, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||
| import { MalePronouns, ImproperNoun, Verb } from '../language' | |||
| import { Stomach, Bowels, Cock, Balls, anyVore, biconnectContainers } from '../vore' | |||
| import { AttackAction, TransferAction, FeedAction } from '../combat/actions' | |||
| @@ -1,8 +1,8 @@ | |||
| import { Creature } from "../creature" | |||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||
| import { DamageType, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||
| import { MalePronouns, ImproperNoun, FemalePronouns, TheyPronouns, Verb } from '../language' | |||
| import { Stomach, Bowels, anyVore } from '../vore' | |||
| import { AttackAction, TransferAction } from '../combat/actions' | |||
| import { Stomach, anyVore } from '../vore' | |||
| import { AttackAction } from '../combat/actions' | |||
| import { VoreAI } from '../ai' | |||
| import { RavenousPerk } from '../combat/perks' | |||
| @@ -1,6 +1,5 @@ | |||
| import { DamageType, Damage, Stats, Vigor, VoreStats, VoreStat, Stat, Vigors, DamageInstance } from './combat' | |||
| import { DamageType } from './combat' | |||
| import { Noun, Pronoun, TextLike, POV, PronounAsNoun, FirstPersonPronouns, SecondPersonPronouns } from './language' | |||
| import { LogEntry, LogLine } from './interface' | |||
| import { Place, Nowhere } from './world' | |||
| export abstract class Entity { | |||
| @@ -1,9 +1,9 @@ | |||
| import { TextLike, LiveText, DynText, Word, ImproperNoun, Verb, Noun } from './language' | |||
| import { Actionable, Action, DamageFormula, ConstantDamageFormula, Damage, DamageType, Vigor, StatDamageFormula, Stat, Effective, CompositionAction, Condition, CompositeDamageFormula, Consequence, StatusEffect } from './combat' | |||
| import { TextLike, DynText, Word, ImproperNoun, Verb, Noun } from './language' | |||
| import { Actionable, Action, DamageFormula, ConstantDamageFormula, Damage, DamageType, Vigor, StatDamageFormula, Stat, Effective, CompositionAction, CompositeDamageFormula, Consequence } from './combat' | |||
| import { AttackAction } from './combat/actions' | |||
| import { Resistances } from './entity' | |||
| import { DamageTypeResistanceEffect, DigestionPowerEffect, SizeEffect, StatEffect } from './combat/effects' | |||
| import { DamageConsequence, LogConsequence, HealingConsequence, StatusConsequence, ArbitraryConsequence } from './combat/consequences' | |||
| import { LogConsequence, HealingConsequence, StatusConsequence } from './combat/consequences' | |||
| import { SoloCondition } from './combat/conditions' | |||
| import { LogLine, LogEntry } from './interface' | |||
| import { Creature } from './creature' | |||
| @@ -206,7 +206,7 @@ export abstract class Potion extends Consumable { | |||
| ], | |||
| consequences: ([ | |||
| new LogConsequence( | |||
| (user, target) => new LogLine(`${user.name.capital} ${user.name.conjugate(new Verb('drink'))} a ${name}.`) | |||
| (user) => new LogLine(`${user.name.capital} ${user.name.conjugate(new Verb('drink'))} a ${name}.`) | |||
| ) | |||
| ] as Consequence[]).concat(consequences) | |||
| } | |||
| @@ -249,7 +249,7 @@ export class StrengthPotion extends Potion { | |||
| "Power up!", | |||
| [ | |||
| new StatusConsequence( | |||
| (user, target) => new StatEffect(Stat.Power, 0, 1.5) | |||
| () => new StatEffect(Stat.Power, 0, 1.5) | |||
| ) | |||
| ] | |||
| ) | |||
| @@ -263,7 +263,7 @@ export class AcidPotion extends Potion { | |||
| "Boosts your digestive power", | |||
| [ | |||
| new StatusConsequence( | |||
| (user, target) => new DigestionPowerEffect(2) | |||
| () => new DigestionPowerEffect(2) | |||
| ) | |||
| ] | |||
| ) | |||
| @@ -277,7 +277,7 @@ export class ShrinkPotion extends Potion { | |||
| "Drink me!", | |||
| [ | |||
| new StatusConsequence( | |||
| (user, target) => new SizeEffect(0.5) | |||
| () => new SizeEffect(0.5) | |||
| ) | |||
| ] | |||
| ) | |||
| @@ -1,5 +1,4 @@ | |||
| import { Entity } from './entity' | |||
| import { LogEntry, LogLine } from './interface' | |||
| import { LogEntry } from './interface' | |||
| export enum POV {First, Second, Third} | |||
| @@ -303,7 +302,7 @@ export class Noun extends Word { | |||
| } | |||
| export class ImproperNoun extends Noun { | |||
| constructor (singularNoun: string, pluralNoun: string = singularNoun, possessiveNoun: string = singularNoun + "'s") { | |||
| constructor (singularNoun: string, pluralNoun: string = singularNoun) { | |||
| super(singularNoun, pluralNoun, null, { plural: false, allCaps: false, capital: false, proper: false, nounKind: NounKind.Specific, verbKind: VerbKind.Root, vowel: VowelSound.Default, count: true, possessive: false, objective: false, perspective: POV.Third }) | |||
| } | |||
| } | |||
| @@ -1,5 +1,5 @@ | |||
| import { Place, Choice, Direction, World } from '../world' | |||
| import { ProperNoun, ImproperNoun, MalePronouns, FemalePronouns, TheyPronouns, LiveText } from '../language' | |||
| import { ProperNoun, ImproperNoun, MalePronouns, FemalePronouns, TheyPronouns } from '../language' | |||
| import { Encounter, Stat, Damage, DamageType, Vigor, Side } from '../combat' | |||
| import * as Creatures from '../creatures' | |||
| import * as Items from '../items' | |||
| @@ -128,7 +128,7 @@ export const Town = (): Place => { | |||
| world.encounter = new Encounter( | |||
| { | |||
| name: "You punched a wolf", | |||
| intro: (world: World) => new LogLine(`You punched a wolf. The wolf is angry.`) | |||
| intro: () => new LogLine(`You punched a wolf. The wolf is angry.`) | |||
| }, | |||
| [executor, new Creatures.Wolf()] | |||
| ) | |||
| @@ -146,7 +146,7 @@ export const Town = (): Place => { | |||
| world.encounter = new Encounter( | |||
| { | |||
| name: "You punched a dire wolf", | |||
| intro: (world: World) => new LogLine(`You punched a dire wolf. The wolf is angry.`) | |||
| intro: () => new LogLine(`You punched a dire wolf. The wolf is angry.`) | |||
| }, | |||
| [executor, new Creatures.DireWolf()] | |||
| ) | |||
| @@ -164,7 +164,7 @@ export const Town = (): Place => { | |||
| world.encounter = new Encounter( | |||
| { | |||
| name: "You punched a werewolf", | |||
| intro: (world: World) => new LogLine(`You punched a werewolf. The werewolf is angry.`) | |||
| intro: () => new LogLine(`You punched a werewolf. The werewolf is angry.`) | |||
| }, | |||
| [executor, new Creatures.Werewolf()] | |||
| ) | |||
| @@ -182,7 +182,7 @@ export const Town = (): Place => { | |||
| world.encounter = new Encounter( | |||
| { | |||
| name: "You punched a dragon", | |||
| intro: (world: World) => new LogLine(`You punched a dragon. The dragon is angry.`) | |||
| intro: () => new LogLine(`You punched a dragon. The dragon is angry.`) | |||
| }, | |||
| [executor, new Creatures.Dragon()] | |||
| ) | |||
| @@ -194,19 +194,19 @@ export const Town = (): Place => { | |||
| const bossEncounters = [ | |||
| new Encounter( | |||
| { name: "Withers & Kenzie", intro: (world: World) => nilLog }, | |||
| { name: "Withers & Kenzie", intro: () => nilLog }, | |||
| makeParty().concat([new Creatures.Withers(), new Creatures.Kenzie()]) | |||
| ), | |||
| new Encounter( | |||
| { name: "Goldeneye", intro: (world: World) => nilLog }, | |||
| { name: "Goldeneye", intro: () => nilLog }, | |||
| makeParty().concat([new Creatures.Goldeneye()]) | |||
| ), | |||
| new Encounter( | |||
| { name: "Large Wah", intro: (world: World) => nilLog }, | |||
| { name: "Large Wah", intro: () => nilLog }, | |||
| makeParty().concat([new Creatures.Shingo()]) | |||
| ), | |||
| new Encounter( | |||
| { name: "Cafat", intro: (world: World) => nilLog }, | |||
| { name: "Cafat", intro: () => nilLog }, | |||
| makeParty().concat([new Creatures.Cafat()]) | |||
| ) | |||
| ] | |||
| @@ -215,7 +215,7 @@ export const Town = (): Place => { | |||
| new Choice( | |||
| "Nap", | |||
| "Zzzzzz", | |||
| (world, executor) => { | |||
| (world) => { | |||
| return new LogLines( | |||
| `You lie down for a nice nap...`, | |||
| world.advance(moment.duration(1, "hour")) | |||
| @@ -275,7 +275,7 @@ export const Town = (): Place => { | |||
| new Choice( | |||
| "Fight someone", | |||
| "Ow", | |||
| (world, executor) => { | |||
| (world) => { | |||
| const enemy = new Creatures.Human(new ProperNoun("Nerd"), TheyPronouns) | |||
| enemy.side = Side.Monsters | |||
| enemy.ai = new VoreAI() | |||
| @@ -284,7 +284,7 @@ export const Town = (): Place => { | |||
| const encounter = new Encounter( | |||
| { | |||
| name: "Fight some tasty nerd", | |||
| intro: world => new LogLine(`You find some nerd to fight.`) | |||
| intro: () => new LogLine(`You find some nerd to fight.`) | |||
| }, | |||
| [world.player, enemy] | |||
| ) | |||
| @@ -302,7 +302,7 @@ export const Town = (): Place => { | |||
| world.encounter = new Encounter( | |||
| { | |||
| name: "You punched Geta", | |||
| intro: (world: World) => new LogLine(`You punched Geta. Geta is angry.`) | |||
| intro: () => new LogLine(`You punched Geta. Geta is angry.`) | |||
| }, | |||
| [executor, new Creatures.Geta()] | |||
| ) | |||
| @@ -335,13 +335,13 @@ export const Town = (): Place => { | |||
| new Choice( | |||
| "Kuro", | |||
| "Get eaten by a Luxray", | |||
| (world, executor) => { | |||
| (world) => { | |||
| const enemy = new Creatures.Kuro() | |||
| enemy.ai = new VoreAI() | |||
| const encounter = new Encounter( | |||
| { | |||
| name: "Luxray time", | |||
| intro: world => new LogLine(`Luxray time!`) | |||
| intro: () => new LogLine(`Luxray time!`) | |||
| }, | |||
| [world.player, enemy] | |||
| ) | |||
| @@ -356,7 +356,7 @@ export const Town = (): Place => { | |||
| new Choice( | |||
| encounter.desc.name, | |||
| "Boss fight!", | |||
| (world, executor) => { | |||
| (world) => { | |||
| world.encounter = encounter | |||
| return nilLog | |||
| } | |||
| @@ -1,8 +1,7 @@ | |||
| import { TextLike, Verb, Noun, ProperNoun } from './language' | |||
| import { Entity } from './entity' | |||
| import { Creature } from './creature' | |||
| import moment, { Moment, Duration } from 'moment' | |||
| import { LogEntry, LogLine, LogLines } from './interface' | |||
| import { LogEntry, LogLines } from './interface' | |||
| import { Encounter } from './combat' | |||
| export enum Direction { | |||
| @@ -34,11 +33,11 @@ export class Choice { | |||
| } | |||
| visible (world: World): boolean { | |||
| visible (): boolean { | |||
| return true | |||
| } | |||
| accessible (world: World): boolean { | |||
| accessible (): boolean { | |||
| return true | |||
| } | |||
| } | |||
| @@ -48,11 +47,11 @@ export class Connection { | |||
| } | |||
| visible (world: World, traveler: Creature): boolean { | |||
| visible (): boolean { | |||
| return true | |||
| } | |||
| accessible (world: World, traveler: Creature): boolean { | |||
| accessible (): boolean { | |||
| return true | |||
| } | |||